]> git.decadent.org.uk Git - dak.git/commitdiff
Merge branch 'master' of ssh://ftp-master.debian.org/srv/ftp.debian.org/git/dak
authorAlexander Reichle-Schmehl <alexander@schmehl.info>
Tue, 31 May 2011 09:33:35 +0000 (09:33 +0000)
committerAlexander Reichle-Schmehl <alexander@schmehl.info>
Tue, 31 May 2011 09:33:35 +0000 (09:33 +0000)
176 files changed:
config/backports/apt.conf
config/backports/common
config/backports/cron.daily
config/backports/cron.dinstall
config/backports/cron.hourly
config/backports/cron.unchecked
config/backports/dak.conf
config/backports/dinstall.functions
config/backports/vars
config/debian-security/apache.conf [new file with mode: 0644]
config/debian-security/apt.conf
config/debian-security/apt.conf.buildd
config/debian-security/cron.buildd
config/debian-security/cron.daily
config/debian-security/cron.hourly [new file with mode: 0755]
config/debian-security/cron.unchecked
config/debian-security/cron.weekly
config/debian-security/dak.conf
config/debian-security/dak.conf-etc [new file with mode: 0644]
config/debian-security/export.sh [new file with mode: 0755]
config/debian-security/make-mirror.sh [new file with mode: 0755]
config/debian-security/map.sh
config/debian-security/vars
config/debian/apache.conf-incoming
config/debian/apt.conf
config/debian/apt.conf.oldstable [deleted file]
config/debian/apt.conf.stable [deleted file]
config/debian/common
config/debian/cron.daily
config/debian/cron.dinstall
config/debian/cron.hourly
config/debian/cron.monthly
config/debian/cron.unchecked
config/debian/cron.weekly
config/debian/dak.conf
config/debian/dak.conf-etc
config/debian/dinstall.functions
config/debian/vars
config/homedir/.bashrc
config/homedir/syncdd.sh [new file with mode: 0755]
dak/admin.py
dak/check_overrides.py
dak/clean_queues.py
dak/clean_suites.py
dak/contents.py
dak/control_overrides.py
dak/control_suite.py
dak/copy_installer.py [new file with mode: 0755]
dak/cruft_report.py
dak/dak.py
dak/dakdb/update22.py
dak/dakdb/update41.py [new file with mode: 0755]
dak/dakdb/update42.py [new file with mode: 0755]
dak/dakdb/update43.py [new file with mode: 0755]
dak/dakdb/update44.py [new file with mode: 0755]
dak/dakdb/update45.py [new file with mode: 0755]
dak/dakdb/update46.py [new file with mode: 0755]
dak/dakdb/update47.py [new file with mode: 0755]
dak/dakdb/update48.py [new file with mode: 0755]
dak/dakdb/update49.py [new file with mode: 0755]
dak/dakdb/update50.py [new file with mode: 0755]
dak/dakdb/update51.py [new file with mode: 0755]
dak/dakdb/update52.py [new file with mode: 0755]
dak/dakdb/update53.py [new file with mode: 0755]
dak/dakdb/update54.py [new file with mode: 0755]
dak/dakdb/update55.py [new file with mode: 0755]
dak/dakdb/update56.py [new file with mode: 0755]
dak/dakdb/update57.py [new file with mode: 0755]
dak/dakdb/update58.py [new file with mode: 0755]
dak/dakdb/update59.py [new file with mode: 0755]
dak/dakdb/update60.py [new file with mode: 0755]
dak/dominate.py
dak/examine_package.py
dak/external_overrides.py [new file with mode: 0755]
dak/generate_filelist.py
dak/generate_index_diffs.py
dak/generate_packages_sources.py
dak/generate_packages_sources2.py [new file with mode: 0755]
dak/generate_releases.py
dak/graph.py [new file with mode: 0755]
dak/import_keyring.py
dak/ls.py
dak/make_changelog.py
dak/make_maintainers.py
dak/manage_build_queues.py
dak/metadata.py [new file with mode: 0755]
dak/new_security_install.py
dak/override.py
dak/override_disparity.py [new file with mode: 0755]
dak/process_new.py
dak/process_policy.py
dak/process_upload.py
dak/queue_report.py
dak/show_deferred.py
dak/show_new.py
dak/split_done.py
dak/update_db.py
daklib/binary.py [deleted file]
daklib/changes.py
daklib/config.py
daklib/contents.py [new file with mode: 0755]
daklib/cruft.py [new file with mode: 0644]
daklib/daklog.py
daklib/dakmultiprocessing.py [new file with mode: 0644]
daklib/dbconn.py
daklib/filewriter.py [new file with mode: 0755]
daklib/gpg.py [new file with mode: 0644]
daklib/lists.py [new file with mode: 0755]
daklib/metadata.py [new file with mode: 0755]
daklib/queue.py
daklib/queue_install.py
daklib/regexes.py
daklib/summarystats.py
daklib/threadpool.py
daklib/utils.py
docs/README.first
docs/README.quotes
docs/README.stable-point-release
scripts/debian/buildd-add-keys [new file with mode: 0755]
scripts/debian/buildd-prepare-dir [new file with mode: 0755]
scripts/debian/buildd-remove-keys [new file with mode: 0755]
scripts/debian/byhand-di
scripts/debian/byhand-tag
scripts/debian/byhand-task
scripts/debian/byhand-win32-loader [new file with mode: 0755]
scripts/debian/ddtp-i18n-check.sh
scripts/debian/expire_dumps
scripts/debian/import_dataset.sh
scripts/debian/rrd-release-freeze-dates [new file with mode: 0644]
scripts/debian/update-bugdoctxt
scripts/debian/update-ftpstats
scripts/debian/update-mailingliststxt
scripts/debian/update-mirrorlists
scripts/debian/update-pseudopackages.sh
scripts/nfu/get-w-b-db
templates/rm.bug-close
templates/rm.bug-close-related
tests/base_test.py
tests/create_pickle_file.py [new file with mode: 0755]
tests/db_test.py [new file with mode: 0644]
tests/dbtest_all.py [new file with mode: 0755]
tests/dbtest_contents.py [new file with mode: 0755]
tests/dbtest_cruft.py [new file with mode: 0755]
tests/dbtest_debversion.py [new file with mode: 0755]
tests/dbtest_fingerprint.py [new file with mode: 0755]
tests/dbtest_metadata.py [new file with mode: 0755]
tests/dbtest_multiproc.py [new file with mode: 0755]
tests/dbtest_ormobject.py [new file with mode: 0755]
tests/dbtest_packages.py [new file with mode: 0755]
tests/dbtest_session.py [new file with mode: 0755]
tests/dbtest_timestamps.py [new file with mode: 0755]
tests/dbtest_validation.py [new file with mode: 0755]
tests/fixtures/changes/two-beginnings.changes [new file with mode: 0644]
tests/fixtures/dak.conf
tests/fixtures/db-metadata-0.5.2.pkl [new file with mode: 0644]
tests/fixtures/db-metadata-0.6.3.pkl [new file with mode: 0644]
tests/fixtures/ftp/dists/proposed-updates/main/.keepme [new file with mode: 0644]
tests/fixtures/ftp/dists/stable/main/.keepme [new file with mode: 0644]
tests/fixtures/ftp/dists/testing/main/installer-i386/20110106/something [new file with mode: 0644]
tests/fixtures/ftp/dists/unstable/main/installer-amd64/20110106/somedir/file [new file with mode: 0644]
tests/fixtures/ftp/dists/unstable/main/installer-amd64/20110106/something [new file with mode: 0644]
tests/fixtures/ftp/dists/unstable/main/installer-i386/20110106/somedir/file [new file with mode: 0644]
tests/fixtures/ftp/dists/unstable/main/installer-i386/20110106/something [new file with mode: 0644]
tests/fixtures/ftp/pool/main/h/hello/hello_2.2-1.debian.tar.gz [new file with mode: 0644]
tests/fixtures/ftp/pool/main/h/hello/hello_2.2-1.dsc [new file with mode: 0644]
tests/fixtures/ftp/pool/main/h/hello/hello_2.2-1_i386.deb [new file with mode: 0644]
tests/fixtures/ftp/pool/main/h/hello/hello_2.2.orig.tar.gz [new file with mode: 0644]
tests/test_copy_installer.py [new file with mode: 0755]
tests/test_multiprocessing.py [new file with mode: 0755]
tests/test_parse_changes.py
tools/debianqueued-0.9/config
tools/debianqueued-0.9/config-backports
tools/debianqueued-0.9/config-security
tools/debianqueued-0.9/config-upload
tools/debianqueued-0.9/debianqueued
tools/queue_rss.py

index b49e266278287abe361810a85994964a7c7776bc..0b17a106d3a788fc7cde11e59052d00120e0f325 100644 (file)
@@ -59,7 +59,7 @@ tree "dists/squeeze-backports"
    FileList "/srv/backports-master.debian.org/database/dists/squeeze-backports_$(SECTION)_binary-$(ARCH).list";
    SourceFileList "/srv/backports-master.debian.org/database/dists/squeeze-backports_$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "alpha amd64 arm armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc source";
+   Architectures "amd64 armel i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc source";
    BinOverride "override.squeeze-backports.$(SECTION)";
    ExtraOverride "override.squeeze-backports.extra.$(SECTION)";
    SrcOverride "override.squeeze-backports.$(SECTION).src";
@@ -69,7 +69,7 @@ tree "dists/squeeze-backports/main"
 {
    FileList "/srv/backports-master.debian.org/database/dists/squeeze-backports_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "alpha amd64 arm armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc source";
+   Architectures "amd64 armel i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc source";
    BinOverride "override.squeeze-backports.main.$(SECTION)";
    SrcOverride "override.squeeze-backports.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
index 2c7b76ba366b320a074dab046bc963480ae5b7a6..050f506a65753c625b4165ed8ec8bbe5cc4d9cff 100644 (file)
@@ -101,3 +101,9 @@ function reports() {
 #    dak cruft-report -s experimental >> $webdir/cruft-report-daily.txt
     cat $webdir/cruft-report-daily.txt | mail -e -s "Debian archive cruft report for $(date +%D)" team@backports.debian.org
 }
+
+function pg_timestamp() {
+    tsname=${1:-"unknown"}
+    log "Saving postgres transaction id for ${tsname}"
+    psql -tAc 'select txid_current();' > $base/backup/txid_${tsname}_$(date +%Y.%m.%d-%H:%M:%S)
+}
index 3fcde2c06cd0ee2058f6a7060c61ae1b5df2ecfc..9175222337df86b37a47f68d1590a5b491ecffdb 100755 (executable)
@@ -13,7 +13,7 @@ dak clean-suites -m 10000
 dak clean-queues
 
 # Send a report on NEW/BYHAND packages
-dak queue-report | mail -e -s "NEW and BYHAND on $(date +%D)" team@backports.debian.org
+dak queue-report -d new,proposedupdates | mail -e -s "NEW and BYHAND on $(date +%D)" team@backports.debian.org
 # and one on crufty packages
 
 dak cruft-report > $webdir/cruft-report-daily.txt
index c5c123adfb61655139a600275a726f9b3e0c9fef..33d4bc70230c93bcddf47ce860766784cd35a03c 100755 (executable)
@@ -179,9 +179,9 @@ GO=(
 stage $GO
 
 GO=(
-    FUNC="pgdump_pre"
+    FUNC="pg_timestamp"
     TIME="pg_dump1"
-    ARGS=""
+    ARGS="predinstall"
     ERR=""
 )
 stage $GO
@@ -189,6 +189,14 @@ stage $GO
 lockfile "$LOCK_ACCEPTED"
 lockfile "$LOCK_NEW"
 
+GO=(
+    FUNC="punew"
+    TIME="p-u-new"
+    ARGS="proposedupdates"
+    ERR="false"
+)
+stage $GO
+
 GO=(
     FUNC="newstage"
     TIME="newstage"
@@ -300,14 +308,6 @@ GO=(
 )
 stage $GO
 
-GO=(
-    FUNC="mkuploaders"
-    TIME="mkuploaders"
-    ARGS=""
-    ERR=""
-)
-stage $GO
-
 GO=(
     FUNC="copyoverrides"
     TIME="copyoverrides"
@@ -348,9 +348,17 @@ ts "locked part finished"
 state "postlock"
 
 GO=(
-    FUNC="pgdump_post"
-    TIME="pg_dump2"
+    FUNC="changelogs"
+    TIME="changelogs"
     ARGS=""
+    ERR="false"
+)
+stage $GO &
+
+GO=(
+    FUNC="pg_timestamp"
+    TIME="pg_dump2"
+    ARGS="postdinstall"
     ERR=""
 )
 stage $GO &
@@ -390,8 +398,8 @@ stage $GO &
 rm -f "${LOCK_BRITNEY}"
 
 GO=(
-    FUNC="compress"
-    TIME="compress"
+    FUNC="cleantransactions"
+    TIME=""
     ARGS=""
     ERR=""
 )
@@ -405,6 +413,9 @@ stage $GO &
 # )
 # stage $GO
 
+# we need to wait for the background processes before the end of dinstall
+wait
+
 log "Daily cron scripts successful, all done"
 
 exec > "$logdir/afterdinstall.log" 2>&1
index 5cca477ce7165f5f04ab276c060e4aa32c4a2591..f973606ec28e52f6fea081fe3b6d715e9963366b 100755 (executable)
@@ -1,4 +1,4 @@
-#! /bin/sh
+#! /bin/bash
 #
 # Executed hourly via cron, out of dak's crontab.
 
@@ -10,8 +10,9 @@ export SCRIPTVARS=/srv/backports-master.debian.org/dak/config/backports/vars
 
 dak import-users-from-passwd
 dak queue-report -n > $webdir/new.html
-dak queue-report -8 -d new,byhand,proposedupdates,oldproposedupdates
-#dak show-deferred > ${webdir}/deferred.html
+dak queue-report -8 -d new,byhand,proposedupdates,oldproposedupdates -r $webdir/stat
+#dak show-deferred -r $webdir/stat > ${webdir}/deferred.html
+dak graph -n new,byhand,proposedupdates,oldproposedupdates,deferred -r $webdir/stat -i $webdir/stat -x $scriptsdir/rrd-release-freeze-dates
 dak show-new > /dev/null
 
 # cd $webdir
@@ -24,3 +25,19 @@ dak show-new > /dev/null
 $base/dak/tools/removals.pl $configdir/removalsrss.rc > $webdir/removals.rss
 
 #$scriptsdir/generate-di
+
+# do the buildd key updates
+BUILDDFUN=$(mktemp -p "${TMPDIR}" BUILDDFUN.XXXXXX)
+exec >> "${BUILDDFUN}" 2>&1
+#${scriptsdir}/buildd-remove-keys
+#${scriptsdir}/buildd-add-keys
+#${scriptsdir}/buildd-prepare-dir
+for keyring in $(dak admin k list-binary); do
+    dak import-keyring --generate-users "%s" ${keyring}
+done
+exec >>/dev/null 2>&1
+
+DATE=$(date -Is)
+cat "${BUILDDFUN}" | mail -a "X-Debian: DAK" -e -s "[$(hostname -s)] Buildd key changes ${DATE}" buildd-keys@ftp-master.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
+
+rm -f "${BUILDDFUN}"
index 08fcbf3eec2ade9573cdbd3ccac4e6dba8928dda..46f30e07c8655a758c9db6bb97c5b3ed5ad3d1fb 100755 (executable)
@@ -78,7 +78,6 @@ function do_buildd () {
 function do_dists () {
     cd $configdir
     dak generate-filelist
-    GZIP='--rsyncable' ; export GZIP
     dak generate-packages-sources
 }
 
index 10dacd3f39ed885407f2fa991d593b0180c70aec..020a9963fa1e5afb5441e5a23132bd3a4f5b1cb1 100644 (file)
@@ -111,7 +111,7 @@ Import-Users-From-Passwd
   // The Primary GID of your users. Using uma it is the gid from group users.
   ValidGID "800";
   // Comma separated list of users who are in Postgres but not the passwd file
-  KnownPostgres "postgres,katie,dak,www-data,qa,guest";
+  KnownPostgres "postgres,katie,dak,www-data,qa,guest,repuser";
 };
 
 Queue-Report
@@ -211,6 +211,7 @@ Dir
 {
   Root "/srv/backports-master.debian.org/ftp/";
   Pool "/srv/backports-master.debian.org/ftp/pool/";
+  Export "/srv/backports-master.debian.org/export/";
   Templates "/srv/backports-master.debian.org/dak/templates/";
   PoolRoot "pool/";
   Lists "/srv/backports-master.debian.org/database/dists/";
@@ -242,16 +243,20 @@ Dir
 
 DB
 {
-  Name "backports";
-  Host "";
-  Port -1;
+  Service "backports";
+  // PoolSize should be at least ThreadCount + 1
+  PoolSize 5;
+  // MaxOverflow shouldn't exceed postgresql.conf's max_connections - PoolSize
+  MaxOverflow 13;
+  // should be false for encoding == SQL_ASCII
+  Unicode "false"
 };
 
 SuiteMappings
 {
  "map lenny lenny-backports";
  "map lenny-bpo lenny-backports";
- "map lenny-bpo-sloppy lenny-backports";
+ "map lenny-bpo-sloppy lenny-backports-sloppy";
  "map squeeze squeeze-backports";
  "map squeeze-bpo squeeze-backports";
 };
@@ -431,3 +436,25 @@ Changelogs
 {
   Export "/srv/backports-master.debian.org/export/changelogs";
 }
+
+Generate-Releases
+{
+  MD5Sum
+  {
+    lenny-backports;
+    lenny-backports-sloppy;
+    squeeze-backports;
+  };
+  SHA1
+  {
+    lenny-backports;
+    lenny-backports-sloppy;
+    squeeze-backports;
+  };
+  SHA256
+  {
+    lenny-backports;
+    lenny-backports-sloppy;
+    squeeze-backports;
+  };
+}
index 6e436f8bcf65a2faf944278a5702452357c34469..d02f9c37bc3a45fa0a36f005fb963dff72b62243 100644 (file)
@@ -22,53 +22,21 @@ function onerror() {
     fi
     subject="${subject} dinstall error at ${ERRDATE} in ${STAGEFILE} - (Be quiet, Brain, or I'll stab you with a Q-tip)"
 
-    cat "${STAGEFILE}.log" | mail -s "${subject}" -a "X-Debian: DAK" cron@backports.debian.org
+    if [ -r "${STAGEFILE}.log" ]; then
+        cat "${STAGEFILE}.log"
+    else
+        echo  "file ${STAGEFILE}.log does not exist, sorry"
+    fi | mail -s "${subject}" -a "X-Debian: DAK" cron@backports.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
 }
 
 ########################################################################
 # the actual dinstall functions follow                                 #
 ########################################################################
 
-# pushing merkels QA user, part one
-function merkel1() {
-    log "Telling merkels QA user that we start dinstall"
-    ssh -2 -i ~dak/.ssh/push_merkel_qa  -o BatchMode=yes -o SetupTimeOut=90 -o ConnectTimeout=90 qa@merkel.debian.org sleep 1
-}
-
-# Create the postgres dump files
-function pgdump_pre() {
-    log "Creating pre-daily-cron-job backup of $PGDATABASE database..."
-    pg_dump > $base/backup/dump_pre_$(date +%Y.%m.%d-%H:%M:%S)
-}
-
-function pgdump_post() {
-    log "Creating post-daily-cron-job backup of $PGDATABASE database..."
-    cd $base/backup
-    POSTDUMP=$(date +%Y.%m.%d-%H:%M:%S)
-    pg_dump > $base/backup/dump_$POSTDUMP
-    #pg_dumpall --globals-only > $base/backup/dumpall_$POSTDUMP
-    ln -sf $base/backup/dump_$POSTDUMP current
-    #ln -sf $base/backup/dumpall_$POSTDUMP currentall
-}
-
-# Load the dak-dev projectb
-function pgdakdev() {
-    # Make sure to unset any possible psql variables so we don't drop the wrong
-    # f****** database by accident
-    local PGDATABASE
-    unset PGDATABASE
-    local PGHOST
-    unset PGHOST
-    local PGPORT
-    unset PGPORT
-    local PGUSER
-    unset PGUSER
-    cd $base/backup
-    echo "drop database projectb" | psql -p 5434 template1
-       #cat currentall | psql -p 5433 template1
-    createdb -p 5434 -T template1 projectb
-    fgrep -v '\connect' current | psql -p 5434 projectb
-}
+function qa1() {
+    log "Telling QA user that we start dinstall"
+    ssh -2 -i ~dak/.ssh/push_merkel_qa  -o BatchMode=yes -o SetupTimeOut=90 -o ConnectTimeout=90 qa@qa.debian.org sleep 1
+ }
 
 # Updating various files
 function updates() {
@@ -83,7 +51,7 @@ function updates() {
 # Process (oldstable)-proposed-updates "NEW" queue
 function punew_do() {
     date -u -R >> REPORT
-    dak process-policy $1 | tee -a REPORT | mail -e -s "NEW changes in $1" debian-release@lists.debian.org
+    dak process-policy $1 | tee -a REPORT | mail -a "X-Debian: DAK" -e -s "NEW changes in $1" team@backports.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
     echo >> REPORT
 }
 function punew() {
@@ -115,7 +83,7 @@ function i18n1() {
             # Lets check!
             if ${scriptsdir}/ddtp-i18n-check.sh . ${scriptdir}/i18n/${TSTAMP}; then
                 # Yay, worked, lets copy around
-                for dir in squeeze sid; do
+                for dir in wheezy sid; do
                     if [ -d dists/${dir}/ ]; then
                         cd dists/${dir}/main/i18n
                         rsync -aq --delete --delete-after  . ${ftpdir}/dists/${dir}/main/i18n/.
@@ -124,15 +92,15 @@ function i18n1() {
                 done
             else
                 echo "ARRRR, bad guys, wrong files, ARRR"
-                echo "Arf, Arf, Arf, bad guys, wrong files, arf, arf, arf" | mail -s "Don't you kids take anything. I'm watching you. I've got eye implants in the back of my head." debian-l10n-devel@lists.alioth.debian.org
+                echo "Arf, Arf, Arf, bad guys, wrong files, arf, arf, arf" | mail -a "X-Debian: DAK" -s "Don't you kids take anything. I'm watching you. I've got eye implants in the back of my head." debian-l10n-devel@lists.alioth.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
             fi
         else
             echo "ARRRR, missing the timestamp ${TSTAMP} directory, not updating i18n, ARRR"
-            echo "Arf, Arf, Arf, missing the timestamp ${TSTAMP} directory, not updating i18n, arf, arf, arf" | mail -s "Lisa, if you don't like your job you don't strike. You just go in every day and do it really half-assed. That's the American way." debian-l10n-devel@lists.alioth.debian.org
+            echo "Arf, Arf, Arf, missing the timestamp ${TSTAMP} directory, not updating i18n, arf, arf, arf" | mail -a "X-Debian: DAK" -s "Lisa, if you don't like your job you don't strike. You just go in every day and do it really half-assed. That's the American way." debian-l10n-devel@lists.alioth.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
         fi
     else
         echo "ARRRRRRR, could not verify our timestamp signature, ARRR. Don't mess with our files, i18n guys, ARRRRR."
-        echo "Arf, Arf, Arf, could not verify our timestamp signature, arf. Don't mess with our files, i18n guys, arf, arf, arf" | mail -s "You can't keep blaming yourself. Just blame yourself once, and move on." debian-l10n-devel@lists.alioth.debian.org
+        echo "Arf, Arf, Arf, could not verify our timestamp signature, arf. Don't mess with our files, i18n guys, arf, arf, arf" | mail -a "X-Debian: DAK" -s "You can't keep blaming yourself. Just blame yourself once, and move on." debian-l10n-devel@lists.alioth.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
     fi
 }
 
@@ -152,8 +120,6 @@ function filelist() {
 }
 
 function fingerprints() {
-    log "Not updating fingerprints - scripts needs checking"
-
     log "Updating fingerprints"
     dak import-keyring -L /srv/keyring.debian.org/keyrings/debian-keyring.gpg
 
@@ -166,6 +132,7 @@ From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>
 To: <debian-project@lists.debian.org>
 Subject: Debian Maintainers Keyring changes
 Content-Type: text/plain; charset=utf-8
+X-Debian: DAK
 MIME-Version: 1.0
 
 The following changes to the debian-maintainers keyring have just been activated:
@@ -198,7 +165,6 @@ function mpfm() {
 function packages() {
     log "Generating Packages and Sources files"
     cd $configdir
-    GZIP='--rsyncable' ; export GZIP
     apt-ftparchive generate apt.conf
     #dak generate-packages-sources
 }
@@ -249,13 +215,13 @@ function mklslar() {
         mv -f ${FILENAME}.gz ${FILENAME}.old.gz
         mv -f .${FILENAME}.new ${FILENAME}
         rm -f ${FILENAME}.patch.gz
-        zcat ${FILENAME}.old.gz | diff -u - ${FILENAME} | gzip --rsyncable -9cfn - >${FILENAME}.patch.gz
+        zcat ${FILENAME}.old.gz | diff -u - ${FILENAME} | gzip -9cfn - >${FILENAME}.patch.gz
         rm -f ${FILENAME}.old.gz
     else
         mv -f .${FILENAME}.new ${FILENAME}
     fi
 
-    gzip --rsyncable -9cfN ${FILENAME} >${FILENAME}.gz
+    gzip -9cfN ${FILENAME} >${FILENAME}.gz
     rm -f ${FILENAME}
 }
 
@@ -263,36 +229,9 @@ function mkmaintainers() {
     log 'Creating Maintainers index ... '
 
     cd $indices
-    dak make-maintainers ${scriptdir}/masterfiles/pseudo-packages.maintainers | \
-        sed -e "s/~[^  ]*\([   ]\)/\1/"  | \
-        awk '{printf "%-20s ", $1; for (i=2; i<=NF; i++) printf "%s ", $i; printf "\n";}' > .new-maintainers
-
-    if ! cmp -s .new-maintainers Maintainers || [ ! -f Maintainers ]; then
-           log "installing Maintainers ... "
-           mv -f .new-maintainers Maintainers
-           gzip --rsyncable -9v <Maintainers >.new-maintainers.gz
-           mv -f .new-maintainers.gz Maintainers.gz
-    else
-        rm -f .new-maintainers
-    fi
-}
-
-function mkuploaders() {
-    log 'Creating Uploaders index ... '
-
-    cd $indices
-    dak make-maintainers -u ${scriptdir}/masterfiles/pseudo-packages.maintainers | \
-        sed -e "s/~[^  ]*\([   ]\)/\1/"  | \
-        awk '{printf "%-20s ", $1; for (i=2; i<=NF; i++) printf "%s ", $i; printf "\n";}' > .new-uploaders
-
-    if ! cmp -s .new-uploaders Uploaders || [ ! -f Uploaders ]; then
-           log "installing Uploaders ... "
-           mv -f .new-uploaders Uploaders
-           gzip --rsyncable -9v <Uploaders >.new-uploaders.gz
-           mv -f .new-uploaders.gz Uploaders.gz
-    else
-        rm -f .new-uploaders
-    fi
+    dak make-maintainers ${scriptdir}/masterfiles/pseudo-packages.maintainers
+    gzip -9v --rsyncable <Maintainers >Maintainers.gz
+    gzip -9v --rsyncable <Uploaders >Uploaders.gz
 }
 
 function copyoverrides() {
@@ -323,7 +262,7 @@ function mkfilesindices() {
 
     ARCHLIST=$(tempfile)
 
-    log "Querying $PGDATABASE..."
+    log "Querying postgres"
     echo 'SELECT l.path, f.filename, a.arch_string FROM location l JOIN files f ON (f.location = l.id) LEFT OUTER JOIN (binaries b JOIN architecture a ON (b.architecture = a.id)) ON (f.id = b.file)' | psql -At | sed 's/|//;s,^/srv/ftp-master.debian.org/ftp,.,' | sort >$ARCHLIST
 
     includedirs () {
@@ -339,7 +278,7 @@ function mkfilesindices() {
         cd $base/ftp
         find ./dists -maxdepth 1 \! -type d
         find ./dists \! -type d | grep "/source/"
-    ) | sort -u | gzip --rsyncable -9 > source.list.gz
+    ) | sort -u | gzip -9 > source.list.gz
 
     log "Generating arch lists"
 
@@ -351,7 +290,7 @@ function mkfilesindices() {
             cd $base/ftp
             find ./dists -maxdepth 1 \! -type d
             find ./dists \! -type d | grep -E "(proposed-updates.*_$a.changes$|/main/disks-$a/|/main/installer-$a/|/Contents-$a|/binary-$a/)"
-        ) | sort -u | gzip --rsyncable -9 > arch-$a.list.gz
+        ) | sort -u | gzip -9 > arch-$a.list.gz
     done
 
     log "Generating suite lists"
@@ -374,7 +313,7 @@ function mkfilesindices() {
                 done
             )
             suite_list $id | tr -d ' ' | sed 's,^/srv/ftp-master.debian.org/ftp,.,'
-        ) | sort -u | gzip --rsyncable -9 > suite-${suite}.list.gz
+        ) | sort -u | gzip -9 > suite-${suite}.list.gz
     done
 
     log "Finding everything on the ftp site to generate sundries"
@@ -393,12 +332,12 @@ function mkfilesindices() {
     done
 
     (cd $base/ftp/
-           for dist in sid squeeze; do
-                   find ./dists/$dist/main/i18n/ \! -type d | sort -u | gzip --rsyncable -9 > $base/ftp/indices/files/components/translation-$dist.list.gz
+           for dist in sid wheezy; do
+                   find ./dists/$dist/main/i18n/ \! -type d | sort -u | gzip -9 > $base/ftp/indices/files/components/translation-$dist.list.gz
            done
     )
 
-    (cat ../arch-i386.files ../arch-amd64.files; zcat suite-proposed-updates.list.gz ; zcat translation-sid.list.gz ; zcat translation-squeeze.list.gz) |
+    (cat ../arch-i386.files ../arch-amd64.files; zcat suite-proposed-updates.list.gz ; zcat translation-sid.list.gz ; zcat translation-wheezy.list.gz) |
     sort -u | poolfirst > ../typical.files
 
     rm -f $ARCHLIST
@@ -413,7 +352,7 @@ function mkchecksums() {
 
     cd "$ftpdir"
     ${bindir}/dsync-flist -q generate $dsynclist --exclude $dsynclist --md5
-    ${bindir}/dsync-flist -q md5sums $dsynclist | gzip -9n --rsyncable > ${md5list}.gz
+    ${bindir}/dsync-flist -q md5sums $dsynclist | gzip -9n > ${md5list}.gz
     ${bindir}/dsync-flist -q link-dups $dsynclist || true
 }
 
@@ -431,7 +370,7 @@ function mirror() {
     echo "Running on host: $(hostname -f)" >> ${TRACEFILE}
     echo "Archive serial: ${SERIAL}" >> ${TRACEFILE}
     cd ${mirrordir}
-    rsync -aH --link-dest ${ftpdir} --delete --delete-after --ignore-errors ${ftpdir}/. .
+    rsync -aH --link-dest ${ftpdir} --delete --delete-after --delete-excluded --exclude Packages.*.new --exclude Sources.*.new  --ignore-errors ${ftpdir}/. .
 }
 
 function expire() {
@@ -456,18 +395,10 @@ function bts() {
     dak bts-categorize
 }
 
-function merkel2() {
-    # Push dak@merkel so it syncs the projectb there. Returns immediately, the sync runs detached
-    log "Trigger merkel/flotows $PGDATABASE sync"
-    ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_projectb dak@merkel.debian.org sleep 1
-    # Also trigger flotow, the ftpmaster test box
-    ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_flotow_projectb dak@flotow.debconf.org sleep 1
-}
-
-function merkel3() {
-    # Push dak@merkel to tell it to sync the dd accessible parts. Returns immediately, the sync runs detached
-    log "Trigger merkels dd accessible parts sync"
-    ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_ddaccess dak@merkel.debian.org sleep 1
+function ddaccess() {
+    # Tell our dd accessible mirror to sync itself up. Including ftp dir.
+    log "Trigger dd accessible parts sync including ftp dir"
+    ssh -o Batchmode=yes -o ConnectTimeout=30 -o SetupTimeout=30 -2 -i ${base}/s3kr1t/pushddmirror dak@ries.debian.org pool
 }
 
 function mirrorpush() {
@@ -483,8 +414,8 @@ function i18n2() {
     STAMP=$(date "+%Y%m%d%H%M")
     mkdir -p ${scriptdir}/i18n/${STAMP}
     cd ${scriptdir}/i18n/${STAMP}
-    dak control-suite -l stable > lenny
-    dak control-suite -l testing > squeeze
+    dak control-suite -l stable > squeeze
+    dak control-suite -l testing > wheezy
     dak control-suite -l unstable > sid
     echo "${STAMP}" > timestamp
     gpg --secret-keyring /srv/ftp-master.debian.org/s3kr1t/dot-gnupg/secring.gpg --keyring /srv/ftp-master.debian.org/s3kr1t/dot-gnupg/pubring.gpg --no-options --batch --no-tty --armour --default-key 55BE302B --detach-sign -o timestamp.gpg timestamp
@@ -512,22 +443,10 @@ function aptftpcleanup() {
     apt-ftparchive -q clean apt.conf
 }
 
-function compress() {
-    log "Compress old psql backups"
+function cleantransactions() {
+    log "Cleanup transaction ids older than 3 months"
     cd $base/backup/
-    find -maxdepth 1 -mindepth 1 -type f -name 'dump_pre_*' -mtime +2 -print0 | xargs -0 --no-run-if-empty rm
-
-    find -maxdepth 1 -mindepth 1 -type f -name 'dump_*' \! -name '*.bz2' \! -name '*.gz' -mmin +720 |
-    while read dumpname; do
-        echo "Compressing $dumpname"
-        bzip2 -9fv "$dumpname"
-    done
-    find -maxdepth 1 -mindepth 1 -type f -name "dumpall_*" \! -name '*.bz2' \! -name '*.gz' -mmin +720 |
-    while read dumpname; do
-        echo "Compressing $dumpname"
-        bzip2 -9fv "$dumpname"
-    done
-    finddup -l -d $base/backup
+    find -maxdepth 1 -mindepth 1 -type f -name 'txid_*' -mtime +90 -print0 | xargs -0 --no-run-if-empty rm
 }
 
 function logstats() {
@@ -541,7 +460,7 @@ function savetimestamp() {
 }
 
 function maillogfile() {
-    cat "$LOGFILE" | mail -s "Log for dinstall run of ${NOW}" cron@ftp-master.debian.org
+    cat "$LOGFILE" | mail -a "X-Debian: DAK" -s "Log for dinstall run of ${NOW}" cron@ftp-master.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
 }
 
 function renamelogfile() {
index 736d8a6fb6470b9f65b45853680ab5c51e8032b5..e6ed91a60f8a135a1e01a4b8a177ff6751e11864 100644 (file)
@@ -48,11 +48,12 @@ override_types="deb dsc udeb"
 # export TMP=/srv/backports-master.debian.org/tmp
 # export TEMP=/srv/backports-master.debian.org/tmp
 
-TMPDIR==$base/tmp
+TMPDIR=$base/tmp
 
 PATH=$masterdir:$PATH
 umask 022
 unset CDPATH
+GZIP='--rsyncable' ; export GZIP
 
 # Set the database variables
 eval $(dak admin config db-shell)
diff --git a/config/debian-security/apache.conf b/config/debian-security/apache.conf
new file mode 100644 (file)
index 0000000..b2ae925
--- /dev/null
@@ -0,0 +1,135 @@
+# pretend this is in a vhost
+    ServerAdmin team@security.debian.org
+    DocumentRoot /srv/security-master.debian.org/htdocs-security-master
+    ServerName security-master.debian.org
+
+    ErrorLog /var/log/apache2/security-master.debian.org-error.log
+    LogLevel warn
+    CustomLog /var/log/apache2/security-master.debian.org-access.log combined
+
+
+    Alias /debian-security /org/security.debian.org/archive/debian-security/
+    Alias /buildd/ /org/security-master.debian.org/buildd/
+
+    #RewriteEngine on
+    #RewriteRule ^/$    http://www.debian.org/security/
+
+        # New suite aliases
+        Alias /buildd-lenny /srv/security-master.debian.org/buildd/lenny/
+        Alias /buildd-squeeze /srv/security-master.debian.org/buildd/squeeze/
+
+    # BuildD access list
+    <LocationMatch "^/(buildd|buildd-lenny|buildd-squeeze|debian-security)/">
+        order deny,allow
+        deny from all
+
+        # i386
+        # brahms
+        allow from 206.12.19.115
+        allow from 2607:f8f0:610:4000:216:36ff:fe40:3802
+        # murphy
+        allow from 70.103.162.31
+        # biber
+        allow from 194.177.211.204
+        allow from 2001:648:2ffc:deb:214:22ff:feb2:1268
+
+        # amd64
+        # barber
+        allow from 194.177.211.203
+        allow from 2001:648:2ffc:deb:214:22ff:feb2:2370
+
+        # armel
+        # ancina
+        allow from 157.193.39.13
+        # arnold
+        allow from 217.140.96.57
+        # alain
+        allow from 217.140.96.58
+        # alwyn
+        allow from 217.140.96.59
+        # antheil
+        allow from 217.140.96.60
+
+        # alpha
+        # goetz
+        allow from 193.62.202.26
+
+        # samosa
+        allow from 192.25.206.57
+        # spohr
+        allow from 192.25.206.33
+
+        # mipsel
+        # rem
+        allow from 82.195.75.68
+        allow from 2001:41b8:202:deb:202:4cff:fefe:d06
+        # mayer
+        allow from 140.211.166.78
+        allow from 2001:6f8:1173:2:202:4cff:fefe:d06
+
+        # sparc
+        # lebrun
+        allow from 193.198.184.10
+        # schroeder
+        allow from 193.198.184.11
+        # spontini
+        allow from 206.12.19.14
+        allow from 2607:f8f0:610:4000:a00:20ff:fea0:918b
+
+        # mips
+        # corelli
+        allow from 206.12.19.16
+        allow from 2607:f8f0:610:4000:2e0:98ff:fe00:4489
+        # lucatelli
+        allow from 206.12.19.15
+        allow from 2607:f8f0:610:4000:2e0:98ff:fe00:4141
+        # ball
+        allow from 2001:41b8:202:deb:202:4cff:fefe:d09
+        allow from 82.195.75.70
+
+        # s390
+        allow from 80.245.147.46
+
+        # kfreebsd, i386
+        # finzi
+        allow from 206.12.19.111
+        # field
+        allow from 194.177.211.210
+
+        # kfreebsd, amd64
+        # fasch
+        allow from 194.177.211.201
+        # fano
+        allow from 206.12.19.110
+
+        # ia64
+        # alkman
+        allow from 192.25.206.63
+        # mundy
+        allow from 192.25.206.62
+
+        # powerpc
+        # praetorius
+        allow from 130.239.18.121
+        allow from 2001:6b0:e:2a18:204:acff:fede:459f
+        # poulenc
+        allow from 144.32.168.77
+        # porpora
+        allow from 144.32.168.78
+
+        # Ganneff, test
+        allow from 78.46.40.15
+        allow from 2001:4dd0:ff00:df::2
+        allow from 213.146.108.162
+        allow from 2a01:198:5d0:0:21c:c0ff:fead:e3a3
+
+        AuthName "security.debian.org"
+        AuthType Basic
+        AuthUserFile /org/security-master.debian.org/apache.htpasswd
+        require valid-user
+
+        # Either good IP address or good user/pass is sufficient
+        satisfy any
+    </LocationMatch>
+
+# end
index fcaa611348f265c5db5390ff1f68da52348a1468..fcac94d2290652dc2b977354ce3e796fcb8e820e 100644 (file)
@@ -2,14 +2,14 @@ APT::FTPArchive::Contents off;
 
 Dir 
 {
-   ArchiveDir "/org/security.debian.org/ftp/";
-   OverrideDir "/org/security.debian.org/override/";
-   CacheDir "/org/security.debian.org/dak-database/";
+   ArchiveDir "/srv/security-master.debian.org/ftp/";
+   OverrideDir "/srv/security-master.debian.org/override/";
+   CacheDir "/srv/security-master.debian.org/dak-database/";
 };
 
 Default
 {
-   Packages::Compress "gzip bzip2";
+   Packages::Compress "gzip bzip2";
    Sources::Compress "gzip bzip2";
    DeLinkLimit 0;
    FileMode 0664;
@@ -17,27 +17,28 @@ Default
 
 tree "dists/oldstable/updates"
 {
-   FileList "/org/security.debian.org/dak-database/dists/oldstable_updates/$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/org/security.debian.org/dak-database/dists/oldstable_updates/$(SECTION)_source.list";
+   FileList "/srv/security-master.debian.org/dak-database/dists/oldstable_updates/$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/security-master.debian.org/dak-database/dists/oldstable_updates/$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc source";
-   BinOverride "override.etch.$(SECTION)";
-   ExtraOverride "override.etch.extra.$(SECTION)";
-   SrcOverride "override.etch.$(SECTION).src";
+   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
+   BinOverride "override.lenny.$(SECTION)";
+   ExtraOverride "override.lenny.extra.$(SECTION)";
+   SrcOverride "override.lenny.$(SECTION).src";
    Contents " ";
    Packages::Compress "gzip bzip2";
    Sources::Compress "gzip bzip2";
 };
 
+
 tree "dists/stable/updates"
 {
-   FileList "/org/security.debian.org/dak-database/dists/stable_updates/$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/org/security.debian.org/dak-database/dists/stable_updates/$(SECTION)_source.list";
+   FileList "/srv/security-master.debian.org/dak-database/dists/stable_updates/$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/security-master.debian.org/dak-database/dists/stable_updates/$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
-   BinOverride "override.lenny.$(SECTION)";
-   ExtraOverride "override.lenny.extra.$(SECTION)";
-   SrcOverride "override.lenny.$(SECTION).src";
+   Architectures "amd64 armel i386 ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel powerpc s390 sparc source";
+   BinOverride "override.squeeze.$(SECTION)";
+   ExtraOverride "override.squeeze.extra.$(SECTION)";
+   SrcOverride "override.squeeze.$(SECTION).src";
    Contents " ";
    Packages::Compress "gzip bzip2";
    Sources::Compress "gzip bzip2";
@@ -45,13 +46,13 @@ tree "dists/stable/updates"
 
 tree "dists/testing/updates"
 {
-   FileList "/org/security.debian.org/dak-database/dists/testing_updates/$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/org/security.debian.org/dak-database/dists/testing_updates/$(SECTION)_source.list";
+   FileList "/srv/security-master.debian.org/dak-database/dists/testing_updates/$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/security-master.debian.org/dak-database/dists/testing_updates/$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "alpha amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
-   BinOverride "override.squeeze.$(SECTION)";
-   ExtraOverride "override.squeeze.extra.$(SECTION)";
-   SrcOverride "override.squeeze.$(SECTION).src";
+   Architectures "amd64 armel i386 ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel powerpc s390 sparc source";
+   BinOverride "override.wheezy.$(SECTION)";
+   ExtraOverride "override.wheezy.extra.$(SECTION)";
+   SrcOverride "override.wheezy.$(SECTION).src";
    Contents " ";
    Packages::Compress "gzip bzip2";
    Sources::Compress "gzip bzip2";
index 85c1f3dca0ab91c99f30b175abe28fdb8193e166..336112fd3c823d8ae0d36100c8cad07fd68a27a2 100644 (file)
@@ -2,9 +2,9 @@ APT::FTPArchive::Contents off;
 
 Dir 
 {
-   ArchiveDir "/srv/security.debian.org/buildd/";
-   OverrideDir "/srv/security.debian.org/override/";
-   CacheDir "/srv/security.debian.org/dak-database/";
+   ArchiveDir "/srv/security-master.debian.org/buildd/";
+   OverrideDir "/srv/security-master.debian.org/override/";
+   CacheDir "/srv/security-master.debian.org/dak-database/";
 };
 
 Default
@@ -15,19 +15,6 @@ Default
    FileMode 0664;
 }
 
-bindirectory "etch"
-{
-   Packages "etch/Packages";
-   Sources "etch/Sources";
-   Contents " ";
-
-   BinOverride "override.etch.all3";
-   SrcOverride "override.etch.all3.src";
-   BinCacheDB "packages-accepted-etch.db";
-   PathPrefix "";
-   Packages::Extensions ".deb .udeb";
-};
-
 bindirectory "lenny"
 {
    Packages "lenny/Packages";
@@ -54,3 +41,15 @@ bindirectory "squeeze"
    Packages::Extensions ".deb .udeb";
 };
 
+bindirectory "wheezy"
+{
+   Packages "wheezy/Packages";
+   Sources "wheezy/Sources";
+   Contents " ";
+
+   BinOverride "override.wheezy.all3";
+   SrcOverride "override.wheezy.all3.src";
+   BinCacheDB "packages-accepted-squeeze.db";
+   PathPrefix "";
+   Packages::Extensions ".deb .udeb";
+};
index 51110027f28578418622931e378907b74f27af92..043d5481d1155401fa8bb1828cba27ffe8eb2c29 100755 (executable)
@@ -2,63 +2,88 @@
 #
 # Executed after cron.unchecked
 
-ARCHS_oldstable="alpha amd64 arm hppa i386 ia64 mips mipsel powerpc sparc s390"
-ARCHS_stable="alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc sparc s390"
-ARCHS_testing="alpha amd64 armel hppa i386 ia64 mips mipsel powerpc sparc s390"
-DISTS="oldstable stable testing"
-SSH_SOCKET=~/.ssh/buildd.debian.org.socket
-
 set -e
-export SCRIPTVARS=/org/security.debian.org/dak/config/debian-security/vars
+set -u
+
+export SCRIPTVARS=/srv/security-master.debian.org/dak/config/debian-security/vars
 . $SCRIPTVARS
+SSH_SOCKET=~/.ssh/buildd.debian.org.socket
+DISTS=$(dak admin s list)
 
 if [ -e $ftpdir/Archive_Maintenance_In_Progress ]; then
-       exit 0
+    exit 0
 fi
 
-cd $masterdir
-for d in $DISTS; do
-       eval SOURCES_$d=`stat -c "%Y" $base/buildd/$d/Sources.gz`
-       eval PACKAGES_$d=`stat -c "%Y" $base/buildd/$d/Packages.gz`
+for dist in $DISTS; do
+    eval SOURCES_$dist=`stat -c "%Y" $base/buildd/$dist/Sources.gz`
+    eval PACKAGES_$dist=`stat -c "%Y" $base/buildd/$dist/Packages.gz`
 done
 
+cd $configdir
 apt-ftparchive -qq -o APT::FTPArchive::Contents=off generate apt.conf.buildd
+
+cd  ${base}/buildd
+for dist in $DISTS; do
+    rm -f $dist/Release*
+    darchs=$(dak admin s-a list-arch $dist | tr '\n' ' ')
+    codename=$(dak admin s show ${dist} | grep ^Codename | awk '{print $2}')
+    apt-ftparchive -qq -o APT::FTPArchive::Release::Codename="${codename}" -o APT::FTPArchive::Release::Origin="Debian" -o APT::FTPArchive::Release::Label="Debian" -o APT::FTPArchive::Release::Description="buildd $dist security" -o APT::FTPArchive::Release::Architectures="${darchs}" release $dist > Release
+    gpg --secret-keyring ${base}/s3kr1t/dot-gnupg/secring.gpg --keyring ${base}/s3kr1t/dot-gnupg/pubring.gpg --no-options --batch --no-tty --armour --default-key 55BE302B --detach-sign -o Release.gpg Release
+    mv Release* $dist/.
+done
+
 dists=
-for d in $DISTS; do
-       eval NEW_SOURCES_$d=`stat -c "%Y" $base/buildd/$d/Sources.gz`
-       eval NEW_PACKAGES_$d=`stat -c "%Y" $base/buildd/$d/Packages.gz`
-       old=SOURCES_$d
-        new=NEW_$old
-        if [ ${!new} -gt ${!old} ]; then
-               if [ -z "$dists" ]; then
-                       dists="$d"
-               else
-                       dists="$dists $d"
-               fi
-               continue
-       fi
-       old=PACKAGES_$d
-       new=NEW_$old
-        if [ ${!new} -gt ${!old} ]; then
-               if [ -z "$dists" ]; then
-                       dists="$d"
-               else
-                       dists="$dists $d"
-               fi
-               continue
-       fi
+
+
+for dist in $DISTS; do
+    eval NEW_SOURCES_$dist=`stat -c "%Y" $base/buildd/$dist/Sources.gz`
+    eval NEW_PACKAGES_$dist=`stat -c "%Y" $base/buildd/$dist/Packages.gz`
+    old=SOURCES_$dist
+    new=NEW_$old
+    if [ ${!new} -gt ${!old} ]; then
+        if [ -z "$dists" ]; then
+            dists="$dist"
+        else
+            dists="$dists $dist"
+        fi
+        continue
+    fi
+    old=PACKAGES_$dist
+    new=NEW_$old
+    if [ ${!new} -gt ${!old} ]; then
+        if [ -z "$dists" ]; then
+            dists="$dist"
+        else
+            dists="$dists $dist"
+        fi
+        continue
+    fi
 done
 
 if [ ! -z "$dists" ]; then
-       # setup ssh master process
-       ssh wbadm@buildd -S $SSH_SOCKET -MN 2> /dev/null &
-       SSH_PID=$!
-       while [ ! -S $SSH_SOCKET ]; do
-               sleep 1
-       done
-       trap 'kill -TERM $SSH_PID' 0
-       for d in $dists; do
-               ssh wbadm@buildd -S $SSH_SOCKET trigger.security $d
-       done
-fi
+    # setup ssh master process
+    ssh wbadm@buildd -S $SSH_SOCKET -MN 2> /dev/null &
+    SSH_PID=$!
+    while [ ! -S $SSH_SOCKET ]; do
+        sleep 1
+    done
+    trap 'kill -TERM $SSH_PID' 0
+    for d in $dists; do
+        case $d in
+            oldstable)
+                send=lenny
+                ;;
+            stable)
+                send=squeeze
+                ;;
+            testing)
+                send=testing
+                ;;
+            *)
+                send=unknown
+                ;;
+        esac
 
+        ssh wbadm@buildd -S $SSH_SOCKET trigger.security $send
+    done
+fi
index e482a192b4b2e44a23b4a52690aa89e1b1acce75..f33a732cb574c75f69a056fd4c142a29d2def057 100755 (executable)
@@ -1,78 +1,84 @@
-#!/bin/sh
+#!/bin/bash
 #
 # Executed daily via cron, out of dak's crontab.
 
 set -e
-export SCRIPTVARS=/org/security.debian.org/dak/config/debian-security/vars
+export SCRIPTVARS=/srv/security-master.debian.org/dak/config/debian-security/vars
 . $SCRIPTVARS
 
 ################################################################################
 
 # Fix overrides
 
-rsync --delete -r --include=override\* --exclude=\* --password-file /srv/non-us.debian.org/s3kr1t/rsync-password -ql security-master@ftp-master::indices/ $overridedir
+rsync --delete -r --include=override\* --exclude=\* --password-file /srv/security-master.debian.org/s3kr1t/rsync-password -ql security-master@ftp-master::indices/ $overridedir
 
 cd $overridedir
 for file in override*.gz; do
-       zcat $file > $(basename $file .gz)
+    zcat $file > $(basename $file .gz)
 done
 find . -maxdepth 1 -mindepth 1 -type l | xargs --no-run-if-empty rm
 
 for suite in $suites; do
     case $suite in
-               oldstable) override_suite=etch;;
-               stable) override_suite=lenny;;
-               testing) override_suite=squeeze;;
-               *) echo "Unknown suite type ($suite)"; exit 1;;
+        oldstable) override_suite=lenny;;
+        stable) override_suite=squeeze;;
+        testing) override_suite=wheezy;;
+        *) echo "Unknown suite type ($suite)"; exit 1;;
     esac
     for component in $components; do
-               for override_type in $override_types; do
-                       case $override_type in
-                               deb) type="" ;;
-                               dsc) type=".src" ;;
-                               udeb) type=".debian-installer" ;;
-                       esac
+        for override_type in $override_types; do
+            case $override_type in
+                deb) type="" ;;
+                dsc) type=".src" ;;
+                udeb) type=".debian-installer" ;;
+            esac
 
-                       if [ "$override_type" = "udeb" ]; then
-                               if [ ! "$component" = "main" ]; then
-                                       continue
-                               fi
-                       fi
-                       zcat override.$override_suite.$component$type.gz | dak control-overrides -q -a -t $override_type -s $suite -c updates/$component
-               done
+            if [ "$override_type" = "udeb" ]; then
+                if [ ! "$component" = "main" ]; then
+                    continue
+                fi
+            fi
+
+            OFILE="override.$override_suite.$component$type.gz"
+            if [ -r "$OFILE" ]; then
+                zcat "$OFILE" | dak control-overrides -q -a -t $override_type -s $suite -c updates/$component
+            fi
+        done
     done
 done
 
 # Generate .all3 overides for the buildd support
-for dist in etch lenny squeeze; do
+for dist in lenny squeeze wheezy; do
     rm -f override.$dist.all3
     components="main contrib non-free";
     if [ -f override.$dist.main.debian-installer.gz ]; then
-               components="$components main.debian-installer"
+        components="$components main.debian-installer"
     fi
     for component in $components; do
-               zcat override.$dist.$component.gz >> override.$dist.all3
+        zcat override.$dist.$component.gz >> override.$dist.all3
         if [ -e "override.$dist.$component.src.gz" ]; then
-                       zcat override.$dist.$component.src.gz >> override.$dist.all3.src
-               fi
+            zcat override.$dist.$component.src.gz >> override.$dist.all3.src
+        fi
     done
 done
 
 ################################################################################
 
-cd $masterdir
+cd $configdir
+dak import-keyring -L /srv/keyring.debian.org/keyrings/debian-keyring.gpg
 dak clean-queues
+dak clean-queues -i $disembargo
 dak clean-suites
-apt-ftparchive -q clean apt.conf
-apt-ftparchive -q clean apt.conf.buildd
 
 symlinks -d -r $ftpdir
 
-pg_dump obscurity > /org/security.debian.org/dak-backup/dump_$(date +%Y.%m.%d-%H:%M:%S)
+pg_dump obscurity > /org/security-master.debian.org/dak-backup/dump_$(date +%Y.%m.%d-%H:%M:%S)
+find -maxdepth 1 -mindepth 1 -type f -name 'dump_*' \! -name '*.bz2' \! -name '*.gz' -mmin +720 |
+while read dumpname; do
+    bzip2 -9fv "$dumpname"
+done
 
-# Vacuum the database
-set +e
-echo "VACUUM; VACUUM ANALYZE;" | psql obscurity 2>&1 | egrep -v "^NOTICE:  Skipping \"pg_.*only table or database owner can VACUUM it$|^VACUUM$"
-set -e
+apt-ftparchive -q clean apt.conf
+apt-ftparchive -q clean apt.conf.buildd
 
 ################################################################################
diff --git a/config/debian-security/cron.hourly b/config/debian-security/cron.hourly
new file mode 100755 (executable)
index 0000000..ddbf09f
--- /dev/null
@@ -0,0 +1,43 @@
+#! /bin/bash
+#
+# Executed hourly via cron, out of dak's crontab.
+
+set -e
+set -u
+
+export SCRIPTVARS=/srv/security-master.debian.org/dak/config/debian-security/vars
+. $SCRIPTVARS
+
+dak import-users-from-passwd
+# dak queue-report -n > $webdir/new.html
+# dak queue-report -8 -d new,byhand,proposedupdates,oldproposedupdates -r $webdir/stat
+# dak show-deferred -r $webdir/stat > ${webdir}/deferred.html
+# dak graph -n new,byhand,proposedupdates,oldproposedupdates,deferred -r $webdir/stat -i $webdir/stat -x $scriptsdir/rrd-release-freeze-dates
+# dak show-new > /dev/null
+
+# cd $webdir
+# cat removals-20*.txt > removals-full.txt
+# cat removals.txt >> removals-full.txt
+# cat removals-20*.822 > removals-full.822
+# cat removals.822 >> removals-full.822
+
+#$base/dak/tools/queue_rss.py -q $queuedir/new -o $webdir/rss/ -d $base/misc -l $base/log/
+#$base/dak/tools/removals.pl $configdir/removalsrss.rc > $webdir/removals.rss
+
+#$scriptsdir/generate-di
+
+# do the buildd key updates
+BUILDDFUN=$(mktemp -p "${TMPDIR}" BUILDDFUN.XXXXXX)
+exec >> "${BUILDDFUN}" 2>&1
+#${scriptsdir}/buildd-remove-keys
+#${scriptsdir}/buildd-add-keys
+#${scriptsdir}/buildd-prepare-dir
+for keyring in $(dak admin k list-binary); do
+    dak import-keyring --generate-users "%s" ${keyring}
+done
+exec >>/dev/null 2>&1
+
+DATE=$(date -Is)
+cat "${BUILDDFUN}" | mail -a "X-Debian: DAK" -e -s "[$(hostname -s)] Buildd key changes ${DATE}" buildd-keys@ftp-master.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
+
+rm -f "${BUILDDFUN}"
index 641f8bfb537ebbfb8be1bb293eb555b80d26383e..100e5878dde1ad65817ad7bd7995ef86cf3c8aac 100755 (executable)
@@ -1,31 +1,53 @@
-#! /bin/sh
+#! /bin/bash
 
 set -e
-export SCRIPTVARS=/org/security.debian.org/dak/config/debian-security/vars
+set -u
+
+export SCRIPTVARS=/srv/security-master.debian.org/dak/config/debian-security/vars
 . $SCRIPTVARS
 
+# And use one locale, no matter what the caller has set
+export LANG=C
+export LC_ALL=C
+
 report=$queuedir/REPORT
 reportdis=$queuedir/REPORT.disembargo
 timestamp=$(date "+%Y-%m-%d %H:%M")
 doanything=false
+dopolicy=false
+
+# So first we should go and see if any process-policy action is done
+dak process-policy embargo | mail -a "X-Debian: DAK" -e -s "Automatically accepted from embargoed" team@security.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
+dak process-policy disembargo | mail -a "X-Debian: DAK" -e -s "Automatically accepted from unembargoed" team@security.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
+
+# Now, if this really did anything, we can then sync it over. Files
+# in newstage mean they are (late) accepts of security stuff, need
+# to sync to ftp-master
+
+cd $newstage
+changes=$(find . -maxdepth 1 -mindepth 1 -type f -name \*.changes | sed -e "s,./,," | xargs)
+if [ -n "$changes" ]; then
+    dopolicy=true
+    echo "$timestamp": ${changes:-"Nothing to do in newstage"}  >> $report
+    rsync -a -q $newstage/. /srv/queued/ftpmaster/.
+    dak process-upload -a -d "$newstage" >> $report
+fi
 
 cd $unchecked
 changes=$(find . -maxdepth 1 -mindepth 1 -type f -name \*.changes | sed -e "s,./,," | xargs)
 if [ -n "$changes" ]; then
-  doanything=true
-  echo "$timestamp": "$changes"  >> $report
-  dak process-unchecked -a $changes >> $report
-  echo "--" >> $report
+    doanything=true
+    echo "$timestamp": ${changes:-"Nothing to do in unchecked"}  >> $report
+    dak process-upload -a -d "$unchecked" >> $report
 fi
 
 cd $disembargo
 changes=$(find . -maxdepth 1 -mindepth 1 -type f -name \*.changes | sed -e "s,./,," | xargs)
 
 if [ -n "$changes" ]; then
-  doanything=true
-  echo "$timestamp": "$changes"  >> $reportdis
-  dak process-unchecked -a $changes >> $reportdis
-  echo "--" >> $reportdis
+    doanything=true
+    echo "$timestamp": ${changes:-"Nothing to do in disembargo"}  >> $reportdis
+    dak process-upload -a -d "$disembargo" >> $reportdis
 fi
 
 if ! $doanything; then
@@ -33,4 +55,16 @@ if ! $doanything; then
   exit 0
 fi
 
-sh $masterdir/cron.buildd
+if [ "x${dopolicy}x" = "xtruex" ]; then
+    # We had something approved from a policy queue, push out new archive
+    dak dominate
+    dak generate-filelist
+    cd $configdir
+    $configdir/map.sh
+    apt-ftparchive generate apt.conf
+    dak generate-releases
+    /srv/security-master.debian.org/dak/config/debian-security/make-mirror.sh
+    sudo -u archvsync -H /home/archvsync/signal_security
+fi
+
+$configdir/cron.buildd
index fc813ecff0e9459f17950d214370b24889204c7a..80a835381620f525cddb75ed74cf2e52f1f9208a 100755 (executable)
@@ -1,9 +1,9 @@
-#!/bin/sh
+#!/bin/bash
 #
 # Executed weekly via cron, out of dak's crontab.
 
 set -e
-export SCRIPTVARS=/org/security.debian.org/dak/config/debian-security/vars
+export SCRIPTVARS=/srv/security-master.debian.org/dak/config/debian-security/vars
 . $SCRIPTVARS
 
 ################################################################################
@@ -11,8 +11,9 @@ export SCRIPTVARS=/org/security.debian.org/dak/config/debian-security/vars
 # Weekly generation of release files, then pushing mirrors.
 # Used as we have a "Valid-until" field in our release files of 10 days. In case
 # we dont have a security update in that time...
-cd $masterdir
+cd $configdir
 dak generate-releases
+/srv/security-master.debian.org/dak/config/debian-security/make-mirror.sh
 sudo -u archvsync -H /home/archvsync/signal_security
 
 
index 0f77a7f49e61b9286f13890a8932d36d8bda4318..fc4017d7cf26f03c7778c980b95c893221d603cc 100644 (file)
@@ -1,19 +1,20 @@
 Dinstall
 {
    GPGKeyring {
-     "/org/keyring.debian.org/keyrings/debian-keyring.gpg";
+     "/srv/keyring.debian.org/keyrings/debian-keyring.gpg";
    };
-   SigningKeyring "/org/non-us.debian.org/s3kr1t/dot-gnupg/secring.gpg";
-   SigningPubKeyring "/org/non-us.debian.org/s3kr1t/dot-gnupg/pubring.gpg";
+   // was non-us.d.o path before
+   SigningKeyring "/srv/security-master.debian.org/s3kr1t/dot-gnupg/secring.gpg";
+   SigningPubKeyring "/srv/security-master.debian.org/s3kr1t/dot-gnupg/pubring.gpg";
    SigningKeyIds "55BE302B";
    SendmailCommand "/usr/sbin/sendmail -odq -oi -t";
-   MyEmailAddress "Debian Installer <installer@ftp-master.debian.org>";
+   MyEmailAddress "Debian FTP Masters <ftpmaster@ftp-master.debian.org>";
    MyAdminAddress "ftpmaster@debian.org";
    MyHost "debian.org";  // used for generating user@my_host addresses in e.g. manual_reject()
    MyDistribution "Debian"; // Used in emails
    BugServer "bugs.debian.org";
    PackagesServer "packages.debian.org";
-   LockFile "/org/security.debian.org/dak/lock";
+   LockFile "/org/security-master.debian.org/dak/lock";
    Bcc "archive@ftp-master.debian.org";
    // GroupOverrideFilename "override.group-maint";
    FutureTimeTravelGrace 28800; // 8 hours
@@ -24,21 +25,20 @@ Dinstall
    BXANotify "false";
    QueueBuildSuites
    {
-     oldstable;
      stable;
      testing;
    };
    SecurityQueueHandling "true";     
    SecurityQueueBuild "true";     
    DefaultSuite "stable";
-   SuiteSuffix "updates";
+   SuiteSuffix "updates/";
    OverrideMaintainer "dak@security.debian.org";
    LegacyStableHasNoSections "false";
 };
 
 Process-New
 {
-  AcceptedLockFile "/org/security.debian.org/lock/unchecked.lock";
+  DinstallLockFile "/srv/security-master.debian.org/lock/processnew.lock";
   LockDir "/srv/security-master.debian.org/lock/new/";
 };
 
@@ -46,16 +46,55 @@ Import-Users-From-Passwd
 {
   ValidGID "800";
   // Comma separated list of users who are in Postgres but not the passwd file
-  KnownPostgres "postgres,dak,www-data,udmsearch";
+  KnownPostgres "postgres,dak,www-data,udmsearch,repuser";
 };
 
 Queue-Report
 {
   Directories
   {
-    // byhand;
-    // new;
+    byhand;
+    new;
     unembargoed;
+    embargoed;
+  };
+};
+
+Import-Keyring
+{
+  /srv/keyring.debian.org/keyrings/debian-maintainers.gpg
+    {
+      Debian-Maintainer "true";
+    };
+};
+
+Import-LDAP-Fingerprints
+{
+  LDAPDn "ou=users,dc=debian,dc=org";
+  LDAPServer "db.debian.org";
+  ExtraKeyrings
+  {
+    "/srv/keyring.debian.org/keyrings/removed-keys.pgp";
+    "/srv/keyring.debian.org/keyrings/removed-keys.gpg";
+    "/srv/keyring.debian.org/keyrings/extra-keys.pgp";
+  };
+  KeyServer "wwwkeys.eu.pgp.net";
+};
+
+Check-Overrides
+{
+  OverrideSuites
+  {
+    Stable
+    {
+      Process "0";
+    };
+
+    Testing
+    {
+      Process "0";
+    };
+
   };
 };
 
@@ -76,12 +115,12 @@ Rm
   };
 
   MyEmailAddress "Debian Archive Maintenance <ftpmaster@ftp-master.debian.org>";
-  LogFile "/org/security.debian.org/dak-log/removals.txt";
+  LogFile "/srv/security-master.debian.org/dak-log/removals.txt";
 };
 
 Init-Archive
 {
-  ExportDir "/org/security.debian.org/dak/import-archive-files/";
+  ExportDir "/srv/security-master.debian.org/dak/import-archive-files/";
 };
 
 Clean-Suites
@@ -123,16 +162,16 @@ Suite
        Version "";
        Origin "Debian";
        Label "Debian-Security";
-       Description "Debian 4.0 Security Updates";
+       Description "Debian 5.0 Security Updates";
        ValidTime 864000; // 10 days
-       CodeName "etch";
-       OverrideCodeName "etch";
-       CopyDotDak "/org/security.debian.org/queue/done/";
+       CodeName "lenny";
+       OverrideCodeName "lenny";
+       CopyDotDak "/srv/security-master.debian.org/queue/done/";
   };
 
   Stable
   {
-       Components 
+       Components
        {
          updates/main;
          updates/contrib;
@@ -142,11 +181,11 @@ Suite
        Version "";
        Origin "Debian";
        Label "Debian-Security";
-       Description "Debian 5.0 Security Updates";
+       Description "Debian 6.0 Security Updates";
        ValidTime 864000; // 10 days
-       CodeName "lenny";
-       OverrideCodeName "lenny";
-       CopyDotDak "/org/security.debian.org/queue/done/";
+       CodeName "squeeze";
+       OverrideCodeName "squeeze";
+       CopyDotDak "/srv/security-master.debian.org/queue/done/";
   };
 
   Testing
@@ -163,9 +202,9 @@ Suite
        Label "Debian-Security";
        Description "Debian testing Security Updates";
        ValidTime 864000; // 10 days
-       CodeName "squeeze";
-       OverrideCodeName "squeeze";
-       CopyDotDak "/org/security.debian.org/queue/done/";
+       CodeName "wheezy";
+       OverrideCodeName "wheezy";
+       CopyDotDak "/srv/security-master.debian.org/queue/done/";
   };
 };
 
@@ -178,48 +217,58 @@ SuiteMappings
   "silent-map etch-secure oldstable";
   "silent-map lenny-secure stable";
   "silent-map testing-security testing";
+  "silent-map lenny-security oldstable";
+  "silent-map squeeze-security stable";
+  "silent-map wheezy-security testing";
 };
 
 Dir
 {
-  Root "/org/security.debian.org/ftp/";
-  Pool "/org/security.debian.org/ftp/pool/";
-  Dak "/org/security.debian.org/dak/";
-  Templates "/org/security.debian.org/dak/templates/";
+  Root "/srv/security-master.debian.org/ftp/";
+  Pool "/srv/security-master.debian.org/ftp/pool/";
+  Export "/srv/security-master.debian.org/export/";
+  Dak "/srv/security-master.debian.org/dak/";
+  Templates "/srv/security-master.debian.org/dak/templates/";
   PoolRoot "pool/";
-  Override "/org/security.debian.org/override/";
-  Lock "/org/security.debian.org/lock/";
-  Lists "/org/security.debian.org/dak-database/dists/";
-  Log "/org/security.debian.org/dak-log/";
-  Morgue "/org/security.debian.org/morgue/";
+  Override "/srv/security-master.debian.org/override/";
+  Lock "/srv/security-master.debian.org/lock/";
+  Cache "/srv/security-master.debian.org/database/";
+  Lists "/srv/security-master.debian.org/dak-database/dists/";
+  Log "/srv/security-master.debian.org/dak-log/";
+  Morgue "/srv/security-master.debian.org/morgue/";
   MorgueReject "reject";
-  Override "/org/security.debian.org/scripts/override/";
-  QueueBuild "/org/security.debian.org/buildd/";
-  Upload "/srv/queued/UploadQueue/";
+  Override "/srv/security-master.debian.org/scripts/override/";
+  QueueBuild "/srv/security-master.debian.org/buildd/";
+  Upload "/srv/queued/ftpmaster/";
+  TempPath "/srv/security-master.debian.org/tmp";
   Queue
   {
-    Accepted "/org/security.debian.org/queue/accepted/";
-    Byhand "/org/security.debian.org/queue/byhand/";
-    Done "/org/security.debian.org/queue/done/";
-    Holding "/org/security.debian.org/queue/holding/";
-    New "/org/security.debian.org/queue/new/";
-    Reject "/org/security.debian.org/queue/reject/";
-    Unchecked "/org/security.debian.org/queue/unchecked/";
-    ProposedUpdates "/does/not/exist/"; // XXX fixme
-    OldProposedUpdates "/does/not/exist/"; // XXX fixme
-
-    Embargoed "/org/security.debian.org/queue/embargoed/";
-    Unembargoed "/org/security.debian.org/queue/unembargoed/";
-    Disembargo "/org/security.debian.org/queue/unchecked-disembargo/";
+    Byhand "/srv/security-master.debian.org/queue/byhand/";
+    Done "/srv/security-master.debian.org/queue/done/";
+    Holding "/srv/security-master.debian.org/queue/holding/";
+    New "/srv/security-master.debian.org/queue/new/";
+    Reject "/srv/security-master.debian.org/queue/reject/";
+    Unchecked "/srv/security-master.debian.org/queue/unchecked/";
+    Newstage "/srv/security-master.debian.org/queue/newstage/";
+
+    ProposedUpdates "/srv/security-master.debian.org/does/not/exist/"; // XXX fixme
+    OldProposedUpdates "/srv/security-master.debian.org/does/not/exist/"; // XXX fixme
+
+    Embargoed "/srv/security-master.debian.org/queue/embargoed/";
+    Unembargoed "/srv/security-master.debian.org/queue/unembargoed/";
+    Disembargo "/srv/security-master.debian.org/queue/unchecked-disembargo/";
   };
 };
 
 DB
 {
-  Name "obscurity";
-  Host ""; 
-  Port -1;
-
+  Service "obscurity";
+  // PoolSize should be at least ThreadCount + 1
+  PoolSize 5;
+  // MaxOverflow shouldn't exceed postgresql.conf's max_connections - PoolSize
+  MaxOverflow 13;
+  // should be false for encoding == SQL_ASCII
+  Unicode "false"
 };
 
 Architectures
@@ -239,6 +288,8 @@ Architectures
   s390 "IBM S/390";
   sparc "Sun SPARC/UltraSPARC";
   amd64 "AMD x86_64 (AMD64)";
+  kfreebsd-i386 "GNU/kFreeBSD i386";
+  kfreebsd-amd64 "GNU/kFreeBSD amd64";
 
 };
 
@@ -362,7 +413,7 @@ OverrideType
 
 Location
 {
-  /org/security.debian.org/ftp/pool/
+  /srv/security-master.debian.org/ftp/pool/
     {
       Archive "security";
       Suites 
@@ -387,3 +438,30 @@ Urgency
     critical;
   };
 };
+
+Changelogs
+{
+  Export "/srv/security-master.debian.org/export/changelogs";
+}
+
+Generate-Releases
+{
+  MD5Sum
+  {
+    oldstable;
+    stable;
+    testing;
+  };
+  SHA1
+  {
+    oldstable;
+    stable;
+    testing;
+  };
+  SHA256
+  {
+    oldstable;
+    stable;
+    testing;
+  };
+}
diff --git a/config/debian-security/dak.conf-etc b/config/debian-security/dak.conf-etc
new file mode 100644 (file)
index 0000000..e8af8d9
--- /dev/null
@@ -0,0 +1,9 @@
+Config
+{
+  chopin.debian.org
+  {
+    DatabaseHostname    "security";
+    DakConfig           "/org/security-master.debian.org/dak/config/debian-security/dak.conf";
+    AptConfig           "/org/security-master.debian.org/dak/config/debian-security/apt.conf";
+  }
+}
\ No newline at end of file
diff --git a/config/debian-security/export.sh b/config/debian-security/export.sh
new file mode 100755 (executable)
index 0000000..81d5ee0
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+set -e
+set -u
+set -E
+
+export SCRIPTVARS=/srv/security-master.debian.org/dak/config/debian-security/vars
+. $SCRIPTVARS
+
+# Make sure we start out with a sane umask setting
+umask 022
+
+# And use one locale, no matter what the caller has set
+export LANG=C
+export LC_ALL=C
+
+. "${configdir}/../debian/common"
+
+# extract changelogs and stuff
+function changelogs() {
+    log "Extracting changelogs"
+    dak make-changelog -e
+    mkdir -p ${exportpublic}/changelogs
+    cd ${exportpublic}/changelogs
+    rsync -aHW --delete --delete-after --ignore-errors ${exportdir}/changelogs/. .
+    sudo -H -u archvsync /home/archvsync/runmirrors metasdo > ~dak/runmirrors-metadata.log 2>&1 &
+}
+
+changelogs
diff --git a/config/debian-security/make-mirror.sh b/config/debian-security/make-mirror.sh
new file mode 100755 (executable)
index 0000000..1b80325
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+set -e
+
+LANG=C
+LC_ALL=C
+
+echo "Regenerating \"public\" mirror/ hardlink fun"
+date -u > /srv/security-master.debian.org/ftp/project/trace/security-master.debian.org
+echo "Using dak v1" >> /srv/security-master.debian.org/ftp/project/trace/security-master.debian.org
+echo "Running on host: $(hostname -f)" >> /srv/security-master.debian.org/ftp/project/trace/security-master.debian.org
+cd /srv/security.debian.org/archive/debian-security/
+rsync -aH --link-dest /srv/security-master.debian.org/ftp/ --exclude Archive_Maintenance_In_Progress --delete --delete-after --ignore-errors /srv/security-master.debian.org/ftp/. .
index d0cbaf4407a3448ddbb939a5ce93b384734b612f..06cd5384720a222e806142e3bcc22c96c68a2e6d 100755 (executable)
@@ -1,3 +1,3 @@
 #!/bin/bash
 
-dak make-pkg-file-mapping | bzip2 -9 > /org/security.debian.org/ftp/indices/package-file.map.bz2
+dak make-pkg-file-mapping | bzip2 -9 > /srv/security-master.debian.org/ftp/indices/package-file.map.bz2
index 2add99ea8016e57d71d24b870920e4a1e5296944..2d040a910fd4eba7f0a3b8673127db4d58cfa1bf 100644 (file)
@@ -1,22 +1,51 @@
 # locations used by many scripts
 
-base=/org/security.debian.org
+base=/srv/security-master.debian.org
+public=/srv/security.debian.org
+bindir=$base/bin
 ftpdir=$base/ftp/
-masterdir=$base/dak/config/debian-security/
+masterdir=$base/dak/
+configdir=$masterdir/config/debian-security/
+webdir=$masterdir/web
+indices=$ftpdir/indices
+archs=$(dak admin a list | tr '\n' ' ')
+
+scriptdir=$base/scripts
+scriptsdir=$masterdir/scripts/debian/
+dbdir=$base/dak-database/
+lockdir=$base/lock
+stagedir=$lockdir/stages
 overridedir=$base/override
+extoverridedir=$scriptdir/external-overrides
+logdir=$base/log/cron/
+
 queuedir=$base/queue/
 unchecked=$queuedir/unchecked/
+newstage=$queuedir/newstage/
 disembargo=$queuedir/unchecked-disembargo/
-accepted=$queuedir/accepted/
 done=$queuedir/done/
 
+mirrordir=$base/mirror/
+exportdir=$base/export/
+exportpublic=$public/rsync/export/
+
 uploadhost=ftp-master.debian.org
 uploaddir=/pub/UploadQueue/
 
+ftpgroup=debadmin
+
 components="main non-free contrib"
-suites="oldstable stable testing"
+suites=$(dak admin s list)
 override_types="deb dsc udeb"
 
+TMPDIR=${base}/tmp
+
 PATH=$masterdir:$PATH
 umask 022
+unset CDPATH
+
+# Set the database variables
+eval $(dak admin config db-shell)
 
+PATH=$masterdir:$PATH
+umask 022
index 0edf6dcef7fb32c29da6f4d21b125065d5aa1dd4..2181fe17cd98d26850739c18a41c7c311692d623 100644 (file)
 
   <DirectoryMatch ~ "^/srv/(incoming\.debian\.org/(dists/|builddweb)|ftp\.debian\.org/mirror)">
     Order allow,deny
-  # buildd.d.o, cimarosa
+
+    Use DebianBuilddHostList
+
+    # buildd.d.o, cimarosa
     allow from 206.12.19.8
-  # franck.d.o
+
+    # franck.d.o
     allow from 128.148.34.3
-  # test access to check functionality, ganneff
+
+    # test access to check functionality, ganneff
     allow from 213.146.108.162
-  # alpha
-    # goetz
-    allow from 193.62.202.26
-    # goedel (temporarily allow two addresses; see RT#1287)
-    allow from 213.188.99.214
-    allow from 213.188.99.208
-  # amd64
-    # barber
-    allow from 194.177.211.203
-    allow from 2001:648:2ffc:deb:214:22ff:feb2:2370
-    # brahms
-    Allow from 206.12.19.115
+
+    # Should be in DSA list
+    # amd64
     # vitry (archive rebuild)
     allow from 194.177.211.206
     allow from 2001:648:2ffc:deb:214:22ff:feb2:122c
     # krenek (archive rebuild)
     allow from 194.177.211.207
     allow from 2001:648:2ffc:deb:214:22ff:feb1:ff56
-  # arm
-    # netwinder
+
+    # Known Extras
+
+    # No idea about
+    # arm
+    ## netwinder
     allow from 192.133.104.24
-    #
+    ##
     allow from 217.147.81.26
-    # toffee
+    ## toffee
     allow from 78.32.9.218
-    #
+    ##
     allow from 86.3.74.169
-    # nw1.xandros
+    ## nw1.xandros
     allow from 67.210.160.89
-    # nw2.xandros
+    ## nw2.xandros
     allow from 67.210.160.90
-    # hdges.billgatliff
+    ## hdges.billgatliff
     allow from 209.251.101.204
-  # armel
-    # arcadelt
-    allow from 82.195.75.87
-    # argento
-    allow from 93.94.130.160
-    # allegri
+
+    # armel
+    ## allegri
     allow from 157.193.39.233
-    # ancina
-    allow from 157.193.39.13
-    # arnold
-    allow from 217.140.96.57
-    # alain
-    allow from 217.140.96.58
-    # alwyn
-    allow from 217.140.96.59
-    # antheil
-    allow from 217.140.96.60
-  # hppa
-    # sarti
-    allow from 193.201.200.199
-    # bld3.mmjgroup
+
+    # hppa
+    ## bld3.mmjgroup
     allow from 192.25.206.243
-    # peri
-    allow from 192.25.206.15
-    #
-    allow from 192.25.206.68
-    # lafayette
-    allow from 147.215.7.160
-    # paer
+    ## paer
     allow from 192.25.206.11
-  # hurd-i386
-    # rossini (NOT .debian.org)
+
+    # hurd-i386
+    ## rossini (NOT .debian.org)
     allow from 192.33.98.55
-    # back / mozart (xen domains; NOT .debian.org)
+    ## back / mozart (xen domains; NOT .debian.org)
     allow from 80.87.129.151
-  # i386
-    # murphy
-    Allow from 70.103.162.31
-    # biber
-    allow from 194.177.211.204
-    allow from 2001:648:2ffc:deb:214:22ff:feb2:1268
-  # ia64
-    # caballero
-    allow from 193.201.200.200
-    # mundi
+
+    # ia64
+    ## mundi
     allow from 192.25.206.62
-    # alkman
-    allow from 192.25.206.63
-  # mips
-    #
+
+    # mips
+    ##
     allow from 217.147.81.21
-    # ball
-    allow from 82.195.75.70
-    allow from 2001:41b8:202:deb:202:4cff:fefe:d09
-    # mayr
-    allow from 140.211.166.58
-    # sigrun, aba
+    ## sigrun, aba
     allow from 82.195.75.68
     allow from 2001:41b8:202:deb:a00:69ff:fe08:30c6
-    # corelli
-    allow from 206.12.19.16
-    # lucatelli
-    allow from 206.12.19.15
-  # mipsel
-    # rem
-    allow from 195.71.99.217
-    # mayer
-    allow from 140.211.166.78
-    # monteverdi
+
+    # mipsel
+    ## monteverdi
     allow from 78.47.2.111
-    # kritias, aba
+    ## kritias, aba
     allow from 78.46.213.163
-  # powerpc
-    # static-72-66-115-54.washdc.fios.verizon.net
-    allow from 72.66.115.54
-    # praetorius
-    allow from 130.239.18.121
-    # poulenc
-    allow from 144.32.168.77
-    # porpora
-    allow from 144.32.168.78
-  # s390
-    # debian01.zseries
+
+    # s390
+    ## debian01.zseries
     allow from 195.243.109.161
-    # l003092.zseriespenguins.ihost.com
+    ## l003092.zseriespenguins.ihost.com
     allow from 32.97.40.46
-    #
+    ##
     allow from 148.100.96.45
-    #
+    ##
     allow from 148.100.96.52
-    # lxdebian.bfinv
+    ## lxdebian.bfinv
     allow from 80.245.147.60
-    # zandonai
-    allow from 80.245.147.46
-  # sparc
-    # spontini
-    allow from 206.12.19.14
-    # lebrun
-    allow from 193.198.184.10
-    # schroeder
-    allow from 193.198.184.11
-    # titan.ayous.org ('non-standard' buildd; contact HE)
+
+    # sparc
+    ## titan.ayous.org ('non-standard' buildd; contact HE)
     allow from 82.195.75.33
-  # kfreebsd
-   # amd64
-    # fasch
-    allow from 194.177.211.201
-   # i386
+
+    # kfreebsd
+    ## i386
     # himalai1, ganymede1
     allow from 129.175.22.65
-    # field
-    allow from 194.177.211.210
-    # luchesi
-    # Password based due to being KVM instance
-    #   allow from 137.82.84.78
-# dynamics use password auth
+    ## luchesi
+    ## Password based due to being KVM instance
+    ##   allow from 137.82.84.78
+
+    # Dynamics use password auth
+
     AuthType Basic
     AuthName "incoming.debian.org"
     AuthUserFile /srv/incoming.debian.org/htpasswd
index cf07086a2a93949dd66dc67e552d19701cfd5864..b8bb8651d3abb806d7f0828775e1f78f8d784789 100644 (file)
@@ -1,3 +1,10 @@
+// The only use of this file nowadays is to serve as something for "apt-ftparchive clean"
+// and for the "python apt read an apt.conf" thingie. Otherwise its not really in use,
+// all the generation stuff is done in generate-packages-sources
+//
+// Well, except for that generate-releases and generate-index-diffs codebase, which
+// REALLY wants a cleanup.
+
 Dir 
 {
    ArchiveDir "/srv/ftp-master.debian.org/ftp/";
@@ -20,63 +27,63 @@ TreeDefault
    Contents::Header "/srv/ftp-master.debian.org/dak/config/debian/Contents.top";
 };
 
-//tree "dists/oldstable-proposed-updates"
-//{
-//   FileList "/srv/ftp-master.debian.org/database/dists/oldstable-proposed-updates_$(SECTION)_binary-$(ARCH).list";
-//   SourceFileList "/srv/ftp-master.debian.org/database/dists/oldstable-proposed-updates_$(SECTION)_source.list";
-//   Sections "main contrib non-free";
-//   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc source";
-//   BinOverride "override.etch.$(SECTION)";
-//   ExtraOverride "override.etch.extra.$(SECTION)";
-//   SrcOverride "override.etch.$(SECTION).src";
-//   Contents " ";
-//};
+tree "dists/oldstable-proposed-updates"
+{
+  FileList "/srv/ftp-master.debian.org/database/dists/oldstable-proposed-updates_$(SECTION)_binary-$(ARCH).list";
+  SourceFileList "/srv/ftp-master.debian.org/database/dists/oldstable-proposed-updates_$(SECTION)_source.list";
+  Sections "main contrib non-free";
+  Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
+  BinOverride "override.lenny.$(SECTION)";
+  ExtraOverride "override.lenny.extra.$(SECTION)";
+  SrcOverride "override.lenny.$(SECTION).src";
+  Contents " ";
+};
 
 tree "dists/proposed-updates"
 {
    FileList "/srv/ftp-master.debian.org/database/dists/proposed-updates_$(SECTION)_binary-$(ARCH).list";
    SourceFileList "/srv/ftp-master.debian.org/database/dists/proposed-updates_$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
-   BinOverride "override.lenny.$(SECTION)";
-   ExtraOverride "override.lenny.extra.$(SECTION)";
-   SrcOverride "override.lenny.$(SECTION).src";
+   Architectures "amd64 armel i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64 source";
+   BinOverride "override.squeeze.$(SECTION)";
+   ExtraOverride "override.squeeze.extra.$(SECTION)";
+   SrcOverride "override.squeeze.$(SECTION).src";
    Contents " ";
 };
 
-tree "dists/testing"
+tree "dists/squeeze-updates"
 {
-   FakeDI "dists/unstable";
-   FileList "/srv/ftp-master.debian.org/database/dists/testing_$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/srv/ftp-master.debian.org/database/dists/testing_$(SECTION)_source.list";
+   FileList "/srv/ftp-master.debian.org/database/dists/squeeze-updates_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/ftp-master.debian.org/database/dists/squeeze-updates_$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64 source";
+   Architectures "amd64 armel i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64 source";
    BinOverride "override.squeeze.$(SECTION)";
    ExtraOverride "override.squeeze.extra.$(SECTION)";
    SrcOverride "override.squeeze.$(SECTION).src";
+   Contents " ";
 };
 
-tree "dists/testing-proposed-updates"
+tree "dists/testing"
 {
-   FileList "/srv/ftp-master.debian.org/database/dists/testing-proposed-updates_$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/srv/ftp-master.debian.org/database/dists/testing-proposed-updates_$(SECTION)_source.list";
+   FakeDI "dists/unstable";
+   FileList "/srv/ftp-master.debian.org/database/dists/testing_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/ftp-master.debian.org/database/dists/testing_$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64 source";
-   BinOverride "override.squeeze.$(SECTION)";
-   ExtraOverride "override.squeeze.extra.$(SECTION)";
-   SrcOverride "override.squeeze.$(SECTION).src";
-   Contents " ";
+   Architectures "amd64 armel i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64 source";
+   BinOverride "override.wheezy.$(SECTION)";
+   ExtraOverride "override.wheezy.extra.$(SECTION)";
+   SrcOverride "override.wheezy.$(SECTION).src";
 };
 
-tree "dists/squeeze-updates"
+tree "dists/testing-proposed-updates"
 {
-   FileList "/srv/ftp-master.debian.org/database/dists/squeeze-updates_$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/srv/ftp-master.debian.org/database/dists/squeeze-updates_$(SECTION)_source.list";
+   FileList "/srv/ftp-master.debian.org/database/dists/testing-proposed-updates_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/ftp-master.debian.org/database/dists/testing-proposed-updates_$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64 source";
-   BinOverride "override.squeeze.$(SECTION)";
-   ExtraOverride "override.squeeze.extra.$(SECTION)";
-   SrcOverride "override.squeeze.$(SECTION).src";
+   Architectures "amd64 armel i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64 source";
+   BinOverride "override.wheezy.$(SECTION)";
+   ExtraOverride "override.wheezy.extra.$(SECTION)";
+   SrcOverride "override.wheezy.$(SECTION).src";
    Contents " ";
 };
 
@@ -93,25 +100,25 @@ tree "dists/unstable"
 
 // debian-installer
 
-//tree "dists/oldstable-proposed-updates/main"
-//{
-//   FileList "/srv/ftp-master.debian.org/database/dists/oldstable-proposed-updates_main_$(SECTION)_binary-$(ARCH).list";
-//   Sections "debian-installer";
-//   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc";
-//   BinOverride "override.etch.main.$(SECTION)";
-//   SrcOverride "override.etch.main.src";
-//   BinCacheDB "packages-debian-installer-$(ARCH).db";
-//   Packages::Extensions ".udeb";
-//   Contents " ";
-//};
+tree "dists/oldstable-proposed-updates/main"
+{
+  FileList "/srv/ftp-master.debian.org/database/dists/oldstable-proposed-updates_main_$(SECTION)_binary-$(ARCH).list";
+  Sections "debian-installer";
+  Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
+  BinOverride "override.lenny.main.$(SECTION)";
+  SrcOverride "override.lenny.main.src";
+  BinCacheDB "packages-debian-installer-$(ARCH).db";
+  Packages::Extensions ".udeb";
+  Contents " ";
+};
 
 tree "dists/proposed-updates/main"
 {
    FileList "/srv/ftp-master.debian.org/database/dists/proposed-updates_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
-   BinOverride "override.lenny.main.$(SECTION)";
-   SrcOverride "override.lenny.main.src";
+   Architectures "amd64 armel i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64";
+   BinOverride "override.squeeze.main.$(SECTION)";
+   SrcOverride "override.squeeze.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
    Contents " ";
@@ -121,9 +128,9 @@ tree "dists/testing/main"
 {
    FileList "/srv/ftp-master.debian.org/database/dists/testing_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64";
-   BinOverride "override.squeeze.main.$(SECTION)";
-   SrcOverride "override.squeeze.main.src";
+   Architectures "amd64 armel i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64";
+   BinOverride "override.wheezy.main.$(SECTION)";
+   SrcOverride "override.wheezy.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
    Contents "$(DIST)/../Contents-udeb";
@@ -133,9 +140,9 @@ tree "dists/testing/non-free"
 {
    FileList "/srv/ftp-master.debian.org/database/dists/testing_non-free_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64";
-   BinOverride "override.squeeze.main.$(SECTION)";
-   SrcOverride "override.squeeze.main.src";
+   Architectures "amd64 armel i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64";
+   BinOverride "override.wheezy.main.$(SECTION)";
+   SrcOverride "override.wheezy.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
    Contents "$(DIST)/../Contents-udeb-nf";
@@ -145,9 +152,9 @@ tree "dists/testing-proposed-updates/main"
 {
    FileList "/srv/ftp-master.debian.org/database/dists/testing-proposed-updates_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64";
-   BinOverride "override.squeeze.main.$(SECTION)";
-   SrcOverride "override.squeeze.main.src";
+   Architectures "amd64 armel i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64";
+   BinOverride "override.wheezy.main.$(SECTION)";
+   SrcOverride "override.wheezy.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
    Contents " ";
diff --git a/config/debian/apt.conf.oldstable b/config/debian/apt.conf.oldstable
deleted file mode 100644 (file)
index 1cfe235..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-Dir
-{
-   ArchiveDir "/srv/ftp-master.debian.org/ftp/";
-   OverrideDir "/srv/ftp-master.debian.org/scripts/override/";
-   CacheDir "/srv/ftp-master.debian.org/database/";
-};
-
-Default
-{
-   Packages::Compress "gzip bzip2";
-   Sources::Compress "gzip bzip2";
-   Contents::Compress "gzip";
-   DeLinkLimit 0;
-   FileMode 0664;
-}
-
-TreeDefault
-{
-   Contents::Header "/srv/ftp-master.debian.org/dak/config/debian/Contents.top";
-};
-
-tree "dists/oldstable"
-{
-   FileList "/srv/ftp-master.debian.org/database/dists/oldstable_$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/srv/ftp-master.debian.org/database/dists/oldstable_$(SECTION)_source.list";
-   Sections "main contrib non-free";
-   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc source";
-   BinOverride "override.etch.$(SECTION)";
-   ExtraOverride "override.etch.extra.$(SECTION)";
-   SrcOverride "override.etch.$(SECTION).src";
-};
-
-// debian-installer
-
-tree "dists/oldstable/main"
-{
-   FileList "/srv/ftp-master.debian.org/database/dists/oldstable_main_$(SECTION)_binary-$(ARCH).list";
-   Sections "debian-installer";
-   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc";
-   BinOverride "override.etch.main.$(SECTION)";
-   SrcOverride "override.etch.main.src";
-   BinCacheDB "packages-debian-installer-$(ARCH).db";
-   Packages::Extensions ".udeb";
-   Contents "$(DIST)/../Contents-udeb";
-};
-
-tree "dists/oldstable/non-free"
-{
-   FileList "/srv/ftp-master.debian.org/database/dists/oldstable_non-free_$(SECTION)_binary-$(ARCH).list";
-   Sections "debian-installer";
-   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc";
-   BinOverride "override.etch.main.$(SECTION)";
-   SrcOverride "override.etch.main.src";
-   BinCacheDB "packages-debian-installer-$(ARCH).db";
-   Packages::Extensions ".udeb";
-   Contents "$(DIST)/../Contents-udeb-nf";
-};
-
diff --git a/config/debian/apt.conf.stable b/config/debian/apt.conf.stable
deleted file mode 100644 (file)
index 0e854c1..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-Dir
-{
-   ArchiveDir "/srv/ftp-master.debian.org/ftp/";
-   OverrideDir "/srv/ftp-master.debian.org/scripts/override/";
-   CacheDir "/srv/ftp-master.debian.org/database/";
-};
-
-Default
-{
-   Packages::Compress "gzip bzip2";
-   Sources::Compress "gzip bzip2";
-   Contents::Compress "gzip";
-   DeLinkLimit 0;
-   FileMode 0664;
-}
-
-TreeDefault
-{
-   Contents::Header "/srv/ftp-master.debian.org/dak/config/debian/Contents.top";
-};
-
-tree "dists/stable"
-{
-   FileList "/srv/ftp-master.debian.org/database/dists/stable_$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/srv/ftp-master.debian.org/database/dists/stable_$(SECTION)_source.list";
-   Sections "main contrib non-free";
-   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
-   BinOverride "override.lenny.$(SECTION)";
-   ExtraOverride "override.lenny.extra.$(SECTION)";
-   SrcOverride "override.lenny.$(SECTION).src";
-};
-
-// debian-installer
-
-tree "dists/stable/main"
-{
-   FileList "/srv/ftp-master.debian.org/database/dists/stable_main_$(SECTION)_binary-$(ARCH).list";
-   Sections "debian-installer";
-   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
-   BinOverride "override.lenny.main.$(SECTION)";
-   SrcOverride "override.lenny.main.src";
-   BinCacheDB "packages-debian-installer-$(ARCH).db";
-   Packages::Extensions ".udeb";
-   Contents "$(DIST)/../Contents-udeb";
-};
-
-tree "dists/stable/non-free"
-{
-   FileList "/srv/ftp-master.debian.org/database/dists/stable_non-free_$(SECTION)_binary-$(ARCH).list";
-   Sections "debian-installer";
-   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
-   BinOverride "override.lenny.main.$(SECTION)";
-   SrcOverride "override.lenny.main.src";
-   BinCacheDB "packages-debian-installer-$(ARCH).db";
-   Packages::Extensions ".udeb";
-   Contents "$(DIST)/../Contents-udeb-nf";
-};
-
index a42c18ff9481be77fa36ec25a6904b416bc06450..f5ec8ae630ae8a42696c7e5d158c5db2c2607ac0 100644 (file)
@@ -3,11 +3,8 @@
 #
 # Set $PROGRAM to a string to have it added to the output.
 function log () {
-        if [ -z "${PROGRAM}" ]; then
-                echo "$(date +"%b %d %H:%M:%S") $(hostname -s) [$$] $@"
-        else
-                echo "$(date +"%b %d %H:%M:%S") $(hostname -s) ${PROGRAM}[$$]: $@"
-        fi
+        local prefix=${PROGRAM:-}
+        echo "$(date +"%b %d %H:%M:%S") $(hostname -s) ${prefix}[$$]: $@"
 }
 
 # log the message using log() but then also send a mail
@@ -107,3 +104,9 @@ function reports() {
     dak cruft-report -s experimental >> $webdir/cruft-report-daily.txt
     cat $webdir/cruft-report-daily.txt | mail -a "X-Debian: DAK" -e -s "Debian archive cruft report for $(date +%D)" ftpmaster@ftp-master.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
 }
+
+function pg_timestamp() {
+    tsname=${1:-"unknown"}
+    log "Saving postgres transaction id for ${tsname}"
+    psql -tAc 'select txid_current();' > $base/backup/txid_${tsname}_$(date +%Y.%m.%d-%H:%M:%S)
+}
index 1ededd036545b2e7b7e89bfeb2f93a677976ec06..a96f6c57b6307374850472ada027286420771287 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/bash
 #
 # Run daily via cron, out of dak's crontab.
 
@@ -21,13 +21,25 @@ function cleanup {
 }
 trap cleanup SIGHUP SIGINT SIGPIPE SIGTERM EXIT ERR
 
+# log to dinstall's logfile instead of sending email
+PROGRAM="cron.daily"
+LOGFILE="$logdir/dinstall.log"
+exec >> "$LOGFILE" 2>&1
+
 # get the latest list of wnpp bugs and their source packages
 wget -q -O${TMPFILE} http://qa.debian.org/data/bts/wnpp_rm
 chmod go+r ${TMPFILE}
 mv ${TMPFILE} /srv/ftp-master.debian.org/scripts/masterfiles/wnpp_rm
 
+# Update wanna-build dump
+echo "Update wanna-build database dump"
+$base/dak/scripts/nfu/get-w-b-db
+
 reports
 
 clean_debbugs
 
+# Generate list of override disparities
+dak override-disparity | gzip -9 > ${webdir}/override-disparity.gz
+
 ################################################################################
index 2b219cdaa113ad9fd0501bd37d65db7946783d8f..9261452daec74d7764a1ec4dcfb55719076c07be 100755 (executable)
@@ -159,7 +159,7 @@ state "Startup"
 
 lockfile -l 3600 "${LOCK_DAILY}"
 trap onerror ERR
-trap cleanup EXIT TERM HUP INT QUIT
+trap remove_daily_lock EXIT TERM HUP INT QUIT
 
 touch "${LOCK_BRITNEY}"
 
@@ -172,7 +172,7 @@ GO=(
 stage $GO
 
 GO=(
-    FUNC="merkel1"
+    FUNC="qa1"
     TIME="init"
     ARGS=""
     ERR="false"
@@ -180,9 +180,9 @@ GO=(
 stage $GO &
 
 GO=(
-    FUNC="pgdump_pre"
+    FUNC="pg_timestamp"
     TIME="pg_dump1"
-    ARGS=""
+    ARGS="predinstall"
     ERR=""
 )
 stage $GO
@@ -205,6 +205,7 @@ stage $GO
 
 lockfile "$LOCK_ACCEPTED"
 lockfile "$LOCK_NEW"
+trap remove_all_locks EXIT TERM HUP INT QUIT
 
 GO=(
     FUNC="punew"
@@ -214,13 +215,13 @@ GO=(
 )
 stage $GO
 
-#GO=(
-#    FUNC="opunew"
-#    TIME="o-p-u-new"
-#    ARGS="oldproposedupdates"
-#    ERR="false"
-#)
-#stage $GO
+GO=(
+    FUNC="opunew"
+    TIME="o-p-u-new"
+    ARGS="oldproposedupdates"
+    ERR="false"
+)
+stage $GO
 
 GO=(
     FUNC="newstage"
@@ -254,7 +255,7 @@ GO=(
     ARGS=""
     ERR=""
 )
-stage $GO
+#stage $GO
 
 GO=(
     FUNC="fingerprints"
@@ -287,8 +288,6 @@ GO=(
     ARGS=""
     ERR=""
 )
-# Careful: When we ever go and remove this monster-long thing, we have to check the backgrounded
-# functions before it. We no longer have a 1.5hour sync point then.
 stage $GO
 
 state "dists/"
@@ -300,6 +299,14 @@ GO=(
 )
 stage $GO
 
+GO=(
+    FUNC="gitpdiff"
+    TIME="gitpdiff"
+    ARGS=""
+    ERR=""
+)
+stage $GO
+
 GO=(
     FUNC="release"
     TIME="release files"
@@ -333,14 +340,6 @@ GO=(
 )
 stage $GO
 
-GO=(
-    FUNC="mkuploaders"
-    TIME="mkuploaders"
-    ARGS=""
-    ERR=""
-)
-stage $GO
-
 GO=(
     FUNC="copyoverrides"
     TIME="copyoverrides"
@@ -381,9 +380,16 @@ GO=(
 )
 stage $GO
 
-rm -f "$LOCK_ACCEPTED"
-rm -f "$LOCK_NEW"
-rm -f "${LOCK_DAILY}"
+GO=(
+    FUNC="ddaccess"
+    TIME="ddaccessible sync"
+    ARGS=""
+    ERR="false"
+)
+stage $GO
+
+remove_all_locks
+trap - EXIT TERM HUP INT QUIT
 
 ts "locked part finished"
 state "postlock"
@@ -397,12 +403,12 @@ GO=(
 stage $GO &
 
 GO=(
-    FUNC="pgdump_post"
+    FUNC="pg_timestamp"
     TIME="pg_dump2"
-    ARGS=""
+    ARGS="postdinstall"
     ERR=""
 )
-stage $GO &
+stage $GO
 
 GO=(
     FUNC="expire"
@@ -436,14 +442,6 @@ GO=(
 )
 stage $GO &
 
-GO=(
-    FUNC="merkel2"
-    TIME="merkel projectb push"
-    ARGS=""
-    ERR="false"
-)
-stage $GO &
-
 GO=(
     FUNC="mirrorpush"
     TIME="mirrorpush"
@@ -479,28 +477,12 @@ stage $GO &
 rm -f "${LOCK_BRITNEY}"
 
 GO=(
-    FUNC="pgdakdev"
-    TIME="dak-dev db"
-    ARGS=""
-    ERR="false"
-)
-stage $GO &
-
-GO=(
-    FUNC="merkel3"
-    TIME="merkel ddaccessible sync"
-    ARGS=""
-    ERR="false"
-)
-stage $GO &
-
-GO=(
-    FUNC="compress"
-    TIME="compress"
+    FUNC="cleantransactions"
+    TIME=""
     ARGS=""
     ERR=""
 )
-stage $GO &
+stage $GO
 
 GO=(
     FUNC="aptftpcleanup"
@@ -508,7 +490,10 @@ GO=(
     ARGS=""
     ERR="false"
 )
-stage $GO
+#stage $GO
+
+# we need to wait for the background processes before the end of dinstall
+wait
 
 log "Daily cron scripts successful, all done"
 
index 30e81b59e0d8a20af82871e1ed56117272133f7b..0699846607b974c6a45d0f95103e374c5a04c276 100755 (executable)
@@ -1,4 +1,4 @@
-#! /bin/sh
+#! /bin/bash
 #
 # Executed hourly via cron, out of dak's crontab.
 
@@ -10,9 +10,16 @@ export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
 
 dak import-users-from-passwd
 dak queue-report -n > $webdir/new.html
-dak queue-report -8 -d new,byhand,proposedupdates,oldproposedupdates
-dak show-deferred > ${webdir}/deferred.html
-dak show-new > /dev/null
+dak queue-report -8 -d new,byhand,proposedupdates,oldproposedupdates -r $webdir/stat
+dak show-deferred -r $webdir/stat > ${webdir}/deferred.html
+dak graph -n new,byhand,proposedupdates,oldproposedupdates,deferred -r $webdir/stat -i $webdir/stat -x $scriptsdir/rrd-release-freeze-dates
+
+# do not run show-new and other stuff in parallel
+LOCKFILE="$lockdir/unchecked.lock"
+if lockfile -r16 $LOCKFILE 2> /dev/null; then
+    dak show-new > /dev/null || true
+    rm -f $LOCKFILE
+fi
 
 cd $webdir
 cat removals-20*.txt > removals-full.txt
@@ -23,4 +30,26 @@ cat removals.822 >> removals-full.822
 $base/dak/tools/queue_rss.py -q $queuedir/new -o $webdir/rss/ -d $base/misc -l $base/log/
 $base/dak/tools/removals.pl $configdir/removalsrss.rc > $webdir/rss/removals.rss
 
+
+# Tell ries to sync its tree
+ssh -o Batchmode=yes -o ConnectTimeout=30 -o SetupTimeout=30 -2 -i ${base}/s3kr1t/pushddmirror dak@ries.debian.org sync
+
 $scriptsdir/generate-di
+
+
+# do the buildd key updates
+BUILDDFUN=$(mktemp -p "${TMPDIR}" BUILDDFUN.XXXXXX)
+exec >> "${BUILDDFUN}" 2>&1
+${scriptsdir}/buildd-remove-keys
+${scriptsdir}/buildd-add-keys
+${scriptsdir}/buildd-prepare-dir
+
+for keyring in $(dak admin k list-binary); do
+    dak import-keyring --generate-users "%s" ${keyring}
+done
+exec >>/dev/null 2>&1
+
+DATE=$(date -Is)
+cat "${BUILDDFUN}" | mail -a "X-Debian: DAK" -e -s "[$(hostname -s)] Buildd key changes ${DATE}" buildd-keys@ftp-master.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
+
+rm -f "${BUILDDFUN}"
index 685a1939736f24600b0f5c7f90a73230b153b2fe..980cb6d6905d63651932c50e6d516d80f804e876 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/bash
 #
 # Run at the beginning of the month via cron, out of dak's crontab.
 
index 0e956cac9e98feb225296cca8cd9898aecdceec4..d3e07e158a7b3453a14874d0266200d77190aed0 100755 (executable)
@@ -75,10 +75,9 @@ function do_buildd () {
 }
 
 function do_dists () {
-    cd $configdir
-    dak generate-filelist
-    GZIP='--rsyncable' ; export GZIP
-    dak generate-packages-sources >/dev/null
+    #cd $configdir
+    #dak generate-filelist -s unstable,experimental -i
+    dak generate-packages-sources2 -s unstable experimental >/dev/null
 }
 
 ########################################################################
@@ -89,19 +88,24 @@ function do_dists () {
 export LANG=C
 export LC_ALL=C
 
-#lockfile -r3 "$LOCK_NEW"
-# acceptnew
-#rm -f "$LOCK_NEW"
-
 # only run one cron.unchecked
-lockfile -r3 $LOCKFILE || exit 0
+if ! lockfile -r8 $LOCKFILE; then
+    echo "aborting cron.unchecked because $LOCKFILE has already been locked"
+    exit 0
+fi
 trap cleanup 0
 
+
+pg_timestamp preunchecked >/dev/null
 do_newstage
 do_unchecked
 
 if [ ! -z "$changes" ]; then
     sync_debbugs
     do_buildd
-    do_dists
+    #do_dists
 fi
+
+dak contents -l 10000 scan-binary
+dak contents -l 1000 scan-source
+pg_timestamp postunchecked >/dev/null
index 45677cd97bb854b790a6d1f7cf94f2e9434dd905..06d3f90a93d6e3a54e81a2afd6f571b93127237a 100755 (executable)
@@ -44,16 +44,6 @@ git update-server-info
 # (fix in development, but until it reached backports.org.......)
 chmod -R g+w logs/
 
-# Clean up apt-ftparchive's databases
-cd $configdir
-echo "Cleanup apt-ftparchive's database"
-apt-ftparchive -q clean apt.conf
-apt-ftparchive -q clean apt.conf.buildd
-
-# Update wanna-build dump
-echo "Update wanna-build database dump"
-$base/dak/scripts/nfu/get-w-b-db
-
 echo "Fixing symlinks in $ftpdir"
 symlinks -d -r $ftpdir
 
index 0f9c35a541dc9fba4b181ef729c8e18c20783100..1717b9e239a03618705b7c18e57ed63ce5597ee5 100644 (file)
@@ -69,7 +69,7 @@ Import-Users-From-Passwd
 {
   ValidGID "800";
   // Comma separated list of users who are in Postgres but not the passwd file
-  KnownPostgres "postgres,dak,katie,release,qa,www-data,guest";
+  KnownPostgres "postgres,dak,katie,release,qa,www-data,guest,repuser";
 };
 
 Clean-Queues
@@ -168,6 +168,16 @@ Check-Overrides
 
 Suite
 {
+  OldStable
+  {
+       Components
+       {
+         main;
+         contrib;
+         non-free;
+       };
+  };
+
   Stable
   {
        Components
@@ -178,6 +188,27 @@ Suite
        };
   };
 
+  OldStable-Proposed-Updates
+  {
+       Components
+       {
+         main;
+         contrib;
+         non-free;
+       };
+       VersionChecks
+       {
+         MustBeNewerThan
+         {
+           OldStable;
+         };
+         Enhances
+          {
+           OldStable;
+         };
+       };
+  };
+
   Proposed-Updates
   {
        Components
@@ -258,11 +289,17 @@ Suite
          MustBeNewerThan
          {
            Stable;
-           Testing;
          };
+      MustBeOlderThan
+      {
+        Testing;
+        Testing-Proposed-Updates;
+        Unstable;
+        Experimental;
+      };
          Enhances
       {
-           Testing;
+           Stable;
          };
        };
 
@@ -315,19 +352,28 @@ Suite
 
 SuiteMappings
 {
-// "propup-version oldstable-security stable testing testing-proposed-updates unstable";
+ "silent-map lenny-security oldstable-security";
+ "silent-map squeeze-security stable-security";
+ "silent-map wheezy-security testing-security";
+ "propup-version oldstable-security stable testing testing-proposed-updates unstable";
  "propup-version stable-security testing testing-proposed-updates unstable";
  "propup-version testing-security unstable";
- "map lenny stable";
- "map squeeze testing";
+ "map lenny oldstable";
+ "map lenny-proposed-updates oldstable-proposed-updates";
+ "map squeeze stable";
+ "map squeeze-proposed-updates proposed-updates";
+ "map squeeze-updates proposed-updates";
+ "map wheezy testing";
+ "map wheezy-proposed-updates testing-proposed-updates";
  "map sid unstable";
  "map rc-buggy experimental";
-// "map oldstable oldstable-proposed-updates";
-// "map oldstable-security oldstable-proposed-updates";
+ "map oldstable oldstable-proposed-updates";
+ "map oldstable-security oldstable-proposed-updates";
  "map stable proposed-updates";
  "map stable-security proposed-updates";
  "map stable-proposed-updates proposed-updates";
-// "map-unreleased oldstable unstable";
+ "map stable-updates proposed-updates";
+ "map-unreleased oldstable unstable";
  "map-unreleased stable unstable";
  "map-unreleased proposed-updates unstable";
  "map testing testing-proposed-updates";
@@ -357,6 +403,12 @@ AutomaticByHandPackages {
     Extension "tar.gz";
     Script "/srv/ftp-master.debian.org/dak/scripts/debian/byhand-task";
   };
+
+  "win32-loader" {
+    Source "win32-loader";
+    Section "byhand";
+    Script "/srv/ftp-master.debian.org/dak/scripts/debian/byhand-win32-loader";
+  };
 };
 
 Dir
@@ -388,9 +440,9 @@ Dir
     Unchecked "/srv/ftp-master.debian.org/queue/unchecked/";
     Newstage "/srv/ftp-master.debian.org/queue/newstage/";
     BTSVersionTrack "/srv/ftp-master.debian.org/queue/bts_version_track/";
-    Embargoed "/does/not/exist/";
-    Unembargoed "/does/not/exist/";
-    Disembargo "/does/not/exist/";
+    Embargoed "/srv/ftp-master.debian.org/does/not/exist/";
+    Unembargoed "/srv/ftp-master.debian.org/does/not/exist/";
+    Disembargo "/srv/ftp-master.debian.org/does/not/exist/";
   };
 };
 
@@ -404,9 +456,13 @@ Queue-Report
 
 DB
 {
-  Name "projectb";
-  Host "";
-  Port 5433;
+  Service "projectb";
+  // PoolSize should be at least ThreadCount + 1
+  PoolSize 5;
+  // MaxOverflow shouldn't exceed postgresql.conf's max_connections - PoolSize
+  MaxOverflow 13;
+  // should be false for encoding == SQL_ASCII
+  Unicode "false"
 };
 
 Archive
@@ -478,3 +534,43 @@ Changelogs
   Britney "/srv/ftp-master.debian.org/ftp/dists/testing/ChangeLog";
   Export "/srv/ftp-master.debian.org/export/changelogs";
 }
+
+Generate-Releases
+{
+  MD5Sum
+  {
+    oldstable;
+    oldstable-proposed-updates;
+    proposed-updates;
+    stable;
+    squeeze-updates;
+    testing;
+    testing-proposed-updates;
+    unstable;
+    experimental;
+  };
+  SHA1
+  {
+    oldstable;
+    oldstable-proposed-updates;
+    proposed-updates;
+    squeeze-updates;
+    stable;
+    testing;
+    testing-proposed-updates;
+    unstable;
+    experimental;
+  };
+  SHA256
+  {
+    oldstable;
+    oldstable-proposed-updates;
+    proposed-updates;
+    squeeze-updates;
+    stable;
+    testing;
+    testing-proposed-updates;
+    unstable;
+    experimental;
+  };
+}
index b0f6a50e63e4193a85e94dc102ef1f2b64bbbe4b..5336a8df0aaca8774b1a30ff754512c444507cd8 100644 (file)
@@ -7,5 +7,12 @@ Config
     DakConfig           "/srv/ftp-master.debian.org/dak/config/debian/dak.conf";
     AptConfig           "/srv/ftp-master.debian.org/dak/config/debian/apt.conf";
   }
+  ries.debian.org
+  {
+    AllowLocalConfig    "false";
+    DatabaseHostname    "ftp-master";
+    DakConfig           "/srv/ftp-master.debian.org/dak/config/debian/dak.conf";
+    AptConfig           "/srv/ftp-master.debian.org/dak/config/debian/apt.conf";
+  }
 }
 
index 0ad674ea1d39a5cbe2a8a8a8fbbcc888ebebb154..c4a25a61396f561d9e140d8051984cc77600cbd5 100644 (file)
@@ -4,10 +4,14 @@ function ts() {
         echo "Archive maintenance timestamp ($1): $(date +%H:%M:%S)"
 }
 
-# Cleanup actions
-function cleanup() {
-       rm -f ${LOCK_DAILY}
-       rm -f ${LOCK_ACCEPTED}
+# Remove daily lock
+function remove_daily_lock() {
+    rm -f $LOCK_DAILY
+}
+
+# Remove all locks
+function remove_all_locks() {
+    rm -f $LOCK_DAILY $LOCK_ACCEPTED $LOCK_NEW
 }
 
 # If we error out this one is called, *FOLLOWED* by cleanup above
@@ -22,7 +26,11 @@ function onerror() {
     fi
     subject="${subject} dinstall error at ${ERRDATE} in ${STAGEFILE} - (Be quiet, Brain, or I'll stab you with a Q-tip)"
 
-    cat "${STAGEFILE}.log" | mail -s "${subject}" -a "X-Debian: DAK" cron@ftp-master.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
+    if [ -r "${STAGEFILE}.log" ]; then
+        cat "${STAGEFILE}.log"
+    else
+        echo "file ${STAGEFILE}.log does not exist, sorry"
+    fi | mail -s "${subject}" -a "X-Debian: DAK" cron@ftp-master.debian.org -- -F "Debian FTP Masters" -f ftpmaster@ftp-master.debian.org
 }
 
 ########################################################################
@@ -30,46 +38,11 @@ function onerror() {
 ########################################################################
 
 # pushing merkels QA user, part one
-function merkel1() {
-    log "Telling merkels QA user that we start dinstall"
+function qa1() {
+    log "Telling QA user that we start dinstall"
     ssh -2 -i ~dak/.ssh/push_merkel_qa  -o BatchMode=yes -o SetupTimeOut=90 -o ConnectTimeout=90 qa@qa.debian.org sleep 1
 }
 
-# Create the postgres dump files
-function pgdump_pre() {
-    log "Creating pre-daily-cron-job backup of $PGDATABASE database..."
-    pg_dump > $base/backup/dump_pre_$(date +%Y.%m.%d-%H:%M:%S)
-}
-
-function pgdump_post() {
-    log "Creating post-daily-cron-job backup of $PGDATABASE database..."
-    cd $base/backup
-    POSTDUMP=$(date +%Y.%m.%d-%H:%M:%S)
-    pg_dump > $base/backup/dump_$POSTDUMP
-    #pg_dumpall --globals-only > $base/backup/dumpall_$POSTDUMP
-    ln -sf $base/backup/dump_$POSTDUMP current
-    #ln -sf $base/backup/dumpall_$POSTDUMP currentall
-}
-
-# Load the dak-dev projectb
-function pgdakdev() {
-    # Make sure to unset any possible psql variables so we don't drop the wrong
-    # f****** database by accident
-    local PGDATABASE
-    unset PGDATABASE
-    local PGHOST
-    unset PGHOST
-    local PGPORT
-    unset PGPORT
-    local PGUSER
-    unset PGUSER
-    cd $base/backup
-    echo "drop database projectb" | psql -p 5434 template1
-       #cat currentall | psql -p 5433 template1
-    createdb -p 5434 -T template1 projectb
-    fgrep -v '\connect' current | psql -p 5434 projectb
-}
-
 # Updating various files
 function updates() {
     log "Updating Bugs docu, Mirror list and mailing-lists.txt"
@@ -115,7 +88,7 @@ function i18n1() {
             # Lets check!
             if ${scriptsdir}/ddtp-i18n-check.sh . ${scriptdir}/i18n/${TSTAMP}; then
                 # Yay, worked, lets copy around
-                for dir in squeeze sid; do
+                for dir in wheezy sid; do
                     if [ -d dists/${dir}/ ]; then
                         cd dists/${dir}/main/i18n
                         rsync -aq --delete --delete-after  . ${ftpdir}/dists/${dir}/main/i18n/.
@@ -152,8 +125,6 @@ function filelist() {
 }
 
 function fingerprints() {
-    log "Not updating fingerprints - scripts needs checking"
-
     log "Updating fingerprints"
     dak import-keyring -L /srv/keyring.debian.org/keyrings/debian-keyring.gpg
 
@@ -198,10 +169,10 @@ function mpfm() {
 
 function packages() {
     log "Generating Packages and Sources files"
-    cd $configdir
-    GZIP='--rsyncable' ; export GZIP
-    #apt-ftparchive generate apt.conf
-    dak generate-packages-sources
+    #cd $configdir
+    #dak generate-packages-sources
+    dak generate-packages-sources2
+    dak contents generate
 }
 
 function pdiff() {
@@ -250,13 +221,13 @@ function mklslar() {
         mv -f ${FILENAME}.gz ${FILENAME}.old.gz
         mv -f .${FILENAME}.new ${FILENAME}
         rm -f ${FILENAME}.patch.gz
-        zcat ${FILENAME}.old.gz | diff -u - ${FILENAME} | gzip --rsyncable -9cfn - >${FILENAME}.patch.gz
+        zcat ${FILENAME}.old.gz | diff -u - ${FILENAME} | gzip -9cfn - >${FILENAME}.patch.gz
         rm -f ${FILENAME}.old.gz
     else
         mv -f .${FILENAME}.new ${FILENAME}
     fi
 
-    gzip --rsyncable -9cfN ${FILENAME} >${FILENAME}.gz
+    gzip -9cfN ${FILENAME} >${FILENAME}.gz
     rm -f ${FILENAME}
 }
 
@@ -264,36 +235,9 @@ function mkmaintainers() {
     log 'Creating Maintainers index ... '
 
     cd $indices
-    dak make-maintainers ${scriptdir}/masterfiles/pseudo-packages.maintainers | \
-        sed -e "s/~[^  ]*\([   ]\)/\1/"  | \
-        awk '{printf "%-20s ", $1; for (i=2; i<=NF; i++) printf "%s ", $i; printf "\n";}' > .new-maintainers
-
-    if ! cmp -s .new-maintainers Maintainers || [ ! -f Maintainers ]; then
-           log "installing Maintainers ... "
-           mv -f .new-maintainers Maintainers
-           gzip --rsyncable -9v <Maintainers >.new-maintainers.gz
-           mv -f .new-maintainers.gz Maintainers.gz
-    else
-        rm -f .new-maintainers
-    fi
-}
-
-function mkuploaders() {
-    log 'Creating Uploaders index ... '
-
-    cd $indices
-    dak make-maintainers -u ${scriptdir}/masterfiles/pseudo-packages.maintainers | \
-        sed -e "s/~[^  ]*\([   ]\)/\1/"  | \
-        awk '{printf "%-20s ", $1; for (i=2; i<=NF; i++) printf "%s ", $i; printf "\n";}' > .new-uploaders
-
-    if ! cmp -s .new-uploaders Uploaders || [ ! -f Uploaders ]; then
-           log "installing Uploaders ... "
-           mv -f .new-uploaders Uploaders
-           gzip --rsyncable -9v <Uploaders >.new-uploaders.gz
-           mv -f .new-uploaders.gz Uploaders.gz
-    else
-        rm -f .new-uploaders
-    fi
+    dak make-maintainers ${scriptdir}/masterfiles/pseudo-packages.maintainers
+    gzip -9v --rsyncable <Maintainers >Maintainers.gz
+    gzip -9v --rsyncable <Uploaders >Uploaders.gz
 }
 
 function copyoverrides() {
@@ -324,7 +268,7 @@ function mkfilesindices() {
 
     ARCHLIST=$(tempfile)
 
-    log "Querying $PGDATABASE..."
+    log "Querying postgres"
     echo 'SELECT l.path, f.filename, a.arch_string FROM location l JOIN files f ON (f.location = l.id) LEFT OUTER JOIN (binaries b JOIN architecture a ON (b.architecture = a.id)) ON (f.id = b.file)' | psql -At | sed 's/|//;s,^/srv/ftp-master.debian.org/ftp,.,' | sort >$ARCHLIST
 
     includedirs () {
@@ -340,7 +284,7 @@ function mkfilesindices() {
         cd $base/ftp
         find ./dists -maxdepth 1 \! -type d
         find ./dists \! -type d | grep "/source/"
-    ) | sort -u | gzip --rsyncable -9 > source.list.gz
+    ) | sort -u | gzip -9 > source.list.gz
 
     log "Generating arch lists"
 
@@ -352,7 +296,7 @@ function mkfilesindices() {
             cd $base/ftp
             find ./dists -maxdepth 1 \! -type d
             find ./dists \! -type d | grep -E "(proposed-updates.*_$a.changes$|/main/disks-$a/|/main/installer-$a/|/Contents-$a|/binary-$a/)"
-        ) | sort -u | gzip --rsyncable -9 > arch-$a.list.gz
+        ) | sort -u | gzip -9 > arch-$a.list.gz
     done
 
     log "Generating suite lists"
@@ -375,7 +319,7 @@ function mkfilesindices() {
                 done
             )
             suite_list $id | tr -d ' ' | sed 's,^/srv/ftp-master.debian.org/ftp,.,'
-        ) | sort -u | gzip --rsyncable -9 > suite-${suite}.list.gz
+        ) | sort -u | gzip -9 > suite-${suite}.list.gz
     done
 
     log "Finding everything on the ftp site to generate sundries"
@@ -394,12 +338,12 @@ function mkfilesindices() {
     done
 
     (cd $base/ftp/
-           for dist in sid squeeze; do
-                   find ./dists/$dist/main/i18n/ \! -type d | sort -u | gzip --rsyncable -9 > $base/ftp/indices/files/components/translation-$dist.list.gz
+           for dist in sid wheezy; do
+                   find ./dists/$dist/main/i18n/ \! -type d | sort -u | gzip -9 > $base/ftp/indices/files/components/translation-$dist.list.gz
            done
     )
 
-    (cat ../arch-i386.files ../arch-amd64.files; zcat suite-proposed-updates.list.gz ; zcat translation-sid.list.gz ; zcat translation-squeeze.list.gz) |
+    (cat ../arch-i386.files ../arch-amd64.files; zcat suite-proposed-updates.list.gz ; zcat translation-sid.list.gz ; zcat translation-wheezy.list.gz) |
     sort -u | poolfirst > ../typical.files
 
     rm -f $ARCHLIST
@@ -414,7 +358,7 @@ function mkchecksums() {
 
     cd "$ftpdir"
     ${bindir}/dsync-flist -q generate $dsynclist --exclude $dsynclist --md5
-    ${bindir}/dsync-flist -q md5sums $dsynclist | gzip -9n --rsyncable > ${md5list}.gz
+    ${bindir}/dsync-flist -q md5sums $dsynclist | gzip -9n > ${md5list}.gz
     ${bindir}/dsync-flist -q link-dups $dsynclist || true
 }
 
@@ -432,7 +376,7 @@ function mirror() {
     echo "Running on host: $(hostname -f)" >> ${TRACEFILE}
     echo "Archive serial: ${SERIAL}" >> ${TRACEFILE}
     cd ${mirrordir}
-    rsync -aH --link-dest ${ftpdir} --delete --delete-after --ignore-errors ${ftpdir}/. .
+    rsync -aH --link-dest ${ftpdir} --delete --delete-after --delete-excluded --exclude Packages.*.new --exclude Sources.*.new  --ignore-errors ${ftpdir}/. .
 }
 
 function expire() {
@@ -457,21 +401,60 @@ function bts() {
     dak bts-categorize
 }
 
-function merkel2() {
-    # Push dak@merkel so it syncs the projectb there. Returns immediately, the sync runs detached
-    log "Trigger merkel/flotows $PGDATABASE sync"
-    ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_projectb dak@merkel.debian.org sleep 1
-    # Also trigger flotow, the ftpmaster test box
-    ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_flotow_projectb dak@flotow.debconf.org sleep 1
-}
-
-function merkel3() {
-    # Push dak@merkel to tell it to sync the dd accessible parts. Returns immediately, the sync runs detached
-    log "Trigger merkels dd accessible parts sync"
-    ssh -2 -o BatchMode=yes -o SetupTimeOut=30 -o ConnectTimeout=30 -i ~/.ssh/push_merkel_ddaccess dak@merkel.debian.org sleep 1
+function ddaccess() {
+    # Tell our dd accessible mirror to sync itself up. Including ftp dir.
+    log "Trigger dd accessible parts sync including ftp dir"
+    ssh -o Batchmode=yes -o ConnectTimeout=30 -o SetupTimeout=30 -2 -i ${base}/s3kr1t/pushddmirror dak@ries.debian.org pool
 }
 
 function mirrorpush() {
+    log "Checking the public archive copy"
+    cd ${mirrordir}/dists
+
+    broken=0
+    for release in $(find . -name "InRelease"); do
+        echo "Processing: ${release}"
+        subdir=${release%/InRelease}
+        while read SHASUM SIZE NAME; do
+            if ! [ -f "${subdir}/${NAME}" ]; then
+               bname=$(basename ${NAME})
+                if [ "${bname}" = "Packages" ] || [ "${bname}" = "Sources" ]; then
+                    # We don't keep unpacked files, don't check for their existance.
+                    # We might want to go and check their unpacked shasum, but right now
+                    # I don't care. I believe it should be enough if all the packed shasums
+                    # match.
+                    continue
+                fi
+               broken=$(( broken + 1 ))
+                echo "File ${subdir}/${NAME} is missing"
+                continue
+            fi
+
+           # We do have symlinks in the tree (see the contents files currently).
+           # So we use "readlink -f" to check the size of the target, as thats basically
+           # what gen-releases does
+            fsize=$(stat -c %s $(readlink -f "${subdir}/${NAME}"))
+            if [ ${fsize} -ne ${SIZE} ]; then
+                broken=$(( broken + 1 ))
+                echo "File ${subdir}/${NAME} has size ${fsize}, expected is ${SIZE}"
+                continue
+            fi
+
+            fshasum=$(sha1sum $(readlink -f "${subdir}/${NAME}"))
+            fshasum=${fshasum%% *}
+            if [ "${fshasum}" != "${SHASUM}" ]; then
+                broken=$(( broken + 1 ))
+                echo "File ${subdir}/${NAME} has checksum ${fshasum}, expected is ${SHASUM}"
+                continue
+            fi
+        done < <(sed '1,/SHA1:/d' "${release}" | sed '/SHA256:/,$d')
+    done
+
+    if [ $broken -gt 0 ]; then
+        log_error "Trouble with the public mirror, found ${broken} errors"
+        return 21
+    fi
+
     log "Starting the mirrorpush"
     date -u > /srv/ftp.debian.org/web/mirrorstart
     echo "Using dak v1" >> /srv/ftp.debian.org/web/mirrorstart
@@ -484,8 +467,8 @@ function i18n2() {
     STAMP=$(date "+%Y%m%d%H%M")
     mkdir -p ${scriptdir}/i18n/${STAMP}
     cd ${scriptdir}/i18n/${STAMP}
-    dak control-suite -l stable > lenny
-    dak control-suite -l testing > squeeze
+    dak control-suite -l stable > squeeze
+    dak control-suite -l testing > wheezy
     dak control-suite -l unstable > sid
     echo "${STAMP}" > timestamp
     gpg --secret-keyring /srv/ftp-master.debian.org/s3kr1t/dot-gnupg/secring.gpg --keyring /srv/ftp-master.debian.org/s3kr1t/dot-gnupg/pubring.gpg --no-options --batch --no-tty --armour --default-key 55BE302B --detach-sign -o timestamp.gpg timestamp
@@ -513,22 +496,10 @@ function aptftpcleanup() {
     apt-ftparchive -q clean apt.conf
 }
 
-function compress() {
-    log "Compress old psql backups"
+function cleantransactions() {
+    log "Cleanup transaction ids older than 3 months"
     cd $base/backup/
-    find -maxdepth 1 -mindepth 1 -type f -name 'dump_pre_*' -mtime +2 -print0 | xargs -0 --no-run-if-empty rm
-
-    find -maxdepth 1 -mindepth 1 -type f -name 'dump_*' \! -name '*.bz2' \! -name '*.gz' -mmin +720 |
-    while read dumpname; do
-        echo "Compressing $dumpname"
-        bzip2 -9fv "$dumpname"
-    done
-    find -maxdepth 1 -mindepth 1 -type f -name "dumpall_*" \! -name '*.bz2' \! -name '*.gz' -mmin +720 |
-    while read dumpname; do
-        echo "Compressing $dumpname"
-        bzip2 -9fv "$dumpname"
-    done
-    finddup -l -d $base/backup
+    find -maxdepth 1 -mindepth 1 -type f -name 'txid_*' -mtime +90 -print0 | xargs -0 --no-run-if-empty rm
 }
 
 function logstats() {
@@ -604,3 +575,36 @@ function changelogs() {
     rsync -aHW --delete --delete-after --ignore-errors ${exportdir}/changelogs/. .
     sudo -H -u archvsync /home/archvsync/runmirrors metaftpdo > ~dak/runmirrors-metadata.log 2>&1 &
 }
+
+function gitpdiff() {
+    # Might be that we want to change this to have more than one git repository.
+    # Advantage of one is that we do not need much space in terms of storage in git itself,
+    # git gc is pretty good on our input.
+    # But it might be faster. Well, lets test.
+    log "Adjusting the git tree for pdiffs"
+    cd ${dbdir}/git/git/
+
+    # The regex needs the architectures seperated with \|
+    garchs=$(dak admin a list|sed -e ':q;N;s/\n/\\|/g;t q')
+
+    # First, get all the files we want to work on. ../dists/ is a symlink to the real dists/ we
+    # want to work with.
+    # Also, we only want contents, packages and sources.
+    for file in $(find ../dists/ -regex ".*/\(Contents-\($archs\)\|\(Packages\|Sources\)\).gz"); do
+        log "${file}"
+        basen=${file%%.gz};
+        basen=${basen##../};
+        dir=${basen%/*};
+        mkdir -p $dir;
+        zcat $file > $basen;
+    done
+
+    # Second, add all there is into git
+    cd dists
+    git add .
+    # Maybe we want to make this the same for tag and commit? But well, shouldn't matter
+    COMD=$(date  -Is)
+    TAGD=$(date +%Y-%m-%d-%H-%M)
+    git commit -m "Commit of ${COMD}"
+    git tag "${TAGD}"
+ }
index 4677d7c1e04b8d93d6de33b26e1d16bc810f06d4..19dee850447b05a30e59ae597be21db5bc72ead3 100644 (file)
@@ -6,7 +6,7 @@ bindir=$base/bin
 ftpdir=$base/ftp
 webdir=$public/web
 indices=$ftpdir/indices
-archs="alpha amd64 arm armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc kfreebsd-i386 kfreebsd-amd64 "
+archs=$(dak admin a list | tr '\n' ' ')
 
 scriptdir=$base/scripts
 masterdir=$base/dak/
@@ -30,13 +30,14 @@ exportpublic=$public/rsync/export/
 
 ftpgroup=debadmin
 
-copyoverrides="etch.contrib etch.contrib.src etch.main etch.main.src etch.non-free etch.non-free.src etch.extra.main etch.extra.non-free etch.extra.contrib etch.main.debian-installer sid.contrib sid.contrib.src sid.main sid.main.debian-installer sid.main.src sid.non-free sid.non-free.src sid.extra.contrib sid.extra.main sid.extra.non-free lenny.contrib lenny.contrib.src lenny.main lenny.main.src lenny.non-free lenny.non-free.src lenny.extra.main lenny.extra.contrib lenny.extra.non-free squeeze.contrib squeeze.contrib.src squeeze.main squeeze.main.src squeeze.non-free squeeze.non-free.src squeeze.extra.main squeeze.extra.contrib squeeze.extra.non-free"
+copyoverrides="wheezy.contrib wheezy.contrib.src wheezy.main wheezy.main.src wheezy.non-free wheezy.non-free.src wheezy.extra.main wheezy.extra.non-free wheezy.extra.contrib wheezy.main.debian-installer sid.contrib sid.contrib.src sid.main sid.main.debian-installer sid.main.src sid.non-free sid.non-free.src sid.extra.contrib sid.extra.main sid.extra.non-free lenny.contrib lenny.contrib.src lenny.main lenny.main.src lenny.non-free lenny.non-free.src lenny.extra.main lenny.extra.contrib lenny.extra.non-free squeeze.contrib squeeze.contrib.src squeeze.main squeeze.main.src squeeze.non-free squeeze.non-free.src squeeze.extra.main squeeze.extra.contrib squeeze.extra.non-free"
 
 TMPDIR=${base}/tmp
 
 PATH=$masterdir:$PATH
 umask 022
 unset CDPATH
+GZIP='--rsyncable' ; export GZIP
 
 # Set the database variables
 eval $(dak admin config db-shell)
index 0297a816dc646548b92faaf870c68a828d23c4a0..2a4fd452be35359feac8efef350fcaf8e87c05ce 100644 (file)
@@ -34,7 +34,7 @@ case "$HOSTNAME" in
     morricone)
         export SCRIPTVARS=/srv/backports-master.debian.org/dak/config/backports/vars
         ;;
-    chopin|ries)
+    chopin)
         export SCRIPTVARS=/srv/security-master.debian.org/dak/config/debian-security/vars
         ;;
     *)
@@ -57,3 +57,4 @@ export CDPATH=".:~:${base}:${public}:${queuedir}"
 
 alias base='cd ${base}'
 alias config='cd ${configdir}'
+alias psql='LD_PRELOAD=/lib/libreadline.so.5 psql'
diff --git a/config/homedir/syncdd.sh b/config/homedir/syncdd.sh
new file mode 100755 (executable)
index 0000000..07c4bc5
--- /dev/null
@@ -0,0 +1,127 @@
+#!/bin/bash
+
+# Copyright (C) 2011 Joerg Jaspert <joerg@debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+set -e
+set -u
+set -E
+
+export LANG=C
+export LC_ALL=C
+
+export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
+. $SCRIPTVARS
+
+EXTRA=""
+
+check_commandline() {
+    while [ $# -gt 0 ]; do
+        case "$1" in
+            sync)
+                EXTRA="--exclude ftp/"
+                ;;
+            pool)
+                ;;
+            *)
+                echo "Unknown option ${1} ignored"
+                ;;
+        esac
+        shift  # Check next set of parameters.
+    done
+}
+
+if [ $# -gt 0 ]; then
+    ORIGINAL_COMMAND=$*
+else
+    ORIGINAL_COMMAND=""
+fi
+
+SSH_ORIGINAL_COMMAND=${SSH_ORIGINAL_COMMAND:-""}
+if [ -n "${SSH_ORIGINAL_COMMAND}" ]; then
+    set "nothing" "${SSH_ORIGINAL_COMMAND}"
+    shift
+    check_commandline $*
+fi
+
+if [ -n "${ORIGINAL_COMMAND}" ]; then
+    set ${ORIGINAL_COMMAND}
+    check_commandline $*
+fi
+
+
+cleanup() {
+    rm -f "${HOME}/sync.lock"
+}
+trap cleanup EXIT TERM HUP INT QUIT
+
+# not using $lockdir as thats inside the rsync dir, and --delete would
+# kick the lock away. Yes we could exclude it, but wth bother?
+#
+# Also, NEVER use --delete-excluded!
+if lockfile -r3 ${HOME}/sync.lock; then
+    cd $base/
+    rsync -aH -B8192 \
+        --exclude backup/*.xz \
+        --exclude backup/dump* \
+        --exclude database/\*.db \
+        ${EXTRA} \
+        --exclude mirror \
+        --exclude morgue/ \
+        --exclude=lost+found/ \
+        --exclude .da-backup.trace \
+        --exclude lock/ \
+        --exclude queue/holding/ \
+        --exclude queue/newstage/ \
+        --exclude queue/unchecked/ \
+        --exclude tmp/ \
+        --delete \
+        --delete-after \
+        --timeout 3600 \
+        -e 'ssh -o ConnectTimeout=30 -o SetupTimeout=30' \
+        ftpmaster-sync:/srv/ftp-master.debian.org/ .
+
+    cd $public/
+    rsync -aH -B8192 \
+        --exclude mirror \
+        --exclude rsync/ \
+        --exclude=lost+found/ \
+        --exclude .da-backup.trace \
+        --exclude web-users/ \
+        --delete \
+        --delete-after \
+        --timeout 3600 \
+        -e 'ssh -o ConnectTimeout=30 -o SetupTimeout=30' \
+        ftpmaster-sync2:/srv/ftp.debian.org/ .
+
+else
+    echo "Couldn't get the lock, not syncing"
+    exit 0
+fi
+
+
+## ftpmaster-sync is defined in .ssh/config as:
+# Host ftpmaster-sync
+#   Hostname franck.debian.org
+#   User dak
+#   IdentityFile ~dak/.ssh/syncftpmaster
+#   ForwardX11 no
+#   ForwardAgent no
+#   StrictHostKeyChecking yes
+#   PasswordAuthentication no
+#   BatchMode yes
+
+## ftpmaster-sync2 is the same, just a second ssh key
index 2bb1f1853187af821ccf06c317bf40cc6de8aefd..1dc7e7bc3a449512245db15a684287800df8e4f3 100755 (executable)
@@ -25,6 +25,7 @@ import apt_pkg
 
 from daklib import utils
 from daklib.dbconn import *
+from sqlalchemy.orm.exc import NoResultFound
 
 ################################################################################
 
@@ -58,6 +59,12 @@ Perform administrative work on the dak database.
   config / c:
      c db                   show db config
      c db-shell             show db config in a usable form for psql
+     c NAME                 show option NAME as set in configuration table
+
+  keyring / k:
+     k list-all             list all keyrings
+     k list-binary          list all keyrings with a NULL source acl
+     k list-source          list all keyrings with a non NULL source acl
 
   architecture / a:
      a list                 show a list of architectures
@@ -77,11 +84,21 @@ Perform administrative work on the dak database.
                             description, origin and codename are optional.
 
   suite-architecture / s-a:
+     s-a list               show the architectures for all suites
      s-a list-suite ARCH    show the suites an ARCH is in
      s-a list-arch SUITE    show the architectures in a SUITE
      s-a add SUITE ARCH     add ARCH to suite
      s-a rm SUITE ARCH      remove ARCH from suite (will only work if
                             no packages remain for the arch in the suite)
+
+  version-check / v-c:
+     v-c list                        show version checks for all suites
+     v-c list-suite SUITE            show version checks for suite SUITE
+     v-c add SUITE CHECK REFERENCE   add a version check for suite SUITE
+     v-c rm SUITE CHECK REFERENCE    rmove a version check
+       where
+         CHECK     is one of Enhances, MustBeNewerThan, MustBeOlderThan
+        REFERENCE is another suite name
 """
     sys.exit(exit_code)
 
@@ -96,10 +113,11 @@ def __architecture_list(d, args):
     sys.exit(0)
 
 def __architecture_add(d, args):
-    die_arglen(args, 3, "E: adding an architecture requires a name and a description")
+    die_arglen(args, 4, "E: adding an architecture requires a name and a description")
     print "Adding architecture %s" % args[2]
     suites = [str(x) for x in args[4:]]
-    print suites
+    if len(suites) > 0:
+        print "Adding to suites %s" % ", ".join(suites)
     if not dryrun:
         try:
             s = d.session()
@@ -108,12 +126,9 @@ def __architecture_add(d, args):
             a.description = str(args[3])
             s.add(a)
             for sn in suites:
-                su = get_suite(sn ,s)
+                su = get_suite(sns)
                 if su is not None:
-                    archsu = SuiteArchitecture()
-                    archsu.arch_id = a.arch_id
-                    archsu.suite_id = su.suite_id
-                    s.add(archsu)
+                    a.suites.append(su)
                 else:
                     warn("W: Cannot find suite %s" % su)
             s.commit()
@@ -234,22 +249,27 @@ dispatch['s'] = suite
 
 def __suite_architecture_list(d, args):
     s = d.session()
-    for j in s.query(Suite).order_by('suite_name').all():
-        print j.suite_name + ' ' + \
-              ','.join([a.architecture.arch_string for a in j.suitearchitectures])
+    for j in s.query(Suite).order_by('suite_name'):
+        architectures = j.get_architectures(skipsrc = True, skipall = True)
+        print j.suite_name + ': ' + \
+              ', '.join([a.arch_string for a in architectures])
 
 def __suite_architecture_listarch(d, args):
     die_arglen(args, 3, "E: suite-architecture list-arch requires a suite")
-    a = get_suite_architectures(args[2].lower())
+    suite = get_suite(args[2].lower(), d.session())
+    if suite is None:
+        die('E: suite %s is invalid' % args[2].lower())
+    a = suite.get_architectures(skipsrc = True, skipall = True)
     for j in a:
-        # HACK: We should get rid of source from the arch table
-        if j.arch_string != 'source':
-            print j.arch_string
+        print j.arch_string
 
 
 def __suite_architecture_listsuite(d, args):
     die_arglen(args, 3, "E: suite-architecture list-suite requires an arch")
-    for j in get_architecture_suites(args[2].lower()):
+    architecture = get_architecture(args[2].lower(), d.session())
+    if architecture is None:
+        die("E: architecture %s is invalid" % args[2].lower())
+    for j in architecture.suites:
         print j.suite_name
 
 
@@ -267,10 +287,7 @@ def __suite_architecture_add(d, args):
 
     if not dryrun:
         try:
-            sa = SuiteArchitecture()
-            sa.arch_id = arch.arch_id
-            sa.suite_id = suite.suite_id
-            s.add(sa)
+            suite.architectures.append(arch)
             s.commit()
         except IntegrityError, e:
             die("E: Can't add suite-architecture entry (%s, %s) - probably already exists" % (args[2].lower(), args[3].lower()))
@@ -287,10 +304,15 @@ def __suite_architecture_rm(d, args):
     s = d.session()
     if not dryrun:
         try:
-            sa = get_suite_architecture(args[2].lower(), args[3].lower(), s)
-            if sa is None:
-                die("E: can't find suite-architecture entry for %s, %s" % (args[2].lower(), args[3].lower()))
-            s.delete(sa)
+            suite_name = args[2].lower()
+            suite = get_suite(suite_name, s)
+            if suite is None:
+                die('E: no such suite %s' % suite_name)
+            arch_string = args[3].lower()
+            architecture = get_architecture(arch_string, s)
+            if architecture not in suite.architectures:
+                die("E: architecture %s not found in suite %s" % (arch_string, suite_name))
+            suite.architectures.remove(architecture)
             s.commit()
         except IntegrityError, e:
             die("E: Can't remove suite-architecture entry (%s, %s) - it's probably referenced" % (args[2].lower(), args[3].lower()))
@@ -327,6 +349,78 @@ dispatch['s-a'] = suite_architecture
 
 ################################################################################
 
+def __version_check_list(d):
+    session = d.session()
+    for s in session.query(Suite).order_by('suite_name'):
+        __version_check_list_suite(d, s.suite_name)
+
+def __version_check_list_suite(d, suite_name):
+    vcs = get_version_checks(suite_name)
+    for vc in vcs:
+        print "%s %s %s" % (suite_name, vc.check, vc.reference.suite_name)
+
+def __version_check_add(d, suite_name, check, reference_name):
+    suite = get_suite(suite_name)
+    if not suite:
+        die("E: Could not find suite %s." % (suite_name))
+    reference = get_suite(reference_name)
+    if not reference:
+        die("E: Could not find reference suite %s." % (reference_name))
+
+    session = d.session()
+    vc = VersionCheck()
+    vc.suite = suite
+    vc.check = check
+    vc.reference = reference
+    session.add(vc)
+    session.commit()
+
+def __version_check_rm(d, suite_name, check, reference_name):
+    suite = get_suite(suite_name)
+    if not suite:
+        die("E: Could not find suite %s." % (suite_name))
+    reference = get_suite(reference_name)
+    if not reference:
+        die("E: Could not find reference suite %s." % (reference_name))
+
+    session = d.session()
+    try:
+      vc = session.query(VersionCheck).filter_by(suite=suite, check=check, reference=reference).one()
+      session.delete(vc)
+      session.commit()
+    except NoResultFound:
+      print "W: version-check not found."
+
+def version_check(command):
+    args = [str(x) for x in command]
+    Cnf = utils.get_conf()
+    d = DBConn()
+
+    die_arglen(args, 2, "E: version-check needs at least a command")
+    mode = args[1].lower()
+
+    if mode == 'list':
+        __version_check_list(d)
+    elif mode == 'list-suite':
+        if len(args) != 3:
+            die("E: version-check list-suite needs a single parameter")
+        __version_check_list_suite(d, args[2])
+    elif mode == 'add':
+        if len(args) != 5:
+            die("E: version-check add needs three parameters")
+        __version_check_add(d, args[2], args[3], args[4])
+    elif mode == 'rm':
+        if len(args) != 5:
+            die("E: version-check rm needs three parameters")
+        __version_check_rm(d, args[2], args[3], args[4])
+    else:
+        die("E: version-check command unknown")
+
+dispatch['version-check'] = version_check
+dispatch['v-c'] = version_check
+
+################################################################################
+
 def show_config(command):
     args = [str(x) for x in command]
     cnf = utils.get_conf()
@@ -337,10 +431,13 @@ def show_config(command):
 
     if mode == 'db':
         connstr = ""
-        if cnf["DB::Host"]:
+        if cnf.has_key("DB::Service"):
+            # Service mode
+            connstr = "postgresql://service=%s" % cnf["DB::Service"]
+        elif cnf.has_key("DB::Host"):
             # TCP/IP
             connstr = "postgres://%s" % cnf["DB::Host"]
-            if cnf["DB::Port"] and cnf["DB::Port"] != "-1":
+            if cnf.has_key("DB::Port") and cnf["DB::Port"] != "-1":
                 connstr += ":%s" % cnf["DB::Port"]
             connstr += "/%s" % cnf["DB::Name"]
         else:
@@ -350,23 +447,62 @@ def show_config(command):
                 connstr += "?port=%s" % cnf["DB::Port"]
         print connstr
     elif mode == 'db-shell':
-        e = ['PGDATABASE']
-        print "PGDATABASE=%s" % cnf["DB::Name"]
-        if cnf["DB::Host"]:
+        e = []
+        if cnf.has_key("DB::Service"):
+            e.append('PGSERVICE')
+            print "PGSERVICE=%s" % cnf["DB::Service"]
+        if cnf.has_key("DB::Name"):
+            e.append('PGDATABASE')
+            print "PGDATABASE=%s" % cnf["DB::Name"]
+        if cnf.has_key("DB::Host"):
             print "PGHOST=%s" % cnf["DB::Host"]
             e.append('PGHOST')
-        if cnf["DB::Port"] and cnf["DB::Port"] != "-1":
+        if cnf.has_key("DB::Port") and cnf["DB::Port"] != "-1":
             print "PGPORT=%s" % cnf["DB::Port"]
             e.append('PGPORT')
         print "export " + " ".join(e)
     else:
-        die("E: config command unknown")
+        session = DBConn().session()
+        try:
+            o = session.query(DBConfig).filter_by(name = mode).one()
+            print o.value
+        except NoResultFound:
+            print "W: option '%s' not set" % mode
 
 dispatch['config'] = show_config
 dispatch['c'] = show_config
 
 ################################################################################
 
+def show_keyring(command):
+    args = [str(x) for x in command]
+    cnf = utils.get_conf()
+
+    die_arglen(args, 2, "E: keyring needs at least a command")
+
+    mode = args[1].lower()
+
+    d = DBConn()
+
+    q = d.session().query(Keyring).filter(Keyring.active == True)
+
+    if mode == 'list-all':
+        pass
+    elif mode == 'list-binary':
+        q = q.filter(Keyring.default_source_acl_id == None)
+    elif mode == 'list-source':
+        q = q.filter(Keyring.default_source_acl_id != None)
+    else:
+        die("E: keyring command unknown")
+
+    for k in q.all():
+        print k.keyring_name
+
+dispatch['keyring'] = show_keyring
+dispatch['k'] = show_keyring
+
+################################################################################
+
 def main():
     """Perform administrative work on the dak database"""
     global dryrun
index 75ba5a0e2171b880cc412108f2abf1b0869d9eba..a8e0f1d9eb6a172a4d1fa1629fd3690b8f6e57ed 100755 (executable)
@@ -1,8 +1,14 @@
 #!/usr/bin/env python
 
-""" Cruft checker and hole filler for overrides """
-# Copyright (C) 2000, 2001, 2002, 2004, 2006  James Troup <james@nocrew.org>
-# Copyright (C) 2005  Jeroen van Wolffelaar <jeroen@wolffelaar.nl>
+""" Cruft checker and hole filler for overrides
+
+@contact: Debian FTPMaster <ftpmaster@debian.org>
+@copyright: 2000, 2001, 2002, 2004, 2006  James Troup <james@nocrew.org>
+@opyright: 2005  Jeroen van Wolffelaar <jeroen@wolffelaar.nl>
+@copyright: 2011  Joerg Jaspert <joerg@debian.org>
+@license: GNU General Public License version 2 or later
+
+"""
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -58,8 +64,8 @@ from daklib import utils
 
 ################################################################################
 
-Options = None
-Logger = None
+Options = None                 #: Commandline arguments parsed into this
+Logger = None                  #: Our logging object
 sections = {}
 priorities = {}
 blacklist = {}
@@ -150,7 +156,8 @@ SELECT s.source FROM source s, src_associations sa, files f, location l,
                 if not Options["No-Action"]:
                     session.execute("""DELETE FROM override WHERE package = :package
                                           AND suite = :suite_id AND component = :component_id
-                                          AND type = :type_id""",
+                                          AND type = :type_id
+                                          AND created < now() - interval '14 days'""",
                                     {'package': package, 'suite_id': osuite_id,
                                      'component_id': component_id, 'type_id': type_id})
         # create source overrides based on binary overrides, as source
@@ -239,7 +246,8 @@ SELECT s.source FROM source s, src_associations sa, files f, location l,
                 if not Options["No-Action"]:
                     session.execute("""DELETE FROM override
                                         WHERE package = :package AND suite = :suite_id
-                                          AND component = :component_id AND type = :type_id""",
+                                          AND component = :component_id AND type = :type_id
+                                          AND created < now() - interval '14 days'""",
                                     {'package': package, 'suite_id': osuite_id,
                                      'component_id': component_id, 'type_id': type_id})
 
@@ -333,9 +341,9 @@ def main ():
         priorities[entry] = name
 
     if not Options["No-Action"]:
-        Logger = daklog.Logger(cnf, "check-overrides")
+        Logger = daklog.Logger("check-overrides")
     else:
-        Logger = daklog.Logger(cnf, "check-overrides", 1)
+        Logger = daklog.Logger("check-overrides", 1)
 
     for osuite in cnf.SubTree("Check-Overrides::OverrideSuites").List():
         if "1" != cnf["Check-Overrides::OverrideSuites::%s::Process" % osuite]:
index f6964508a5b7e76a71f0c7347e5a0d441cdf44a1..474fe390cacbb1dbdcc36da812bf44f8715e78bf 100755 (executable)
@@ -193,7 +193,7 @@ def main ():
     if Options["Help"]:
         usage()
 
-    Logger = daklog.Logger(cnf, 'clean-queues', Options['No-Action'])
+    Logger = daklog.Logger('clean-queues', Options['No-Action'])
 
     init(cnf)
 
index c6a0a77761a2f429363a176d6f16e69909d777c0..5e41d372785a117e44c7ac0393afc085dc410601 100755 (executable)
@@ -254,7 +254,8 @@ def clean(now_date, delete_date, max_delete, session):
     q = session.execute("""
 SELECT s.id, f.filename FROM source s, files f
   WHERE f.last_used <= :deletedate
-        AND s.file = f.id""", {'deletedate': delete_date})
+        AND s.file = f.id
+        AND s.id NOT IN (SELECT src_id FROM extra_src_references)""", {'deletedate': delete_date})
     for s in q.fetchall():
         Logger.log(["delete source", s[1], s[0]])
         if not Options["No-Action"]:
@@ -425,7 +426,7 @@ def main():
     if Options["Help"]:
         usage()
 
-    Logger = daklog.Logger(cnf, "clean-suites", debug=Options["No-Action"])
+    Logger = daklog.Logger("clean-suites", debug=Options["No-Action"])
 
     session = DBConn().session()
 
index e5fb129da119028254f5fe847edb1489604e19b0..76effc1d91306069203f498cd4169488c3643862 100755 (executable)
@@ -5,6 +5,7 @@ Create all the contents files
 @contact: Debian FTPMaster <ftpmaster@debian.org>
 @copyright: 2008, 2009 Michael Casadevall <mcasadevall@debian.org>
 @copyright: 2009 Mike O'Connor <stew@debian.org>
+@copyright: 2011 Torsten Werner <twerner@debian.org>
 @license: GNU General Public License version 2 or later
 """
 
@@ -35,641 +36,122 @@ Create all the contents files
 ################################################################################
 
 import sys
-import os
-import logging
-import gzip
-import threading
-import traceback
-import Queue
 import apt_pkg
-import datetime
-import traceback
-from daklib import utils
-from daklib.binary import Binary
+
 from daklib.config import Config
 from daklib.dbconn import *
+from daklib.contents import BinaryContentsScanner, ContentsWriter, \
+    SourceContentsScanner
+from daklib import daklog
+from daklib import utils
 
 ################################################################################
 
 def usage (exit_code=0):
-    print """Usage: dak contents [options] command [arguments]
+    print """Usage: dak contents [options] subcommand
 
-COMMANDS
+SUBCOMMANDS
     generate
         generate Contents-$arch.gz files
 
-    bootstrap_bin
-        scan the debs in the existing pool and load contents into the bin_contents table
-
-    bootstrap
-        copy data from the bin_contents table into the deb_contents / udeb_contents tables
+    scan-source
+        scan the source packages in the existing pool and load contents into
+        the src_contents table
 
-    cruft
-        remove files/paths which are no longer referenced by a binary
+    scan-binary
+        scan the (u)debs in the existing pool and load contents into the
+        bin_contents table
 
 OPTIONS
      -h, --help
         show this help and exit
 
-     -v, --verbose
-        show verbose information messages
+OPTIONS for generate
+     -s, --suite={stable,testing,unstable,...}
+        only operate on specified suite names
 
-     -q, --quiet
-        supress all output but errors
+     -c, --component={main,contrib,non-free}
+        only operate on specified components
 
-     -s, --suite={stable,testing,unstable,...}
-        only operate on a single suite
+     -f, --force
+        write Contents files for suites marked as untouchable, too
+
+OPTIONS for scan-source and scan-binary
+     -l, --limit=NUMBER
+        maximum number of packages to scan
 """
     sys.exit(exit_code)
 
 ################################################################################
 
-# where in dak.conf all of our configuration will be stowed
+def write_all(cnf, suite_names = [], component_names = [], force = None):
+    Logger = daklog.Logger('contents generate')
+    ContentsWriter.write_all(Logger, suite_names, component_names, force)
+    Logger.close()
 
-options_prefix = "Contents"
-options_prefix = "%s::Options" % options_prefix
+################################################################################
 
-log = logging.getLogger()
+def binary_scan_all(cnf, limit):
+    Logger = daklog.Logger('contents scan-binary')
+    result = BinaryContentsScanner.scan_all(limit)
+    processed = '%(processed)d packages processed' % result
+    remaining = '%(remaining)d packages remaining' % result
+    Logger.log([processed, remaining])
+    Logger.close()
 
 ################################################################################
 
-class EndOfContents(object):
-    """
-    A sentry object for the end of the filename stream
-    """
-    pass
-
-class OneAtATime(object):
-    """
-    a one space queue which sits between multiple possible producers
-    and multiple possible consumers
-    """
-    def __init__(self):
-        self.next_in_line = None
-        self.read_lock = threading.Condition()
-        self.write_lock = threading.Condition()
-        self.die = False
-
-    def enqueue(self, next):
-        self.write_lock.acquire()
-        while self.next_in_line:
-            if self.die:
-                return
-            self.write_lock.wait()
-
-        assert( not self.next_in_line )
-        self.next_in_line = next
-        self.write_lock.release()
-        self.read_lock.acquire()
-        self.read_lock.notify()
-        self.read_lock.release()
-
-    def dequeue(self):
-        self.read_lock.acquire()
-        while not self.next_in_line:
-            if self.die:
-                return
-            self.read_lock.wait()
-
-        result = self.next_in_line
-
-        self.next_in_line = None
-        self.read_lock.release()
-        self.write_lock.acquire()
-        self.write_lock.notify()
-        self.write_lock.release()
-
-        return result
-
-
-class ContentsWorkThread(threading.Thread):
-    """
-    """
-    def __init__(self, upstream, downstream):
-        threading.Thread.__init__(self)
-        self.upstream = upstream
-        self.downstream = downstream
-
-    def run(self):
-        while True:
-            try:
-                contents_file = self.upstream.dequeue()
-                if isinstance(contents_file,EndOfContents):
-                    if self.downstream:
-                        self.downstream.enqueue(contents_file)
-                    break
-
-                s = datetime.datetime.now()
-                print("%s start: %s" % (self,contents_file) )
-                self._run(contents_file)
-                print("%s finished: %s in %d seconds" % (self, contents_file, (datetime.datetime.now()-s).seconds ))
-                if self.downstream:
-                    self.downstream.enqueue(contents_file)
-            except:
-                traceback.print_exc()
-
-class QueryThread(ContentsWorkThread):
-    def __init__(self, upstream, downstream):
-        ContentsWorkThread.__init__(self, upstream, downstream)
-
-    def __str__(self):
-        return "QueryThread"
-    __repr__ = __str__
-
-    def _run(self, contents_file):
-        contents_file.query()
-
-class IngestThread(ContentsWorkThread):
-    def __init__(self, upstream, downstream):
-        ContentsWorkThread.__init__(self, upstream, downstream)
-
-    def __str__(self):
-        return "IngestThread"
-    __repr__ = __str__
-
-    def _run(self, contents_file):
-        contents_file.ingest()
-
-class SortThread(ContentsWorkThread):
-    def __init__(self, upstream, downstream):
-        ContentsWorkThread.__init__(self, upstream, downstream)
-
-    def __str__(self):
-        return "SortThread"
-    __repr__ = __str__
-
-    def _run(self, contents_file):
-        contents_file.sorted_keys = sorted(contents_file.filenames.keys())
-
-class OutputThread(ContentsWorkThread):
-    def __init__(self, upstream, downstream):
-        ContentsWorkThread.__init__(self, upstream, downstream)
-
-    def __str__(self):
-        return "OutputThread"
-    __repr__ = __str__
-
-    def _run(self, contents_file):
-        contents_file.open_file()
-        for fname in contents_file.sorted_keys:
-            contents_file.filehandle.write("%s\t%s\n" % (fname,contents_file.filenames[fname]))
-        contents_file.sorted_keys = None
-        contents_file.filenames.clear()
-
-class GzipThread(ContentsWorkThread):
-    def __init__(self, upstream, downstream):
-        ContentsWorkThread.__init__(self, upstream, downstream)
-
-    def __str__(self):
-        return "GzipThread"
-    __repr__ = __str__
-
-    def _run(self, contents_file):
-        os.system("gzip -f %s" % contents_file.filename)
-
-class ContentFile(object):
-    def __init__(self,
-                 filename,
-                 suite_str,
-                 suite_id):
-
-        self.filename = filename
-        self.filenames = {}
-        self.sorted_keys = None
-        self.suite_str = suite_str
-        self.suite_id = suite_id
-        self.session = None
-        self.filehandle = None
-        self.results = None
-
-    def __str__(self):
-        return self.filename
-    __repr__ = __str__
-
-
-    def cleanup(self):
-        self.filenames = None
-        self.sortedkeys = None
-        self.filehandle.close()
-        self.session.close()
-
-    def ingest(self):
-        while True:
-            r = self.results.fetchone()
-            if not r:
-                break
-            filename, package = r
-            self.filenames[filename]=package
-
-        self.session.close()
-
-    def open_file(self):
-        """
-        opens a gzip stream to the contents file
-        """
-        filepath = Config()["Contents::Root"] + self.filename
-        filedir = os.path.dirname(self.filename)
-        if not os.path.isdir(filedir):
-            os.makedirs(filedir)
-        self.filehandle = open(self.filename, "w")
-        self._write_header()
-
-    def _write_header(self):
-        self._get_header();
-        self.filehandle.write(ContentFile.header)
-
-    header=None
-
-    @classmethod
-    def _get_header(self):
-        """
-        Internal method to return the header for Contents.gz files
-
-        This is boilerplate which explains the contents of the file and how
-        it can be used.
-        """
-        if not ContentFile.header:
-            if Config().has_key("Contents::Header"):
-                try:
-                    h = open(os.path.join( Config()["Dir::Templates"],
-                                           Config()["Contents::Header"] ), "r")
-                    ContentFile.header = h.read()
-                    h.close()
-                except:
-                    log.error( "error opening header file: %d\n%s" % (Config()["Contents::Header"],
-                                                                      traceback.format_exc() ))
-                    ContentFile.header = None
-            else:
-                ContentFile.header = None
-
-        return ContentFile.header
-
-
-class DebContentFile(ContentFile):
-    def __init__(self,
-                 filename,
-                 suite_str,
-                 suite_id,
-                 arch_str,
-                 arch_id):
-        ContentFile.__init__(self,
-                             filename,
-                             suite_str,
-                             suite_id )
-        self.arch_str = arch_str
-        self.arch_id = arch_id
-
-    def query(self):
-        self.session = DBConn().session();
-
-        self.results = self.session.execute("""SELECT filename, comma_separated_list(section || '/' || package)
-        FROM deb_contents
-        WHERE ( arch=2 or arch = :arch) AND suite = :suite
-        """, { 'arch':self.arch_id, 'suite':self.suite_id } )
-
-class UdebContentFile(ContentFile):
-    def __init__(self,
-                 filename,
-                 suite_str,
-                 suite_id,
-                 section_name,
-                 section_id):
-        ContentFile.__init__(self,
-                             filename,
-                             suite_str,
-                             suite_id )
-
-    def query(self):
-        self.session = DBConn().session();
-
-        self.results = self.session.execute("""SELECT filename, comma_separated_list(section || '/' || package)
-        FROM udeb_contents
-        WHERE suite = :suite
-        group by filename
-        """ , { 'suite': self.suite_id } )
-
-class Contents(object):
-    """
-    Class capable of generating Contents-$arch.gz files
-    """
-    def __init__(self):
-        self.header = None
-
-    def reject(self, message):
-        log.error("E: %s" % message)
-
-    def cruft(self):
-        """
-        remove files/paths from the DB which are no longer referenced
-        by binaries and clean the temporary table
-        """
-        s = DBConn().session()
-
-        # clear out all of the temporarily stored content associations
-        # this should be run only after p-a has run.  after a p-a
-        # run we should have either accepted or rejected every package
-        # so there should no longer be anything in the queue
-        s.query(PendingContentAssociation).delete()
-
-        # delete any filenames we are storing which have no binary associated
-        # with them
-        cafq = s.query(ContentAssociation.filename_id).distinct()
-        cfq = s.query(ContentFilename)
-        cfq = cfq.filter(~ContentFilename.cafilename_id.in_(cafq))
-        cfq.delete()
-
-        # delete any paths we are storing which have no binary associated with
-        # them
-        capq = s.query(ContentAssociation.filepath_id).distinct()
-        cpq = s.query(ContentFilepath)
-        cpq = cpq.filter(~ContentFilepath.cafilepath_id.in_(capq))
-        cpq.delete()
-
-        s.commit()
-
-
-    def bootstrap_bin(self):
-        """
-        scan the existing debs in the pool to populate the bin_contents table
-        """
-        pooldir = Config()[ 'Dir::Pool' ]
-
-        s = DBConn().session()
-
-        for binary in s.query(DBBinary).yield_per(100):
-            print( "binary: %s" % binary.package )
-            filename = binary.poolfile.filename
-             # Check for existing contents
-            existingq = s.execute( "select 1 from bin_contents where binary_id=:id", {'id':binary.binary_id} );
-            if existingq.fetchone():
-                log.debug( "already imported: %s" % (filename))
-            else:
-                # We don't have existing contents so import them
-                log.debug( "scanning: %s" % (filename) )
-
-                debfile = os.path.join(pooldir, filename)
-                if os.path.exists(debfile):
-                    Binary(debfile, self.reject).scan_package(binary.binary_id, True)
-                else:
-                    log.error("missing .deb: %s" % filename)
-
-
-
-    def bootstrap(self):
-        """
-        scan the existing debs in the pool to populate the contents database tables
-        """
-        s = DBConn().session()
-
-
-        # get a mapping of all the override types we care about (right now .deb an .udeb)
-        override_type_map = {};
-        for override_type in s.query(OverrideType).all():
-            if override_type.overridetype.endswith('deb' ):
-                override_type_map[override_type.overridetype_id] = override_type.overridetype;
-
-        for override in s.query(Override).yield_per(100):
-            if not override_type_map.has_key(override.overridetype_id):
-                #this isn't an override we care about
-                continue
-
-            binaries = s.execute("""SELECT b.id, b.architecture
-                                    FROM binaries b
-                                    JOIN bin_associations ba ON ba.bin=b.id
-                                    WHERE ba.suite=:suite
-                                    AND b.package=:package""", {'suite':override.suite_id, 'package':override.package})
-            while True:
-                binary = binaries.fetchone()
-                if not binary:
-                    break
-
-                exists = s.execute("SELECT 1 FROM %s_contents WHERE binary_id=:id limit 1" % override_type_map[override.overridetype_id], {'id':binary.id})
-
-
-                if exists.fetchone():
-                    print '.',
-                    continue
-                else:
-                    print '+',
-
-                s.execute( """INSERT INTO %s_contents (filename,section,package,binary_id,arch,suite)
-                              SELECT file, :section, :package, :binary_id, :arch, :suite
-                              FROM bin_contents
-                              WHERE binary_id=:binary_id;""" % override_type_map[override.overridetype_id],
-                           { 'section' : override.section_id,
-                             'package' : override.package,
-                             'binary_id' : binary.id,
-                             'arch' : binary.architecture,
-                             'suite' : override.suite_id } )
-                s.commit()
-
-    def generate(self):
-        """
-        Generate contents files for both deb and udeb
-        """
-        self.deb_generate()
-        self.udeb_generate()
-
-    def deb_generate(self):
-        """
-        Generate Contents-$arch.gz files for every available arch in each given suite.
-        """
-        session = DBConn().session()
-        debtype_id = get_override_type("deb", session)
-        suites = self._suites()
-
-        inputtoquery = OneAtATime()
-        querytoingest = OneAtATime()
-        ingesttosort = OneAtATime()
-        sorttooutput = OneAtATime()
-        outputtogzip = OneAtATime()
-
-        qt = QueryThread(inputtoquery,querytoingest)
-        it = IngestThread(querytoingest,ingesttosort)
-        st = SortThread(ingesttosort,sorttooutput)
-        ot = OutputThread(sorttooutput,outputtogzip)
-        gt = GzipThread(outputtogzip, None)
-
-        qt.start()
-        it.start()
-        st.start()
-        ot.start()
-        gt.start()
-
-        # Get our suites, and the architectures
-        for suite in [i.lower() for i in suites]:
-            suite_id = get_suite(suite, session).suite_id
-            print( "got suite_id: %s for suite: %s" % (suite_id, suite ) )
-            arch_list = self._arches(suite_id, session)
-
-            for (arch_id,arch_str) in arch_list:
-                print( "suite: %s, arch: %s time: %s" %(suite_id, arch_id, datetime.datetime.now().isoformat()) )
-
-                filename = "dists/%s/Contents-%s" % (suite, arch_str)
-                cf = DebContentFile(filename, suite, suite_id, arch_str, arch_id)
-                inputtoquery.enqueue( cf )
-
-        inputtoquery.enqueue( EndOfContents() )
-        gt.join()
-
-    def udeb_generate(self):
-        """
-        Generate Contents-$arch.gz files for every available arch in each given suite.
-        """
-        session = DBConn().session()
-        udebtype_id=DBConn().get_override_type_id("udeb")
-        suites = self._suites()
-
-        inputtoquery = OneAtATime()
-        querytoingest = OneAtATime()
-        ingesttosort = OneAtATime()
-        sorttooutput = OneAtATime()
-        outputtogzip = OneAtATime()
-
-        qt = QueryThread(inputtoquery,querytoingest)
-        it = IngestThread(querytoingest,ingesttosort)
-        st = SortThread(ingesttosort,sorttooutput)
-        ot = OutputThread(sorttooutput,outputtogzip)
-        gt = GzipThread(outputtogzip, None)
-
-        qt.start()
-        it.start()
-        st.start()
-        ot.start()
-        gt.start()
-
-
-    def generate(self):
-        """
-        Generate Contents-$arch.gz files for every available arch in each given suite.
-        """
-        session = DBConn().session()
-
-        arch_all_id = get_architecture("all", session).arch_id
-
-        # The MORE fun part. Ok, udebs need their own contents files, udeb, and udeb-nf (not-free)
-        # This is HORRIBLY debian specific :-/
-        for dtype, section, fn_pattern in \
-              [('deb',  None,                        "dists/%s/Contents-%s.gz"),
-               ('udeb', "debian-installer",          "dists/%s/Contents-udeb-%s.gz"),
-               ('udeb', "non-free/debian-installer", "dists/%s/Contents-udeb-nf-%s.gz")]:
-
-            overridetype = get_override_type(dtype, session)
-
-            # For udebs, we only look in certain sections (see the for loop above)
-            if section is not None:
-                section = get_section(section, session)
-
-            # Get our suites
-            for suite in which_suites(session):
-                # Which architectures do we need to work on
-                arch_list = get_suite_architectures(suite.suite_name, skipsrc=True, skipall=True, session=session)
-
-                # Set up our file writer dictionary
-                file_writers = {}
-                try:
-                    # One file writer per arch
-                    for arch in arch_list:
-                        file_writers[arch.arch_id] = GzippedContentWriter(fn_pattern % (suite, arch.arch_string))
-
-                    for r in get_suite_contents(suite, overridetype, section, session=session).fetchall():
-                        filename, section, package, arch_id = r
-
-                        if arch_id == arch_all_id:
-                            # It's arch all, so all contents files get it
-                            for writer in file_writers.values():
-                                writer.write(filename, section, package)
-                        else:
-                            if file_writers.has_key(arch_id):
-                                file_writers[arch_id].write(filename, section, package)
-
-                finally:
-                    # close all the files
-                    for writer in file_writers.values():
-                        writer.finish()
-    def _suites(self):
-        """
-        return a list of suites to operate on
-        """
-        if Config().has_key( "%s::%s" %(options_prefix,"Suite")):
-            suites = utils.split_args(Config()[ "%s::%s" %(options_prefix,"Suite")])
-        else:
-            suites = Config().SubTree("Suite").List()
-
-        return suites
-
-    def _arches(self, suite, session):
-        """
-        return a list of archs to operate on
-        """
-        arch_list = []
-        arches = session.execute(
-            """SELECT s.architecture, a.arch_string
-            FROM suite_architectures s
-            JOIN architecture a ON (s.architecture=a.id)
-            WHERE suite = :suite_id""",
-            {'suite_id':suite } )
-
-        while True:
-            r = arches.fetchone()
-            if not r:
-                break
-
-            if r[1] != "source" and r[1] != "all":
-                arch_list.append((r[0], r[1]))
-
-        return arch_list
-
+def source_scan_all(cnf, limit):
+    Logger = daklog.Logger('contents scan-source')
+    result = SourceContentsScanner.scan_all(limit)
+    processed = '%(processed)d packages processed' % result
+    remaining = '%(remaining)d packages remaining' % result
+    Logger.log([processed, remaining])
+    Logger.close()
 
 ################################################################################
 
 def main():
     cnf = Config()
-
-    arguments = [('h',"help", "%s::%s" % (options_prefix,"Help")),
-                 ('s',"suite", "%s::%s" % (options_prefix,"Suite"),"HasArg"),
-                 ('q',"quiet", "%s::%s" % (options_prefix,"Quiet")),
-                 ('v',"verbose", "%s::%s" % (options_prefix,"Verbose")),
+    cnf['Contents::Options::Help'] = ''
+    cnf['Contents::Options::Suite'] = ''
+    cnf['Contents::Options::Component'] = ''
+    cnf['Contents::Options::Limit'] = ''
+    cnf['Contents::Options::Force'] = ''
+    arguments = [('h', "help",      'Contents::Options::Help'),
+                 ('s', "suite",     'Contents::Options::Suite',     "HasArg"),
+                 ('c', "component", 'Contents::Options::Component', "HasArg"),
+                 ('l', "limit",     'Contents::Options::Limit',     "HasArg"),
+                 ('f', "force",     'Contents::Options::Force'),
                 ]
+    args = apt_pkg.ParseCommandLine(cnf.Cnf, arguments, sys.argv)
+    options = cnf.SubTree('Contents::Options')
 
-    commands = {'generate' : Contents.generate,
-                'bootstrap_bin' : Contents.bootstrap_bin,
-                'bootstrap' : Contents.bootstrap,
-                'cruft' : Contents.cruft,
-                }
-
-    args = apt_pkg.ParseCommandLine(cnf.Cnf, arguments,sys.argv)
-
-    if (len(args) < 1) or not commands.has_key(args[0]):
-        usage()
-
-    if cnf.has_key("%s::%s" % (options_prefix,"Help")):
+    if (len(args) != 1) or options['Help']:
         usage()
 
-    level=logging.INFO
-    if cnf.has_key("%s::%s" % (options_prefix,"Quiet")):
-        level=logging.ERROR
+    limit = None
+    if len(options['Limit']) > 0:
+        limit = int(options['Limit'])
 
-    elif cnf.has_key("%s::%s" % (options_prefix,"Verbose")):
-        level=logging.DEBUG
+    if args[0] == 'scan-source':
+        source_scan_all(cnf, limit)
+        return
 
+    if args[0] == 'scan-binary':
+        binary_scan_all(cnf, limit)
+        return
 
-    logging.basicConfig( level=level,
-                         format='%(asctime)s %(levelname)s %(message)s',
-                         stream = sys.stderr )
+    suite_names     = utils.split_args(options['Suite'])
+    component_names = utils.split_args(options['Component'])
 
-    commands[args[0]](Contents())
+    force = bool(options['Force'])
 
-def which_suites(session):
-    """
-    return a list of suites to operate on
-    """
-    if Config().has_key( "%s::%s" %(options_prefix,"Suite")):
-        suites = utils.split_args(Config()[ "%s::%s" %(options_prefix,"Suite")])
-    else:
-        suites = Config().SubTree("Suite").List()
+    if args[0] == 'generate':
+        write_all(cnf, suite_names, component_names, force)
+        return
 
-    return [get_suite(s.lower(), session) for s in suites]
+    usage()
 
 
 if __name__ == '__main__':
index befc35d277e3d505e3a77836f2f174fdd2876709..803c8951d07e65b5f9f9ed5a8f7d6b3bf9fcf940 100755 (executable)
@@ -353,7 +353,7 @@ def main ():
             utils.warn("In No-Action Mode")
             action = False
 
-        Logger = daklog.Logger(cnf.Cnf, "control-overrides", mode)
+        Logger = daklog.Logger("control-overrides", mode)
         if file_list:
             for f in file_list:
                 process_file(utils.open_file(f), suite, component, otype, mode, action, session)
index ee55fcc59e5f8dbf16daf51917306161138ef0bf..ed4f6b1ace28e3dcb255cbfe9a48d3c17b1409f7 100755 (executable)
@@ -49,6 +49,7 @@ from daklib.config import Config
 from daklib.dbconn import *
 from daklib import daklog
 from daklib import utils
+from daklib.queue import get_suite_version_by_package, get_suite_version_by_source
 
 #######################################################################################
 
@@ -160,7 +161,39 @@ def britney_changelog(packages, suite, session):
 
 #######################################################################################
 
-def set_suite(file, suite, session, britney=False):
+def version_checks(package, architecture, target_suite, new_version, session, force = False):
+    if architecture == "source":
+        suite_version_list = get_suite_version_by_source(package, session)
+    else:
+        suite_version_list = get_suite_version_by_package(package, architecture, session)
+
+    must_be_newer_than = [ vc.reference.suite_name for vc in get_version_checks(target_suite, "MustBeNewerThan") ]
+    must_be_older_than = [ vc.reference.suite_name for vc in get_version_checks(target_suite, "MustBeOlderThan") ]
+
+    # Must be newer than an existing version in target_suite
+    if target_suite not in must_be_newer_than:
+        must_be_newer_than.append(target_suite)
+
+    violations = False
+
+    for suite, version in suite_version_list:
+        cmp = apt_pkg.VersionCompare(new_version, version)
+        if suite in must_be_newer_than and cmp < 1:
+            utils.warn("%s (%s): version check violated: %s targeted at %s is *not* newer than %s in %s" % (package, architecture, new_version, target_suite, version, suite))
+            violations = True
+        if suite in must_be_older_than and cmp > 1:
+            utils.warn("%s (%s): version check violated: %s targeted at %s is *not* older than %s in %s" % (package, architecture, new_version, target_suite, version, suite))
+            violations = True
+
+    if violations:
+        if force:
+            utils.warn("Continuing anyway (forced)...")
+        else:
+            utils.fubar("Aborting. Version checks violated and not forced.")
+
+#######################################################################################
+
+def set_suite(file, suite, session, britney=False, force=False):
     suite_id = suite.suite_id
     lines = file.readlines()
 
@@ -209,6 +242,7 @@ def set_suite(file, suite, session, britney=False):
     for key in desired.keys():
         if not current.has_key(key):
             (package, version, architecture) = key.split()
+            version_checks(package, architecture, suite.suite_name, version, session, force)
             pkid = get_id (package, version, architecture, session)
             if not pkid:
                 continue
@@ -227,9 +261,9 @@ def set_suite(file, suite, session, britney=False):
 
 #######################################################################################
 
-def process_file(file, suite, action, session, britney=False):
+def process_file(file, suite, action, session, britney=False, force=False):
     if action == "set":
-        set_suite(file, suite, session, britney)
+        set_suite(file, suite, session, britney, force)
         return
 
     suite_id = suite.suite_id
@@ -249,6 +283,10 @@ def process_file(file, suite, action, session, britney=False):
         if not pkid:
             continue
 
+        # Do version checks when adding packages
+        if action == "add":
+            version_checks(package, architecture, suite.suite_name, version, session, force)
+
         if architecture == "source":
             # Find the existing association ID, if any
             q = session.execute("""SELECT id FROM src_associations
@@ -333,6 +371,7 @@ def main ():
 
     Arguments = [('a',"add","Control-Suite::Options::Add", "HasArg"),
                  ('b',"britney","Control-Suite::Options::Britney"),
+                 ('f','force','Control-Suite::Options::Force'),
                  ('h',"help","Control-Suite::Options::Help"),
                  ('l',"list","Control-Suite::Options::List","HasArg"),
                  ('r',"remove", "Control-Suite::Options::Remove", "HasArg"),
@@ -354,6 +393,8 @@ def main ():
 
     session = DBConn().session()
 
+    force = Options.has_key("Force") and Options["Force"]
+
     action = None
 
     for i in ("add", "list", "remove", "set"):
@@ -373,7 +414,7 @@ def main ():
 
     # Safety/Sanity check
     # XXX: This should be stored in the database
-    if action == "set" and suite_name not in ["testing"]:
+    if action == "set" and suite_name not in ["testing", "squeeze-updates"]:
         utils.fubar("Will not reset suite %s" % (suite_name))
 
     britney = False
@@ -383,12 +424,12 @@ def main ():
     if action == "list":
         get_list(suite, session)
     else:
-        Logger = daklog.Logger(cnf.Cnf, "control-suite")
+        Logger = daklog.Logger("control-suite")
         if file_list:
             for f in file_list:
-                process_file(utils.open_file(f), suite, action, session, britney)
+                process_file(utils.open_file(f), suite, action, session, britney, force)
         else:
-            process_file(sys.stdin, suite, action, session, britney)
+            process_file(sys.stdin, suite, action, session, britney, force)
         Logger.close()
 
 #######################################################################################
diff --git a/dak/copy_installer.py b/dak/copy_installer.py
new file mode 100755 (executable)
index 0000000..34ae321
--- /dev/null
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+
+""" Copies the installer from one suite to another """
+# Copyright (C) 2011  Torsten Werner <twerner@debian.org>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+from daklib.config import Config
+
+import apt_pkg, glob, os.path, re, shutil, sys
+
+def usage(exit_code = 0):
+    print """Usage: dak copy-installer [OPTION]... VERSION
+  -h, --help         show this help and exit
+  -s, --source       source suite      (defaults to unstable)
+  -d, --destination  destination suite (defaults to testing)
+  -n, --no-action    don't change anything
+
+Exactly 1 version must be specified."""
+    sys.exit(exit_code)
+
+def main():
+    cnf = Config()
+    Arguments = [
+            ('h', "help",        "Copy-Installer::Options::Help"),
+            ('s', "source",      "Copy-Installer::Options::Source",      "HasArg"),
+            ('d', "destination", "Copy-Installer::Options::Destination", "HasArg"),
+            ('n', "no-action",   "Copy-Installer::Options::No-Action"),
+            ]
+    for option in [ "help", "source", "destination", "no-action" ]:
+        if not cnf.has_key("Copy-Installer::Options::%s" % (option)):
+            cnf["Copy-Installer::Options::%s" % (option)] = ""
+    extra_arguments = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
+    Options = cnf.SubTree("Copy-Installer::Options")
+
+    if Options["Help"]:
+        usage()
+    if len(extra_arguments) != 1:
+        usage(1)
+
+    initializer = { "version": extra_arguments[0] }
+    if Options["Source"] != "":
+        initializer["source"] = Options["Source"]
+    if Options["Destination"] != "":
+        initializer["dest"] = Options["Destination"]
+
+    copier = InstallerCopier(**initializer)
+    print copier.get_message()
+    if Options["No-Action"]:
+        print 'Do nothing because --no-action has been set.'
+    else:
+        copier.do_copy()
+        print 'Installer has been copied successfully.'
+
+root_dir = Config()['Dir::Root']
+
+class InstallerCopier:
+    def __init__(self, source = 'unstable', dest = 'testing',
+            **keywords):
+        self.source = source
+        self.dest = dest
+        if 'version' not in keywords:
+            raise KeyError('no version specified')
+        self.version = keywords['version']
+
+        self.source_dir = os.path.join(root_dir, 'dists', source, 'main')
+        self.dest_dir = os.path.join(root_dir, 'dists', dest, 'main')
+        self.check_dir(self.source_dir, 'source does not exist')
+        self.check_dir(self.dest_dir, 'destination does not exist')
+
+        self.architectures = []
+        self.skip_architectures = []
+        self.trees_to_copy = []
+        self.symlinks_to_create = []
+        arch_pattern = os.path.join(self.source_dir, 'installer-*', self.version)
+        for arch_dir in glob.glob(arch_pattern):
+            self.check_architecture(arch_dir)
+
+    def check_dir(self, dir, message):
+        if not os.path.isdir(dir):
+            raise IOError(message)
+
+    def check_architecture(self, arch_dir):
+        architecture = re.sub('.*?/installer-(.*?)/.*', r'\1', arch_dir)
+        dest_basedir = os.path.join(self.dest_dir, \
+            'installer-%s' % architecture)
+        dest_dir = os.path.join(dest_basedir, self.version)
+        if os.path.isdir(dest_dir):
+            self.skip_architectures.append(architecture)
+        else:
+            self.architectures.append(architecture)
+            self.trees_to_copy.append((arch_dir, dest_dir))
+            symlink_target = os.path.join(dest_basedir, 'current')
+            self.symlinks_to_create.append((self.version, symlink_target))
+
+    def get_message(self):
+        return """
+Will copy installer version %(version)s from suite %(source)s to
+%(dest)s.
+Architectures to copy: %(arch_list)s
+Architectures to skip: %(skip_arch_list)s""" % {
+            'version':        self.version,
+            'source':         self.source,
+            'dest':           self.dest,
+            'arch_list':      ', '.join(self.architectures),
+            'skip_arch_list': ', '.join(self.skip_architectures)}
+
+    def do_copy(self):
+        for source, dest in self.trees_to_copy:
+            shutil.copytree(source, dest, symlinks=True)
+        for source, dest in self.symlinks_to_create:
+            if os.path.lexists(dest):
+                os.unlink(dest)
+            os.symlink(source, dest)
+
+
+if __name__ == '__main__':
+    main()
index ee1dcdef922a884cbe63d800584ef574fe5ace2a..08d336d4466ea41fcef987c49a9fa105006e8b45 100755 (executable)
@@ -42,6 +42,7 @@ from daklib.config import Config
 from daklib.dbconn import *
 from daklib import utils
 from daklib.regexes import re_extract_src_version
+from daklib.cruft import *
 
 ################################################################################
 
@@ -156,7 +157,7 @@ def do_nfu(nfu_packages):
         for architecture in a2p:
             if a2p[architecture]:
                 print (" dak rm -m \"[auto-cruft] NFU\" -s %s -a %s -b %s" % 
-                    (suite, architecture, " ".join(a2p[architecture])))
+                    (suite.suite_name, architecture, " ".join(a2p[architecture])))
         print
 
 def parse_nfu(architecture):
@@ -188,39 +189,20 @@ def parse_nfu(architecture):
 ################################################################################
 
 def do_newer_version(lowersuite_name, highersuite_name, code, session):
-    lowersuite = get_suite(lowersuite_name, session)
-    if not lowersuite:
-        return
-
-    highersuite = get_suite(highersuite_name, session)
-    if not highersuite:
-        return
-
-    # Check for packages in $highersuite obsoleted by versions in $lowersuite
-    q = session.execute("""
-WITH highersuite_maxversion AS (SELECT s.source AS source, max(s.version) AS version
-  FROM src_associations sa, source s
-  WHERE sa.suite = :highersuite_id AND sa.source = s.id group by s.source)
-SELECT s.source, s.version AS lower, s2.version AS higher
-  FROM src_associations sa, source s, source s2, src_associations sa2, highersuite_maxversion hm
-  WHERE sa.suite = :highersuite_id AND sa2.suite = :lowersuite_id AND sa.source = s.id
-   AND sa2.source = s2.id AND s.source = s2.source
-   AND hm.source = s.source AND hm.version < s2.version
-   AND s.version < s2.version""", {'lowersuite_id': lowersuite.suite_id,
-                                    'highersuite_id': highersuite.suite_id})
-    ql = q.fetchall()
-    if ql:
+    list = newer_version(lowersuite_name, highersuite_name, session)
+    if len(list) > 0:
         nv_to_remove = []
-        print "Newer version in %s" % lowersuite.suite_name
-        print "-----------------" + "-" * len(lowersuite.suite_name)
+        title = "Newer version in %s" % lowersuite_name
+        print title
+        print "-" * len(title)
         print
-        for i in ql:
+        for i in list:
             (source, higher_version, lower_version) = i
             print " o %s (%s, %s)" % (source, higher_version, lower_version)
             nv_to_remove.append(source)
         print
         print "Suggested command:"
-        print " dak rm -m \"[auto-cruft] %s\" -s %s %s" % (code, highersuite.suite_name,
+        print " dak rm -m \"[auto-cruft] %s\" -s %s %s" % (code, highersuite_name,
                                                            " ".join(nv_to_remove))
         print
 
@@ -542,7 +524,7 @@ def main ():
         cnf["Cruft-Report::Options::Mode"] = "daily"
 
     if not cnf.has_key("Cruft-Report::Options::Wanna-Build-Dump"):
-        cnf["Cruft-Report::Options::Wanna-Build-Dump"] = "/srv/ftp.debian.org/scripts/nfu"
+        cnf["Cruft-Report::Options::Wanna-Build-Dump"] = "/srv/ftp-master.debian.org/scripts/nfu"
 
     apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
 
@@ -552,7 +534,7 @@ def main ():
 
     # Set up checks based on mode
     if Options["Mode"] == "daily":
-        checks = [ "nbs", "nviu", "nvit", "obsolete source" ]
+        checks = [ "nbs", "nviu", "nvit", "obsolete source", "nfu" ]
     elif Options["Mode"] == "full":
         checks = [ "nbs", "nviu", "nvit", "obsolete source", "nfu", "dubious nbs", "bnb", "bms", "anais" ]
     else:
@@ -569,7 +551,6 @@ def main ():
     source_versions = {}
 
     anais_output = ""
-    duplicate_bins = {}
 
     nfu_packages = {}
 
@@ -617,18 +598,10 @@ def main ():
             if "anais" in checks:
                 anais_output += do_anais(architecture, binaries_list, source, session)
 
-            # Check for duplicated packages and build indices for checking "no source" later
+            # build indices for checking "no source" later
             source_index = component + '/' + source
-            #if src_pkgs.has_key(source):
-            #    print " %s is a duplicated source package (%s and %s)" % (source, source_index, src_pkgs[source])
             src_pkgs[source] = source_index
             for binary in binaries_list:
-                if bin_pkgs.has_key(binary):
-                    key_list = [ source, bin_pkgs[binary] ]
-                    key_list.sort()
-                    key = '_'.join(key_list)
-                    duplicate_bins.setdefault(key, [])
-                    duplicate_bins[key].append(binary)
                 bin_pkgs[binary] = source
             source_binaries[source] = binaries
             source_versions[source] = source_version
@@ -685,14 +658,6 @@ def main ():
                     nbs[source].setdefault(package, {})
                     nbs[source][package][version] = ""
                 else:
-                    previous_source = bin_pkgs[package]
-                    if previous_source != source:
-                        key_list = [ source, previous_source ]
-                        key_list.sort()
-                        key = '_'.join(key_list)
-                        duplicate_bins.setdefault(key, [])
-                        if package not in duplicate_bins[key]:
-                            duplicate_bins[key].append(package)
                     if "nfu" in checks:
                         if package in nfu_entries and \
                                version != source_versions[source]: # only suggest to remove out-of-date packages
@@ -740,15 +705,7 @@ def main ():
         print
 
     if "bms" in checks:
-        print "Built from multiple source packages"
-        print "-----------------------------------"
-        print
-        keys = duplicate_bins.keys()
-        keys.sort()
-        for key in keys:
-            (source_a, source_b) = key.split("_")
-            print " o %s & %s => %s" % (source_a, source_b, ", ".join(duplicate_bins[key]))
-        print
+        report_multiple_source(suite)
 
     if "anais" in checks:
         print "Architecture Not Allowed In Source"
index 7d4a4157f891e84026a0d97be25669b5bc079f2c..2a3c230893db82d7d3617dcdd7e964a93a2679e5 100755 (executable)
@@ -37,7 +37,6 @@ import os
 import sys
 import traceback
 import daklib.utils
-import warnings
 
 from daklib.daklog import Logger
 from daklib.config import Config
@@ -62,6 +61,8 @@ def init():
          "Output html for packages in NEW"),
         ("show-deferred",
          "Output html and symlinks for packages in DEFERRED"),
+        ("graph",
+         "Output graphs of number of packages in various queues"),
 
         ("rm",
          "Remove packages from suites"),
@@ -83,8 +84,12 @@ def init():
          "Generate Release files"),
         ("generate-packages-sources",
          "Generate Packages/Sources files"),
+        ("generate-packages-sources2",
+         "Generate Packages/Sources files [directly from database]"),
         ("contents",
          "Generate content files"),
+        ("metadata",
+         "Load data for packages/sources files"),
         ("generate-index-diffs",
          "Generate .diff/Index files"),
         ("clean-suites",
@@ -144,6 +149,12 @@ def init():
          "Add a user to the archive"),
         ("make-changelog",
          "Generate changelog between two suites"),
+        ("copy-installer",
+         "Copies the installer from one suite to another"),
+        ("override-disparity",
+         "Generate a list of override disparities"),
+        ("external-overrides",
+         "Modify external overrides"),
         ]
     return functionality
 
@@ -167,7 +178,7 @@ def main():
 
 
     try:
-        logger = Logger(Config(), 'dak top-level', print_starting=False)
+        logger = Logger('dak top-level', print_starting=False)
     except CantOpenError:
         logger = None
 
@@ -205,10 +216,6 @@ def main():
                 daklib.utils.warn("unknown command '%s'" % (cmdname))
                 usage(functionality, 1)
 
-    # We do not care. No idea wth sqlalchemy warns about them, makes no sense,
-    # so we ignore it.
-    warnings.filterwarnings("ignore", 'Predicate of partial index')
-
     # Invoke the module
     module = __import__(cmdname.replace("-","_"))
 
index b6fbbb447b37ac776085ca91efeb1449f63fd21f..dbd7ced6023c1d3bf77b7c225ca1a4e4361d8211 100755 (executable)
@@ -69,7 +69,7 @@ def do_update(self):
 
         for q in c.fetchall():
             queues[q[0]] = q[1]
-            if q[1] in ['accepted', 'buildd']:
+            if q[1] in ['accepted', 'buildd', 'embargoed', 'unembargoed']:
                 # Move to build_queue_table
                 c.execute("""INSERT INTO build_queue (queue_name, path, copy_files)
                                    VALUES ('%s', '%s', '%s')""" % (q[1], q[2], q[3]))
diff --git a/dak/dakdb/update41.py b/dak/dakdb/update41.py
new file mode 100755 (executable)
index 0000000..813a3b7
--- /dev/null
@@ -0,0 +1,66 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Remove useless type casts from primary keys to support sqlalchemy's reflection
+mechanism for all tables. Rename 2 sequences and add 1 primary key.
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Torsten Werner <twerner@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from socket import gethostname;
+
+################################################################################
+def do_update(self):
+    """
+    Remove useless type casts from primary keys, fix 2 sequences, and add 1
+    primary key.
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        # remove useless type casts
+        for table in ('architecture', 'archive', 'bin_associations', \
+            'binaries', 'component', 'dsc_files', 'files', \
+            'fingerprint', 'location', 'maintainer', 'override_type', \
+            'pending_bin_contents', 'priority', 'section', 'source', \
+            'src_associations', 'suite', 'uid'):
+            c.execute("ALTER TABLE %s ALTER id SET DEFAULT nextval('%s_id_seq'::regclass)" % \
+                (table, table))
+
+        # rename sequences
+        c.execute("ALTER SEQUENCE known_changes_id_seq RENAME TO changes_id_seq")
+        c.execute("ALTER SEQUENCE queue_files_id_seq RENAME TO build_queue_files_id_seq")
+
+        # replace unique contraint by primary key
+        c.execute( \
+            "ALTER TABLE bin_contents DROP CONSTRAINT bin_contents_file_key");
+        c.execute("ALTER TABLE bin_contents ADD PRIMARY KEY (file, binary_id)");
+
+        c.execute("UPDATE config SET value = '41' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 41, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update42.py b/dak/dakdb/update42.py
new file mode 100755 (executable)
index 0000000..48bc9d6
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Add "ButAutomaticUpgrades" field to the suite table
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Joerg Jaspert <joerg@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from socket import gethostname;
+
+################################################################################
+def do_update(self):
+    """
+    Add "ButAutomaticUpgrades" field to the suite table
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("ALTER TABLE suite ADD COLUMN butautomaticupgrades BOOLEAN NOT NULL DEFAULT FALSE;")
+        c.execute("ALTER TABLE suite ADD CONSTRAINT bau_needs_na_set CHECK (not butautomaticupgrades or notautomatic);")
+
+        c.execute("UPDATE config SET value = '42' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply update 42, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update43.py b/dak/dakdb/update43.py
new file mode 100755 (executable)
index 0000000..0715410
--- /dev/null
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Fix up constraints for pg 9.0
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Mark Hymers <mhy@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from socket import gethostname;
+
+################################################################################
+def do_update(self):
+    """
+    Fix up constraints for pg 9.0
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("ALTER TABLE policy_queue DROP constraint policy_queue_perms_check")
+        c.execute("ALTER TABLE policy_queue DROP constraint policy_queue_change_perms_check")
+        c.execute("ALTER TABLE policy_queue ADD CONSTRAINT policy_queue_perms_check CHECK (perms SIMILAR TO '[0-7][0-7][0-7][0-7]')")
+        c.execute("ALTER TABLE policy_queue ADD CONSTRAINT policy_queue_change_perms_check CHECK (change_perms SIMILAR TO '[0-7][0-7][0-7][0-7]')")
+
+        c.execute("UPDATE config SET value = '43' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply update 43, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update44.py b/dak/dakdb/update44.py
new file mode 100755 (executable)
index 0000000..465f2fc
--- /dev/null
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Remove old contents tables that are no longer needed by the current
+implementation.
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Torsten Werner <twerner@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from socket import gethostname;
+
+################################################################################
+def do_update(self):
+    """
+    Remove old contents tables that are no longer needed by the current
+    implementation.
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        # remove useless type casts
+        for table in ('pending_bin_contents', 'deb_contents', 'udeb_contents'):
+            c.execute("DROP TABLE %s" % table)
+
+        c.execute("UPDATE config SET value = '44' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 44, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update45.py b/dak/dakdb/update45.py
new file mode 100755 (executable)
index 0000000..32ed04f
--- /dev/null
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Add tables for extra_src handling
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Mark Hymers <mhy@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+
+################################################################################
+def do_update(self):
+    """
+    Add tables for extra_src handling
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("""
+CREATE TABLE extra_src_references (
+    bin_id      INT4 NOT NULL REFERENCES binaries(id) ON DELETE CASCADE,
+    src_id      INT4 NOT NULL REFERENCES source(id) ON DELETE RESTRICT,
+
+    PRIMARY KEY (bin_id, src_id)
+)""")
+
+        c.execute("UPDATE config SET value = '45' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply update 45, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update46.py b/dak/dakdb/update46.py
new file mode 100755 (executable)
index 0000000..d1b2d3a
--- /dev/null
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Add columns and tables for Packages/Sources work
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Mark Hymers <mhy@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+
+################################################################################
+def do_update(self):
+    """
+    Add columns and tables for Packages/Sources work
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("""ALTER TABLE binaries ADD COLUMN stanza TEXT""")
+        c.execute("""ALTER TABLE source ADD COLUMN stanza TEXT""")
+
+        c.execute("""
+CREATE TABLE metadata_keys (
+    key_id       SERIAL NOT NULL UNIQUE,
+    key          TEXT NOT NULL UNIQUE,
+
+    PRIMARY KEY (key_id)
+)
+""")
+
+        c.execute("""
+CREATE TABLE binaries_metadata (
+    bin_id       INT4 NOT NULL REFERENCES binaries(id) ON DELETE CASCADE,
+    key_id       INT4 NOT NULL REFERENCES metadata_keys(key_id),
+    value        TEXT NOT NULL,
+
+    PRIMARY KEY (bin_id, key_id)
+)
+""")
+
+        c.execute("""
+CREATE TABLE source_metadata (
+    src_id       INT4 NOT NULL REFERENCES source(id) ON DELETE CASCADE,
+    key_id       INT4 NOT NULL REFERENCES metadata_keys(key_id),
+    value        TEXT NOT NULL,
+
+    PRIMARY KEY (src_id, key_id)
+)
+""")
+
+        c.execute("UPDATE config SET value = '46' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply update 46, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update47.py b/dak/dakdb/update47.py
new file mode 100755 (executable)
index 0000000..81d9cd7
--- /dev/null
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Add table for source contents.
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Torsten Werner <twerner@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from socket import gethostname;
+
+################################################################################
+def do_update(self):
+    """
+    Add table for source contents.
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("""
+            CREATE TABLE src_contents (
+                file TEXT,
+                source_id INTEGER REFERENCES source(id) ON DELETE CASCADE,
+                PRIMARY KEY (file, source_id))""")
+
+        c.execute("UPDATE config SET value = '47' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 47, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update48.py b/dak/dakdb/update48.py
new file mode 100755 (executable)
index 0000000..67ea8c5
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Suite.version can be null
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Joerg Jaspert <joerg@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from socket import gethostname;
+
+################################################################################
+def do_update(self):
+    """
+    Add table for source contents.
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("ALTER TABLE suite ALTER COLUMN version DROP NOT NULL")
+        c.execute("UPDATE suite SET version=NULL WHERE version='-'")
+
+        c.execute("UPDATE config SET value = '48' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 48, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update49.py b/dak/dakdb/update49.py
new file mode 100755 (executable)
index 0000000..5ff1545
--- /dev/null
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Permission fixups
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Mark Hymers <mhy@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from socket import gethostname;
+
+################################################################################
+def do_update(self):
+    """
+    Fix up permissions
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("GRANT SELECT, UPDATE, INSERT ON binaries_metadata TO ftpmaster")
+        c.execute("GRANT SELECT ON binaries_metadata TO public")
+        c.execute("GRANT USAGE ON metadata_keys_key_id_seq TO ftpmaster")
+        c.execute("GRANT SELECT, UPDATE, INSERT ON source_metadata TO ftpmaster")
+        c.execute("GRANT SELECT ON source_metadata TO public")
+        c.execute("GRANT SELECT, UPDATE, INSERT ON metadata_keys TO ftpmaster")
+        c.execute("GRANT SELECT ON metadata_keys TO public")
+        c.execute("GRANT SELECT, UPDATE, INSERT ON extra_src_references TO ftpmaster")
+        c.execute("GRANT SELECT ON extra_src_references TO public")
+        c.execute("GRANT SELECT, UPDATE, INSERT ON src_contents TO ftpmaster")
+        c.execute("GRANT SELECT ON src_contents TO public")
+        c.execute("GRANT USAGE ON changelogs_text_id_seq TO ftpmaster")
+        c.execute("GRANT SELECT ON changes_pending_files_map TO public")
+        c.execute("GRANT SELECT ON config TO public")
+
+        c.execute("UPDATE config SET value = '49' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 49, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update50.py b/dak/dakdb/update50.py
new file mode 100755 (executable)
index 0000000..ae7ea4d
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Allow us to mark keyrings as no longer in use
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Mark Hymers <mhy@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from socket import gethostname;
+
+################################################################################
+def do_update(self):
+    """
+    Allow us to mark keyrings as no longer in use
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("ALTER TABLE keyrings ADD COLUMN active BOOL DEFAULT TRUE")
+        c.execute("UPDATE config SET value = '50' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 50, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update51.py b/dak/dakdb/update51.py
new file mode 100755 (executable)
index 0000000..2aea858
--- /dev/null
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Fix table for source contents.
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Torsten Werner <twerner@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from socket import gethostname;
+
+################################################################################
+def do_update(self):
+    """
+    Fix table for source contents.
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("""
+            CREATE INDEX ON src_contents (source_id)""")
+        c.execute("""
+            ALTER TABLE src_contents ADD COLUMN created TIMESTAMP WITH TIME ZONE
+                NOT NULL DEFAULT now()""")
+        c.execute("""
+            ALTER TABLE src_contents ADD COLUMN modified TIMESTAMP WITH TIME ZONE
+                NOT NULL DEFAULT now()""")
+        c.execute("""
+            CREATE TRIGGER modified_src_contents BEFORE UPDATE ON src_contents
+            FOR EACH ROW EXECUTE PROCEDURE tfunc_set_modified()""")
+
+        c.execute("UPDATE config SET value = '51' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 51, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update52.py b/dak/dakdb/update52.py
new file mode 100755 (executable)
index 0000000..d38ee26
--- /dev/null
@@ -0,0 +1,66 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Add table for version checks.
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Ansgar Burchardt <ansgar@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from daklib.config import Config
+
+################################################################################
+def do_update(self):
+    """
+    Add table for version checks.
+    """
+    print __doc__
+    try:
+        cnf = Config()
+        c = self.db.cursor()
+
+        c.execute("""
+            CREATE TABLE version_check (
+                suite INTEGER NOT NULL REFERENCES suite(id),
+                "check" TEXT NOT NULL CHECK ("check" IN ('Enhances', 'MustBeNewerThan', 'MustBeOlderThan')),
+                reference INTEGER NOT NULL REFERENCES suite(id),
+                PRIMARY KEY(suite, "check", reference)
+            )""")
+
+        c.execute("SELECT suite_name, id FROM suite")
+        suites = c.fetchall()
+        suite_id_map = {}
+        for suite_name, suite_id in suites:
+            suite_id_map[suite_name] = suite_id
+
+        for check in ["Enhances", "MustBeNewerThan", "MustBeOlderThan"]:
+           for suite_name in suite_id_map.keys():
+              for reference_name in [ s.lower() for s in cnf.ValueList("Suite::%s::VersionChecks::%s" % (suite_name, check)) ]:
+                   c.execute("""INSERT INTO version_check (suite, "check", reference) VALUES (%s, %s, %s)""", (suite_id_map[suite_name], check, suite_id_map[reference_name]))
+
+        c.execute("UPDATE config SET value = '52' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 52, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update53.py b/dak/dakdb/update53.py
new file mode 100755 (executable)
index 0000000..36a076f
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Add table for build queue files from policy queues.
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Ansgar Burchardt <ansgar@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+
+################################################################################
+def do_update(self):
+    """
+    Add table for build queue files from policy queues.
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("""
+            CREATE TABLE build_queue_policy_files (
+                build_queue_id INTEGER NOT NULL REFERENCES build_queue(id) ON DELETE CASCADE,
+                file_id INTEGER NOT NULL REFERENCES changes_pending_files(id) ON DELETE CASCADE,
+                filename TEXT NOT NULL,
+                created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
+                lastused TIMESTAMP WITHOUT TIME ZONE,
+                PRIMARY KEY (build_queue_id, file_id)
+            )""")
+
+        c.execute("UPDATE config SET value = '53' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 53, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update54.py b/dak/dakdb/update54.py
new file mode 100755 (executable)
index 0000000..e7676ef
--- /dev/null
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Add send_to_build_queues to policy_queue table
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Ansgar Burchardt <ansgar@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+
+################################################################################
+def do_update(self):
+    """
+    Add send_to_build_queues to policy_queue table
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("""
+            ALTER TABLE policy_queue ADD COLUMN send_to_build_queues BOOLEAN NOT NULL DEFAULT 'f'
+            """)
+        c.execute("""
+            UPDATE policy_queue SET send_to_build_queues='t' WHERE queue_name IN ('embargo', 'disembargo')
+            """)
+
+        c.execute("UPDATE config SET value = '54' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 54, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update55.py b/dak/dakdb/update55.py
new file mode 100755 (executable)
index 0000000..3328e85
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Drop unused view bin_assoc_by_arch.
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Torsten Werner <twerner@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+from socket import gethostname;
+
+################################################################################
+def do_update(self):
+    """
+    Drop unused view bin_assoc_by_arch.
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("""
+            DROP VIEW bin_assoc_by_arch""")
+
+        c.execute("UPDATE config SET value = '55' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 55, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update56.py b/dak/dakdb/update56.py
new file mode 100755 (executable)
index 0000000..f04ebc8
--- /dev/null
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Add order column to metadata_keys
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Ansgar Burchardt <ansgar@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+
+################################################################################
+def do_update(self):
+    """
+    Add order column to metadata_keys
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("ALTER TABLE metadata_keys ADD COLUMN ordering INTEGER NOT NULL DEFAULT 0")
+
+        initial_order = {
+                'Package': -2600,
+                'Source': -2500,
+                'Binary': -2400,
+                'Version': -2300,
+                'Essential': -2250,
+                'Installed-Size': -2200,
+                'Maintainer': -2100,
+                'Uploaders': -2090,
+                'Original-Maintainer': -2080,
+                'Build-Depends': -2000,
+                'Build-Depends-Indep': -1990,
+                'Build-Conflicts': -1980,
+                'Build-Conflicts-Indep': -1970,
+                'Architecture': -1800,
+                'Standards-Version': -1700,
+                'Format': -1600,
+                'Files': -1500,
+                'DM-Upload-Allowed': -1400,
+                'Vcs-%': -1300,
+                'Checksums-%': -1200,
+                'Replaces': -1100,
+                'Provides': -1000,
+                'Depends': -900,
+                'Pre-Depends': -850,
+                'Recommends': -800,
+                'Suggests': -700,
+                'Enhances': -650,
+                'Conflicts': -600,
+                'Breaks': -500,
+                'Description': -400,
+                'Origin': -300,
+                'Bugs': -200,
+                'Multi-Arch': -150,
+                'Homepage': -100,
+                'Tag': 300,
+                'Package-Type': 400,
+                'Installer-Menu-Item': 500,
+                }
+
+        for key, order in initial_order.items():
+            c.execute("""UPDATE metadata_keys SET ordering = '%s' WHERE key ILIKE '%s'""" % (order, key))
+
+        c.execute("UPDATE config SET value = '56' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 56, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update57.py b/dak/dakdb/update57.py
new file mode 100755 (executable)
index 0000000..45a37dc
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Allow per-suite signing keys
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Mark Hymers <mhy@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+
+################################################################################
+def do_update(self):
+    """
+    Allow per-suite signing keys
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("""ALTER TABLE suite ADD COLUMN signingkeys TEXT[]""")
+        c.execute("""UPDATE suite SET signingkeys = signingkeys || (SELECT value FROM config WHERE name = 'signingkeyids')""")
+        c.execute("""DELETE FROM config WHERE name = 'signingkeyids'""")
+
+        c.execute("UPDATE config SET value = '57' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 57, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update58.py b/dak/dakdb/update58.py
new file mode 100755 (executable)
index 0000000..8680fc2
--- /dev/null
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Fix permissions again
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Mark Hymers <mhy@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+
+################################################################################
+def do_update(self):
+    """
+    Fix up permissions (again)
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        for table in ['build_queue_policy_files',
+                      'version_check']:
+            c.execute("""GRANT SELECT, UPDATE, INSERT ON %s TO ftpmaster""" % table)
+            c.execute("""GRANT SELECT ON %s TO public""" % table)
+
+        # Make sure all sequences are fixed up
+        for seq in ['architecture_id_seq',
+                    'archive_id_seq',
+                    'bin_associations_id_seq',
+                    'binaries_id_seq',
+                    'binary_acl_id_seq',
+                    'binary_acl_map_id_seq',
+                    'build_queue_files_id_seq',
+                    'build_queue_id_seq',
+                    'changelogs_text_id_seq',
+                    'changes_id_seq',
+                    'changes_pending_binaries_id_seq',
+                    'changes_pending_files_id_seq',
+                    'changes_pending_source_id_seq',
+                    'component_id_seq',
+                    'config_id_seq',
+                    'dsc_files_id_seq',
+                    'files_id_seq',
+                    'fingerprint_id_seq',
+                    'keyring_acl_map_id_seq',
+                    'keyrings_id_seq',
+                    'location_id_seq',
+                    'maintainer_id_seq',
+                    'metadata_keys_key_id_seq',
+                    'new_comments_id_seq',
+                    'override_type_id_seq',
+                    'policy_queue_id_seq',
+                    'priority_id_seq',
+                    'section_id_seq',
+                    'source_acl_id_seq',
+                    'source_id_seq',
+                    'src_associations_id_seq',
+                    'src_format_id_seq',
+                    'src_uploaders_id_seq',
+                    'suite_id_seq',
+                    'uid_id_seq',
+                    'upload_blocks_id_seq']:
+            c.execute("""GRANT SELECT, UPDATE, USAGE ON %s TO ftpmaster""" % seq)
+            c.execute("""GRANT SELECT ON %s TO public""" % seq)
+
+        c.execute("UPDATE config SET value = '58' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 58, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update59.py b/dak/dakdb/update59.py
new file mode 100755 (executable)
index 0000000..6417a37
--- /dev/null
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Add external_overrides
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Ansgar Burchardt <ansgar@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+
+################################################################################
+def do_update(self):
+    """
+    Add external_overrides
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("""
+        CREATE TABLE external_overrides (
+            package TEXT NOT NULL,
+            key TEXT NOT NULL,
+            value TEXT NOT NULL,
+            PRIMARY KEY (package, key)
+        )""");
+
+        c.execute("GRANT SELECT, UPDATE, INSERT, DELETE ON external_overrides TO ftpmaster");
+        c.execute("GRANT SELECT ON external_overrides TO public");
+
+        c.execute("UPDATE config SET value = '59' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 59, rollback issued. Error message : %s' % (str(msg))
diff --git a/dak/dakdb/update60.py b/dak/dakdb/update60.py
new file mode 100755 (executable)
index 0000000..4cf6ee8
--- /dev/null
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+# coding=utf8
+
+"""
+Make external overrides specific for (suite, component)
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011 Ansgar Burchardt <ansgar@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import psycopg2
+from daklib.dak_exceptions import DBUpdateError
+
+################################################################################
+def do_update(self):
+    """
+    Make external overrides specific for (suite, component)
+    """
+    print __doc__
+    try:
+        c = self.db.cursor()
+
+        c.execute("DELETE FROM external_overrides")
+        print "NOTE: Please reimport the external overrides."
+
+        c.execute("""
+        ALTER TABLE external_overrides
+            DROP CONSTRAINT external_overrides_pkey,
+            ADD COLUMN suite INTEGER NOT NULL REFERENCES suite(id),
+            ADD COLUMN component INTEGER NOT NULL REFERENCES component(id),
+            ADD PRIMARY KEY (suite, component, package, key)
+        """)
+
+        c.execute("UPDATE config SET value = '60' WHERE name = 'db_revision'")
+        self.db.commit()
+
+    except psycopg2.ProgrammingError, msg:
+        self.db.rollback()
+        raise DBUpdateError, 'Unable to apply sick update 60, rollback issued. Error message : %s' % (str(msg))
index 7bb74c6728ff12a448bd4fadd418da48dfb7dbf5..483ab28ab9e7c0f279f9fad6ac0b6ad7db5f3d6f 100755 (executable)
@@ -136,7 +136,7 @@ def main():
     Options = cnf.SubTree("Obsolete::Options")
     if Options['Help']:
         usage()
-    Logger = daklog.Logger(cnf.Cnf, "dominate")
+    Logger = daklog.Logger("dominate")
     session = DBConn().session()
     for suite_name in utils.split_args(Options['Suite']):
         suite = session.query(Suite).filter_by(suite_name = suite_name).one()
index 5b247f0cf61ee1e9c1cb9b69a4e9e434bf85724a..5cb1a77e9a6fb8dcbd3e62d511056d4dfe08edd8 100755 (executable)
@@ -42,6 +42,12 @@ to stdout. Those functions can be used in multithreaded parts of dak.
 
 ################################################################################
 
+# suppress some deprecation warnings in squeeze related to md5 module
+import warnings
+warnings.filterwarnings('ignore', \
+    "the md5 module is deprecated; use hashlib instead", \
+    DeprecationWarning)
+
 import errno
 import os
 import re
@@ -54,7 +60,8 @@ import commands
 import threading
 
 from daklib import utils
-from daklib.dbconn import DBConn, get_binary_from_name_suite
+from daklib.dbconn import DBConn, get_component_by_package_suite
+from daklib.gpg import SignedFile
 from daklib.regexes import html_escaping, re_html_escaping, re_version, re_spacestrip, \
                            re_contrib, re_nonfree, re_localhost, re_newlinespace, \
                            re_package, re_doc_directory
@@ -111,6 +118,7 @@ ansi_colours = {
   'main': "\033[36m",
   'contrib': "\033[33m",
   'nonfree': "\033[31m",
+  'provides': "\033[35m",
   'arch': "\033[32m",
   'end': "\033[0m",
   'bold': "\033[1m",
@@ -121,6 +129,7 @@ html_colours = {
   'main': ('<span style="color: aqua">',"</span>"),
   'contrib': ('<span style="color: yellow">',"</span>"),
   'nonfree': ('<span style="color: red">',"</span>"),
+  'provides': ('<span style="color: magenta">',"</span>"),
   'arch': ('<span style="color: green">',"</span>"),
   'bold': ('<span style="font-weight: bold">',"</span>"),
   'maintainer': ('<span style="color: green">',"</span>"),
@@ -316,13 +325,38 @@ def read_changes_or_dsc (suite, filename, session = None):
     filecontents = '\n'.join(map(lambda x: format_field(x,dsc[x.lower()]), keysinorder))+'\n'
     return filecontents
 
+def get_provides(suite):
+    provides = set()
+    session = DBConn().session()
+    query = '''SELECT DISTINCT value
+               FROM binaries_metadata m
+               JOIN bin_associations b
+               ON b.bin = m.bin_id
+               WHERE key_id = (
+                 SELECT key_id
+                 FROM metadata_keys
+                 WHERE key = 'Provides' )
+               AND b.suite = (
+                 SELECT id
+                 FROM suite
+                 WHERE suite_name = '%(suite)s'
+                 OR codename = '%(suite)s')''' % \
+            {'suite': suite}
+    for p in session.execute(query):
+        for e in p:
+            for i in e.split(','):
+                provides.add(i.strip())
+    session.close()
+    return provides
+
 def create_depends_string (suite, depends_tree, session = None):
     result = ""
     if suite == 'experimental':
-        suite_where = "in ('experimental','unstable')"
+        suite_list = ['experimental','unstable']
     else:
-        suite_where = "= '%s'" % suite
+        suite_list = [suite]
 
+    provides = set()
     comma_count = 1
     for l in depends_tree:
         if (comma_count >= 2):
@@ -333,17 +367,16 @@ def create_depends_string (suite, depends_tree, session = None):
                 result += " | "
             # doesn't do version lookup yet.
 
-            res = get_binary_from_name_suite(d['name'], suite_where, session)
-            if res.rowcount > 0:
-                i = res.fetchone()
-
+            component = get_component_by_package_suite(d['name'], suite_list, \
+                session = session)
+            if component is not None:
                 adepends = d['name']
                 if d['version'] != '' :
                     adepends += " (%s)" % (d['version'])
 
-                if i[2] == "contrib":
+                if component == "contrib":
                     result += colour_output(adepends, "contrib")
-                elif i[2] == "non-free":
+                elif component == "non-free":
                     result += colour_output(adepends, "nonfree")
                 else :
                     result += colour_output(adepends, "main")
@@ -351,7 +384,12 @@ def create_depends_string (suite, depends_tree, session = None):
                 adepends = d['name']
                 if d['version'] != '' :
                     adepends += " (%s)" % (d['version'])
-                result += colour_output(adepends, "bold")
+                if not provides:
+                    provides = get_provides(suite)
+                if d['name'] in provides:
+                    result += colour_output(adepends, "provides")
+                else:
+                    result += colour_output(adepends, "bold")
             or_count += 1
         comma_count += 1
     return result
@@ -521,30 +559,10 @@ def check_deb (suite, deb_filename, session = None):
 # Read a file, strip the signature and return the modified contents as
 # a string.
 def strip_pgp_signature (filename):
-    inputfile = utils.open_file (filename)
-    contents = ""
-    inside_signature = 0
-    skip_next = 0
-    for line in inputfile.readlines():
-        if line[:-1] == "":
-            continue
-        if inside_signature:
-            continue
-        if skip_next:
-            skip_next = 0
-            continue
-        if line.startswith("-----BEGIN PGP SIGNED MESSAGE"):
-            skip_next = 1
-            continue
-        if line.startswith("-----BEGIN PGP SIGNATURE"):
-            inside_signature = 1
-            continue
-        if line.startswith("-----END PGP SIGNATURE"):
-            inside_signature = 0
-            continue
-        contents += line
-    inputfile.close()
-    return contents
+    with utils.open_file(filename) as f:
+        data = f.read()
+        signedfile = SignedFile(data, keyrings=(), require_signature=False)
+        return signedfile.contents
 
 def display_changes(suite, changes_filename):
     global printed
diff --git a/dak/external_overrides.py b/dak/external_overrides.py
new file mode 100755 (executable)
index 0000000..6072c5a
--- /dev/null
@@ -0,0 +1,139 @@
+#!/usr/bin/python
+
+"""
+Modify external overrides.
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011  Ansgar Burchardt <ansgar@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+from daklib.dbconn import *
+from daklib.config import Config
+from daklib import utils, daklog
+
+import apt_pkg
+import sys
+
+def usage():
+    print """Usage: dak external-overrides COMMAND
+Modify external overrides.
+
+  -h, --help                    show this help and exit.
+  -f, --force                   allow processing of untouchable suites.
+
+Commands can use a long or abbreviated form:
+
+    import SUITE COMPONENT KEY  import external overrides for KEY
+    i SUITE COMPONENT KEY       NOTE: This will replace existing overrides.
+
+    copy FROM TO                copy external overrides from suite FROM to TO
+                                NOTE: Needs --force for untouchable TO
+
+For the 'import' command, external overrides are read from standard input and
+should be given as lines of the form 'PACKAGE KEY VALUE'.
+"""
+    sys.exit()
+
+#############################################################################
+
+def external_overrides_copy(from_suite_name, to_suite_name, force = False):
+    session = DBConn().session()
+
+    from_suite = get_suite(from_suite_name, session)
+    to_suite = get_suite(to_suite_name, session)
+
+    if from_suite is None:
+        print "E: source %s not found." % from_suite_name
+        session.rollback()
+        return False
+    if to_suite is None:
+        print "E: target %s not found." % to_suite_name
+        session.rollback()
+        return False
+
+    if not force and to_suite.untouchable:
+        print "E: refusing to touch untouchable suite %s (not forced)." % to_suite_name
+        session.rollback()
+        return False
+
+    session.query(ExternalOverride).filter_by(suite=to_suite).delete()
+    session.execute("""
+    INSERT INTO external_overrides (suite, component, package, key, value)
+      SELECT :to_suite, component, package, key, value FROM external_overrides WHERE suite = :from_suite
+    """, { 'from_suite': from_suite.suite_id, 'to_suite': to_suite.suite_id })
+
+    session.commit()
+
+def external_overrides_import(suite_name, component_name, key, file, force = False):
+    session = DBConn().session()
+
+    suite = get_suite(suite_name, session)
+    component = get_component(component_name, session)
+
+    if not force and suite.untouchable:
+        print "E: refusing to touch untouchable suite %s (not forced)." % suite_name
+        session.rollback()
+        return False
+
+    session.query(ExternalOverride).filter_by(suite=suite,component=component,key=key).delete()
+
+    for line in file:
+        (package, key, value) = line.strip().split(None, 2)
+        eo = ExternalOverride()
+        eo.suite = suite
+        eo.component = component
+        eo.package = package
+        eo.key = key
+        eo.value = value
+        session.add(eo)
+
+    session.commit()
+
+#############################################################################
+
+def main():
+    cnf = Config()
+
+    Arguments = [('h',"help","External-Overrides::Options::Help"),
+                 ('f','force','External-Overrides::Options::Force')]
+
+    args = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
+    try:
+        Options = cnf.SubTree("External-Overrides::Options")
+    except KeyError:
+        Options = {}
+
+    if Options.has_key("Help"):
+        usage()
+
+    force = False
+    if Options.has_key("Force") and Options["Force"]:
+        force = True
+
+    logger = daklog.Logger('external-overrides')
+
+    command = args[0]
+    if command in ('import', 'i'):
+        external_overrides_import(args[1], args[2], args[3], sys.stdin, force)
+    elif command in ('copy', 'c'):
+        external_overrides_copy(args[1], args[2], force)
+    else:
+        print "E: Unknown commands."
+
+if __name__ == '__main__':
+    main()
index a58fe7e2c45d50288b9d135d82a716d58e319eb5..7823295f5344b9874ef934e7e13c1eb6008c8595 100755 (executable)
@@ -5,6 +5,7 @@ Generate file lists for apt-ftparchive.
 
 @contact: Debian FTP Master <ftpmaster@debian.org>
 @copyright: 2009  Torsten Werner <twerner@debian.org>
+@copyright: 2011  Ansgar Burchardt <ansgar@debian.org>
 @license: GNU General Public License version 2 or later
 """
 
@@ -37,94 +38,11 @@ Generate file lists for apt-ftparchive.
 
 from daklib.dbconn import *
 from daklib.config import Config
-from daklib.threadpool import ThreadPool
-from daklib import utils
+from daklib import utils, daklog
+from daklib.dakmultiprocessing import DakProcessPool, PROC_STATUS_SUCCESS, PROC_STATUS_SIGNALRAISED
 import apt_pkg, os, stat, sys
 
-def fetch(query, args, session):
-    return [path + filename for (path, filename) in \
-        session.execute(query, args).fetchall()]
-
-def getSources(suite, component, session, timestamp):
-    extra_cond = ""
-    if timestamp:
-        extra_cond = "AND extract(epoch from sa.created) > %d" % timestamp
-    query = """
-        SELECT l.path, f.filename
-            FROM source s
-            JOIN src_associations sa
-                ON s.id = sa.source AND sa.suite = :suite %s
-            JOIN files f
-                ON s.file = f.id
-            JOIN location l
-                ON f.location = l.id AND l.component = :component
-            ORDER BY filename
-    """ % extra_cond
-    args = { 'suite': suite.suite_id,
-             'component': component.component_id }
-    return fetch(query, args, session)
-
-def getBinaries(suite, component, architecture, type, session, timestamp):
-    extra_cond = ""
-    if timestamp:
-        extra_cond = "AND extract(epoch from ba.created) > %d" % timestamp
-    query = """
-CREATE TEMP TABLE b_candidates (
-    source integer,
-    file integer,
-    architecture integer);
-
-INSERT INTO b_candidates (source, file, architecture)
-    SELECT b.source, b.file, b.architecture
-        FROM binaries b
-        JOIN bin_associations ba ON b.id = ba.bin
-        WHERE b.type = :type AND ba.suite = :suite AND
-            b.architecture IN (2, :architecture) %s;
-
-CREATE TEMP TABLE gf_candidates (
-    filename text,
-    path text,
-    architecture integer,
-    src integer,
-    source text);
-
-INSERT INTO gf_candidates (filename, path, architecture, src, source)
-    SELECT f.filename, l.path, bc.architecture, bc.source as src, s.source
-        FROM b_candidates bc
-        JOIN source s ON bc.source = s.id
-        JOIN files f ON bc.file = f.id
-        JOIN location l ON f.location = l.id
-        WHERE l.component = :component;
-
-WITH arch_any AS
-
-    (SELECT path, filename FROM gf_candidates
-        WHERE architecture > 2),
-
-     arch_all_with_any AS
-    (SELECT path, filename FROM gf_candidates
-        WHERE architecture = 2 AND
-              src IN (SELECT src FROM gf_candidates WHERE architecture > 2)),
-
-     arch_all_without_any AS
-    (SELECT path, filename FROM gf_candidates
-        WHERE architecture = 2 AND
-              source NOT IN (SELECT DISTINCT source FROM gf_candidates WHERE architecture > 2)),
-
-     filelist AS
-    (SELECT * FROM arch_any
-    UNION
-    SELECT * FROM arch_all_with_any
-    UNION
-    SELECT * FROM arch_all_without_any)
-
-    SELECT * FROM filelist ORDER BY filename
-    """ % extra_cond
-    args = { 'suite': suite.suite_id,
-             'component': component.component_id,
-             'architecture': architecture.arch_id,
-             'type': type }
-    return fetch(query, args, session)
+from daklib.lists import getSources, getBinaries, getArchAll
 
 def listPath(suite, component, architecture = None, type = None,
         incremental_mode = False):
@@ -147,26 +65,54 @@ def listPath(suite, component, architecture = None, type = None,
         file.truncate()
     return (file, timestamp)
 
-def writeSourceList(args):
-    (suite, component, incremental_mode) = args
+def writeSourceList(suite_id, component_id, incremental_mode):
+    session = DBConn().session()
+    suite = Suite.get(suite_id, session)
+    component = Component.get(component_id, session)
     (file, timestamp) = listPath(suite, component,
             incremental_mode = incremental_mode)
-    session = DBConn().session()
-    for filename in getSources(suite, component, session, timestamp):
+
+    message = "sources list for %s %s" % (suite.suite_name, component.component_name)
+
+    for _, filename in getSources(suite, component, session, timestamp):
         file.write(filename + '\n')
-    session.close()
+    session.rollback()
     file.close()
+    return (PROC_STATUS_SUCCESS, message)
 
-def writeBinaryList(args):
-    (suite, component, architecture, type, incremental_mode) = args
+def writeAllList(suite_id, component_id, architecture_id, type, incremental_mode):
+    session = DBConn().session()
+    suite = Suite.get(suite_id, session)
+    component = Component.get(component_id, session)
+    architecture = Architecture.get(architecture_id, session)
     (file, timestamp) = listPath(suite, component, architecture, type,
             incremental_mode)
+
+    message = "all list for %s %s (arch=%s, type=%s)" % (suite.suite_name, component.component_name, architecture.arch_string, type)
+
+    for _, filename in getArchAll(suite, component, architecture, type,
+            session, timestamp):
+        file.write(filename + '\n')
+    session.rollback()
+    file.close()
+    return (PROC_STATUS_SUCCESS, message)
+
+def writeBinaryList(suite_id, component_id, architecture_id, type, incremental_mode):
     session = DBConn().session()
-    for filename in getBinaries(suite, component, architecture, type,
+    suite = Suite.get(suite_id, session)
+    component = Component.get(component_id, session)
+    architecture = Architecture.get(architecture_id, session)
+    (file, timestamp) = listPath(suite, component, architecture, type,
+            incremental_mode)
+
+    message = "binary list for %s %s (arch=%s, type=%s)" % (suite.suite_name, component.component_name, architecture.arch_string, type)
+
+    for _, filename in getBinaries(suite, component, architecture, type,
             session, timestamp):
         file.write(filename + '\n')
-    session.close()
+    session.rollback()
     file.close()
+    return (PROC_STATUS_SUCCESS, message)
 
 def usage():
     print """Usage: dak generate_filelist [OPTIONS]
@@ -186,6 +132,7 @@ Incremental mode appends only newer files to existing lists."""
 
 def main():
     cnf = Config()
+    Logger = daklog.Logger('generate-filelist')
     Arguments = [('h', "help",         "Filelist::Options::Help"),
                  ('s', "suite",        "Filelist::Options::Suite", "HasArg"),
                  ('c', "component",    "Filelist::Options::Component", "HasArg"),
@@ -193,54 +140,78 @@ def main():
                  ('i', "incremental",  "Filelist::Options::Incremental")]
     session = DBConn().session()
     query_suites = session.query(Suite)
-    suites = [suite.suite_name for suite in query_suites.all()]
+    suites = [suite.suite_name for suite in query_suites]
     if not cnf.has_key('Filelist::Options::Suite'):
-        cnf['Filelist::Options::Suite'] = ','.join(suites)
+        cnf['Filelist::Options::Suite'] = ','.join(suites).encode()
     query_components = session.query(Component)
     components = \
-        [component.component_name for component in query_components.all()]
+        [component.component_name for component in query_components]
     if not cnf.has_key('Filelist::Options::Component'):
-        cnf['Filelist::Options::Component'] = ','.join(components)
+        cnf['Filelist::Options::Component'] = ','.join(components).encode()
     query_architectures = session.query(Architecture)
     architectures = \
-        [architecture.arch_string for architecture in query_architectures.all()]
+        [architecture.arch_string for architecture in query_architectures]
     if not cnf.has_key('Filelist::Options::Architecture'):
-        cnf['Filelist::Options::Architecture'] = ','.join(architectures)
+        cnf['Filelist::Options::Architecture'] = ','.join(architectures).encode()
     cnf['Filelist::Options::Help'] = ''
     cnf['Filelist::Options::Incremental'] = ''
     apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
     Options = cnf.SubTree("Filelist::Options")
     if Options['Help']:
         usage()
-    suite_arch = session.query(SuiteArchitecture)
-    threadpool = ThreadPool()
-    for suite_name in utils.split_args(Options['Suite']):
-        suite = query_suites.filter_by(suite_name = suite_name).one()
-        join = suite_arch.filter_by(suite_id = suite.suite_id)
-        for component_name in utils.split_args(Options['Component']):
-            component = session.query(Component).\
-                filter_by(component_name = component_name).one()
-            for architecture_name in utils.split_args(Options['Architecture']):
-                architecture = query_architectures.\
-                    filter_by(arch_string = architecture_name).one()
-                try:
-                    join.filter_by(arch_id = architecture.arch_id).one()
-                    if architecture_name == 'source':
-                        threadpool.queueTask(writeSourceList,
-                            (suite, component, Options['Incremental']))
-                    elif architecture_name != 'all':
-                        threadpool.queueTask(writeBinaryList,
-                            (suite, component, architecture, 'deb',
-                                Options['Incremental']))
-                        threadpool.queueTask(writeBinaryList,
-                            (suite, component, architecture, 'udeb',
-                                Options['Incremental']))
-                except:
+    pool = DakProcessPool()
+    query_suites = query_suites. \
+        filter(Suite.suite_name.in_(utils.split_args(Options['Suite'])))
+    query_components = query_components. \
+        filter(Component.component_name.in_(utils.split_args(Options['Component'])))
+    query_architectures = query_architectures. \
+        filter(Architecture.arch_string.in_(utils.split_args(Options['Architecture'])))
+
+    def parse_results(message):
+        # Split out into (code, msg)
+        code, msg = message
+        if code == PROC_STATUS_SUCCESS:
+            Logger.log([msg])
+        elif code == PROC_STATUS_SIGNALRAISED:
+            Logger.log(['E: Subprocess recieved signal ', msg])
+        else:
+            Logger.log(['E: ', msg])
+
+    for suite in query_suites:
+        suite_id = suite.suite_id
+        for component in query_components:
+            component_id = component.component_id
+            for architecture in query_architectures:
+                architecture_id = architecture.arch_id
+                if architecture not in suite.architectures:
                     pass
-    threadpool.joinAll()
+                elif architecture.arch_string == 'source':
+                    pool.apply_async(writeSourceList,
+                        (suite_id, component_id, Options['Incremental']), callback=parse_results)
+                elif architecture.arch_string == 'all':
+                    pool.apply_async(writeAllList,
+                        (suite_id, component_id, architecture_id, 'deb',
+                            Options['Incremental']), callback=parse_results)
+                    pool.apply_async(writeAllList,
+                        (suite_id, component_id, architecture_id, 'udeb',
+                            Options['Incremental']), callback=parse_results)
+                else: # arch any
+                    pool.apply_async(writeBinaryList,
+                        (suite_id, component_id, architecture_id, 'deb',
+                            Options['Incremental']), callback=parse_results)
+                    pool.apply_async(writeBinaryList,
+                        (suite_id, component_id, architecture_id, 'udeb',
+                            Options['Incremental']), callback=parse_results)
+    pool.close()
+    pool.join()
+
     # this script doesn't change the database
     session.close()
 
+    Logger.close()
+
+    sys.exit(pool.overall_status())
+
 if __name__ == '__main__':
     main()
 
index 7e4b0058e335186a26d609ee5e5cb18ad0d6165d..83d51824cdcb05efe37d8143b88eead762c58f3a 100755 (executable)
@@ -225,7 +225,7 @@ def genchanges(Options, outdir, oldfile, origfile, maxdiffs = 14):
         return
 
     if oldstat[1:3] == origstat[1:3]:
-        print "%s: hardlink unbroken, assuming unchanged" % (origfile)
+        #print "%s: hardlink unbroken, assuming unchanged" % (origfile)
         return
 
     oldf = smartopen(oldfile)
@@ -234,9 +234,9 @@ def genchanges(Options, outdir, oldfile, origfile, maxdiffs = 14):
     # should probably early exit if either of these checks fail
     # alternatively (optionally?) could just trim the patch history
 
-    if upd.filesizesha1:
-        if upd.filesizesha1 != oldsizesha1:
-            print "info: old file " + oldfile + " changed! %s %s => %s %s" % (upd.filesizesha1 + oldsizesha1)
+    #if upd.filesizesha1:
+    #    if upd.filesizesha1 != oldsizesha1:
+    #        print "info: old file " + oldfile + " changed! %s %s => %s %s" % (upd.filesizesha1 + oldsizesha1)
 
     if Options.has_key("CanonicalPath"): upd.can_path=Options["CanonicalPath"]
 
@@ -249,7 +249,7 @@ def genchanges(Options, outdir, oldfile, origfile, maxdiffs = 14):
     if newsizesha1 == oldsizesha1:
         os.unlink(newfile)
         oldf.close()
-        print "%s: unchanged" % (origfile)
+        #print "%s: unchanged" % (origfile)
     else:
         if not os.path.isdir(outdir):
             os.mkdir(outdir)
@@ -352,14 +352,6 @@ def main():
         for archobj in architectures:
             architecture = archobj.arch_string
 
-            if architecture != "source":
-                # Process Contents
-                file = "%s/Contents-%s" % (Cnf["Dir::Root"] + tree,
-                        architecture)
-                storename = "%s/%s_contents_%s" % (Options["TempDir"], suite, architecture)
-                genchanges(Options, file + ".diff", storename, file, \
-                  Cnf.get("Suite::%s::Generate-Index-Diffs::MaxDiffs::Contents" % (suite), maxcontents))
-
             # use sections instead of components since dak.conf
             # treats "foo/bar main" as suite "foo", suitesuffix "bar" and
             # component "bar/main". suck.
@@ -373,6 +365,12 @@ def main():
                     longarch = "binary-%s"% (architecture)
                     packages = "Packages"
                     maxsuite = maxpackages
+                    # Process Contents
+                    file = "%s/%s/Contents-%s" % (Cnf["Dir::Root"] + tree, component,
+                            architecture)
+                    storename = "%s/%s_%s_contents_%s" % (Options["TempDir"], suite, component, architecture)
+                    genchanges(Options, file + ".diff", storename, file, \
+                      Cnf.get("Suite::%s::Generate-Index-Diffs::MaxDiffs::Contents" % (suite), maxcontents))
 
                 file = "%s/%s/%s/%s" % (Cnf["Dir::Root"] + tree,
                            component, longarch, packages)
index 00489083851fade54710495ccd13943839726b39..e78466fc96de24dd8466804a5935a4ca1f9aa186 100755 (executable)
@@ -6,6 +6,7 @@
 @copyright: 2000, 2001, 2002, 2006  James Troup <james@nocrew.org>
 @copyright: 2009  Mark Hymers <mhy@debian.org>
 @copyright: 2010  Joerg Jaspert <joerg@debian.org>
+@license: GNU General Public License version 2 or later
 
 """
 
@@ -31,7 +32,7 @@ import sys
 import apt_pkg
 from tempfile import mkstemp, mkdtemp
 import commands
-from multiprocessing import Pool
+from multiprocessing import Pool, TimeoutError
 
 from daklib import daklog
 from daklib.dbconn import *
@@ -41,6 +42,7 @@ from daklib.config import Config
 
 Options = None                 #: Commandline arguments parsed into this
 Logger = None                  #: Our logging object
+results = []                   #: Results of the subprocesses
 
 ################################################################################
 
@@ -103,18 +105,83 @@ TreeDefault
 
     apt_trees={}
     apt_trees["di"]={}
-    apt_trees["testing"]="""
-tree "dists/testing"
+
+    apt_trees["oldstable"]="""
+tree "dists/oldstable"
 {
-   FakeDI "dists/unstable";
-   FileList "/srv/ftp-master.debian.org/database/dists/testing_$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/srv/ftp-master.debian.org/database/dists/testing_$(SECTION)_source.list";
+   FileList "/srv/ftp-master.debian.org/database/dists/oldstable_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/ftp-master.debian.org/database/dists/oldstable_$(SECTION)_source.list";
+   Sections "main contrib non-free";
+   Architectures "%(arch)s";
+   BinOverride "override.lenny.$(SECTION)";
+   ExtraOverride "override.lenny.extra.$(SECTION)";
+   SrcOverride "override.lenny.$(SECTION).src";
+};
+"""
+
+    apt_trees["di"]["oldstable"]="""
+tree "dists/oldstable/main"
+{
+   FileList "/srv/ftp-master.debian.org/database/dists/oldstable_main_$(SECTION)_binary-$(ARCH).list";
+   Sections "debian-installer";
+   Architectures "%(arch)s";
+   BinOverride "override.lenny.main.$(SECTION)";
+   SrcOverride "override.lenny.main.src";
+   BinCacheDB "packages-debian-installer-$(ARCH).db";
+   Packages::Extensions ".udeb";
+   %(contentsline)s
+};
+
+tree "dists/oldstable/non-free"
+{
+   FileList "/srv/ftp-master.debian.org/database/dists/oldstable_non-free_$(SECTION)_binary-$(ARCH).list";
+   Sections "debian-installer";
+   Architectures "%(arch)s";
+   BinOverride "override.lenny.main.$(SECTION)";
+   SrcOverride "override.lenny.main.src";
+   BinCacheDB "packages-debian-installer-$(ARCH).db";
+   Packages::Extensions ".udeb";
+   %(contentsline)s
+};
+"""
+
+    apt_trees["stable"]="""
+tree "dists/stable"
+{
+   FileList "/srv/ftp-master.debian.org/database/dists/stable_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/ftp-master.debian.org/database/dists/stable_$(SECTION)_source.list";
    Sections "main contrib non-free";
    Architectures "%(arch)s";
    BinOverride "override.squeeze.$(SECTION)";
    ExtraOverride "override.squeeze.extra.$(SECTION)";
    SrcOverride "override.squeeze.$(SECTION).src";
 };
+"""
+
+    apt_trees["di"]["stable"]="""
+tree "dists/stable/main"
+{
+   FileList "/srv/ftp-master.debian.org/database/dists/stable_main_$(SECTION)_binary-$(ARCH).list";
+   Sections "debian-installer";
+   Architectures "%(arch)s";
+   BinOverride "override.squeeze.main.$(SECTION)";
+   SrcOverride "override.squeeze.main.src";
+   BinCacheDB "packages-debian-installer-$(ARCH).db";
+   Packages::Extensions ".udeb";
+   %(contentsline)s
+};
+
+tree "dists/stable/non-free"
+{
+   FileList "/srv/ftp-master.debian.org/database/dists/stable_non-free_$(SECTION)_binary-$(ARCH).list";
+   Sections "debian-installer";
+   Architectures "%(arch)s";
+   BinOverride "override.squeeze.main.$(SECTION)";
+   SrcOverride "override.squeeze.main.src";
+   BinCacheDB "packages-debian-installer-$(ARCH).db";
+   Packages::Extensions ".udeb";
+   %(contentsline)s
+};
 """
 
     apt_trees["squeeze-updates"]="""
@@ -129,6 +196,20 @@ tree "dists/squeeze-updates"
    SrcOverride "override.squeeze.$(SECTION).src";
    Contents " ";
 };
+"""
+
+    apt_trees["testing"]="""
+tree "dists/testing"
+{
+   FakeDI "dists/unstable";
+   FileList "/srv/ftp-master.debian.org/database/dists/testing_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/ftp-master.debian.org/database/dists/testing_$(SECTION)_source.list";
+   Sections "main contrib non-free";
+   Architectures "%(arch)s";
+   BinOverride "override.wheezy.$(SECTION)";
+   ExtraOverride "override.wheezy.extra.$(SECTION)";
+   SrcOverride "override.wheezy.$(SECTION).src";
+};
 """
 
     apt_trees["di"]["testing"]="""
@@ -137,8 +218,8 @@ tree "dists/testing/main"
    FileList "/srv/ftp-master.debian.org/database/dists/testing_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
    Architectures "%(arch)s";
-   BinOverride "override.squeeze.main.$(SECTION)";
-   SrcOverride "override.squeeze.main.src";
+   BinOverride "override.wheezy.main.$(SECTION)";
+   SrcOverride "override.wheezy.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
    %(contentsline)s
@@ -149,8 +230,8 @@ tree "dists/testing/non-free"
    FileList "/srv/ftp-master.debian.org/database/dists/testing_non-free_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
    Architectures "%(arch)s";
-   BinOverride "override.squeeze.main.$(SECTION)";
-   SrcOverride "override.squeeze.main.src";
+   BinOverride "override.wheezy.main.$(SECTION)";
+   SrcOverride "override.wheezy.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
    %(contentsline)s
@@ -239,9 +320,9 @@ tree "dists/testing-proposed-updates"
    SourceFileList "/srv/ftp-master.debian.org/database/dists/testing-proposed-updates_$(SECTION)_source.list";
    Sections "main contrib non-free";
    Architectures "%(arch)s";
-   BinOverride "override.squeeze.$(SECTION)";
-   ExtraOverride "override.squeeze.extra.$(SECTION)";
-   SrcOverride "override.squeeze.$(SECTION).src";
+   BinOverride "override.wheezy.$(SECTION)";
+   ExtraOverride "override.wheezy.extra.$(SECTION)";
+   SrcOverride "override.wheezy.$(SECTION).src";
    Contents " ";
 };
 """
@@ -251,8 +332,8 @@ tree "dists/testing-proposed-updates/main"
    FileList "/srv/ftp-master.debian.org/database/dists/testing-proposed-updates_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
    Architectures "%(arch)s";
-   BinOverride "override.squeeze.main.$(SECTION)";
-   SrcOverride "override.squeeze.main.src";
+   BinOverride "override.wheezy.main.$(SECTION)";
+   SrcOverride "override.wheezy.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
    Contents " ";
@@ -266,9 +347,9 @@ tree "dists/proposed-updates"
    SourceFileList "/srv/ftp-master.debian.org/database/dists/proposed-updates_$(SECTION)_source.list";
    Sections "main contrib non-free";
    Architectures "%(arch)s";
-   BinOverride "override.lenny.$(SECTION)";
-   ExtraOverride "override.lenny.extra.$(SECTION)";
-   SrcOverride "override.lenny.$(SECTION).src";
+   BinOverride "override.squeeze.$(SECTION)";
+   ExtraOverride "override.squeeze.extra.$(SECTION)";
+   SrcOverride "override.squeeze.$(SECTION).src";
    Contents " ";
 };
 """
@@ -278,6 +359,32 @@ tree "dists/proposed-updates/main"
    FileList "/srv/ftp-master.debian.org/database/dists/proposed-updates_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
    Architectures "%(arch)s";
+   BinOverride "override.squeeze.main.$(SECTION)";
+   SrcOverride "override.squeeze.main.src";
+   BinCacheDB "packages-debian-installer-$(ARCH).db";
+   Packages::Extensions ".udeb";
+   Contents " ";
+};
+"""
+    apt_trees["oldstable-proposed-updates"]="""
+tree "dists/oldstable-proposed-updates"
+{
+   FileList "/srv/ftp-master.debian.org/database/dists/oldstable-proposed-updates_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/ftp-master.debian.org/database/dists/oldstable-proposed-updates_$(SECTION)_source.list";
+   Sections "main contrib non-free";
+   Architectures "%(arch)s";
+   BinOverride "override.lenny.$(SECTION)";
+   ExtraOverride "override.lenny.extra.$(SECTION)";
+   SrcOverride "override.lenny.$(SECTION).src";
+   Contents " ";
+};
+"""
+    apt_trees["di"]["oldstable-proposed-updates"]="""
+tree "dists/oldstable-proposed-updates/main"
+{
+   FileList "/srv/ftp-master.debian.org/database/dists/oldstable-proposed-updates_main_$(SECTION)_binary-$(ARCH).list";
+   Sections "debian-installer";
+   Architectures "%(arch)s";
    BinOverride "override.lenny.main.$(SECTION)";
    SrcOverride "override.lenny.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
@@ -312,9 +419,10 @@ tree "dists/proposed-updates/main"
         # it has errormessages we like to see
         os.environ['GZIP'] = '--rsyncable'
         os.chdir(tmppath)
-        (result, output) = commands.getstatusoutput('apt-ftparchive generate %s' % os.path.basename(ac_name))
+        (result, output) = commands.getstatusoutput('apt-ftparchive -o APT::FTPArchive::Contents=off generate %s' % os.path.basename(ac_name))
         sn="a-f %s,%s: " % (suite, arch)
         print sn + output.replace('\n', '\n%s' % (sn))
+        return result
 
     # Clean up any left behind files
     finally:
@@ -333,11 +441,16 @@ tree "dists/proposed-updates/main"
 def sname(arch):
     return arch.arch_string
 
+def get_result(arg):
+    global results
+    if arg:
+        results.append(arg)
+
 ########################################################################
 ########################################################################
 
 def main ():
-    global Options, Logger
+    global Options, Logger, results
 
     cnf = Config()
 
@@ -355,7 +468,7 @@ def main ():
     if Options["Help"]:
         usage()
 
-    Logger = daklog.Logger(cnf, 'generate-packages-sources')
+    Logger = daklog.Logger('generate-packages-sources')
 
     session = DBConn().session()
 
@@ -375,19 +488,26 @@ def main ():
     startdir = os.getcwd()
     os.chdir(cnf["Dir::TempPath"])
 
+    broken=[]
     # For each given suite, each architecture, run one apt-ftparchive
     for s in suites:
+        results=[]
         # Setup a multiprocessing Pool. As many workers as we have CPU cores.
         pool = Pool()
-        arch_list=get_suite_architectures(s.suite_name, skipsrc=False, skipall=True, session=session)
+        arch_list=get_suite_architectures(s.suite_name, skipsrc=False, skipall=False, session=session)
         Logger.log(['generating output for Suite %s, Architectures %s' % (s.suite_name, map(sname, arch_list))])
         for a in arch_list:
-            pool.apply_async(generate_packages_sources, (a.arch_string, s.suite_name, cnf["Dir::TempPath"]))
+            pool.apply_async(generate_packages_sources, (a.arch_string, s.suite_name, cnf["Dir::TempPath"]), callback=get_result)
 
         # No more work will be added to our pool, close it and then wait for all to finish
         pool.close()
         pool.join()
 
+    if len(results) > 0:
+        Logger.log(['Trouble, something with a-f broke, resultcodes: %s' % (results)])
+        print "Trouble, something with a-f broke, resultcodes: %s" % (results)
+        sys.exit(1)
+
     os.chdir(startdir)
     # this script doesn't change the database
     session.close()
diff --git a/dak/generate_packages_sources2.py b/dak/generate_packages_sources2.py
new file mode 100755 (executable)
index 0000000..d29e031
--- /dev/null
@@ -0,0 +1,310 @@
+#!/usr/bin/python
+
+"""
+Generate Packages/Sources files
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011  Ansgar Burchardt <ansgar@debian.org>
+@copyright: Based on daklib/lists.py and dak/generate_filelist.py:
+            2009-2011  Torsten Werner <twerner@debian.org>
+@copyright: Based on dak/generate_packages_sources.py:
+            2000, 2001, 2002, 2006  James Troup <james@nocrew.org>
+            2009  Mark Hymers <mhy@debian.org>
+            2010  Joerg Jaspert <joerg@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+import apt_pkg, sys
+
+def usage():
+    print """Usage: dak generate-packages-sources2 [OPTIONS]
+Generate the Packages/Sources files
+
+  -s, --suite=SUITE            process this suite
+                               Default: All suites not marked 'untouchable'
+  -f, --force                  Allow processing of untouchable suites
+                               CAREFUL: Only to be used at point release time!
+  -h, --help                   show this help and exit
+
+SUITE can be a space seperated list, e.g.
+   --suite=unstable testing
+"""
+    sys.exit()
+
+#############################################################################
+
+# Here be dragons.
+_sources_query = R"""
+SELECT
+
+  (SELECT
+     STRING_AGG(
+       CASE
+         WHEN key = 'Source' THEN 'Package\: '
+         WHEN key = 'Files' THEN E'Files\:\n ' || f.md5sum || ' ' || f.size || ' ' || SUBSTRING(f.filename FROM E'/([^/]*)\\Z')
+         WHEN key = 'Checksums-Sha1' THEN E'Checksums-Sha1\:\n ' || f.sha1sum || ' ' || f.size || ' ' || SUBSTRING(f.filename FROM E'/([^/]*)\\Z')
+         WHEN key = 'Checksums-Sha256' THEN E'Checksums-Sha256\:\n ' || f.sha256sum || ' ' || f.size || ' ' || SUBSTRING(f.filename FROM E'/([^/]*)\\Z')
+         ELSE key || '\: '
+       END || value, E'\n' ORDER BY mk.ordering, mk.key)
+   FROM
+     source_metadata sm
+     JOIN metadata_keys mk ON mk.key_id = sm.key_id
+   WHERE s.id=sm.src_id
+  )
+  ||
+  E'\nDirectory\: pool/' || SUBSTRING(f.filename FROM E'\\A(.*)/[^/]*\\Z')
+  ||
+  E'\nPriority\: ' || pri.priority
+  ||
+  E'\nSection\: ' || sec.section
+
+FROM
+
+source s
+JOIN src_associations sa ON s.id = sa.source
+JOIN files f ON s.file=f.id
+JOIN override o ON o.package = s.source
+JOIN section sec ON o.section = sec.id
+JOIN priority pri ON o.priority = pri.id
+
+WHERE
+  sa.suite = :suite
+  AND o.suite = :overridesuite AND o.component = :component AND o.type = :dsc_type
+
+ORDER BY
+s.source, s.version
+"""
+
+def generate_sources(suite_id, component_id):
+    global _sources_query
+    from daklib.filewriter import SourcesFileWriter
+    from daklib.dbconn import Component, DBConn, OverrideType, Suite
+    from daklib.dakmultiprocessing import PROC_STATUS_SUCCESS
+
+    session = DBConn().session()
+    dsc_type = session.query(OverrideType).filter_by(overridetype='dsc').one().overridetype_id
+
+    suite = session.query(Suite).get(suite_id)
+    component = session.query(Component).get(component_id)
+
+    overridesuite_id = suite.get_overridesuite().suite_id
+
+    writer = SourcesFileWriter(suite=suite.suite_name, component=component.component_name)
+    output = writer.open()
+
+    # run query and write Sources
+    r = session.execute(_sources_query, {"suite": suite_id, "component": component_id, "dsc_type": dsc_type, "overridesuite": overridesuite_id})
+    for (stanza,) in r:
+        print >>output, stanza
+        print >>output, ""
+
+    writer.close()
+
+    message = ["generate sources", suite.suite_name, component.component_name]
+    session.rollback()
+    return (PROC_STATUS_SUCCESS, message)
+
+#############################################################################
+
+# We currently filter out the "Tag" line. They are set by external overrides and
+# NOT by the maintainer. And actually having it set by maintainer means we output
+# it twice at the moment -> which breaks dselect.
+# Here be large dragons.
+_packages_query = R"""
+WITH
+
+  tmp AS (
+    SELECT
+      b.id AS binary_id,
+      b.package AS package,
+      b.version AS version,
+      b.architecture AS architecture,
+      b.source AS source_id,
+      s.source AS source,
+      f.filename AS filename,
+      f.size AS size,
+      f.md5sum AS md5sum,
+      f.sha1sum AS sha1sum,
+      f.sha256sum AS sha256sum
+    FROM
+      binaries b
+      JOIN bin_associations ba ON b.id = ba.bin
+      JOIN files f ON f.id = b.file
+      JOIN location l ON l.id = f.location
+      JOIN source s ON b.source = s.id
+    WHERE
+      (b.architecture = :arch_all OR b.architecture = :arch) AND b.type = :type_name
+      AND ba.suite = :suite
+      AND l.component = :component
+  )
+
+SELECT
+  (SELECT
+     STRING_AGG(key || '\: ' || value, E'\n' ORDER BY mk.ordering, mk.key)
+   FROM
+     binaries_metadata bm
+     JOIN metadata_keys mk ON mk.key_id = bm.key_id
+   WHERE
+     bm.bin_id = tmp.binary_id
+     AND key != 'Section' AND key != 'Priority' AND key != 'Tag'
+  )
+  || COALESCE(E'\n' || (SELECT
+     STRING_AGG(key || '\: ' || value, E'\n' ORDER BY key)
+   FROM external_overrides eo
+   WHERE
+     eo.package = tmp.package
+     AND eo.suite = :overridesuite AND eo.component = :component
+  ), '')
+  || E'\nSection\: ' || sec.section
+  || E'\nPriority\: ' || pri.priority
+  || E'\nFilename\: pool/' || tmp.filename
+  || E'\nSize\: ' || tmp.size
+  || E'\nMD5sum\: ' || tmp.md5sum
+  || E'\nSHA1\: ' || tmp.sha1sum
+  || E'\nSHA256\: ' || tmp.sha256sum
+
+FROM
+  tmp
+  JOIN override o ON o.package = tmp.package
+  JOIN section sec ON sec.id = o.section
+  JOIN priority pri ON pri.id = o.priority
+
+WHERE
+  (
+      architecture <> :arch_all
+    OR
+      (architecture = :arch_all AND source_id IN (SELECT source_id FROM tmp WHERE architecture <> :arch_all))
+    OR
+      (architecture = :arch_all AND source NOT IN (SELECT DISTINCT source FROM tmp WHERE architecture <> :arch_all))
+  )
+  AND
+    o.type = :type_id AND o.suite = :overridesuite AND o.component = :component
+
+ORDER BY tmp.source, tmp.package, tmp.version
+"""
+
+def generate_packages(suite_id, component_id, architecture_id, type_name):
+    global _packages_query
+    from daklib.filewriter import PackagesFileWriter
+    from daklib.dbconn import Architecture, Component, DBConn, OverrideType, Suite
+    from daklib.dakmultiprocessing import PROC_STATUS_SUCCESS
+
+    session = DBConn().session()
+    arch_all_id = session.query(Architecture).filter_by(arch_string='all').one().arch_id
+    type_id = session.query(OverrideType).filter_by(overridetype=type_name).one().overridetype_id
+
+    suite = session.query(Suite).get(suite_id)
+    component = session.query(Component).get(component_id)
+    architecture = session.query(Architecture).get(architecture_id)
+
+    overridesuite_id = suite.get_overridesuite().suite_id
+
+    writer = PackagesFileWriter(suite=suite.suite_name, component=component.component_name,
+            architecture=architecture.arch_string, debtype=type_name)
+    output = writer.open()
+
+    r = session.execute(_packages_query, {"suite": suite_id, "component": component_id,
+        "arch": architecture_id, "type_id": type_id, "type_name": type_name, "arch_all": arch_all_id,
+        "overridesuite": overridesuite_id})
+    for (stanza,) in r:
+        print >>output, stanza
+        print >>output, ""
+
+    writer.close()
+
+    message = ["generate-packages", suite.suite_name, component.component_name, architecture.arch_string]
+    session.rollback()
+    return (PROC_STATUS_SUCCESS, message)
+
+#############################################################################
+
+def main():
+    from daklib.dakmultiprocessing import DakProcessPool, PROC_STATUS_SUCCESS, PROC_STATUS_SIGNALRAISED
+    pool = DakProcessPool()
+
+    from daklib.dbconn import Component, DBConn, get_suite, Suite
+    from daklib.config import Config
+    from daklib import daklog
+
+    cnf = Config()
+
+    Arguments = [('h',"help","Generate-Packages-Sources::Options::Help"),
+                 ('s',"suite","Generate-Packages-Sources::Options::Suite"),
+                 ('f',"force","Generate-Packages-Sources::Options::Force")]
+
+    suite_names = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
+    try:
+        Options = cnf.SubTree("Generate-Packages-Sources::Options")
+    except KeyError:
+        Options = {}
+
+    if Options.has_key("Help"):
+        usage()
+
+    logger = daklog.Logger('generate-packages-sources2')
+
+    session = DBConn().session()
+
+    if Options.has_key("Suite"):
+        suites = []
+        for s in suite_names:
+            suite = get_suite(s.lower(), session)
+            if suite:
+                suites.append(suite)
+            else:
+                print "I: Cannot find suite %s" % s
+                logger.log(['Cannot find suite %s' % s])
+    else:
+        suites = session.query(Suite).filter(Suite.untouchable == False).all()
+
+    force = Options.has_key("Force") and Options["Force"]
+
+    component_ids = [ c.component_id for c in session.query(Component).all() ]
+
+    def parse_results(message):
+        # Split out into (code, msg)
+        code, msg = message
+        if code == PROC_STATUS_SUCCESS:
+            logger.log([msg])
+        elif code == PROC_STATUS_SIGNALRAISED:
+            logger.log(['E: Subprocess recieved signal ', msg])
+        else:
+            logger.log(['E: ', msg])
+
+    for s in suites:
+        if s.untouchable and not force:
+            utils.fubar("Refusing to touch %s (untouchable and not forced)" % s.suite_name)
+        for c in component_ids:
+            pool.apply_async(generate_sources, [s.suite_id, c], callback=parse_results)
+            for a in s.architectures:
+                if a == 'source':
+                    continue
+                pool.apply_async(generate_packages, [s.suite_id, c, a.arch_id, 'deb'], callback=parse_results)
+                pool.apply_async(generate_packages, [s.suite_id, c, a.arch_id, 'udeb'], callback=parse_results)
+
+    pool.close()
+    pool.join()
+
+    # this script doesn't change the database
+    session.close()
+
+    logger.close()
+
+    sys.exit(pool.overall_status())
+
+if __name__ == '__main__':
+    main()
index 15ad1244163c511632ff283144026318171b95d3..0a394274d577e0142b8a70fc0a9d99e1eb8be0fa 100755 (executable)
@@ -1,12 +1,15 @@
 #!/usr/bin/env python
 
-""" Create all the Release files
+"""
+Create all the Release files
 
 @contact: Debian FTPMaster <ftpmaster@debian.org>
-@Copyright: 2001, 2002, 2006  Anthony Towns <ajt@debian.org>
-@copyright: 2009  Joerg Jaspert <joerg@debian.org>
+@copyright: 2011  Joerg Jaspert <joerg@debian.org>
+@copyright: 2011  Mark Hymers <mhy@debian.org>
 @license: GNU General Public License version 2 or later
+
 """
+
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-#   ``Bored now''
+################################################################################
+
+# <mhy> I wish they wouldnt leave biscuits out, thats just tempting. Damnit.
 
 ################################################################################
 
 import sys
 import os
+import os.path
 import stat
 import time
 import gzip
 import bz2
 import apt_pkg
+from tempfile import mkstemp, mkdtemp
+import commands
+from sqlalchemy.orm import object_session
 
-from daklib import utils
+from daklib import utils, daklog
+from daklib.regexes import re_gensubrelease, re_includeinrelease
 from daklib.dak_exceptions import *
 from daklib.dbconn import *
 from daklib.config import Config
+from daklib.dakmultiprocessing import DakProcessPool, PROC_STATUS_SUCCESS
 
 ################################################################################
-
-Cnf = None
-out = None
-AptCnf = None
+Logger = None                  #: Our logging object
 
 ################################################################################
 
 def usage (exit_code=0):
-    print """Usage: dak generate-releases [OPTION]... [SUITE]...
-Generate Release files (for SUITE).
+    """ Usage information"""
 
-  -h, --help                 show this help and exit
-  -a, --apt-conf FILE        use FILE instead of default apt.conf
-  -f, --force-touch          ignore Untouchable directives in dak.conf
+    print """Usage: dak generate-releases [OPTIONS]
+Generate the Release files
 
-If no SUITE is given Release files are generated for all suites."""
+  -s, --suite=SUITE(s)       process this suite
+                             Default: All suites not marked 'untouchable'
+  -f, --force                Allow processing of untouchable suites
+                             CAREFUL: Only to be used at (point) release time!
+  -h, --help                 show this help and exit
 
+SUITE can be a space seperated list, e.g.
+   --suite=unstable testing
+  """
     sys.exit(exit_code)
 
-################################################################################
+########################################################################
 
-def add_tiffani (files, path, indexstem):
-    index = "%s.diff/Index" % (indexstem)
-    filepath = "%s/%s" % (path, index)
-    if os.path.exists(filepath):
-        #print "ALERT: there was a tiffani file %s" % (filepath)
-        files.append(index)
-
-def gen_i18n_index (files, tree, sec):
-    path = Cnf["Dir::Root"] + tree + "/"
-    i18n_path = "%s/i18n" % (sec)
-    if os.path.exists("%s/%s" % (path, i18n_path)):
-        index = "%s/Index" % (i18n_path)
-        out = open("%s/%s" % (path, index), "w")
-        out.write("SHA1:\n")
-        for x in os.listdir("%s/%s" % (path, i18n_path)):
-            if x.startswith('Translation-'):
-                f = open("%s/%s/%s" % (path, i18n_path, x), "r")
-                size = os.fstat(f.fileno())[6]
-                f.seek(0)
-                sha1sum = apt_pkg.sha1sum(f)
-                f.close()
-                out.write(" %s %7d %s\n" % (sha1sum, size, x))
-        out.close()
-        files.append(index)
-
-def compressnames (tree,type,file):
-    compress = AptCnf.get("%s::%s::Compress" % (tree,type), AptCnf.get("Default::%s::Compress" % (type), ". gzip"))
-    result = []
-    cl = compress.split()
-    uncompress = ("." not in cl)
-    for mode in compress.split():
-        if mode == ".":
-            result.append(file)
-        elif mode == "gzip":
-            if uncompress:
-                result.append("<zcat/.gz>" + file)
-                uncompress = 0
-            result.append(file + ".gz")
-        elif mode == "bzip2":
-            if uncompress:
-                result.append("<bzcat/.bz2>" + file)
-                uncompress = 0
-            result.append(file + ".bz2")
-    return result
-
-decompressors = { 'zcat' : gzip.GzipFile,
-                  'bzip2' : bz2.BZ2File }
-
-def print_md5sha_files (tree, files, hashop):
-    path = Cnf["Dir::Root"] + tree + "/"
-    for name in files:
-        hashvalue = ""
-        hashlen = 0
-        try:
-            if name[0] == "<":
-                j = name.index("/")
-                k = name.index(">")
-                (cat, ext, name) = (name[1:j], name[j+1:k], name[k+1:])
-                file_handle = decompressors[ cat ]( "%s%s%s" % (path, name, ext) )
-                contents = file_handle.read()
-                hashvalue = hashop(contents)
-                hashlen = len(contents)
-            else:
-                try:
-                    file_handle = utils.open_file(path + name)
-                    hashvalue = hashop(file_handle)
-                    hashlen = os.stat(path + name).st_size
-                except:
-                    raise
+def sign_release_dir(suite, dirname):
+    cnf = Config()
+
+    if cnf.has_key("Dinstall::SigningKeyring"):
+        keyring = "--secret-keyring \"%s\"" % cnf["Dinstall::SigningKeyring"]
+        if cnf.has_key("Dinstall::SigningPubKeyring"):
+            keyring += " --keyring \"%s\"" % cnf["Dinstall::SigningPubKeyring"]
+
+        arguments = "--no-options --batch --no-tty --armour"
+
+        relname = os.path.join(dirname, 'Release')
+
+        dest = os.path.join(dirname, 'Release.gpg')
+        if os.path.exists(dest):
+            os.unlink(dest)
+
+        inlinedest = os.path.join(dirname, 'InRelease')
+        if os.path.exists(inlinedest):
+            os.unlink(inlinedest)
+
+        # We can only use one key for inline signing so use the first one in
+        # the array for consistency
+        firstkey = True
+
+        for keyid in suite.signingkeys:
+            defkeyid = "--default-key %s" % keyid
+
+            os.system("gpg %s %s %s --detach-sign <%s >>%s" %
+                    (keyring, defkeyid, arguments, relname, dest))
+
+            if firstkey:
+                os.system("gpg %s %s %s --clearsign <%s >>%s" %
+                        (keyring, defkeyid, arguments, relname, inlinedest))
+                firstkey = False
+
+class ReleaseWriter(object):
+    def __init__(self, suite):
+        self.suite = suite
+
+    def generate_release_files(self):
+        """
+        Generate Release files for the given suite
+
+        @type suite: string
+        @param suite: Suite name
+        """
+
+        suite = self.suite
+        session = object_session(suite)
+
+        architectures = get_suite_architectures(suite.suite_name, skipall=True, skipsrc=True, session=session)
+
+        # Attribs contains a tuple of field names and the database names to use to
+        # fill them in
+        attribs = ( ('Origin',      'origin'),
+                    ('Label',       'label'),
+                    ('Suite',       'suite_name'),
+                    ('Version',     'version'),
+                    ('Codename',    'codename') )
+
+        # A "Sub" Release file has slightly different fields
+        subattribs = ( ('Archive',  'suite_name'),
+                       ('Origin',   'origin'),
+                       ('Label',    'label'),
+                       ('Version',  'version') )
+
+        # Boolean stuff. If we find it true in database, write out "yes" into the release file
+        boolattrs = ( ('NotAutomatic',         'notautomatic'),
+                      ('ButAutomaticUpgrades', 'butautomaticupgrades') )
+
+        cnf = Config()
+
+        suite_suffix = "%s" % (cnf.Find("Dinstall::SuiteSuffix"))
+
+        outfile = os.path.join(cnf["Dir::Root"], 'dists', "%s/%s" % (suite.suite_name, suite_suffix), "Release")
+        out = open(outfile + ".new", "w")
+
+        for key, dbfield in attribs:
+            if getattr(suite, dbfield) is not None:
+                # TEMPORARY HACK HACK HACK until we change the way we store the suite names etc
+                if key == 'Suite' and getattr(suite, dbfield) == 'squeeze-updates':
+                    out.write("Suite: stable-updates\n")
                 else:
-                    if file_handle:
-                        file_handle.close()
-
-        except CantOpenError:
-            print "ALERT: Couldn't open " + path + name
-        else:
-            out.write(" %s %8d %s\n" % (hashvalue, hashlen, name))
-
-def print_md5_files (tree, files):
-    print_md5sha_files (tree, files, apt_pkg.md5sum)
-
-def print_sha1_files (tree, files):
-    print_md5sha_files (tree, files, apt_pkg.sha1sum)
-
-def print_sha256_files (tree, files):
-    print_md5sha_files (tree, files, apt_pkg.sha256sum)
-
-def write_release_file (relpath, suite, component, origin, label, arch, version="", suite_suffix="", notautomatic=""):
-    try:
-        if os.access(relpath, os.F_OK):
-            if os.stat(relpath).st_nlink > 1:
-                os.unlink(relpath)
-        release = open(relpath, "w")
-    except IOError:
-        utils.fubar("Couldn't write to " + relpath)
-
-    release.write("Archive: %s\n" % (suite))
-    if version != "":
-        release.write("Version: %s\n" % (version))
-
-    if suite_suffix:
-        release.write("Component: %s/%s\n" % (suite_suffix,component))
-    else:
-        release.write("Component: %s\n" % (component))
+                    out.write("%s: %s\n" % (key, getattr(suite, dbfield)))
 
-    release.write("Origin: %s\n" % (origin))
-    release.write("Label: %s\n" % (label))
-    if notautomatic != "":
-        release.write("NotAutomatic: %s\n" % (notautomatic))
-    release.write("Architecture: %s\n" % (arch))
-    release.close()
+        out.write("Date: %s\n" % (time.strftime("%a, %d %b %Y %H:%M:%S UTC", time.gmtime(time.time()))))
+
+        if suite.validtime:
+            validtime=float(suite.validtime)
+            out.write("Valid-Until: %s\n" % (time.strftime("%a, %d %b %Y %H:%M:%S UTC", time.gmtime(time.time()+validtime))))
+
+        for key, dbfield in boolattrs:
+            if getattr(suite, dbfield, False):
+                out.write("%s: yes\n" % (key))
+
+        out.write("Architectures: %s\n" % (" ".join([a.arch_string for a in architectures])))
+
+        ## FIXME: Components need to be adjusted to whatever will be in the db
+        ## Needs putting in the DB
+        components = ['main', 'contrib', 'non-free']
+
+        out.write("Components: %s\n" % ( " ".join(map(lambda x: "%s%s" % (suite_suffix, x), components ))))
+
+        # For exact compatibility with old g-r, write out Description here instead
+        # of with the rest of the DB fields above
+        if getattr(suite, 'description') is not None:
+            out.write("Description: %s\n" % suite.description)
+
+        for comp in components:
+            for dirpath, dirnames, filenames in os.walk("%sdists/%s/%s%s" % (cnf["Dir::Root"], suite.suite_name, suite_suffix, comp), topdown=True):
+                if not re_gensubrelease.match(dirpath):
+                    continue
+
+                subfile = os.path.join(dirpath, "Release")
+                subrel = open(subfile + '.new', "w")
+
+                for key, dbfield in subattribs:
+                    if getattr(suite, dbfield) is not None:
+                        subrel.write("%s: %s\n" % (key, getattr(suite, dbfield)))
+
+                for key, dbfield in boolattrs:
+                    if getattr(suite, dbfield, False):
+                        subrel.write("%s: yes\n" % (key))
+
+                subrel.write("Component: %s%s\n" % (suite_suffix, comp))
+
+                # Urgh, but until we have all the suite/component/arch stuff in the DB,
+                # this'll have to do
+                arch = os.path.split(dirpath)[-1]
+                if arch.startswith('binary-'):
+                    arch = arch[7:]
+
+                subrel.write("Architecture: %s\n" % (arch))
+                subrel.close()
+
+                os.rename(subfile + '.new', subfile)
+
+        # Now that we have done the groundwork, we want to get off and add the files with
+        # their checksums to the main Release file
+        oldcwd = os.getcwd()
+
+        os.chdir("%sdists/%s/%s" % (cnf["Dir::Root"], suite.suite_name, suite_suffix))
+
+        hashfuncs = { 'MD5Sum' : apt_pkg.md5sum,
+                      'SHA1' : apt_pkg.sha1sum,
+                      'SHA256' : apt_pkg.sha256sum }
+
+        fileinfo = {}
+
+        uncompnotseen = {}
+
+        for dirpath, dirnames, filenames in os.walk(".", followlinks=True, topdown=True):
+            for entry in filenames:
+                # Skip things we don't want to include
+                if not re_includeinrelease.match(entry):
+                    continue
+
+                if dirpath == '.' and entry in ["Release", "Release.gpg", "InRelease"]:
+                    continue
+
+                filename = os.path.join(dirpath.lstrip('./'), entry)
+                fileinfo[filename] = {}
+                contents = open(filename, 'r').read()
+
+                # If we find a file for which we have a compressed version and
+                # haven't yet seen the uncompressed one, store the possibility
+                # for future use
+                if entry.endswith(".gz") and entry[:-3] not in uncompnotseen.keys():
+                    uncompnotseen[filename[:-3]] = (gzip.GzipFile, filename)
+                elif entry.endswith(".bz2") and entry[:-4] not in uncompnotseen.keys():
+                    uncompnotseen[filename[:-4]] = (bz2.BZ2File, filename)
+
+                fileinfo[filename]['len'] = len(contents)
+
+                for hf, func in hashfuncs.items():
+                    fileinfo[filename][hf] = func(contents)
+
+        for filename, comp in uncompnotseen.items():
+            # If we've already seen the uncompressed file, we don't
+            # need to do anything again
+            if filename in fileinfo.keys():
+                continue
+
+            # Skip uncompressed Contents files as they're huge, take ages to
+            # checksum and we checksum the compressed ones anyways
+            if os.path.basename(filename).startswith("Contents"):
+                continue
+
+            fileinfo[filename] = {}
+
+            # File handler is comp[0], filename of compressed file is comp[1]
+            contents = comp[0](comp[1], 'r').read()
+
+            fileinfo[filename]['len'] = len(contents)
+
+            for hf, func in hashfuncs.items():
+                fileinfo[filename][hf] = func(contents)
+
+
+        for h in sorted(hashfuncs.keys()):
+            out.write('%s:\n' % h)
+            for filename in sorted(fileinfo.keys()):
+                out.write(" %s %8d %s\n" % (fileinfo[filename][h], fileinfo[filename]['len'], filename))
+
+        out.close()
+        os.rename(outfile + '.new', outfile)
+
+        sign_release_dir(suite, os.path.dirname(outfile))
+
+        os.chdir(oldcwd)
+
+        return
 
-################################################################################
 
 def main ():
-    global Cnf, AptCnf, out
-    out = sys.stdout
+    global Logger
 
-    Cnf = utils.get_conf()
     cnf = Config()
 
+    for i in ["Help", "Suite", "Force"]:
+        if not cnf.has_key("Generate-Releases::Options::%s" % (i)):
+            cnf["Generate-Releases::Options::%s" % (i)] = ""
+
     Arguments = [('h',"help","Generate-Releases::Options::Help"),
-                 ('a',"apt-conf","Generate-Releases::Options::Apt-Conf", "HasArg"),
-                 ('f',"force-touch","Generate-Releases::Options::Force-Touch"),
-                ]
-    for i in [ "help", "apt-conf", "force-touch" ]:
-        if not Cnf.has_key("Generate-Releases::Options::%s" % (i)):
-            Cnf["Generate-Releases::Options::%s" % (i)] = ""
+                 ('s',"suite","Generate-Releases::Options::Suite"),
+                 ('f',"force","Generate-Releases::Options::Force")]
 
-    suites = apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv)
-    Options = Cnf.SubTree("Generate-Releases::Options")
+    suite_names = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
+    Options = cnf.SubTree("Generate-Releases::Options")
 
     if Options["Help"]:
         usage()
 
-    if not Options["Apt-Conf"]:
-        Options["Apt-Conf"] = utils.which_apt_conf_file()
+    Logger = daklog.Logger('generate-releases')
 
-    AptCnf = apt_pkg.newConfiguration()
-    apt_pkg.ReadConfigFileISC(AptCnf, Options["Apt-Conf"])
+    session = DBConn().session()
 
-    if not suites:
-        suites = Cnf.SubTree("Suite").List()
+    if Options["Suite"]:
+        suites = []
+        for s in suite_names:
+            suite = get_suite(s.lower(), session)
+            if suite:
+                suites.append(suite)
+            else:
+                print "cannot find suite %s" % s
+                Logger.log(['cannot find suite %s' % s])
+    else:
+        suites = session.query(Suite).filter(Suite.untouchable == False).all()
 
-    for suitename in suites:
-        print "Processing: " + suitename
-        SuiteBlock = Cnf.SubTree("Suite::" + suitename)
-        suiteobj = get_suite(suitename.lower())
-        if not suiteobj:
-            print "ALERT: Cannot find suite %s!" % (suitename.lower())
-            continue
+    broken=[]
 
-        # Use the canonical name
-        suite = suiteobj.suite_name.lower()
+    pool = DakProcessPool()
 
-        if suiteobj.untouchable and not Options["Force-Touch"]:
-            print "Skipping: " + suite + " (untouchable)"
+    for s in suites:
+        # Setup a multiprocessing Pool. As many workers as we have CPU cores.
+        if s.untouchable and not Options["Force"]:
+            print "Skipping %s (untouchable)" % s.suite_name
             continue
 
-        origin = suiteobj.origin
-        label = suiteobj.label or suiteobj.origin
-        codename = suiteobj.codename or ""
-        version = ""
-        if suiteobj.version and suiteobj.version != '-':
-            version = suiteobj.version
-        description = suiteobj.description or ""
-
-        architectures = get_suite_architectures(suite, skipall=True, skipsrc=True)
-
-        if suiteobj.notautomatic:
-            notautomatic = "yes"
-        else:
-            notautomatic = ""
-
-        if SuiteBlock.has_key("Components"):
-            components = SuiteBlock.ValueList("Components")
-        else:
-            components = []
-
-        suite_suffix = Cnf.Find("Dinstall::SuiteSuffix")
-        if components and suite_suffix:
-            longsuite = suite + "/" + suite_suffix
-        else:
-            longsuite = suite
-
-        tree = SuiteBlock.get("Tree", "dists/%s" % (longsuite))
-
-        if AptCnf.has_key("tree::%s" % (tree)):
-            pass
-        elif AptCnf.has_key("bindirectory::%s" % (tree)):
-            pass
-        else:
-            aptcnf_filename = os.path.basename(utils.which_apt_conf_file())
-            print "ALERT: suite %s not in %s, nor untouchable!" % (suite, aptcnf_filename)
-            continue
+        print "Processing %s" % s.suite_name
+        Logger.log(['Processing release file for Suite: %s' % (s.suite_name)])
+        pool.apply_async(generate_helper, (s.suite_id, ))
 
-        print Cnf["Dir::Root"] + tree + "/Release"
-        out = open(Cnf["Dir::Root"] + tree + "/Release", "w")
+    # No more work will be added to our pool, close it and then wait for all to finish
+    pool.close()
+    pool.join()
 
-        out.write("Origin: %s\n" % (suiteobj.origin))
-        out.write("Label: %s\n" % (label))
-        out.write("Suite: %s\n" % (suite))
-        if version != "":
-            out.write("Version: %s\n" % (version))
-        if codename != "":
-            out.write("Codename: %s\n" % (codename))
-        out.write("Date: %s\n" % (time.strftime("%a, %d %b %Y %H:%M:%S UTC", time.gmtime(time.time()))))
+    retcode = pool.overall_status()
 
-        if suiteobj.validtime:
-            validtime=float(suiteobj.validtime)
-            out.write("Valid-Until: %s\n" % (time.strftime("%a, %d %b %Y %H:%M:%S UTC", time.gmtime(time.time()+validtime))))
+    if retcode > 0:
+        # TODO: CENTRAL FUNCTION FOR THIS / IMPROVE LOGGING
+        Logger.log(['Release file generation broken: %s' % (','.join([str(x[1]) for x in pool.results]))])
 
-        if notautomatic != "":
-            out.write("NotAutomatic: %s\n" % (notautomatic))
-        out.write("Architectures: %s\n" % (" ".join([a.arch_string for a in architectures])))
-        if components:
-            out.write("Components: %s\n" % (" ".join(components)))
+    Logger.close()
 
-        if description:
-            out.write("Description: %s\n" % (description))
+    sys.exit(retcode)
 
-        files = []
+def generate_helper(suite_id):
+    '''
+    This function is called in a new subprocess.
+    '''
+    session = DBConn().session()
+    suite = Suite.get(suite_id, session)
 
-        if AptCnf.has_key("tree::%s" % (tree)):
-            if AptCnf.has_key("tree::%s::Contents" % (tree)):
-                pass
-            else:
-                for x in os.listdir("%s/%s" % (Cnf["Dir::Root"], tree)):
-                    if x.startswith('Contents-'):
-                        if x.endswith('.diff'):
-                            files.append("%s/Index" % (x))
-                        else:
-                            files.append(x)
-
-            for sec in AptCnf["tree::%s::Sections" % (tree)].split():
-                for arch in AptCnf["tree::%s::Architectures" % (tree)].split():
-                    if arch == "source":
-                        filepath = "%s/%s/Sources" % (sec, arch)
-                        for cfile in compressnames("tree::%s" % (tree), "Sources", filepath):
-                            files.append(cfile)
-                        add_tiffani(files, Cnf["Dir::Root"] + tree, filepath)
-                    else:
-                        disks = "%s/disks-%s" % (sec, arch)
-                        diskspath = Cnf["Dir::Root"]+tree+"/"+disks
-                        if os.path.exists(diskspath):
-                            for dir in os.listdir(diskspath):
-                                if os.path.exists("%s/%s/md5sum.txt" % (diskspath, dir)):
-                                    files.append("%s/%s/md5sum.txt" % (disks, dir))
-
-                        filepath = "%s/binary-%s/Packages" % (sec, arch)
-                        for cfile in compressnames("tree::%s" % (tree), "Packages", filepath):
-                            files.append(cfile)
-                        add_tiffani(files, Cnf["Dir::Root"] + tree, filepath)
-
-                    if arch == "source":
-                        rel = "%s/%s/Release" % (sec, arch)
-                    else:
-                        rel = "%s/binary-%s/Release" % (sec, arch)
-                    relpath = Cnf["Dir::Root"]+tree+"/"+rel
-                    write_release_file(relpath, suite, sec, origin, label, arch, version, suite_suffix, notautomatic)
-                    files.append(rel)
-                gen_i18n_index(files, tree, sec)
-
-            if AptCnf.has_key("tree::%s/main" % (tree)):
-                for dis in ["main", "contrib", "non-free"]:
-                    if not AptCnf.has_key("tree::%s/%s" % (tree, dis)): continue
-                    sec = AptCnf["tree::%s/%s::Sections" % (tree,dis)].split()[0]
-                    if sec != "debian-installer":
-                        print "ALERT: weird non debian-installer section in %s" % (tree)
-
-                    for arch in AptCnf["tree::%s/%s::Architectures" % (tree,dis)].split():
-                        if arch != "source":  # always true
-                            rel = "%s/%s/binary-%s/Release" % (dis, sec, arch)
-                            relpath = Cnf["Dir::Root"]+tree+"/"+rel
-                            write_release_file(relpath, suite, dis, origin, label, arch, version, suite_suffix, notautomatic)
-                            files.append(rel)
-                            for cfile in compressnames("tree::%s/%s" % (tree,dis),
-                                "Packages",
-                                "%s/%s/binary-%s/Packages" % (dis, sec, arch)):
-                                files.append(cfile)
-            elif AptCnf.has_key("tree::%s::FakeDI" % (tree)):
-                usetree = AptCnf["tree::%s::FakeDI" % (tree)]
-                sec = AptCnf["tree::%s/main::Sections" % (usetree)].split()[0]
-                if sec != "debian-installer":
-                    print "ALERT: weird non debian-installer section in %s" % (usetree)
-
-                for arch in AptCnf["tree::%s/main::Architectures" % (usetree)].split():
-                    if arch != "source":  # always true
-                        for cfile in compressnames("tree::%s/main" % (usetree), "Packages", "main/%s/binary-%s/Packages" % (sec, arch)):
-                            files.append(cfile)
-
-        elif AptCnf.has_key("bindirectory::%s" % (tree)):
-            for cfile in compressnames("bindirectory::%s" % (tree), "Packages", AptCnf["bindirectory::%s::Packages" % (tree)]):
-                files.append(cfile.replace(tree+"/","",1))
-            for cfile in compressnames("bindirectory::%s" % (tree), "Sources", AptCnf["bindirectory::%s::Sources" % (tree)]):
-                files.append(cfile.replace(tree+"/","",1))
-        else:
-            print "ALERT: no tree/bindirectory for %s" % (tree)
-
-        out.write("MD5Sum:\n")
-        print_md5_files(tree, files)
-        out.write("SHA1:\n")
-        print_sha1_files(tree, files)
-        out.write("SHA256:\n")
-        print_sha256_files(tree, files)
+    # We allow the process handler to catch and deal with any exceptions
+    rw = ReleaseWriter(suite)
+    rw.generate_release_files()
 
-        out.close()
-        if Cnf.has_key("Dinstall::SigningKeyring"):
-            keyring = "--secret-keyring \"%s\"" % Cnf["Dinstall::SigningKeyring"]
-            if Cnf.has_key("Dinstall::SigningPubKeyring"):
-                keyring += " --keyring \"%s\"" % Cnf["Dinstall::SigningPubKeyring"]
-
-            arguments = "--no-options --batch --no-tty --armour"
-            signkeyids=cnf.signingkeyids.split()
-
-            dest = Cnf["Dir::Root"] + tree + "/Release.gpg"
-            if os.path.exists(dest):
-                os.unlink(dest)
-            inlinedest = Cnf["Dir::Root"] + tree + "/InRelease"
-            if os.path.exists(inlinedest):
-                os.unlink(inlinedest)
-
-            for keyid in signkeyids:
-                if keyid != "":
-                    defkeyid = "--default-key %s" % keyid
-                else:
-                    defkeyid = ""
-                os.system("gpg %s %s %s --detach-sign <%s >>%s" %
-                        (keyring, defkeyid, arguments,
-                        Cnf["Dir::Root"] + tree + "/Release", dest))
-                os.system("gpg %s %s %s --clearsign <%s >>%s" %
-                        (keyring, defkeyid, arguments,
-                        Cnf["Dir::Root"] + tree + "/Release", inlinedest))
+    return (PROC_STATUS_SUCCESS, 'Release file written for %s' % suite.suite_name)
 
 #######################################################################################
 
diff --git a/dak/graph.py b/dak/graph.py
new file mode 100755 (executable)
index 0000000..aa28aa6
--- /dev/null
@@ -0,0 +1,233 @@
+#!/usr/bin/env python
+
+""" Produces a set of graphs of NEW/BYHAND/DEFERRED
+
+@contact: Debian FTPMaster <ftpmaster@debian.org>
+@copyright: 2011 Paul Wise <pabs@debian.org>
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+import os
+import sys
+import colorsys
+
+import rrdtool
+import apt_pkg
+
+from daklib import utils
+from daklib.dak_exceptions import *
+
+Cnf = None
+default_names = ["byhand", "new", "deferred"]
+
+################################################################################
+
+def usage(exit_code=0):
+    print """Usage: dak graph
+Graphs the number of packages in queue directories (usually new and byhand).
+
+  -h, --help                show this help and exit.
+  -r, --rrd=key             Directory where rrd files to be updated are stored
+  -x, --extra-rrd=key       File containing extra options to rrdtool graphing
+  -i, --images=key          Directory where image graphs to be updated are stored
+  -n, --names=key           A comma seperated list of rrd files to be scanned
+
+"""
+    sys.exit(exit_code)
+
+################################################################################
+
+def graph(*args):
+    if args[2] == "deferred":
+        graph_deferred(*args)
+    else:
+        graph_normal(*args)
+
+def deferred_colours():
+    colours = [0]*16
+    for i in range(0,16):
+        colours[i] = colorsys.hsv_to_rgb(i/16.0, 1.0, 0.5+i/32.0)
+        colours[i] = ''.join(['%02X' % (c*255) for c in colours[i]])
+    return colours
+
+colours = deferred_colours()
+
+def graph_deferred(rrd_dir, image_dir, name, extra_args, graph, title, start, year_lines=False):
+    image_file = os.path.join(image_dir, "%s-%s.png" % (name, graph))
+    rrd_file = os.path.join(rrd_dir, "%s.rrd" % name)
+    rrd_args = [image_file, "--start", start]
+    rrd_args += ("""
+--end
+now
+--width
+600
+--height
+150
+--vertical-label
+changes
+--title
+%s changes count for the last %s
+--lower-limit
+0
+-E
+""" % (name.upper(), title) ).strip().split("\n")
+
+    if year_lines:
+        rrd_args += ["--x-grid", "MONTH:1:YEAR:1:YEAR:1:31536000:%Y"]
+
+    for i in range(0,16):
+        rrd_args += ("""
+DEF:d%i=%s:day%i:AVERAGE
+AREA:d%i#%s:%i-day changes count:STACK
+VDEF:ld%i=d%i,LAST
+VDEF:mind%i=d%i,MINIMUM
+VDEF:maxd%i=d%i,MAXIMUM
+VDEF:avgd%i=d%i,AVERAGE
+GPRINT:ld%i:cur\\: %%.0lf
+GPRINT:mind%i:min\\: %%.0lf
+GPRINT:maxd%i:max\\: %%.0lf
+GPRINT:avgd%i:avg\\: %%.0lf\\j
+""" % ((i, rrd_file, i, i, colours[i])+(i,)*13)).strip().split("\n")
+
+    rrd_args += extra_args
+    try:
+        ret = rrdtool.graph(*rrd_args)
+    except rrdtool.error, e:
+        print('warning: graph: rrdtool error, skipping %s-%s.png: %s' % (name, graph, e))
+
+def graph_normal(rrd_dir, image_dir, name, extra_args, graph, title, start, year_lines=False):
+    image_file = os.path.join(image_dir, "%s-%s.png" % (name, graph))
+    rrd_file = os.path.join(rrd_dir, "%s.rrd" % name)
+    rrd_args = [image_file, "--start", start]
+    rrd_args += ("""
+--end
+now
+--width
+600
+--height
+150
+--vertical-label
+packages
+--title
+%s package count for the last %s
+--lower-limit
+0
+-E
+""" % (name.upper(), title) ).strip().split("\n")
+
+    if year_lines:
+        rrd_args += ["--x-grid", "MONTH:1:YEAR:1:YEAR:1:31536000:%Y"]
+
+    rrd_args += ("""
+DEF:ds1=%s:ds1:AVERAGE
+LINE2:ds1#D9382B:changes count
+VDEF:lds1=ds1,LAST
+VDEF:minds1=ds1,MINIMUM
+VDEF:maxds1=ds1,MAXIMUM
+VDEF:avgds1=ds1,AVERAGE
+GPRINT:lds1:cur\\: %%.0lf
+GPRINT:minds1:min\\: %%.0lf
+GPRINT:maxds1:max\\: %%.0lf
+GPRINT:avgds1:avg\\: %%.0lf\\j
+DEF:ds0=%s:ds0:AVERAGE
+VDEF:lds0=ds0,LAST
+VDEF:minds0=ds0,MINIMUM
+VDEF:maxds0=ds0,MAXIMUM
+VDEF:avgds0=ds0,AVERAGE
+LINE2:ds0#3069DA:src pkg count
+GPRINT:lds0:cur\\: %%.0lf
+GPRINT:minds0:min\\: %%.0lf
+GPRINT:maxds0:max\\: %%.0lf
+GPRINT:avgds0:avg\\: %%.0lf\\j
+""" % (rrd_file, rrd_file)).strip().split("\n")
+
+    rrd_args += extra_args
+    try:
+        ret = rrdtool.graph(*rrd_args)
+    except rrdtool.error, e:
+        print('warning: graph: rrdtool error, skipping %s-%s.png: %s' % (name, graph, e))
+
+################################################################################
+
+def main():
+    global Cnf
+
+    Cnf = utils.get_conf()
+    Arguments = [('h',"help","Graph::Options::Help"),
+                 ('x',"extra-rrd","Graph::Options::Extra-Rrd", "HasArg"),
+                 ('r',"rrd","Graph::Options::Rrd", "HasArg"),
+                 ('i',"images","Graph::Options::Images", "HasArg"),
+                 ('n',"names","Graph::Options::Names", "HasArg")]
+    for i in [ "help" ]:
+        if not Cnf.has_key("Graph::Options::%s" % (i)):
+            Cnf["Graph::Options::%s" % (i)] = ""
+
+    apt_pkg.ParseCommandLine(Cnf, Arguments, sys.argv)
+
+    Options = Cnf.SubTree("Graph::Options")
+    if Options["Help"]:
+        usage()
+
+    names = []
+
+    if Cnf.has_key("Graph::Options::Names"):
+        for i in Cnf["Graph::Options::Names"].split(","):
+            names.append(i)
+    elif Cnf.has_key("Graph::Names"):
+        names = Cnf.ValueList("Graph::Names")
+    else:
+        names = default_names
+
+    extra_rrdtool_args = []
+
+    if Cnf.has_key("Graph::Options::Extra-Rrd"):
+        for i in Cnf["Graph::Options::Extra-Rrd"].split(","):
+            f = open(i)
+            extra_rrdtool_args.extend(f.read().strip().split("\n"))
+            f.close()
+    elif Cnf.has_key("Graph::Extra-Rrd"):
+        for i in Cnf.ValueList("Graph::Extra-Rrd"):
+            f = open(i)
+            extra_rrdtool_args.extend(f.read().strip().split("\n"))
+            f.close()
+
+    if Cnf.has_key("Graph::Options::Rrd"):
+        rrd_dir = Cnf["Graph::Options::Rrd"]
+    elif Cnf.has_key("Dir::Rrd"):
+        rrd_dir = Cnf["Dir::Rrd"]
+    else:
+        print >> sys.stderr, "No directory to read RRD files from\n"
+        sys.exit(1)
+
+    if Cnf.has_key("Graph::Options::Images"):
+        image_dir = Cnf["Graph::Options::Images"]
+    else:
+        print >> sys.stderr, "No directory to write graph images to\n"
+        sys.exit(1)
+
+    for name in names:
+        stdargs = [rrd_dir, image_dir, name, extra_rrdtool_args]
+        graph(*(stdargs+['day', 'day', 'now-1d']))
+        graph(*(stdargs+['week', 'week', 'now-1w']))
+        graph(*(stdargs+['month', 'month', 'now-1m']))
+        graph(*(stdargs+['year', 'year', 'now-1y']))
+        graph(*(stdargs+['5years', '5 years', 'now-5y', True]))
+        graph(*(stdargs+['10years', '10 years', 'now-10y', True]))
+
+################################################################################
+
+if __name__ == '__main__':
+    main()
index e26eb7e54d390d46641a506fba310427262267ee..6f366d859548e357da70716169c11d6e10080c52 100755 (executable)
@@ -48,13 +48,30 @@ def get_fingerprint_info(session):
         fins[fingerprint] = (uid, fingerprint_id, keyring)
     return fins
 
+def list_uids(session, pattern):
+    sql_pattern = "%%%s%%" % pattern
+    message = "List UIDs matching pattern %s" % sql_pattern
+    message += "\n" + ("=" * len(message))
+    print message
+    uid_query = session.query(Uid).filter(Uid.uid.ilike(sql_pattern))
+    for uid in uid_query.all():
+       print "\nuid %s" % uid.uid
+       for fp in uid.fingerprint:
+           print "    fingerprint %s" % fp.fingerprint
+           keyring = "unknown"
+           if fp.keyring:
+               keyring = fp.keyring.keyring_name
+           print "        keyring %s" % keyring
+
 ################################################################################
 
 def usage (exit_code=0):
     print """Usage: dak import-keyring [OPTION]... [KEYRING]
   -h, --help                  show this help and exit.
   -L, --import-ldap-users     generate uid entries for keyring from LDAP
-  -U, --generate-users FMT    generate uid entries from keyring as FMT"""
+  -U, --generate-users FMT    generate uid entries from keyring as FMT
+  -l, --list-uids STRING      list all uids matching *STRING*
+  -n, --no-action             don't change database"""
     sys.exit(exit_code)
 
 
@@ -67,9 +84,12 @@ def main():
     Arguments = [('h',"help","Import-Keyring::Options::Help"),
                  ('L',"import-ldap-users","Import-Keyring::Options::Import-Ldap-Users"),
                  ('U',"generate-users","Import-Keyring::Options::Generate-Users", "HasArg"),
+                 ('l',"list-uids","Import-Keyring::Options::List-UIDs", "HasArg"),
+                 ('n',"no-action","Import-Keyring::Options::No-Action"),
                 ]
 
-    for i in [ "help", "report-changes", "generate-users", "import-ldap-users" ]:
+    for i in [ "help", "report-changes", "generate-users",
+           "import-ldap-users", "list-uids", "no-action" ]:
         if not cnf.has_key("Import-Keyring::Options::%s" % (i)):
             cnf["Import-Keyring::Options::%s" % (i)] = ""
 
@@ -82,15 +102,19 @@ def main():
     if Options["Help"]:
         usage()
 
+    ### Initialise
+    session = DBConn().session()
+
+    if Options["List-UIDs"]:
+       list_uids(session, Options["List-UIDs"])
+       sys.exit(0)
+
     if len(keyring_names) != 1:
         usage(1)
 
     ### Keep track of changes made
     changes = []   # (uid, changes strings)
 
-    ### Initialise
-    session = DBConn().session()
-
     ### Cache all the existing fingerprint entries
     db_fin_info = get_fingerprint_info(session)
 
@@ -198,14 +222,9 @@ def main():
                 session.flush()
 
         else:
-            if newuid and olduid != newuid:
-                if olduid != -1:
-                    changes.append((newuiduid, "Linked key: %s" % f))
-                    changes.append((newuiduid, "  (formerly belonging to %s)" % (db_uid_byid[olduid][0])))
-                else:
-                    changes.append((newuiduid, "Linked key: %s" % f))
-                    changes.append((newuiduid, "  (formerly unowned)"))
-
+            if newuid and olduid != newuid and olduid == -1:
+                changes.append((newuiduid, "Linked key: %s" % f))
+                changes.append((newuiduid, "  (formerly unowned)"))
                 session.execute("UPDATE fingerprint SET uid = :uid WHERE id = :fpr",
                                 {'uid': newuid, 'fpr': oldfid})
 
@@ -250,11 +269,15 @@ def main():
                         session.flush()
 
                 else:
-                    print "Key %s exists in both %s and %s keyrings. Not demoting." % (oldkeyring.keyring_name,
+                    print "Key %s exists in both %s and %s keyrings. Not demoting." % (f,
+                                                                                       oldkeyring.keyring_name,
                                                                                        keyring.keyring_name)
 
     # All done!
-    session.commit()
+    if Options["No-Action"]:
+       session.rollback()
+    else:
+       session.commit()
 
     # Print a summary
     changesd = {}
index 85ad4905214114c6a4d89a0fe40437c575d2a40d..66e8d42751eba2714779610939a05f7a4704800d 100755 (executable)
--- a/dak/ls.py
+++ b/dak/ls.py
@@ -150,7 +150,10 @@ SELECT s.source, s.version, 'source', su.suite_name, c.name, m.name
    AND s.file = f.id AND f.location = l.id AND l.component = c.id
    AND s.maintainer = m.id %s
 """ % (comparison_operator, con_suites), {'package': package})
-            ql.extend(q.fetchall())
+            if not Options["Architecture"] or con_architectures:
+                ql.extend(q.fetchall())
+            else:
+                ql = q.fetchall()
         d = {}
         highver = {}
         for i in ql:
index 8fa172f63299b8ecdb6d7bfdb26e228e5531ca12..ac5581d02be8ae43a3de98d4145a1ef1a49cb7f3 100755 (executable)
@@ -52,13 +52,13 @@ Generate changelog entry between two suites
 import os
 import sys
 import apt_pkg
-from commands import getstatusoutput
 from glob import glob
-from re import split
 from shutil import rmtree
 from daklib.dbconn import *
 from daklib import utils
 from daklib.config import Config
+from daklib.contents import UnpackedSource
+from daklib.regexes import re_no_epoch
 
 ################################################################################
 
@@ -160,14 +160,18 @@ def display_changes(uploads, index):
         print upload[index]
         prev_upload = upload[0]
 
-def export_files(session, pool, clpool, temppath):
+def export_files(session, pool, clpool):
     """
     Export interesting files from source packages.
     """
 
     sources = {}
-    query = """SELECT s.source, su.suite_name AS suite, s.version, f.filename
+    unpack = {}
+    files = ('changelog', 'copyright', 'NEWS.Debian', 'README.Debian')
+    stats = {'unpack': 0, 'created': 0, 'removed': 0, 'errors': 0, 'files': 0}
+    query = """SELECT DISTINCT s.source, su.suite_name AS suite, s.version, f.filename
                FROM source s
+               JOIN newest_source n ON n.source = s.source AND n.version = s.version
                JOIN src_associations sa ON sa.source = s.id
                JOIN suite su ON su.id = sa.suite
                JOIN files f ON f.id = s.file
@@ -176,65 +180,75 @@ def export_files(session, pool, clpool, temppath):
     for p in session.execute(query):
         if not sources.has_key(p[0]):
             sources[p[0]] = {}
-        sources[p[0]][p[1]] = (p[2], p[3])
-
-    tempdir = utils.temp_dirname(parent=temppath)
-    os.rmdir(tempdir)
+        sources[p[0]][p[1]] = (re_no_epoch.sub('', p[2]), p[3])
 
     for p in sources.keys():
         for s in sources[p].keys():
-            files = (('changelog', True),
-                     ('copyright', True),
-                     ('NEWS.Debian', False),
-                     ('README.Debian', False))
-            path = os.path.join(clpool, sources[p][s][1].split('/')[0], \
-                                split('(^lib\S|^\S)', p)[1], p)
+            path = os.path.join(clpool, '/'.join(sources[p][s][1].split('/')[:-1]))
             if not os.path.exists(path):
                 os.makedirs(path)
+            if not os.path.exists(os.path.join(path, \
+                   '%s_%s.changelog' % (p, sources[p][s][0]))):
+                if not unpack.has_key(os.path.join(pool, sources[p][s][1])):
+                    unpack[os.path.join(pool, sources[p][s][1])] = (path, set())
+                unpack[os.path.join(pool, sources[p][s][1])][1].add(s)
+            else:
+                for file in glob('%s/%s_%s*' % (path, p, sources[p][s][0])):
+                    link = '%s%s' % (s, file.split('%s_%s' \
+                                      % (p, sources[p][s][0]))[1])
+                    try:
+                        os.unlink(os.path.join(path, link))
+                    except OSError:
+                        pass
+                    os.link(os.path.join(path, file), os.path.join(path, link))
+
+    for p in unpack.keys():
+        package = os.path.splitext(os.path.basename(p))[0].split('_')
+        try:
+            unpacked = UnpackedSource(p)
+            tempdir = unpacked.get_root_directory()
+            stats['unpack'] += 1
             for file in files:
-                for f in glob(os.path.join(path, s + '.*')):
-                    os.unlink(f)
-            try:
-                for file in files:
-                    t = os.path.join(path, '%s_%s.*%s' % (p, sources[p][s][0], file[0]))
-                    if file[1] and not glob(t):
-                        raise OSError
-                    else:
-                        for f in glob(t):
-                            os.link(f, os.path.join(path, '%s.%s' % \
-                                    (s, os.path.basename(f).split('%s_%s.' \
-                                    % (p, sources[p][s][0]))[1])))
-            except OSError:
-                cmd = 'dpkg-source --no-check --no-copy -x %s %s' \
-                      % (os.path.join(pool, sources[p][s][1]), tempdir)
-                (result, output) = getstatusoutput(cmd)
-                if not result:
-                    for file in files:
+                for f in glob(os.path.join(tempdir, 'debian', '*%s' % file)):
+                    for s in unpack[p][1]:
+                        suite = os.path.join(unpack[p][0], '%s.%s' \
+                                % (s, os.path.basename(f)))
+                        version = os.path.join(unpack[p][0], '%s_%s.%s' % \
+                                  (package[0], package[1], os.path.basename(f)))
+                        if not os.path.exists(version):
+                            os.link(f, version)
+                            stats['created'] += 1
                         try:
-                            for f in glob(os.path.join(tempdir, 'debian', '*' + file[0])):
-                                for dest in os.path.join(path, '%s_%s.%s' \
-                                            % (p, sources[p][s][0], os.path.basename(f))), \
-                                            os.path.join(path, '%s.%s' % (s, os.path.basename(f))):
-                                    if not os.path.exists(dest):
-                                        os.link(f, dest)
-                        except:
-                            print 'make-changelog: unable to extract %s for %s_%s' \
-                                   % (os.path.basename(f), p, sources[p][s][0])
-                else:
-                    print 'make-changelog: unable to unpack %s_%s' % (p, sources[p][s][0])
-                    continue
-
-                rmtree(tempdir)
+                            os.unlink(suite)
+                        except OSError:
+                            pass
+                        os.link(version, suite)
+                        stats['created'] += 1
+            unpacked.cleanup()
+        except Exception, e:
+            print 'make-changelog: unable to unpack %s\n%s' % (p, e)
+            stats['errors'] += 1
 
     for root, dirs, files in os.walk(clpool):
         if len(files):
             if root.split('/')[-1] not in sources.keys():
                 if os.path.exists(root):
                     rmtree(root)
+                    stats['removed'] += 1
             for file in files:
                 if os.path.exists(os.path.join(root, file)):
                     if os.stat(os.path.join(root, file)).st_nlink ==  1:
                         os.unlink(os.path.join(root, file))
+                        stats['removed'] += 1
+
+    for root, dirs, files in os.walk(clpool):
+        stats['files'] += len(files)
+    print 'make-changelog: file exporting finished'
+    print '  * New packages unpacked: %d' % stats['unpack']
+    print '  * New files created: %d' % stats['created']
+    print '  * New files removed: %d' % stats['removed']
+    print '  * Unpack errors: %d' % stats['errors']
+    print '  * Files available into changelog pool: %d' % stats['files']
 
 def main():
     Cnf = utils.get_conf()
@@ -268,7 +282,7 @@ def main():
     if export:
         if cnf.exportpath:
             exportpath = os.path.join(Cnf['Dir::Export'], cnf.exportpath)
-            export_files(session, Cnf['Dir::Pool'], exportpath, Cnf['Dir::TempPath'])
+            export_files(session, Cnf['Dir::Pool'], exportpath)
         else:
             utils.fubar('No changelog export path defined')
     elif binnmu:
index 4a113b0c6a0793304ea2e6b8d87e146f53a1fcb1..8e93f8af920e0a03d8810e29f6b490a535f35ec3 100755 (executable)
@@ -4,6 +4,7 @@
 Generate Maintainers file used by e.g. the Debian Bug Tracking System
 @contact: Debian FTP Master <ftpmaster@debian.org>
 @copyright: 2000, 2001, 2002, 2003, 2004, 2006  James Troup <james@nocrew.org>
+@copyright: 2011 Torsten Werner <twerner@debian.org>
 @license: GNU General Public License version 2 or later
 
 """
@@ -30,94 +31,45 @@ Generate Maintainers file used by e.g. the Debian Bug Tracking System
 
 ################################################################################
 
-import sys
-import apt_pkg
-
+from daklib import daklog
+from daklib import utils
 from daklib.config import Config
 from daklib.dbconn import *
-from daklib import utils
-from daklib import textutils
 from daklib.regexes import re_comments
 
-################################################################################
-
-maintainer_from_source_cache = {}   #: caches the maintainer name <email> per source_id
-packages = {}                       #: packages data to write out
-fixed_maintainer_cache = {}         #: caches fixed ( L{daklib.textutils.fix_maintainer} ) maintainer data
+import apt_pkg
+import sys
 
 ################################################################################
 
 def usage (exit_code=0):
     print """Usage: dak make-maintainers [OPTION] EXTRA_FILE[...]
-Generate an index of packages <=> Maintainers.
+Generate an index of packages <=> Maintainers / Uploaders.
 
-  -u, --uploaders            create uploaders index
   -h, --help                 show this help and exit
 """
     sys.exit(exit_code)
 
 ################################################################################
 
-def fix_maintainer (maintainer):
-    """
-    Fixup maintainer entry, cache the result.
-
-    @type maintainer: string
-    @param maintainer: A maintainer entry as passed to L{daklib.textutils.fix_maintainer}
+def format(package, person):
+    '''Return a string nicely formatted for writing to the output file.'''
+    return '%-20s %s\n' % (package, person)
 
-    @rtype: tuple
-    @returns: fixed maintainer tuple
-    """
-    global fixed_maintainer_cache
-
-    if not fixed_maintainer_cache.has_key(maintainer):
-        fixed_maintainer_cache[maintainer] = textutils.fix_maintainer(maintainer)[0]
-
-    return fixed_maintainer_cache[maintainer]
-
-def get_maintainer(maintainer, session):
-    """
-    Retrieves maintainer name from database, passes it through fix_maintainer and
-    passes on whatever that returns.
-
-    @type maintainer: int
-    @param maintainer: maintainer_id
-    """
-    q = session.execute("SELECT name FROM maintainer WHERE id = :id", {'id': maintainer}).fetchall()
-    return fix_maintainer(q[0][0])
-
-def get_maintainer_from_source(source_id, session):
-    """
-    Returns maintainer name for given source_id.
-
-    @type source_id: int
-    @param source_id: source package id
-
-    @rtype: string
-    @return: maintainer name/email
-    """
-    global maintainer_from_source_cache
-
-    if not maintainer_from_source_cache.has_key(source_id):
-        q = session.execute("""SELECT m.name FROM maintainer m, source s
-                                WHERE s.id = :sourceid AND s.maintainer = m.id""",
-                            {'sourceid': source_id})
-        maintainer = q.fetchall()[0][0]
-        maintainer_from_source_cache[source_id] = fix_maintainer(maintainer)
+################################################################################
 
-    return maintainer_from_source_cache[source_id]
+def uploader_list(source):
+    '''Return a sorted list of uploader names for source package.'''
+    return sorted([uploader.name for uploader in source.uploaders])
 
 ################################################################################
 
 def main():
     cnf = Config()
 
-    Arguments = [('h',"help","Make-Maintainers::Options::Help"),
-                 ('u',"uploaders","Make-Maintainers::Options::Uploaders")]
+    Arguments = [('h',"help","Make-Maintainers::Options::Help")]
     if not cnf.has_key("Make-Maintainers::Options::Help"):
         cnf["Make-Maintainers::Options::Help"] = ""
-    if not cnf.has_key("Make-Maintainers::Options::Uploaders"):
-        cnf["Make-Maintainers::Options::Uploaders"] = ""
 
     extra_files = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
     Options = cnf.SubTree("Make-Maintainers::Options")
@@ -125,122 +77,55 @@ def main():
     if Options["Help"]:
         usage()
 
-    gen_uploaders = False
-    if Options["Uploaders"]:
-        gen_uploaders = True
-
+    Logger = daklog.Logger('make-maintainers')
     session = DBConn().session()
 
-    for suite in session.query(Suite).all():
-        suite_name = suite.suite_name
-        suite_priority = suite.priority
-
-        # Source packages
-        if gen_uploaders:
-            q = session.execute("""SELECT s.source, s.version, m.name
-                                     FROM src_associations sa, source s, suite su, maintainer m, src_uploaders srcu
-                                    WHERE su.suite_name = :suite_name
-                                      AND sa.suite = su.id AND sa.source = s.id
-                                      AND m.id = srcu.maintainer
-                                      AND srcu.source = s.id""",
-                                    {'suite_name': suite_name})
-        else:
-            q = session.execute("""SELECT s.source, s.version, m.name
-                                     FROM src_associations sa, source s, suite su, maintainer m
-                                    WHERE su.suite_name = :suite_name
-                                      AND sa.suite = su.id AND sa.source = s.id
-                                      AND m.id = s.maintainer""",
-                                    {'suite_name': suite_name})
-
-        for source in q.fetchall():
-            package = source[0]
-            version = source[1]
-            maintainer = fix_maintainer(source[2])
-            if gen_uploaders:
-                key = (package, maintainer)
-            else:
-                key = package
-
-            if packages.has_key(key):
-                if packages[key]["priority"] <= suite_priority:
-                    if apt_pkg.VersionCompare(packages[key]["version"], version) < 0:
-                        packages[key] = { "maintainer": maintainer, "priority": suite_priority, "version": version }
-            else:
-                packages[key] = { "maintainer": maintainer, "priority": suite_priority, "version": version }
-
-        # Binary packages
-        if gen_uploaders:
-            q = session.execute("""SELECT b.package, b.source, srcu.maintainer, b.version
-                                     FROM bin_associations ba, binaries b, suite s, src_uploaders srcu
-                                    WHERE s.suite_name = :suite_name
-                                      AND ba.suite = s.id AND ba.bin = b.id
-                                      AND b.source = srcu.source""",
-                                   {'suite_name': suite_name})
-        else:
-            q = session.execute("""SELECT b.package, b.source, b.maintainer, b.version
-                                     FROM bin_associations ba, binaries b, suite s
-                                    WHERE s.suite_name = :suite_name
-                                      AND ba.suite = s.id AND ba.bin = b.id""",
-                                   {'suite_name': suite_name})
-
-
-        for binary in q.fetchall():
-            package = binary[0]
-            source_id = binary[1]
-            version = binary[3]
-            # Use the source maintainer first; falling back on the binary maintainer as a last resort only
-            if source_id and not gen_uploaders:
-                maintainer = get_maintainer_from_source(source_id, session)
-            else:
-                maintainer = get_maintainer(binary[2], session)
-            if gen_uploaders:
-                key = (package, maintainer)
-            else:
-                key = package
-
-            if packages.has_key(key):
-                if packages[key]["priority"] <= suite_priority:
-                    if apt_pkg.VersionCompare(packages[key]["version"], version) < 0:
-                        packages[key] = { "maintainer": maintainer, "priority": suite_priority, "version": version }
-            else:
-                packages[key] = { "maintainer": maintainer, "priority": suite_priority, "version": version }
-
-    # Process any additional Maintainer files (e.g. from pseudo packages)
+    # dictionary packages to maintainer names
+    maintainers = dict()
+    # dictionary packages to list of uploader names
+    uploaders = dict()
+
+    source_query = session.query(DBSource).from_statement('''
+        select distinct on (source) * from source
+            order by source, version desc''')
+
+    binary_query = session.query(DBBinary).from_statement('''
+        select distinct on (package) * from binaries
+            order by package, version desc''')
+
+    Logger.log(['sources'])
+    for source in source_query:
+        maintainers[source.source] = source.maintainer.name
+        uploaders[source.source] = uploader_list(source)
+
+    Logger.log(['binaries'])
+    for binary in binary_query:
+        if binary.package not in maintainers:
+            maintainers[binary.package] = binary.maintainer.name
+            uploaders[binary.package] = uploader_list(binary.source)
+
+    Logger.log(['files'])
+    # Process any additional Maintainer files (e.g. from pseudo
+    # packages)
     for filename in extra_files:
         extrafile = utils.open_file(filename)
         for line in extrafile.readlines():
             line = re_comments.sub('', line).strip()
             if line == "":
                 continue
-            split = line.split()
-            lhs = split[0]
-            maintainer = fix_maintainer(" ".join(split[1:]))
-            if lhs.find('~') != -1:
-                (package, version) = lhs.split('~', 1)
-            else:
-                package = lhs
-                version = '*'
-            if not gen_uploaders:
-                key = package
-            else:
-                key = (package, maintainer)
-            # A version of '*' overwhelms all real version numbers
-            if not packages.has_key(key) or version == '*' \
-               or apt_pkg.VersionCompare(packages[key]["version"], version) < 0:
-                packages[key] = { "maintainer": maintainer, "version": version }
-        extrafile.close()
-
-    package_keys = packages.keys()
-    package_keys.sort()
-    if gen_uploaders:
-        for (package, maintainer) in package_keys:
-            key = (package, maintainer)
-            lhs = "~".join([package, packages[key]["version"]])
-            print "%-30s %s" % (lhs, maintainer)
-    else:
-        for package in package_keys:
-            lhs = "~".join([package, packages[package]["version"]])
-            print "%-30s %s" % (lhs, packages[package]["maintainer"])
+            (package, maintainer) = line.split(None, 1)
+            maintainers[package] = maintainer
+            uploaders[package] = [maintainer]
+
+    maintainer_file = open('Maintainers', 'w')
+    uploader_file = open('Uploaders', 'w')
+    for package in sorted(uploaders):
+        maintainer_file.write(format(package, maintainers[package]))
+        for uploader in uploaders[package]:
+            uploader_file.write(format(package, uploader))
+    uploader_file.close()
+    maintainer_file.close()
+    Logger.close()
 
 ################################################################################
 
index e9486adfcdbf87ea3313f95cecb39f096a577067..a292b4ae752afb73bd9e24f823588db1966c987e 100755 (executable)
@@ -73,7 +73,7 @@ def main ():
     if Options["Help"]:
         usage()
 
-    Logger = daklog.Logger(cnf, 'manage-build-queues', Options['No-Action'])
+    Logger = daklog.Logger('manage-build-queues', Options['No-Action'])
 
     starttime = datetime.now()
 
diff --git a/dak/metadata.py b/dak/metadata.py
new file mode 100755 (executable)
index 0000000..1fe3211
--- /dev/null
@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+"""
+Import data for Package/Sources files from .deb and .dsc files
+@copyright: 2011 Torsten Werner <twerner@debian.org>
+@copyright: 2011 Mark Hymers <mhy@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+################################################################################
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+# < mvo> that screams for consolidation in libapt at least (that then in turn can
+#        use libdpkg ... ) - I guess the "d" means delayed ;)
+
+# (whilst discussing adding xz support to dak, and therefore python-apt, and
+#        therefore libapt-pkg)
+
+################################################################################
+
+import sys
+import apt_pkg
+
+from daklib.config import Config
+from daklib.dbconn import *
+from daklib.metadata import MetadataScanner
+from daklib import daklog
+from daklib import utils
+
+################################################################################
+
+def usage (exit_code=0):
+    print """Usage: dak metadata [options] subcommand
+
+SUBCOMMANDS
+    scan-source
+        scan the dsc files in the existing pool and load metadata into the database
+
+    scan-binary
+        scan the deb files in the existing pool and load metadata into the database
+
+OPTIONS
+     -h, --help
+        show this help and exit
+
+OPTIONS for scan
+     -l, --limit=NUMBER
+        maximum number of items to scan
+"""
+    sys.exit(exit_code)
+
+################################################################################
+
+def scan_all(cnf, mode, limit):
+    Logger = daklog.Logger('metadata scan (%s)' % mode)
+    result = MetadataScanner.scan_all(mode, limit)
+    processed = '%(processed)d %(type)s processed' % result
+    remaining = '%(remaining)d %(type)s remaining' % result
+    Logger.log([processed, remaining])
+    Logger.close()
+
+################################################################################
+
+def main():
+    cnf = Config()
+    cnf['Metadata::Options::Help'] = ''
+    cnf['Metadata::Options::Suite'] = ''
+    cnf['Metadata::Options::Limit'] = ''
+    cnf['Metadata::Options::Force'] = ''
+    arguments = [('h', "help",  'Metadata::Options::Help'),
+                 ('s', "suite", 'Metadata::Options::Suite', "HasArg"),
+                 ('l', "limit", 'Metadata::Options::Limit', "HasArg"),
+                 ('f', "force", 'Metadata::Options::Force'),
+                ]
+    args = apt_pkg.ParseCommandLine(cnf.Cnf, arguments, sys.argv)
+    options = cnf.SubTree('Metadata::Options')
+
+    if (len(args) != 1) or options['Help']:
+        usage()
+
+    limit = None
+    if len(options['Limit']) > 0:
+        limit = int(options['Limit'])
+
+    if args[0] == 'scan-source':
+        scan_all(cnf, 'source', limit)
+        return
+    elif args[0] == 'scan-binary':
+        scan_all(cnf, 'binary', limit)
+        return
+
+    suite_names = utils.split_args(options['Suite'])
+
+    force = bool(options['Force'])
+
+    if args[0] == 'generate':
+        raise NotImplementError
+
+    usage()
+
+
+if __name__ == '__main__':
+    main()
index 23b765f6fb680498fd75c73110ae8ddc37eebdb7..2dd2820f2b8fee4d715fec1e703eb9d1f0ea9600 100755 (executable)
 #!/usr/bin/env python
 
-""" Wrapper for Debian Security team """
-# Copyright (C) 2006  Anthony Towns <ajt@debian.org>
+"""
+Do whatever is needed to get a security upload released
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2010 Joerg Jaspert <joerg@debian.org>
+@license: GNU General Public License version 2 or later
+"""
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
 
 ################################################################################
 
-import apt_pkg, os, sys, pwd, time, commands
+import os
+import sys
+import time
+import apt_pkg
+import commands
 
 from daklib import queue
 from daklib import daklog
 from daklib import utils
-from daklib.dbconn import DBConn, get_build_queue, get_suite_architectures
+from daklib.dbconn import *
 from daklib.regexes import re_taint_free
+from daklib.config import Config
 
-Cnf = None
 Options = None
-Upload = None
 Logger = None
-
-advisory = None
+Queue = None
 changes = []
-srcverarches = {}
-
-def init():
-    global Cnf, Upload, Options, Logger
-
-    Cnf = utils.get_conf()
-    Cnf["Dinstall::Options::No-Mail"] = "y"
-    Arguments = [('h', "help", "Security-Install::Options::Help"),
-                 ('a', "automatic", "Security-Install::Options::Automatic"),
-                 ('n', "no-action", "Security-Install::Options::No-Action"),
-                 ('s', "sudo", "Security-Install::Options::Sudo"),
-                 (' ', "no-upload", "Security-Install::Options::No-Upload"),
-                 ('u', "fg-upload", "Security-Install::Options::Foreground-Upload"),
-                 (' ', "drop-advisory", "Security-Install::Options::Drop-Advisory"),
-                 ('A', "approve", "Security-Install::Options::Approve"),
-                 ('R', "reject", "Security-Install::Options::Reject"),
-                 ('D', "disembargo", "Security-Install::Options::Disembargo") ]
-
-    for i in Arguments:
-        Cnf[i[2]] = ""
-
-    arguments = apt_pkg.ParseCommandLine(Cnf, Arguments, sys.argv)
-
-    Options = Cnf.SubTree("Security-Install::Options")
-
-    username = utils.getusername()
-    if username != "dak":
-        print "Non-dak user: %s" % username
-        Options["Sudo"] = "y"
-
-    if Options["Help"]:
-        print "help yourself"
-        sys.exit(0)
-
-    if len(arguments) == 0:
-        utils.fubar("Process what?")
-
-    Upload = queue.Upload(Cnf)
-    if Options["No-Action"]:
-        Options["Sudo"] = ""
-    if not Options["Sudo"] and not Options["No-Action"]:
-        Logger = Upload.Logger = daklog.Logger(Cnf, "new-security-install")
-
-    return arguments
-
-def quit():
-    if Logger:
-        Logger.close()
-    sys.exit(0)
 
-def load_args(arguments):
-    global advisory, changes
+def usage():
+    print """Usage: dak security-install [OPTIONS] changesfiles
+Do whatever there is to do for a security release
 
-    adv_ids = {}
-    if not arguments[0].endswith(".changes"):
-        adv_ids [arguments[0]] = 1
-        arguments = arguments[1:]
+    -h, --help                 show this help and exit
+    -n, --no-action            don't commit changes
+    -s, --sudo                 dont bother, used internally
 
-    null_adv_changes = []
+"""
+    sys.exit()
 
-    changesfiles = {}
-    for a in arguments:
-        if "/" in a:
-            utils.fubar("can only deal with files in the current directory")
-        if not a.endswith(".changes"):
-            utils.fubar("not a .changes file: %s" % (a))
-        Upload.init_vars()
-        Upload.pkg.changes_file = a
-        Upload.update_vars()
-        if "adv id" in Upload.pkg.changes:
-            changesfiles[a] = 1
-            adv_ids[Upload.pkg.changes["adv id"]] = 1
-        else:
-            null_adv_changes.append(a)
-
-    adv_ids = adv_ids.keys()
-    if len(adv_ids) > 1:
-        utils.fubar("multiple advisories selected: %s" % (", ".join(adv_ids)))
-    if adv_ids == []:
-        advisory = None
-    else:
-        advisory = adv_ids[0]
-
-    changes = changesfiles.keys()
-    return null_adv_changes
-
-def load_adv_changes():
-    global srcverarches, changes
-
-    for c in os.listdir("."):
-        if not c.endswith(".changes"): continue
-        Upload.init_vars()
-        Upload.pkg.changes_file = c
-        Upload.update_vars()
-        if "adv id" not in Upload.pkg.changes:
-            continue
-        if Upload.pkg.changes["adv id"] != advisory:
-            continue
-
-        if c not in changes: changes.append(c)
-        srcver = "%s %s" % (Upload.pkg.changes["source"],
-                            Upload.pkg.changes["version"])
-        srcverarches.setdefault(srcver, {})
-        for arch in Upload.pkg.changes["architecture"].keys():
-            srcverarches[srcver][arch] = 1
-
-def advisory_info():
-    if advisory != None:
-        print "Advisory: %s" % (advisory)
-    print "Changes:"
-    for c in changes:
-        print " %s" % (c)
-
-    print "Packages:"
-    svs = srcverarches.keys()
-    svs.sort()
-    for sv in svs:
-        as_ = srcverarches[sv].keys()
-        as_.sort()
-        print " %s (%s)" % (sv, ", ".join(as_))
-
-def prompt(opts, default):
-    p = ""
-    v = {}
-    for o in opts:
-        v[o[0].upper()] = o
-        if o[0] == default:
-            p += ", [%s]%s" % (o[0], o[1:])
-        else:
-            p += ", " + o
-    p = p[2:] + "? "
-    a = None
-
-    if Options["Automatic"]:
-        a = default
-
-    while a not in v:
-        a = utils.our_raw_input(p) + default
-        a = a[:1].upper()
-
-    return v[a]
-
-def add_changes(extras):
-    for c in extras:
-        changes.append(c)
-        Upload.init_vars()
-        Upload.pkg.changes_file = c
-        Upload.update_vars()
-        srcver = "%s %s" % (Upload.pkg.changes["source"], Upload.pkg.changes["version"])
-        srcverarches.setdefault(srcver, {})
-        for arch in Upload.pkg.changes["architecture"].keys():
-            srcverarches[srcver][arch] = 1
-        Upload.pkg.changes["adv id"] = advisory
-        Upload.dump_vars(os.getcwd())
-
-def yes_no(prompt):
-    if Options["Automatic"]: return True
-    while 1:
-        answer = utils.our_raw_input(prompt + " ").lower()
-        if answer in "yn":
-            return answer == "y"
-        print "Invalid answer; please try again."
-
-def do_upload():
-    if Options["No-Upload"]:
-        print "Not uploading as requested"
-    elif Options["Foreground-Upload"]:
-        actually_upload(changes)
-    else:
-        child = os.fork()
-        if child == 0:
-            actually_upload(changes)
-            os._exit(0)
-        print "Uploading in the background"
-
-def actually_upload(changes_files):
-    file_list = ""
-    suites = {}
-    component_mapping = {}
-    for component in Cnf.SubTree("Security-Install::ComponentMappings").List():
-        component_mapping[component] = Cnf["Security-Install::ComponentMappings::%s" % (component)]
-    uploads = {}; # uploads[uri] = file_list
-    changesfiles = {}; # changesfiles[uri] = file_list
-    package_list = {} # package_list[source_name][version]
-    changes_files.sort(utils.changes_compare)
-    for changes_file in changes_files:
-        changes_file = utils.validate_changes_file_arg(changes_file)
-        # Reset variables
-        components = {}
-        upload_uris = {}
-        file_list = []
-        Upload.init_vars()
-        # Parse the .dak file for the .changes file
-        Upload.pkg.changes_file = changes_file
-        Upload.update_vars()
-        files = Upload.pkg.files
-        changes = Upload.pkg.changes
-        dsc = Upload.pkg.dsc
-        # Build the file list for this .changes file
-        for file in files.keys():
-            poolname = os.path.join(Cnf["Dir::Root"], Cnf["Dir::PoolRoot"],
-                                    utils.poolify(changes["source"], files[file]["component"]),
-                                    file)
-            file_list.append(poolname)
-            orig_component = files[file].get("original component", files[file]["component"])
-            components[orig_component] = ""
-        # Determine the upload uri for this .changes file
-        for component in components.keys():
-            upload_uri = component_mapping.get(component)
-            if upload_uri:
-                upload_uris[upload_uri] = ""
-        num_upload_uris = len(upload_uris.keys())
-        if num_upload_uris == 0:
-            utils.fubar("%s: No valid upload URI found from components (%s)."
-                        % (changes_file, ", ".join(components.keys())))
-        elif num_upload_uris > 1:
-            utils.fubar("%s: more than one upload URI (%s) from components (%s)."
-                        % (changes_file, ", ".join(upload_uris.keys()),
-                           ", ".join(components.keys())))
-        upload_uri = upload_uris.keys()[0]
-        # Update the file list for the upload uri
-        if not uploads.has_key(upload_uri):
-            uploads[upload_uri] = []
-        uploads[upload_uri].extend(file_list)
-        # Update the changes list for the upload uri
-        if not changesfiles.has_key(upload_uri):
-            changesfiles[upload_uri] = []
-        changesfiles[upload_uri].append(changes_file)
-        # Remember the suites and source name/version
-        for suite in changes["distribution"].keys():
-            suites[suite] = ""
-        # Remember the source name and version
-        if changes["architecture"].has_key("source") and \
-           changes["distribution"].has_key("testing"):
-            if not package_list.has_key(dsc["source"]):
-                package_list[dsc["source"]] = {}
-            package_list[dsc["source"]][dsc["version"]] = ""
-
-    for uri in uploads.keys():
-        uploads[uri].extend(changesfiles[uri])
-        (host, path) = uri.split(":")
-        #        file_list = " ".join(uploads[uri])
-        print "Moving files to UploadQueue"
-        for filename in uploads[uri]:
-            utils.copy(filename, Cnf["Dir::Upload"])
-            # .changes files have already been moved to queue/done by p-a
-            if not filename.endswith('.changes'):
-                remove_from_buildd(suites, filename)
-        #spawn("lftp -c 'open %s; cd %s; put %s'" % (host, path, file_list))
-
-    if not Options["No-Action"]:
-        filename = "%s/testing-processed" % (Cnf["Dir::Log"])
-        file = utils.open_file(filename, 'a')
-        for source in package_list.keys():
-            for version in package_list[source].keys():
-                file.write(" ".join([source, version])+'\n')
-        file.close()
-
-def remove_from_buildd(suites, filename):
-    """Check the buildd dir for each suite and remove the file if needed"""
-    builddbase = Cnf["Dir::QueueBuild"]
-    filebase = os.path.basename(filename)
-    for s in suites:
-        try:
-            os.unlink(os.path.join(builddbase, s, filebase))
-        except OSError, e:
-            pass
-            # About no value printing this warning - it only confuses the security team,
-            # yet makes no difference otherwise.
-            #utils.warn("Problem removing %s from buildd queue %s [%s]" % (filebase, s, str(e)))
-
-
-def generate_advisory(template):
-    global changes, advisory
-
-    adv_packages = []
-    updated_pkgs = {};  # updated_pkgs[distro][arch][file] = {path,md5,size}
-
-    for arg in changes:
-        arg = utils.validate_changes_file_arg(arg)
-        Upload.pkg.changes_file = arg
-        Upload.init_vars()
-        Upload.update_vars()
-
-        src = Upload.pkg.changes["source"]
-        src_ver = "%s (%s)" % (src, Upload.pkg.changes["version"])
-        if src_ver not in adv_packages:
-            adv_packages.append(src_ver)
-
-        suites = Upload.pkg.changes["distribution"].keys()
-        for suite in suites:
-            if not updated_pkgs.has_key(suite):
-                updated_pkgs[suite] = {}
-
-        files = Upload.pkg.files
-        for file in files.keys():
-            arch = files[file]["architecture"]
-            md5 = files[file]["md5sum"]
-            size = files[file]["size"]
-            poolname = Cnf["Dir::PoolRoot"] + \
-                utils.poolify(src, files[file]["component"])
-            if arch == "source" and file.endswith(".dsc"):
-                dscpoolname = poolname
-            for suite in suites:
-                if not updated_pkgs[suite].has_key(arch):
-                    updated_pkgs[suite][arch] = {}
-                updated_pkgs[suite][arch][file] = {
-                    "md5": md5, "size": size, "poolname": poolname }
-
-        dsc_files = Upload.pkg.dsc_files
-        for file in dsc_files.keys():
-            arch = "source"
-            if not dsc_files[file].has_key("files id"):
-                continue
-
-            # otherwise, it's already in the pool and needs to be
-            # listed specially
-            md5 = dsc_files[file]["md5sum"]
-            size = dsc_files[file]["size"]
-            for suite in suites:
-                if not updated_pkgs[suite].has_key(arch):
-                    updated_pkgs[suite][arch] = {}
-                updated_pkgs[suite][arch][file] = {
-                    "md5": md5, "size": size, "poolname": dscpoolname }
-
-    if os.environ.has_key("SUDO_UID"):
-        whoami = long(os.environ["SUDO_UID"])
-    else:
-        whoami = os.getuid()
-    whoamifull = pwd.getpwuid(whoami)
-    username = whoamifull[4].split(",")[0]
-
-    Subst = {
-        "__ADVISORY__": advisory,
-        "__WHOAMI__": username,
-        "__DATE__": time.strftime("%B %d, %Y", time.gmtime(time.time())),
-        "__PACKAGE__": ", ".join(adv_packages),
-        "__DAK_ADDRESS__": Cnf["Dinstall::MyEmailAddress"]
-        }
-
-    if Cnf.has_key("Dinstall::Bcc"):
-        Subst["__BCC__"] = "Bcc: %s" % (Cnf["Dinstall::Bcc"])
-
-    adv = ""
-    archive = Cnf["Archive::%s::PrimaryMirror" % (utils.where_am_i())]
-    for suite in updated_pkgs.keys():
-        ver = Cnf["Suite::%s::Version" % suite]
-        if ver != "": ver += " "
-        suite_header = "%s %s(%s)" % (Cnf["Dinstall::MyDistribution"],
-                                       ver, suite)
-        adv += "%s\n%s\n\n" % (suite_header, "-"*len(suite_header))
-
-        arches = [x.arch_name for x in get_suite_architectures(suite)]
-        if "source" in arches:
-            arches.remove("source")
-        if "all" in arches:
-            arches.remove("all")
-        arches.sort()
-
-        adv += "%s updates are available for %s.\n\n" % (
-                suite.capitalize(), utils.join_with_commas_and(arches))
-
-        for a in ["source", "all"] + arches:
-            if not updated_pkgs[suite].has_key(a):
-                continue
-
-            if a == "source":
-                adv += "Source archives:\n\n"
-            elif a == "all":
-                adv += "Architecture independent packages:\n\n"
-            else:
-                adv += "%s architecture (%s)\n\n" % (a,
-                        Cnf["Architectures::%s" % a])
-
-            for file in updated_pkgs[suite][a].keys():
-                adv += "  http://%s/%s%s\n" % (
-                                archive, updated_pkgs[suite][a][file]["poolname"], file)
-                adv += "    Size/MD5 checksum: %8s %s\n" % (
-                        updated_pkgs[suite][a][file]["size"],
-                        updated_pkgs[suite][a][file]["md5"])
-            adv += "\n"
-    adv = adv.rstrip()
-
-    Subst["__ADVISORY_TEXT__"] = adv
-
-    adv = utils.TemplateSubst(Subst, template)
-    return adv
 
 def spawn(command):
     if not re_taint_free.match(command):
@@ -434,7 +68,6 @@ def spawn(command):
         if (result != 0):
             utils.fubar("Invocation of '%s' failed:\n%s\n" % (command, output), result)
 
-
 ##################### ! ! ! N O T E ! ! !  #####################
 #
 # These functions will be reinvoked by semi-priveleged users, be careful not
@@ -444,10 +77,8 @@ def spawn(command):
 
 def sudo(arg, fn, exit):
     if Options["Sudo"]:
-        if advisory == None:
-            utils.fubar("Must set advisory name")
         os.spawnl(os.P_WAIT, "/usr/bin/sudo", "/usr/bin/sudo", "-u", "dak", "-H",
-                  "/usr/local/bin/dak", "new-security-install", "-"+arg, "--", advisory)
+                  "/usr/local/bin/dak", "new-security-install", "-"+arg)
     else:
         fn()
     if exit:
@@ -455,233 +86,110 @@ def sudo(arg, fn, exit):
 
 def do_Approve(): sudo("A", _do_Approve, True)
 def _do_Approve():
-    # 1. dump advisory in drafts
-    draft = "/org/security.debian.org/advisories/drafts/%s" % (advisory)
-    print "Advisory in %s" % (draft)
-    if not Options["No-Action"]:
-        adv_file = "./advisory.%s" % (advisory)
-        if not os.path.exists(adv_file):
-            adv_file = Cnf["Dir::Templates"]+"/security-install.advisory"
-        adv_fd = os.open(draft, os.O_RDWR|os.O_CREAT|os.O_EXCL, 0664)
-        os.write(adv_fd, generate_advisory(adv_file))
-        os.close(adv_fd)
-        adv_fd = None
-
-    # 2. run dak process-accepted on changes
-    print "Accepting packages..."
-    spawn("dak process-accepted -pa %s" % (" ".join(changes)))
-
-    # 3. run dak make-suite-file-list / apt-ftparchve / dak generate-releases
-    print "Updating file lists for apt-ftparchive..."
-    spawn("dak make-suite-file-list")
+    # 1. use process-policy to go through the COMMENTS dir
+    spawn("dak process-policy embargo")
+    spawn("dak process-policy disembargo")
+    newstage=get_policy_queue('newstage')
+
+    # 2. sync the stuff to ftpmaster
+    print "Sync stuff for upload to ftpmaster"
+    spawn("rsync -a -q %s/. /srv/queued/ftpmaster/." % (newstage.path))
+
+    # 3. Now run process-upload in the newstage dir
+    print "Now put it into the security archive"
+    spawn("dak process-upload -a -d %s" % (newstage.path))
+
+    # 4. Run all the steps that are needed to publish the changed archive
+    print "Domination"
+    spawn("dak dominate")
+    print "Generating filelist for apt-ftparchive"
     spawn("dak generate-filelist")
-    print "Updating Packages and Sources files..."
-    spawn("/org/security.debian.org/dak/config/debian-security/map.sh")
+    print "Updating Packages and Sources files... This may take a while, be patient"
+    spawn("/srv/security-master.debian.org/dak/config/debian-security/map.sh")
     spawn("apt-ftparchive generate %s" % (utils.which_apt_conf_file()))
     print "Updating Release files..."
     spawn("dak generate-releases")
-    print "Triggering security mirrors..."
+    print "Triggering security mirrors... (this may take a while)"
+    spawn("/srv/security-master.debian.org/dak/config/debian-security/make-mirror.sh")
     spawn("sudo -u archvsync -H /home/archvsync/signal_security")
+    print "Triggering metadata export for packages.d.o and other consumers"
+    spawn("/srv/security-master.debian.org/dak/config/debian-security/export.sh")
 
-    # 4. chdir to done - do upload
-    if not Options["No-Action"]:
-        os.chdir(Cnf["Dir::Queue::Done"])
-    do_upload()
+########################################################################
+########################################################################
 
-def do_Disembargo(): sudo("D", _do_Disembargo, True)
-def _do_Disembargo():
-    if os.getcwd() != Cnf["Dir::Queue::Embargoed"].rstrip("/"):
-        utils.fubar("Can only disembargo from %s" % Cnf["Dir::Queue::Embargoed"])
+def main():
+    global Options, Logger, Queue, changes
+    cnf = Config()
 
-    session = DBConn().session()
+    Arguments = [('h', "Help",      "Security::Options::Help"),
+                 ('n', "No-Action", "Security::Options::No-Action"),
+                 ('c', 'Changesfile', "Security::Options::Changesfile"),
+                 ('s', "Sudo", "Security::Options::Sudo"),
+                 ('A', "Approve", "Security::Options::Approve")
+                 ]
 
-    dest = Cnf["Dir::Queue::Unembargoed"]
-    emb_q = get_build_queue("embargoed", session)
-    une_q = get_build_queue("unembargoed", session)
-
-    for c in changes:
-        print "Disembargoing %s" % (c)
-
-        Upload.init_vars()
-        Upload.pkg.changes_file = c
-        Upload.update_vars()
-
-        if "source" in Upload.pkg.changes["architecture"].keys():
-            print "Adding %s %s to disembargo table" % (Upload.pkg.changes["source"], Upload.pkg.changes["version"])
-            session.execute("INSERT INTO disembargo (package, version) VALUES (:package, :version)",
-                {'package': Upload.pkg.changes["source"], 'version': Upload.pkg.changes["version"]})
-
-        files = {}
-        for suite in Upload.pkg.changes["distribution"].keys():
-            if suite not in Cnf.ValueList("Dinstall::QueueBuildSuites"):
-                continue
-            dest_dir = Cnf["Dir::QueueBuild"]
-            if Cnf.FindB("Dinstall::SecurityQueueBuild"):
-                dest_dir = os.path.join(dest_dir, suite)
-            for file in Upload.pkg.files.keys():
-                files[os.path.join(dest_dir, file)] = 1
-
-        files = files.keys()
-        for f in files:
-            session.execute("UPDATE queue_build SET queue = :unembargoed WHERE filename = :filename AND queue = :embargoed",
-                {'unembargoed': une_q.queue_id, 'filename': f, 'embargoed': emb_q.queue_id})
-        session.commit()
-
-        for file in Upload.pkg.files.keys():
-            utils.copy(file, os.path.join(dest, file))
-            os.unlink(file)
-
-    for c in changes:
-        utils.copy(c, os.path.join(dest, c))
-        os.unlink(c)
-        k = c[:-8] + ".dak"
-        utils.copy(k, os.path.join(dest, k))
-        os.unlink(k)
-
-    session.commit()
-
-def do_Reject(): sudo("R", _do_Reject, True)
-def _do_Reject():
-    global changes
+    for i in ["Help", "No-Action", "Changesfile", "Sudo", "Approve"]:
+        if not cnf.has_key("Security::Options::%s" % (i)):
+            cnf["Security::Options::%s" % (i)] = ""
 
-    session = DBConn().session()
+    changes_files = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
 
-    for c in changes:
-        print "Rejecting %s..." % (c)
-        Upload.init_vars()
-        Upload.pkg.changes_file = c
-        Upload.update_vars()
-        files = {}
-        for suite in Upload.pkg.changes["distribution"].keys():
-            if suite not in Cnf.ValueList("Dinstall::QueueBuildSuites"):
-                continue
-            dest_dir = Cnf["Dir::QueueBuild"]
-            if Cnf.FindB("Dinstall::SecurityQueueBuild"):
-                dest_dir = os.path.join(dest_dir, suite)
-            for file in Upload.pkg.files.keys():
-                files[os.path.join(dest_dir, file)] = 1
-
-        files = files.keys()
-
-        aborted = Upload.do_reject()
-        if not aborted:
-            os.unlink(c[:-8]+".dak")
-            for f in files:
-                session.execute("DELETE FROM queue_build WHERE filename = :filename",
-                    {'filename': f})
-                os.unlink(f)
-
-    print "Updating buildd information..."
-    spawn("/org/security.debian.org/dak/config/debian-security/cron.buildd")
-
-    adv_file = "./advisory.%s" % (advisory)
-    if os.path.exists(adv_file):
-        os.unlink(adv_file)
-
-    session.commit()
-
-def do_DropAdvisory():
-    for c in changes:
-        Upload.init_vars()
-        Upload.pkg.changes_file = c
-        Upload.update_vars()
-        del Upload.pkg.changes["adv id"]
-        Upload.dump_vars(os.getcwd())
-    quit()
-
-def do_Edit():
-    adv_file = "./advisory.%s" % (advisory)
-    if not os.path.exists(adv_file):
-        utils.copy(Cnf["Dir::Templates"]+"/security-install.advisory", adv_file)
-    editor = os.environ.get("EDITOR", "vi")
-    result = os.system("%s %s" % (editor, adv_file))
-    if result != 0:
-        utils.fubar("%s invocation failed for %s." % (editor, adv_file))
-
-def do_Show():
-    adv_file = "./advisory.%s" % (advisory)
-    if not os.path.exists(adv_file):
-        adv_file = Cnf["Dir::Templates"]+"/security-install.advisory"
-    print "====\n%s\n====" % (generate_advisory(adv_file))
-
-def do_Quit():
-    quit()
+    Options = cnf.SubTree("Security::Options")
+    if Options['Help']:
+        usage()
 
-def main():
-    global changes
-
-    args = init()
-    extras = load_args(args)
-    if advisory:
-        load_adv_changes()
-    if extras:
-        if not advisory:
-            changes = extras
-        else:
-            if srcverarches == {}:
-                if not yes_no("Create new advisory %s?" % (advisory)):
-                    print "Not doing anything, then"
-                    quit()
-            else:
-                advisory_info()
-                doextras = []
-                for c in extras:
-                    if yes_no("Add %s to %s?" % (c, advisory)):
-                        doextras.append(c)
-                extras = doextras
-            add_changes(extras)
-
-    if not advisory:
-        utils.fubar("Must specify an advisory id")
-
-    if not changes:
-        utils.fubar("No changes specified")
+    changesfiles={}
+    for a in changes_files:
+        if not a.endswith(".changes"):
+            utils.fubar("not a .changes file: %s" % (a))
+        changesfiles[a]=1
+    changes = changesfiles.keys()
+
+    username = utils.getusername()
+    if username != "dak":
+        print "Non-dak user: %s" % username
+        Options["Sudo"] = "y"
 
+    if Options["No-Action"]:
+        Options["Sudo"] = ""
+
+    if not Options["Sudo"] and not Options["No-Action"]:
+        Logger = daklog.Logger("security-install")
+
+    session = DBConn().session()
+
+    # If we call ourselve to approve, we do just that and exit
     if Options["Approve"]:
-        advisory_info()
         do_Approve()
-    elif Options["Reject"]:
-        advisory_info()
-        do_Reject()
-    elif Options["Disembargo"]:
-        advisory_info()
-        do_Disembargo()
-    elif Options["Drop-Advisory"]:
-        advisory_info()
-        do_DropAdvisory()
-    else:
-        while 1:
-            default = "Q"
-            opts = ["Approve", "Edit advisory"]
-            if os.path.exists("./advisory.%s" % advisory):
-                default = "A"
-            else:
-                default = "E"
-            if os.getcwd() == Cnf["Dir::Queue::Embargoed"].rstrip("/"):
-                opts.append("Disembargo")
-            opts += ["Show advisory", "Reject", "Quit"]
-
-            advisory_info()
-            what = prompt(opts, default)
-
-            if what == "Quit":
-                do_Quit()
-            elif what == "Approve":
-                do_Approve()
-            elif what == "Edit advisory":
-                do_Edit()
-            elif what == "Show advisory":
-                do_Show()
-            elif what == "Disembargo":
-                do_Disembargo()
-            elif what == "Reject":
-                do_Reject()
-            else:
-                utils.fubar("Impossible answer '%s', wtf?" % (what))
+        sys.exit()
+
+    if len(changes) == 0:
+        utils.fubar("Need changes files as arguments")
+
+    # Yes, we could do this inside do_Approve too. But this way we see who exactly
+    # called it (ownership of the file)
+
+    acceptfiles={}
+    for change in changes:
+        dbchange=get_dbchange(os.path.basename(change), session)
+        # strip epoch from version
+        version=dbchange.version
+        version=version[(version.find(':')+1):]
+        acceptfilename="%s/COMMENTS/ACCEPT.%s_%s" % (os.path.dirname(os.path.abspath(changes[0])), dbchange.source, version)
+        acceptfiles[acceptfilename]=1
+
+    if Options["No-Action"]:
+        print "Would create %s now and then go on to accept this package, but No-Action is set" % (acceptfiles.keys())
+        sys.exit(0)
+
+    for acceptfilename in acceptfiles.keys():
+        accept_file = file(acceptfilename, "w")
+        accept_file.write("OK\n")
+        accept_file.close()
+
+    do_Approve()
 
-################################################################################
 
 if __name__ == '__main__':
     main()
-
-################################################################################
index 3e8a9b4149ea7e9f7328534e171ea30283038c59..3d2a9aba20b100e745a06b129c32e194960bdfe2 100755 (executable)
@@ -49,21 +49,76 @@ def usage (exit_code=0):
 Make microchanges or microqueries of the binary overrides
 
   -h, --help                 show this help and exit
+  -c, --check                check override compliance
   -d, --done=BUG#            send priority/section change as closure to bug#
   -n, --no-action            don't do anything
   -s, --suite                specify the suite to use
 """
     sys.exit(exit_code)
 
+def check_override_compliance(package, priority, suite, cnf, session):
+    print "Checking compliance with related overrides..."
+
+    depends = set()
+    rdepends = set()
+    components = cnf.ValueList("Suite::%s::Components" % suite)
+    arches = set([x.arch_string for x in get_suite_architectures(suite)])
+    arches -= set(["source", "all"])
+    for arch in arches:
+        for component in components:
+            Packages = utils.get_packages_from_ftp(cnf['Dir::Root'], suite, component, arch)
+            while Packages.Step():
+                package_name = Packages.Section.Find("Package")
+                dep_list = Packages.Section.Find("Depends")
+                if dep_list:
+                    if package_name == package:
+                        for d in apt_pkg.ParseDepends(dep_list):
+                            for i in d:
+                                depends.add(i[0])
+                    else:
+                        for d in apt_pkg.ParseDepends(dep_list):
+                            for i in d:
+                                if i[0] == package:
+                                    rdepends.add(package_name)
+
+    query = """SELECT o.package, p.level, p.priority
+               FROM override o
+               JOIN suite s ON s.id = o.suite
+               JOIN priority p ON p.id = o.priority
+               WHERE s.suite_name = '%s'
+               AND o.package in ('%s')""" \
+               % (suite, "', '".join(depends.union(rdepends)))
+    packages = session.execute(query)
+
+    excuses = []
+    for p in packages:
+        if p[0] == package or not p[1]:
+            continue
+        if p[0] in depends:
+            if priority.level < p[1]:
+                excuses.append("%s would have priority %s, its dependency %s has priority %s" \
+                      % (package, priority.priority, p[0], p[2]))
+        if p[0] in rdepends:
+            if priority.level > p[1]:
+                excuses.append("%s would have priority %s, its reverse dependency %s has priority %s" \
+                      % (package, priority.priority, p[0], p[2]))
+
+    if excuses:
+        for ex in excuses:
+            print ex
+    else:
+        print "Proposed override change complies with Debian Policy"
+
 def main ():
     cnf = Config()
 
     Arguments = [('h',"help","Override::Options::Help"),
+                 ('c',"check","Override::Options::Check"),
                  ('d',"done","Override::Options::Done", "HasArg"),
                  ('n',"no-action","Override::Options::No-Action"),
                  ('s',"suite","Override::Options::Suite", "HasArg"),
                  ]
-    for i in ["help", "no-action"]:
+    for i in ["help", "check", "no-action"]:
         if not cnf.has_key("Override::Options::%s" % (i)):
             cnf["Override::Options::%s" % (i)] = ""
     if not cnf.has_key("Override::Options::Suite"):
@@ -121,7 +176,7 @@ def main ():
         if q.rowcount == 0:
             continue
         if q.rowcount > 1:
-            utils.fubar("%s is ambiguous. Matches %d packages" % (package,q.ntuples()))
+            utils.fubar("%s is ambiguous. Matches %d packages" % (package,q.rowcount))
 
         r = q.fetchone()
         if packagetype == 'binary':
@@ -171,6 +226,9 @@ def main ():
     if oldpriority == 'source' and newpriority != 'source':
         utils.fubar("Trying to change priority of a source-only package")
 
+    if Options["Check"] and newpriority != oldpriority:
+        check_override_compliance(package, p, suite, cnf, session)
+
     # If we're in no-action mode
     if Options["No-Action"]:
         if newpriority != oldpriority:
@@ -196,7 +254,7 @@ def main ():
 
     game_over()
 
-    Logger = daklog.Logger(cnf.Cnf, "override")
+    Logger = daklog.Logger("override")
 
     dsc_otype_id = get_override_type('dsc').overridetype_id
 
diff --git a/dak/override_disparity.py b/dak/override_disparity.py
new file mode 100755 (executable)
index 0000000..b021851
--- /dev/null
@@ -0,0 +1,142 @@
+#!/usr/bin/env python
+
+"""
+Generate a list of override disparities
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2010 Luca Falavigna <dktrkranz@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+# <adsb> Yay bugzilla *sigh*
+# <phil> :)
+# <Ganneff> quick, replace the bts with it
+# * jcristau replaces dak with soyuz
+# <adsb> and expects Ganneff to look after it?
+# <jcristau> nah, elmo can do that
+# * jcristau hides
+
+################################################################################
+
+import os
+import sys
+import apt_pkg
+import yaml
+
+from daklib.config import Config
+from daklib.dbconn import *
+from daklib import utils
+
+################################################################################
+
+def usage (exit_code=0):
+    print """Generate a list of override disparities
+
+       Usage:
+       dak override-disparity [-f <file>] [ -p <package> ] [ -s <suite> ]
+
+Options:
+
+  -h, --help                show this help and exit
+  -f, --file                store output into given file
+  -p, --package             limit check on given package only
+  -s, --suite               choose suite to look for (default: unstable)"""
+
+    sys.exit(exit_code)
+
+def main():
+    cnf = Config()
+    Arguments = [('h','help','Override-Disparity::Options::Help'),
+                 ('f','file','Override-Disparity::Options::File','HasArg'),
+                 ('s','suite','Override-Disparity::Options::Suite','HasArg'),
+                 ('p','package','Override-Disparity::Options::Package','HasArg')]
+
+    for i in ['help', 'package']:
+        if not cnf.has_key('Override-Disparity::Options::%s' % (i)):
+            cnf['Override-Disparity::Options::%s' % (i)] = ''
+    if not cnf.has_key('Override-Disparity::Options::Suite'):
+        cnf['Override-Disparity::Options::Suite'] = 'unstable'
+
+    apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
+    Options = cnf.SubTree('Override-Disparity::Options')
+
+    if Options['help']:
+        usage()
+
+    depends = {}
+    session = DBConn().session()
+    suite = Options['suite']
+    components = cnf.ValueList('Suite::%s::Components' % suite)
+    arches = set([x.arch_string for x in get_suite_architectures(suite)])
+    arches -= set(['source', 'all'])
+    for arch in arches:
+        for component in components:
+            Packages = utils.get_packages_from_ftp(cnf['Dir::Root'], suite, component, arch)
+            while Packages.Step():
+                package = Packages.Section.Find('Package')
+                dep_list = Packages.Section.Find('Depends')
+                if Options['package'] and package != Options['package']:
+                    continue
+                if dep_list:
+                    for d in apt_pkg.ParseDepends(dep_list):
+                        for i in d:
+                            if not depends.has_key(package):
+                                depends[package] = set()
+                            depends[package].add(i[0])
+
+    priorities = {}
+    query = """SELECT DISTINCT o.package, p.level, p.priority, m.name
+               FROM override o
+               JOIN suite s ON s.id = o.suite
+               JOIN priority p ON p.id = o.priority
+               JOIN binaries b ON b.package = o.package
+               JOIN maintainer m ON m.id = b.maintainer
+               JOIN bin_associations ba ON ba.bin = b.id
+               WHERE s.suite_name = '%s'
+               AND ba.suite = s.id
+               AND p.level <> 0""" % suite
+    packages = session.execute(query)
+
+    out = {}
+    if Options.has_key('file'):
+        outfile = file(os.path.expanduser(Options['file']), 'w')
+    else:
+        outfile = sys.stdout
+    for p in packages:
+        priorities[p[0]] = [p[1], p[2], p[3], True]
+    for d in sorted(depends.keys()):
+        for p in depends[d]:
+            if priorities.has_key(d) and priorities.has_key(p):
+                if priorities[d][0] < priorities[p][0]:
+                     if priorities[d][3]:
+                         if not out.has_key(d):
+                             out[d] = {}
+                         out[d]['priority'] = priorities[d][1]
+                         out[d]['maintainer'] = unicode(priorities[d][2], 'utf-8')
+                         out[d]['priority'] = priorities[d][1]
+                         priorities[d][3] = False
+                     if not out[d].has_key('dependency'):
+                         out[d]['dependency'] = {}
+                     out[d]['dependency'][p] = priorities[p][1]
+    yaml.safe_dump(out, outfile, default_flow_style=False)
+    if Options.has_key('file'):
+        outfile.close()
+
+if __name__ == '__main__':
+    main()
index 740ce6e809968daaf9c83a4426763b014577848a..0ab6a2db61ab5746f12559e54e8cac01f70f7403 100755 (executable)
@@ -337,33 +337,29 @@ def edit_overrides (new, upload, session):
 ################################################################################
 
 def check_pkg (upload):
+    save_stdout = sys.stdout
     try:
-        less_fd = os.popen("less -R -", 'w', 0)
-        stdout_fd = sys.stdout
-        try:
-            sys.stdout = less_fd
-            changes = utils.parse_changes (upload.pkg.changes_file)
-            print examine_package.display_changes(changes['distribution'], upload.pkg.changes_file)
-            files = upload.pkg.files
-            for f in files.keys():
-                if files[f].has_key("new"):
-                    ftype = files[f]["type"]
-                    if ftype == "deb":
-                        print examine_package.check_deb(changes['distribution'], f)
-                    elif ftype == "dsc":
-                        print examine_package.check_dsc(changes['distribution'], f)
-        finally:
-            print examine_package.output_package_relations()
-            sys.stdout = stdout_fd
+        sys.stdout = os.popen("less -R -", 'w', 0)
+        changes = utils.parse_changes (upload.pkg.changes_file)
+        print examine_package.display_changes(changes['distribution'], upload.pkg.changes_file)
+        files = upload.pkg.files
+        for f in files.keys():
+            if files[f].has_key("new"):
+                ftype = files[f]["type"]
+                if ftype == "deb":
+                    print examine_package.check_deb(changes['distribution'], f)
+                elif ftype == "dsc":
+                    print examine_package.check_dsc(changes['distribution'], f)
+        print examine_package.output_package_relations()
     except IOError, e:
         if e.errno == errno.EPIPE:
             utils.warn("[examine_package] Caught EPIPE; skipping.")
-            pass
         else:
+            sys.stdout = save_stdout
             raise
     except KeyboardInterrupt:
         utils.warn("[examine_package] Caught C-c; skipping.")
-        pass
+    sys.stdout = save_stdout
 
 ################################################################################
 
@@ -396,7 +392,7 @@ def add_overrides (new, upload, session):
             type_id = get_override_type(new[pkg]["type"]).overridetype_id
             priority_id = new[pkg]["priority id"]
             section_id = new[pkg]["section id"]
-            Logger.log(["%s overrides" % (srcpkg), suite, new[pkg]["component"], new[pkg]["type"], new[pkg]["priority"], new[pkg]["section"]])
+            Logger.log(["%s (%s) overrides" % (pkg, srcpkg), suite, new[pkg]["component"], new[pkg]["type"], new[pkg]["priority"], new[pkg]["section"]])
             session.execute("INSERT INTO override (suite, component, type, package, priority, section, maintainer) VALUES (:sid, :cid, :tid, :pkg, :pid, :sectid, '')",
                             { 'sid': suite_id, 'cid': component_id, 'tid':type_id, 'pkg': pkg, 'pid': priority_id, 'sectid': section_id})
             for f in new[pkg]["files"]:
@@ -424,11 +420,18 @@ def do_new(upload, session):
     # Make a copy of distribution we can happily trample on
     changes["suite"] = copy.copy(changes["distribution"])
 
+    # Try to get an included dsc
+    dsc = None
+    (status, _) = upload.load_dsc()
+    if status:
+        dsc = upload.pkg.dsc
+
     # The main NEW processing loop
     done = 0
+    new = {}
     while not done:
         # Find out what's new
-        new, byhand = determine_new(upload.pkg.changes_file, changes, files, session=session)
+        new, byhand = determine_new(upload.pkg.changes_file, changes, files, dsc=dsc, session=session, new=new)
 
         if not new:
             break
@@ -667,6 +670,12 @@ def do_pkg(changes_full_path, session):
     u.logger = Logger
     origchanges = os.path.abspath(u.pkg.changes_file)
 
+    # Try to get an included dsc
+    dsc = None
+    (status, _) = u.load_dsc()
+    if status:
+        dsc = u.pkg.dsc
+
     cnf = Config()
     bcc = "X-DAK: dak process-new"
     if cnf.has_key("Dinstall::Bcc"):
@@ -675,6 +684,7 @@ def do_pkg(changes_full_path, session):
         u.Subst["__BCC__"] = bcc
 
     files = u.pkg.files
+    u.check_distributions()
     for deb_filename, f in files.items():
         if deb_filename.endswith(".udeb") or deb_filename.endswith(".deb"):
             u.binary_file_checks(deb_filename, session)
@@ -691,7 +701,7 @@ def do_pkg(changes_full_path, session):
                 if not recheck(u, session):
                     return
 
-                new, byhand = determine_new(u.pkg.changes_file, u.pkg.changes, files, session=session)
+                new, byhand = determine_new(u.pkg.changes_file, u.pkg.changes, files, dsc=dsc, session=session)
                 if byhand:
                     do_byhand(u, session)
                 elif new:
@@ -774,7 +784,7 @@ def main():
 
     if not Options["No-Action"]:
         try:
-            Logger = daklog.Logger(cnf, "process-new")
+            Logger = daklog.Logger("process-new")
         except CantOpenError, e:
             Options["Trainee"] = "True"
 
index d1377b97097debe4c19be69f91eaa566d8527175..94e274687bcd0902f652c91db8756c298f94587d 100755 (executable)
@@ -54,7 +54,7 @@ def do_comments(dir, srcqueue, opref, npref, line, fn, session):
     for comm in [ x for x in os.listdir(dir) if x.startswith(opref) ]:
         lines = open("%s/%s" % (dir, comm)).readlines()
         if len(lines) == 0 or lines[0] != line + "\n": continue
-        changes_files = [ x for x in os.listdir(".") if x.startswith(comm[7:]+"_")
+        changes_files = [ x for x in os.listdir(".") if x.startswith(comm[len(opref):]+"_")
                                 and x.endswith(".changes") ]
         changes_files = sort_changes(changes_files, session)
         for f in changes_files:
@@ -141,7 +141,7 @@ def main():
 
     if not Options["No-Action"]:
         try:
-            Logger = daklog.Logger(cnf, "process-policy")
+            Logger = daklog.Logger("process-policy")
         except CantOpenError, e:
             Logger = None
 
@@ -158,6 +158,7 @@ def main():
     # The comments stuff relies on being in the right directory
     os.chdir(pq.path)
     do_comments(commentsdir, pq, "ACCEPT.", "ACCEPTED.", "OK", comment_accept, session)
+    do_comments(commentsdir, pq, "ACCEPTED.", "ACCEPTED.", "OK", comment_accept, session)
     do_comments(commentsdir, pq, "REJECT.", "REJECTED.", "NOTOK", comment_reject, session)
 
 
index 13474071c34600cb82d3eae1d7a1e37df857ef21..f74993ce3e7e1dbc185509d320ef3bcc5adecfb9 100755 (executable)
@@ -207,6 +207,8 @@ def byebye():
 
 
 def action(u, session):
+    global Logger
+
     cnf = Config()
     holding = Holding()
 
@@ -293,7 +295,7 @@ def action(u, session):
         u.do_reject(0, pi)
     elif answer == 'A':
         if not chg:
-            chg = u.pkg.add_known_changes(holding.holding_dir, session=session)
+            chg = u.pkg.add_known_changes(holding.holding_dir, session=session, logger=Logger)
         session.commit()
         u.accept(summary, short_summary, session)
         u.check_override()
@@ -302,13 +304,13 @@ def action(u, session):
         u.remove()
     elif answer == 'P':
         if not chg:
-            chg = u.pkg.add_known_changes(holding.holding_dir, session=session)
+            chg = u.pkg.add_known_changes(holding.holding_dir, session=session, logger=Logger)
         package_to_queue(u, summary, short_summary, policyqueue, chg, session)
         session.commit()
         u.remove()
     elif answer == queuekey:
         if not chg:
-            chg = u.pkg.add_known_changes(holding.holding_dir, session=session)
+            chg = u.pkg.add_known_changes(holding.holding_dir, session=session, logger=Logger)
         QueueInfo[qu]["process"](u, summary, short_summary, chg, session)
         session.commit()
         u.remove()
@@ -467,7 +469,7 @@ def main():
             log_urgency = True
             UrgencyLog()
 
-    Logger = daklog.Logger(cnf, "process-upload", Options["No-Action"])
+    Logger = daklog.Logger("process-upload", Options["No-Action"])
 
     # If we have a directory flag, use it to find our files
     if cnf["Dinstall::Options::Directory"] != "":
@@ -501,6 +503,13 @@ def main():
                                                 utils.size_type(int(summarystats.accept_bytes)))
         Logger.log(["total", summarystats.accept_count, summarystats.accept_bytes])
 
+    if summarystats.reject_count:
+        sets = "set"
+        if summarystats.reject_count > 1:
+            sets = "sets"
+        print "Rejected %d package %s." % (summarystats.reject_count, sets)
+        Logger.log(["rejected", summarystats.reject_count])
+
     byebye()
 
     if not Options["No-Action"]:
index e2d8578b8865a902ff32a308b52af97743b050c1..98c80f0af85dd0b50bcbed1e6e8b856b80a2d11e 100755 (executable)
 from copy import copy
 import glob, os, stat, sys, time
 import apt_pkg
+try:
+    import rrdtool
+except ImportError:
+    pass
 
 from daklib import utils
 from daklib.queue import Upload
@@ -60,6 +64,7 @@ Prints a report of packages in queue directories (usually new and byhand).
   -s, --sort=key            sort output according to key, see below.
   -a, --age=key             if using sort by age, how should time be treated?
                             If not given a default of hours will be used.
+  -r, --rrd=key             Directory where rrd files to be updated are stored
   -d, --directories=key     A comma seperated list of queues to be scanned
 
      Sorting Keys: ao=age,   oldest first.   an=age,   newest first.
@@ -217,6 +222,7 @@ def header():
 
 def footer():
     print "<p class=\"timestamp\">Timestamp: %s (UTC)</p>" % (time.strftime("%d.%m.%Y / %H:%M:%S", time.gmtime()))
+    print "<p class=\"timestamp\">There are <a href=\"/stat.html\">graphs about the queues</a> available.</p>"
 
     print """
     <div class="footer">
@@ -319,8 +325,43 @@ def table_row(source, version, arch, last_mod, maint, distribution, closes, fing
 
 ############################################################
 
-def process_changes_files(changes_files, type, log):
-    session = DBConn().session()
+def update_graph_database(rrd_dir, type, n_source, n_binary):
+    if not rrd_dir:
+        return
+
+    rrd_file = os.path.join(rrd_dir, type.lower()+'.rrd')
+    update = [rrd_file, "N:%s:%s" % (n_source, n_binary)]
+
+    try:
+        rrdtool.update(*update)
+    except rrdtool.error:
+        create = [rrd_file]+"""
+--step
+300
+--start
+0
+DS:ds0:GAUGE:7200:0:1000
+DS:ds1:GAUGE:7200:0:1000
+RRA:AVERAGE:0.5:1:599
+RRA:AVERAGE:0.5:6:700
+RRA:AVERAGE:0.5:24:775
+RRA:AVERAGE:0.5:288:795
+RRA:MAX:0.5:1:600
+RRA:MAX:0.5:6:700
+RRA:MAX:0.5:24:775
+RRA:MAX:0.5:288:795
+""".strip().split("\n")
+        try:
+            rc = rrdtool.create(*create)
+            ru = rrdtool.update(*update)
+        except rrdtool.error, e:
+            print('warning: queue_report: rrdtool error, skipping %s.rrd: %s' % (type, e))
+    except NameError:
+        pass
+
+############################################################
+
+def process_changes_files(changes_files, type, log, rrd_dir):
     msg = ""
     cache = {}
     # Read in all the .changes files
@@ -366,6 +407,8 @@ def process_changes_files(changes_files, type, log):
     per_source_items = per_source.items()
     per_source_items.sort(sg_compare)
 
+    update_graph_database(rrd_dir, type, len(per_source_items), len(changes_files))
+
     entries = []
     max_source_len = 0
     max_version_len = 0
@@ -391,7 +434,9 @@ def process_changes_files(changes_files, type, log):
         for j in i[1]["list"]:
             changesbase = os.path.basename(j["filename"])
             try:
+                session = DBConn().session()
                 dbc = session.query(DBChange).filter_by(changesname=changesbase).one()
+                session.close()
             except Exception, e:
                 print "Can't find changes file in NEW for %s (%s)" % (changesbase, e)
                 dbc = None
@@ -562,6 +607,7 @@ def main():
                  ('8','822',"Queue-Report::Options::822"),
                  ('s',"sort","Queue-Report::Options::Sort", "HasArg"),
                  ('a',"age","Queue-Report::Options::Age", "HasArg"),
+                 ('r',"rrd","Queue-Report::Options::Rrd", "HasArg"),
                  ('d',"directories","Queue-Report::Options::Directories", "HasArg")]
     for i in [ "help" ]:
         if not Cnf.has_key("Queue-Report::Options::%s" % (i)):
@@ -589,6 +635,13 @@ def main():
     else:
         directories = [ "byhand", "new" ]
 
+    if Cnf.has_key("Queue-Report::Options::Rrd"):
+        rrd_dir = Cnf["Queue-Report::Options::Rrd"]
+    elif Cnf.has_key("Dir::Rrd"):
+        rrd_dir = Cnf["Dir::Rrd"]
+    else:
+        rrd_dir = None
+
     f = None
     if Cnf.has_key("Queue-Report::Options::822"):
         # Open the report file
@@ -596,7 +649,7 @@ def main():
 
     for directory in directories:
         changes_files = glob.glob("%s/*.changes" % (Cnf["Dir::Queue::%s" % (directory)]))
-        process_changes_files(changes_files, directory, f)
+        process_changes_files(changes_files, directory, f, rrd_dir)
 
     if Cnf.has_key("Queue-Report::Options::822"):
         f.close()
index 28ecd7b6d62fb27ddd20a8e0bf0a5aa92613e247..4dd603e4bc53f7c8ccfaf750ed0c13f843d84912 100755 (executable)
 
 import sys, os, re, time
 import apt_pkg
-from debian_bundle import deb822
+import rrdtool
+
+try:
+    # starting with squeeze
+    from debian import deb822
+except:
+    # up to lenny
+    from debian_bundle import deb822
+
 from daklib.dbconn import *
 from daklib import utils
 from daklib.regexes import re_html_escaping, html_escaping
@@ -82,6 +90,7 @@ def header():
 
 def footer():
     res = "<p class=\"validate\">Timestamp: %s (UTC)</p>" % (time.strftime("%d.%m.%Y / %H:%M:%S", time.gmtime()))
+    res += "<p class=\"timestamp\">There are <a href=\"/stat.html\">graphs about the queues</a> available.</p>"
     res += """<a href="http://validator.w3.org/check?uri=referer">
     <img border="0" src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" height="31" width="88"></a>
         <a href="http://jigsaw.w3.org/css-validator/check/referer">
@@ -89,7 +98,7 @@ def footer():
      height="31" width="88"></a>
     """
     res += "</body></html>"
-    return res
+    return res.encode('utf-8')
 
 def table_header():
     return """<h1>Deferred uploads</h1>
@@ -116,6 +125,59 @@ def table_row(changesname, delay, changed_by, closes):
     row_number+=1
     return res
 
+def update_graph_database(rrd_dir, *counts):
+    if not rrd_dir:
+        return
+
+    rrd_file = os.path.join(rrd_dir, 'deferred.rrd')
+    counts = [str(count) for count in counts]
+    update = [rrd_file, "N:"+":".join(counts)]
+
+    try:
+        rrdtool.update(*update)
+    except rrdtool.error:
+        create = [rrd_file]+"""
+--step
+300
+--start
+0
+DS:day0:GAUGE:7200:0:1000
+DS:day1:GAUGE:7200:0:1000
+DS:day2:GAUGE:7200:0:1000
+DS:day3:GAUGE:7200:0:1000
+DS:day4:GAUGE:7200:0:1000
+DS:day5:GAUGE:7200:0:1000
+DS:day6:GAUGE:7200:0:1000
+DS:day7:GAUGE:7200:0:1000
+DS:day8:GAUGE:7200:0:1000
+DS:day9:GAUGE:7200:0:1000
+DS:day10:GAUGE:7200:0:1000
+DS:day11:GAUGE:7200:0:1000
+DS:day12:GAUGE:7200:0:1000
+DS:day13:GAUGE:7200:0:1000
+DS:day14:GAUGE:7200:0:1000
+DS:day15:GAUGE:7200:0:1000
+RRA:AVERAGE:0.5:1:599
+RRA:AVERAGE:0.5:6:700
+RRA:AVERAGE:0.5:24:775
+RRA:AVERAGE:0.5:288:795
+RRA:MIN:0.5:1:600
+RRA:MIN:0.5:6:700
+RRA:MIN:0.5:24:775
+RRA:MIN:0.5:288:795
+RRA:MAX:0.5:1:600
+RRA:MAX:0.5:6:700
+RRA:MAX:0.5:24:775
+RRA:MAX:0.5:288:795
+""".strip().split("\n")
+        try:
+            rc = rrdtool.create(*create)
+            ru = rrdtool.update(*update)
+        except rrdtool.error, e:
+            print('warning: queue_report: rrdtool error, skipping %s.rrd: %s' % (type, e))
+    except NameError:
+        pass
+
 def get_upload_data(changesfn):
     achanges = deb822.Changes(file(changesfn))
     changesname = os.path.basename(changesfn)
@@ -126,6 +188,7 @@ def get_upload_data(changesfn):
         remainingtime = (delaydays>0)*max(0,24*60*60+os.stat(changesfn).st_mtime-time.time())
         delay = "%d days %02d:%02d" %(max(delaydays-1,0), int(remainingtime/3600),int(remainingtime/60)%60)
     else:
+        delaydays = 0
         remainingtime = 0
 
     uploader = achanges.get('changed-by')
@@ -152,16 +215,16 @@ def get_upload_data(changesfn):
                 if os.path.exists(qfn):
                     os.symlink(qfn,lfn)
                     os.chmod(qfn, 0644)
-    return (max(delaydays-1,0)*24*60*60+remainingtime, changesname, delay, uploader, achanges.get('closes','').split(),achanges)
+    return (max(delaydays-1,0)*24*60*60+remainingtime, changesname, delay, uploader, achanges.get('closes','').split(),achanges, delaydays)
 
-def list_uploads(filelist):
+def list_uploads(filelist, rrd_dir):
     uploads = map(get_upload_data, filelist)
     uploads.sort()
     # print the summary page
     print header()
     if uploads:
         print table_header()
-        print ''.join(map(lambda x: table_row(*x[1:5]), uploads))
+        print ''.join(map(lambda x: table_row(*x[1:5]), uploads)).encode('utf-8')
         print table_footer()
     else:
         print '<h1>Currently no deferred uploads to Debian</h1>'
@@ -171,18 +234,22 @@ def list_uploads(filelist):
         fn = os.path.join(Cnf["Show-Deferred::LinkPath"],'.status.tmp')
         f = open(fn,"w")
         try:
+            counts = [0]*16
             for u in uploads:
+                counts[u[6]] += 1
                 print >> f, "Changes-file: %s"%u[1]
                 fields = """Location: DEFERRED
 Delayed-Until: %s
 Delay-Remaining: %s"""%(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()+u[0])),u[2])
                 print >> f, fields
-                print >> f, str(u[5]).rstrip()
-                open(os.path.join(Cnf["Show-Deferred::LinkPath"],u[1]),"w").write(str(u[5])+fields+'\n')
+                encoded = unicode(u[5]).encode('utf-8')
+                print >> f, encoded.rstrip()
+                open(os.path.join(Cnf["Show-Deferred::LinkPath"],u[1]),"w").write(encoded+fields+'\n')
                 print >> f
             f.close()
             os.rename(os.path.join(Cnf["Show-Deferred::LinkPath"],'.status.tmp'),
                       os.path.join(Cnf["Show-Deferred::LinkPath"],'status'))
+            update_graph_database(rrd_dir, *counts)
         except:
             os.unlink(fn)
             raise
@@ -196,6 +263,7 @@ def usage (exit_code=0):
   -h, --help                    show this help and exit.
   -p, --link-path [path]        override output directory.
   -d, --deferred-queue [path]   path to the deferred queue
+  -r, --rrd=key                 Directory where rrd files to be updated are stored
   """
     sys.exit(exit_code)
 
@@ -204,7 +272,8 @@ def init():
     Cnf = utils.get_conf()
     Arguments = [('h',"help","Show-Deferred::Options::Help"),
                  ("p","link-path","Show-Deferred::LinkPath","HasArg"),
-                 ("d","deferred-queue","Show-Deferred::DeferredQueue","HasArg")]
+                 ("d","deferred-queue","Show-Deferred::DeferredQueue","HasArg"),
+                 ('r',"rrd","Show-Deferred::Options::Rrd", "HasArg")]
     args = apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv)
     for i in ["help"]:
         if not Cnf.has_key("Show-Deferred::Options::%s" % (i)):
@@ -228,11 +297,18 @@ def main():
     if len(args)!=0:
         usage(1)
 
+    if Cnf.has_key("Show-Deferred::Options::Rrd"):
+        rrd_dir = Cnf["Show-Deferred::Options::Rrd"]
+    elif Cnf.has_key("Dir::Rrd"):
+        rrd_dir = Cnf["Dir::Rrd"]
+    else:
+        rrd_dir = None
+
     filelist = []
     for r,d,f  in os.walk(Cnf["Show-Deferred::DeferredQueue"]):
         filelist += map (lambda x: os.path.join(r,x),
                          filter(lambda x: x.endswith('.changes'), f))
-    list_uploads(filelist)
+    list_uploads(filelist, rrd_dir)
 
     available_changes = set(map(os.path.basename,filelist))
     if Cnf.has_key("Show-Deferred::LinkPath"):
@@ -243,3 +319,6 @@ def main():
                 if (not os.path.exists(afp) or
                     (af.endswith('.changes') and af not in available_changes)):
                     os.unlink(afp)
+
+if __name__ == '__main__':
+    main()
index 6d357134b23c2f19fd2659cfe35327441fee4069..48abf7318858d486a1a9d1f531998a34595586f9 100755 (executable)
@@ -37,12 +37,14 @@ from daklib.regexes import re_source_ext
 from daklib.config import Config
 from daklib import daklog
 from daklib.changesutils import *
-from daklib.threadpool import ThreadPool
+from daklib.dakmultiprocessing import DakProcessPool, PROC_STATUS_SUCCESS, PROC_STATUS_SIGNALRAISED
+from multiprocessing import Manager
 
 # Globals
 Cnf = None
 Options = None
-sources = set()
+manager = Manager()
+sources = manager.list()
 
 
 ################################################################################
@@ -151,17 +153,46 @@ def html_footer():
 
 
 def do_pkg(changes_file):
+    changes_file = utils.validate_changes_file_arg(changes_file, 0)
+    if not changes_file:
+        return
+    print "\n" + changes_file
+
     session = DBConn().session()
     u = Upload()
     u.pkg.changes_file = changes_file
-    (u.pkg.changes["fingerprint"], rejects) = utils.check_signature(changes_file)
+    # We can afoord not to check the signature before loading the changes file
+    # as we've validated it already (otherwise it couldn't be in new)
+    # and we can more quickly skip over already processed files this way
     u.load_changes(changes_file)
+
+    origchanges = os.path.abspath(u.pkg.changes_file)
+
+    # Still be cautious in case paring the changes file went badly
+    if u.pkg.changes.has_key('source') and u.pkg.changes.has_key('version'):
+        htmlname = u.pkg.changes["source"] + "_" + u.pkg.changes["version"] + ".html"
+        htmlfile = os.path.join(cnf["Show-New::HTMLPath"], htmlname)
+    else:
+        # Changes file was bad
+        print "Changes file %s missing source or version field" % changes_file
+        session.close()
+        return
+
+    # Have we already processed this?
+    if os.path.exists(htmlfile) and \
+        os.stat(htmlfile).st_mtime > os.stat(origchanges).st_mtime:
+            sources.append(htmlname)
+            session.close()
+            return (PROC_STATUS_SUCCESS, '%s already up-to-date' % htmlfile)
+
+    # Now we'll load the fingerprint
+    (u.pkg.changes["fingerprint"], rejects) = utils.check_signature(changes_file, session=session)
     new_queue = get_policy_queue('new', session );
     u.pkg.directory = new_queue.path
     u.update_subst()
-    origchanges = os.path.abspath(u.pkg.changes_file)
     files = u.pkg.files
     changes = u.pkg.changes
+    sources.append(htmlname)
 
     for deb_filename, f in files.items():
         if deb_filename.endswith(".udeb") or deb_filename.endswith(".deb"):
@@ -172,35 +203,33 @@ def do_pkg(changes_file):
             u.check_source_against_db(deb_filename, session)
     u.pkg.changes["suite"] = u.pkg.changes["distribution"]
 
-    new, byhand = determine_new(u.pkg.changes_file, u.pkg.changes, files, 0, session)
+    new, byhand = determine_new(u.pkg.changes_file, u.pkg.changes, files, 0, dsc=u.pkg.dsc, session=session)
 
-    htmlname = changes["source"] + "_" + changes["version"] + ".html"
-    sources.add(htmlname)
-    # do not generate html output if that source/version already has one.
-    if not os.path.exists(os.path.join(cnf["Show-New::HTMLPath"],htmlname)):
-        outfile = open(os.path.join(cnf["Show-New::HTMLPath"],htmlname),"w")
+    outfile = open(os.path.join(cnf["Show-New::HTMLPath"],htmlname),"w")
 
-        filestoexamine = []
-        for pkg in new.keys():
-            for fn in new[pkg]["files"]:
-                filestoexamine.append(fn)
+    filestoexamine = []
+    for pkg in new.keys():
+        for fn in new[pkg]["files"]:
+            filestoexamine.append(fn)
 
-        print >> outfile, html_header(changes["source"], filestoexamine)
+    print >> outfile, html_header(changes["source"], filestoexamine)
 
-        check_valid(new, session)
-        distribution = changes["distribution"].keys()[0]
-        print >> outfile, examine_package.display_changes(distribution, changes_file)
+    check_valid(new, session)
+    distribution = changes["distribution"].keys()[0]
+    print >> outfile, examine_package.display_changes(distribution, changes_file)
 
-        for fn in filter(lambda fn: fn.endswith(".dsc"), filestoexamine):
-            print >> outfile, examine_package.check_dsc(distribution, fn, session)
-        for fn in filter(lambda fn: fn.endswith(".deb") or fn.endswith(".udeb"), filestoexamine):
-            print >> outfile, examine_package.check_deb(distribution, fn, session)
+    for fn in filter(lambda fn: fn.endswith(".dsc"), filestoexamine):
+        print >> outfile, examine_package.check_dsc(distribution, fn, session)
+    for fn in filter(lambda fn: fn.endswith(".deb") or fn.endswith(".udeb"), filestoexamine):
+        print >> outfile, examine_package.check_deb(distribution, fn, session)
 
-        print >> outfile, html_footer()
+    print >> outfile, html_footer()
 
-       outfile.close()
+    outfile.close()
     session.close()
 
+    return (PROC_STATUS_SUCCESS, '%s already updated' % htmlfile)
+
 ################################################################################
 
 def usage (exit_code=0):
@@ -246,17 +275,14 @@ def main():
 
     examine_package.use_html=1
 
-    threadpool = ThreadPool()
+    pool = DakProcessPool()
     for changes_file in changes_files:
-        changes_file = utils.validate_changes_file_arg(changes_file, 0)
-        if not changes_file:
-            continue
-        print "\n" + changes_file
-        threadpool.queueTask(do_pkg, changes_file)
-    threadpool.joinAll()
+        pool.apply_async(do_pkg, (changes_file,))
+    pool.close()
+    pool.join()
 
     files = set(os.listdir(cnf["Show-New::HTMLPath"]))
-    to_delete = filter(lambda x: x.endswith(".html"), files.difference(sources))
+    to_delete = filter(lambda x: x.endswith(".html"), files.difference(set(sources)))
     for f in to_delete:
         os.remove(os.path.join(cnf["Show-New::HTMLPath"],f))
 
index 8b5b57fe2ef2db0cf2b1a882ad7aa30615eb3422..87b38827706ac752a17afc91f7a629070f9c3a08 100755 (executable)
@@ -28,7 +28,7 @@ from daklib import utils
 def main():
     Cnf = utils.get_conf()
     count = 0
-    move_date = int(time.time())-(30*84600)
+    move_date = int(time.time())
     os.chdir(Cnf["Dir::Queue::Done"])
     files = glob.glob("%s/*" % (Cnf["Dir::Queue::Done"]))
     for filename in files:
@@ -43,7 +43,8 @@ def main():
                 os.makedirs(dirname)
             dest = dirname + '/' + os.path.basename(filename)
             if os.path.exists(dest):
-                utils.fubar("%s already exists." % (dest))
+                utils.warn("%s already exists." % (dest))
+                continue
             print "Move: %s -> %s" % (filename, dest)
             os.rename(filename, dest)
             count = count + 1
index 99ddad1b4249e167a920fa388bab9fe1433e6baa..91c8211f0f5812afa4173b05f148b6255f020934 100755 (executable)
@@ -41,11 +41,12 @@ import errno
 from daklib import utils
 from daklib.config import Config
 from daklib.dak_exceptions import DBUpdateError
+from daklib.daklog import Logger
 
 ################################################################################
 
 Cnf = None
-required_database_schema = 40
+required_database_schema = 60
 
 ################################################################################
 
@@ -100,26 +101,43 @@ Updates dak's database schema to the lastest version. You should disable crontab
             print "No configuration table found, assuming dak database revision to be pre-zero"
             return -1
 
+################################################################################
+
+    def get_transaction_id(self):
+        '''
+        Returns the current transaction id as a string.
+        '''
+        cursor = self.db.cursor()
+        cursor.execute("SELECT txid_current();")
+        id = cursor.fetchone()[0]
+        cursor.close()
+        return id
+
 ################################################################################
 
     def update_db(self):
         # Ok, try and find the configuration table
         print "Determining dak database revision ..."
         cnf = Config()
+        logger = Logger('update-db')
 
         try:
             # Build a connect string
-            connect_str = "dbname=%s"% (cnf["DB::Name"])
-            if cnf["DB::Host"] != '': connect_str += " host=%s" % (cnf["DB::Host"])
-            if cnf["DB::Port"] != '-1': connect_str += " port=%d" % (int(cnf["DB::Port"]))
+            if cnf.has_key("DB::Service"):
+                connect_str = "service=%s" % cnf["DB::Service"]
+            else:
+                connect_str = "dbname=%s"% (cnf["DB::Name"])
+                if cnf["DB::Host"] != '': connect_str += " host=%s" % (cnf["DB::Host"])
+                if cnf["DB::Port"] != '-1': connect_str += " port=%d" % (int(cnf["DB::Port"]))
 
             self.db = psycopg2.connect(connect_str)
 
         except:
             print "FATAL: Failed connect to database"
-            pass
+            sys.exit(1)
 
         database_revision = int(self.get_db_rev())
+        logger.log(['transaction id before update: %s' % self.get_transaction_id()])
 
         if database_revision == -1:
             print "dak database schema predates update-db."
@@ -140,20 +158,26 @@ Updates dak's database schema to the lastest version. You should disable crontab
 
         if database_revision == required_database_schema:
             print "no updates required"
+            logger.log(["no updates required"])
             sys.exit(0)
 
         for i in range (database_revision, required_database_schema):
-            print "updating database schema from %d to %d" % (database_revision, i+1)
             try:
                 dakdb = __import__("dakdb", globals(), locals(), ['update'+str(i+1)])
                 update_module = getattr(dakdb, "update"+str(i+1))
                 update_module.do_update(self)
+                message = "updated database schema from %d to %d" % (database_revision, i+1)
+                print message
+                logger.log([message])
             except DBUpdateError, e:
                 # Seems the update did not work.
                 print "Was unable to update database schema from %d to %d." % (database_revision, i+1)
                 print "The error message received was %s" % (e)
+                logger.log(["DB Schema upgrade failed"])
+                logger.close()
                 utils.fubar("DB Schema upgrade failed")
             database_revision += 1
+        logger.close()
 
 ################################################################################
 
diff --git a/daklib/binary.py b/daklib/binary.py
deleted file mode 100644 (file)
index 3a8d15e..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-#!/usr/bin/python
-
-"""
-Functions related debian binary packages
-
-@contact: Debian FTPMaster <ftpmaster@debian.org>
-@copyright: 2009  Mike O'Connor <stew@debian.org>
-@license: GNU General Public License version 2 or later
-"""
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-################################################################################
-
-# <Ganneff> are we going the xorg way?
-# <Ganneff> a dak without a dak.conf?
-# <stew> automatically detect the wrong settings at runtime?
-# <Ganneff> yes!
-# <mhy> well, we'll probably always need dak.conf (how do you get the database setting
-# <mhy> but removing most of the config into the database seems sane
-# <Ganneff> mhy: dont spoil the fun
-# <Ganneff> mhy: and i know how. we nmap localhost and check all open ports
-# <Ganneff> maybe one answers to sql
-# <stew> we will discover projectb via avahi
-# <mhy> you're both sick
-# <mhy> really fucking sick
-
-################################################################################
-
-import os
-import sys
-import shutil
-import tarfile
-import commands
-import traceback
-import atexit
-
-from debian_bundle import deb822
-
-from dbconn import *
-from config import Config
-import utils
-
-################################################################################
-
-__all__ = []
-
-################################################################################
-
-class Binary(object):
-    def __init__(self, filename, reject=None):
-        """
-        @type filename: string
-        @param filename: path of a .deb
-
-        @type reject: function
-        @param reject: a function to log reject messages to
-        """
-        self.filename = filename
-        self.tmpdir = None
-        self.chunks = None
-        self.wrapped_reject = reject
-        # Store rejects for later use
-        self.rejects = []
-
-    def reject(self, message):
-        """
-        if we were given a reject function, send the reject message,
-        otherwise send it to stderr.
-        """
-        print >> sys.stderr, message
-        self.rejects.append(message)
-        if self.wrapped_reject:
-            self.wrapped_reject(message)
-
-    def __del__(self):
-        """
-        make sure we cleanup when we are garbage collected.
-        """
-        self._cleanup()
-
-    def _cleanup(self):
-        """
-        we need to remove the temporary directory, if we created one
-        """
-        if self.tmpdir and os.path.exists(self.tmpdir):
-            shutil.rmtree(self.tmpdir)
-            self.tmpdir = None
-
-    def __scan_ar(self):
-        # get a list of the ar contents
-        if not self.chunks:
-
-            cmd = "ar t %s" % (self.filename)
-            (result, output) = commands.getstatusoutput(cmd)
-            if result != 0:
-                rejected = True
-                print("%s: 'ar t' invocation failed." % (self.filename))
-                self.reject("%s: 'ar t' invocation failed." % (self.filename))
-                self.reject(utils.prefix_multi_line_string(output, " [ar output:] "))
-            self.chunks = output.split('\n')
-
-
-
-    def __unpack(self):
-        # Internal function which extracts the contents of the .ar to
-        # a temporary directory
-
-        if not self.tmpdir:
-            tmpdir = utils.temp_dirname()
-            cwd = os.getcwd()
-            try:
-                os.chdir( tmpdir )
-                cmd = "ar x %s %s %s" % (os.path.join(cwd,self.filename), self.chunks[1], self.chunks[2])
-                (result, output) = commands.getstatusoutput(cmd)
-                if result != 0:
-                    print("%s: '%s' invocation failed." % (self.filename, cmd))
-                    self.reject("%s: '%s' invocation failed." % (self.filename, cmd))
-                    self.reject(utils.prefix_multi_line_string(output, " [ar output:] "))
-                else:
-                    self.tmpdir = tmpdir
-                    atexit.register( self._cleanup )
-
-            finally:
-                os.chdir( cwd )
-
-    def valid_deb(self, relaxed=False):
-        """
-        Check deb contents making sure the .deb contains:
-          1. debian-binary
-          2. control.tar.gz
-          3. data.tar.gz or data.tar.bz2
-        in that order, and nothing else.
-        """
-        self.__scan_ar()
-        rejected = not self.chunks
-        if relaxed:
-            if len(self.chunks) < 3:
-                rejected = True
-                self.reject("%s: found %d chunks, expected at least 3." % (self.filename, len(self.chunks)))
-        else:
-            if len(self.chunks) != 3:
-                rejected = True
-                self.reject("%s: found %d chunks, expected 3." % (self.filename, len(self.chunks)))
-        if self.chunks[0] != "debian-binary":
-            rejected = True
-            self.reject("%s: first chunk is '%s', expected 'debian-binary'." % (self.filename, self.chunks[0]))
-        if not rejected and self.chunks[1] != "control.tar.gz":
-            rejected = True
-            self.reject("%s: second chunk is '%s', expected 'control.tar.gz'." % (self.filename, self.chunks[1]))
-        if not rejected and self.chunks[2] not in [ "data.tar.bz2", "data.tar.gz" ]:
-            rejected = True
-            self.reject("%s: third chunk is '%s', expected 'data.tar.gz' or 'data.tar.bz2'." % (self.filename, self.chunks[2]))
-
-        return not rejected
-
-    def scan_package(self, bootstrap_id=0, relaxed=False, session=None):
-        """
-        Unpack the .deb, do sanity checking, and gather info from it.
-
-        Currently information gathering consists of getting the contents list. In
-        the hopefully near future, it should also include gathering info from the
-        control file.
-
-        @type bootstrap_id: int
-        @param bootstrap_id: the id of the binary these packages
-          should be associated or zero meaning we are not bootstrapping
-          so insert into a temporary table
-
-        @return: True if the deb is valid and contents were imported
-        """
-        result = False
-        rejected = not self.valid_deb(relaxed)
-        if not rejected:
-            self.__unpack()
-
-
-            cwd = os.getcwd()
-            if not rejected and self.tmpdir:
-                try:
-                    os.chdir(self.tmpdir)
-                    if self.chunks[1] == "control.tar.gz":
-                        control = tarfile.open(os.path.join(self.tmpdir, "control.tar.gz" ), "r:gz")
-                        control.extract('./control', self.tmpdir )
-                    if self.chunks[2] == "data.tar.gz":
-                        data = tarfile.open(os.path.join(self.tmpdir, "data.tar.gz"), "r:gz")
-                    elif self.chunks[2] == "data.tar.bz2":
-                        data = tarfile.open(os.path.join(self.tmpdir, "data.tar.bz2" ), "r:bz2")
-
-                    if bootstrap_id:
-                        result = insert_content_paths(bootstrap_id, [tarinfo.name for tarinfo in data if not tarinfo.isdir()], session)
-                    else:
-                        pkgs = deb822.Packages.iter_paragraphs(file(os.path.join(self.tmpdir,'control')))
-                        pkg = pkgs.next()
-                        result = insert_pending_content_paths(pkg,
-                                                              self.filename.endswith('.udeb'),
-                                                              [tarinfo.name for tarinfo in data if not tarinfo.isdir()],
-                                                              session)
-
-                except:
-                    traceback.print_exc()
-
-            os.chdir(cwd)
-        self._cleanup()
-        return result
-
-    def check_utf8_package(self, package):
-        """
-        Unpack the .deb, do sanity checking, and gather info from it.
-
-        Currently information gathering consists of getting the contents list. In
-        the hopefully near future, it should also include gathering info from the
-        control file.
-
-        @type package: string
-        @param package: the name of the package to be checked
-
-        @rtype: boolean
-        @return: True if the deb is valid and contents were imported
-        """
-        rejected = not self.valid_deb(True)
-        self.__unpack()
-
-        if not rejected and self.tmpdir:
-            cwd = os.getcwd()
-            try:
-                os.chdir(self.tmpdir)
-                if self.chunks[1] == "control.tar.gz":
-                    control = tarfile.open(os.path.join(self.tmpdir, "control.tar.gz" ), "r:gz")
-                    control.extract('control', self.tmpdir )
-                if self.chunks[2] == "data.tar.gz":
-                    data = tarfile.open(os.path.join(self.tmpdir, "data.tar.gz"), "r:gz")
-                elif self.chunks[2] == "data.tar.bz2":
-                    data = tarfile.open(os.path.join(self.tmpdir, "data.tar.bz2" ), "r:bz2")
-
-                for tarinfo in data:
-                    try:
-                        unicode( tarinfo.name )
-                    except:
-                        print >> sys.stderr, "E: %s has non-unicode filename: %s" % (package,tarinfo.name)
-
-                result = True
-
-            except:
-                traceback.print_exc()
-                result = False
-
-            os.chdir(cwd)
-
-        return result
-
-__all__.append('Binary')
-
-
-def copy_temporary_contents(binary, bin_association, reject, session=None):
-    """
-    copy the previously stored contents from the temp table to the permanant one
-
-    during process-unchecked, the deb should have been scanned and the
-    contents stored in pending_content_associations
-    """
-
-    cnf = Config()
-
-    privatetrans = False
-    if session is None:
-        session = DBConn().session()
-        privatetrans = True
-
-    arch = get_architecture(archname, session=session)
-
-    pending = session.query(PendingBinContents).filter_by(package=binary.package,
-                                                          version=binary.version,
-                                                          arch=binary.arch).first()
-
-    if pending:
-        # This should NOT happen.  We should have added contents
-        # during process-unchecked.  if it did, log an error, and send
-        # an email.
-        subst = {
-            "__PACKAGE__": package,
-            "__VERSION__": version,
-            "__ARCH__": arch,
-            "__TO_ADDRESS__": cnf["Dinstall::MyAdminAddress"],
-            "__DAK_ADDRESS__": cnf["Dinstall::MyEmailAddress"] }
-
-        message = utils.TemplateSubst(subst, cnf["Dir::Templates"]+"/missing-contents")
-        utils.send_mail(message)
-
-        # rescan it now
-        exists = Binary(deb, reject).scan_package()
-
-        if not exists:
-            # LOG?
-            return False
-
-    component = binary.poolfile.location.component
-    override = session.query(Override).filter_by(package=binary.package,
-                                                 suite=bin_association.suite,
-                                                 component=component.id).first()
-    if not override:
-        # LOG?
-        return False
-
-
-    if not override.overridetype.type.endswith('deb'):
-        return True
-
-    if override.overridetype.type == "udeb":
-        table = "udeb_contents"
-    elif override.overridetype.type == "deb":
-        table = "deb_contents"
-    else:
-        return False
-
-
-    if component.name == "main":
-        component_str = ""
-    else:
-        component_str = component.name + "/"
-
-    vals = { 'package':binary.package,
-             'version':binary.version,
-             'arch':binary.architecture,
-             'binary_id': binary.id,
-             'component':component_str,
-             'section':override.section.section
-             }
-
-    session.execute( """INSERT INTO %s
-    (binary_id,package,version.component,arch,section,filename)
-    SELECT :binary_id, :package, :version, :component, :arch, :section
-    FROM pending_bin_contents pbc
-    WHERE pbc.package=:package
-    AND pbc.version=:version
-    AND pbc.arch=:arch""" % table, vals )
-
-    session.execute( """DELETE from pending_bin_contents package=:package
-    AND version=:version
-    AND arch=:arch""", vals )
-
-    if privatetrans:
-        session.commit()
-        session.close()
-
-    return exists
-
-__all__.append('copy_temporary_contents')
-
-
index e016638cd1db36296d67f4ea0505723106ac057e..1214b03bffb06e9843dcdcc2cdf64b893ba35448 100644 (file)
@@ -187,8 +187,41 @@ class Changes(object):
             if (not self.changes.has_key(key)) or (not self.changes[key]):
                 self.changes[key]='missing'
 
+    def __get_file_from_pool(self, filename, entry, session, logger):
+        cnf = Config()
+
+        if cnf.has_key("Dinstall::SuiteSuffix"):
+            component = cnf["Dinstall::SuiteSuffix"] + entry["component"]
+        else:
+            component = entry["component"]
+
+        poolname = poolify(entry["source"], component)
+        l = get_location(cnf["Dir::Pool"], component, session=session)
+
+        found, poolfile = check_poolfile(os.path.join(poolname, filename),
+                                         entry['size'],
+                                         entry["md5sum"],
+                                         l.location_id,
+                                         session=session)
+
+        if found is None:
+            if logger is not None:
+                logger.log(["E: Found multiple files for pool (%s) for %s" % (filename, component)])
+            return None
+        elif found is False and poolfile is not None:
+            if logger is not None:
+                logger.log(["E: md5sum/size mismatch for %s in pool" % (filename)])
+            return None
+        else:
+            if poolfile is None:
+                if logger is not None:
+                    logger.log(["E: Could not find %s in pool" % (filename)])
+                return None
+            else:
+                return poolfile
+
     @session_wrapper
-    def add_known_changes(self, dirpath, in_queue=None, session=None):
+    def add_known_changes(self, dirpath, in_queue=None, session=None, logger=None):
         """add "missing" in fields which we will require for the known_changes table"""
         cnf = Config()
 
@@ -248,27 +281,22 @@ class Changes(object):
 
             except IOError:
                 # Can't find the file, try to look it up in the pool
-                poolname = poolify(entry["source"], entry["component"])
-                l = get_location(cnf["Dir::Pool"], entry["component"], session=session)
-
-                found, poolfile = check_poolfile(os.path.join(poolname, chg_fn),
-                                                 entry['size'],
-                                                 entry["md5sum"],
-                                                 l.location_id,
-                                                 session=session)
-
-                if found is None:
-                    Logger.log(["E: Found multiple files for pool (%s) for %s" % (chg_fn, entry["component"])])
-                elif found is False and poolfile is not None:
-                    Logger.log(["E: md5sum/size mismatch for %s in pool" % (chg_fn)])
-                else:
-                    if poolfile is None:
-                        Logger.log(["E: Could not find %s in pool" % (chg_fn)])
-                    else:
-                        chg.poolfiles.append(poolfile)
+                poolfile = self.__get_file_from_pool(chg_fn, entry, session)
+                if poolfile:
+                    chg.poolfiles.append(poolfile)
 
         chg.files = files
 
+        # Add files referenced in .dsc, but not included in .changes
+        for name, entry in self.dsc_files.items():
+            if self.files.has_key(name):
+                continue
+
+            entry['source'] = self.changes['source']
+            poolfile = self.__get_file_from_pool(name, entry, session, logger)
+            if poolfile:
+                chg.poolfiles.append(poolfile)
+
         session.commit()
         chg = session.query(DBChange).filter_by(changesname = self.changes_file).one();
 
index b35ed9a9229e602fcbde3e51eda59a70b8f93b84..dc90d49a5edd435aeb6a54fa2968310a5bb18912 100755 (executable)
@@ -36,6 +36,13 @@ import socket
 
 default_config = "/etc/dak/dak.conf" #: default dak config, defines host properties
 
+# suppress some deprecation warnings in squeeze related to apt_pkg
+# module
+import warnings
+warnings.filterwarnings('ignore', ".*apt_pkg.* is deprecated.*", DeprecationWarning)
+
+################################################################################
+
 def which_conf_file():
     return os.getenv("DAK_CONFIG", default_config)
 
@@ -108,7 +115,6 @@ class Config(object):
         """
         for field in [('db_revision',      None,       int),
                       ('defaultsuitename', 'unstable', str),
-                      ('signingkeyids',    '',         str),
                       ('exportpath',       '',         str)
                       ]:
             setattr(self, 'get_%s' % field[0], lambda s=None, x=field[0], y=field[1], z=field[2]: self.get_db_value(x, y, z))
diff --git a/daklib/contents.py b/daklib/contents.py
new file mode 100755 (executable)
index 0000000..bebab6d
--- /dev/null
@@ -0,0 +1,499 @@
+#!/usr/bin/env python
+"""
+Helper code for contents generation.
+
+@contact: Debian FTPMaster <ftpmaster@debian.org>
+@copyright: 2011 Torsten Werner <twerner@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+################################################################################
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+from daklib.dbconn import *
+from daklib.config import Config
+from daklib.filewriter import BinaryContentsFileWriter, SourceContentsFileWriter
+
+from multiprocessing import Pool
+from shutil import rmtree
+from subprocess import Popen, PIPE, check_call
+from tempfile import mkdtemp
+
+import os.path
+import signal
+
+class BinaryContentsWriter(object):
+    '''
+    BinaryContentsWriter writes the Contents-$arch.gz files.
+    '''
+    def __init__(self, suite, architecture, overridetype, component):
+        self.suite = suite
+        self.architecture = architecture
+        self.overridetype = overridetype
+        self.component = component
+        self.session = suite.session()
+
+    def query(self):
+        '''
+        Returns a query object that is doing most of the work.
+        '''
+        overridesuite = self.suite
+        if self.suite.overridesuite is not None:
+            overridesuite = get_suite(self.suite.overridesuite, self.session)
+        params = {
+            'suite':         self.suite.suite_id,
+            'overridesuite': overridesuite.suite_id,
+            'component':     self.component.component_id,
+            'arch_all':      get_architecture('all', self.session).arch_id,
+            'arch':          self.architecture.arch_id,
+            'type_id':       self.overridetype.overridetype_id,
+            'type':          self.overridetype.overridetype,
+        }
+
+        sql = '''
+create temp table newest_binaries (
+    id integer primary key,
+    package text);
+
+create index newest_binaries_by_package on newest_binaries (package);
+
+insert into newest_binaries (id, package)
+    select distinct on (package) id, package from binaries
+        where type = :type and
+            (architecture = :arch_all or architecture = :arch) and
+            id in (select bin from bin_associations where suite = :suite)
+        order by package, version desc;
+
+with
+
+unique_override as
+    (select o.package, s.section
+        from override o, section s
+        where o.suite = :overridesuite and o.type = :type_id and o.section = s.id and
+        o.component = :component)
+
+select bc.file, string_agg(o.section || '/' || b.package, ',' order by b.package) as pkglist
+    from newest_binaries b, bin_contents bc, unique_override o
+    where b.id = bc.binary_id and o.package = b.package
+    group by bc.file'''
+
+        return self.session.query("file", "pkglist").from_statement(sql). \
+            params(params)
+
+    def formatline(self, filename, package_list):
+        '''
+        Returns a formatted string for the filename argument.
+        '''
+        return "%-55s %s\n" % (filename, package_list)
+
+    def fetch(self):
+        '''
+        Yields a new line of the Contents-$arch.gz file in filename order.
+        '''
+        for filename, package_list in self.query().yield_per(100):
+            yield self.formatline(filename, package_list)
+        # end transaction to return connection to pool
+        self.session.rollback()
+
+    def get_list(self):
+        '''
+        Returns a list of lines for the Contents-$arch.gz file.
+        '''
+        return [item for item in self.fetch()]
+
+    def writer(self):
+        '''
+        Returns a writer object.
+        '''
+        values = {
+            'suite':        self.suite.suite_name,
+            'component':    self.component.component_name,
+            'debtype':      self.overridetype.overridetype,
+            'architecture': self.architecture.arch_string,
+        }
+        return BinaryContentsFileWriter(**values)
+
+    def get_header(self):
+        '''
+        Returns the header for the Contents files as a string.
+        '''
+        header_file = None
+        try:
+            filename = os.path.join(Config()['Dir::Templates'], 'contents')
+            header_file = open(filename)
+            return header_file.read()
+        finally:
+            if header_file:
+                header_file.close()
+
+    def write_file(self):
+        '''
+        Write the output file.
+        '''
+        writer = self.writer()
+        file = writer.open()
+        file.write(self.get_header())
+        for item in self.fetch():
+            file.write(item)
+        writer.close()
+
+
+class SourceContentsWriter(object):
+    '''
+    SourceContentsWriter writes the Contents-source.gz files.
+    '''
+    def __init__(self, suite, component):
+        self.suite = suite
+        self.component = component
+        self.session = suite.session()
+
+    def query(self):
+        '''
+        Returns a query object that is doing most of the work.
+        '''
+        params = {
+            'suite_id':     self.suite.suite_id,
+            'component_id': self.component.component_id,
+        }
+
+        sql = '''
+create temp table newest_sources (
+    id integer primary key,
+    source text);
+
+create index sources_binaries_by_source on newest_sources (source);
+
+insert into newest_sources (id, source)
+    select distinct on (source) s.id, s.source from source s
+        join files f on f.id = s.file
+        join location l on l.id = f.location
+        where s.id in (select source from src_associations where suite = :suite_id)
+            and l.component = :component_id
+        order by source, version desc;
+
+select sc.file, string_agg(s.source, ',' order by s.source) as pkglist
+    from newest_sources s, src_contents sc
+    where s.id = sc.source_id group by sc.file'''
+
+        return self.session.query("file", "pkglist").from_statement(sql). \
+            params(params)
+
+    def formatline(self, filename, package_list):
+        '''
+        Returns a formatted string for the filename argument.
+        '''
+        return "%s\t%s\n" % (filename, package_list)
+
+    def fetch(self):
+        '''
+        Yields a new line of the Contents-source.gz file in filename order.
+        '''
+        for filename, package_list in self.query().yield_per(100):
+            yield self.formatline(filename, package_list)
+        # end transaction to return connection to pool
+        self.session.rollback()
+
+    def get_list(self):
+        '''
+        Returns a list of lines for the Contents-source.gz file.
+        '''
+        return [item for item in self.fetch()]
+
+    def writer(self):
+        '''
+        Returns a writer object.
+        '''
+        values = {
+            'suite':     self.suite.suite_name,
+            'component': self.component.component_name
+        }
+        return SourceContentsFileWriter(**values)
+
+    def write_file(self):
+        '''
+        Write the output file.
+        '''
+        writer = self.writer()
+        file = writer.open()
+        for item in self.fetch():
+            file.write(item)
+        writer.close()
+
+
+def binary_helper(suite_id, arch_id, overridetype_id, component_id):
+    '''
+    This function is called in a new subprocess and multiprocessing wants a top
+    level function.
+    '''
+    session = DBConn().session(work_mem = 1000)
+    suite = Suite.get(suite_id, session)
+    architecture = Architecture.get(arch_id, session)
+    overridetype = OverrideType.get(overridetype_id, session)
+    component = Component.get(component_id, session)
+    log_message = [suite.suite_name, architecture.arch_string, \
+        overridetype.overridetype, component.component_name]
+    contents_writer = BinaryContentsWriter(suite, architecture, overridetype, component)
+    contents_writer.write_file()
+    return log_message
+
+def source_helper(suite_id, component_id):
+    '''
+    This function is called in a new subprocess and multiprocessing wants a top
+    level function.
+    '''
+    session = DBConn().session(work_mem = 1000)
+    suite = Suite.get(suite_id, session)
+    component = Component.get(component_id, session)
+    log_message = [suite.suite_name, 'source', component.component_name]
+    contents_writer = SourceContentsWriter(suite, component)
+    contents_writer.write_file()
+    return log_message
+
+class ContentsWriter(object):
+    '''
+    Loop over all suites, architectures, overridetypes, and components to write
+    all contents files.
+    '''
+    @classmethod
+    def log_result(class_, result):
+        '''
+        Writes a result message to the logfile.
+        '''
+        class_.logger.log(result)
+
+    @classmethod
+    def write_all(class_, logger, suite_names = [], component_names = [], force = False):
+        '''
+        Writes all Contents files for suites in list suite_names which defaults
+        to all 'touchable' suites if not specified explicitely. Untouchable
+        suites will be included if the force argument is set to True.
+        '''
+        class_.logger = logger
+        session = DBConn().session()
+        suite_query = session.query(Suite)
+        if len(suite_names) > 0:
+            suite_query = suite_query.filter(Suite.suite_name.in_(suite_names))
+        component_query = session.query(Component)
+        if len(component_names) > 0:
+            component_query = component_query.filter(Component.component_name.in_(component_names))
+        if not force:
+            suite_query = suite_query.filter_by(untouchable = False)
+        deb_id = get_override_type('deb', session).overridetype_id
+        udeb_id = get_override_type('udeb', session).overridetype_id
+        pool = Pool()
+        for suite in suite_query:
+            suite_id = suite.suite_id
+            for component in component_query:
+                component_id = component.component_id
+                # handle source packages
+                pool.apply_async(source_helper, (suite_id, component_id),
+                    callback = class_.log_result)
+                for architecture in suite.get_architectures(skipsrc = True, skipall = True):
+                    arch_id = architecture.arch_id
+                    # handle 'deb' packages
+                    pool.apply_async(binary_helper, (suite_id, arch_id, deb_id, component_id), \
+                        callback = class_.log_result)
+                    # handle 'udeb' packages
+                    pool.apply_async(binary_helper, (suite_id, arch_id, udeb_id, component_id), \
+                        callback = class_.log_result)
+        pool.close()
+        pool.join()
+        session.close()
+
+
+class BinaryContentsScanner(object):
+    '''
+    BinaryContentsScanner provides a threadsafe method scan() to scan the
+    contents of a DBBinary object.
+    '''
+    def __init__(self, binary_id):
+        '''
+        The argument binary_id is the id of the DBBinary object that
+        should be scanned.
+        '''
+        self.binary_id = binary_id
+
+    def scan(self, dummy_arg = None):
+        '''
+        This method does the actual scan and fills in the associated BinContents
+        property. It commits any changes to the database. The argument dummy_arg
+        is ignored but needed by our threadpool implementation.
+        '''
+        session = DBConn().session()
+        binary = session.query(DBBinary).get(self.binary_id)
+        fileset = set(binary.scan_contents())
+        if len(fileset) == 0:
+            fileset.add('EMPTY_PACKAGE')
+        for filename in fileset:
+            binary.contents.append(BinContents(file = filename))
+        session.commit()
+        session.close()
+
+    @classmethod
+    def scan_all(class_, limit = None):
+        '''
+        The class method scan_all() scans all binaries using multiple threads.
+        The number of binaries to be scanned can be limited with the limit
+        argument. Returns the number of processed and remaining packages as a
+        dict.
+        '''
+        session = DBConn().session()
+        query = session.query(DBBinary).filter(DBBinary.contents == None)
+        remaining = query.count
+        if limit is not None:
+            query = query.limit(limit)
+        processed = query.count()
+        pool = Pool()
+        for binary in query.yield_per(100):
+            pool.apply_async(binary_scan_helper, (binary.binary_id, ))
+        pool.close()
+        pool.join()
+        remaining = remaining()
+        session.close()
+        return { 'processed': processed, 'remaining': remaining }
+
+def binary_scan_helper(binary_id):
+    '''
+    This function runs in a subprocess.
+    '''
+    scanner = BinaryContentsScanner(binary_id)
+    scanner.scan()
+
+
+def subprocess_setup():
+    # Python installs a SIGPIPE handler by default. This is usually not what
+    # non-Python subprocesses expect.
+    signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+
+class UnpackedSource(object):
+    '''
+    UnpackedSource extracts a source package into a temporary location and
+    gives you some convinient function for accessing it.
+    '''
+    def __init__(self, dscfilename):
+        '''
+        The dscfilename is a name of a DSC file that will be extracted.
+        '''
+        temp_directory = mkdtemp(dir = Config()['Dir::TempPath'])
+        self.root_directory = os.path.join(temp_directory, 'root')
+        command = ('dpkg-source', '--no-copy', '--no-check', '-q', '-x',
+            dscfilename, self.root_directory)
+        check_call(command, preexec_fn = subprocess_setup)
+
+    def get_root_directory(self):
+        '''
+        Returns the name of the package's root directory which is the directory
+        where the debian subdirectory is located.
+        '''
+        return self.root_directory
+
+    def get_changelog_file(self):
+        '''
+        Returns a file object for debian/changelog or None if no such file exists.
+        '''
+        changelog_name = os.path.join(self.root_directory, 'debian', 'changelog')
+        try:
+            return open(changelog_name)
+        except IOError:
+            return None
+
+    def get_all_filenames(self):
+        '''
+        Returns an iterator over all filenames. The filenames will be relative
+        to the root directory.
+        '''
+        skip = len(self.root_directory) + 1
+        for root, _, files in os.walk(self.root_directory):
+            for name in files:
+                yield os.path.join(root[skip:], name)
+
+    def cleanup(self):
+        '''
+        Removes all temporary files.
+        '''
+        if self.root_directory is None:
+            return
+        parent_directory = os.path.dirname(self.root_directory)
+        rmtree(parent_directory)
+        self.root_directory = None
+
+    def __del__(self):
+        '''
+        Enforce cleanup.
+        '''
+        self.cleanup()
+
+
+class SourceContentsScanner(object):
+    '''
+    SourceContentsScanner provides a method scan() to scan the contents of a
+    DBSource object.
+    '''
+    def __init__(self, source_id):
+        '''
+        The argument source_id is the id of the DBSource object that
+        should be scanned.
+        '''
+        self.source_id = source_id
+
+    def scan(self):
+        '''
+        This method does the actual scan and fills in the associated SrcContents
+        property. It commits any changes to the database.
+        '''
+        session = DBConn().session()
+        source = session.query(DBSource).get(self.source_id)
+        fileset = set(source.scan_contents())
+        for filename in fileset:
+            source.contents.append(SrcContents(file = filename))
+        session.commit()
+        session.close()
+
+    @classmethod
+    def scan_all(class_, limit = None):
+        '''
+        The class method scan_all() scans all source using multiple processes.
+        The number of sources to be scanned can be limited with the limit
+        argument. Returns the number of processed and remaining packages as a
+        dict.
+        '''
+        session = DBConn().session()
+        query = session.query(DBSource).filter(DBSource.contents == None)
+        remaining = query.count
+        if limit is not None:
+            query = query.limit(limit)
+        processed = query.count()
+        pool = Pool()
+        for source in query.yield_per(100):
+            pool.apply_async(source_scan_helper, (source.source_id, ))
+        pool.close()
+        pool.join()
+        remaining = remaining()
+        session.close()
+        return { 'processed': processed, 'remaining': remaining }
+
+def source_scan_helper(source_id):
+    '''
+    This function runs in a subprocess.
+    '''
+    try:
+        scanner = SourceContentsScanner(source_id)
+        scanner.scan()
+    except Exception, e:
+        print e
+
diff --git a/daklib/cruft.py b/daklib/cruft.py
new file mode 100644 (file)
index 0000000..f060085
--- /dev/null
@@ -0,0 +1,121 @@
+"""
+helper functions for cruft-report
+
+@contact: Debian FTPMaster <ftpmaster@debian.org>
+@copyright 2011 Torsten Werner <twerner@debian.org>
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+from daklib.dbconn import *
+
+from sqlalchemy import func
+from sqlalchemy.orm import object_session
+
+def newer_version(lowersuite_name, highersuite_name, session):
+    '''
+    Finds newer versions in lowersuite_name than in highersuite_name. Returns a
+    list of tuples (source, higherversion, lowerversion) where higherversion is
+    the newest version from highersuite_name and lowerversion is the newest
+    version from lowersuite_name.
+    '''
+
+    lowersuite = get_suite(lowersuite_name, session)
+    highersuite = get_suite(highersuite_name, session)
+
+    query = session.query(DBSource.source, func.max(DBSource.version)). \
+        with_parent(highersuite).group_by(DBSource.source)
+
+    list = []
+    for (source, higherversion) in query:
+        lowerversion = session.query(func.max(DBSource.version)). \
+            filter_by(source = source).filter(DBSource.version > higherversion). \
+            with_parent(lowersuite).group_by(DBSource.source).scalar()
+        if lowerversion is not None:
+            list.append((source, higherversion, lowerversion))
+    return list
+
+def get_package_names(suite):
+    '''
+    Returns a query that selects all distinct package names from suite ordered
+    by package name.
+    '''
+
+    session = object_session(suite)
+    return session.query(DBBinary.package).with_parent(suite). \
+        group_by(DBBinary.package).order_by(DBBinary.package)
+
+class NamedSource(object):
+    '''
+    A source package identified by its name with all of its versions in a
+    suite.
+    '''
+    def __init__(self, suite, source):
+        self.source = source
+        query = suite.sources.filter_by(source = source). \
+            order_by(DBSource.version)
+        self.versions = [src.version for src in query]
+
+    def __str__(self):
+        return "%s(%s)" % (self.source, ", ".join(self.versions))
+
+class DejavuBinary(object):
+    '''
+    A binary package identified by its name which gets built by multiple source
+    packages in a suite. The architecture is ignored which leads to the
+    following corner case, e.g.:
+
+    If a source package 'foo-mips' that builds a binary package 'foo' on mips
+    and another source package 'foo-mipsel' builds a binary package with the
+    same name 'foo' on mipsel then the binary package 'foo' will be reported as
+    built from multiple source packages.
+    '''
+
+    def __init__(self, suite, package):
+        self.package = package
+        session = object_session(suite)
+        # We need a subquery to make sure that both binary and source packages
+        # are in the right suite.
+        bin_query = suite.binaries.filter_by(package = package).subquery()
+        src_query = session.query(DBSource.source).with_parent(suite). \
+            join(bin_query).order_by(DBSource.source).group_by(DBSource.source)
+        self.sources = []
+        if src_query.count() > 1:
+            for source, in src_query:
+                self.sources.append(str(NamedSource(suite, source)))
+
+    def has_multiple_sources(self):
+        'Has the package been built by multiple sources?'
+        return len(self.sources) > 1
+
+    def __str__(self):
+        return "%s built by: %s" % (self.package, ", ".join(self.sources))
+
+def report_multiple_source(suite):
+    '''
+    Reports binary packages built from multiple source package with different
+    names.
+    '''
+
+    print "Built from multiple source packages"
+    print "-----------------------------------"
+    print
+    for package, in get_package_names(suite):
+        binary = DejavuBinary(suite, package)
+        if binary.has_multiple_sources():
+            print binary
+    print
index fb33b0bdab18160525e1c3183d828f1559abba0e..7ececa560ebc74f5405dfc8f73a571b77691a9ca 100644 (file)
@@ -32,34 +32,44 @@ import utils
 
 ################################################################################
 
-class Logger:
+class Logger(object):
     "Logger object"
-    Cnf = None
-    logfile = None
-    program = None
+    __shared_state = {}
+
+    def __init__(self, program='unknown', debug=False, print_starting=True, include_pid=False):
+        self.__dict__ = self.__shared_state
 
-    def __init__ (self, Cnf, program, debug=0, print_starting=True):
-        "Initialize a new Logger object"
-        self.Cnf = Cnf
         self.program = program
+        self.debug = debug
+        self.include_pid = include_pid
+
+        if not getattr(self, 'logfile', None):
+            self._open_log(debug)
+
+        if print_starting:
+            self.log(["program start"])
+
+    def _open_log(self, debug):
         # Create the log directory if it doesn't exist
-        logdir = Cnf["Dir::Log"]
+        from daklib.config import Config
+        logdir = Config()["Dir::Log"]
         if not os.path.exists(logdir):
             umask = os.umask(00000)
             os.makedirs(logdir, 02775)
             os.umask(umask)
+
         # Open the logfile
         logfilename = "%s/%s" % (logdir, time.strftime("%Y-%m"))
         logfile = None
+
         if debug:
             logfile = sys.stderr
         else:
             umask = os.umask(00002)
             logfile = utils.open_file(logfilename, 'a')
             os.umask(umask)
+
         self.logfile = logfile
-        if print_starting:
-            self.log(["program start"])
 
     def log (self, details):
         "Log an event"
diff --git a/daklib/dakmultiprocessing.py b/daklib/dakmultiprocessing.py
new file mode 100644 (file)
index 0000000..86fa74d
--- /dev/null
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+# vim:set et sw=4:
+
+"""
+multiprocessing for DAK
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011  Ansgar Burchardt <ansgar@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+###############################################################################
+
+from multiprocessing.pool import Pool
+from signal import signal, SIGHUP, SIGTERM, SIGPIPE, SIGALRM
+
+import sqlalchemy.orm.session
+
+__all__ = []
+
+PROC_STATUS_SUCCESS      = 0  # Everything ok
+PROC_STATUS_EXCEPTION    = 1  # An exception was caught
+PROC_STATUS_SIGNALRAISED = 2  # A signal was generated
+PROC_STATUS_MISCFAILURE  = 3  # Process specific error; see message
+
+__all__.extend(['PROC_STATUS_SUCCESS',      'PROC_STATUS_EXCEPTION',
+                'PROC_STATUS_SIGNALRAISED', 'PROC_STATUS_MISCFAILURE'])
+
+class SignalException(Exception):
+    def __init__(self, signum):
+        self.signum = signum
+
+    def __str__(self):
+        return "<SignalException: %d>" % self.signum
+
+__all__.append('SignalException')
+
+def signal_handler(signum, info):
+    raise SignalException(signum)
+
+def _func_wrapper(func, *args, **kwds):
+    # We need to handle signals to avoid hanging
+    signal(SIGHUP, signal_handler)
+    signal(SIGTERM, signal_handler)
+    signal(SIGPIPE, signal_handler)
+    signal(SIGALRM, signal_handler)
+
+    # We expect our callback function to return:
+    # (status, messages)
+    # Where:
+    #  status is one of PROC_STATUS_*
+    #  messages is a string used for logging
+    try:
+        return (func(*args, **kwds))
+    except SignalException, e:
+        return (PROC_STATUS_SIGNALRAISED, e.signum)
+    except Exception, e:
+        return (PROC_STATUS_EXCEPTION, str(e))
+    finally:
+        # Make sure connections are closed. We might die otherwise.
+        sqlalchemy.orm.session.Session.close_all()
+
+
+class DakProcessPool(Pool):
+    def __init__(self, *args, **kwds):
+        Pool.__init__(self, *args, **kwds)
+        self.results = []
+        self.int_results = []
+
+    def apply_async(self, func, args=(), kwds={}, callback=None):
+        wrapper_args = list(args)
+        wrapper_args.insert(0, func)
+        self.int_results.append(Pool.apply_async(self, _func_wrapper, wrapper_args, kwds, callback))
+
+    def join(self):
+        Pool.join(self)
+        for r in self.int_results:
+            # return values were already handled in the callbacks, but asking
+            # for them might raise exceptions which would otherwise be lost
+            self.results.append(r.get())
+
+    def overall_status(self):
+        # Return the highest of our status results
+        # This basically allows us to do sys.exit(overall_status()) and have us
+        # exit 0 if everything was good and non-zero if not
+        status = 0
+        for r in self.results:
+            if r[0] > status:
+                status = r[0]
+        return status
+
+__all__.append('DakProcessPool')
index 25ba49e1e3a3e61b9046fd9de450f4ca8033b4de..91ae848e83d00ce5366f0b51d10bf9c3ccc3af76 100755 (executable)
 
 ################################################################################
 
+import apt_pkg
 import os
+from os.path import normpath
 import re
 import psycopg2
 import traceback
 import commands
+import signal
+
+try:
+    # python >= 2.6
+    import json
+except:
+    # python <= 2.5
+    import simplejson as json
+
 from datetime import datetime, timedelta
 from errno import ENOENT
 from tempfile import mkstemp, mkdtemp
+from subprocess import Popen, PIPE
+from tarfile import TarFile
 
 from inspect import getargspec
 
 import sqlalchemy
-from sqlalchemy import create_engine, Table, MetaData
-from sqlalchemy.orm import sessionmaker, mapper, relation
+from sqlalchemy import create_engine, Table, MetaData, Column, Integer, desc, \
+    Text, ForeignKey
+from sqlalchemy.orm import sessionmaker, mapper, relation, object_session, \
+    backref, MapperExtension, EXT_CONTINUE, object_mapper, clear_mappers
 from sqlalchemy import types as sqltypes
+from sqlalchemy.orm.collections import attribute_mapped_collection
+from sqlalchemy.ext.associationproxy import association_proxy
 
 # Don't remove this, we re-export the exceptions to scripts which import us
 from sqlalchemy.exc import *
@@ -57,20 +74,38 @@ from sqlalchemy.orm.exc import NoResultFound
 # in the database
 from config import Config
 from textutils import fix_maintainer
+from dak_exceptions import DBUpdateError, NoSourceFieldError, FileExistsError
+
+# suppress some deprecation warnings in squeeze related to sqlalchemy
+import warnings
+warnings.filterwarnings('ignore', \
+    "The SQLAlchemy PostgreSQL dialect has been renamed from 'postgres' to 'postgresql'.*", \
+    SADeprecationWarning)
+
 
 ################################################################################
 
 # Patch in support for the debversion field type so that it works during
 # reflection
 
-class DebVersion(sqltypes.Text):
-    """
-    Support the debversion type
-    """
+try:
+    # that is for sqlalchemy 0.6
+    UserDefinedType = sqltypes.UserDefinedType
+except:
+    # this one for sqlalchemy 0.5
+    UserDefinedType = sqltypes.TypeEngine
 
+class DebVersion(UserDefinedType):
     def get_col_spec(self):
         return "DEBVERSION"
 
+    def bind_processor(self, dialect):
+        return None
+
+    # ' = None' is needed for sqlalchemy 0.5:
+    def result_processor(self, dialect, coltype = None):
+        return None
+
 sa_major_version = sqlalchemy.__version__[0:3]
 if sa_major_version in ["0.5", "0.6"]:
     from sqlalchemy.databases import postgres
@@ -80,7 +115,7 @@ else:
 
 ################################################################################
 
-__all__ = ['IntegrityError', 'SQLAlchemyError']
+__all__ = ['IntegrityError', 'SQLAlchemyError', 'DebVersion']
 
 ################################################################################
 
@@ -135,9 +170,206 @@ __all__.append('session_wrapper')
 
 ################################################################################
 
-class Architecture(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class ORMObject(object):
+    """
+    ORMObject is a base class for all ORM classes mapped by SQLalchemy. All
+    derived classes must implement the properties() method.
+    """
+
+    def properties(self):
+        '''
+        This method should be implemented by all derived classes and returns a
+        list of the important properties. The properties 'created' and
+        'modified' will be added automatically. A suffix '_count' should be
+        added to properties that are lists or query objects. The most important
+        property name should be returned as the first element in the list
+        because it is used by repr().
+        '''
+        return []
+
+    def json(self):
+        '''
+        Returns a JSON representation of the object based on the properties
+        returned from the properties() method.
+        '''
+        data = {}
+        # add created and modified
+        all_properties = self.properties() + ['created', 'modified']
+        for property in all_properties:
+            # check for list or query
+            if property[-6:] == '_count':
+                real_property = property[:-6]
+                if not hasattr(self, real_property):
+                    continue
+                value = getattr(self, real_property)
+                if hasattr(value, '__len__'):
+                    # list
+                    value = len(value)
+                elif hasattr(value, 'count'):
+                    # query (but not during validation)
+                    if self.in_validation:
+                        continue
+                    value = value.count()
+                else:
+                    raise KeyError('Do not understand property %s.' % property)
+            else:
+                if not hasattr(self, property):
+                    continue
+                # plain object
+                value = getattr(self, property)
+                if value is None:
+                    # skip None
+                    continue
+                elif isinstance(value, ORMObject):
+                    # use repr() for ORMObject types
+                    value = repr(value)
+                else:
+                    # we want a string for all other types because json cannot
+                    # encode everything
+                    value = str(value)
+            data[property] = value
+        return json.dumps(data)
+
+    def classname(self):
+        '''
+        Returns the name of the class.
+        '''
+        return type(self).__name__
+
+    def __repr__(self):
+        '''
+        Returns a short string representation of the object using the first
+        element from the properties() method.
+        '''
+        primary_property = self.properties()[0]
+        value = getattr(self, primary_property)
+        return '<%s %s>' % (self.classname(), str(value))
+
+    def __str__(self):
+        '''
+        Returns a human readable form of the object using the properties()
+        method.
+        '''
+        return '<%s %s>' % (self.classname(), self.json())
+
+    def not_null_constraints(self):
+        '''
+        Returns a list of properties that must be not NULL. Derived classes
+        should override this method if needed.
+        '''
+        return []
+
+    validation_message = \
+        "Validation failed because property '%s' must not be empty in object\n%s"
+
+    in_validation = False
+
+    def validate(self):
+        '''
+        This function validates the not NULL constraints as returned by
+        not_null_constraints(). It raises the DBUpdateError exception if
+        validation fails.
+        '''
+        for property in self.not_null_constraints():
+            # TODO: It is a bit awkward that the mapper configuration allow
+            # directly setting the numeric _id columns. We should get rid of it
+            # in the long run.
+            if hasattr(self, property + '_id') and \
+                getattr(self, property + '_id') is not None:
+                continue
+            if not hasattr(self, property) or getattr(self, property) is None:
+                # str() might lead to races due to a 2nd flush
+                self.in_validation = True
+                message = self.validation_message % (property, str(self))
+                self.in_validation = False
+                raise DBUpdateError(message)
+
+    @classmethod
+    @session_wrapper
+    def get(cls, primary_key,  session = None):
+        '''
+        This is a support function that allows getting an object by its primary
+        key.
+
+        Architecture.get(3[, session])
+
+        instead of the more verbose
+
+        session.query(Architecture).get(3)
+        '''
+        return session.query(cls).get(primary_key)
+
+    def session(self, replace = False):
+        '''
+        Returns the current session that is associated with the object. May
+        return None is object is in detached state.
+        '''
+
+        return object_session(self)
+
+    def clone(self, session = None):
+        '''
+        Clones the current object in a new session and returns the new clone. A
+        fresh session is created if the optional session parameter is not
+        provided. The function will fail if a session is provided and has
+        unflushed changes.
+
+        RATIONALE: SQLAlchemy's session is not thread safe. This method clones
+        an existing object to allow several threads to work with their own
+        instances of an ORMObject.
+
+        WARNING: Only persistent (committed) objects can be cloned. Changes
+        made to the original object that are not committed yet will get lost.
+        The session of the new object will always be rolled back to avoid
+        ressource leaks.
+        '''
+
+        if self.session() is None:
+            raise RuntimeError( \
+                'Method clone() failed for detached object:\n%s' % self)
+        self.session().flush()
+        mapper = object_mapper(self)
+        primary_key = mapper.primary_key_from_instance(self)
+        object_class = self.__class__
+        if session is None:
+            session = DBConn().session()
+        elif len(session.new) + len(session.dirty) + len(session.deleted) > 0:
+            raise RuntimeError( \
+                'Method clone() failed due to unflushed changes in session.')
+        new_object = session.query(object_class).get(primary_key)
+        session.rollback()
+        if new_object is None:
+            raise RuntimeError( \
+                'Method clone() failed for non-persistent object:\n%s' % self)
+        return new_object
+
+__all__.append('ORMObject')
+
+################################################################################
+
+class Validator(MapperExtension):
+    '''
+    This class calls the validate() method for each instance for the
+    'before_update' and 'before_insert' events. A global object validator is
+    used for configuring the individual mappers.
+    '''
+
+    def before_update(self, mapper, connection, instance):
+        instance.validate()
+        return EXT_CONTINUE
+
+    def before_insert(self, mapper, connection, instance):
+        instance.validate()
+        return EXT_CONTINUE
+
+validator = Validator()
+
+################################################################################
+
+class Architecture(ORMObject):
+    def __init__(self, arch_string = None, description = None):
+        self.arch_string = arch_string
+        self.description = description
 
     def __eq__(self, val):
         if isinstance(val, str):
@@ -151,8 +383,11 @@ class Architecture(object):
         # This signals to use the normal comparison operator
         return NotImplemented
 
-    def __repr__(self):
-        return '<Architecture %s>' % self.arch_string
+    def properties(self):
+        return ['arch_string', 'arch_id', 'suites_count']
+
+    def not_null_constraints(self):
+        return ['arch_string']
 
 __all__.append('Architecture')
 
@@ -181,6 +416,7 @@ def get_architecture(architecture, session=None):
 
 __all__.append('get_architecture')
 
+# TODO: should be removed because the implementation is too trivial
 @session_wrapper
 def get_architecture_suites(architecture, session=None):
     """
@@ -197,13 +433,7 @@ def get_architecture_suites(architecture, session=None):
     @return: list of Suite objects for the given name (may be empty)
     """
 
-    q = session.query(Suite)
-    q = q.join(SuiteArchitecture)
-    q = q.join(Architecture).filter_by(arch_string=architecture).order_by('suite_name')
-
-    ret = q.all()
-
-    return ret
+    return get_architecture(architecture, session).suites
 
 __all__.append('get_architecture_suites')
 
@@ -247,34 +477,103 @@ __all__.append('get_archive')
 
 ################################################################################
 
-class BinAssociation(object):
-    def __init__(self, *args, **kwargs):
-        pass
-
-    def __repr__(self):
-        return '<BinAssociation %s (%s, %s)>' % (self.ba_id, self.binary, self.suite)
-
-__all__.append('BinAssociation')
-
-################################################################################
-
-class BinContents(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class BinContents(ORMObject):
+    def __init__(self, file = None, binary = None):
+        self.file = file
+        self.binary = binary
 
-    def __repr__(self):
-        return '<BinContents (%s, %s)>' % (self.binary, self.filename)
+    def properties(self):
+        return ['file', 'binary']
 
 __all__.append('BinContents')
 
 ################################################################################
 
-class DBBinary(object):
-    def __init__(self, *args, **kwargs):
-        pass
+def subprocess_setup():
+    # Python installs a SIGPIPE handler by default. This is usually not what
+    # non-Python subprocesses expect.
+    signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+
+class DBBinary(ORMObject):
+    def __init__(self, package = None, source = None, version = None, \
+        maintainer = None, architecture = None, poolfile = None, \
+        binarytype = 'deb'):
+        self.package = package
+        self.source = source
+        self.version = version
+        self.maintainer = maintainer
+        self.architecture = architecture
+        self.poolfile = poolfile
+        self.binarytype = binarytype
 
-    def __repr__(self):
-        return '<DBBinary %s (%s, %s)>' % (self.package, self.version, self.architecture)
+    @property
+    def pkid(self):
+        return self.binary_id
+
+    def properties(self):
+        return ['package', 'version', 'maintainer', 'source', 'architecture', \
+            'poolfile', 'binarytype', 'fingerprint', 'install_date', \
+            'suites_count', 'binary_id', 'contents_count', 'extra_sources']
+
+    def not_null_constraints(self):
+        return ['package', 'version', 'maintainer', 'source',  'poolfile', \
+            'binarytype']
+
+    metadata = association_proxy('key', 'value')
+
+    def get_component_name(self):
+        return self.poolfile.location.component.component_name
+
+    def scan_contents(self):
+        '''
+        Yields the contents of the package. Only regular files are yielded and
+        the path names are normalized after converting them from either utf-8
+        or iso8859-1 encoding. It yields the string ' <EMPTY PACKAGE>' if the
+        package does not contain any regular file.
+        '''
+        fullpath = self.poolfile.fullpath
+        dpkg = Popen(['dpkg-deb', '--fsys-tarfile', fullpath], stdout = PIPE,
+            preexec_fn = subprocess_setup)
+        tar = TarFile.open(fileobj = dpkg.stdout, mode = 'r|')
+        for member in tar.getmembers():
+            if not member.isdir():
+                name = normpath(member.name)
+                # enforce proper utf-8 encoding
+                try:
+                    name.decode('utf-8')
+                except UnicodeDecodeError:
+                    name = name.decode('iso8859-1').encode('utf-8')
+                yield name
+        tar.close()
+        dpkg.stdout.close()
+        dpkg.wait()
+
+    def read_control(self):
+        '''
+        Reads the control information from a binary.
+
+        @rtype: text
+        @return: stanza text of the control section.
+        '''
+        import apt_inst
+        fullpath = self.poolfile.fullpath
+        deb_file = open(fullpath, 'r')
+        stanza = apt_inst.debExtractControl(deb_file)
+        deb_file.close()
+
+        return stanza
+
+    def read_control_fields(self):
+        '''
+        Reads the control information from a binary and return
+        as a dictionary.
+
+        @rtype: dict
+        @return: fields of the control section as a dictionary.
+        '''
+        import apt_pkg
+        stanza = self.read_control()
+        return apt_pkg.TagSection(stanza)
 
 __all__.append('DBBinary')
 
@@ -290,129 +589,42 @@ def get_suites_binary_in(package, session=None):
     @return: list of Suite objects for the given package
     """
 
-    return session.query(Suite).join(BinAssociation).join(DBBinary).filter_by(package=package).all()
+    return session.query(Suite).filter(Suite.binaries.any(DBBinary.package == package)).all()
 
 __all__.append('get_suites_binary_in')
 
 @session_wrapper
-def get_binary_from_id(binary_id, session=None):
-    """
-    Returns DBBinary object for given C{id}
-
-    @type binary_id: int
-    @param binary_id: Id of the required binary
-
-    @type session: Session
-    @param session: Optional SQLA session object (a temporary one will be
-    generated if not supplied)
-
-    @rtype: DBBinary
-    @return: DBBinary object for the given binary (None if not present)
-    """
-
-    q = session.query(DBBinary).filter_by(binary_id=binary_id)
-
-    try:
-        return q.one()
-    except NoResultFound:
-        return None
-
-__all__.append('get_binary_from_id')
-
-@session_wrapper
-def get_binaries_from_name(package, version=None, architecture=None, session=None):
-    """
-    Returns list of DBBinary objects for given C{package} name
+def get_component_by_package_suite(package, suite_list, arch_list=[], session=None):
+    '''
+    Returns the component name of the newest binary package in suite_list or
+    None if no package is found. The result can be optionally filtered by a list
+    of architecture names.
 
     @type package: str
     @param package: DBBinary package name to search for
 
-    @type version: str or None
-    @param version: Version to search for (or None)
-
-    @type architecture: str, list or None
-    @param architecture: Architectures to limit to (or None if no limit)
-
-    @type session: Session
-    @param session: Optional SQL session object (a temporary one will be
-    generated if not supplied)
-
-    @rtype: list
-    @return: list of DBBinary objects for the given name (may be empty)
-    """
-
-    q = session.query(DBBinary).filter_by(package=package)
-
-    if version is not None:
-        q = q.filter_by(version=version)
-
-    if architecture is not None:
-        if not isinstance(architecture, list):
-            architecture = [architecture]
-        q = q.join(Architecture).filter(Architecture.arch_string.in_(architecture))
-
-    ret = q.all()
-
-    return ret
-
-__all__.append('get_binaries_from_name')
-
-@session_wrapper
-def get_binaries_from_source_id(source_id, session=None):
-    """
-    Returns list of DBBinary objects for given C{source_id}
-
-    @type source_id: int
-    @param source_id: source_id to search for
-
-    @type session: Session
-    @param session: Optional SQL session object (a temporary one will be
-    generated if not supplied)
-
-    @rtype: list
-    @return: list of DBBinary objects for the given name (may be empty)
-    """
-
-    return session.query(DBBinary).filter_by(source_id=source_id).all()
-
-__all__.append('get_binaries_from_source_id')
-
-@session_wrapper
-def get_binary_from_name_suite(package, suitename, session=None):
-    ### For dak examine-package
-    ### XXX: Doesn't use object API yet
-
-    sql = """SELECT DISTINCT(b.package), b.version, c.name, su.suite_name
-             FROM binaries b, files fi, location l, component c, bin_associations ba, suite su
-             WHERE b.package='%(package)s'
-               AND b.file = fi.id
-               AND fi.location = l.id
-               AND l.component = c.id
-               AND ba.bin=b.id
-               AND ba.suite = su.id
-               AND su.suite_name %(suitename)s
-          ORDER BY b.version DESC"""
+    @type suite_list: list of str
+    @param suite_list: list of suite_name items
 
-    return session.execute(sql % {'package': package, 'suitename': suitename})
+    @type arch_list: list of str
+    @param arch_list: optional list of arch_string items that defaults to []
 
-__all__.append('get_binary_from_name_suite')
+    @rtype: str or NoneType
+    @return: name of component or None
+    '''
 
-@session_wrapper
-def get_binary_components(package, suitename, arch, session=None):
-    # Check for packages that have moved from one component to another
-    query = """SELECT c.name FROM binaries b, bin_associations ba, suite s, location l, component c, architecture a, files f
-    WHERE b.package=:package AND s.suite_name=:suitename
-      AND (a.arch_string = :arch OR a.arch_string = 'all')
-      AND ba.bin = b.id AND ba.suite = s.id AND b.architecture = a.id
-      AND f.location = l.id
-      AND l.component = c.id
-      AND b.file = f.id"""
-
-    vals = {'package': package, 'suitename': suitename, 'arch': arch}
-
-    return session.execute(query, vals)
+    q = session.query(DBBinary).filter_by(package = package). \
+        join(DBBinary.suites).filter(Suite.suite_name.in_(suite_list))
+    if len(arch_list) > 0:
+        q = q.join(DBBinary.architecture). \
+            filter(Architecture.arch_string.in_(arch_list))
+    binary = q.order_by(desc(DBBinary.version)).first()
+    if binary is None:
+        return None
+    else:
+        return binary.get_component_name()
 
-__all__.append('get_binary_components')
+__all__.append('get_component_by_package_suite')
 
 ################################################################################
 
@@ -499,6 +711,7 @@ class BuildQueue(object):
         try:
             # Grab files we want to include
             newer = session.query(BuildQueueFile).filter_by(build_queue_id = self.queue_id).filter(BuildQueueFile.lastused + timedelta(seconds=self.stay_of_execution) > starttime).all()
+            newer += session.query(BuildQueuePolicyFile).filter_by(build_queue_id = self.queue_id).filter(BuildQueuePolicyFile.lastused + timedelta(seconds=self.stay_of_execution) > starttime).all()
             # Write file list with newer files
             (fl_fd, fl_name) = mkstemp()
             for n in newer:
@@ -591,6 +804,7 @@ class BuildQueue(object):
 
         # Grab files older than our execution time
         older = session.query(BuildQueueFile).filter_by(build_queue_id = self.queue_id).filter(BuildQueueFile.lastused + timedelta(seconds=self.stay_of_execution) <= starttime).all()
+        older += session.query(BuildQueuePolicyFile).filter_by(build_queue_id = self.queue_id).filter(BuildQueuePolicyFile.lastused + timedelta(seconds=self.stay_of_execution) <= starttime).all()
 
         for o in older:
             killdb = False
@@ -618,9 +832,7 @@ class BuildQueue(object):
             if f.startswith('Packages') or f.startswith('Source') or f.startswith('Release') or f.startswith('advisory'):
                 continue
 
-            try:
-                r = session.query(BuildQueueFile).filter_by(build_queue_id = self.queue_id).filter_by(filename = f).one()
-            except NoResultFound:
+            if not self.contains_filename(f):
                 fp = os.path.join(self.path, f)
                 if dryrun:
                     Logger.log(["I: Would remove unused link %s" % fp])
@@ -631,6 +843,18 @@ class BuildQueue(object):
                     except OSError:
                         Logger.log(["E: Failed to unlink unreferenced file %s" % r.fullpath])
 
+    def contains_filename(self, filename):
+        """
+        @rtype Boolean
+        @returns True if filename is supposed to be in the queue; False otherwise
+        """
+        session = DBConn().session().object_session(self)
+        if session.query(BuildQueueFile).filter_by(build_queue_id = self.queue_id, filename = filename).count() > 0:
+            return True
+        elif session.query(BuildQueuePolicyFile).filter_by(build_queue = self, filename = filename).count() > 0:
+            return True
+        return False
+
     def add_file_from_pool(self, poolfile):
         """Copies a file into the pool.  Assumes that the PoolFile object is
         attached to the same SQLAlchemy session as the Queue object is.
@@ -640,8 +864,8 @@ class BuildQueue(object):
 
         # Check if we have a file of this name or this ID already
         for f in self.queuefiles:
-            if f.fileid is not None and f.fileid == poolfile.file_id or \
-               f.poolfile.filename == poolfile_basename:
+            if (f.fileid is not None and f.fileid == poolfile.file_id) or \
+               (f.poolfile is not None and f.poolfile.filename == poolfile_basename):
                    # In this case, update the BuildQueueFile entry so we
                    # don't remove it too early
                    f.lastused = datetime.now()
@@ -667,6 +891,9 @@ class BuildQueue(object):
             else:
                 os.symlink(targetpath, queuepath)
                 qf.fileid = poolfile.file_id
+        except FileExistsError:
+            if not poolfile.identical_to(queuepath):
+                raise
         except OSError:
             return None
 
@@ -675,6 +902,64 @@ class BuildQueue(object):
 
         return qf
 
+    def add_changes_from_policy_queue(self, policyqueue, changes):
+        """
+        Copies a changes from a policy queue together with its poolfiles.
+
+        @type policyqueue: PolicyQueue
+        @param policyqueue: policy queue to copy the changes from
+
+        @type changes: DBChange
+        @param changes: changes to copy to this build queue
+        """
+        for policyqueuefile in changes.files:
+            self.add_file_from_policy_queue(policyqueue, policyqueuefile)
+        for poolfile in changes.poolfiles:
+            self.add_file_from_pool(poolfile)
+
+    def add_file_from_policy_queue(self, policyqueue, policyqueuefile):
+        """
+        Copies a file from a policy queue.
+        Assumes that the policyqueuefile is attached to the same SQLAlchemy
+        session as the Queue object is.  The caller is responsible for
+        committing after calling this function.
+
+        @type policyqueue: PolicyQueue
+        @param policyqueue: policy queue to copy the file from
+
+        @type policyqueuefile: ChangePendingFile
+        @param policyqueuefile: file to be added to the build queue
+        """
+        session = DBConn().session().object_session(policyqueuefile)
+
+        # Is the file already there?
+        try:
+            f = session.query(BuildQueuePolicyFile).filter_by(build_queue=self, file=policyqueuefile).one()
+            f.lastused = datetime.now()
+            return f
+        except NoResultFound:
+            pass # continue below
+
+        # We have to add the file.
+        f = BuildQueuePolicyFile()
+        f.build_queue = self
+        f.file = policyqueuefile
+        f.filename = policyqueuefile.filename
+
+        source = os.path.join(policyqueue.path, policyqueuefile.filename)
+        target = f.fullpath
+        try:
+            # Always copy files from policy queues as they might move around.
+            import utils
+            utils.copy(source, target)
+        except FileExistsError:
+            if not policyqueuefile.identical_to(target):
+                raise
+        except OSError:
+            return None
+
+        session.add(f)
+        return f
 
 __all__.append('BuildQueue')
 
@@ -707,6 +992,10 @@ __all__.append('get_build_queue')
 ################################################################################
 
 class BuildQueueFile(object):
+    """
+    BuildQueueFile represents a file in a build queue coming from a pool.
+    """
+
     def __init__(self, *args, **kwargs):
         pass
 
@@ -722,6 +1011,27 @@ __all__.append('BuildQueueFile')
 
 ################################################################################
 
+class BuildQueuePolicyFile(object):
+    """
+    BuildQueuePolicyFile represents a file in a build queue that comes from a
+    policy queue (and not a pool).
+    """
+
+    def __init__(self, *args, **kwargs):
+        pass
+
+    #@property
+    #def filename(self):
+    #    return self.file.filename
+
+    @property
+    def fullpath(self):
+        return os.path.join(self.build_queue.path, self.filename)
+
+__all__.append('BuildQueuePolicyFile')
+
+################################################################################
+
 class ChangePendingBinary(object):
     def __init__(self, *args, **kwargs):
         pass
@@ -740,6 +1050,24 @@ class ChangePendingFile(object):
     def __repr__(self):
         return '<ChangePendingFile %s>' % self.change_pending_file_id
 
+    def identical_to(self, filename):
+        """
+        compare size and hash with the given file
+
+        @rtype: bool
+        @return: true if the given file has the same size and hash as this object; false otherwise
+        """
+        st = os.stat(filename)
+        if self.size != st.st_size:
+            return False
+
+        f = open(filename, "r")
+        sha256sum = apt_pkg.sha256sum(f)
+        if sha256sum != self.sha256sum:
+            return False
+
+        return True
+
 __all__.append('ChangePendingFile')
 
 ################################################################################
@@ -755,9 +1083,9 @@ __all__.append('ChangePendingSource')
 
 ################################################################################
 
-class Component(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class Component(ORMObject):
+    def __init__(self, component_name = None):
+        self.component_name = component_name
 
     def __eq__(self, val):
         if isinstance(val, str):
@@ -771,8 +1099,12 @@ class Component(object):
         # This signals to use the normal comparison operator
         return NotImplemented
 
-    def __repr__(self):
-        return '<Component %s>' % self.component_name
+    def properties(self):
+        return ['component_name', 'component_id', 'description', \
+            'location_count', 'meets_dfsg', 'overrides_count']
+
+    def not_null_constraints(self):
+        return ['component_name']
 
 
 __all__.append('Component')
@@ -1052,24 +1384,64 @@ __all__.append('get_dscfiles')
 
 ################################################################################
 
-class PoolFile(object):
+class ExternalOverride(ORMObject):
     def __init__(self, *args, **kwargs):
         pass
 
     def __repr__(self):
-        return '<PoolFile %s>' % self.filename
+        return '<ExternalOverride %s = %s: %s>' % (self.package, self.key, self.value)
+
+__all__.append('ExternalOverride')
+
+################################################################################
+
+class PoolFile(ORMObject):
+    def __init__(self, filename = None, location = None, filesize = -1, \
+        md5sum = None):
+        self.filename = filename
+        self.location = location
+        self.filesize = filesize
+        self.md5sum = md5sum
 
     @property
     def fullpath(self):
         return os.path.join(self.location.path, self.filename)
 
+    def is_valid(self, filesize = -1, md5sum = None):
+        return self.filesize == long(filesize) and self.md5sum == md5sum
+
+    def properties(self):
+        return ['filename', 'file_id', 'filesize', 'md5sum', 'sha1sum', \
+            'sha256sum', 'location', 'source', 'binary', 'last_used']
+
+    def not_null_constraints(self):
+        return ['filename', 'md5sum', 'location']
+
+    def identical_to(self, filename):
+        """
+        compare size and hash with the given file
+
+        @rtype: bool
+        @return: true if the given file has the same size and hash as this object; false otherwise
+        """
+        st = os.stat(filename)
+        if self.filesize != st.st_size:
+            return False
+
+        f = open(filename, "r")
+        sha256sum = apt_pkg.sha256sum(f)
+        if sha256sum != self.sha256sum:
+            return False
+
+        return True
+
 __all__.append('PoolFile')
 
 @session_wrapper
 def check_poolfile(filename, filesize, md5sum, location_id, session=None):
     """
     Returns a tuple:
-    (ValidFileFound [boolean or None], PoolFile object or None)
+    (ValidFileFound [boolean], PoolFile object or None)
 
     @type filename: string
     @param filename: the filename of the file to check against the DB
@@ -1085,34 +1457,24 @@ def check_poolfile(filename, filesize, md5sum, location_id, session=None):
 
     @rtype: tuple
     @return: Tuple of length 2.
-                 - If more than one file found with that name: (C{None},  C{None})
                  - If valid pool file found: (C{True}, C{PoolFile object})
                  - If valid pool file not found:
                      - (C{False}, C{None}) if no file found
                      - (C{False}, C{PoolFile object}) if file found with size/md5sum mismatch
     """
 
-    q = session.query(PoolFile).filter_by(filename=filename)
-    q = q.join(Location).filter_by(location_id=location_id)
+    poolfile = session.query(Location).get(location_id). \
+        files.filter_by(filename=filename).first()
+    valid = False
+    if poolfile and poolfile.is_valid(filesize = filesize, md5sum = md5sum):
+        valid = True
 
-    ret = None
-
-    if q.count() > 1:
-        ret = (None, None)
-    elif q.count() < 1:
-        ret = (False, None)
-    else:
-        obj = q.one()
-        if obj.md5sum != md5sum or obj.filesize != int(filesize):
-            ret = (False, obj)
-
-    if ret is None:
-        ret = (True, obj)
-
-    return ret
+    return (valid, poolfile)
 
 __all__.append('check_poolfile')
 
+# TODO: the implementation can trivially be inlined at the place where the
+# function is called
 @session_wrapper
 def get_poolfile_by_id(file_id, session=None):
     """
@@ -1125,41 +1487,10 @@ def get_poolfile_by_id(file_id, session=None):
     @return: either the PoolFile object or None
     """
 
-    q = session.query(PoolFile).filter_by(file_id=file_id)
-
-    try:
-        return q.one()
-    except NoResultFound:
-        return None
+    return session.query(PoolFile).get(file_id)
 
 __all__.append('get_poolfile_by_id')
 
-
-@session_wrapper
-def get_poolfile_by_name(filename, location_id=None, session=None):
-    """
-    Returns an array of PoolFile objects for the given filename and
-    (optionally) location_id
-
-    @type filename: string
-    @param filename: the filename of the file to check against the DB
-
-    @type location_id: int
-    @param location_id: the id of the location to look in (optional)
-
-    @rtype: array
-    @return: array of PoolFile objects
-    """
-
-    q = session.query(PoolFile).filter_by(filename=filename)
-
-    if location_id is not None:
-        q = q.join(Location).filter_by(location_id=location_id)
-
-    return q.all()
-
-__all__.append('get_poolfile_by_name')
-
 @session_wrapper
 def get_poolfile_like_name(filename, session=None):
     """
@@ -1214,12 +1545,16 @@ __all__.append('add_poolfile')
 
 ################################################################################
 
-class Fingerprint(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class Fingerprint(ORMObject):
+    def __init__(self, fingerprint = None):
+        self.fingerprint = fingerprint
 
-    def __repr__(self):
-        return '<Fingerprint %s>' % self.fingerprint
+    def properties(self):
+        return ['fingerprint', 'fingerprint_id', 'keyring', 'uid', \
+            'binary_reject']
+
+    def not_null_constraints(self):
+        return ['fingerprint']
 
 __all__.append('Fingerprint')
 
@@ -1317,9 +1652,17 @@ class Keyring(object):
             esclist[x] = "%c" % (int(esclist[x][2:],16))
         return "".join(esclist)
 
-    def load_keys(self, keyring):
+    def parse_address(self, uid):
+        """parses uid and returns a tuple of real name and email address"""
         import email.Utils
+        (name, address) = email.Utils.parseaddr(uid)
+        name = re.sub(r"\s*[(].*[)]", "", name)
+        name = self.de_escape_gpg_str(name)
+        if name == "":
+            name = uid
+        return (name, address)
 
+    def load_keys(self, keyring):
         if not self.keyring_id:
             raise Exception('Must be initialized with database information')
 
@@ -1331,24 +1674,20 @@ class Keyring(object):
             field = line.split(":")
             if field[0] == "pub":
                 key = field[4]
-                (name, addr) = email.Utils.parseaddr(field[9])
-                name = re.sub(r"\s*[(].*[)]", "", name)
-                if name == "" or addr == "" or "@" not in addr:
-                    name = field[9]
-                    addr = "invalid-uid"
-                name = self.de_escape_gpg_str(name)
-                self.keys[key] = {"email": addr}
-                if name != "":
+                self.keys[key] = {}
+                (name, addr) = self.parse_address(field[9])
+                if "@" in addr:
+                    self.keys[key]["email"] = addr
                     self.keys[key]["name"] = name
-                self.keys[key]["aliases"] = [name]
                 self.keys[key]["fingerprints"] = []
                 signingkey = True
             elif key and field[0] == "sub" and len(field) >= 12:
                 signingkey = ("s" in field[11])
             elif key and field[0] == "uid":
-                (name, addr) = email.Utils.parseaddr(field[9])
-                if name and name not in self.keys[key]["aliases"]:
-                    self.keys[key]["aliases"].append(name)
+                (name, addr) = self.parse_address(field[9])
+                if "email" not in self.keys[key] and "@" in addr:
+                    self.keys[key]["email"] = addr
+                    self.keys[key]["name"] = name
             elif signingkey and field[0] == "fpr":
                 self.keys[key]["fingerprints"].append(field[9])
                 self.fpr_lookup[field[9]] = key
@@ -1396,7 +1735,7 @@ class Keyring(object):
         byname = {}
         any_invalid = False
         for x in self.keys.keys():
-            if self.keys[x]["email"] == "invalid-uid":
+            if "email" not in self.keys[x]:
                 any_invalid = True
                 self.keys[x]["uid"] = format % "invalid-uid"
             else:
@@ -1500,12 +1839,19 @@ __all__.append('get_dbchange')
 
 ################################################################################
 
-class Location(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class Location(ORMObject):
+    def __init__(self, path = None, component = None):
+        self.path = path
+        self.component = component
+        # the column 'type' should go away, see comment at mapper
+        self.archive_type = 'pool'
 
-    def __repr__(self):
-        return '<Location %s (%s)>' % (self.path, self.location_id)
+    def properties(self):
+        return ['path', 'location_id', 'archive_type', 'component', \
+            'files_count']
+
+    def not_null_constraints(self):
+        return ['path', 'archive_type']
 
 __all__.append('Location')
 
@@ -1545,12 +1891,15 @@ __all__.append('get_location')
 
 ################################################################################
 
-class Maintainer(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class Maintainer(ORMObject):
+    def __init__(self, name = None):
+        self.name = name
 
-    def __repr__(self):
-        return '''<Maintainer '%s' (%s)>''' % (self.name, self.maintainer_id)
+    def properties(self):
+        return ['name', 'maintainer_id']
+
+    def not_null_constraints(self):
+        return ['name']
 
     def get_split_maintainer(self):
         if not hasattr(self, 'name') or self.name is None:
@@ -1683,12 +2032,22 @@ __all__.append('get_new_comments')
 
 ################################################################################
 
-class Override(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class Override(ORMObject):
+    def __init__(self, package = None, suite = None, component = None, overridetype = None, \
+        section = None, priority = None):
+        self.package = package
+        self.suite = suite
+        self.component = component
+        self.overridetype = overridetype
+        self.section = section
+        self.priority = priority
 
-    def __repr__(self):
-        return '<Override %s (%s)>' % (self.package, self.suite_id)
+    def properties(self):
+        return ['package', 'suite', 'component', 'overridetype', 'section', \
+            'priority']
+
+    def not_null_constraints(self):
+        return ['package', 'suite', 'component', 'overridetype', 'section']
 
 __all__.append('Override')
 
@@ -1742,12 +2101,15 @@ __all__.append('get_override')
 
 ################################################################################
 
-class OverrideType(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class OverrideType(ORMObject):
+    def __init__(self, overridetype = None):
+        self.overridetype = overridetype
 
-    def __repr__(self):
-        return '<OverrideType %s>' % self.overridetype
+    def properties(self):
+        return ['overridetype', 'overridetype_id', 'overrides_count']
+
+    def not_null_constraints(self):
+        return ['overridetype']
 
 __all__.append('OverrideType')
 
@@ -1778,111 +2140,6 @@ __all__.append('get_override_type')
 
 ################################################################################
 
-class DebContents(object):
-    def __init__(self, *args, **kwargs):
-        pass
-
-    def __repr__(self):
-        return '<DebConetnts %s: %s>' % (self.package.package,self.file)
-
-__all__.append('DebContents')
-
-
-class UdebContents(object):
-    def __init__(self, *args, **kwargs):
-        pass
-
-    def __repr__(self):
-        return '<UdebConetnts %s: %s>' % (self.package.package,self.file)
-
-__all__.append('UdebContents')
-
-class PendingBinContents(object):
-    def __init__(self, *args, **kwargs):
-        pass
-
-    def __repr__(self):
-        return '<PendingBinContents %s>' % self.contents_id
-
-__all__.append('PendingBinContents')
-
-def insert_pending_content_paths(package,
-                                 is_udeb,
-                                 fullpaths,
-                                 session=None):
-    """
-    Make sure given paths are temporarily associated with given
-    package
-
-    @type package: dict
-    @param package: the package to associate with should have been read in from the binary control file
-    @type fullpaths: list
-    @param fullpaths: the list of paths of the file being associated with the binary
-    @type session: SQLAlchemy session
-    @param session: Optional SQLAlchemy session.  If this is passed, the caller
-    is responsible for ensuring a transaction has begun and committing the
-    results or rolling back based on the result code.  If not passed, a commit
-    will be performed at the end of the function
-
-    @return: True upon success, False if there is a problem
-    """
-
-    privatetrans = False
-
-    if session is None:
-        session = DBConn().session()
-        privatetrans = True
-
-    try:
-        arch = get_architecture(package['Architecture'], session)
-        arch_id = arch.arch_id
-
-        # Remove any already existing recorded files for this package
-        q = session.query(PendingBinContents)
-        q = q.filter_by(package=package['Package'])
-        q = q.filter_by(version=package['Version'])
-        q = q.filter_by(architecture=arch_id)
-        q.delete()
-
-        for fullpath in fullpaths:
-
-            if fullpath.startswith( "./" ):
-                fullpath = fullpath[2:]
-
-            pca = PendingBinContents()
-            pca.package = package['Package']
-            pca.version = package['Version']
-            pca.file = fullpath
-            pca.architecture = arch_id
-
-            if isudeb:
-                pca.type = 8 # gross
-            else:
-                pca.type = 7 # also gross
-            session.add(pca)
-
-        # Only commit if we set up the session ourself
-        if privatetrans:
-            session.commit()
-            session.close()
-        else:
-            session.flush()
-
-        return True
-    except Exception, e:
-        traceback.print_exc()
-
-        # Only rollback if we set up the session ourself
-        if privatetrans:
-            session.rollback()
-            session.close()
-
-        return False
-
-__all__.append('insert_pending_content_paths')
-
-################################################################################
-
 class PolicyQueue(object):
     def __init__(self, *args, **kwargs):
         pass
@@ -1944,9 +2201,16 @@ __all__.append('get_policy_queue_from_path')
 
 ################################################################################
 
-class Priority(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class Priority(ORMObject):
+    def __init__(self, priority = None, level = None):
+        self.priority = priority
+        self.level = level
+
+    def properties(self):
+        return ['priority', 'priority_id', 'level', 'overrides_count']
+
+    def not_null_constraints(self):
+        return ['priority', 'level']
 
     def __eq__(self, val):
         if isinstance(val, str):
@@ -1960,9 +2224,6 @@ class Priority(object):
         # This signals to use the normal comparison operator
         return NotImplemented
 
-    def __repr__(self):
-        return '<Priority %s (%s)>' % (self.priority, self.priority_id)
-
 __all__.append('Priority')
 
 @session_wrapper
@@ -2014,9 +2275,15 @@ __all__.append('get_priorities')
 
 ################################################################################
 
-class Section(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class Section(ORMObject):
+    def __init__(self, section = None):
+        self.section = section
+
+    def properties(self):
+        return ['section', 'section_id', 'overrides_count']
+
+    def not_null_constraints(self):
+        return ['section']
 
     def __eq__(self, val):
         if isinstance(val, str):
@@ -2030,9 +2297,6 @@ class Section(object):
         # This signals to use the normal comparison operator
         return NotImplemented
 
-    def __repr__(self):
-        return '<Section %s>' % self.section
-
 __all__.append('Section')
 
 @session_wrapper
@@ -2084,12 +2348,126 @@ __all__.append('get_sections')
 
 ################################################################################
 
-class DBSource(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class SrcContents(ORMObject):
+    def __init__(self, file = None, source = None):
+        self.file = file
+        self.source = source
 
-    def __repr__(self):
-        return '<DBSource %s (%s)>' % (self.source, self.version)
+    def properties(self):
+        return ['file', 'source']
+
+__all__.append('SrcContents')
+
+################################################################################
+
+from debian.debfile import Deb822
+
+# Temporary Deb822 subclass to fix bugs with : handling; see #597249
+class Dak822(Deb822):
+    def _internal_parser(self, sequence, fields=None):
+        # The key is non-whitespace, non-colon characters before any colon.
+        key_part = r"^(?P<key>[^: \t\n\r\f\v]+)\s*:\s*"
+        single = re.compile(key_part + r"(?P<data>\S.*?)\s*$")
+        multi = re.compile(key_part + r"$")
+        multidata = re.compile(r"^\s(?P<data>.+?)\s*$")
+
+        wanted_field = lambda f: fields is None or f in fields
+
+        if isinstance(sequence, basestring):
+            sequence = sequence.splitlines()
+
+        curkey = None
+        content = ""
+        for line in self.gpg_stripped_paragraph(sequence):
+            m = single.match(line)
+            if m:
+                if curkey:
+                    self[curkey] = content
+
+                if not wanted_field(m.group('key')):
+                    curkey = None
+                    continue
+
+                curkey = m.group('key')
+                content = m.group('data')
+                continue
+
+            m = multi.match(line)
+            if m:
+                if curkey:
+                    self[curkey] = content
+
+                if not wanted_field(m.group('key')):
+                    curkey = None
+                    continue
+
+                curkey = m.group('key')
+                content = ""
+                continue
+
+            m = multidata.match(line)
+            if m:
+                content += '\n' + line # XXX not m.group('data')?
+                continue
+
+        if curkey:
+            self[curkey] = content
+
+
+class DBSource(ORMObject):
+    def __init__(self, source = None, version = None, maintainer = None, \
+        changedby = None, poolfile = None, install_date = None):
+        self.source = source
+        self.version = version
+        self.maintainer = maintainer
+        self.changedby = changedby
+        self.poolfile = poolfile
+        self.install_date = install_date
+
+    @property
+    def pkid(self):
+        return self.source_id
+
+    def properties(self):
+        return ['source', 'source_id', 'maintainer', 'changedby', \
+            'fingerprint', 'poolfile', 'version', 'suites_count', \
+            'install_date', 'binaries_count', 'uploaders_count']
+
+    def not_null_constraints(self):
+        return ['source', 'version', 'install_date', 'maintainer', \
+            'changedby', 'poolfile', 'install_date']
+
+    def read_control_fields(self):
+        '''
+        Reads the control information from a dsc
+
+        @rtype: tuple
+        @return: fields is the dsc information in a dictionary form
+        '''
+        fullpath = self.poolfile.fullpath
+        fields = Dak822(open(self.poolfile.fullpath, 'r'))
+        return fields
+
+    metadata = association_proxy('key', 'value')
+
+    def scan_contents(self):
+        '''
+        Returns a set of names for non directories. The path names are
+        normalized after converting them from either utf-8 or iso8859-1
+        encoding.
+        '''
+        fullpath = self.poolfile.fullpath
+        from daklib.contents import UnpackedSource
+        unpacked = UnpackedSource(fullpath)
+        fileset = set()
+        for name in unpacked.get_all_filenames():
+            # enforce proper utf-8 encoding
+            try:
+                name.decode('utf-8')
+            except UnicodeDecodeError:
+                name = name.decode('iso8859-1').encode('utf-8')
+            fileset.add(name)
+        return fileset
 
 __all__.append('DBSource')
 
@@ -2120,10 +2498,14 @@ def source_exists(source, source_version, suites = ["any"], session=None):
     """
 
     cnf = Config()
-    ret = 1
+    ret = True
+
+    from daklib.regexes import re_bin_only_nmu
+    orig_source_version = re_bin_only_nmu.sub('', source_version)
 
     for suite in suites:
-        q = session.query(DBSource).filter_by(source=source)
+        q = session.query(DBSource).filter_by(source=source). \
+            filter(DBSource.version.in_([source_version, orig_source_version]))
         if suite != "any":
             # source must exist in suite X, or in some other suite that's
             # mapped to X, recursively... silent-maps are counted too,
@@ -2134,28 +2516,17 @@ def source_exists(source, source_version, suites = ["any"], session=None):
             maps = [ (x[1], x[2]) for x in maps
                             if x[0] == "map" or x[0] == "silent-map" ]
             s = [suite]
-            for x in maps:
-                if x[1] in s and x[0] not in s:
-                    s.append(x[0])
-
-            q = q.join(SrcAssociation).join(Suite)
-            q = q.filter(Suite.suite_name.in_(s))
+            for (from_, to) in maps:
+                if from_ in s and to not in s:
+                    s.append(to)
 
-        # Reduce the query results to a list of version numbers
-        ql = [ j.version for j in q.all() ]
+            q = q.filter(DBSource.suites.any(Suite.suite_name.in_(s)))
 
-        # Try (1)
-        if source_version in ql:
-            continue
-
-        # Try (2)
-        from daklib.regexes import re_bin_only_nmu
-        orig_source_version = re_bin_only_nmu.sub('', source_version)
-        if orig_source_version in ql:
+        if q.count() > 0:
             continue
 
         # No source found so return not ok
-        ret = 0
+        ret = False
 
     return ret
 
@@ -2173,7 +2544,7 @@ def get_suites_source_in(source, session=None):
     @return: list of Suite objects for the given source
     """
 
-    return session.query(Suite).join(SrcAssociation).join(DBSource).filter_by(source=source).all()
+    return session.query(Suite).filter(Suite.sources.any(source=source)).all()
 
 __all__.append('get_suites_source_in')
 
@@ -2212,10 +2583,12 @@ def get_sources_from_name(source, version=None, dm_upload_allowed=None, session=
 
 __all__.append('get_sources_from_name')
 
+# FIXME: This function fails badly if it finds more than 1 source package and
+# its implementation is trivial enough to be inlined.
 @session_wrapper
 def get_source_in_suite(source, suite, session=None):
     """
-    Returns list of DBSource objects for a combination of C{source} and C{suite}.
+    Returns a DBSource object for a combination of C{source} and C{suite}.
 
       - B{source} - source package name, eg. I{mailfilter}, I{bbdb}, I{glibc}
       - B{suite} - a suite name, eg. I{unstable}
@@ -2231,17 +2604,42 @@ def get_source_in_suite(source, suite, session=None):
 
     """
 
-    q = session.query(SrcAssociation)
-    q = q.join('source').filter_by(source=source)
-    q = q.join('suite').filter_by(suite_name=suite)
-
+    q = get_suite(suite, session).get_sources(source)
     try:
-        return q.one().source
+        return q.one()
     except NoResultFound:
         return None
 
 __all__.append('get_source_in_suite')
 
+@session_wrapper
+def import_metadata_into_db(obj, session=None):
+    """
+    This routine works on either DBBinary or DBSource objects and imports
+    their metadata into the database
+    """
+    fields = obj.read_control_fields()
+    for k in fields.keys():
+        try:
+            # Try raw ASCII
+            val = str(fields[k])
+        except UnicodeEncodeError:
+            # Fall back to UTF-8
+            try:
+                val = fields[k].encode('utf-8')
+            except UnicodeEncodeError:
+                # Finally try iso8859-1
+                val = fields[k].encode('iso8859-1')
+                # Otherwise we allow the exception to percolate up and we cause
+                # a reject as someone is playing silly buggers
+
+        obj.metadata[get_or_set_metadatakey(k, session)] = val
+
+    session.commit_or_flush()
+
+__all__.append('import_metadata_into_db')
+
+
 ################################################################################
 
 @session_wrapper
@@ -2253,7 +2651,11 @@ def add_dsc_to_db(u, filename, session=None):
     source.source = u.pkg.dsc["source"]
     source.version = u.pkg.dsc["version"] # NB: not files[file]["version"], that has no epoch
     source.maintainer_id = get_or_set_maintainer(u.pkg.dsc["maintainer"], session).maintainer_id
-    source.changedby_id = get_or_set_maintainer(u.pkg.changes["changed-by"], session).maintainer_id
+    # If Changed-By isn't available, fall back to maintainer
+    if u.pkg.changes.has_key("changed-by"):
+        source.changedby_id = get_or_set_maintainer(u.pkg.changes["changed-by"], session).maintainer_id
+    else:
+        source.changedby_id = get_or_set_maintainer(u.pkg.dsc["maintainer"], session).maintainer_id
     source.fingerprint_id = get_or_set_fingerprint(u.pkg.changes["fingerprint"], session).fingerprint_id
     source.install_date = datetime.now().date()
 
@@ -2272,15 +2674,10 @@ def add_dsc_to_db(u, filename, session=None):
 
     source.poolfile_id = entry["files id"]
     session.add(source)
-    session.flush()
-
-    for suite_name in u.pkg.changes["distribution"].keys():
-        sa = SrcAssociation()
-        sa.source_id = source.source_id
-        sa.suite_id = get_suite(suite_name).suite_id
-        session.add(sa)
 
-    session.flush()
+    suite_names = u.pkg.changes["distribution"].keys()
+    source.suites = session.query(Suite). \
+        filter(Suite.suite_name.in_(suite_names)).all()
 
     # Add the source files to the DB (files and dsc_files)
     dscfile = DSCFile()
@@ -2330,28 +2727,14 @@ def add_dsc_to_db(u, filename, session=None):
         df.poolfile_id = files_id
         session.add(df)
 
-    session.flush()
-
     # Add the src_uploaders to the DB
-    uploader_ids = [source.maintainer_id]
+    session.flush()
+    session.refresh(source)
+    source.uploaders = [source.maintainer]
     if u.pkg.dsc.has_key("uploaders"):
         for up in u.pkg.dsc["uploaders"].replace(">, ", ">\t").split("\t"):
             up = up.strip()
-            uploader_ids.append(get_or_set_maintainer(up, session).maintainer_id)
-
-    added_ids = {}
-    for up_id in uploader_ids:
-        if added_ids.has_key(up_id):
-            import utils
-            utils.warn("Already saw uploader %s for source %s" % (up_id, source.source))
-            continue
-
-        added_ids[up_id]=1
-
-        su = SrcUploader()
-        su.maintainer_id = up_id
-        su.source_id = source.source_id
-        session.add(su)
+            source.uploaders.append(get_or_set_maintainer(up, session))
 
     session.flush()
 
@@ -2394,21 +2777,27 @@ def add_deb_to_db(u, filename, session=None):
     bin_sources = get_sources_from_name(entry["source package"], entry["source version"], session=session)
     if len(bin_sources) != 1:
         raise NoSourceFieldError, "Unable to find a unique source id for %s (%s), %s, file %s, type %s, signed by %s" % \
-                                  (bin.package, bin.version, bin.architecture.arch_string,
+                                  (bin.package, bin.version, entry["architecture"],
                                    filename, bin.binarytype, u.pkg.changes["fingerprint"])
 
     bin.source_id = bin_sources[0].source_id
 
+    if entry.has_key("built-using"):
+        for srcname, version in entry["built-using"]:
+            exsources = get_sources_from_name(srcname, version, session=session)
+            if len(exsources) != 1:
+                raise NoSourceFieldError, "Unable to find source package (%s = %s) in Built-Using for %s (%s), %s, file %s, type %s, signed by %s" % \
+                                          (srcname, version, bin.package, bin.version, entry["architecture"],
+                                           filename, bin.binarytype, u.pkg.changes["fingerprint"])
+
+            bin.extra_sources.append(exsources[0])
+
     # Add and flush object so it has an ID
     session.add(bin)
-    session.flush()
 
-    # Add BinAssociations
-    for suite_name in u.pkg.changes["distribution"].keys():
-        ba = BinAssociation()
-        ba.binary_id = bin.binary_id
-        ba.suite_id = get_suite(suite_name).suite_id
-        session.add(ba)
+    suite_names = u.pkg.changes["distribution"].keys()
+    bin.suites = session.query(Suite). \
+        filter(Suite.suite_name.in_(suite_names)).all()
 
     session.flush()
 
@@ -2419,7 +2808,7 @@ def add_deb_to_db(u, filename, session=None):
     #    session.rollback()
     #    raise MissingContents, "No contents stored for package %s, and couldn't determine contents of %s" % (bin.package, filename)
 
-    return poolfile
+    return bin, poolfile
 
 __all__.append('add_deb_to_db')
 
@@ -2436,17 +2825,6 @@ __all__.append('SourceACL')
 
 ################################################################################
 
-class SrcAssociation(object):
-    def __init__(self, *args, **kwargs):
-        pass
-
-    def __repr__(self):
-        return '<SrcAssociation %s (%s, %s)>' % (self.sa_id, self.source, self.suite)
-
-__all__.append('SrcAssociation')
-
-################################################################################
-
 class SrcFormat(object):
     def __init__(self, *args, **kwargs):
         pass
@@ -2458,17 +2836,6 @@ __all__.append('SrcFormat')
 
 ################################################################################
 
-class SrcUploader(object):
-    def __init__(self, *args, **kwargs):
-        pass
-
-    def __repr__(self):
-        return '<SrcUploader %s>' % self.uploader_id
-
-__all__.append('SrcUploader')
-
-################################################################################
-
 SUITE_FIELDS = [ ('SuiteName', 'suite_name'),
                  ('SuiteID', 'suite_id'),
                  ('Version', 'version'),
@@ -2485,12 +2852,19 @@ SUITE_FIELDS = [ ('SuiteName', 'suite_name'),
                  ('CopyChanges', 'copychanges'),
                  ('OverrideSuite', 'overridesuite')]
 
-class Suite(object):
-    def __init__(self, *args, **kwargs):
-        pass
+# Why the heck don't we have any UNIQUE constraints in table suite?
+# TODO: Add UNIQUE constraints for appropriate columns.
+class Suite(ORMObject):
+    def __init__(self, suite_name = None, version = None):
+        self.suite_name = suite_name
+        self.version = version
 
-    def __repr__(self):
-        return '<Suite %s>' % self.suite_name
+    def properties(self):
+        return ['suite_name', 'version', 'sources_count', 'binaries_count', \
+            'overrides_count']
+
+    def not_null_constraints(self):
+        return ['suite_name']
 
     def __eq__(self, val):
         if isinstance(val, str):
@@ -2513,38 +2887,54 @@ class Suite(object):
 
         return "\n".join(ret)
 
-__all__.append('Suite')
+    def get_architectures(self, skipsrc=False, skipall=False):
+        """
+        Returns list of Architecture objects
 
-@session_wrapper
-def get_suite_architecture(suite, architecture, session=None):
-    """
-    Returns a SuiteArchitecture object given C{suite} and ${arch} or None if it
-    doesn't exist
+        @type skipsrc: boolean
+        @param skipsrc: Whether to skip returning the 'source' architecture entry
+        (Default False)
 
-    @type suite: str
-    @param suite: Suite name to search for
+        @type skipall: boolean
+        @param skipall: Whether to skip returning the 'all' architecture entry
+        (Default False)
 
-    @type architecture: str
-    @param architecture: Architecture name to search for
+        @rtype: list
+        @return: list of Architecture objects for the given name (may be empty)
+        """
 
-    @type session: Session
-    @param session: Optional SQL session object (a temporary one will be
-    generated if not supplied)
+        q = object_session(self).query(Architecture).with_parent(self)
+        if skipsrc:
+            q = q.filter(Architecture.arch_string != 'source')
+        if skipall:
+            q = q.filter(Architecture.arch_string != 'all')
+        return q.order_by(Architecture.arch_string).all()
 
-    @rtype: SuiteArchitecture
-    @return: the SuiteArchitecture object or None
-    """
+    def get_sources(self, source):
+        """
+        Returns a query object representing DBSource that is part of C{suite}.
 
-    q = session.query(SuiteArchitecture)
-    q = q.join(Architecture).filter_by(arch_string=architecture)
-    q = q.join(Suite).filter_by(suite_name=suite)
+          - B{source} - source package name, eg. I{mailfilter}, I{bbdb}, I{glibc}
 
-    try:
-        return q.one()
-    except NoResultFound:
-        return None
+        @type source: string
+        @param source: source package name
+
+        @rtype: sqlalchemy.orm.query.Query
+        @return: a query of DBSource
 
-__all__.append('get_suite_architecture')
+        """
+
+        session = object_session(self)
+        return session.query(DBSource).filter_by(source = source). \
+            with_parent(self)
+
+    def get_overridesuite(self):
+        if self.overridesuite is None:
+            return self
+        else:
+            return object_session(self).query(Suite).filter_by(suite_name=self.overridesuite).one()
+
+__all__.append('Suite')
 
 @session_wrapper
 def get_suite(suite, session=None):
@@ -2573,15 +2963,7 @@ __all__.append('get_suite')
 
 ################################################################################
 
-class SuiteArchitecture(object):
-    def __init__(self, *args, **kwargs):
-        pass
-
-    def __repr__(self):
-        return '<SuiteArchitecture (%s, %s)>' % (self.suite_id, self.arch_id)
-
-__all__.append('SuiteArchitecture')
-
+# TODO: should be removed because the implementation is too trivial
 @session_wrapper
 def get_suite_architectures(suite, skipsrc=False, skipall=False, session=None):
     """
@@ -2606,19 +2988,7 @@ def get_suite_architectures(suite, skipsrc=False, skipall=False, session=None):
     @return: list of Architecture objects for the given name (may be empty)
     """
 
-    q = session.query(Architecture)
-    q = q.join(SuiteArchitecture)
-    q = q.join(Suite).filter_by(suite_name=suite)
-
-    if skipsrc:
-        q = q.filter(Architecture.arch_string != 'source')
-
-    if skipall:
-        q = q.filter(Architecture.arch_string != 'all')
-
-    q = q.order_by('arch_string')
-
-    return q.all()
+    return get_suite(suite, session).get_architectures(skipsrc, skipall)
 
 __all__.append('get_suite_architectures')
 
@@ -2660,9 +3030,10 @@ __all__.append('get_suite_src_formats')
 
 ################################################################################
 
-class Uid(object):
-    def __init__(self, *args, **kwargs):
-        pass
+class Uid(ORMObject):
+    def __init__(self, uid = None, name = None):
+        self.uid = uid
+        self.name = name
 
     def __eq__(self, val):
         if isinstance(val, str):
@@ -2676,8 +3047,11 @@ class Uid(object):
         # This signals to use the normal comparison operator
         return NotImplemented
 
-    def __repr__(self):
-        return '<Uid %s (%s)>' % (self.uid, self.name)
+    def properties(self):
+        return ['uid', 'name', 'fingerprint']
+
+    def not_null_constraints(self):
+        return ['uid']
 
 __all__.append('Uid')
 
@@ -2740,6 +3114,113 @@ __all__.append('UploadBlock')
 
 ################################################################################
 
+class MetadataKey(ORMObject):
+    def __init__(self, key = None):
+        self.key = key
+
+    def properties(self):
+        return ['key']
+
+    def not_null_constraints(self):
+        return ['key']
+
+__all__.append('MetadataKey')
+
+@session_wrapper
+def get_or_set_metadatakey(keyname, session=None):
+    """
+    Returns MetadataKey object for given uidname.
+
+    If no matching keyname is found, a row is inserted.
+
+    @type uidname: string
+    @param uidname: The keyname to add
+
+    @type session: SQLAlchemy
+    @param session: Optional SQL session object (a temporary one will be
+    generated if not supplied).  If not passed, a commit will be performed at
+    the end of the function, otherwise the caller is responsible for commiting.
+
+    @rtype: MetadataKey
+    @return: the metadatakey object for the given keyname
+    """
+
+    q = session.query(MetadataKey).filter_by(key=keyname)
+
+    try:
+        ret = q.one()
+    except NoResultFound:
+        ret = MetadataKey(keyname)
+        session.add(ret)
+        session.commit_or_flush()
+
+    return ret
+
+__all__.append('get_or_set_metadatakey')
+
+################################################################################
+
+class BinaryMetadata(ORMObject):
+    def __init__(self, key = None, value = None, binary = None):
+        self.key = key
+        self.value = value
+        self.binary = binary
+
+    def properties(self):
+        return ['binary', 'key', 'value']
+
+    def not_null_constraints(self):
+        return ['value']
+
+__all__.append('BinaryMetadata')
+
+################################################################################
+
+class SourceMetadata(ORMObject):
+    def __init__(self, key = None, value = None, source = None):
+        self.key = key
+        self.value = value
+        self.source = source
+
+    def properties(self):
+        return ['source', 'key', 'value']
+
+    def not_null_constraints(self):
+        return ['value']
+
+__all__.append('SourceMetadata')
+
+################################################################################
+
+class VersionCheck(ORMObject):
+    def __init__(self, *args, **kwargs):
+       pass
+
+    def properties(self):
+        #return ['suite_id', 'check', 'reference_id']
+        return ['check']
+
+    def not_null_constraints(self):
+        return ['suite', 'check', 'reference']
+
+__all__.append('VersionCheck')
+
+@session_wrapper
+def get_version_checks(suite_name, check = None, session = None):
+    suite = get_suite(suite_name, session)
+    if not suite:
+        # Make sure that what we return is iterable so that list comprehensions
+        # involving this don't cause a traceback
+        return []
+    q = session.query(VersionCheck).filter_by(suite=suite)
+    if check:
+        q = q.filter_by(check=check)
+    return q.all()
+
+__all__.append('get_version_checks')
+
+################################################################################
+
 class DBConn(object):
     """
     database module init.
@@ -2759,93 +3240,101 @@ class DBConn(object):
             'architecture',
             'archive',
             'bin_associations',
+            'bin_contents',
             'binaries',
+            'binaries_metadata',
             'binary_acl',
             'binary_acl_map',
-            'bin_contents',
             'build_queue',
             'build_queue_files',
+            'build_queue_policy_files',
+            'changelogs_text',
+            'changes',
             'component',
             'config',
             'changes_pending_binaries',
             'changes_pending_files',
-            'changes_pending_files_map',
             'changes_pending_source',
+            'changes_pending_files_map',
             'changes_pending_source_files',
             'changes_pool_files',
-            'deb_contents',
             'dsc_files',
+            'external_overrides',
+            'extra_src_references',
             'files',
             'fingerprint',
             'keyrings',
-            'changes',
             'keyring_acl_map',
             'location',
             'maintainer',
+            'metadata_keys',
             'new_comments',
+            # TODO: the maintainer column in table override should be removed.
             'override',
             'override_type',
-            'pending_bin_contents',
             'policy_queue',
             'priority',
             'section',
             'source',
             'source_acl',
+            'source_metadata',
             'src_associations',
+            'src_contents',
             'src_format',
             'src_uploaders',
             'suite',
             'suite_architectures',
-            'suite_src_formats',
             'suite_build_queue_copy',
-            'udeb_contents',
+            'suite_src_formats',
             'uid',
             'upload_blocks',
+            'version_check',
+        )
+
+        views = (
+            'almost_obsolete_all_associations',
+            'almost_obsolete_src_associations',
+            'any_associations_source',
+            'bin_associations_binaries',
+            'binaries_suite_arch',
+            'binfiles_suite_component_arch',
+            'changelogs',
+            'file_arch_suite',
+            'newest_all_associations',
+            'newest_any_associations',
+            'newest_source',
+            'newest_src_association',
+            'obsolete_all_associations',
+            'obsolete_any_associations',
+            'obsolete_any_by_all_associations',
+            'obsolete_src_associations',
+            'source_suite',
+            'src_associations_bin',
+            'src_associations_src',
+            'suite_arch_by_name',
         )
 
         for table_name in tables:
-            table = Table(table_name, self.db_meta, autoload=True)
+            table = Table(table_name, self.db_meta, \
+                autoload=True, useexisting=True)
             setattr(self, 'tbl_%s' % table_name, table)
 
+        for view_name in views:
+            view = Table(view_name, self.db_meta, autoload=True)
+            setattr(self, 'view_%s' % view_name, view)
+
     def __setupmappers(self):
         mapper(Architecture, self.tbl_architecture,
-               properties = dict(arch_id = self.tbl_architecture.c.id))
+            properties = dict(arch_id = self.tbl_architecture.c.id,
+               suites = relation(Suite, secondary=self.tbl_suite_architectures,
+                   order_by='suite_name',
+                   backref=backref('architectures', order_by='arch_string'))),
+            extension = validator)
 
         mapper(Archive, self.tbl_archive,
                properties = dict(archive_id = self.tbl_archive.c.id,
                                  archive_name = self.tbl_archive.c.name))
 
-        mapper(BinAssociation, self.tbl_bin_associations,
-               properties = dict(ba_id = self.tbl_bin_associations.c.id,
-                                 suite_id = self.tbl_bin_associations.c.suite,
-                                 suite = relation(Suite),
-                                 binary_id = self.tbl_bin_associations.c.bin,
-                                 binary = relation(DBBinary)))
-
-        mapper(PendingBinContents, self.tbl_pending_bin_contents,
-               properties = dict(contents_id =self.tbl_pending_bin_contents.c.id,
-                                 filename = self.tbl_pending_bin_contents.c.filename,
-                                 package = self.tbl_pending_bin_contents.c.package,
-                                 version = self.tbl_pending_bin_contents.c.version,
-                                 arch = self.tbl_pending_bin_contents.c.arch,
-                                 otype = self.tbl_pending_bin_contents.c.type))
-
-        mapper(DebContents, self.tbl_deb_contents,
-               properties = dict(binary_id=self.tbl_deb_contents.c.binary_id,
-                                 package=self.tbl_deb_contents.c.package,
-                                 suite=self.tbl_deb_contents.c.suite,
-                                 arch=self.tbl_deb_contents.c.arch,
-                                 section=self.tbl_deb_contents.c.section,
-                                 filename=self.tbl_deb_contents.c.filename))
-
-        mapper(UdebContents, self.tbl_udeb_contents,
-               properties = dict(binary_id=self.tbl_udeb_contents.c.binary_id,
-                                 package=self.tbl_udeb_contents.c.package,
-                                 suite=self.tbl_udeb_contents.c.suite,
-                                 arch=self.tbl_udeb_contents.c.arch,
-                                 section=self.tbl_udeb_contents.c.section,
-                                 filename=self.tbl_udeb_contents.c.filename))
-
         mapper(BuildQueue, self.tbl_build_queue,
                properties = dict(queue_id = self.tbl_build_queue.c.id))
 
@@ -2853,6 +3342,11 @@ class DBConn(object):
                properties = dict(buildqueue = relation(BuildQueue, backref='queuefiles'),
                                  poolfile = relation(PoolFile, backref='buildqueueinstances')))
 
+        mapper(BuildQueuePolicyFile, self.tbl_build_queue_policy_files,
+               properties = dict(
+                build_queue = relation(BuildQueue, backref='policy_queue_files'),
+                file = relation(ChangePendingFile, lazy='joined')))
+
         mapper(DBBinary, self.tbl_binaries,
                properties = dict(binary_id = self.tbl_binaries.c.id,
                                  package = self.tbl_binaries.c.package,
@@ -2860,17 +3354,22 @@ class DBConn(object):
                                  maintainer_id = self.tbl_binaries.c.maintainer,
                                  maintainer = relation(Maintainer),
                                  source_id = self.tbl_binaries.c.source,
-                                 source = relation(DBSource),
+                                 source = relation(DBSource, backref='binaries'),
                                  arch_id = self.tbl_binaries.c.architecture,
                                  architecture = relation(Architecture),
                                  poolfile_id = self.tbl_binaries.c.file,
-                                 poolfile = relation(PoolFile),
+                                 poolfile = relation(PoolFile, backref=backref('binary', uselist = False)),
                                  binarytype = self.tbl_binaries.c.type,
                                  fingerprint_id = self.tbl_binaries.c.sig_fpr,
                                  fingerprint = relation(Fingerprint),
                                  install_date = self.tbl_binaries.c.install_date,
-                                 binassociations = relation(BinAssociation,
-                                                            primaryjoin=(self.tbl_binaries.c.id==self.tbl_bin_associations.c.bin))))
+                                 suites = relation(Suite, secondary=self.tbl_bin_associations,
+                                     backref=backref('binaries', lazy='dynamic')),
+                                 extra_sources = relation(DBSource, secondary=self.tbl_extra_src_references,
+                                     backref=backref('extra_binary_references', lazy='dynamic')),
+                                 key = relation(BinaryMetadata, cascade='all',
+                                     collection_class=attribute_mapped_collection('key'))),
+                extension = validator)
 
         mapper(BinaryACL, self.tbl_binary_acl,
                properties = dict(binary_acl_id = self.tbl_binary_acl.c.id))
@@ -2882,7 +3381,8 @@ class DBConn(object):
 
         mapper(Component, self.tbl_component,
                properties = dict(component_id = self.tbl_component.c.id,
-                                 component_name = self.tbl_component.c.name))
+                                 component_name = self.tbl_component.c.name),
+               extension = validator)
 
         mapper(DBConfig, self.tbl_config,
                properties = dict(config_id = self.tbl_config.c.id))
@@ -2894,11 +3394,23 @@ class DBConn(object):
                                  poolfile_id = self.tbl_dsc_files.c.file,
                                  poolfile = relation(PoolFile)))
 
+        mapper(ExternalOverride, self.tbl_external_overrides,
+                properties = dict(
+                    suite_id = self.tbl_external_overrides.c.suite,
+                    suite = relation(Suite),
+                    component_id = self.tbl_external_overrides.c.component,
+                    component = relation(Component)))
+
         mapper(PoolFile, self.tbl_files,
                properties = dict(file_id = self.tbl_files.c.id,
                                  filesize = self.tbl_files.c.size,
                                  location_id = self.tbl_files.c.location,
-                                 location = relation(Location)))
+                                 location = relation(Location,
+                                     # using lazy='dynamic' in the back
+                                     # reference because we have A LOT of
+                                     # files in one location
+                                     backref=backref('files', lazy='dynamic'))),
+                extension = validator)
 
         mapper(Fingerprint, self.tbl_fingerprint,
                properties = dict(fingerprint_id = self.tbl_fingerprint.c.id,
@@ -2907,7 +3419,8 @@ class DBConn(object):
                                  keyring_id = self.tbl_fingerprint.c.keyring,
                                  keyring = relation(Keyring),
                                  source_acl = relation(SourceACL),
-                                 binary_acl = relation(BinaryACL)))
+                                 binary_acl = relation(BinaryACL)),
+               extension = validator)
 
         mapper(Keyring, self.tbl_keyrings,
                properties = dict(keyring_name = self.tbl_keyrings.c.name,
@@ -2968,29 +3481,42 @@ class DBConn(object):
         mapper(Location, self.tbl_location,
                properties = dict(location_id = self.tbl_location.c.id,
                                  component_id = self.tbl_location.c.component,
-                                 component = relation(Component),
+                                 component = relation(Component, backref='location'),
                                  archive_id = self.tbl_location.c.archive,
                                  archive = relation(Archive),
-                                 archive_type = self.tbl_location.c.type))
+                                 # FIXME: the 'type' column is old cruft and
+                                 # should be removed in the future.
+                                 archive_type = self.tbl_location.c.type),
+               extension = validator)
 
         mapper(Maintainer, self.tbl_maintainer,
-               properties = dict(maintainer_id = self.tbl_maintainer.c.id))
+               properties = dict(maintainer_id = self.tbl_maintainer.c.id,
+                   maintains_sources = relation(DBSource, backref='maintainer',
+                       primaryjoin=(self.tbl_maintainer.c.id==self.tbl_source.c.maintainer)),
+                   changed_sources = relation(DBSource, backref='changedby',
+                       primaryjoin=(self.tbl_maintainer.c.id==self.tbl_source.c.changedby))),
+                extension = validator)
 
         mapper(NewComment, self.tbl_new_comments,
                properties = dict(comment_id = self.tbl_new_comments.c.id))
 
         mapper(Override, self.tbl_override,
                properties = dict(suite_id = self.tbl_override.c.suite,
-                                 suite = relation(Suite),
+                                 suite = relation(Suite, \
+                                    backref=backref('overrides', lazy='dynamic')),
                                  package = self.tbl_override.c.package,
                                  component_id = self.tbl_override.c.component,
-                                 component = relation(Component),
+                                 component = relation(Component, \
+                                    backref=backref('overrides', lazy='dynamic')),
                                  priority_id = self.tbl_override.c.priority,
-                                 priority = relation(Priority),
+                                 priority = relation(Priority, \
+                                    backref=backref('overrides', lazy='dynamic')),
                                  section_id = self.tbl_override.c.section,
-                                 section = relation(Section),
+                                 section = relation(Section, \
+                                    backref=backref('overrides', lazy='dynamic')),
                                  overridetype_id = self.tbl_override.c.type,
-                                 overridetype = relation(OverrideType)))
+                                 overridetype = relation(OverrideType, \
+                                    backref=backref('overrides', lazy='dynamic'))))
 
         mapper(OverrideType, self.tbl_override_type,
                properties = dict(overridetype = self.tbl_override_type.c.type,
@@ -3010,54 +3536,34 @@ class DBConn(object):
                properties = dict(source_id = self.tbl_source.c.id,
                                  version = self.tbl_source.c.version,
                                  maintainer_id = self.tbl_source.c.maintainer,
-                                 maintainer = relation(Maintainer,
-                                                       primaryjoin=(self.tbl_source.c.maintainer==self.tbl_maintainer.c.id)),
                                  poolfile_id = self.tbl_source.c.file,
-                                 poolfile = relation(PoolFile),
+                                 poolfile = relation(PoolFile, backref=backref('source', uselist = False)),
                                  fingerprint_id = self.tbl_source.c.sig_fpr,
                                  fingerprint = relation(Fingerprint),
                                  changedby_id = self.tbl_source.c.changedby,
-                                 changedby = relation(Maintainer,
-                                                      primaryjoin=(self.tbl_source.c.changedby==self.tbl_maintainer.c.id)),
                                  srcfiles = relation(DSCFile,
                                                      primaryjoin=(self.tbl_source.c.id==self.tbl_dsc_files.c.source)),
-                                 srcassociations = relation(SrcAssociation,
-                                                            primaryjoin=(self.tbl_source.c.id==self.tbl_src_associations.c.source)),
-                                 srcuploaders = relation(SrcUploader)))
+                                 suites = relation(Suite, secondary=self.tbl_src_associations,
+                                     backref=backref('sources', lazy='dynamic')),
+                                 uploaders = relation(Maintainer,
+                                     secondary=self.tbl_src_uploaders),
+                                 key = relation(SourceMetadata, cascade='all',
+                                     collection_class=attribute_mapped_collection('key'))),
+               extension = validator)
 
         mapper(SourceACL, self.tbl_source_acl,
                properties = dict(source_acl_id = self.tbl_source_acl.c.id))
 
-        mapper(SrcAssociation, self.tbl_src_associations,
-               properties = dict(sa_id = self.tbl_src_associations.c.id,
-                                 suite_id = self.tbl_src_associations.c.suite,
-                                 suite = relation(Suite),
-                                 source_id = self.tbl_src_associations.c.source,
-                                 source = relation(DBSource)))
-
         mapper(SrcFormat, self.tbl_src_format,
                properties = dict(src_format_id = self.tbl_src_format.c.id,
                                  format_name = self.tbl_src_format.c.format_name))
 
-        mapper(SrcUploader, self.tbl_src_uploaders,
-               properties = dict(uploader_id = self.tbl_src_uploaders.c.id,
-                                 source_id = self.tbl_src_uploaders.c.source,
-                                 source = relation(DBSource,
-                                                   primaryjoin=(self.tbl_src_uploaders.c.source==self.tbl_source.c.id)),
-                                 maintainer_id = self.tbl_src_uploaders.c.maintainer,
-                                 maintainer = relation(Maintainer,
-                                                       primaryjoin=(self.tbl_src_uploaders.c.maintainer==self.tbl_maintainer.c.id))))
-
         mapper(Suite, self.tbl_suite,
                properties = dict(suite_id = self.tbl_suite.c.id,
                                  policy_queue = relation(PolicyQueue),
-                                 copy_queues = relation(BuildQueue, secondary=self.tbl_suite_build_queue_copy)))
-
-        mapper(SuiteArchitecture, self.tbl_suite_architectures,
-               properties = dict(suite_id = self.tbl_suite_architectures.c.suite,
-                                 suite = relation(Suite, backref='suitearchitectures'),
-                                 arch_id = self.tbl_suite_architectures.c.architecture,
-                                 architecture = relation(Architecture)))
+                                 copy_queues = relation(BuildQueue,
+                                     secondary=self.tbl_suite_build_queue_copy)),
+                extension = validator)
 
         mapper(SuiteSrcFormat, self.tbl_suite_src_formats,
                properties = dict(suite_id = self.tbl_suite_src_formats.c.suite,
@@ -3067,30 +3573,96 @@ class DBConn(object):
 
         mapper(Uid, self.tbl_uid,
                properties = dict(uid_id = self.tbl_uid.c.id,
-                                 fingerprint = relation(Fingerprint)))
+                                 fingerprint = relation(Fingerprint)),
+               extension = validator)
 
         mapper(UploadBlock, self.tbl_upload_blocks,
                properties = dict(upload_block_id = self.tbl_upload_blocks.c.id,
                                  fingerprint = relation(Fingerprint, backref="uploadblocks"),
                                  uid = relation(Uid, backref="uploadblocks")))
 
+        mapper(BinContents, self.tbl_bin_contents,
+            properties = dict(
+                binary = relation(DBBinary,
+                    backref=backref('contents', lazy='dynamic', cascade='all')),
+                file = self.tbl_bin_contents.c.file))
+
+        mapper(SrcContents, self.tbl_src_contents,
+            properties = dict(
+                source = relation(DBSource,
+                    backref=backref('contents', lazy='dynamic', cascade='all')),
+                file = self.tbl_src_contents.c.file))
+
+        mapper(MetadataKey, self.tbl_metadata_keys,
+            properties = dict(
+                key_id = self.tbl_metadata_keys.c.key_id,
+                key = self.tbl_metadata_keys.c.key))
+
+        mapper(BinaryMetadata, self.tbl_binaries_metadata,
+            properties = dict(
+                binary_id = self.tbl_binaries_metadata.c.bin_id,
+                binary = relation(DBBinary),
+                key_id = self.tbl_binaries_metadata.c.key_id,
+                key = relation(MetadataKey),
+                value = self.tbl_binaries_metadata.c.value))
+
+        mapper(SourceMetadata, self.tbl_source_metadata,
+            properties = dict(
+                source_id = self.tbl_source_metadata.c.src_id,
+                source = relation(DBSource),
+                key_id = self.tbl_source_metadata.c.key_id,
+                key = relation(MetadataKey),
+                value = self.tbl_source_metadata.c.value))
+
+       mapper(VersionCheck, self.tbl_version_check,
+           properties = dict(
+               suite_id = self.tbl_version_check.c.suite,
+               suite = relation(Suite, primaryjoin=self.tbl_version_check.c.suite==self.tbl_suite.c.id),
+               reference_id = self.tbl_version_check.c.reference,
+               reference = relation(Suite, primaryjoin=self.tbl_version_check.c.reference==self.tbl_suite.c.id, lazy='joined')))
+
     ## Connection functions
     def __createconn(self):
         from config import Config
         cnf = Config()
-        if cnf["DB::Host"]:
+        if cnf.has_key("DB::Service"):
+            connstr = "postgresql://service=%s" % cnf["DB::Service"]
+        elif cnf.has_key("DB::Host"):
             # TCP/IP
-            connstr = "postgres://%s" % cnf["DB::Host"]
-            if cnf["DB::Port"] and cnf["DB::Port"] != "-1":
+            connstr = "postgresql://%s" % cnf["DB::Host"]
+            if cnf.has_key("DB::Port") and cnf["DB::Port"] != "-1":
                 connstr += ":%s" % cnf["DB::Port"]
             connstr += "/%s" % cnf["DB::Name"]
         else:
             # Unix Socket
-            connstr = "postgres:///%s" % cnf["DB::Name"]
-            if cnf["DB::Port"] and cnf["DB::Port"] != "-1":
+            connstr = "postgresql:///%s" % cnf["DB::Name"]
+            if cnf.has_key("DB::Port") and cnf["DB::Port"] != "-1":
                 connstr += "?port=%s" % cnf["DB::Port"]
 
-        self.db_pg   = create_engine(connstr, echo=self.debug)
+        engine_args = { 'echo': self.debug }
+        if cnf.has_key('DB::PoolSize'):
+            engine_args['pool_size'] = int(cnf['DB::PoolSize'])
+        if cnf.has_key('DB::MaxOverflow'):
+            engine_args['max_overflow'] = int(cnf['DB::MaxOverflow'])
+        if sa_major_version == '0.6' and cnf.has_key('DB::Unicode') and \
+            cnf['DB::Unicode'] == 'false':
+            engine_args['use_native_unicode'] = False
+
+        # Monkey patch a new dialect in in order to support service= syntax
+        import sqlalchemy.dialects.postgresql
+        from sqlalchemy.dialects.postgresql.psycopg2 import PGDialect_psycopg2
+        class PGDialect_psycopg2_dak(PGDialect_psycopg2):
+            def create_connect_args(self, url):
+                if str(url).startswith('postgresql://service='):
+                    # Eww
+                    servicename = str(url)[21:]
+                    return (['service=%s' % servicename], {})
+                else:
+                    return PGDialect_psycopg2.create_connect_args(self, url)
+
+        sqlalchemy.dialects.postgresql.base.dialect = PGDialect_psycopg2_dak
+
+        self.db_pg   = create_engine(connstr, **engine_args)
         self.db_meta = MetaData()
         self.db_meta.bind = self.db_pg
         self.db_smaker = sessionmaker(bind=self.db_pg,
@@ -3099,9 +3671,23 @@ class DBConn(object):
 
         self.__setuptables()
         self.__setupmappers()
-
-    def session(self):
-        return self.db_smaker()
+        self.pid = os.getpid()
+
+    def session(self, work_mem = 0):
+        '''
+        Returns a new session object. If a work_mem parameter is provided a new
+        transaction is started and the work_mem parameter is set for this
+        transaction. The work_mem parameter is measured in MB. A default value
+        will be used if the parameter is not set.
+        '''
+        # reinitialize DBConn in new processes
+        if self.pid != os.getpid():
+            clear_mappers()
+            self.__createconn()
+        session = self.db_smaker()
+        if work_mem > 0:
+            session.execute("SET LOCAL work_mem TO '%d MB'" % work_mem)
+        return session
 
 __all__.append('DBConn')
 
diff --git a/daklib/filewriter.py b/daklib/filewriter.py
new file mode 100755 (executable)
index 0000000..b44fc2a
--- /dev/null
@@ -0,0 +1,153 @@
+#!/usr/bin/env python
+"""
+Helper code for file writing with optional compression.
+
+@contact: Debian FTPMaster <ftpmaster@debian.org>
+@copyright: 2011 Torsten Werner <twerner@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+################################################################################
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+from daklib.config import Config
+
+from subprocess import check_call
+
+import os, os.path
+
+class BaseFileWriter(object):
+    '''
+    Base class for compressed and uncompressed file writing.
+    '''
+    def __init__(self, template, **keywords):
+        '''
+        The template argument is a string template like
+        "dists/%(suite)s/%(component)s/Contents-%(architecture)s.gz" that
+        should be relative to the archive's root directory. The keywords
+        include strings for suite, component, architecture and booleans
+        uncompressed, gzip, bzip2.
+        '''
+        self.uncompressed = keywords.get('uncompressed', True)
+        self.gzip = keywords.get('gzip', False)
+        self.bzip2 = keywords.get('bzip2', False)
+        root_dir = Config()['Dir::Root']
+        relative_dir = template % keywords
+        self.path = os.path.join(root_dir, relative_dir)
+
+    def open(self):
+        '''
+        Returns a file object for writing.
+        '''
+        # create missing directories
+        try:
+            os.makedirs(os.path.dirname(self.path))
+        except:
+            pass
+        self.file = open(self.path + '.new', 'w')
+        return self.file
+
+    # internal helper function
+    def rename(self, filename):
+        tempfilename = filename + '.new'
+        os.chmod(tempfilename, 0664)
+        os.rename(tempfilename, filename)
+
+    def close(self):
+        '''
+        Closes the file object and does the compression and rename work.
+        '''
+        self.file.close()
+        if self.gzip:
+            check_call('gzip -9cn --rsyncable <%s.new >%s.gz.new' % (self.path, self.path),
+                shell = True)
+            self.rename('%s.gz' % self.path)
+        if self.bzip2:
+            check_call('bzip2 -9 <%s.new >%s.bz2.new' % (self.path, self.path), shell = True)
+            self.rename('%s.bz2' % self.path)
+        if self.uncompressed:
+            self.rename(self.path)
+        else:
+            os.unlink(self.path + '.new')
+
+class BinaryContentsFileWriter(BaseFileWriter):
+    def __init__(self, **keywords):
+        '''
+        The value of the keywords suite, component, and architecture are
+        strings. The value of component may be omitted if not applicable.
+        Output files are gzip compressed only.
+        '''
+        flags = {
+            'uncompressed': False,
+            'gzip':         True,
+            'bzip2':        False
+        }
+        flags.update(keywords)
+        if flags['debtype'] == 'deb':
+            template = "dists/%(suite)s/%(component)s/Contents-%(architecture)s"
+        else: # udeb
+            template = "dists/%(suite)s/%(component)s/Contents-udeb-%(architecture)s"
+        BaseFileWriter.__init__(self, template, **flags)
+
+class SourceContentsFileWriter(BaseFileWriter):
+    def __init__(self, **keywords):
+        '''
+        The value of the keywords suite and component are strings.
+        Output files are gzip compressed only.
+        '''
+        flags = {
+            'uncompressed': False,
+            'gzip':         True,
+            'bzip2':        False
+        }
+        flags.update(keywords)
+        template = "dists/%(suite)s/%(component)s/Contents-source"
+        BaseFileWriter.__init__(self, template, **flags)
+
+class PackagesFileWriter(BaseFileWriter):
+    def __init__(self, **keywords):
+        '''
+        The value of the keywords suite, component, debtype and architecture
+        are strings.  Output files are gzip compressed only.
+        '''
+        flags = {
+            'uncompressed': False,
+            'gzip':         True,
+            'bzip2':        True
+        }
+        flags.update(keywords)
+        if flags['debtype'] == 'deb':
+            template = "dists/%(suite)s/%(component)s/binary-%(architecture)s/Packages"
+        else: # udeb
+            template = "dists/%(suite)s/%(component)s/debian-installer/binary-%(architecture)s/Packages"
+        BaseFileWriter.__init__(self, template, **flags)
+
+class SourcesFileWriter(BaseFileWriter):
+    def __init__(self, **keywords):
+        '''
+        The value of the keywords suite and component are strings. Output
+        files are gzip compressed only.
+        '''
+        flags = {
+            'uncompressed': False,
+            'gzip':         True,
+            'bzip2':        True
+        }
+        flags.update(keywords)
+        template = "dists/%(suite)s/%(component)s/source/Sources"
+        BaseFileWriter.__init__(self, template, **flags)
diff --git a/daklib/gpg.py b/daklib/gpg.py
new file mode 100644 (file)
index 0000000..0e080df
--- /dev/null
@@ -0,0 +1,189 @@
+"""Utilities for signed files
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2011  Ansgar Burchardt <ansgar@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+import errno
+import fcntl
+import os
+import select
+
+try:
+    _MAXFD = os.sysconf("SC_OPEN_MAX")
+except:
+    _MAXFD = 256
+
+class GpgException(Exception):
+    pass
+
+class _Pipe(object):
+    """context manager for pipes
+
+    Note: When the pipe is closed by other means than the close_r and close_w
+    methods, you have to set self.r (self.w) to None.
+    """
+    def __enter__(self):
+        (self.r, self.w) = os.pipe()
+        return self
+    def __exit__(self, type, value, traceback):
+        self.close_w()
+        self.close_r()
+        return False
+    def close_r(self):
+        """close reading side of the pipe"""
+        if self.r:
+            os.close(self.r)
+            self.r = None
+    def close_w(self):
+        """close writing part of the pipe"""
+        if self.w:
+            os.close(self.w)
+            self.w = None
+
+class SignedFile(object):
+    """handle files signed with PGP
+
+    The following attributes are available:
+      contents            - string with the content (after removing PGP armor)
+      valid               - Boolean indicating a valid signature was found
+      fingerprint         - fingerprint of the key used for signing
+      primary_fingerprint - fingerprint of the primary key associated to the key used for signing
+    """
+    def __init__(self, data, keyrings, require_signature=True, gpg="/usr/bin/gpg"):
+        """
+        @param data: string containing the message
+        @param keyrings: seqeuence of keyrings
+        @param require_signature: if True (the default), will raise an exception if no valid signature was found
+        @param gpg: location of the gpg binary
+        """
+        self.gpg = gpg
+        self.keyrings = keyrings
+
+        self.valid = False
+        self.fingerprint = None
+        self.primary_fingerprint = None
+
+        self._verify(data, require_signature)
+
+    def _verify(self, data, require_signature):
+        with _Pipe() as stdin:
+         with _Pipe() as contents:
+          with _Pipe() as status:
+           with _Pipe() as stderr:
+            pid = os.fork()
+            if pid == 0:
+                self._exec_gpg(stdin.r, contents.w, stderr.w, status.w)
+            else:
+                stdin.close_r()
+                contents.close_w()
+                stderr.close_w()
+                status.close_w()
+
+                read = self._do_io([contents.r, stderr.r, status.r], {stdin.w: data})
+                stdin.w = None # was closed by _do_io
+
+                (pid_, exit_code, usage_) = os.wait4(pid, 0)
+
+                self.contents = read[contents.r]
+                self.status   = read[status.r]
+                self.stderr   = read[stderr.r]
+
+                if self.status == "":
+                    raise GpgException("No status output from GPG. (GPG exited with status code %s)\n%s" % (exit_code, self.stderr))
+
+                for line in self.status.splitlines():
+                    self._parse_status(line)
+
+                if require_signature and not self.valid:
+                    raise GpgException("No valid signature found. (GPG exited with status code %s)\n%s" % (exit_code, self.stderr))
+
+    def _do_io(self, read, write):
+        read_lines = dict( (fd, []) for fd in read )
+        write_pos = dict( (fd, 0) for fd in write )
+
+        read_set = list(read)
+        write_set = write.keys()
+        while len(read_set) > 0 or len(write_set) > 0:
+            r, w, x_ = select.select(read_set, write_set, ())
+            for fd in r:
+                data = os.read(fd, 4096)
+                if data == "":
+                    read_set.remove(fd)
+                read_lines[fd].append(data)
+            for fd in w:
+                data = write[fd][write_pos[fd]:]
+                if data == "":
+                    os.close(fd)
+                    write_set.remove(fd)
+                else:
+                    bytes_written = os.write(fd, data)
+                    write_pos[fd] += bytes_written
+
+        return dict( (fd, "".join(read_lines[fd])) for fd in read_lines.keys() )
+
+    def _parse_status(self, line):
+        fields = line.split()
+        if fields[0] != "[GNUPG:]":
+            raise GpgException("Unexpected output on status-fd: %s" % line)
+
+        # VALIDSIG    <fingerprint in hex> <sig_creation_date> <sig-timestamp>
+        #             <expire-timestamp> <sig-version> <reserved> <pubkey-algo>
+        #             <hash-algo> <sig-class> <primary-key-fpr>
+        if fields[1] == "VALIDSIG":
+            self.valid = True
+            self.fingerprint = fields[2]
+            self.primary_fingerprint = fields[11]
+
+        if fields[1] == "BADARMOR":
+            raise GpgException("Bad armor.")
+
+        if fields[1] == "NODATA":
+            raise GpgException("No data.")
+
+        if fields[1] == "DECRYPTION_FAILED":
+            raise GpgException("Decryption failed.")
+
+        if fields[1] == "ERROR":
+            raise GpgException("Other error: %s %s" % (fields[2], fields[3]))
+
+    def _exec_gpg(self, stdin, stdout, stderr, statusfd):
+        try:
+            if stdin != 0:
+                os.dup2(stdin, 0)
+            if stdout != 1:
+                os.dup2(stdout, 1)
+            if stderr != 2:
+                os.dup2(stderr, 2)
+            if statusfd != 3:
+                os.dup2(statusfd, 3)
+            for fd in range(4):
+                old = fcntl.fcntl(fd, fcntl.F_GETFD)
+                fcntl.fcntl(fd, fcntl.F_SETFD, old & ~fcntl.FD_CLOEXEC)
+            os.closerange(4, _MAXFD)
+
+            args = [self.gpg, "--status-fd=3", "--no-default-keyring"]
+            for k in self.keyrings:
+                args.append("--keyring=%s" % k)
+            args.extend(["--decrypt", "-"])
+
+            os.execvp(self.gpg, args)
+        finally:
+            os._exit(1)
+
+# vim: set sw=4 et:
diff --git a/daklib/lists.py b/daklib/lists.py
new file mode 100755 (executable)
index 0000000..320184e
--- /dev/null
@@ -0,0 +1,146 @@
+#!/usr/bin/python
+
+"""
+Helper functions for list generating commands (Packages, Sources).
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2009-2011  Torsten Werner <twerner@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+from dbconn import get_architecture
+
+def fetch(query, args, session):
+    for (id, path, filename) in session.execute(query, args).fetchall():
+        yield (id, path + filename)
+
+def getSources(suite, component, session, timestamp = None):
+    '''
+    Calculates the sources in suite and component optionally limited by
+    sources newer than timestamp.  Returns a generator that yields a
+    tuple of source id and full pathname to the dsc file. See function
+    writeSourceList() in dak/generate_filelist.py for an example that
+    uses this function.
+    '''
+    extra_cond = ""
+    if timestamp:
+        extra_cond = "AND extract(epoch from sa.created) > %d" % timestamp
+    query = """
+        SELECT s.id, l.path, f.filename
+            FROM source s
+            JOIN src_associations sa
+                ON s.id = sa.source AND sa.suite = :suite %s
+            JOIN files f
+                ON s.file = f.id
+            JOIN location l
+                ON f.location = l.id AND l.component = :component
+            ORDER BY filename
+    """ % extra_cond
+    args = { 'suite': suite.suite_id,
+             'component': component.component_id }
+    return fetch(query, args, session)
+
+def getArchAll(suite, component, architecture, type, session, timestamp = None):
+    '''
+    Calculates all binaries in suite and component of architecture 'all' (and
+    only 'all') and type 'deb' or 'udeb' optionally limited to binaries newer
+    than timestamp.  Returns a generator that yields a tuple of binary id and
+    full pathname to the u(deb) file. See function writeAllList() in
+    dak/generate_filelist.py for an example that uses this function.
+    '''
+    query = suite.clone(session).binaries. \
+        filter_by(architecture = architecture, binarytype = type)
+    if timestamp is not None:
+        extra_cond = 'extract(epoch from bin_associations.created) > %d' % timestamp
+        query = query.filter(extra_cond)
+    for binary in query:
+        yield (binary.binary_id, binary.poolfile.fullpath)
+
+def getBinaries(suite, component, architecture, type, session, timestamp = None):
+    '''
+    Calculates the binaries in suite and component of architecture and
+    type 'deb' or 'udeb' optionally limited to binaries newer than
+    timestamp.  Returns a generator that yields a tuple of binary id and
+    full pathname to the u(deb) file. See function writeBinaryList() in
+    dak/generate_filelist.py for an example that uses this function.
+    '''
+    extra_cond = ""
+    if timestamp:
+        extra_cond = "AND extract(epoch from ba.created) > %d" % timestamp
+    query = """
+CREATE TEMP TABLE b_candidates (
+    id integer,
+    source integer,
+    file integer,
+    architecture integer);
+
+INSERT INTO b_candidates (id, source, file, architecture)
+    SELECT b.id, b.source, b.file, b.architecture
+        FROM binaries b
+        JOIN bin_associations ba ON b.id = ba.bin
+        WHERE b.type = :type AND ba.suite = :suite AND
+            b.architecture IN (:arch_all, :architecture) %s;
+
+CREATE TEMP TABLE gf_candidates (
+    id integer,
+    filename text,
+    path text,
+    architecture integer,
+    src integer,
+    source text);
+
+INSERT INTO gf_candidates (id, filename, path, architecture, src, source)
+    SELECT bc.id, f.filename, l.path, bc.architecture, bc.source as src, s.source
+        FROM b_candidates bc
+        JOIN source s ON bc.source = s.id
+        JOIN files f ON bc.file = f.id
+        JOIN location l ON f.location = l.id
+        WHERE l.component = :component;
+
+WITH arch_any AS
+
+    (SELECT id, path, filename FROM gf_candidates
+        WHERE architecture <> :arch_all),
+
+     arch_all_with_any AS
+    (SELECT id, path, filename FROM gf_candidates
+        WHERE architecture = :arch_all AND
+              src IN (SELECT src FROM gf_candidates WHERE architecture <> :arch_all)),
+
+     arch_all_without_any AS
+    (SELECT id, path, filename FROM gf_candidates
+        WHERE architecture = :arch_all AND
+              source NOT IN (SELECT DISTINCT source FROM gf_candidates WHERE architecture <> :arch_all)),
+
+     filelist AS
+    (SELECT * FROM arch_any
+    UNION
+    SELECT * FROM arch_all_with_any
+    UNION
+    SELECT * FROM arch_all_without_any)
+
+    SELECT * FROM filelist ORDER BY filename
+    """ % extra_cond
+    args = { 'suite': suite.suite_id,
+             'component': component.component_id,
+             'architecture': architecture.arch_id,
+             'arch_all': get_architecture('all', session).arch_id,
+             'type': type }
+    return fetch(query, args, session)
+
diff --git a/daklib/metadata.py b/daklib/metadata.py
new file mode 100755 (executable)
index 0000000..d88cf4f
--- /dev/null
@@ -0,0 +1,113 @@
+#!/usr/bin/env python
+"""
+Helper code for packages and sources generation.
+
+@contact: Debian FTPMaster <ftpmaster@debian.org>
+@copyright: 2011 Torsten Werner <twerner@debian.org>
+@copyright: 2011 Mark Hymers <mhy@debian.org>
+@license: GNU General Public License version 2 or later
+"""
+
+################################################################################
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+from daklib.dbconn import *
+from daklib.config import Config
+
+from multiprocessing import Pool
+from subprocess import Popen, PIPE
+
+import os.path
+
+class MetadataScanner(object):
+    '''
+    MetadataScanner provides a threadsafe method scan() to scan the metadata of
+    a DBSource or DBBinary object depending on what is passed as dbclass'''
+
+    def __init__(self, dbclass, pkid, verbose=True):
+        '''
+        The argument binary_id is the id of the DBBinary object that
+
+        should be scanned.
+        '''
+        self.verbose = True
+        self.dbclass = dbclass
+        self.pkid = pkid
+
+    def scan(self, dummy_arg = None):
+        '''
+        This method does the actual scan and fills in the associated metadata
+        property. It commits any changes to the database. The argument dummy_arg
+        is ignored but needed by our threadpool implementation.
+        '''
+        obj = None
+        fullpath = 'UNKNOWN PATH'
+
+        session = DBConn().session()
+        try:
+            obj = session.query(self.dbclass).get(self.pkid)
+            fullpath = obj.poolfile.fullpath
+            import_metadata_into_db(obj, session=session)
+            if self.verbose:
+                print "Imported %s (%s)" % (self.pkid, fullpath)
+            session.commit()
+        except Exception, e:
+            print "Failed to import %s [id=%s; fullpath=%s]" % (self.dbclass.__name__, self.pkid, fullpath)
+            print "Exception: ", e
+            session.rollback()
+
+        session.close()
+
+    @classmethod
+    def scan_all(class_, scantype='source', limit = None):
+        '''
+        The class method scan_all() scans all sources using multiple threads.
+        The number of sources to be scanned can be limited with the limit
+        argument. Returns the number of processed and remaining files as a
+        dict.
+        '''
+        session = DBConn().session()
+        if scantype == 'source':
+            dbclass = DBSource
+            query = session.query(DBSource).filter(~DBSource.source_id.in_(session.query(SourceMetadata.source_id.distinct())))
+            t = 'sources'
+        else:
+            # Otherwise binary
+            dbclass = DBBinary
+            query = session.query(DBBinary).filter(~DBBinary.binary_id.in_(session.query(BinaryMetadata.binary_id.distinct())))
+            t = 'binaries'
+
+        remaining = query.count
+        if limit is not None:
+            query = query.limit(limit)
+        processed = query.count()
+        pool = Pool(processes=10)
+        for obj in query.yield_per(100):
+            pool.apply_async(scan_helper, (dbclass, obj.pkid, ))
+        pool.close()
+        pool.join()
+        remaining = remaining()
+        session.close()
+        return { 'processed': processed, 'remaining': remaining , 'type': t}
+
+def scan_helper(dbclass, source_id):
+    '''
+    This function runs in a subprocess.
+    '''
+    scanner = MetadataScanner(dbclass, source_id)
+    scanner.scan()
index 7a49242284026ec39f12e5fe3d13928d46094819..c81ef8ea20fbee5dd0f8a2918a2447a4ea142c7d 100755 (executable)
@@ -51,10 +51,10 @@ from holding import Holding
 from urgencylog import UrgencyLog
 from dbconn import *
 from summarystats import SummaryStats
-from utils import parse_changes, check_dsc_files
+from utils import parse_changes, check_dsc_files, build_package_set
 from textutils import fix_maintainer
-from binary import Binary
 from lintian import parse_lintian_output, generate_reject_messages
+from contents import UnpackedSource
 
 ###############################################################################
 
@@ -77,6 +77,9 @@ def get_type(f, session):
         file_type = f["dbtype"]
     elif re_source_ext.match(f["type"]):
         file_type = "dsc"
+    elif f['architecture'] == 'source' and f["type"] == 'unreadable':
+        utils.warn('unreadable source file (will continue and hope for the best)')
+        return f["type"]
     else:
         file_type = f["type"]
         utils.fubar("invalid type (%s) for new.  Dazed, confused and sure as heck not continuing." % (file_type))
@@ -92,7 +95,7 @@ def get_type(f, session):
 
 # Determine what parts in a .changes are NEW
 
-def determine_new(filename, changes, files, warn=1, session = None):
+def determine_new(filename, changes, files, warn=1, session = None, dsc = None, new = None):
     """
     Determine what parts in a C{changes} file are NEW.
 
@@ -108,19 +111,32 @@ def determine_new(filename, changes, files, warn=1, session = None):
     @type warn: bool
     @param warn: Warn if overrides are added for (old)stable
 
+    @type dsc: Upload.Pkg.dsc dict
+    @param dsc: (optional); Dsc dictionary
+
+    @type new: dict
+    @param new: new packages as returned by a previous call to this function, but override information may have changed
+
     @rtype: dict
     @return: dictionary of NEW components.
 
     """
     # TODO: This should all use the database instead of parsing the changes
     # file again
-    new = {}
     byhand = {}
+    if new is None:
+        new = {}
 
     dbchg = get_dbchange(filename, session)
     if dbchg is None:
         print "Warning: cannot find changes file in database; won't check byhand"
 
+    # Try to get the Package-Set field from an included .dsc file (if possible).
+    if dsc:
+        for package, entry in build_package_set(dsc, session).items():
+            if not new.has_key(package):
+                new[package] = entry
+
     # Build up a list of potentially new things
     for name, f in files.items():
         # Keep a record of byhand elements
@@ -370,6 +386,44 @@ def edit_note(note, upload, session, trainee=False):
 
 ###############################################################################
 
+# suite names DMs can upload to
+dm_suites = ['unstable', 'experimental']
+
+def get_newest_source(source, session):
+    'returns the newest DBSource object in dm_suites'
+    ## the most recent version of the package uploaded to unstable or
+    ## experimental includes the field "DM-Upload-Allowed: yes" in the source
+    ## section of its control file
+    q = session.query(DBSource).filter_by(source = source). \
+        filter(DBSource.suites.any(Suite.suite_name.in_(dm_suites))). \
+        order_by(desc('source.version'))
+    return q.first()
+
+def get_suite_version_by_source(source, session):
+    'returns a list of tuples (suite_name, version) for source package'
+    q = session.query(Suite.suite_name, DBSource.version). \
+        join(Suite.sources).filter_by(source = source)
+    return q.all()
+
+def get_source_by_package_and_suite(package, suite_name, session):
+    '''
+    returns a DBSource query filtered by DBBinary.package and this package's
+    suite_name
+    '''
+    return session.query(DBSource). \
+        join(DBSource.binaries).filter_by(package = package). \
+        join(DBBinary.suites).filter_by(suite_name = suite_name)
+
+def get_suite_version_by_package(package, arch_string, session):
+    '''
+    returns a list of tuples (suite_name, version) for binary package and
+    arch_string
+    '''
+    return session.query(Suite.suite_name, DBBinary.version). \
+        join(Suite.binaries).filter_by(package = package). \
+        join(DBBinary.architecture). \
+        filter(Architecture.arch_string.in_([arch_string, 'all'])).all()
+
 class Upload(object):
     """
     Everything that has to do with an upload processed.
@@ -725,6 +779,30 @@ class Upload(object):
                 if not re_valid_pkg_name.match(prov):
                     self.rejects.append("%s: Invalid Provides field content %s." % (f, prov))
 
+        # If there is a Built-Using field, we need to check we can find the
+        # exact source version
+        built_using = control.Find("Built-Using")
+        if built_using:
+            try:
+                entry["built-using"] = []
+                for dep in apt_pkg.parse_depends(built_using):
+                    bu_s, bu_v, bu_e = dep[0]
+                    # Check that it's an exact match dependency and we have
+                    # some form of version
+                    if bu_e != "=" or len(bu_v) < 1:
+                        self.rejects.append("%s: Built-Using contains non strict dependency (%s %s %s)" % (f, bu_s, bu_e, bu_v))
+                    else:
+                        # Find the source id for this version
+                        bu_so = get_sources_from_name(bu_s, version=bu_v, session = session)
+                        if len(bu_so) != 1:
+                            self.rejects.append("%s: Built-Using (%s = %s): Cannot find source package" % (f, bu_s, bu_v))
+                        else:
+                            entry["built-using"].append( (bu_so[0].source, bu_so[0].version, ) )
+
+            except ValueError, e:
+                self.rejects.append("%s: Cannot parse Built-Using field: %s" % (f, str(e)))
+
+
         # Check the section & priority match those given in the .changes (non-fatal)
         if     control.Find("Section") and entry["section"] != "" \
            and entry["section"] != control.Find("Section"):
@@ -795,7 +873,8 @@ class Upload(object):
                                     (source_version, f, self.pkg.changes["version"]))
         else:
             # Check in the SQL database
-            if not source_exists(source_package, source_version, self.pkg.changes["distribution"].keys(), session):
+            if not source_exists(source_package, source_version, suites = \
+                self.pkg.changes["distribution"].keys(), session = session):
                 # Check in one of the other directories
                 source_epochless_version = re_no_epoch.sub('', source_version)
                 dsc_filename = "%s_%s.dsc" % (source_package, source_epochless_version)
@@ -817,13 +896,6 @@ class Upload(object):
         # Check the version and for file overwrites
         self.check_binary_against_db(f, session)
 
-        # Temporarily disable contents generation until we change the table storage layout
-        #b = Binary(f)
-        #b.scan_package()
-        #if len(b.rejects) > 0:
-        #    for j in b.rejects:
-        #        self.rejects.append(j)
-
     def source_file_checks(self, f, session):
         entry = self.pkg.files[f]
 
@@ -933,9 +1005,11 @@ class Upload(object):
 
         # Check for packages that have moved from one component to another
         entry['suite'] = suite
-        res = get_binary_components(self.pkg.files[f]['package'], suite, entry["architecture"], session)
-        if res.rowcount > 0:
-            entry["othercomponents"] = res.fetchone()[0]
+        arch_list = [entry["architecture"], 'all']
+        component = get_component_by_package_suite(self.pkg.files[f]['package'], \
+            [suite], arch_list = arch_list, session = session)
+        if component is not None:
+            entry["othercomponents"] = component
 
     def check_files(self, action=True):
         file_keys = self.pkg.files.keys()
@@ -1037,40 +1111,76 @@ class Upload(object):
                 self.rejects.append("source only uploads are not supported.")
 
     ###########################################################################
-    def check_dsc(self, action=True, session=None):
-        """Returns bool indicating whether or not the source changes are valid"""
-        # Ensure there is source to check
-        if not self.pkg.changes["architecture"].has_key("source"):
-            return True
 
-        # Find the .dsc
+    def __dsc_filename(self):
+        """
+        Returns: (Status, Dsc_Filename)
+        where
+          Status: Boolean; True when there was no error, False otherwise
+          Dsc_Filename: String; name of the dsc file if Status is True, reason for the error otherwise
+        """
         dsc_filename = None
-        for f, entry in self.pkg.files.items():
-            if entry["type"] == "dsc":
+
+        # find the dsc
+        for name, entry in self.pkg.files.items():
+            if entry.has_key("type") and entry["type"] == "dsc":
                 if dsc_filename:
-                    self.rejects.append("can not process a .changes file with multiple .dsc's.")
-                    return False
+                    return False, "cannot process a .changes file with multiple .dsc's."
                 else:
-                    dsc_filename = f
+                    dsc_filename = name
 
-        # If there isn't one, we have nothing to do. (We have reject()ed the upload already)
         if not dsc_filename:
-            self.rejects.append("source uploads must contain a dsc file")
-            return False
+            return False, "source uploads must contain a dsc file"
+
+        return True, dsc_filename
+
+    def load_dsc(self, action=True, signing_rules=1):
+        """
+        Find and load the dsc from self.pkg.files into self.dsc
+
+        Returns: (Status, Reason)
+        where
+          Status: Boolean; True when there was no error, False otherwise
+          Reason: String; When Status is False this describes the error
+        """
+
+        # find the dsc
+        (status, dsc_filename) = self.__dsc_filename()
+        if not status:
+            # If status is false, dsc_filename has the reason
+            return False, dsc_filename
 
-        # Parse the .dsc file
         try:
-            self.pkg.dsc.update(utils.parse_changes(dsc_filename, signing_rules=1, dsc_file=1))
+            self.pkg.dsc.update(utils.parse_changes(dsc_filename, signing_rules=signing_rules, dsc_file=1))
         except CantOpenError:
-            # if not -n copy_to_holding() will have done this for us...
             if not action:
-                self.rejects.append("%s: can't read file." % (dsc_filename))
+                return False, "%s: can't read file." % (dsc_filename)
         except ParseChangesError, line:
-            self.rejects.append("%s: parse error, can't grok: %s." % (dsc_filename, line))
+            return False, "%s: parse error, can't grok: %s." % (dsc_filename, line)
         except InvalidDscError, line:
-            self.rejects.append("%s: syntax error on line %s." % (dsc_filename, line))
+            return False, "%s: syntax error on line %s." % (dsc_filename, line)
         except ChangesUnicodeError:
-            self.rejects.append("%s: dsc file not proper utf-8." % (dsc_filename))
+            return False, "%s: dsc file not proper utf-8." % (dsc_filename)
+
+        return True, None
+
+    ###########################################################################
+
+    def check_dsc(self, action=True, session=None):
+        """Returns bool indicating whether or not the source changes are valid"""
+        # Ensure there is source to check
+        if not self.pkg.changes["architecture"].has_key("source"):
+            return True
+
+        (status, reason) = self.load_dsc(action=action)
+        if not status:
+            self.rejects.append(reason)
+            return False
+        (status, dsc_filename) = self.__dsc_filename()
+        if not status:
+            # If status is false, dsc_filename has the reason
+            self.rejects.append(dsc_filename)
+            return False
 
         # Build up the file list of files mentioned by the .dsc
         try:
@@ -1154,7 +1264,7 @@ class Upload(object):
 
         session.close()
 
-        return True
+        return (len(self.rejects) == 0)
 
     ###########################################################################
 
@@ -1198,11 +1308,10 @@ class Upload(object):
             os.symlink(self.pkg.orig_files[orig_file]["path"], dest)
 
         # Extract the source
-        cmd = "dpkg-source -sn -x %s" % (dsc_filename)
-        (result, output) = commands.getstatusoutput(cmd)
-        if (result != 0):
-            self.rejects.append("'dpkg-source -x' failed for %s [return code: %s]." % (dsc_filename, result))
-            self.rejects.append(utils.prefix_multi_line_string(output, " [dpkg-source output:] "))
+        try:
+            unpacked = UnpackedSource(dsc_filename)
+        except:
+            self.rejects.append("'dpkg-source -x' failed for %s." % dsc_filename)
             return
 
         if not cnf.Find("Dir::Queue::BTSVersionTrack"):
@@ -1214,19 +1323,19 @@ class Upload(object):
             upstr_version = re_strip_revision.sub('', upstr_version)
 
         # Ensure the changelog file exists
-        changelog_filename = "%s-%s/debian/changelog" % (self.pkg.dsc["source"], upstr_version)
-        if not os.path.exists(changelog_filename):
+        changelog_file = unpacked.get_changelog_file()
+        if changelog_file is None:
             self.rejects.append("%s: debian/changelog not found in extracted source." % (dsc_filename))
             return
 
         # Parse the changelog
         self.pkg.dsc["bts changelog"] = ""
-        changelog_file = utils.open_file(changelog_filename)
         for line in changelog_file.readlines():
             m = re_changelog_versions.match(line)
             if m:
                 self.pkg.dsc["bts changelog"] += line
         changelog_file.close()
+        unpacked.cleanup()
 
         # Check we found at least one revision in the changelog
         if not self.pkg.dsc["bts changelog"]:
@@ -1428,7 +1537,7 @@ class Upload(object):
 
         # If we do not have a tagfile, don't do anything
         tagfile = cnf.get("Dinstall::LintianTags")
-        if tagfile is None:
+        if not tagfile:
             return
 
         # Parse the yaml file
@@ -1595,22 +1704,22 @@ class Upload(object):
         # Check any one-off upload blocks
         self.check_upload_blocks(fpr, session)
 
-        # Start with DM as a special case
+        # If the source_acl is None, source is never allowed
+        if fpr.source_acl is None:
+            if self.pkg.changes["architecture"].has_key("source"):
+                rej = 'Fingerprint %s may not upload source' % fpr.fingerprint
+                rej += '\nPlease contact ftpmaster if you think this is incorrect'
+                self.rejects.append(rej)
+                return
+        # Do DM as a special case
         # DM is a special case unfortunately, so we check it first
         # (keys with no source access get more access than DMs in one
         #  way; DMs can only upload for their packages whether source
         #  or binary, whereas keys with no access might be able to
         #  upload some binaries)
-        if fpr.source_acl.access_level == 'dm':
+        elif fpr.source_acl.access_level == 'dm':
             self.check_dm_upload(fpr, session)
         else:
-            # Check source-based permissions for other types
-            if self.pkg.changes["architecture"].has_key("source") and \
-                fpr.source_acl.access_level is None:
-                rej = 'Fingerprint %s may not upload source' % fpr.fingerprint
-                rej += '\nPlease contact ftpmaster if you think this is incorrect'
-                self.rejects.append(rej)
-                return
             # If not a DM, we allow full upload rights
             uid_email = "%s@debian.org" % (fpr.uid.uid)
             self.check_if_upload_is_sponsored(uid_email, fpr.uid.name)
@@ -1632,8 +1741,11 @@ class Upload(object):
 
         if len(tmparches.keys()) > 0:
             if fpr.binary_reject:
-                rej = ".changes file contains files of architectures not permitted for fingerprint %s" % fpr.fingerprint
-                rej += "\narchitectures involved are: ", ",".join(tmparches.keys())
+                rej = "changes file contains files of architectures not permitted for fingerprint %s" % fpr.fingerprint
+                if len(tmparches.keys()) == 1:
+                    rej += "\n\narchitecture involved is: %s" % ",".join(tmparches.keys())
+                else:
+                    rej += "\n\narchitectures involved are: %s" % ",".join(tmparches.keys())
                 self.rejects.append(rej)
             else:
                 # TODO: This is where we'll implement reject vs throw away binaries later
@@ -1680,22 +1792,13 @@ class Upload(object):
         if rej:
             return
 
-        ## the most recent version of the package uploaded to unstable or
-        ## experimental includes the field "DM-Upload-Allowed: yes" in the source
-        ## section of its control file
-        q = session.query(DBSource).filter_by(source=self.pkg.changes["source"])
-        q = q.join(SrcAssociation)
-        q = q.join(Suite).filter(Suite.suite_name.in_(['unstable', 'experimental']))
-        q = q.order_by(desc('source.version')).limit(1)
-
-        r = q.all()
+        r = get_newest_source(self.pkg.changes["source"], session)
 
-        if len(r) != 1:
+        if r is None:
             rej = "Could not find existing source package %s in unstable or experimental and this is a DM upload" % self.pkg.changes["source"]
             self.rejects.append(rej)
             return
 
-        r = r[0]
         if not r.dm_upload_allowed:
             rej = "Source package %s does not have 'DM-Upload-Allowed: yes' in its most recent version (%s)" % (self.pkg.changes["source"], r.version)
             self.rejects.append(rej)
@@ -1711,10 +1814,10 @@ class Upload(object):
         ## experimental lists the uploader in the Maintainer: or Uploaders: fields (ie,
         ## non-developer maintainers cannot NMU or hijack packages)
 
-        # srcuploaders includes the maintainer
+        # uploader includes the maintainer
         accept = False
-        for sup in r.srcuploaders:
-            (rfc822, rfc2047, name, email) = sup.maintainer.get_split_maintainer()
+        for uploader in r.uploaders:
+            (rfc822, rfc2047, name, email) = uploader.get_split_maintainer()
             # Eww - I hope we never have two people with the same name in Debian
             if email == fpr.uid.uid or name == fpr.uid.name:
                 accept = True
@@ -1727,11 +1830,7 @@ class Upload(object):
         ## none of the packages are being taken over from other source packages
         for b in self.pkg.changes["binary"].keys():
             for suite in self.pkg.changes["distribution"].keys():
-                q = session.query(DBSource)
-                q = q.join(DBBinary).filter_by(package=b)
-                q = q.join(BinAssociation).join(Suite).filter_by(suite_name=suite)
-
-                for s in q.all():
+                for s in get_source_by_package_and_suite(b, suite, session):
                     if s.source != self.pkg.changes["source"]:
                         self.rejects.append("%s may not hijack %s from source package %s in suite %s" % (fpr.uid.uid, b, s, suite))
 
@@ -1971,6 +2070,7 @@ distribution."""
         print "Installing."
         self.logger.log(["installing changes", self.pkg.changes_file])
 
+        binaries = []
         poolfiles = []
 
         # Add the .dsc file to the DB first
@@ -1983,7 +2083,9 @@ distribution."""
         # Add .deb / .udeb files to the DB (type is always deb, dbtype is udeb/deb)
         for newfile, entry in self.pkg.files.items():
             if entry["type"] == "deb":
-                poolfiles.append(add_deb_to_db(self, newfile, session))
+                b, pf = add_deb_to_db(self, newfile, session)
+                binaries.append(b)
+                poolfiles.append(pf)
 
         # If this is a sourceful diff only upload that is moving
         # cross-component we need to copy the .orig files into the new
@@ -2068,9 +2170,26 @@ distribution."""
         # Our SQL session will automatically start a new transaction after
         # the last commit
 
+        # Now ensure that the metadata has been added
+        # This has to be done after we copy the files into the pool
+        # For source if we have it:
+        if self.pkg.changes["architecture"].has_key("source"):
+            import_metadata_into_db(source, session)
+
+        # Now for any of our binaries
+        for b in binaries:
+            import_metadata_into_db(b, session)
+
+        session.commit()
+
         # Move the .changes into the 'done' directory
+        ye, mo, da = time.gmtime()[0:3]
+        donedir = os.path.join(cnf["Dir::Queue::Done"], str(ye), "%0.2d" % mo, "%0.2d" % da)
+        if not os.path.isdir(donedir):
+            os.makedirs(donedir)
+
         utils.move(self.pkg.changes_file,
-                   os.path.join(cnf["Dir::Queue::Done"], os.path.basename(self.pkg.changes_file)))
+                   os.path.join(donedir, os.path.basename(self.pkg.changes_file)))
 
         if self.pkg.changes["architecture"].has_key("source") and cnf.get("Dir::UrgencyLog"):
             UrgencyLog().log(self.pkg.dsc["source"], self.pkg.dsc["version"], self.pkg.changes["urgency"])
@@ -2332,6 +2451,8 @@ distribution."""
         if self.logger:
             self.logger.log(["rejected", self.pkg.changes_file])
 
+        stats = SummaryStats()
+        stats.reject_count += 1
         return 0
 
     ################################################################################
@@ -2398,7 +2519,7 @@ distribution."""
         """
         Cnf = Config()
         anyversion = None
-        anysuite = [suite] + Cnf.ValueList("Suite::%s::VersionChecks::Enhances" % (suite))
+        anysuite = [suite] + [ vc.reference.suite_name for vc in get_version_checks(suite, "Enhances") ]
         for (s, v) in sv_list:
             if s in [ x.lower() for x in anysuite ]:
                 if not anyversion or apt_pkg.VersionCompare(anyversion, v) <= 0:
@@ -2428,8 +2549,14 @@ distribution."""
 
         # Check versions for each target suite
         for target_suite in self.pkg.changes["distribution"].keys():
-            must_be_newer_than = [ i.lower() for i in cnf.ValueList("Suite::%s::VersionChecks::MustBeNewerThan" % (target_suite)) ]
-            must_be_older_than = [ i.lower() for i in cnf.ValueList("Suite::%s::VersionChecks::MustBeOlderThan" % (target_suite)) ]
+            # Check we can find the target suite
+            ts = get_suite(target_suite)
+            if ts is None:
+                self.rejects.append("Cannot find target suite %s to perform version checks" % target_suite)
+                continue
+
+            must_be_newer_than = [ vc.reference.suite_name for vc in get_version_checks(target_suite, "MustBeNewerThan") ]
+            must_be_older_than = [ vc.reference.suite_name for vc in get_version_checks(target_suite, "MustBeOlderThan") ]
 
             # Enforce "must be newer than target suite" even if conffile omits it
             if target_suite not in must_be_newer_than:
@@ -2488,12 +2615,10 @@ distribution."""
     ################################################################################
     def check_binary_against_db(self, filename, session):
         # Ensure version is sane
-        q = session.query(BinAssociation)
-        q = q.join(DBBinary).filter(DBBinary.package==self.pkg.files[filename]["package"])
-        q = q.join(Architecture).filter(Architecture.arch_string.in_([self.pkg.files[filename]["architecture"], 'all']))
-
-        self.cross_suite_version_check([ (x.suite.suite_name, x.binary.version) for x in q.all() ],
-                                       filename, self.pkg.files[filename]["version"], sourceful=False)
+        self.cross_suite_version_check( \
+            get_suite_version_by_package(self.pkg.files[filename]["package"], \
+                self.pkg.files[filename]["architecture"], session),
+            filename, self.pkg.files[filename]["version"], sourceful=False)
 
         # Check for any existing copies of the file
         q = session.query(DBBinary).filter_by(package=self.pkg.files[filename]["package"])
@@ -2510,11 +2635,9 @@ distribution."""
         version = self.pkg.dsc.get("version")
 
         # Ensure version is sane
-        q = session.query(SrcAssociation)
-        q = q.join(DBSource).filter(DBSource.source==source)
-
-        self.cross_suite_version_check([ (x.suite.suite_name, x.source.version) for x in q.all() ],
-                                       filename, version, sourceful=True)
+        self.cross_suite_version_check( \
+            get_suite_version_by_source(source, session), filename, version,
+            sourceful=True)
 
     ################################################################################
     def check_dsc_against_db(self, filename, session):
@@ -2681,7 +2804,8 @@ distribution."""
                 source_version = entry["source version"]
                 source_package = entry["source package"]
                 if not self.pkg.changes["architecture"].has_key("source") \
-                   and not source_exists(source_package, source_version, self.pkg.changes["distribution"].keys(), session):
+                   and not source_exists(source_package, source_version, \
+                    suites = self.pkg.changes["distribution"].keys(), session = session):
                     source_epochless_version = re_no_epoch.sub('', source_version)
                     dsc_filename = "%s_%s.dsc" % (source_package, source_epochless_version)
                     found = False
@@ -2728,7 +2852,9 @@ distribution."""
                 source_version = entry["source version"]
                 source_package = entry["source package"]
                 if not self.pkg.changes["architecture"].has_key("source") \
-                   and not source_exists(source_package, source_version,  self.pkg.changes["distribution"].keys()):
+                   and not source_exists(source_package, source_version, \
+                    suites = self.pkg.changes["distribution"].keys(), \
+                    session = session):
                     self.rejects.append("no source found for %s %s (%s)." % (source_package, source_version, checkfile))
 
             # Version and file overwrite checks
index b273536058c603c5bc487d32d33fa4377a9f5716..8878e55c12486437f88e95e26cf75c383150a331 100755 (executable)
@@ -26,6 +26,7 @@ Utility functions for process-upload
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 import os
+from shutil import copyfile
 
 from daklib import utils
 from daklib.dbconn import *
@@ -34,24 +35,24 @@ from daklib.config import Config
 ################################################################################
 
 def package_to_suite(u, suite_name, session):
-    if not u.pkg.changes["distribution"].has_key(suite_name):
+    if suite_name not in u.pkg.changes["distribution"]:
         return False
 
-    ret = True
+    if 'source' in u.pkg.changes["architecture"]:
+        return True
 
-    if not u.pkg.changes["architecture"].has_key("source"):
-        q = session.query(SrcAssociation.sa_id)
-        q = q.join(Suite).filter_by(suite_name=suite_name)
-        q = q.join(DBSource).filter_by(source=u.pkg.changes['source'])
-        q = q.filter_by(version=u.pkg.changes['version']).limit(1)
+    q = session.query(Suite).filter_by(suite_name = suite_name). \
+        filter(Suite.sources.any( \
+            source = u.pkg.changes['source'], \
+            version = u.pkg.changes['version']))
 
-        # NB: Careful, this logic isn't what you would think it is
-        # Source is already in the target suite so no need to go to policy
-        # Instead, we don't move to the policy area, we just do an ACCEPT
-        if q.count() > 0:
-            ret = False
-
-    return ret
+    # NB: Careful, this logic isn't what you would think it is
+    # Source is already in the target suite so no need to go to policy
+    # Instead, we don't move to the policy area, we just do an ACCEPT
+    if q.count() > 0:
+        return False
+    else:
+        return True
 
 def package_to_queue(u, summary, short_summary, queue, chg, session, announce=None):
     cnf = Config()
@@ -63,6 +64,14 @@ def package_to_queue(u, summary, short_summary, queue, chg, session, announce=No
     u.move_to_queue(queue)
     chg.in_queue_id = queue.policy_queue_id
     session.add(chg)
+
+    # send to build queues
+    if queue.send_to_build_queues:
+        for suite_name in u.pkg.changes["distribution"].keys():
+            suite = get_suite(suite_name, session)
+            for q in suite.copy_queues:
+                q.add_changes_from_policy_queue(queue, chg)
+
     session.commit()
 
     # Check for override disparities
@@ -125,11 +134,6 @@ def do_unembargo(u, summary, short_summary, chg, session=None):
     package_to_queue(u, summary, short_summary,
                      polq, chg, session,
                      announce=None)
-    for suite_name in u.pkg.changes["distribution"].keys():
-        suite = get_suite(suite_name, session)
-        for q in suite.copy_queues:
-            for f in u.pkg.files.keys():
-                os.symlink(os.path.join(polq.path, f), os.path.join(q.path, f))
 #
 #################################################################################
 #
@@ -151,11 +155,6 @@ def do_embargo(u, summary, short_summary, chg, session=None):
     package_to_queue(u, summary, short_summary,
                      polq, chg, session,
                      announce=None)
-    for suite_name in u.pkg.changes["distribution"].keys():
-        suite = get_suite(suite_name, session)
-        for q in suite.copy_queues:
-            for f in u.pkg.files.keys():
-                os.symlink(os.path.join(polq.path, f), os.path.join(q.path, f))
 
 ################################################################################
 
index 62b8ac2e7625701a7f781f32ec85abfaf3f727da..47e6ab2c9f255402d23878eccfb0be903abf1761 100755 (executable)
@@ -124,3 +124,7 @@ re_parse_lintian = re.compile(r"^(?P<level>W|E|O): (?P<package>.*?): (?P<tag>[^
 
 # in process-upload
 re_match_expired = re.compile(r"^The key used to sign .+ has expired on .+$")
+
+# in generate-releases
+re_gensubrelease = re.compile (r".*/(binary-[0-9a-z-]+|source)$")
+re_includeinrelease = re.compile (r"(Contents-[0-9a-z-]+.gz|Index|Packages(.gz|.bz2)?|Sources(.gz|.bz2)?|MD5SUMS|Release)$")
index 60702c3d10d3535de7df32cebe1e7a9ea5df95a9..f678ec25e487a1b4fa9fa6cfd9e40716eebffaba 100644 (file)
@@ -35,8 +35,11 @@ class SummaryStats(object):
         if not getattr(self, 'initialised', False):
             self.initialised = True
             self.reset_accept()
+            self.reset_reject()
 
     def reset_accept(self):
         self.accept_count = 0
         self.accept_bytes = 0
 
+    def reset_reject(self):
+        self.reject_count = 0
index 5b17e3c496c5e99959badedc2c97402a5572eb5d..f1b68ce2e9bb4088222e2b0227a9793fafadafcd 100644 (file)
@@ -1,19 +1,21 @@
-import threading
-from time import sleep
+"""
+thread pool implementation for Python
 
-from daklib.config import Config
+@contact: Debian FTPMaster <ftpmaster@debian.org>
+@copyright: 2003 Tim Lesher
+@copyright: 2004 Carl Kleffner
+@copyright: 2010, 2011 Torsten Werner <twerner@debian.org>
+"""
 
 # This code is a modified copy of
 # http://code.activestate.com/recipes/203871-a-generic-programming-thread-pool/
 # and is licensed under the Python License. The full text of the license
 # is available in the file COPYING-PSF.
 
-# Ensure booleans exist (not needed for Python 2.2.1 or higher)
-try:
-    True
-except NameError:
-    False = 0
-    True = not False
+import threading
+from time import sleep
+
+from daklib.config import Config
 
 if Config().has_key('Common::ThreadCount'):
     defaultThreadCount = int(Config()['Common::ThreadCount'])
@@ -131,14 +133,15 @@ class ThreadPool:
         # Tell all the threads to quit
         self.__resizeLock.acquire()
         try:
-            self.__setThreadCountNolock(0)
-            self.__isJoining = True
-
             # Wait until all threads have exited
             if waitForThreads:
+                for t in self.__threads:
+                    t.goAway()
                 for t in self.__threads:
                     t.join()
                     del t
+            self.__setThreadCountNolock(0)
+            self.__isJoining = True
 
             # Reset the pool for potential reuse
             self.__isJoining = False
index 1756f58fa2d27132a3675a95716ab4404cf9a898..c1d78e3ce08d28a1e4e49ff3764180d78d2d018f 100755 (executable)
@@ -39,8 +39,9 @@ import re
 import email as modemail
 import subprocess
 
-from dbconn import DBConn, get_architecture, get_component, get_suite
+from dbconn import DBConn, get_architecture, get_component, get_suite, get_override_type, Keyring, session_wrapper
 from dak_exceptions import *
+from gpg import SignedFile
 from textutils import fix_maintainer
 from regexes import re_html_escaping, html_escaping, re_single_line_field, \
                     re_multi_line_field, re_srchasver, re_taint_free, \
@@ -151,7 +152,15 @@ def extract_component_from_section(section):
 
 ################################################################################
 
-def parse_deb822(contents, signing_rules=0):
+def parse_deb822(armored_contents, signing_rules=0, keyrings=None, session=None):
+    require_signature = True
+    if keyrings == None:
+        keyrings = []
+        require_signature = False
+
+    signed_file = SignedFile(armored_contents, keyrings=keyrings, require_signature=require_signature)
+    contents = signed_file.contents
+
     error = ""
     changes = {}
 
@@ -169,38 +178,16 @@ def parse_deb822(contents, signing_rules=0):
         index += 1
         indexed_lines[index] = line[:-1]
 
-    inside_signature = 0
-
     num_of_lines = len(indexed_lines.keys())
     index = 0
     first = -1
     while index < num_of_lines:
         index += 1
         line = indexed_lines[index]
-        if line == "":
-            if signing_rules == 1:
-                index += 1
-                if index > num_of_lines:
-                    raise InvalidDscError, index
-                line = indexed_lines[index]
-                if not line.startswith("-----BEGIN PGP SIGNATURE"):
-                    raise InvalidDscError, index
-                inside_signature = 0
-                break
-            else:
-                continue
-        if line.startswith("-----BEGIN PGP SIGNATURE"):
+        if line == "" and signing_rules == 1:
+            if index != num_of_lines:
+                raise InvalidDscError, index
             break
-        if line.startswith("-----BEGIN PGP SIGNED MESSAGE"):
-            inside_signature = 1
-            if signing_rules == 1:
-                while index < num_of_lines and line != "":
-                    index += 1
-                    line = indexed_lines[index]
-            continue
-        # If we're not inside the signed data, don't process anything
-        if signing_rules >= 0 and not inside_signature:
-            continue
         slf = re_single_line_field.match(line)
         if slf:
             field = slf.groups()[0].lower()
@@ -221,10 +208,7 @@ def parse_deb822(contents, signing_rules=0):
             continue
         error += line
 
-    if signing_rules == 1 and inside_signature:
-        raise InvalidDscError, index
-
-    changes["filecontents"] = "".join(lines)
+    changes["filecontents"] = armored_contents
 
     if changes.has_key("source"):
         # Strip the source version in brackets from the source field,
@@ -241,7 +225,7 @@ def parse_deb822(contents, signing_rules=0):
 
 ################################################################################
 
-def parse_changes(filename, signing_rules=0, dsc_file=0):
+def parse_changes(filename, signing_rules=0, dsc_file=0, keyrings=None):
     """
     Parses a changes file and returns a dictionary where each field is a
     key.  The mandatory first argument is the filename of the .changes
@@ -270,7 +254,7 @@ def parse_changes(filename, signing_rules=0, dsc_file=0):
         unicode(content, 'utf-8')
     except UnicodeError:
         raise ChangesUnicodeError, "Changes file not proper utf-8"
-    changes = parse_deb822(content, signing_rules)
+    changes = parse_deb822(content, signing_rules, keyrings=keyrings)
 
 
     if not dsc_file:
@@ -588,6 +572,46 @@ def build_file_list(changes, is_a_dsc=0, field="files", hashname="md5sum"):
 
 ################################################################################
 
+# see http://bugs.debian.org/619131
+def build_package_set(dsc, session = None):
+    if not dsc.has_key("package-set"):
+        return {}
+
+    packages = {}
+
+    for line in dsc["package-set"].split("\n"):
+        if not line:
+            break
+
+        (name, section, priority) = line.split()
+        (section, component) = extract_component_from_section(section)
+
+        package_type = "deb"
+        if name.find(":") != -1:
+            (package_type, name) = name.split(":", 1)
+        if package_type == "src":
+            package_type = "dsc"
+
+        # Validate type if we have a session
+        if session and get_override_type(package_type, session) is None:
+            # Maybe just warn and ignore? exit(1) might be a bit hard...
+            utils.fubar("invalid type (%s) in Package-Set." % (package_type))
+
+        if section == "":
+            section = "-"
+        if priority == "":
+            priority = "-"
+
+        if package_type == "dsc":
+            priority = "source"
+
+        if not packages.has_key(name) or packages[name]["type"] == "dsc":
+            packages[name] = dict(priority=priority, section=section, type=package_type, component=component, files=[])
+
+    return packages
+
+################################################################################
+
 def send_mail (message, filename=""):
     """sendmail wrapper, takes _either_ a message string or a file as arguments"""
 
@@ -1267,8 +1291,8 @@ def gpg_keyring_args(keyrings=None):
     return " ".join(["--keyring %s" % x for x in keyrings])
 
 ################################################################################
-
-def check_signature (sig_filename, data_filename="", keyrings=None, autofetch=None):
+@session_wrapper
+def check_signature (sig_filename, data_filename="", keyrings=None, autofetch=None, session=None):
     """
     Check the signature of a file and return the fingerprint if the
     signature is valid or 'None' if it's not.  The first argument is the
@@ -1296,7 +1320,7 @@ def check_signature (sig_filename, data_filename="", keyrings=None, autofetch=No
         return (None, rejects)
 
     if not keyrings:
-        keyrings = Cnf.ValueList("Dinstall::GPGKeyring")
+        keyrings = [ x.keyring_name for x in session.query(Keyring).filter(Keyring.active == True).all() ]
 
     # Autofetch the signing key if that's enabled
     if autofetch == None:
@@ -1571,3 +1595,41 @@ def parse_wnpp_bug_file(file = "/srv/ftp-master.debian.org/scripts/masterfiles/w
                 bugs.append(bug_no)
         wnpp[source] = bugs
     return wnpp
+
+################################################################################
+
+def get_packages_from_ftp(root, suite, component, architecture):
+    """
+    Returns an object containing apt_pkg-parseable data collected by
+    aggregating Packages.gz files gathered for each architecture.
+
+    @type root: string
+    @param root: path to ftp archive root directory
+
+    @type suite: string
+    @param suite: suite to extract files from
+
+    @type component: string
+    @param component: component to extract files from
+
+    @type architecture: string
+    @param architecture: architecture to extract files from
+
+    @rtype: TagFile
+    @return: apt_pkg class containing package data
+
+    """
+    filename = "%s/dists/%s/%s/binary-%s/Packages.gz" % (root, suite, component, architecture)
+    (fd, temp_file) = temp_filename()
+    (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_file))
+    if (result != 0):
+        fubar("Gunzip invocation failed!\n%s\n" % (output), result)
+    filename = "%s/dists/%s/%s/debian-installer/binary-%s/Packages.gz" % (root, suite, component, architecture)
+    if os.path.exists(filename):
+        (result, output) = commands.getstatusoutput("gunzip -c %s >> %s" % (filename, temp_file))
+        if (result != 0):
+            fubar("Gunzip invocation failed!\n%s\n" % (output), result)
+    packages = open_file(temp_file)
+    Packages = apt_pkg.ParseTagFile(packages)
+    os.unlink(temp_file)
+    return Packages
index 7d0d40741c1a7f71af8353aae790a6f59b8dca81..86cb73cdfb03e9d0125a00d9fb43578a82a66ea3 100644 (file)
@@ -25,7 +25,7 @@ o To process queue/:
 
 o To generate indices files:
 
-  * dak dominate          - removes obsolete packages from suites 
+  * dak dominate          - removes obsolete packages from suites
   * dak generate-filelist - generates file lists for apt-ftparchive
   * dak generate-releases - generates Release
 
@@ -41,6 +41,7 @@ o Information display:
   * dak ls - shows information about package(s)
   * dak queue-report - shows information about package(s) in queue/
   * dak override - can show you individual override entries
+  * dak graph - creates some pretty graphs of queue sizes over time
 
 Generic and useful, but only for those with existing archives
 -------------------------------------------------------------
index 3568ae7ad519cbf90ea165cc9fd4705568fa0de0..2b159a8f0915840f1889504a2b91bcda9a7aa6ac 100644 (file)
@@ -344,3 +344,6 @@ Canadians: This is a lighthouse. Your call.
 <helix> elmo: I can't believe people pay you to fix computers
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+<mhy> I wish they wouldnt leave biscuits out, thats just tempting. Damnit.
+
index c906dabadf1a3b819c3bae183eba15739fb1e8a0..b3c8bde675d537db0a265c83e531bcd9c27f85e4 100644 (file)
@@ -3,7 +3,7 @@ Rough Guide to doing Stable Point Releases in Debian
 
 o Dump projectb for backup purposes.
 o get everything listed, dak control-suite -l proposed-updates > p-u.list
-o generate the changelog using dak make-changelog
+o generate the changelog using dak make-changelog -s proposed-updates -b stable | cat - ${ftpdir}/dists/stable/ChangeLog | sponge ${ftpdir}/dists/stable/ChangeLog
 o add everything to stable:  cat p-u.list |dak control-suite --add stable
 o remove everything from proposed-updates, dak control-suite -r proposed-updates < p-u.list
 o sync with stable RM if there is any propup needed. do it, if so.
@@ -11,22 +11,43 @@ o ask rms if they have RMs to do.
 o If you installed a debian-installer upload; migrate the relevant
   installer-*/$release directory from proposed-updates to stable.
   (Including potentially removing older versions)
+  dak copy-installer helps
 o Update version number in README, README.html and dists/README
 o Update the 'Debian<n>.<n>r<n>' symlink in dists/
 o Clean up dists/stable/ChangeLog (add header, basically)
 o Update fields in suite table in postgresql (see below)
 
-o Run 'dak dominate --force -s stable'
-o Run 'dak generate-filelist -s stable'
-o Run apt-ftparchive generate apt.conf.stable
-o Run 'dak generate-releases --force-touch --apt-conf apt.conf.stable stable'
-
-
+o dak dominate --force -s stable
+o dak generate-filelist -s stable
+o Let SRM see if all is ok
+o cd $configdir ; apt-ftparchive generate apt.conf.stable
+o dak generate-releases --force-touch --apt-conf apt.conf.stable stable
+o Check if a mirror push is needed or next dinstall is enough. for a push
+o if so:
+   TRACEFILE="${ftpdir}/project/trace/ftp-master.debian.org"
+   DATE_SERIAL=$(date +"%Y%m%d01")
+   FILESOAPLUS1=$(awk '/serial/ { print $3+1 }' ${TRACEFILE} )
+   if [ "$DATE_SERIAL" -gt "$FILESOAPLUS1" ]; then
+       SERIAL="$DATE_SERIAL"
+   else
+       SERIAL="$FILESOAPLUS1"
+   fi
+   date -u > ${TRACEFILE}
+   echo "Using dak v1" >> ${TRACEFILE}
+   echo "Running on host: $(hostname -f)" >> ${TRACEFILE}
+   echo "Archive serial: ${SERIAL}" >> ${TRACEFILE}
+   cd ${mirrordir}
+   rsync -aH --link-dest ${ftpdir} --delete --delete-after --ignore-errors ${ftpdir}/. .
+
+   date -u > /srv/ftp.debian.org/web/mirrorstart
+   echo "Using dak v1" >> /srv/ftp.debian.org/web/mirrorstart
+   echo "Running on host $(hostname -f)" >> /srv/ftp.debian.org/web/mirrorstart
+   sudo -H -u archvsync /home/archvsync/runmirrors > ~dak/runmirrors.log 2>&1 &
 
 
 begin;
-update suite set version = '5.0.6' where suite_name = 'stable';
-update suite set description = 'Debian 5.0.6 Released 04 September 2010' where suite_name = 'stable';
+update suite set version = '6.0.1' where suite_name = 'stable';
+update suite set description = 'Debian 6.0.1 Released 19 March 2011' where suite_name = 'stable';
 
 ------------------------------------------------------------------------
 Old doc:
diff --git a/scripts/debian/buildd-add-keys b/scripts/debian/buildd-add-keys
new file mode 100755 (executable)
index 0000000..2100f59
--- /dev/null
@@ -0,0 +1,280 @@
+#!/bin/bash
+# No way I try to deal with a crippled sh just for POSIX foo.
+
+# Copyright (C) 2011 Joerg Jaspert <joerg@debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+# exit on errors
+set -e
+# make sure to only use defined variables
+set -u
+# ERR traps should be inherited from functions too.
+set -E
+
+# import the general variable set.
+export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
+. $SCRIPTVARS
+
+umask 027
+
+# And use one locale, no matter what the caller has set
+export LANG=C
+export LC_ALL=C
+PROGRAM="buildd-add-keys"
+
+# common functions are "outsourced"
+. "${configdir}/common"
+
+function cleanup() {
+    ERRVAL=$?
+    trap - ERR EXIT TERM HUP INT QUIT
+
+    for TEMPFILE in GPGSTATUS GPGLOGS GPGOUTF TEMPKEYDATA; do
+        DELF=${!TEMPFILE:-""}
+        if [ -n "${DELF}" ] && [ -f "${DELF}" ]; then
+            rm -f "${DELF}"
+        fi
+    done
+    exit $ERRVAL
+}
+
+base="${base}/scripts/builddkeyrings"
+INCOMING="${base}/incoming"
+ERRORS="${base}/errors"
+ADMINS="${base}/adminkeys.gpg"
+STAMPFILE="${base}/updatedkeyring"
+
+# Default options for our gpg calls
+DEFGPGOPT="--no-default-keyring --batch --no-tty --no-options --exit-on-status-write-error --no-greeting"
+
+if ! [ -d "${INCOMING}" ]; then
+    log "Missing incoming dir, nothing to do"
+    exit 1
+fi
+
+cd "${INCOMING}"
+KEYS=$(find . -maxdepth 1 -mindepth 1 -type f -name \*.key | sed -e "s,./,," | xargs)
+if [ -z "${KEYS}" ]; then
+    exit 0
+fi
+
+trap cleanup ERR EXIT TERM HUP INT QUIT
+
+# Tell prepare-dir that there is an update and it can run
+touch "${STAMPFILE}"
+
+# Whenever something goes wrong, its put in there.
+mkdir -p "${ERRORS}"
+
+# We process all new files in our incoming directory
+for file in ${KEYS}; do
+    file=${file##*/}
+    # First we want to see if we recognize the filename. The buildd people have
+    # to follow a certain schema:
+    # architecture_builddname.YEAR-MONTH-DAY_HOURMINUTE.key
+    if [[ $file =~ (.*)_(.*).([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}[0-9]{2}).key ]]; then
+        ARCH=${BASH_REMATCH[1]}
+        BUILDD=${BASH_REMATCH[2]}
+        # Right now timestamp is unused
+        TIMESTAMP=${BASH_REMATCH[3]}
+    else
+        log "Unknown file ${file}, not processing"
+        mv "${INCOMING}/${file}" "${ERRORS}/unknown.${file}.$(date -Is)"
+        continue
+    fi
+
+    # Do we know the architecture?
+    found=0
+    for carch in ${archs}; do
+        if [ "${ARCH}" == "${carch}" ]; then
+            log "Known arch ${ARCH}, buildd ${BUILDD}"
+            found=1
+            break
+        fi
+    done
+
+    if [ ${found} -eq 0 ]; then
+        log "Unknown architecture ${ARCH}"
+        mv "${INCOMING}/${file}" "${ERRORS}/unknownarch.${file}.$(date -Is)"
+        continue
+    fi
+
+    # If we did have a file with this name already somethings wrong
+    if [ -f "${base}/${ARCH}/${file}" ]; then
+        log "Already processed this file"
+        mv "${INCOMING}/${file}" "${ERRORS}/duplicate.${file}.$(date -Is)"
+        continue
+    fi
+
+    # Where we want the status-fd from gpgv turn up
+    GPGSTATUS=$(mktemp -p "${TMPDIR}" GPGSTATUS.XXXXXX)
+    # Same for the loggger-fd
+    GPGLOGS=$(mktemp -p "${TMPDIR}" GPGLOGS.XXXXXX)
+    # And "decrypt" gives us output, the key without the pgp sig around it
+    GPGOUTF=$(mktemp -p "${TMPDIR}" GPGOUTF.XXXXXX)
+
+    # Open the filehandles, assigning them to the two files, so we can let gpg use them
+    exec 4> "${GPGSTATUS}"
+    exec 5> "${GPGLOGS}"
+
+    # So lets run gpg, status/logger into the two files, to "decrypt" the keyfile
+    if ! gpg ${DEFGPGOPT} --keyring "${ADMINS}" --status-fd 4 --logger-fd 5 --decrypt "${INCOMING}/${file}" > "${GPGOUTF}"; then
+        ret=$?
+        log "gpg returned with ${ret}, not adding key from file ${file}"
+        DATE=$(date -Is)
+        mv "${INCOMING}/${file}" "${ERRORS}/gpgerror.${file}.${DATE}"
+        mv "${GPGSTATUS}" "${ERRORS}/gpgerror.${file}.gpgstatus.${DATE}"
+        mv "${GPGLOGS}" "${ERRORS}/gpgerror.${file}.gpglogs.${DATE}"
+        rm -f "${GPGOUTF}"
+        continue
+    fi
+
+    # Read in the status output
+    GPGSTAT=$(cat "${GPGSTATUS}")
+    # And check if we like the sig. It has to be both, GOODISG and VALIDSIG or we don't accept it
+    if [[ ${GPGSTAT} =~ "GOODSIG" ]] && [[ ${GPGSTAT} =~ "VALIDSIG" ]]; then
+        log "Signature for ${file} accepted"
+    else
+        log "We are missing one of GOODSIG or VALIDSIG"
+        DATE=$(date -Is)
+        mv "${INCOMING}/${file}" "${ERRORS}/badsig.${file}.${DATE}"
+        mv "${GPGSTATUS}" "${ERRORS}/badsig.${file}.gpgstatus.${DATE}"
+        mv "${GPGLOGS}" "${ERRORS}/badsig.${file}.gpglogs.${DATE}"
+        rm -f "${GPGOUTF}"
+        continue
+    fi
+
+    # So at this point we know we accepted the signature of the file as valid,
+    # that is it is from a key allowed for this architecture. Which only
+    # leaves us with the task of checking if the key fulfills the requirements
+    # before we add it to the architectures keyring.
+
+    # Those currently are:
+    # - keysize 4096 or larger
+    # - RSA key, no encryption capability
+    # - UID matching "buildd autosigning key BUILDDNAME <buildd_ARCH-BUILDDNAME@buildd.debian.org>
+    # - expire within a 120 days
+    # - maximum 2 keys per architecture and buildd
+
+    TEMPKEYDATA=$(mktemp -p "${TMPDIR}" BDKEYS.XXXXXX)
+
+    gpg ${DEFGPGOPT} --with-colons "${GPGOUTF}" > "${TEMPKEYDATA}"
+
+    # Read in the TEMPKEYDATAFILE, but avoid using a subshell like a
+    # while read line otherwise would do
+    exec 4<> "${TEMPKEYDATA}"
+    KEYUID=""
+    #pub:-:4096:1:FAB983612A6554FA:2011-03-24:2011-07-22::-:buildd autosigning key poulenc <buildd_powerpc-poulenc@buildd.debian.org>:
+
+    # Of course this sucky gpg crapshit of an "interface" does give you different things depending on how people
+    # created their keys. And of course the buildd people created the test keys differently to what they now do
+    # which just means extra work for nothing. So as they now do other steps, the thing we get back suddenly looks like
+
+    #pub:-:4096:1:99595DC7865BEAD2:2011-03-26:2011-07-24::-:
+    #uid:::::::::buildd autosigning key corelli <buildd_mips-corelli@buildd.debian.org>:
+
+    # Besides fiddling out the data we need to check later, this regex also check:
+    # - the keytype (:1:, 1 there means RSA)
+    # - the UID
+    # - that the key does have an expiration date (or it wont match, the second date
+    #   field would be empty
+    regex="^pub:-:([0-9]{4}):1:([0-9A-F]{16}):([0-9]{4}-[0-9]{2}-[0-9]{2}):([0-9]{4}-[0-9]{2}-[0-9]{2})::-:(buildd autosigning key ${BUILDD} <buildd_${ARCH}-${BUILDD}@buildd.debian.org>):$"
+    regex2="^pub:-:([0-9]{4}):1:([0-9A-F]{16}):([0-9]{4}-[0-9]{2}-[0-9]{2}):([0-9]{4}-[0-9]{2}-[0-9]{2})::-:$"
+    regex3="^uid:::::::::(buildd autosigning key ${BUILDD} <buildd_${ARCH}-${BUILDD}@buildd.debian.org>):$"
+    while read line <&4; do
+        if [[ $line =~ $regex ]]; then
+            KEYSIZE=${BASH_REMATCH[1]}
+            KEYID=${BASH_REMATCH[2]}
+            KEYCREATE=${BASH_REMATCH[3]}
+            KEYEXPIRE=${BASH_REMATCH[4]}
+        KEYUID=${BASH_REMATCH[5]}
+    elif [[ $line =~ $regex2 ]]; then
+        KEYSIZE=${BASH_REMATCH[1]}
+            KEYID=${BASH_REMATCH[2]}
+            KEYCREATE=${BASH_REMATCH[3]}
+            KEYEXPIRE=${BASH_REMATCH[4]}
+    elif [[ $line =~ $regex3 ]]; then
+        KEYUID=${BASH_REMATCH[1]}
+    else
+        log "Didn't recognize the key. Go kiss gpg"
+            DATE=$(date -Is)
+            mv "${INCOMING}/${file}" "${ERRORS}/badkey.${file}.${DATE}"
+            mv "${GPGSTATUS}" "${ERRORS}/badkey.${file}.gpgstatus.${DATE}"
+            mv "${GPGLOGS}" "${ERRORS}/badkey.${file}.gpglogs.${DATE}"
+            rm -f "${GPGOUTF}"
+        continue
+    fi
+    done
+    if [ -z "${KEYUID}" ]; then
+    log "Did not recognize the UID format"
+        DATE=$(date -Is)
+        mv "${INCOMING}/${file}" "${ERRORS}/keyuid.${file}.${DATE}"
+        mv "${GPGSTATUS}" "${ERRORS}/keyuid.${file}.gpgstatus.${DATE}"
+        mv "${GPGLOGS}" "${ERRORS}/keyuid.${file}.gpglogs.${DATE}"
+        rm -f "${GPGOUTF}"
+    continue
+    fi
+    # We do want 4096 or anything above
+    if [ ${KEYSIZE} -lt 4096 ]; then
+        log "Keysize ${KEYSIZE} too small"
+        DATE=$(date -Is)
+        mv "${INCOMING}/${file}" "${ERRORS}/keysize.${file}.${DATE}"
+        mv "${GPGSTATUS}" "${ERRORS}/keysize.${file}.gpgstatus.${DATE}"
+        mv "${GPGLOGS}" "${ERRORS}/keysize.${file}.gpglogs.${DATE}"
+        rm -f "${GPGOUTF}"
+    continue
+    fi
+
+    # We want a maximum lifetime of 120 days, so check that.
+    # Easiest to compare in epoch, so lets see, 120 days midnight from now,
+    # compared with their set expiration date at midnight
+    # maxdate should turn out higher. just in case we make it 121 for this check
+    maxdate=$(date -d '121 day 00:00:00' +%s)
+    theirexpire=$(date -d "${KEYEXPIRE} 00:00:00" +%s)
+    if [ ${theirexpire} -gt ${maxdate} ]; then
+        log "Key expiry ${KEYEXPIRE} wrong"
+        DATE=$(date -Is)
+        mv "${INCOMING}/${file}" "${ERRORS}/keyexpire.${file}.${DATE}"
+        mv "${GPGSTATUS}" "${ERRORS}/keyexpire.${file}.gpgstatus.${DATE}"
+        mv "${GPGLOGS}" "${ERRORS}/keyexpire.${file}.gpglogs.${DATE}"
+        rm -f "${GPGOUTF}"
+    continue
+    fi
+
+    # And now lets check how many keys this buildd already has. 2 is the maximum, so key
+    # rollover works. 3 won't, they have to rm one first
+    # We need to check for the amount of keys
+    ARCHKEYRING="${base}/${ARCH}/keyring.gpg"
+
+    KEYNO=$(gpg ${DEFGPGOPT} --keyring "${ARCHKEYRING}" --with-colons --list-keys "buildd_${ARCH}-${BUILDD}@buildd.debian.org" | grep -c '^pub:' || /bin/true )
+    if [ ${KEYNO} -gt 2 ]; then
+        DATE=$(date -Is)
+        mv "${INCOMING}/${file}" "${ERRORS}/toomany.${file}.${DATE}"
+        mv "${GPGSTATUS}" "${ERRORS}/toomany.${file}.gpgstatus.${DATE}"
+        mv "${GPGLOGS}" "${ERRORS}/toomany.${file}.gpglogs.${DATE}"
+        rm -f "${GPGOUTF}"
+        continue
+    fi
+
+    # Right. At this point everything should be in order, which means we should put the key into
+    # the keyring
+    KEYSUBMITTER=$(cat "${GPGSTATUS}"|grep GOODSIG)
+    KEYSUBMITTER=${KEYSUBMITTER##*GOODSIG}
+    log "${KEYSUBMITTER} added key ${KEYID} for ${ARCH} buildd ${BUILDD}, expire ${KEYEXPIRE}"
+    gpg ${DEFGPGOPT} --status-fd 4 --logger-fd 5 --keyring "${ARCHKEYRING}" --import "${GPGOUTF}" 2>/dev/null
+
+    mv "${INCOMING}/${file}" "${base}/${ARCH}"
+done
diff --git a/scripts/debian/buildd-prepare-dir b/scripts/debian/buildd-prepare-dir
new file mode 100755 (executable)
index 0000000..df4b098
--- /dev/null
@@ -0,0 +1,65 @@
+#!/bin/bash
+# No way I try to deal with a crippled sh just for POSIX foo.
+
+# Copyright (C) 2011 Joerg Jaspert <joerg@debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+# exit on errors
+set -e
+# make sure to only use defined variables
+set -u
+# ERR traps should be inherited from functions too.
+set -E
+
+# import the general variable set.
+export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
+. $SCRIPTVARS
+
+# And use one locale, no matter what the caller has set
+export LANG=C
+export LC_ALL=C
+PROGRAM="buildd-prepare-dir"
+
+# common functions are "outsourced"
+. "${configdir}/common"
+
+# should be relative to the general base dir later
+COPYTARGET="${base}/keyrings"
+GNUPGHOME="${base}/s3kr1t/dot-gnupg"
+base="${base}/scripts/builddkeyrings"
+TARGET="${base}/keyrings"
+REMOVED="${base}/removed-buildd-keys.gpg"
+STAMPFILE="${base}/updatedkeyring"
+
+mkdir -p "${TARGET}/buildd-keyrings"
+
+if [ -f "${STAMPFILE}" ]; then
+    rm -f "${STAMPFILE}"
+    for arch in $archs; do
+        if [ -f ${base}/${arch}/keyring.gpg ]; then
+            cp -afl ${base}/${arch}/keyring.gpg ${TARGET}/buildd-keyrings/buildd-${arch}-keyring.gpg
+            chmod 0644 ${TARGET}/buildd-keyrings/buildd-${arch}-keyring.gpg
+        fi
+    done
+
+    cd ${TARGET}
+    sha512sum buildd-keyrings/* > sha512sums
+
+    rm -f ${TARGET}/sha512sums.txt
+    SIGNINGKEY=B1326A8D
+    GNUPGHOME=${GNUPGHOME} gpg --no-options  --batch --no-tty --armour --default-key ${SIGNINGKEY} --clearsign -o "${TARGET}/sha512sums.txt" "${TARGET}/sha512sums"
+    rm -f ${TARGET}/sha512sums
+fi
diff --git a/scripts/debian/buildd-remove-keys b/scripts/debian/buildd-remove-keys
new file mode 100755 (executable)
index 0000000..ecd859d
--- /dev/null
@@ -0,0 +1,208 @@
+#!/bin/bash
+# No way I try to deal with a crippled sh just for POSIX foo.
+
+# Copyright (C) 2011 Joerg Jaspert <joerg@debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+# exit on errors
+set -e
+# make sure to only use defined variables
+set -u
+# ERR traps should be inherited from functions too.
+set -E
+
+# import the general variable set.
+export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
+. $SCRIPTVARS
+
+umask 027
+
+# And use one locale, no matter what the caller has set
+export LANG=C
+export LC_ALL=C
+PROGRAM="buildd-remove-keys"
+
+# common functions are "outsourced"
+. "${configdir}/common"
+
+function cleanup() {
+    ERRVAL=$?
+    trap - ERR EXIT TERM HUP INT QUIT
+
+    for TEMPFILE in GPGSTATUS GPGLOGS GPGOUTF TEMPKEYDATA; do
+        DELF=${!TEMPFILE:-""}
+        if [ -n "${DELF}" ] && [ -f "${DELF}" ]; then
+            rm -f "${DELF}"
+        fi
+    done
+    exit $ERRVAL
+}
+
+base="${base}/scripts/builddkeyrings"
+INCOMING="${base}/incoming"
+ERRORS="${base}/errors"
+ADMINS="${base}/adminkeys.gpg"
+REMOVED="${base}/removed-buildd-keys.gpg"
+STAMPFILE="${base}/updatedkeyring"
+
+# Default options for our gpg calls
+DEFGPGOPT="--no-default-keyring --batch --no-tty --no-options --exit-on-status-write-error --no-greeting"
+
+if ! [ -d "${INCOMING}" ]; then
+    log "Missing incoming dir, nothing to do"
+    exit 1
+fi
+
+cd "${INCOMING}"
+KEYS=$(find . -maxdepth 1 -mindepth 1 -type f -name \*.del | sed -e "s,./,," | xargs)
+if [ -z "${KEYS}" ]; then
+    exit 0
+fi
+
+trap cleanup ERR EXIT TERM HUP INT QUIT
+
+# Tell prepare-dir that there is an update and it can run
+touch "${STAMPFILE}"
+
+# Whenever something goes wrong, its put in there.
+mkdir -p "${ERRORS}"
+
+# We process all new files in our incoming directory
+for file in ${KEYS}; do
+    file=${file##*/}
+    # First we want to see if we recognize the filename. The buildd people have
+    # to follow a certain schema:
+    # architecture_builddname.YEAR-MONTH-DAY_HOURMINUTE.del
+    if [[ $file =~ (.*)_(.*).([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}[0-9]{2}).del ]]; then
+        ARCH=${BASH_REMATCH[1]}
+        BUILDD=${BASH_REMATCH[2]}
+        # Right now timestamp is unused
+        TIMESTAMP=${BASH_REMATCH[3]}
+    else
+        log "Unknown file ${file}, not processing"
+        mv "${INCOMING}/${file}" "${ERRORS}/unknown.${file}.$(date -Is)"
+        continue
+    fi
+
+    # Do we know the architecture?
+    found=0
+    for carch in ${archs}; do
+        if [ "${ARCH}" == "${carch}" ]; then
+            log "Known arch ${ARCH}, buildd ${BUILDD}"
+            found=1
+            break
+        fi
+    done
+
+    if [ ${found} -eq 0 ]; then
+        log "Unknown architecture ${ARCH}"
+        mv "${INCOMING}/${file}" "${ERRORS}/unknownarch.${file}.$(date -Is)"
+        continue
+    fi
+
+    # If we did have a file with this name already somethings wrong
+    if [ -f "${base}/${ARCH}/${file}" ]; then
+        log "Already processed this file"
+        mv "${INCOMING}/${file}" "${ERRORS}/duplicate.${file}.$(date -Is)"
+        continue
+    fi
+
+    # Where we want the status-fd from gpgv turn up
+    GPGSTATUS=$(mktemp -p "${TMPDIR}" GPGSTATUS.XXXXXX)
+    # Same for the loggger-fd
+    GPGLOGS=$(mktemp -p "${TMPDIR}" GPGLOGS.XXXXXX)
+    # And "decrypt" gives us output, the key without the pgp sig around it
+    GPGOUTF=$(mktemp -p "${TMPDIR}" GPGOUTF.XXXXXX)
+
+    # Open the filehandles, assigning them to the two files, so we can let gpg use them
+    exec 4> "${GPGSTATUS}"
+    exec 5> "${GPGLOGS}"
+
+    # So lets run gpg, status/logger into the two files, to "decrypt" the keyfile
+    if ! gpg ${DEFGPGOPT} --keyring "${ADMINS}" --status-fd 4 --logger-fd 5 --decrypt "${INCOMING}/${file}" > "${GPGOUTF}"; then
+        ret=$?
+        log "gpg returned with ${ret}, not removing key using ${file}"
+        DATE=$(date -Is)
+        mv "${INCOMING}/${file}" "${ERRORS}/gpgerror.${file}.${DATE}"
+        mv "${GPGSTATUS}" "${ERRORS}/gpgerror.${file}.gpgstatus.${DATE}"
+        mv "${GPGLOGS}" "${ERRORS}/gpgerror.${file}.gpglogs.${DATE}"
+        rm -f "${GPGOUTF}"
+        continue
+    fi
+
+    # Read in the status output
+    GPGSTAT=$(cat "${GPGSTATUS}")
+    # And check if we like the sig. It has to be both, GOODISG and VALIDSIG or we don't accept it
+    if [[ ${GPGSTAT} =~ "GOODSIG" ]] && [[ ${GPGSTAT} =~ "VALIDSIG" ]]; then
+        log "Signature for ${file} accepted"
+    else
+        log "We are missing one of GOODSIG or VALIDSIG"
+        DATE=$(date -Is)
+        mv "${INCOMING}/${file}" "${ERRORS}/badsig.${file}.${DATE}"
+        mv "${GPGSTATUS}" "${ERRORS}/badsig.${file}.gpgstatus.${DATE}"
+        mv "${GPGLOGS}" "${ERRORS}/badsig.${file}.gpglogs.${DATE}"
+        rm -f "${GPGOUTF}"
+        continue
+    fi
+
+    # So at this point we know we accepted the signature of the file as valid,
+    # that is it is from a key allowed for this architecture. Which only
+    # leaves us with the task of checking if there is a key to remove, and then remove
+    # it. We won't even check they have a key left, so if they want to they can
+    # empty out the set for an architecture
+
+    # Read in the GPGOUTF, but avoid using a subshell like a
+    # while read line otherwise would do
+    exec 4<> "${GPGOUTF}"
+    error=""
+    while read line <&4; do
+        if [[ $line =~ key:.([0-9A-F]{16}) ]]; then
+            KEYID=${BASH_REMATCH[1]}
+        elif [[ $line =~ comment:.(.*) ]]; then
+            COMMENT=${BASH_REMATCH[1]}
+        else
+            echo "Nay"
+        fi
+    done
+
+    # Right, we have the keyid, know the arch, lets see if we can remove it
+    ARCHKEYRING="${base}/${ARCH}/keyring.gpg"
+
+    # Is the key in there?
+    KEYNO=$(gpg ${DEFGPGOPT} --keyring "${ARCHKEYRING}" --with-colons --list-keys ${KEYID} | grep -c '^pub:' || /bin/true )
+
+    if [ $KEYNO -eq 1 ]; then
+        # Right, exactly one there, lets get rid of it
+        # So put it into the removed keyring
+        gpg ${DEFGPGOPT} --keyring "${ARCHKEYRING}" --export ${KEYID} | gpg ${DEFGPGOPT} --keyring "${REMOVED}" --import 2>/dev/null
+        if gpg ${DEFGPGOPT} --keyring "${ARCHKEYRING}" --yes --delete-keys ${KEYID}; then
+            KEYSUBMITTER=$(cat "${GPGSTATUS}"|grep GOODSIG)
+            KEYSUBMITTER=${KEYSUBMITTER##*GOODSIG}
+            log "${KEYSUBMITTER} removed key ${KEYID} for ${ARCH} buildd ${BUILDD}, reason: ${COMMENT}"
+            mv "${INCOMING}/${file}" "${base}/${ARCH}"
+            continue
+        fi
+    else
+        log "Found more (or less) than one key I could delete. Not doing anything"
+        DATE=$(date -Is)
+        mv "${INCOMING}/${file}" "${ERRORS}/toomanykeys.${file}.${DATE}"
+        mv "${GPGSTATUS}" "${ERRORS}/toomanykeys.${file}.gpgstatus.${DATE}"
+        mv "${GPGLOGS}" "${ERRORS}/toomanykeys.${file}.gpglogs.${DATE}"
+        echo "${error}" >> "${ERRORS}/toomanykeys.${file}.error.${DATE}"
+        rm -f "${GPGOUTF}"
+        continue
+    fi
+done
index ab01536d7adf4f165c2c1fabd7d30b297ec1e9db..99cb313152555496227c56f751cad15f8e66d9a8 100755 (executable)
@@ -1,4 +1,7 @@
-#!/bin/sh -ue
+#!/bin/sh
+
+set -u
+set -e
 
 if [ $# -lt 4 ]; then
        echo "Usage: $0 filename version arch changes_file"
@@ -16,8 +19,8 @@ error() {
 }
 
 # Check validity of version number
-# Expected are: YYYYMMDD, YYYYMMDD.x, YYYYMMDD<suite>x and the +b[0-9] on the end
-if ! echo "$VERSION" | grep -Eq "^[0-9]{8}(|(\.|[a-z]+)[0-9]+)(\+b[0-9])?$"; then
+# Expected are: YYYYMMDD, YYYYMMDD.x, YYYYMMDD<suite>x, YYYYMMDD+<suite>x and the +b[0-9] on the end
+if ! echo "$VERSION" | grep -Eq "^[0-9]{8}(|(\.|\+?[a-z]+)[0-9]+)(\+b[0-9])?$"; then
        error "Invalid version: '$VERSION'"
 fi
 
index 81a8946676a8a3af626813d7e4ac4c8798b98c90..8dfa17a6a7eff6fed905eb328118524e24530336 100755 (executable)
@@ -1,4 +1,7 @@
-#!/bin/sh -ue
+#!/bin/sh
+
+set -u
+set -e
 
 export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
 . $SCRIPTVARS
@@ -42,6 +45,11 @@ mv "$OUTNONFREE"        "$TARGET"tag.non-free
 chmod 644 "$TARGET"tag "$TARGET"tag.contrib "$TARGET"tag.non-free
 
 (cd $TARGET && $scriptsdir/mk-extra-overrides.sh)
+(cd "$TARGET" \
+  && dak external-overrides import unstable main Tag <tag \
+  && dak external-overrides import unstable contrib Tag <tag.contrib \
+  && dak external-overrides import unstable non-free Tag <tag.non-free)
+dak external-overrides copy unstable testing
 
 trap - EXIT
 
index 82f0964482889732c6f506cfff5a0bd3841d259d..ee0c55144631db7a059ad337d105a482c26ab278 100755 (executable)
@@ -1,4 +1,7 @@
-#!/bin/sh -ue
+#!/bin/sh
+
+set -u
+set -e
 
 if [ $# -lt 4 ]; then
         echo "Usage: $0 filename version arch changes_file"
@@ -62,6 +65,8 @@ mv "$OUTMAIN"           "$TARGET"task
 chmod 644 "$TARGET"task
 
 (cd $TARGET && $scriptsdir/mk-extra-overrides.sh)
+dak external-overrides import unstable main Task <"$TARGET"task
+dak external-overrides copy unstable testing
 
 trap - EXIT
 
diff --git a/scripts/debian/byhand-win32-loader b/scripts/debian/byhand-win32-loader
new file mode 100755 (executable)
index 0000000..fff1974
--- /dev/null
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+set -u
+set -e
+
+if [ $# -lt 4 ]; then
+       echo "Usage: $0 filename version arch changes_file"
+       exit 1
+fi
+
+export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
+. $SCRIPTVARS
+
+WIN32_LOADER_FILE="$1" # win32-loader_${VERSION}_${ARCH}{.exe,txt}
+VERSION="$2"
+ARCH="$3"
+CHANGES="$4"   # Changes file for the upload
+
+# Get the target suite from the Changes file
+# NOTE: it may be better to pass this to the script as a parameter!
+SUITE="$(grep "^Distribution:" "$CHANGES" | awk '{print $2}')"
+case $SUITE in
+    "")
+           echo "Error: unable to determine suite from Changes file"
+        exit 1
+           ;;
+    unstable|sid)
+           : # nothing to do
+           ;;
+    *)
+           SUITE="${SUITE}-proposed-updates"
+           ;;
+esac
+
+# This must end with /
+TARGET="${ftpdir}/tools/win32-loader/${SUITE}/"
+
+# Prepare the target filename by removing the version and arch parts;
+# transforms any/path/win32-loader_${VERSION}_${ARCH}.${extension} to win32-loader.${extension}
+TARGET_FILENAME="${WIN32_LOADER_FILE%%_*}.${WIN32_LOADER_FILE##*.}"
+
+# Check validity of the target directory
+if [ ! -d "$TARGET" ]; then
+       mkdir -p "$TARGET"
+fi
+
+# Put said file into the tools directory
+cp "$WIN32_LOADER_FILE" "${TARGET}${TARGET_FILENAME}"
+
+# Chmod it correctly
+chmod 0644 "${TARGET}${TARGET_FILENAME}"
+
+exit 0
index 1d3736450cf5eca241333801c28bc2f97e7d5dc2..f894f1ccb943509c991759432aeb4742fd083e1e 100755 (executable)
@@ -1,8 +1,8 @@
 #!/bin/bash
 #
-# $Id: ddtp_i18n_check.sh 1670 2009-03-31 20:57:49Z nekral-guest $
+# $Id: ddtp_i18n_check.sh 2535 2011-02-19 14:20:52Z nekral-guest $
 # 
-# Copyright (C) 2008, Felipe Augusto van de Wiel <faw@funlabs.org>
+# Copyright (C) 2008, 2011 Felipe Augusto van de Wiel <faw@funlabs.org>
 # Copyright (C) 2008, 2009 Nicolas François <nicolas.francois@centraliens.net>
 #
 # This program is free software; you can redistribute it and/or modify
@@ -25,6 +25,10 @@ DEBUG=0
 # files.
 DRY_RUN=0
 
+# When GEN_IDX=1, we create the Index files.  There is a runtime option
+# to not create/generate the Index file.
+GEN_IDX=1
+
 dists_parent_dir=""
 # If no argument indicates the PACKAGES_LISTS_DIR then use '.'
 PACKAGES_LISTS_DIR=""
@@ -35,6 +39,7 @@ usage () {
        echo "    --debug      Debug mode: do not stop after the first error" >&2
        echo "    --dry-run    Do not generate the compressed version of the " >&2
        echo "                 Translation files">&2
+       echo "    --no-index   Do not generate the Index files" >&2
        exit 1
 }
 
@@ -47,6 +52,9 @@ for opt; do
                "--dry-run")
                        DRY_RUN=1
                        ;;
+               "--no-index")
+                       GEN_IDX=0
+                       ;;
                "-*")
                        usage
                        ;;
@@ -80,21 +88,21 @@ elif [ ! -d "$PACKAGES_LISTS_DIR" ]; then
        usage
 fi
 
-#STABLE="lenny"
-TESTING="squeeze"
+#STABLE="squeeze"
+TESTING="wheezy"
 UNSTABLE="sid"
 
 # Original SHA256SUMS, generated by i18n.debian.net
-SHA256SUMS="SHA256SUMS"
+CHECKSUMS="SHA256SUMS"
 
 # DAK Timestamp
 TIMESTAMP="timestamp"
 
 # These special files must exist on the top of dists_parent_dir
-SPECIAL_FILES="$SHA256SUMS $TIMESTAMP $TIMESTAMP.gpg"
+SPECIAL_FILES="$CHECKSUMS $TIMESTAMP $TIMESTAMP.gpg"
 
 # Temporary working directory. We need a full path to reduce the
-# complexity of checking SHA256SUMS and cleaning/removing TMPDIR
+# complexity of checking CHECKSUMS and cleaning/removing TMPDIR
 TEMP_WORK_DIR=$(mktemp -d -t ddtp_dinstall_tmpdir.XXXXXX)
 cd "$TEMP_WORK_DIR"
 TMP_WORK_DIR=$(pwd)
@@ -105,6 +113,7 @@ unset TEMP_WORK_DIR
 trap_exit () {
        rm -rf "$TMP_WORK_DIR"
        rm -f "$dists_parent_dir"/dists/*/main/i18n/Translation-*.bz2
+       rm -f "$dists_parent_dir"/dists/*/main/i18n/Index
        exit 1
 }
 trap trap_exit EXIT HUP INT QUIT TERM
@@ -315,18 +324,18 @@ for sf in $SPECIAL_FILES; do
        fi
 done
 
-# Comparing SHA256SUMS
-# We don use -c because a file could exist in the directory tree and not in
-# the SHA256SUMS, so we sort the existing SHA256SUMS and we create a new one
+# Comparing CHECKSUMS
+# We don't use -c because a file could exist in the directory tree and not in
+# the CHECKSUMS, so we sort the existing CHECKSUMS and we create a new one
 # already sorted, if cmp fails then files are different and we don't want to
 # continue.
 cd "$dists_parent_dir"
-find dists -type f -print0 |xargs --null sha256sum > "$TMP_WORK_DIR/$SHA256SUMS.new"
-sort "$SHA256SUMS" > "$TMP_WORK_DIR/$SHA256SUMS.sorted"
-sort "$TMP_WORK_DIR/$SHA256SUMS.new" > "$TMP_WORK_DIR/$SHA256SUMS.new.sorted"
-if ! cmp --quiet "$TMP_WORK_DIR/$SHA256SUMS.sorted" "$TMP_WORK_DIR/$SHA256SUMS.new.sorted"; then
-       echo "Failed to compare the SHA256SUMS, they are not identical!" >&2
-       diff -au "$TMP_WORK_DIR/$SHA256SUMS.sorted" "$TMP_WORK_DIR/$SHA256SUMS.new.sorted" >&2
+find dists -type f -print0 |xargs --null sha256sum > "$TMP_WORK_DIR/$CHECKSUMS.new"
+sort "$CHECKSUMS" > "$TMP_WORK_DIR/$CHECKSUMS.sorted"
+sort "$TMP_WORK_DIR/$CHECKSUMS.new" > "$TMP_WORK_DIR/$CHECKSUMS.new.sorted"
+if ! cmp --quiet "$TMP_WORK_DIR/$CHECKSUMS.sorted" "$TMP_WORK_DIR/$CHECKSUMS.new.sorted"; then
+       echo "Failed to compare the $CHECKSUMS, they are not identical!" >&2
+       diff -au "$TMP_WORK_DIR/$CHECKSUMS.sorted" "$TMP_WORK_DIR/$CHECKSUMS.new.sorted" >&2
        exit 1
 fi
 cd "$OLDPWD"
@@ -346,6 +355,14 @@ while read f; do
                if ! is_dirname_okay "$f"; then
                        echo "Wrong directory name: $f" >&2
                        exit 1
+               else
+                       # If the directory name is OK, and if it's name is i18n
+                       # and GEN_IDX is enabled, we generate the header of the
+                       # Index file
+                       if [ "$(basename $f)" = "i18n" -a "$GEN_IDX" = "1" ];
+                       then
+                               echo "SHA1:" > "$f/Index"
+                       fi
                fi
        elif [ -f "$f" ]; then
                # If $f is in $SPECIAL_FILES, we skip to the next loop because
@@ -393,6 +410,17 @@ while read f; do
                        # Now generate the compressed files
                        bzip2 "$f"
                fi
+
+               # Create Index
+               if [ "$GEN_IDX" = "1" ]; then
+                       fbz=${f}.bz2
+                       IDX=$(dirname $f)
+                       tf_name=$(basename $fbz)
+                       tf_sha1=$(sha1sum $fbz)
+                       tf_size=$(du $fbz)
+                       printf ' %s % 7s %s\n' "${tf_sha1% *}" \
+                               "${tf_size%     *}" "${tf_name}" >> "$IDX/Index"
+               fi
        else
                echo "Neither a file or directory: $f" >&2
                exit 1
index 2907ba28c55737bbc82eff789bac5c5978862ae6..b7b20655da25baa7d07798163987fb6ba8ba709c 100755 (executable)
@@ -59,7 +59,7 @@ def all_files(pattern, search_path, pathsep=os.pathsep):
 def parse_file_dates(list):
     out = []
     # dump_2006.05.02-11:52:01.bz2
-    p = re.compile('^\./dump_([0-9]{4})\.([0-9]{2})\.([0-9]{2})-([0-9]{2}):([0-9]{2}):([0-9]{2})(.bz2)?$')
+    p = re.compile('^\./dump_([0-9]{4})\.([0-9]{2})\.([0-9]{2})-([0-9]{2}):([0-9]{2}):([0-9]{2})(.xz)?$')
     for file in list:
         m = p.search(file)
         if m:
index 183baddd92cd5e2834add8f700efe34ac4efff49..5a0b853eafdef9093be6c1c9948e61819d1a1ecd 100755 (executable)
@@ -69,6 +69,9 @@ if [ "x${DO_CHANGELOG}x" = "xtruex" ]; then
     find . -maxdepth 1 -mindepth 1 -type f -mmin +2880 -name 'ChangeLog.*' -delete
 fi
 
+#echo "Regenerating Packages/Sources files, be patient"
+#dak generate-packages-sources2 -s ${IMPORTSUITE} >/dev/null
+
 echo "Done"
 
 exit 0
diff --git a/scripts/debian/rrd-release-freeze-dates b/scripts/debian/rrd-release-freeze-dates
new file mode 100644 (file)
index 0000000..7981e51
--- /dev/null
@@ -0,0 +1,3 @@
+VRULE:1234691928#632a5b:lenny release
+VRULE:1281102258#0b19c1:squeeze freeze
+VRULE:1296908977#0b19c1:squeeze release
index d5568f58ce23b865bd1c7c95b615ec9c9eafd70c..2a89da403cb1483c502992a4352e8968ba8712e5 100755 (executable)
@@ -1,6 +1,7 @@
 #!/bin/sh -e
 
-. vars
+export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
+. $SCRIPTVARS
 
 export TERM=linux
 
index ea07a72a3517aba84c156f449e1769675d1ae763..c2e1355e0e93b533ad7ca7772ce18c12ac2bf6d0 100755 (executable)
@@ -3,25 +3,25 @@
 my %data;
 my %data2;
 my @archs = ("source", "all", "amd64", "i386", "alpha", "arm", "armel", "hppa",
-       "hurd-i386", "ia64", "kfreebsd-amd64", "kfreebsd-i386", "mips", "mipsel", "powerpc", "s390",
-       "sparc");
+             "hurd-i386", "ia64", "kfreebsd-amd64", "kfreebsd-i386", "mips", "mipsel", "powerpc", "s390",
+             "sparc");
 
 while (<>) {
-       if (/^(\d{8})\d{6}\|(?:k(?:atie|elly)|process-accepted)\|installed\|[^|]+\|[^|]+\|(\d+)\|([-\w]+)$/) {
-               if (not defined $data{$1}) {
-                       foreach $a (@archs) {
-                               $data{$1}{$a} = 0;
-                       }
-               }
-               $data{$1}{$3} += $2;
-               $data2{$1}{$3}++;
-       }
+  if (/^(\d{8})\d{6}\|(?:k(?:atie|elly)|process-(?:accepted|upload))(?:\|dak)?\|installed\|[^|]+\|[^|]+\|(\d+)\|([-\w]+)$/) {
+    if (not defined $data{$1}) {
+      foreach $a (@archs) {
+        $data{$1}{$a} = 0;
+      }
+    }
+    $data{$1}{$3} += $2;
+    $data2{$1}{$3}++;
+  }
 }
 
 foreach $p (sort keys %data) {
-       print "$p";
-       foreach $a (@archs) {
-               print ", $data{$p}{$a}";
-       }
-       print "\n";
+  print "$p";
+  foreach $a (@archs) {
+    print ", $data{$p}{$a}";
+  }
+  print "\n";
 }
index 3b67eb958bdea55fe36682a7e65febc11aa9fcf2..3c3dcaf3d0dddadfb1aa9edcae51df779b6e0f15 100755 (executable)
@@ -3,7 +3,8 @@
 # Fetches latest copy of mailing-lists.txt
 # Michael Beattie <mjb@debian.org>
 
-. vars
+export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
+. $SCRIPTVARS
 
 cd $ftpdir/doc
 
index ebd0058835c12cfccb8f7caee0fa5715689fa1dd..6eefa8623565433c8e60ef118a5c46421a95a72e 100755 (executable)
@@ -3,7 +3,8 @@
 # Very Very hackish script...  dont laugh.
 # Michael Beattie <mjb@debian.org>
 
-. vars
+export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
+. $SCRIPTVARS
 
 prog=$scriptdir/mirrorlist/mirror_list.pl
 masterlist=$scriptdir/mirrorlist/Mirrors.masterlist
index d9a4d2357ee65b30c9eac2d92358f67ab453e692..76551ff344ee6cf5b2adb042b5655dc0410b685b 100755 (executable)
@@ -3,7 +3,8 @@
 # Fetches latest copy of pseudo-packages
 # Joerg Jaspert <joerg@debian.org>
 
-. vars
+export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
+. $SCRIPTVARS
 
 cd ${scriptdir}/masterfiles
 
index d525fd23335fe33834c64bdac89dd55daa42e96e..57afc92cfbe0de7da171c79aeb3c6a47ac3851a8 100755 (executable)
@@ -1,22 +1,38 @@
 #!/bin/bash
 
+# Copyright (C) 2008 Joachim Breitner <nomeata@debian.org>
+# Copyright (C) 2011 Joerg Jaspert <joerg@debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# exit on errors
 set -e
+# make sure to only use defined variables
+set -u
+# ERR traps should be inherited from functions too. (And command
+# substitutions and subshells and whatnot, but for us the functions is
+# the important part here)
+set -E
 
-# list of architectures taken from
-# http://buildd.debian.org/stats/
+# import the general variable set.
+export SCRIPTVARS=/srv/ftp-master.debian.org/dak/config/debian/vars
+. $SCRIPTVARS
 
 # For debugging, you can override the path using
 # the WB_DB_DIR enviroment variable
-if [ -z "$WB_DB_DIR" ]
-then
-       WB_DB_DIR=/srv/ftp-master.debian.org/scripts/nfu
-fi
-
-cd $WB_DB_DIR || { echo "Failed to cd to $WB_DB_DIR" ; exit 1 ;}
+WB_DB_DIR=${WB_DB_DIR:-${scriptdir}/nfu}
 
-for arch in alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc
-do
-       rm -f $arch-all.txt
-       echo "Getting $arch-all.txt"
-       wget -q http://buildd.debian.org/stats/$arch-all.txt
+for arch in $(dak admin s-a list-arch unstable); do
+    wget -q http://buildd.debian.org/stats/$arch-all.txt -O ${WB_DB_DIR}/${arch}-all.txt
 done
index 78addd22b9ce49b21236822dbddae553b822b90b..fc229ed67249ff706e764d640ecea352480c9c9a 100644 (file)
@@ -32,6 +32,9 @@ removed from the Bug Tracking System.  Please check all open bugs and
 close them or re-assign them to another package if the removed package
 was superseded by another one.
 
+The version of this package that was in Debian prior to this removal
+can still be found using http://snapshot.debian.org/.
+
 Thank you for reporting the bug, which will now be closed.  If you
 have further comments please address them to __BUG_NUMBER__@__BUG_SERVER__.
 
index 8ea9547a810f7bd51a9e60dd53f17b28ba28c23d..3c5cbe0dc8faedbdb4fb41e02652266e0e7c28d4 100644 (file)
@@ -18,6 +18,9 @@ that we couldn't deal with your issue properly.
 
 For details on the removal, please see http://__BUG_SERVER__/__BUG_NUMBER__
 
+The version of this package that was in Debian prior to this removal
+can still be found using http://snapshot.debian.org/.
+
 This message was generated automatically; if you believe that there is
 a problem with it please contact the archive administrators by mailing
 __ADMIN_ADDRESS__.
index d99ce4166c6ebae64d122bb16741df20a362c0a7..a281f3d10b8d384cb29eae6c43ce3c83cd957093 100644 (file)
@@ -1,6 +1,7 @@
 import os
 import sys
 import unittest
+import warnings
 
 from os.path import abspath, dirname, join
 
diff --git a/tests/create_pickle_file.py b/tests/create_pickle_file.py
new file mode 100755 (executable)
index 0000000..63d1396
--- /dev/null
@@ -0,0 +1,25 @@
+#!/usr/bin/python
+
+# recreate the pickle file db-metadata-*.pkl that needs to be updated
+# after a database upgrade
+
+from sqlalchemy import create_engine, __version__
+
+import pickle
+import sys
+from os.path import abspath, dirname
+
+DAK_TEST_DIR = dirname(abspath(__file__))
+DAK_ROOT_DIR = dirname(DAK_TEST_DIR)
+if DAK_ROOT_DIR not in sys.path:
+    sys.path.insert(0, DAK_ROOT_DIR)
+
+from daklib.dbconn import DBConn
+
+pickle_filename = '%s/fixtures/db-metadata-%s.pkl' % (DAK_TEST_DIR, __version__)
+pickle_file = open(pickle_filename, 'w')
+metadata = DBConn().db_meta
+pickle.dump(metadata, pickle_file)
+pickle.dump(metadata.ddl_listeners, pickle_file)
+pickle_file.close()
+print "File %s has been updated successfully." % pickle_filename
diff --git a/tests/db_test.py b/tests/db_test.py
new file mode 100644 (file)
index 0000000..9ae2301
--- /dev/null
@@ -0,0 +1,328 @@
+from base_test import DakTestCase, fixture
+
+from daklib.config import Config
+from daklib.dbconn import *
+
+from sqlalchemy import create_engine, func, __version__
+from sqlalchemy.exc import SADeprecationWarning
+from sqlalchemy.schema import DDL
+
+import pickle
+import warnings
+
+all_tables = ['architecture', 'archive', 'bin_associations', 'bin_contents',
+    'binaries', 'binary_acl', 'binary_acl_map', 'build_queue', 'build_queue_files',
+    'changes', 'changes_pending_binaries', 'changes_pending_files',
+    'changes_pending_files_map', 'changes_pending_source',
+    'changes_pending_source_files', 'changes_pool_files', 'component', 'config',
+    'dsc_files', 'files', 'fingerprint', 'keyring_acl_map', 'keyrings', 'location',
+    'maintainer', 'new_comments', 'override', 'override_type', 'policy_queue',
+    'priority', 'section', 'source', 'source_acl', 'src_associations',
+    'src_format', 'src_uploaders', 'suite', 'suite_architectures',
+    'suite_build_queue_copy', 'suite_src_formats', 'uid', 'upload_blocks']
+
+drop_plpgsql = "DROP LANGUAGE IF EXISTS plpgsql CASCADE"
+create_plpgsql = "CREATE LANGUAGE plpgsql"
+create_function = """CREATE OR REPLACE FUNCTION tfunc_set_modified() RETURNS trigger AS $$
+    BEGIN NEW.modified = now(); return NEW; END;
+    $$ LANGUAGE 'plpgsql'"""
+create_trigger = """CREATE TRIGGER modified_%s BEFORE UPDATE ON %s
+    FOR EACH ROW EXECUTE PROCEDURE tfunc_set_modified()"""
+
+class DBDakTestCase(DakTestCase):
+    def execute(self, statement):
+        DDL(statement).execute(self.metadata.bind)
+
+    def create_all_triggers(self):
+        for statement in (drop_plpgsql, create_plpgsql, create_function):
+            self.execute(statement)
+        for table in all_tables:
+            self.execute(create_trigger % (table, table))
+
+    metadata = None
+
+    def initialize(self):
+        cnf = Config()
+        if cnf["DB::Name"] in ('backports', 'obscurity', 'projectb'):
+            self.fail("You have configured an invalid database name: '%s'." % \
+                    cnf["DB::Name"])
+        if cnf["DB::Host"]:
+            # TCP/IP
+            connstr = "postgres://%s" % cnf["DB::Host"]
+            if cnf["DB::Port"] and cnf["DB::Port"] != "-1":
+                connstr += ":%s" % cnf["DB::Port"]
+            connstr += "/%s" % cnf["DB::Name"]
+        else:
+            # Unix Socket
+            connstr = "postgres:///%s" % cnf["DB::Name"]
+            if cnf["DB::Port"] and cnf["DB::Port"] != "-1":
+                connstr += "?port=%s" % cnf["DB::Port"]
+
+        pickle_filename = 'db-metadata-%s.pkl' % __version__
+        pickle_file = open(fixture(pickle_filename), 'r')
+        DBDakTestCase.metadata = pickle.load(pickle_file)
+        self.metadata.ddl_listeners = pickle.load(pickle_file)
+        pickle_file.close()
+        self.metadata.bind = create_engine(connstr)
+        self.metadata.create_all()
+        self.create_all_triggers()
+
+    def setup_suites(self):
+        "setup a hash of Suite objects in self.suite"
+
+        if 'suite' in self.__dict__:
+            return
+        self.suite = {}
+        for suite_name in ('lenny', 'squeeze', 'sid'):
+            self.suite[suite_name] = Suite(suite_name = suite_name, version = '-')
+        self.session.add_all(self.suite.values())
+
+    def setup_architectures(self):
+        "setup Architecture objects in self.arch and connect to suites"
+
+        if 'arch' in self.__dict__:
+            return
+        self.setup_suites()
+        self.arch = {}
+        for arch_string in ('source', 'all', 'i386', 'amd64', 'kfreebsd-i386'):
+            self.arch[arch_string] = Architecture(arch_string)
+            if arch_string != 'kfreebsd-i386':
+                self.arch[arch_string].suites = self.suite.values()
+            else:
+                self.arch[arch_string].suites = [self.suite['squeeze'], self.suite['sid']]
+        # hard code ids for source and all
+        self.arch['source'].arch_id = 1
+        self.arch['all'].arch_id = 2
+        self.session.add_all(self.arch.values())
+
+    def setup_components(self):
+        'create some Component objects'
+
+        if 'comp' in self.__dict__:
+            return
+        self.comp = {}
+        for name in ('main', 'contrib', 'non-free'):
+            self.comp[name] = Component(component_name = name)
+        self.session.add_all(self.comp.values())
+
+    def setup_locations(self):
+        'create some Location objects'
+
+        if 'loc' in self.__dict__:
+            return
+        self.setup_components()
+        self.loc = {}
+        self.loc['main'] = Location( \
+            path = fixture('ftp/pool/'), component = self.comp['main'])
+        self.loc['contrib'] = Location( \
+            path = fixture('ftp/pool/'), component = self.comp['contrib'])
+        self.session.add_all(self.loc.values())
+
+    def setup_poolfiles(self):
+        'create some PoolFile objects'
+
+        if 'file' in self.__dict__:
+            return
+        self.setup_locations()
+        self.file = {}
+        self.file['hello_2.2-3.dsc'] = PoolFile(filename = 'main/h/hello/hello_2.2-3.dsc', \
+            location = self.loc['main'], filesize = 0, md5sum = '')
+        self.file['hello_2.2-2.dsc'] = PoolFile(filename = 'main/h/hello/hello_2.2-2.dsc', \
+            location = self.loc['main'], filesize = 0, md5sum = '')
+        self.file['hello_2.2-1.dsc'] = PoolFile(filename = 'main/h/hello/hello_2.2-1.dsc', \
+            location = self.loc['main'], filesize = 0, md5sum = '')
+        self.file['gnome-hello_3.0-1.dsc'] = PoolFile( \
+            filename = 'main/g/gnome-hello/gnome-hello_3.0-1.dsc', \
+            location = self.loc['contrib'], filesize = 0, md5sum = '')
+        self.file['hello_2.2-1_i386.deb'] = PoolFile( \
+            filename = 'main/h/hello/hello_2.2-1_i386.deb', \
+            location = self.loc['main'], filesize = 0, md5sum = '')
+        self.file['gnome-hello_2.2-1_i386.deb'] = PoolFile( \
+            filename = 'main/h/hello/gnome-hello_2.2-1_i386.deb', \
+            location = self.loc['main'], filesize = 0, md5sum = '')
+        self.file['python-hello_2.2-1_all.deb'] = PoolFile( \
+            filename = 'main/h/hello/python-hello_2.2-1_all.deb', \
+            location = self.loc['main'], filesize = 0, md5sum = '')
+        self.file['gnome-hello_3.0-1_i386.deb'] = PoolFile( \
+            filename = 'main/g/gnome-hello/gnome-hello_3.0-1_i386.deb', \
+            location = self.loc['contrib'], filesize = 0, md5sum = '')
+        self.file['sl_3.03-16.dsc'] = PoolFile(filename = 'main/s/sl/sl_3.03-16.dsc', \
+            location = self.loc['main'], filesize = 0, md5sum = '')
+        self.file['python2.6_2.6.6-8.dsc'] = PoolFile( \
+            filename = 'main/p/python2.6/python2.6_2.6.6-8.dsc', \
+            location = self.loc['main'], filesize = 0, md5sum = '')
+        self.session.add_all(self.file.values())
+
+    def setup_maintainers(self):
+        'create some Maintainer objects'
+
+        if 'maintainer' in self.__dict__:
+            return
+        self.maintainer = {}
+        self.maintainer['maintainer'] = Maintainer(name = 'Mr. Maintainer')
+        self.maintainer['uploader'] = Maintainer(name = 'Mrs. Uploader')
+        self.maintainer['lazyguy'] = Maintainer(name = 'Lazy Guy')
+        self.session.add_all(self.maintainer.values())
+
+    def setup_sources(self):
+        'create DBSource objects'
+
+        if 'source' in self.__dict__:
+            return
+        install_date = self.now()
+        self.setup_maintainers()
+        self.setup_suites()
+        self.setup_poolfiles()
+        self.source = {}
+        self.source['hello_2.2-2'] = DBSource(source = 'hello', version = '2.2-2', \
+            maintainer = self.maintainer['maintainer'], \
+            changedby = self.maintainer['uploader'], \
+            poolfile = self.file['hello_2.2-2.dsc'], install_date = install_date)
+        self.source['hello_2.2-2'].suites.append(self.suite['sid'])
+        self.source['hello_2.2-1'] = DBSource(source = 'hello', version = '2.2-1', \
+            maintainer = self.maintainer['maintainer'], \
+            changedby = self.maintainer['uploader'], \
+            poolfile = self.file['hello_2.2-1.dsc'], install_date = install_date)
+        self.source['hello_2.2-1'].suites.append(self.suite['sid'])
+        self.source['gnome-hello_3.0-1'] = DBSource(source = 'gnome-hello', \
+            version = '3.0-1', maintainer = self.maintainer['maintainer'], \
+            changedby = self.maintainer['uploader'], \
+            poolfile = self.file['gnome-hello_3.0-1.dsc'], install_date = install_date)
+        self.source['gnome-hello_3.0-1'].suites.append(self.suite['sid'])
+        self.source['sl_3.03-16'] = DBSource(source = 'sl', version = '3.03-16', \
+            maintainer = self.maintainer['maintainer'], \
+            changedby = self.maintainer['uploader'], \
+            poolfile = self.file['sl_3.03-16.dsc'], install_date = install_date)
+        self.source['sl_3.03-16'].suites.append(self.suite['squeeze'])
+        self.source['sl_3.03-16'].suites.append(self.suite['sid'])
+        self.session.add_all(self.source.values())
+
+    def setup_binaries(self):
+        'create DBBinary objects'
+
+        if 'binary' in self.__dict__:
+            return
+        self.setup_sources()
+        self.setup_architectures()
+        self.binary = {}
+        self.binary['hello_2.2-1_i386'] = DBBinary(package = 'hello', \
+            source = self.source['hello_2.2-1'], version = '2.2-1', \
+            maintainer = self.maintainer['maintainer'], \
+            architecture = self.arch['i386'], \
+            poolfile = self.file['hello_2.2-1_i386.deb'])
+        self.binary['hello_2.2-1_i386'].suites.append(self.suite['squeeze'])
+        self.binary['hello_2.2-1_i386'].suites.append(self.suite['sid'])
+        self.binary['gnome-hello_2.2-1_i386'] = DBBinary(package = 'gnome-hello', \
+            source = self.source['hello_2.2-1'], version = '2.2-1', \
+            maintainer = self.maintainer['maintainer'], \
+            architecture = self.arch['i386'], \
+            poolfile = self.file['gnome-hello_2.2-1_i386.deb'])
+        self.binary['gnome-hello_2.2-1_i386'].suites.append(self.suite['squeeze'])
+        self.binary['gnome-hello_2.2-1_i386'].suites.append(self.suite['sid'])
+        self.binary['gnome-hello_3.0-1_i386'] = DBBinary(package = 'gnome-hello', \
+            source = self.source['gnome-hello_3.0-1'], version = '3.0-1', \
+            maintainer = self.maintainer['maintainer'], \
+            architecture = self.arch['i386'], \
+            poolfile = self.file['gnome-hello_3.0-1_i386.deb'])
+        self.binary['gnome-hello_3.0-1_i386'].suites.append(self.suite['sid'])
+        self.binary['python-hello_2.2-1_i386'] = DBBinary(package = 'python-hello', \
+            source = self.source['hello_2.2-1'], version = '2.2-1', \
+            maintainer = self.maintainer['maintainer'], \
+            architecture = self.arch['all'], \
+            poolfile = self.file['python-hello_2.2-1_all.deb'])
+        self.binary['python-hello_2.2-1_i386'].suites.append(self.suite['squeeze'])
+        self.session.add_all(self.binary.values())
+
+    def setup_overridetypes(self):
+        '''
+        Setup self.otype of class OverrideType.
+        '''
+        if 'otype' in self.__dict__:
+            return
+        self.otype = {}
+        for type_ in ('deb', 'udeb'):
+            self.otype[type_] = OverrideType(overridetype = type_)
+        self.session.add_all(self.otype.values())
+        self.session.flush()
+
+    def setup_sections(self):
+        '''
+        Setup self.section of class Section.
+        '''
+        if 'section' in self.__dict__:
+            return
+        self.section = {}
+        self.section['python'] = Section(section = 'python')
+        self.session.add_all(self.section.values())
+        self.session.flush()
+
+    def setup_priorities(self):
+        '''
+        Setup self.prio of class Priority.
+        '''
+        if 'prio' in self.__dict__:
+            return
+        self.prio = {}
+        self.prio['standard'] = Priority(priority = 'standard', level = 7)
+        self.session.add_all(self.prio.values())
+        self.session.flush()
+
+    def setup_overrides(self):
+        '''
+        Setup self.override of class Override.
+        '''
+        if 'override' in self.__dict__:
+            return
+        self.setup_suites()
+        self.setup_components()
+        self.setup_overridetypes()
+        self.setup_sections()
+        self.setup_priorities()
+        self.override = {}
+        self.override['hello_sid_main_udeb'] = Override(package = 'hello', \
+            suite = self.suite['sid'], component = self.comp['main'], \
+            overridetype = self.otype['udeb'], \
+            section = self.section['python'], priority = self.prio['standard'])
+        self.override['hello_squeeze_main_deb'] = Override(package = 'hello', \
+            suite = self.suite['squeeze'], component = self.comp['main'], \
+            overridetype = self.otype['deb'], \
+            section = self.section['python'], priority = self.prio['standard'])
+        self.override['hello_lenny_contrib_deb'] = Override(package = 'hello', \
+            suite = self.suite['lenny'], component = self.comp['contrib'], \
+            overridetype = self.otype['deb'], \
+            section = self.section['python'], priority = self.prio['standard'])
+        self.session.add_all(self.override.values())
+        self.session.flush()
+
+    def setUp(self):
+        if self.metadata is None:
+            self.initialize()
+        self.session = DBConn().session()
+
+    def now(self):
+        """
+        Returns the current time at the db server. Please note the function
+        returns the same value as long as it is in the same transaction. You
+        should self.session.rollback() (or commit) if you rely on getting a
+        fresh timestamp.
+        """
+
+        return self.session.query(func.now()).scalar()
+
+    def classes_to_clean(self):
+        """
+        The function classes_to_clean() returns a list of classes. All objects
+        of each class will be deleted from the database in tearDown(). This
+        function should be overridden in derived test cases as needed.
+        """
+        return ()
+
+    def tearDown(self):
+        self.session.rollback()
+        for class_ in self.classes_to_clean():
+            for object_ in self.session.query(class_):
+                self.session.delete(object_)
+        self.session.commit()
+        # usually there is no need to drop all tables here
+        #self.metadata.drop_all()
+
diff --git a/tests/dbtest_all.py b/tests/dbtest_all.py
new file mode 100755 (executable)
index 0000000..b7242f7
--- /dev/null
@@ -0,0 +1,19 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import os
+import unittest
+
+def suite():
+    suite = unittest.TestSuite()
+    for _, _, files in os.walk('.'):
+        for name in filter(is_test, files):
+            tests = unittest.defaultTestLoader.loadTestsFromName(name[:-3])
+            suite.addTests(tests)
+    return suite
+
+def is_test(filename):
+    return filename.startswith('dbtest_') and filename.endswith('.py')
+
+if __name__ == "__main__":
+    unittest.main(defaultTest="suite")
diff --git a/tests/dbtest_contents.py b/tests/dbtest_contents.py
new file mode 100755 (executable)
index 0000000..89b4bb7
--- /dev/null
@@ -0,0 +1,219 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase, fixture
+
+from daklib.dbconn import *
+from daklib.contents import BinaryContentsWriter, BinaryContentsScanner, \
+    UnpackedSource, SourceContentsScanner, SourceContentsWriter
+
+from os.path import normpath
+from sqlalchemy.exc import FlushError, IntegrityError
+from subprocess import CalledProcessError
+import unittest
+
+class ContentsTestCase(DBDakTestCase):
+    """
+    This TestCase checks the behaviour of contents generation.
+    """
+
+    def test_duplicates1(self):
+        '''
+        Test the BinContents class for duplication problems.
+        '''
+        self.setup_binaries()
+        contents1 = BinContents(file = 'usr/bin/hello', \
+            binary = self.binary['hello_2.2-1_i386'])
+        self.session.add(contents1)
+        self.session.flush()
+        # test duplicates
+        contents2 = BinContents(file = 'usr/bin/hello', \
+            binary = self.binary['hello_2.2-1_i386'])
+        self.session.add(contents2)
+        self.assertRaises(FlushError, self.session.flush)
+
+    def test_duplicates2(self):
+        '''
+        Test the BinContents class for more duplication problems.
+        '''
+        self.setup_binaries()
+        contents1 = BinContents(file = 'usr/bin/hello', \
+            binary = self.binary['hello_2.2-1_i386'])
+        self.session.add(contents1)
+        contents2 = BinContents(file = 'usr/bin/gruezi', \
+            binary = self.binary['hello_2.2-1_i386'])
+        self.session.add(contents2)
+        self.session.flush()
+        # test duplicates
+        contents2.file = 'usr/bin/hello'
+        self.assertRaises(IntegrityError, self.session.flush)
+
+    def test_duplicates3(self):
+        '''
+        Test the BinContents class even more.
+        '''
+        self.setup_binaries()
+        contents1 = BinContents(file = 'usr/bin/hello', \
+            binary = self.binary['hello_2.2-1_i386'])
+        self.session.add(contents1)
+        # same file in different binary packages should be okay
+        contents2 = BinContents(file = 'usr/bin/hello', \
+            binary = self.binary['gnome-hello_2.2-1_i386'])
+        self.session.add(contents2)
+        self.session.flush()
+
+    def test_overridetype(self):
+        '''
+        Test the OverrideType class.
+        '''
+        self.setup_overridetypes()
+        self.assertEqual('deb', self.otype['deb'].overridetype)
+        self.assertEqual(0, self.otype['deb'].overrides.count())
+        self.assertEqual(self.otype['deb'], get_override_type('deb', self.session))
+
+    def test_section(self):
+        '''
+        Test Section class.
+        '''
+        self.setup_sections()
+        self.assertEqual('python', self.section['python'].section)
+        self.assertEqual('python', self.section['python'])
+        self.assertTrue(self.section['python'] != 'java')
+        self.assertEqual(self.section['python'], get_section('python', self.session))
+        all_sections = get_sections(self.session)
+        self.assertEqual(self.section['python'].section_id, all_sections['python'])
+        self.assertEqual(0, self.section['python'].overrides.count())
+
+    def test_priority(self):
+        '''
+        Test Priority class.
+        '''
+        self.setup_priorities()
+        self.assertEqual('standard', self.prio['standard'].priority)
+        self.assertEqual(7, self.prio['standard'].level)
+        self.assertEqual('standard', self.prio['standard'])
+        self.assertTrue(self.prio['standard'] != 'extra')
+        self.assertEqual(self.prio['standard'], get_priority('standard', self.session))
+        all_priorities = get_priorities(self.session)
+        self.assertEqual(self.prio['standard'].priority_id, all_priorities['standard'])
+        self.assertEqual(0, self.prio['standard'].overrides.count())
+
+    def test_override(self):
+        '''
+        Test Override class.
+        '''
+        self.setup_overrides()
+        list = get_override('hello', session = self.session)
+        self.assertEqual(3, len(list))
+        self.assertTrue(self.override['hello_sid_main_udeb'] in list)
+        self.assertTrue(self.override['hello_squeeze_main_deb'] in list)
+        list = get_override('hello', suite = 'sid', session = self.session)
+        self.assertEqual([self.override['hello_sid_main_udeb']], list)
+        list = get_override('hello', suite = ['sid'], session = self.session)
+        self.assertEqual([self.override['hello_sid_main_udeb']], list)
+        list = get_override('hello', component = 'contrib', session = self.session)
+        self.assertEqual([self.override['hello_lenny_contrib_deb']], list)
+        list = get_override('hello', component = ['contrib'], session = self.session)
+        self.assertEqual([self.override['hello_lenny_contrib_deb']], list)
+        list = get_override('hello', overridetype = 'deb', session = self.session)
+        self.assertEqual(2, len(list))
+        self.assertTrue(self.override['hello_sid_main_udeb'] not in list)
+        self.assertTrue(self.override['hello_squeeze_main_deb'] in list)
+        list = get_override('hello', overridetype = ['deb'], session = self.session)
+        self.assertEqual(2, len(list))
+        self.assertTrue(self.override['hello_sid_main_udeb'] not in list)
+        self.assertTrue(self.override['hello_squeeze_main_deb'] in list)
+        # test the backrefs
+        self.assertEqual(self.override['hello_sid_main_udeb'], \
+            self.suite['sid'].overrides.one())
+        self.assertEqual(2, self.comp['main'].overrides.count())
+        self.assertEqual(self.override['hello_sid_main_udeb'], \
+            self.comp['main'].overrides.filter_by(suite = self.suite['sid']).one())
+        self.assertEqual(self.override['hello_sid_main_udeb'], \
+            self.otype['udeb'].overrides.one())
+
+    def test_binarycontentswriter(self):
+        '''
+        Test the BinaryContentsWriter class.
+        '''
+        self.setup_suites()
+        self.setup_architectures()
+        self.setup_overridetypes()
+        self.setup_binaries()
+        self.setup_overrides()
+        self.binary['hello_2.2-1_i386'].contents.append(BinContents(file = '/usr/bin/hello'))
+        self.session.commit()
+        cw = BinaryContentsWriter(self.suite['squeeze'], self.arch['i386'], \
+            self.otype['deb'], self.comp['main'])
+        self.assertEqual(['/usr/bin/hello                                          python/hello\n'], \
+            cw.get_list())
+        # test formatline and sort order
+        self.assertEqual('/usr/bin/hello                                          python/hello\n', \
+            cw.formatline('/usr/bin/hello', 'python/hello'))
+        # test unicode support
+        self.binary['hello_2.2-1_i386'].contents.append(BinContents(file = '\xc3\xb6'))
+        self.session.commit()
+        # test delete cascading
+        self.session.delete(self.binary['hello_2.2-1_i386'])
+        self.session.commit()
+
+    def test_binary_scan_contents(self):
+        '''
+        Tests the BinaryContentsScanner.
+        '''
+        self.setup_binaries()
+        filelist = [f for f in self.binary['hello_2.2-1_i386'].scan_contents()]
+        self.assertEqual(['usr/bin/hello', 'usr/share/doc/hello/copyright'],
+            filelist)
+        self.session.commit()
+        BinaryContentsScanner(self.binary['hello_2.2-1_i386'].binary_id).scan()
+        bin_contents_list = self.binary['hello_2.2-1_i386'].contents.order_by('file').all()
+        self.assertEqual(2, len(bin_contents_list))
+        self.assertEqual('usr/bin/hello', bin_contents_list[0].file)
+        self.assertEqual('usr/share/doc/hello/copyright', bin_contents_list[1].file)
+
+    def test_unpack(self):
+        '''
+        Tests the UnpackedSource class and the SourceContentsScanner.
+        '''
+        self.setup_sources()
+        source = self.source['hello_2.2-1']
+        dscfilename = fixture('ftp/pool/' + source.poolfile.filename)
+        unpacked = UnpackedSource(dscfilename)
+        self.assertTrue(len(unpacked.get_root_directory()) > 0)
+        self.assertEqual('hello (2.2-1) unstable; urgency=low\n',
+            unpacked.get_changelog_file().readline())
+        all_filenames = set(unpacked.get_all_filenames())
+        self.assertEqual(8, len(all_filenames))
+        self.assertTrue('debian/rules' in all_filenames)
+        # method scan_contents()
+        self.assertEqual(all_filenames, source.scan_contents())
+        # exception with invalid files
+        self.assertRaises(CalledProcessError, lambda: UnpackedSource('invalidname'))
+        # SourceContentsScanner
+        self.session.commit()
+        self.assertTrue(source.contents.count() == 0)
+        SourceContentsScanner(source.source_id).scan()
+        self.assertTrue(source.contents.count() > 0)
+
+    def test_sourcecontentswriter(self):
+        '''
+        Test the SourceContentsWriter class.
+        '''
+        self.setup_sources()
+        self.session.flush()
+        # remove newer package from sid because it disturbs the test
+        self.source['hello_2.2-2'].suites = []
+        self.session.commit()
+        source = self.source['hello_2.2-1']
+        SourceContentsScanner(source.source_id).scan()
+        cw = SourceContentsWriter(source.suites[0], source.poolfile.location.component)
+        result = cw.get_list()
+        self.assertEqual(8, len(result))
+        self.assertTrue('debian/changelog\thello\n' in result)
+
+    def classes_to_clean(self):
+        return [Override, Suite, BinContents, DBBinary, DBSource, Architecture, Section, \
+            OverrideType, Maintainer, Component, Priority, PoolFile]
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/dbtest_cruft.py b/tests/dbtest_cruft.py
new file mode 100755 (executable)
index 0000000..1f9de72
--- /dev/null
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+
+from daklib.dbconn import *
+from daklib.cruft import *
+
+import unittest
+
+class CruftTestCase(DBDakTestCase):
+    """
+    This class checks various functions of cruft-report.
+    """
+
+    def setUp(self):
+        super(CruftTestCase, self).setUp()
+        self.install_date = self.now()
+        self.setup_binaries()
+        # flush to make sure that the setup is correct
+        self.session.flush()
+
+    def test_newer_version(self):
+        'tests newer_version()'
+
+        list = newer_version('squeeze', 'sid', self.session)
+        self.assertEqual([], list)
+        self.file['sl_3.03-17.dsc'] = PoolFile(filename = 'main/s/sl/sl_3.03-17.dsc', \
+            location = self.loc['main'], filesize = 0, md5sum = '')
+        self.source['sl_3.03-17'] = DBSource(source = 'sl', version = '3.03-17', \
+            maintainer = self.maintainer['maintainer'], \
+            changedby = self.maintainer['uploader'], \
+            poolfile = self.file['sl_3.03-17.dsc'], install_date = self.install_date)
+        self.source['sl_3.03-17'].suites.append(self.suite['squeeze'])
+        list = newer_version('squeeze', 'sid', self.session)
+        self.assertEqual([('sl', '3.03-16', '3.03-17')], list)
+
+    def test_multiple_source(self):
+        'tests functions related to report_multiple_source()'
+
+        # test get_package_names()
+        suite = get_suite('sid', self.session)
+        self.assertEqual([('gnome-hello', ), ('hello', )], \
+            get_package_names(suite).all())
+        # test class NamedSource
+        src = NamedSource(suite, 'hello')
+        self.assertEqual('hello', src.source)
+        self.assertEqual(['2.2-1', '2.2-2'], src.versions)
+        self.assertEqual('hello(2.2-1, 2.2-2)', str(src))
+        # test class DejavuBinary
+        bin = DejavuBinary(suite, 'hello')
+        self.assertEqual(False, bin.has_multiple_sources())
+        # add another binary
+        self.file['hello_2.2-3'] = PoolFile(filename = 'main/s/sl/hello_2.2-3_i386.deb', \
+            location = self.loc['main'], filesize = 0, md5sum = '')
+        self.binary['hello_2.2-3_i386'] = DBBinary(package = 'hello', \
+            source = self.source['sl_3.03-16'], version = '2.2-3', \
+            maintainer = self.maintainer['maintainer'], \
+            architecture = self.arch['i386'], \
+            poolfile = self.file['hello_2.2-3'])
+        self.session.add(self.binary['hello_2.2-3_i386'])
+        bin = DejavuBinary(suite, 'hello')
+        self.assertEqual(False, bin.has_multiple_sources())
+        # add it to suite sid
+        self.binary['hello_2.2-3_i386'].suites.append(self.suite['sid'])
+        bin = DejavuBinary(suite, 'hello')
+        self.assertEqual(True, bin.has_multiple_sources())
+        self.assertEqual('hello built by: hello(2.2-1, 2.2-2), sl(3.03-16)', \
+            str(bin))
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/dbtest_debversion.py b/tests/dbtest_debversion.py
new file mode 100755 (executable)
index 0000000..c45200d
--- /dev/null
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+
+from daklib.dbconn import DBConn, DebVersion
+
+from sqlalchemy import Table, Column, Integer, func
+from sqlalchemy.orm import mapper
+import unittest
+
+class Version(object):
+    def __init__(self, version):
+        self.version = version
+
+    def __repr__(self):
+        return "<Version('%s')>" % self.version
+
+class DebVersionTestCase(DBDakTestCase):
+    """
+    The DebVersionTestCase tests both comparison (<=, ==, >, !=), the in_()
+    method and aggregate functions (min, max) for the DebVersion type. To
+    simplify the test it creates a separate table 'version' which is not used
+    by dak itself.
+    """
+
+    def setUp(self):
+        super(DebVersionTestCase, self).setUp()
+        self.version_table = Table('version', self.metadata, \
+            Column('id', Integer, primary_key = True), \
+            Column('version', DebVersion), \
+            )
+        self.version_table.create(checkfirst = True)
+        mapper(Version, self.version_table)
+
+    def test_debversion(self):
+        v = Version('0.5~')
+        self.session.add(v)
+        v = Version('0.5')
+        self.session.add(v)
+        v = Version('1.0')
+        self.session.add(v)
+        q = self.session.query(Version)
+        self.assertEqual(3, q.count())
+        self.assertEqual(2, q.filter(Version.version <= '0.5').count())
+        self.assertEqual(1, q.filter(Version.version == '0.5').count())
+        self.assertEqual(2, q.filter(Version.version > '0.5~').count())
+        self.assertEqual(1, q.filter(Version.version > '0.5').count())
+        self.assertEqual(0, q.filter(Version.version > '1.0').count())
+        self.assertEqual(2, q.filter(Version.version != '1.0').count())
+        self.assertEqual(2, q.filter(Version.version.in_(['0.5~', '1.0'])).count())
+        q = self.session.query(func.min(Version.version))
+        self.assertEqual('0.5~', q.scalar())
+        q = self.session.query(func.max(Version.version))
+        self.assertEqual('1.0', q.scalar())
+
+    def tearDown(self):
+        self.session.rollback()
+        self.version_table.drop()
+        super(DebVersionTestCase, self).tearDown()
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/dbtest_fingerprint.py b/tests/dbtest_fingerprint.py
new file mode 100755 (executable)
index 0000000..8d57ea0
--- /dev/null
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+
+from daklib.dbconn import Fingerprint, Uid
+from daklib.dak_exceptions import DBUpdateError
+
+from sqlalchemy.exc import IntegrityError
+import unittest
+
+class FingerprintTestCase(DBDakTestCase):
+    """
+    The FingerprintTestCase tests the relation between Fingerprint and Uid
+    objects.
+    1. It creates a fresh Fingerprint object.
+    2. It assigns a fresh Uid object to the Fingerprint object.
+    3. It fetches the Uid object from the database.
+    4. It checks that the original fingerprint is assigned to the freshly
+       fetched Uid object.
+
+    Furthermore it checks various constraints like not null and unique.
+
+    TODO: the not null constraints should be enforced by the constructor in
+    dbconn.py. Should we check the exact format of the fingerprint?
+    """
+
+    def test_relation(self):
+        fingerprint = Fingerprint(fingerprint = 'deadbeefdeadbeef')
+        self.session.add(fingerprint)
+        query = self.session.query(Fingerprint)
+        self.assertEqual(1, query.count())
+        self.assertEqual('deadbeefdeadbeef', query.one().fingerprint)
+        fingerprint.uid = Uid(uid = 'ftp-master@debian.org', name = 'ftpteam')
+        uid = self.session.query(Uid).one()
+        self.assertEqual('ftp-master@debian.org', uid.uid)
+        self.assertEqual('ftpteam', uid.name)
+        self.assertEqual(1, len(uid.fingerprint))
+        self.assertEqual('deadbeefdeadbeef', uid.fingerprint[0].fingerprint)
+
+    def fingerprint_no_fingerprint(self):
+        self.session.add(Fingerprint())
+        self.session.flush()
+
+    def fingerprint_duplicate_fingerprint(self):
+        self.session.add(Fingerprint(fingerprint = 'affe0815'))
+        self.session.add(Fingerprint(fingerprint = 'affe0815'))
+        self.session.flush()
+
+    def uid_no_uid(self):
+        self.session.add(Uid(name = 'foobar'))
+        self.session.flush()
+
+    def uid_duplicate_uid(self):
+        self.session.add(Uid(uid = 'duplicate'))
+        self.session.add(Uid(uid = 'duplicate'))
+        self.session.flush()
+
+    def test_exceptions(self):
+        self.assertRaises(DBUpdateError, self.fingerprint_no_fingerprint)
+        self.session.rollback()
+        self.assertRaises(IntegrityError, self.fingerprint_duplicate_fingerprint)
+        self.session.rollback()
+        self.assertRaises(DBUpdateError, self.uid_no_uid)
+        self.session.rollback()
+        self.assertRaises(IntegrityError, self.uid_duplicate_uid)
+        self.session.rollback()
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/dbtest_metadata.py b/tests/dbtest_metadata.py
new file mode 100755 (executable)
index 0000000..1b698b8
--- /dev/null
@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+
+from daklib.dbconn import DBConn, MetadataKey, BinaryMetadata, SourceMetadata
+
+import unittest
+
+class MetadataTestCase(DBDakTestCase):
+    """
+    This TestCase checks the metadata handling.
+    """
+
+    def setup_metadata(self):
+        '''
+        Setup the metadata objects.
+        '''
+        self.setup_binaries()
+        self.depends = MetadataKey('Depends')
+        self.session.add(self.depends)
+        self.session.flush()
+        self.bin_hello = self.binary['hello_2.2-1_i386']
+        self.src_hello = self.bin_hello.source
+        self.session.add(self.bin_hello)
+        self.session.add(self.src_hello)
+        self.hello_dep = BinaryMetadata(self.depends, 'foobar (>= 1.0)', self.bin_hello)
+        self.session.add(self.hello_dep)
+        self.recommends = MetadataKey('Recommends')
+        self.bin_hello.key[self.recommends] = BinaryMetadata(self.recommends, 'goodbye')
+        self.build_dep = MetadataKey('Build-Depends')
+        self.hello_bd = SourceMetadata(self.build_dep, 'foobar-dev', self.src_hello)
+        self.session.add(self.hello_bd)
+        self.homepage = MetadataKey('Homepage')
+        self.src_hello.key[self.homepage] = SourceMetadata(self.homepage, 'http://debian.org')
+        self.session.flush()
+
+    def test_mappers(self):
+        '''
+        Tests the mapper configuration.
+        '''
+        self.setup_metadata()
+        # MetadataKey
+        self.assertTrue(self.depends.key_id is not None)
+        # BinaryMetadata
+        self.assertEqual('hello', self.hello_dep.binary.package)
+        self.assertEqual('Depends', self.hello_dep.key.key)
+        self.assertEqual('foobar (>= 1.0)', self.hello_dep.value)
+        # SourceMetadata
+        self.assertEqual('hello', self.hello_bd.source.source)
+        self.assertEqual('Build-Depends', self.hello_bd.key.key)
+        self.assertEqual('foobar-dev', self.hello_bd.value)
+        # DBBinary relation
+        self.assertEqual(self.hello_dep, self.bin_hello.key[self.depends])
+        self.assertEqual('goodbye', self.bin_hello.key[self.recommends].value)
+        # DBSource relation
+        self.assertEqual(self.hello_bd, self.src_hello.key[self.build_dep])
+        self.assertEqual('http://debian.org', self.src_hello.key[self.homepage].value)
+
+    def test_association_proxy(self):
+        '''
+        Test the association proxies 'metadata' in DBBinary and DBSource.
+        '''
+        self.setup_metadata()
+        # DBBinary association proxy
+        essential = MetadataKey('Essential')
+        self.bin_hello.metadata[essential] = 'yes'
+        self.session.flush()
+        self.assertEqual('yes', self.bin_hello.metadata[essential])
+        self.assertEqual('foobar (>= 1.0)', self.bin_hello.metadata[self.depends])
+        self.assertTrue(self.recommends in self.bin_hello.metadata)
+        # DBSource association proxy
+        std_version = MetadataKey('Standards-Version')
+        self.src_hello.metadata[std_version] = '3.9.1'
+        self.session.flush()
+        self.assertEqual('3.9.1', self.src_hello.metadata[std_version])
+        self.assertEqual('http://debian.org', self.src_hello.metadata[self.homepage])
+        self.assertTrue(self.depends not in self.src_hello.metadata)
+
+    def test_delete(self):
+        '''
+        Tests the delete / cascading behaviour.
+        '''
+        self.setup_metadata()
+        self.session.delete(self.bin_hello)
+        # Remove associated binaries because we have no cascading rule for
+        # them.
+        for binary in self.src_hello.binaries:
+            self.session.delete(binary)
+        self.session.delete(self.src_hello)
+        self.session.flush()
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/dbtest_multiproc.py b/tests/dbtest_multiproc.py
new file mode 100755 (executable)
index 0000000..0452020
--- /dev/null
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+
+from daklib.dbconn import DBConn
+
+from multiprocessing import Pool
+from time import sleep
+import unittest
+
+def read_number():
+    session = DBConn().session()
+    result = session.query('foo').from_statement('select 7 as foo').scalar()
+    sleep(0.1)
+    session.close()
+    return result
+
+class MultiProcTestCase(DBDakTestCase):
+    """
+    This TestCase checks that DBConn works with multiprocessing.
+    """
+
+    def save_result(self, result):
+        self.result += result
+
+    def test_seven(self):
+        '''
+        Test apply_async() with a database session.
+        '''
+        self.result = 0
+        pool = Pool()
+        pool.apply_async(read_number, (), callback = self.save_result)
+        pool.apply_async(read_number, (), callback = self.save_result)
+        pool.apply_async(read_number, (), callback = self.save_result)
+        pool.apply_async(read_number, (), callback = self.save_result)
+        pool.apply_async(read_number, (), callback = self.save_result)
+        pool.close()
+        pool.join()
+        self.assertEqual(5 * 7, self.result)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/dbtest_ormobject.py b/tests/dbtest_ormobject.py
new file mode 100755 (executable)
index 0000000..0790e4c
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+
+from daklib.dbconn import Architecture, Suite
+from daklib.dak_exceptions import DBUpdateError
+
+try:
+    # python >= 2.6
+    import json
+except:
+    # python <= 2.5
+    import simplejson as json
+
+import re
+import unittest
+
+class ORMObjectTestCase(DBDakTestCase):
+    """
+    The ORMObjectTestCase tests the behaviour of the ORMObject.
+    """
+
+    def test_strings(self):
+        'tests json(), __repr__(), and __str__()'
+        architecture = Architecture(arch_string = 'i386')
+        # test json()
+        data = json.loads(architecture.json())
+        self.assertEqual('i386', data['arch_string'])
+        # test repr()
+        self.assertEqual('<Architecture i386>', repr(architecture))
+        # test str()
+        self.assertTrue(re.match('<Architecture {.*}>', str(architecture)))
+        self.assertTrue(re.search('"arch_string": "i386"', str(architecture)))
+        sid = Suite(suite_name = 'sid')
+        squeeze = Suite(suite_name = 'squeeze')
+        architecture.suites = [sid, squeeze]
+        self.assertTrue(re.search('"suites_count": 2', str(architecture)))
+
+    def test_validation(self):
+        suite = Suite()
+        self.session.add(suite)
+        self.assertRaises(DBUpdateError, self.session.flush)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/dbtest_packages.py b/tests/dbtest_packages.py
new file mode 100755 (executable)
index 0000000..f258770
--- /dev/null
@@ -0,0 +1,408 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+from base_test import fixture
+
+from daklib.dbconn import *
+from daklib.queue_install import package_to_suite
+from daklib.queue import get_newest_source, get_suite_version_by_source, \
+    get_source_by_package_and_suite, get_suite_version_by_package
+
+from sqlalchemy.orm.exc import MultipleResultsFound
+import unittest
+
+class Pkg():
+    'fake package class used for testing'
+
+    def __init__(self):
+        self.dsc = {}
+        self.files = {}
+        self.changes = {}
+
+class Upload():
+    'fake Upload class used for testing'
+
+    def __init__(self, pkg):
+        self.pkg = pkg
+
+class PackageTestCase(DBDakTestCase):
+    """
+    PackageTestCase checks the handling of source and binary packages in dak's
+    database.
+    """
+
+    def setUp(self):
+        super(PackageTestCase, self).setUp()
+        self.setup_binaries()
+        # flush to make sure that the setup is correct
+        self.session.flush()
+
+    def test_suite_architecture(self):
+        # check the id for architectures source and all
+        self.assertEqual(1, self.arch['source'].arch_id)
+        self.assertEqual(2, self.arch['all'].arch_id)
+        # check the many to many relation between Suite and Architecture
+        self.assertEqual('source', self.suite['lenny'].architectures[0])
+        self.assertEqual(4, len(self.suite['lenny'].architectures))
+        self.assertEqual(3, len(self.arch['i386'].suites))
+        # check the function get_suite_architectures()
+        architectures = get_suite_architectures('lenny', session = self.session)
+        self.assertEqual(4, len(architectures))
+        self.assertTrue(self.arch['source'] in architectures)
+        self.assertTrue(self.arch['all'] in architectures)
+        self.assertTrue(self.arch['kfreebsd-i386'] not in architectures)
+        architectures = get_suite_architectures('sid', session = self.session)
+        self.assertEqual(5, len(architectures))
+        self.assertTrue(self.arch['kfreebsd-i386'] in architectures)
+        architectures = get_suite_architectures('lenny', skipsrc = True, session = self.session)
+        self.assertEqual(3, len(architectures))
+        self.assertTrue(self.arch['source'] not in architectures)
+        architectures = get_suite_architectures('lenny', skipall = True, session = self.session)
+        self.assertEqual(3, len(architectures))
+        self.assertTrue(self.arch['all'] not in architectures)
+        # check the function get_architecture_suites()
+        suites = get_architecture_suites('i386', self.session)
+        self.assertEqual(3, len(suites))
+        self.assertTrue(self.suite['lenny'] in suites)
+        suites = get_architecture_suites('kfreebsd-i386', self.session)
+        self.assertEqual(2, len(suites))
+        self.assertTrue(self.suite['lenny'] not in suites)
+        # check overrides
+        self.assertEqual(0, self.suite['lenny'].overrides.count())
+
+    def test_poolfiles(self):
+        '''
+        Test the relation of the classes PoolFile and Location.
+
+        The code needs some explaination. The property Location.files is not a
+        list as in other relations because such a list would become rather
+        huge. It is a query object that can be queried, filtered, and iterated
+        as usual.  But list like methods like append() and remove() are
+        supported as well which allows code like:
+
+        somelocation.files.append(somefile)
+        '''
+
+        main = self.loc['main']
+        contrib = self.loc['contrib']
+        self.assertEqual(fixture('ftp/pool/'), main.path)
+        count = len(self.file.keys()) - 2
+        self.assertEqual(count, main.files.count())
+        self.assertEqual(2, contrib.files.count())
+        poolfile = main.files. \
+                filter(PoolFile.filename.like('%/hello/hello%')). \
+                order_by(PoolFile.filename)[0]
+        self.assertEqual('main/h/hello/hello_2.2-1.dsc', poolfile.filename)
+        self.assertEqual(main, poolfile.location)
+        # test get()
+        self.assertEqual(poolfile, \
+                self.session.query(PoolFile).get(poolfile.file_id))
+        self.assertEqual(None, self.session.query(PoolFile).get(-1))
+        # test remove() and append()
+        main.files.remove(self.file['sl_3.03-16.dsc'])
+        contrib.files.append(self.file['sl_3.03-16.dsc'])
+        self.assertEqual(count - 1, main.files.count())
+        self.assertEqual(3, contrib.files.count())
+        # test fullpath
+        self.assertEqual(fixture('ftp/pool/main/s/sl/sl_3.03-16.dsc'), \
+            self.file['sl_3.03-16.dsc'].fullpath)
+        # test check_poolfile()
+        self.assertEqual((True, self.file['sl_3.03-16.dsc']), \
+            check_poolfile('main/s/sl/sl_3.03-16.dsc', 0, '', \
+                contrib.location_id, self.session))
+        # test string value of 2nd argument
+        self.assertEqual((True, self.file['sl_3.03-16.dsc']), \
+            check_poolfile('main/s/sl/sl_3.03-16.dsc', '0', '', \
+                contrib.location_id, self.session))
+        self.assertEqual((False, None), \
+            check_poolfile('foobar', 0, '', contrib.location_id, self.session))
+        self.assertEqual((False, self.file['sl_3.03-16.dsc']), \
+            check_poolfile('main/s/sl/sl_3.03-16.dsc', 42, '', \
+                contrib.location_id, self.session))
+        self.assertEqual((False, self.file['sl_3.03-16.dsc']), \
+            check_poolfile('main/s/sl/sl_3.03-16.dsc', 0, 'deadbeef', \
+                contrib.location_id, self.session))
+        # test get_poolfile_like_name()
+        self.assertEqual([self.file['sl_3.03-16.dsc']], \
+            get_poolfile_like_name('sl_3.03-16.dsc', self.session))
+        self.assertEqual([], get_poolfile_like_name('foobar', self.session))
+
+    def test_maintainers(self):
+        '''
+        tests relation between Maintainer and DBSource
+
+        TODO: add relations to changes_pending_source
+        '''
+
+        maintainer = self.maintainer['maintainer']
+        self.assertEqual(maintainer,
+            self.session.query(Maintainer).get(maintainer.maintainer_id))
+        uploader = self.maintainer['uploader']
+        self.assertEqual(uploader,
+            self.session.query(Maintainer).get(uploader.maintainer_id))
+        lazyguy = self.maintainer['lazyguy']
+        self.assertEqual(lazyguy,
+            self.session.query(Maintainer).get(lazyguy.maintainer_id))
+        self.assertEqual(4, len(maintainer.maintains_sources))
+        self.assertTrue(self.source['hello_2.2-2'] in maintainer.maintains_sources)
+        self.assertEqual(maintainer.changed_sources, [])
+        self.assertEqual(uploader.maintains_sources, [])
+        self.assertEqual(4, len(uploader.changed_sources))
+        self.assertTrue(self.source['sl_3.03-16'] in uploader.changed_sources)
+        self.assertEqual(lazyguy.maintains_sources, [])
+        self.assertEqual(lazyguy.changed_sources, [])
+
+    def get_source_in_suite_fail(self):
+        '''
+        This function throws the MultipleResultsFound exception because
+        get_source_in_suite is broken.
+
+        TODO: fix get_source_in_suite
+        '''
+
+        return get_source_in_suite('hello', 'sid', self.session)
+
+    def test_sources(self):
+        'test relation between DBSource and PoolFile or Suite'
+
+        # test PoolFile
+        self.assertEqual(self.file['hello_2.2-2.dsc'], self.source['hello_2.2-2'].poolfile)
+        self.assertEqual(self.source['hello_2.2-2'], self.file['hello_2.2-2.dsc'].source)
+        self.assertEqual(None, self.file['python2.6_2.6.6-8.dsc'].source)
+        # test Suite
+        squeeze = self.session.query(Suite). \
+            filter(Suite.sources.contains(self.source['sl_3.03-16'])). \
+            order_by(Suite.suite_name)[1]
+        self.assertEqual(self.suite['squeeze'], squeeze)
+        self.assertEqual(1, squeeze.sources.count())
+        self.assertEqual(self.source['sl_3.03-16'], squeeze.sources[0])
+        sl = self.session.query(DBSource). \
+            filter(DBSource.suites.contains(self.suite['squeeze'])).one()
+        self.assertEqual(self.source['sl_3.03-16'], sl)
+        self.assertEqual(2, len(sl.suites))
+        self.assertTrue(self.suite['sid'] in sl.suites)
+        # test get_source_in_suite()
+        self.assertRaises(MultipleResultsFound, self.get_source_in_suite_fail)
+        self.assertEqual(None, \
+            get_source_in_suite('hello', 'squeeze', self.session))
+        self.assertEqual(self.source['sl_3.03-16'], \
+            get_source_in_suite('sl', 'sid', self.session))
+        # test get_suites_source_in()
+        self.assertEqual([self.suite['sid']], \
+            get_suites_source_in('hello', self.session))
+        self.assertEqual(2, len(get_suites_source_in('sl', self.session)))
+        self.assertTrue(self.suite['squeeze'] in \
+            get_suites_source_in('sl', self.session))
+
+    def test_add_dsc_to_db(self):
+        'tests function add_dsc_to_db()'
+
+        pkg = Pkg()
+        pkg.dsc['source'] = 'hello'
+        pkg.dsc['version'] = '2.2-3'
+        pkg.dsc['maintainer'] = self.maintainer['maintainer'].name
+        pkg.changes['changed-by'] = self.maintainer['uploader'].name
+        pkg.changes['fingerprint'] = 'deadbeef'
+        pkg.changes['distribution'] = { 'sid': '' }
+        pkg.files['hello_2.2-3.dsc'] = { \
+            'component': 'main',
+            'location id': self.loc['main'].location_id,
+            'files id': self.file['hello_2.2-3.dsc'].file_id }
+        pkg.dsc_files = {}
+        upload = Upload(pkg)
+        (source, dsc_component, dsc_location_id, pfs) = \
+            add_dsc_to_db(upload, 'hello_2.2-3.dsc', self.session)
+        self.assertEqual('hello', source.source)
+        self.assertEqual('2.2-3', source.version)
+        self.assertEqual('sid', source.suites[0].suite_name)
+        self.assertEqual('main', dsc_component)
+        self.assertEqual(self.loc['main'].location_id, dsc_location_id)
+        self.assertEqual([], pfs)
+
+    def test_source_exists(self):
+        'test function source_exists()'
+
+        hello = self.source['hello_2.2-2']
+        self.assertTrue(source_exists(hello.source, hello.version, \
+            suites = ['sid'], session = self.session))
+        # binNMU
+        self.assertTrue(source_exists(hello.source, hello.version + '+b7', \
+            suites = ['sid'], session = self.session))
+        self.assertTrue(not source_exists(hello.source, hello.version, \
+            suites = ['lenny', 'squeeze'], session = self.session))
+        self.assertTrue(not source_exists(hello.source, hello.version, \
+            suites = ['lenny', 'sid'], session = self.session))
+        self.assertTrue(not source_exists(hello.source, hello.version, \
+            suites = ['sid', 'lenny'], session = self.session))
+        self.assertTrue(not source_exists(hello.source, '0815', \
+            suites = ['sid'], session = self.session))
+        # 'any' suite
+        self.assertTrue(source_exists(hello.source, hello.version, \
+            session = self.session))
+
+    def test_package_to_suite(self):
+        'test function package_to_suite()'
+
+        pkg = Pkg()
+        pkg.changes = { 'distribution': {} }
+        upload = Upload(pkg)
+        self.assertTrue(not package_to_suite(upload, 'sid', self.session))
+        pkg.changes['distribution'] = { 'sid': '' }
+        pkg.changes['architecture'] = { 'source': '' }
+        self.assertTrue(package_to_suite(upload, 'sid', self.session))
+        pkg.changes['architecture'] = {}
+        pkg.changes['source'] = self.source['hello_2.2-2'].source
+        pkg.changes['version'] = self.source['hello_2.2-2'].version
+        self.assertTrue(not package_to_suite(upload, 'sid', self.session))
+        pkg.changes['version'] = '42'
+        self.assertTrue(package_to_suite(upload, 'sid', self.session))
+        pkg.changes['source'] = 'foobar'
+        pkg.changes['version'] = self.source['hello_2.2-2'].version
+        self.assertTrue(package_to_suite(upload, 'sid', self.session))
+        pkg.changes['distribution'] = { 'lenny': '' }
+        self.assertTrue(package_to_suite(upload, 'lenny', self.session))
+
+    def test_get_newest_source(self):
+        'test function get_newest_source()'
+
+        import daklib.queue
+        daklib.queue.dm_suites = ['sid']
+        self.assertEqual(self.source['hello_2.2-2'], get_newest_source('hello', self.session))
+        self.assertEqual(None, get_newest_source('foobar', self.session))
+
+    def test_get_suite_version_by_source(self):
+        'test function get_suite_version_by_source()'
+
+        result = get_suite_version_by_source('hello', self.session)
+        self.assertEqual(2, len(result))
+        self.assertTrue(('sid', '2.2-1') in result)
+        self.assertTrue(('sid', '2.2-2') in result)
+        result = get_suite_version_by_source('sl', self.session)
+        self.assertEqual(2, len(result))
+        self.assertTrue(('squeeze', '3.03-16') in result)
+        self.assertTrue(('sid', '3.03-16') in result)
+
+    def test_binaries(self):
+        '''
+        tests class DBBinary; TODO: test relation with Architecture, Maintainer,
+        PoolFile, and Fingerprint
+        '''
+
+        # test Suite relation
+        self.assertEqual(3, self.suite['sid'].binaries.count())
+        self.assertTrue(self.binary['hello_2.2-1_i386'] in \
+            self.suite['sid'].binaries.all())
+        self.assertEqual(0, self.suite['lenny'].binaries.count())
+        # test DBSource relation
+        self.assertEqual(3, len(self.source['hello_2.2-1'].binaries))
+        self.assertTrue(self.binary['hello_2.2-1_i386'] in \
+            self.source['hello_2.2-1'].binaries)
+        self.assertEqual(0, len(self.source['hello_2.2-2'].binaries))
+        # test get_suites_binary_in()
+        self.assertEqual(2, len(get_suites_binary_in('hello', self.session)))
+        self.assertTrue(self.suite['sid'] in \
+            get_suites_binary_in('hello', self.session))
+        self.assertEqual(2, len(get_suites_binary_in('gnome-hello', self.session)))
+        self.assertTrue(self.suite['squeeze'] in \
+            get_suites_binary_in('gnome-hello', self.session))
+        self.assertEqual(0, len(get_suites_binary_in('sl', self.session)))
+
+    def test_add_deb_to_db(self):
+        'tests function add_deb_to_db()'
+
+        pkg = Pkg()
+        pkg.changes['fingerprint'] = 'deadbeef'
+        pkg.changes['distribution'] = { 'sid': '' }
+        pkg.files['hello_2.2-2_i386.deb'] = { \
+            'package': 'hello',
+            'version': '2.2-2',
+            'maintainer': self.maintainer['maintainer'].name,
+            'architecture': 'i386',
+            'dbtype': 'deb',
+            'pool name': 'main/h/hello/',
+            'location id': self.loc['main'].location_id,
+            'source package': 'hello',
+            'source version': '2.2-2',
+            'size': 0,
+            'md5sum': 'deadbeef',
+            'sha1sum': 'deadbeef',
+            'sha256sum': 'deadbeef'}
+        upload = Upload(pkg)
+        bin, poolfile = add_deb_to_db(upload, 'hello_2.2-2_i386.deb', self.session)
+        self.session.refresh(poolfile)
+        self.session.refresh(poolfile.binary)
+        self.assertEqual('main/h/hello/hello_2.2-2_i386.deb', poolfile.filename)
+        self.assertEqual('hello', poolfile.binary.package)
+        self.assertEqual('2.2-2', poolfile.binary.version)
+        self.assertEqual(['sid'], poolfile.binary.suites)
+        self.assertEqual('Mr. Maintainer', poolfile.binary.maintainer.name)
+        self.assertEqual('i386', poolfile.binary.architecture.arch_string)
+        self.assertEqual('deb', poolfile.binary.binarytype)
+        self.assertEqual(self.loc['main'], poolfile.location)
+        self.assertEqual(self.source['hello_2.2-2'], poolfile.binary.source)
+        self.assertEqual(0, poolfile.filesize)
+        self.assertEqual('deadbeef', poolfile.md5sum)
+        self.assertEqual('deadbeef', poolfile.sha1sum)
+        self.assertEqual('deadbeef', poolfile.sha256sum)
+
+    def test_get_source_by_package_and_suite(self):
+        'test get_source_by_package_and_suite()'
+
+        query = get_source_by_package_and_suite('hello', 'sid', self.session)
+        self.assertEqual(self.source['hello_2.2-1'], query.one())
+        query = get_source_by_package_and_suite('gnome-hello', 'squeeze', self.session)
+        self.assertEqual(self.source['hello_2.2-1'], query.one())
+        query = get_source_by_package_and_suite('hello', 'hamm', self.session)
+        self.assertEqual(0, query.count())
+        query = get_source_by_package_and_suite('foobar', 'squeeze', self.session)
+        self.assertEqual(0, query.count())
+
+    def test_get_suite_version_by_package(self):
+        'test function get_suite_version_by_package()'
+
+        result = get_suite_version_by_package('hello', 'i386', self.session)
+        self.assertEqual(2, len(result))
+        self.assertTrue(('sid', '2.2-1') in result)
+        result = get_suite_version_by_package('hello', 'amd64', self.session)
+        self.assertEqual(0, len(result))
+        result = get_suite_version_by_package('python-hello', 'i386', self.session)
+        self.assertEqual([('squeeze', '2.2-1')], result)
+        result = get_suite_version_by_package('python-hello', 'amd64', self.session)
+        self.assertEqual([('squeeze', '2.2-1')], result)
+
+    def test_components(self):
+        'test class Component'
+
+        self.assertEqual([self.loc['main']], self.comp['main'].location)
+        self.assertEqual([self.loc['contrib']], self.comp['contrib'].location)
+        self.assertEqual(0, self.comp['main'].overrides.count())
+
+    def test_get_component_by_package_suite(self):
+        'test get_component_by_package_suite()'
+
+        result = get_component_by_package_suite('hello', ['sid'], \
+            session = self.session)
+        self.assertEqual('main', result)
+        result = get_component_by_package_suite('hello', ['hamm'], \
+            session = self.session)
+        self.assertEqual(None, result)
+        result = get_component_by_package_suite('foobar', ['sid'], \
+            session = self.session)
+        self.assertEqual(None, result)
+        # test that the newest version is returned
+        result = get_component_by_package_suite('gnome-hello', ['squeeze'], \
+            session = self.session)
+        self.assertEqual('main', result)
+        result = get_component_by_package_suite('gnome-hello', ['sid'], \
+            session = self.session)
+        self.assertEqual('contrib', result)
+        # test arch_list
+        result = get_component_by_package_suite('hello', ['sid'], \
+            arch_list = ['i386'], session = self.session)
+        self.assertEqual('main', result)
+        result = get_component_by_package_suite('hello', ['sid'], \
+            arch_list = ['amd64'], session = self.session)
+        self.assertEqual(None, result)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/dbtest_session.py b/tests/dbtest_session.py
new file mode 100755 (executable)
index 0000000..3a8d3cf
--- /dev/null
@@ -0,0 +1,180 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+
+from daklib.dbconn import DBConn, Uid
+
+from sqlalchemy.exc import InvalidRequestError
+
+import time
+import unittest
+
+class SessionTestCase(DBDakTestCase):
+    """
+    This TestCase checks the behaviour of SQLAlchemy's session object. It should
+    make sure the SQLAlchemy always works as we expect it. And it might help
+    dak beginners to get a grasp on how the session works.
+    """
+
+    def sleep(self):
+        time.sleep(0.001)
+
+    def test_timestamps(self):
+        '''
+        Test the basic transaction behaviour. The session is not configured for
+        autocommit mode and that is why we always have an open transaction that
+        ends with either rollback() or commit().
+        '''
+
+        # timestamps will always be the same in one transaction
+        timestamp01 = self.now()
+        self.sleep()
+        timestamp02 = self.now()
+        self.assertEqual(timestamp01, timestamp02)
+        uid = Uid(uid = 'foobar')
+        self.session.add(uid)
+        self.session.flush()
+        self.assertEqual(timestamp01, uid.created)
+        # ... but different in multiple transactions
+        self.session.rollback()
+        timestamp03 = self.now()
+        self.assertTrue(timestamp01 < timestamp03)
+        uid = Uid(uid = 'foobar')
+        self.session.add(uid)
+        self.session.flush()
+        self.assertTrue(timestamp01 < uid.created)
+
+    def test_crud(self):
+        '''
+        Test INSERT, UPDATE, DELETE, ROLLBACK, and COMMIT behaviour of the
+        session.
+        '''
+
+        # test INSERT
+        uid = Uid(uid = 'foobar')
+        self.assertTrue(uid not in self.session)
+        self.session.add(uid)
+        self.assertTrue(uid in self.session)
+        self.assertTrue(uid in self.session.new)
+        self.session.flush()
+        self.assertTrue(uid in self.session)
+        self.assertTrue(uid not in self.session.new)
+        # test UPDATE
+        uid.uid = 'foobar2'
+        self.assertTrue(uid in self.session.dirty)
+        self.session.flush()
+        self.assertTrue(uid not in self.session.dirty)
+        # test ROLLBACK
+        self.session.rollback()
+        self.assertTrue(uid not in self.session)
+        # test COMMIT
+        uid = Uid(uid = 'foobar')
+        self.session.add(uid)
+        self.assertTrue(uid in self.session.new)
+        self.session.commit()
+        self.assertTrue(uid in self.session)
+        self.assertTrue(uid not in self.session.new)
+        # test DELETE
+        self.session.delete(uid)
+        self.assertTrue(uid in self.session)
+        self.assertTrue(uid in self.session.deleted)
+        self.session.flush()
+        self.assertTrue(uid not in self.session)
+        self.assertTrue(uid not in self.session.deleted)
+
+    def test_expunge(self):
+        '''
+        Test expunge() of objects from session and the object_session()
+        function.
+        '''
+
+        # test expunge()
+        uid = Uid(uid = 'foobar')
+        self.session.add(uid)
+        self.assertTrue(uid in self.session)
+        self.session.expunge(uid)
+        self.assertTrue(uid not in self.session)
+        # test close()
+        self.session.add(uid)
+        self.assertTrue(uid in self.session)
+        self.session.close()
+        self.assertTrue(uid not in self.session)
+        # make uid persistent
+        self.session.add(uid)
+        self.session.commit()
+        self.assertTrue(uid in self.session)
+        # test rollback() for persistent object
+        self.session.rollback()
+        self.assertTrue(uid in self.session)
+        # test expunge() for persistent object
+        self.session.expunge(uid)
+        self.assertTrue(uid not in self.session)
+        # test close() for persistent object
+        self.session.add(uid)
+        self.assertTrue(uid in self.session)
+        self.session.close()
+        self.assertTrue(uid not in self.session)
+
+    def refresh(self):
+        '''
+        Refreshes self.uid and should raise an exception is self.uid is not
+        persistent.
+        '''
+        self.session.refresh(self.uid)
+
+    def test_refresh(self):
+        '''
+        Test the refresh() of an object.
+        '''
+
+        self.uid = Uid(uid = 'foobar')
+        self.assertEqual(None, self.uid.uid_id)
+        self.session.add(self.uid)
+        self.assertEqual(None, self.uid.uid_id)
+        self.session.flush()
+        self.assertTrue(self.uid.uid_id is not None)
+        self.session.rollback()
+        self.assertRaises(InvalidRequestError, self.refresh)
+
+    def test_session(self):
+        '''
+        Tests the ORMObject.session() method.
+        '''
+
+        uid = Uid(uid = 'foobar')
+        self.session.add(uid)
+        self.assertEqual(self.session, uid.session())
+
+    def test_clone(self):
+        '''
+        Tests the ORMObject.clone() method.
+        '''
+
+        uid1 = Uid(uid = 'foobar')
+        # no session yet
+        self.assertRaises(RuntimeError, uid1.clone)
+        self.session.add(uid1)
+        # object not persistent yet
+        self.assertRaises(RuntimeError, uid1.clone)
+        self.session.commit()
+        # test without session parameter
+        uid2 = uid1.clone()
+        self.assertTrue(uid1 is not uid2)
+        self.assertEqual(uid1.uid, uid2.uid)
+        self.assertTrue(uid2 not in uid1.session())
+        self.assertTrue(uid1 not in uid2.session())
+        # test with explicit session parameter
+        new_session = DBConn().session()
+        uid3 = uid1.clone(session = new_session)
+        self.assertEqual(uid1.uid, uid3.uid)
+        self.assertTrue(uid3 in new_session)
+        # test for ressource leaks with mass cloning
+        for _ in xrange(1, 1000):
+            uid1.clone()
+
+    def classes_to_clean(self):
+        # We need to clean all Uid objects in case some test fails.
+        return (Uid,)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/dbtest_timestamps.py b/tests/dbtest_timestamps.py
new file mode 100755 (executable)
index 0000000..8229e5d
--- /dev/null
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+
+from daklib.dbconn import DBConn, Uid
+
+import time
+import unittest
+
+class TimestampTestCase(DBDakTestCase):
+    """
+    TimestampTestCase checks that the timestamps created and modified are
+    working correctly.
+
+    TODO: Should we check all tables?
+    """
+
+    def sleep(self):
+        time.sleep(0.001)
+
+    def test_timestamps(self):
+        timestamp01 = self.now()
+        self.session.rollback()
+        self.sleep()
+        uid = Uid(uid = 'ftp-master@debian.org')
+        self.session.add(uid)
+        self.session.commit()
+        created01 = uid.created
+        modified01 = uid.modified
+        self.sleep()
+        timestamp02 = self.now()
+        self.session.rollback()
+        self.assertTrue(timestamp01 < created01)
+        self.assertTrue(timestamp01 < modified01)
+        self.assertTrue(created01 < timestamp02)
+        self.assertTrue(modified01 < timestamp02)
+        self.sleep()
+        uid.name = 'ftp team'
+        self.session.commit()
+        created02 = uid.created
+        modified02 = uid.modified
+        self.assertEqual(created01, created02)
+        self.assertTrue(modified01 < modified02)
+        self.sleep()
+        self.session.rollback()
+        timestamp03 = self.now()
+        self.assertTrue(modified02 < timestamp03)
+
+    def classes_to_clean(self):
+        return (Uid,)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/dbtest_validation.py b/tests/dbtest_validation.py
new file mode 100755 (executable)
index 0000000..8592124
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+
+from daklib.dbconn import Architecture
+from daklib.dak_exceptions import DBUpdateError
+
+import unittest
+
+class ValidatorTestCase(DBDakTestCase):
+    """
+    The ValidatorTestCase tests the validation mechanism.
+    """
+
+    def test_validation(self):
+        'tests validate()'
+
+        # before_insert validation should fail
+        architecture = Architecture()
+        self.session.add(architecture)
+        self.assertRaises(DBUpdateError, self.session.flush)
+        self.session.rollback()
+        # should not fail
+        architecture = Architecture('i386')
+        self.session.add(architecture)
+        self.session.flush()
+        # before_update validation should fail
+        architecture.arch_string = None
+        self.assertRaises(DBUpdateError, self.session.flush)
+        self.session.rollback()
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/fixtures/changes/two-beginnings.changes b/tests/fixtures/changes/two-beginnings.changes
new file mode 100644 (file)
index 0000000..33fc072
--- /dev/null
@@ -0,0 +1,25 @@
+-----BEGIN PGP SIGNED MESSAGE OR SO-----
+Hash: SHA512
+
+This: is a bug.
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA512
+
+Question: Is this a bug?
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.11 (GNU/Linux)
+
+iQIcBAEBCgAGBQJN1s1eAAoJEIATJTTdNH3Is4IP/3ppCve+jzobPjacyqYGyAec
+Op2rnYkQulfln1tyaxr8A40MHSWUly1kFebPgO3XNgAQ8mIh7FCeL7tSsaDnrBwq
+v/S/6JK1ZGCSuL6dleoqxoBgViJWQEvd297zAe0CzIdJ+JYgTPxX5cHh4E23rWmG
+zG9ct3v+5J4mSeEGksZPn8/YalnWRwb72hj/0WTagA2SY89TVZ9onT6p8ftWf6aO
+ODXDtclP56GixfnA3jR3reKI5/aLHXSLSYWGDOyEXffr0NoFvgtbsO4Y0FF2+Np3
+MpmJitoIRuJWk3zInYt0GeJskhEbvuF5Fnhiqrg43W5tFxB8pz5QHpDa/oq8Gfea
+MU/2p6FHA12nwD7CVdKWv/ra3nAWcJPqqfV//xgnZaBdS7d4G+3+tMFFYk8sWqc1
+JphkXJ9M8eX67oEuKgwhwHGV/wGu96nkTergnvlqpxk6uesfnsy0ixXX0UgLzwEZ
+ty1sZcCgq8dhdnEatkvRy2M13pS8S9iONmrowAck15YZuHcudBmvh5PFeNbpldmM
+ABLFApnjtD3DljzrjBgnHQS5UHDzDhDiEEAiQrUM3nu/CNi6UPoxasGszJK8W0iV
+MQmYVybk2L2lVV3b1qXURMyaFRcmVnLBNad/IiCbQiWTUCwg8zxzJoty1+f7+EDa
+rPpj3R0qGxz01UsVtS3W
+=/dES
+-----END PGP SIGNATURE-----
index a73884088bb405b45dc17da462afc6a241622254..3a728f78c1a0911ae74cb62fbab32b32a5a60d66 100644 (file)
@@ -17,3 +17,19 @@ Component
        Description "Software that fails to meet the DFSG";
   };
 };
+
+Dir
+{
+  Root "tests/fixtures/ftp/";
+  Pool "/srv/ftp-master.debian.org/ftp/pool/";
+  TempPath "/tmp";
+};
+
+DB
+{
+  Name "test_projectb";
+  Host "";
+  Port -1;
+  Unicode false;
+};
+
diff --git a/tests/fixtures/db-metadata-0.5.2.pkl b/tests/fixtures/db-metadata-0.5.2.pkl
new file mode 100644 (file)
index 0000000..c740f1b
--- /dev/null
@@ -0,0 +1,48703 @@
+ccopy_reg
+_reconstructor
+p0
+(csqlalchemy.schema
+MetaData
+p1
+c__builtin__
+object
+p2
+Ntp3
+Rp4
+(dp5
+S'tables'
+p6
+(dp7
+Vmaintainer
+p8
+g0
+(csqlalchemy.schema
+Table
+p9
+g2
+Ntp10
+Rp11
+(dp12
+S'ddl_listeners'
+p13
+ccollections
+defaultdict
+p14
+(c__builtin__
+list
+p15
+tp16
+Rp17
+sS'_columns'
+p18
+g0
+(csqlalchemy.sql.expression
+ColumnCollection
+p19
+g2
+Ntp20
+Rp21
+(dp22
+S'_data'
+p23
+g0
+(csqlalchemy.util
+OrderedDict
+p24
+c__builtin__
+dict
+p25
+(dp26
+Vname
+p27
+g0
+(csqlalchemy.schema
+Column
+p28
+g2
+Ntp29
+Rp30
+(dp31
+S'key'
+p32
+g27
+sS'is_literal'
+p33
+I00
+sS'quote'
+p34
+NsS'args'
+p35
+NsS'server_default'
+p36
+NsS'_creation_order'
+p37
+I56
+sS'table'
+p38
+g11
+sS'unique'
+p39
+NsS'primary_key'
+p40
+I00
+sS'proxy_set'
+p41
+c__builtin__
+set
+p42
+((lp43
+g30
+atp44
+Rp45
+sS'index'
+p46
+NsS'server_onupdate'
+p47
+NsS'name'
+p48
+g27
+sS'nullable'
+p49
+I00
+sS'default'
+p50
+NsS'autoincrement'
+p51
+I01
+sS'onupdate'
+p52
+NsS'foreign_keys'
+p53
+csqlalchemy.util
+OrderedSet
+p54
+((lp55
+tp56
+Rp57
+(dp58
+S'_list'
+p59
+(lp60
+sbsS'constraints'
+p61
+g42
+((lp62
+tp63
+Rp64
+sS'type'
+p65
+g0
+(csqlalchemy.databases.postgres
+PGText
+p66
+g2
+Ntp67
+Rp68
+(dp69
+S'assert_unicode'
+p70
+NsS'length'
+p71
+NsS'_impl_dict'
+p72
+(dp73
+sS'convert_unicode'
+p74
+I00
+sbsS'metadata'
+p75
+g4
+sbsVid
+p76
+g0
+(g28
+g2
+Ntp77
+Rp78
+(dp79
+g37
+I240
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+S'id'
+p80
+sg38
+g11
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp81
+g78
+atp82
+Rp83
+sg46
+Nsg47
+Nsg40
+I01
+sS'_pre_existing_column'
+p84
+g0
+(g28
+g2
+Ntp85
+Rp86
+(dp87
+g32
+g76
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(csqlalchemy.schema
+DefaultClause
+p88
+g2
+Ntp89
+Rp90
+(dp91
+S'column'
+p92
+g86
+sS'for_update'
+p93
+I00
+sS'arg'
+p94
+g0
+(csqlalchemy.sql.expression
+_TextClause
+p95
+g2
+Ntp96
+Rp97
+(dp98
+S'text'
+p99
+Vnextval(('maintainer_id_seq'::text)::regclass)
+p100
+sS'_autocommit'
+p101
+I00
+sS'_bind'
+p102
+NsS'typemap'
+p103
+NsS'bindparams'
+p104
+(dp105
+sbsbsg37
+I55
+sg38
+g11
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g76
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp106
+tp107
+Rp108
+(dp109
+g59
+(lp110
+sbsg61
+g42
+((lp111
+tp112
+Rp113
+sg65
+g0
+(csqlalchemy.databases.postgres
+PGInteger
+p114
+g2
+Ntp115
+Rp116
+(dp117
+g72
+(dp118
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp119
+tp120
+Rp121
+(dp122
+g59
+(lp123
+sbsg61
+g42
+((lp124
+tp125
+Rp126
+sg65
+g0
+(csqlalchemy.types
+Integer
+p127
+g2
+Ntp128
+Rp129
+(dp130
+g72
+(dp131
+sbsg75
+g4
+sbsVmodified
+p132
+g0
+(g28
+g2
+Ntp133
+Rp134
+(dp135
+g32
+g132
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp136
+Rp137
+(dp138
+g92
+g134
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp139
+Rp140
+(dp141
+g99
+Vnow()
+p142
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp143
+sbsbsg37
+I58
+sg38
+g11
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp144
+g134
+atp145
+Rp146
+sg46
+Nsg47
+Nsg48
+g132
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp147
+tp148
+Rp149
+(dp150
+g59
+(lp151
+sbsg61
+g42
+((lp152
+tp153
+Rp154
+sg65
+g0
+(csqlalchemy.databases.postgres
+PGDateTime
+p155
+g2
+Ntp156
+Rp157
+(dp158
+S'timezone'
+p159
+I01
+sg72
+(dp160
+sbsg75
+g4
+sbsVcreated
+p161
+g0
+(g28
+g2
+Ntp162
+Rp163
+(dp164
+g32
+g161
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp165
+Rp166
+(dp167
+g92
+g163
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp168
+Rp169
+(dp170
+g99
+Vnow()
+p171
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp172
+sbsbsg37
+I57
+sg38
+g11
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp173
+g163
+atp174
+Rp175
+sg46
+Nsg47
+Nsg48
+g161
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp176
+tp177
+Rp178
+(dp179
+g59
+(lp180
+sbsg61
+g42
+((lp181
+tp182
+Rp183
+sg65
+g0
+(g155
+g2
+Ntp184
+Rp185
+(dp186
+g159
+I01
+sg72
+(dp187
+sbsg75
+g4
+sbstp188
+Rp189
+(dp190
+g59
+(lp191
+g76
+ag27
+ag161
+ag132
+asbsbsg48
+g8
+sS'_primary_key'
+p192
+g0
+(csqlalchemy.schema
+PrimaryKeyConstraint
+p193
+g2
+Ntp194
+Rp195
+(dp196
+S'deferrable'
+p197
+NsS'initially'
+p198
+Nsg48
+NsS'columns'
+p199
+g0
+(g19
+g2
+Ntp200
+Rp201
+(dp202
+g23
+g0
+(g24
+g25
+(dp203
+g76
+g78
+stp204
+Rp205
+(dp206
+g59
+(lp207
+g76
+asbsbsS'_PrimaryKeyConstraint__colnames'
+p208
+(lp209
+sbsg34
+Nsg75
+g4
+sS'indexes'
+p210
+g42
+((lp211
+g0
+(csqlalchemy.schema
+Index
+p212
+g2
+Ntp213
+Rp214
+(dp215
+g48
+S'maintainer_name_key'
+p216
+sS'kwargs'
+p217
+(dp218
+sg38
+g11
+sg39
+I01
+sg199
+(lp219
+g30
+asg75
+g4
+sbatp220
+Rp221
+sS'_foreign_keys'
+p222
+g54
+((lp223
+tp224
+Rp225
+(dp226
+g59
+(lp227
+sbsS'_prefixes'
+p228
+(lp229
+sg217
+(dp230
+sS'fullname'
+p231
+g8
+sS'schema'
+p232
+NsS'quote_schema'
+p233
+Nsg61
+g42
+((lp234
+g195
+atp235
+Rp236
+sS'description'
+p237
+S'maintainer'
+p238
+sbsVuid
+p239
+g0
+(g9
+g2
+Ntp240
+Rp241
+(dp242
+g13
+g14
+(g15
+tp243
+Rp244
+sg18
+g0
+(g19
+g2
+Ntp245
+Rp246
+(dp247
+g23
+g0
+(g24
+g25
+(dp248
+Vid
+p249
+g0
+(g28
+g2
+Ntp250
+Rp251
+(dp252
+g37
+I295
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g241
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp253
+g251
+atp254
+Rp255
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp256
+Rp257
+(dp258
+g32
+g249
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp259
+Rp260
+(dp261
+g92
+g257
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp262
+Rp263
+(dp264
+g99
+Vnextval(('"uid_id_seq"'::text)::regclass)
+p265
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp266
+sbsbsg37
+I84
+sg38
+g241
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g249
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp267
+tp268
+Rp269
+(dp270
+g59
+(lp271
+sbsg61
+g42
+((lp272
+tp273
+Rp274
+sg65
+g0
+(g114
+g2
+Ntp275
+Rp276
+(dp277
+g72
+(dp278
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp279
+tp280
+Rp281
+(dp282
+g59
+(lp283
+sbsg61
+g42
+((lp284
+tp285
+Rp286
+sg65
+g0
+(g127
+g2
+Ntp287
+Rp288
+(dp289
+g72
+(dp290
+sbsg75
+g4
+sbsVuid
+p291
+g0
+(g28
+g2
+Ntp292
+Rp293
+(dp294
+g32
+g291
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I85
+sg38
+g241
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp295
+g293
+atp296
+Rp297
+sg46
+Nsg47
+Nsg48
+g291
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp298
+tp299
+Rp300
+(dp301
+g59
+(lp302
+sbsg61
+g42
+((lp303
+tp304
+Rp305
+sg65
+g0
+(g66
+g2
+Ntp306
+Rp307
+(dp308
+g70
+Nsg71
+Nsg72
+(dp309
+sg74
+I00
+sbsg75
+g4
+sbsVmodified
+p310
+g0
+(g28
+g2
+Ntp311
+Rp312
+(dp313
+g32
+g310
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp314
+Rp315
+(dp316
+g92
+g312
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp317
+Rp318
+(dp319
+g99
+Vnow()
+p320
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp321
+sbsbsg37
+I88
+sg38
+g241
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp322
+g312
+atp323
+Rp324
+sg46
+Nsg47
+Nsg48
+g310
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp325
+tp326
+Rp327
+(dp328
+g59
+(lp329
+sbsg61
+g42
+((lp330
+tp331
+Rp332
+sg65
+g0
+(g155
+g2
+Ntp333
+Rp334
+(dp335
+g159
+I01
+sg72
+(dp336
+sbsg75
+g4
+sbsVname
+p337
+g0
+(g28
+g2
+Ntp338
+Rp339
+(dp340
+g32
+g337
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I86
+sg38
+g241
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp341
+g339
+atp342
+Rp343
+sg46
+Nsg47
+Nsg48
+g337
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp344
+tp345
+Rp346
+(dp347
+g59
+(lp348
+sbsg61
+g42
+((lp349
+tp350
+Rp351
+sg65
+g0
+(g66
+g2
+Ntp352
+Rp353
+(dp354
+g70
+Nsg71
+Nsg72
+(dp355
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p356
+g0
+(g28
+g2
+Ntp357
+Rp358
+(dp359
+g32
+g356
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp360
+Rp361
+(dp362
+g92
+g358
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp363
+Rp364
+(dp365
+g99
+Vnow()
+p366
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp367
+sbsbsg37
+I87
+sg38
+g241
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp368
+g358
+atp369
+Rp370
+sg46
+Nsg47
+Nsg48
+g356
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp371
+tp372
+Rp373
+(dp374
+g59
+(lp375
+sbsg61
+g42
+((lp376
+tp377
+Rp378
+sg65
+g0
+(g155
+g2
+Ntp379
+Rp380
+(dp381
+g159
+I01
+sg72
+(dp382
+sbsg75
+g4
+sbstp383
+Rp384
+(dp385
+g59
+(lp386
+g249
+ag291
+ag337
+ag356
+ag310
+asbsbsg48
+g239
+sg192
+g0
+(g193
+g2
+Ntp387
+Rp388
+(dp389
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp390
+Rp391
+(dp392
+g23
+g0
+(g24
+g25
+(dp393
+g249
+g251
+stp394
+Rp395
+(dp396
+g59
+(lp397
+g249
+asbsbsg208
+(lp398
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp399
+g0
+(g212
+g2
+Ntp400
+Rp401
+(dp402
+g48
+S'uid_uid_key'
+p403
+sg217
+(dp404
+sg38
+g241
+sg39
+I01
+sg199
+(lp405
+g293
+asg75
+g4
+sbatp406
+Rp407
+sg222
+g54
+((lp408
+tp409
+Rp410
+(dp411
+g59
+(lp412
+sbsg228
+(lp413
+sg217
+(dp414
+sg231
+g239
+sg232
+Nsg233
+Nsg61
+g42
+((lp415
+g388
+atp416
+Rp417
+sg237
+S'uid'
+p418
+sbsVsource_acl
+p419
+g0
+(g9
+g2
+Ntp420
+Rp421
+(dp422
+g13
+g14
+(g15
+tp423
+Rp424
+sg18
+g0
+(g19
+g2
+Ntp425
+Rp426
+(dp427
+g23
+g0
+(g24
+g25
+(dp428
+Vaccess_level
+p429
+g0
+(g28
+g2
+Ntp430
+Rp431
+(dp432
+g32
+g429
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I81
+sg38
+g421
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp433
+g431
+atp434
+Rp435
+sg46
+Nsg47
+Nsg48
+g429
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp436
+tp437
+Rp438
+(dp439
+g59
+(lp440
+sbsg61
+g42
+((lp441
+tp442
+Rp443
+sg65
+g0
+(g66
+g2
+Ntp444
+Rp445
+(dp446
+g70
+Nsg71
+Nsg72
+(dp447
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p448
+g0
+(g28
+g2
+Ntp449
+Rp450
+(dp451
+g32
+g448
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp452
+Rp453
+(dp454
+g92
+g450
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp455
+Rp456
+(dp457
+g99
+Vnow()
+p458
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp459
+sbsbsg37
+I82
+sg38
+g421
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp460
+g450
+atp461
+Rp462
+sg46
+Nsg47
+Nsg48
+g448
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp463
+tp464
+Rp465
+(dp466
+g59
+(lp467
+sbsg61
+g42
+((lp468
+tp469
+Rp470
+sg65
+g0
+(g155
+g2
+Ntp471
+Rp472
+(dp473
+g159
+I01
+sg72
+(dp474
+sbsg75
+g4
+sbsVid
+p475
+g0
+(g28
+g2
+Ntp476
+Rp477
+(dp478
+g37
+I276
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g421
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp479
+g477
+atp480
+Rp481
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp482
+Rp483
+(dp484
+g32
+g475
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp485
+Rp486
+(dp487
+g92
+g483
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp488
+Rp489
+(dp490
+g99
+Vnextval('source_acl_id_seq'::regclass)
+p491
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp492
+sbsbsg37
+I80
+sg38
+g421
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g475
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp493
+tp494
+Rp495
+(dp496
+g59
+(lp497
+sbsg61
+g42
+((lp498
+tp499
+Rp500
+sg65
+g0
+(g114
+g2
+Ntp501
+Rp502
+(dp503
+g72
+(dp504
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp505
+tp506
+Rp507
+(dp508
+g59
+(lp509
+sbsg61
+g42
+((lp510
+tp511
+Rp512
+sg65
+g0
+(g127
+g2
+Ntp513
+Rp514
+(dp515
+g72
+(dp516
+sbsg75
+g4
+sbsVmodified
+p517
+g0
+(g28
+g2
+Ntp518
+Rp519
+(dp520
+g32
+g517
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp521
+Rp522
+(dp523
+g92
+g519
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp524
+Rp525
+(dp526
+g99
+Vnow()
+p527
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp528
+sbsbsg37
+I83
+sg38
+g421
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp529
+g519
+atp530
+Rp531
+sg46
+Nsg47
+Nsg48
+g517
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp532
+tp533
+Rp534
+(dp535
+g59
+(lp536
+sbsg61
+g42
+((lp537
+tp538
+Rp539
+sg65
+g0
+(g155
+g2
+Ntp540
+Rp541
+(dp542
+g159
+I01
+sg72
+(dp543
+sbsg75
+g4
+sbstp544
+Rp545
+(dp546
+g59
+(lp547
+g475
+ag429
+ag448
+ag517
+asbsbsg48
+g419
+sg192
+g0
+(g193
+g2
+Ntp548
+Rp549
+(dp550
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp551
+Rp552
+(dp553
+g23
+g0
+(g24
+g25
+(dp554
+g475
+g477
+stp555
+Rp556
+(dp557
+g59
+(lp558
+g475
+asbsbsg208
+(lp559
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp560
+g0
+(g212
+g2
+Ntp561
+Rp562
+(dp563
+g48
+S'source_acl_access_level_key'
+p564
+sg217
+(dp565
+sg38
+g421
+sg39
+I01
+sg199
+(lp566
+g431
+asg75
+g4
+sbatp567
+Rp568
+sg222
+g54
+((lp569
+tp570
+Rp571
+(dp572
+g59
+(lp573
+sbsg228
+(lp574
+sg217
+(dp575
+sg231
+g419
+sg232
+Nsg233
+Nsg61
+g42
+((lp576
+g549
+atp577
+Rp578
+sg237
+S'source_acl'
+p579
+sbsS'src_associations'
+p580
+g0
+(g9
+g2
+Ntp581
+Rp582
+(dp583
+g13
+g14
+(g15
+tp584
+Rp585
+sg18
+g0
+(g19
+g2
+Ntp586
+Rp587
+(dp588
+g23
+g0
+(g24
+g25
+(dp589
+Vsource
+p590
+g0
+(g28
+g2
+Ntp591
+Rp592
+(dp593
+g32
+g590
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I280
+sg38
+g582
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp594
+g592
+atp595
+Rp596
+sg46
+Nsg47
+Nsg48
+g590
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp597
+g0
+(csqlalchemy.schema
+ForeignKey
+p598
+g2
+Ntp599
+Rp600
+(dp601
+S'parent'
+p602
+g592
+sg197
+NsS'ondelete'
+p603
+Nsg48
+Vsrc_associations_source
+p604
+sS'_colspec'
+p605
+Vsource.id
+p606
+sS'constraint'
+p607
+g0
+(csqlalchemy.schema
+ForeignKeyConstraint
+p608
+g2
+Ntp609
+Rp610
+(dp611
+S'_ForeignKeyConstraint__refcolnames'
+p612
+(lp613
+g606
+asg52
+Nsg603
+NsS'elements'
+p614
+g54
+((lp615
+g600
+atp616
+Rp617
+(dp618
+g59
+(lp619
+g600
+asbsg48
+g604
+sg198
+NsS'link_to_name'
+p620
+I01
+sg197
+NsS'_ForeignKeyConstraint__colnames'
+p621
+(lp622
+Vsource
+p623
+asg38
+g582
+sS'use_alter'
+p624
+I00
+sg199
+g0
+(g19
+g2
+Ntp625
+Rp626
+(dp627
+g23
+g0
+(g24
+g25
+(dp628
+g590
+g592
+stp629
+Rp630
+(dp631
+g59
+(lp632
+g590
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp633
+Rp634
+(dp635
+g59
+(lp636
+g600
+asbsg61
+g42
+((lp637
+tp638
+Rp639
+sg65
+g0
+(g114
+g2
+Ntp640
+Rp641
+(dp642
+g72
+(dp643
+sbsg75
+g4
+sbsVsuite
+p644
+g0
+(g28
+g2
+Ntp645
+Rp646
+(dp647
+g32
+g644
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I279
+sg38
+g582
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp648
+g646
+atp649
+Rp650
+sg46
+Nsg47
+Nsg48
+g644
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp651
+g0
+(g598
+g2
+Ntp652
+Rp653
+(dp654
+g602
+g646
+sg197
+Nsg603
+Nsg48
+Vsrc_associations_suite
+p655
+sg605
+Vsuite.id
+p656
+sg607
+g0
+(g608
+g2
+Ntp657
+Rp658
+(dp659
+g612
+(lp660
+g656
+asg52
+Nsg603
+Nsg614
+g54
+((lp661
+g653
+atp662
+Rp663
+(dp664
+g59
+(lp665
+g653
+asbsg48
+g655
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp666
+Vsuite
+p667
+asg38
+g582
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp668
+Rp669
+(dp670
+g23
+g0
+(g24
+g25
+(dp671
+g644
+g646
+stp672
+Rp673
+(dp674
+g59
+(lp675
+g644
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp676
+Rp677
+(dp678
+g59
+(lp679
+g653
+asbsg61
+g42
+((lp680
+tp681
+Rp682
+sg65
+g0
+(g114
+g2
+Ntp683
+Rp684
+(dp685
+g72
+(dp686
+sbsg75
+g4
+sbsVid
+p687
+g0
+(g28
+g2
+Ntp688
+Rp689
+(dp690
+g37
+I277
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g582
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp691
+g689
+atp692
+Rp693
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp694
+Rp695
+(dp696
+g32
+g687
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp697
+Rp698
+(dp699
+g92
+g695
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp700
+Rp701
+(dp702
+g99
+Vnextval(('src_associations_id_seq'::text)::regclass)
+p703
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp704
+sbsbsg37
+I278
+sg38
+g582
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g687
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp705
+tp706
+Rp707
+(dp708
+g59
+(lp709
+sbsg61
+g42
+((lp710
+tp711
+Rp712
+sg65
+g0
+(g114
+g2
+Ntp713
+Rp714
+(dp715
+g72
+(dp716
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp717
+tp718
+Rp719
+(dp720
+g59
+(lp721
+sbsg61
+g42
+((lp722
+tp723
+Rp724
+sg65
+g0
+(g127
+g2
+Ntp725
+Rp726
+(dp727
+g72
+(dp728
+sbsg75
+g4
+sbsVmodified
+p729
+g0
+(g28
+g2
+Ntp730
+Rp731
+(dp732
+g32
+g729
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp733
+Rp734
+(dp735
+g92
+g731
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp736
+Rp737
+(dp738
+g99
+Vnow()
+p739
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp740
+sbsbsg37
+I282
+sg38
+g582
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp741
+g731
+atp742
+Rp743
+sg46
+Nsg47
+Nsg48
+g729
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp744
+tp745
+Rp746
+(dp747
+g59
+(lp748
+sbsg61
+g42
+((lp749
+tp750
+Rp751
+sg65
+g0
+(g155
+g2
+Ntp752
+Rp753
+(dp754
+g159
+I01
+sg72
+(dp755
+sbsg75
+g4
+sbsVcreated
+p756
+g0
+(g28
+g2
+Ntp757
+Rp758
+(dp759
+g32
+g756
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp760
+Rp761
+(dp762
+g92
+g758
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp763
+Rp764
+(dp765
+g99
+Vnow()
+p766
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp767
+sbsbsg37
+I281
+sg38
+g582
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp768
+g758
+atp769
+Rp770
+sg46
+Nsg47
+Nsg48
+g756
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp771
+tp772
+Rp773
+(dp774
+g59
+(lp775
+sbsg61
+g42
+((lp776
+tp777
+Rp778
+sg65
+g0
+(g155
+g2
+Ntp779
+Rp780
+(dp781
+g159
+I01
+sg72
+(dp782
+sbsg75
+g4
+sbstp783
+Rp784
+(dp785
+g59
+(lp786
+g687
+ag644
+ag590
+ag756
+ag729
+asbsbsg48
+g580
+sg192
+g0
+(g193
+g2
+Ntp787
+Rp788
+(dp789
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp790
+Rp791
+(dp792
+g23
+g0
+(g24
+g25
+(dp793
+g687
+g689
+stp794
+Rp795
+(dp796
+g59
+(lp797
+g687
+asbsbsg208
+(lp798
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp799
+g0
+(g212
+g2
+Ntp800
+Rp801
+(dp802
+g48
+S'src_associations_source'
+p803
+sg217
+(dp804
+sg38
+g582
+sg39
+I00
+sg199
+(lp805
+g592
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp806
+Rp807
+(dp808
+g48
+S'src_associations_suite_key'
+p809
+sg217
+(dp810
+sg38
+g582
+sg39
+I01
+sg199
+(lp811
+g646
+ag592
+asg75
+g4
+sbatp812
+Rp813
+sg222
+g54
+((lp814
+g600
+ag653
+atp815
+Rp816
+(dp817
+g59
+(lp818
+g600
+ag653
+asbsg228
+(lp819
+sg217
+(dp820
+sg231
+g580
+sg232
+Nsg233
+Nsg61
+g42
+((lp821
+g788
+ag610
+ag658
+atp822
+Rp823
+sg237
+S'src_associations'
+p824
+sbsVpolicy_queue
+p825
+g0
+(g9
+g2
+Ntp826
+Rp827
+(dp828
+g13
+g14
+(g15
+tp829
+Rp830
+sg18
+g0
+(g19
+g2
+Ntp831
+Rp832
+(dp833
+g23
+g0
+(g24
+g25
+(dp834
+Vorigin
+p835
+g0
+(g28
+g2
+Ntp836
+Rp837
+(dp838
+g32
+g835
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I125
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp839
+g837
+atp840
+Rp841
+sg46
+Nsg47
+Nsg48
+g835
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp842
+tp843
+Rp844
+(dp845
+g59
+(lp846
+sbsg61
+g42
+((lp847
+tp848
+Rp849
+sg65
+g0
+(g66
+g2
+Ntp850
+Rp851
+(dp852
+g70
+Nsg71
+Nsg72
+(dp853
+sg74
+I00
+sbsg75
+g4
+sbsVgenerate_metadata
+p854
+g0
+(g28
+g2
+Ntp855
+Rp856
+(dp857
+g32
+g854
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp858
+Rp859
+(dp860
+g92
+g856
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp861
+Rp862
+(dp863
+g99
+Vfalse
+p864
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp865
+sbsbsg37
+I124
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp866
+g856
+atp867
+Rp868
+sg46
+Nsg47
+Nsg48
+g854
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp869
+tp870
+Rp871
+(dp872
+g59
+(lp873
+sbsg61
+g42
+((lp874
+tp875
+Rp876
+sg65
+g0
+(csqlalchemy.databases.postgres
+PGBoolean
+p877
+g2
+Ntp878
+Rp879
+(dp880
+g72
+(dp881
+sbsg75
+g4
+sbsVcreated
+p882
+g0
+(g28
+g2
+Ntp883
+Rp884
+(dp885
+g32
+g882
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp886
+Rp887
+(dp888
+g92
+g884
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp889
+Rp890
+(dp891
+g99
+Vnow()
+p892
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp893
+sbsbsg37
+I130
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp894
+g884
+atp895
+Rp896
+sg46
+Nsg47
+Nsg48
+g882
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp897
+tp898
+Rp899
+(dp900
+g59
+(lp901
+sbsg61
+g42
+((lp902
+tp903
+Rp904
+sg65
+g0
+(g155
+g2
+Ntp905
+Rp906
+(dp907
+g159
+I01
+sg72
+(dp908
+sbsg75
+g4
+sbsVperms
+p909
+g0
+(g28
+g2
+Ntp910
+Rp911
+(dp912
+g32
+g909
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp913
+Rp914
+(dp915
+g92
+g911
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp916
+Rp917
+(dp918
+g99
+V'0660'::bpchar
+p919
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp920
+sbsbsg37
+I122
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp921
+g911
+atp922
+Rp923
+sg46
+Nsg47
+Nsg48
+g909
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp924
+tp925
+Rp926
+(dp927
+g59
+(lp928
+sbsg61
+g42
+((lp929
+tp930
+Rp931
+sg65
+g0
+(csqlalchemy.databases.postgres
+PGChar
+p932
+g2
+Ntp933
+Rp934
+(dp935
+g70
+Nsg71
+I4
+sg72
+(dp936
+sg74
+I00
+sbsg75
+g4
+sbsVqueue_name
+p937
+g0
+(g28
+g2
+Ntp938
+Rp939
+(dp940
+g32
+g937
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I120
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp941
+g939
+atp942
+Rp943
+sg46
+Nsg47
+Nsg48
+g937
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp944
+tp945
+Rp946
+(dp947
+g59
+(lp948
+sbsg61
+g42
+((lp949
+tp950
+Rp951
+sg65
+g0
+(g66
+g2
+Ntp952
+Rp953
+(dp954
+g70
+Nsg71
+Nsg72
+(dp955
+sg74
+I00
+sbsg75
+g4
+sbsVmodified
+p956
+g0
+(g28
+g2
+Ntp957
+Rp958
+(dp959
+g32
+g956
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp960
+Rp961
+(dp962
+g92
+g958
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp963
+Rp964
+(dp965
+g99
+Vnow()
+p966
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp967
+sbsbsg37
+I131
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp968
+g958
+atp969
+Rp970
+sg46
+Nsg47
+Nsg48
+g956
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp971
+tp972
+Rp973
+(dp974
+g59
+(lp975
+sbsg61
+g42
+((lp976
+tp977
+Rp978
+sg65
+g0
+(g155
+g2
+Ntp979
+Rp980
+(dp981
+g159
+I01
+sg72
+(dp982
+sbsg75
+g4
+sbsVlabel
+p983
+g0
+(g28
+g2
+Ntp984
+Rp985
+(dp986
+g32
+g983
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I126
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp987
+g985
+atp988
+Rp989
+sg46
+Nsg47
+Nsg48
+g983
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp990
+tp991
+Rp992
+(dp993
+g59
+(lp994
+sbsg61
+g42
+((lp995
+tp996
+Rp997
+sg65
+g0
+(g66
+g2
+Ntp998
+Rp999
+(dp1000
+g70
+Nsg71
+Nsg72
+(dp1001
+sg74
+I00
+sbsg75
+g4
+sbsVsigningkey
+p1002
+g0
+(g28
+g2
+Ntp1003
+Rp1004
+(dp1005
+g32
+g1002
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I128
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1006
+g1004
+atp1007
+Rp1008
+sg46
+Nsg47
+Nsg48
+g1002
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1009
+tp1010
+Rp1011
+(dp1012
+g59
+(lp1013
+sbsg61
+g42
+((lp1014
+tp1015
+Rp1016
+sg65
+g0
+(g66
+g2
+Ntp1017
+Rp1018
+(dp1019
+g70
+Nsg71
+Nsg72
+(dp1020
+sg74
+I00
+sbsg75
+g4
+sbsVchange_perms
+p1021
+g0
+(g28
+g2
+Ntp1022
+Rp1023
+(dp1024
+g32
+g1021
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1025
+Rp1026
+(dp1027
+g92
+g1023
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1028
+Rp1029
+(dp1030
+g99
+V'0660'::bpchar
+p1031
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1032
+sbsbsg37
+I123
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1033
+g1023
+atp1034
+Rp1035
+sg46
+Nsg47
+Nsg48
+g1021
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1036
+tp1037
+Rp1038
+(dp1039
+g59
+(lp1040
+sbsg61
+g42
+((lp1041
+tp1042
+Rp1043
+sg65
+g0
+(g932
+g2
+Ntp1044
+Rp1045
+(dp1046
+g70
+Nsg71
+I4
+sg72
+(dp1047
+sg74
+I00
+sbsg75
+g4
+sbsVpath
+p1048
+g0
+(g28
+g2
+Ntp1049
+Rp1050
+(dp1051
+g32
+g1048
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I121
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1052
+g1050
+atp1053
+Rp1054
+sg46
+Nsg47
+Nsg48
+g1048
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1055
+tp1056
+Rp1057
+(dp1058
+g59
+(lp1059
+sbsg61
+g42
+((lp1060
+tp1061
+Rp1062
+sg65
+g0
+(g66
+g2
+Ntp1063
+Rp1064
+(dp1065
+g70
+Nsg71
+Nsg72
+(dp1066
+sg74
+I00
+sbsg75
+g4
+sbsVreleasedescription
+p1067
+g0
+(g28
+g2
+Ntp1068
+Rp1069
+(dp1070
+g32
+g1067
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I127
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1071
+g1069
+atp1072
+Rp1073
+sg46
+Nsg47
+Nsg48
+g1067
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1074
+tp1075
+Rp1076
+(dp1077
+g59
+(lp1078
+sbsg61
+g42
+((lp1079
+tp1080
+Rp1081
+sg65
+g0
+(g66
+g2
+Ntp1082
+Rp1083
+(dp1084
+g70
+Nsg71
+Nsg72
+(dp1085
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p1086
+g0
+(g28
+g2
+Ntp1087
+Rp1088
+(dp1089
+g37
+I263
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g827
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp1090
+g1088
+atp1091
+Rp1092
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp1093
+Rp1094
+(dp1095
+g32
+g1086
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1096
+Rp1097
+(dp1098
+g92
+g1094
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1099
+Rp1100
+(dp1101
+g99
+Vnextval('policy_queue_id_seq'::regclass)
+p1102
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1103
+sbsbsg37
+I119
+sg38
+g827
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g1086
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp1104
+tp1105
+Rp1106
+(dp1107
+g59
+(lp1108
+sbsg61
+g42
+((lp1109
+tp1110
+Rp1111
+sg65
+g0
+(g114
+g2
+Ntp1112
+Rp1113
+(dp1114
+g72
+(dp1115
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp1116
+tp1117
+Rp1118
+(dp1119
+g59
+(lp1120
+sbsg61
+g42
+((lp1121
+tp1122
+Rp1123
+sg65
+g0
+(g127
+g2
+Ntp1124
+Rp1125
+(dp1126
+g72
+(dp1127
+sbsg75
+g4
+sbsVstay_of_execution
+p1128
+g0
+(g28
+g2
+Ntp1129
+Rp1130
+(dp1131
+g32
+g1128
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1132
+Rp1133
+(dp1134
+g92
+g1130
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1135
+Rp1136
+(dp1137
+g99
+V86400
+p1138
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1139
+sbsbsg37
+I129
+sg38
+g827
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1140
+g1130
+atp1141
+Rp1142
+sg46
+Nsg47
+Nsg48
+g1128
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1143
+tp1144
+Rp1145
+(dp1146
+g59
+(lp1147
+sbsg61
+g42
+((lp1148
+tp1149
+Rp1150
+sg65
+g0
+(g114
+g2
+Ntp1151
+Rp1152
+(dp1153
+g72
+(dp1154
+sbsg75
+g4
+sbstp1155
+Rp1156
+(dp1157
+g59
+(lp1158
+g1086
+ag937
+ag1048
+ag909
+ag1021
+ag854
+ag835
+ag983
+ag1067
+ag1002
+ag1128
+ag882
+ag956
+asbsbsg48
+g825
+sg192
+g0
+(g193
+g2
+Ntp1159
+Rp1160
+(dp1161
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp1162
+Rp1163
+(dp1164
+g23
+g0
+(g24
+g25
+(dp1165
+g1086
+g1088
+stp1166
+Rp1167
+(dp1168
+g59
+(lp1169
+g1086
+asbsbsg208
+(lp1170
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp1171
+g0
+(g212
+g2
+Ntp1172
+Rp1173
+(dp1174
+g48
+S'policy_queue_queue_name_key'
+p1175
+sg217
+(dp1176
+sg38
+g827
+sg39
+I01
+sg199
+(lp1177
+g939
+asg75
+g4
+sbatp1178
+Rp1179
+sg222
+g54
+((lp1180
+tp1181
+Rp1182
+(dp1183
+g59
+(lp1184
+sbsg228
+(lp1185
+sg217
+(dp1186
+sg231
+g825
+sg232
+Nsg233
+Nsg61
+g42
+((lp1187
+g1160
+atp1188
+Rp1189
+sg237
+S'policy_queue'
+p1190
+sbsS'udeb_contents'
+p1191
+g0
+(g9
+g2
+Ntp1192
+Rp1193
+(dp1194
+g13
+g14
+(g15
+tp1195
+Rp1196
+sg18
+g0
+(g19
+g2
+Ntp1197
+Rp1198
+(dp1199
+g23
+g0
+(g24
+g25
+(dp1200
+Vpackage
+p1201
+g0
+(g28
+g2
+Ntp1202
+Rp1203
+(dp1204
+g32
+g1201
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I350
+sg38
+g1193
+sg39
+Nsg40
+I01
+sg41
+g42
+((lp1205
+g1203
+atp1206
+Rp1207
+sg46
+Nsg47
+Nsg48
+g1201
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp1208
+tp1209
+Rp1210
+(dp1211
+g59
+(lp1212
+sbsg61
+g42
+((lp1213
+tp1214
+Rp1215
+sg65
+g0
+(g66
+g2
+Ntp1216
+Rp1217
+(dp1218
+g70
+Nsg71
+Nsg72
+(dp1219
+sg74
+I00
+sbsg75
+g4
+sbsVbinary_id
+p1220
+g0
+(g28
+g2
+Ntp1221
+Rp1222
+(dp1223
+g32
+g1220
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I351
+sg38
+g1193
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1224
+g1222
+atp1225
+Rp1226
+sg46
+Nsg47
+Nsg48
+g1220
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1227
+g0
+(g598
+g2
+Ntp1228
+Rp1229
+(dp1230
+g602
+g1222
+sg197
+Nsg603
+Nsg48
+Vudeb_contents_binary_fkey
+p1231
+sg605
+Vbinaries.id
+p1232
+sg607
+g0
+(g608
+g2
+Ntp1233
+Rp1234
+(dp1235
+g612
+(lp1236
+g1232
+asg52
+Nsg603
+Nsg614
+g54
+((lp1237
+g1229
+atp1238
+Rp1239
+(dp1240
+g59
+(lp1241
+g1229
+asbsg48
+g1231
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp1242
+Vbinary_id
+p1243
+asg38
+g1193
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp1244
+Rp1245
+(dp1246
+g23
+g0
+(g24
+g25
+(dp1247
+g1220
+g1222
+stp1248
+Rp1249
+(dp1250
+g59
+(lp1251
+g1220
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp1252
+Rp1253
+(dp1254
+g59
+(lp1255
+g1229
+asbsg61
+g42
+((lp1256
+tp1257
+Rp1258
+sg65
+g0
+(g114
+g2
+Ntp1259
+Rp1260
+(dp1261
+g72
+(dp1262
+sbsg75
+g4
+sbsVsuite
+p1263
+g0
+(g28
+g2
+Ntp1264
+Rp1265
+(dp1266
+g37
+I352
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g1263
+sg38
+g1193
+sS'base_columns'
+p1267
+g42
+((lp1268
+g1265
+atp1269
+Rp1270
+sg48
+g1263
+sg41
+g42
+((lp1271
+g1265
+atp1272
+Rp1273
+sg46
+Nsg39
+Nsg47
+Nsg40
+I01
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp1274
+g0
+(g598
+g2
+Ntp1275
+Rp1276
+(dp1277
+g602
+g1265
+sg197
+Nsg603
+Nsg48
+Vudeb_contents_suite_fkey
+p1278
+sg605
+Vsuite.id
+p1279
+sg607
+g0
+(g608
+g2
+Ntp1280
+Rp1281
+(dp1282
+g612
+(lp1283
+g1279
+asg52
+Nsg603
+Nsg614
+g54
+((lp1284
+g1276
+atp1285
+Rp1286
+(dp1287
+g59
+(lp1288
+g1276
+asbsg48
+g1278
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp1289
+Vsuite
+p1290
+asg38
+g1193
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp1291
+Rp1292
+(dp1293
+g23
+g0
+(g24
+g25
+(dp1294
+g1263
+g1265
+stp1295
+Rp1296
+(dp1297
+g59
+(lp1298
+g1263
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg92
+g0
+(g28
+g2
+Ntp1299
+Rp1300
+(dp1301
+g37
+I294
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g0
+(g9
+g2
+Ntp1302
+Rp1303
+(dp1304
+g13
+g14
+(g15
+tp1305
+Rp1306
+sg18
+g0
+(g19
+g2
+Ntp1307
+Rp1308
+(dp1309
+g23
+g0
+(g24
+g25
+(dp1310
+Vorigin
+p1311
+g0
+(g28
+g2
+Ntp1312
+Rp1313
+(dp1314
+g32
+g1311
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I103
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1315
+g1313
+atp1316
+Rp1317
+sg46
+Nsg47
+Nsg48
+g1311
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1318
+tp1319
+Rp1320
+(dp1321
+g59
+(lp1322
+sbsg61
+g42
+((lp1323
+tp1324
+Rp1325
+sg65
+g0
+(g66
+g2
+Ntp1326
+Rp1327
+(dp1328
+g70
+Nsg71
+Nsg72
+(dp1329
+sg74
+I00
+sbsg75
+g4
+sbsVdescription
+p1330
+g0
+(g28
+g2
+Ntp1331
+Rp1332
+(dp1333
+g32
+g1330
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I105
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1334
+g1332
+atp1335
+Rp1336
+sg46
+Nsg47
+Nsg48
+g1330
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1337
+tp1338
+Rp1339
+(dp1340
+g59
+(lp1341
+sbsg61
+g42
+((lp1342
+tp1343
+Rp1344
+sg65
+g0
+(g66
+g2
+Ntp1345
+Rp1346
+(dp1347
+g70
+Nsg71
+Nsg72
+(dp1348
+sg74
+I00
+sbsg75
+g4
+sbsVnotautomatic
+p1349
+g0
+(g28
+g2
+Ntp1350
+Rp1351
+(dp1352
+g32
+g1349
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1353
+Rp1354
+(dp1355
+g92
+g1351
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1356
+Rp1357
+(dp1358
+g99
+Vfalse
+p1359
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1360
+sbsbsg37
+I112
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1361
+g1351
+atp1362
+Rp1363
+sg46
+Nsg47
+Nsg48
+g1349
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1364
+tp1365
+Rp1366
+(dp1367
+g59
+(lp1368
+sbsg61
+g42
+((lp1369
+tp1370
+Rp1371
+sg65
+g0
+(g877
+g2
+Ntp1372
+Rp1373
+(dp1374
+g72
+(dp1375
+sbsg75
+g4
+sbsVpolicy_queue_id
+p1376
+g0
+(g28
+g2
+Ntp1377
+Rp1378
+(dp1379
+g32
+g1376
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I115
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1380
+g1378
+atp1381
+Rp1382
+sg46
+Nsg47
+Nsg48
+g1376
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1383
+g0
+(g598
+g2
+Ntp1384
+Rp1385
+(dp1386
+g602
+g1378
+sg197
+Nsg603
+Nsg48
+Vsuite_policy_queue_fkey
+p1387
+sg605
+Vpolicy_queue.id
+p1388
+sg607
+g0
+(g608
+g2
+Ntp1389
+Rp1390
+(dp1391
+g612
+(lp1392
+g1388
+asg52
+Nsg603
+Nsg614
+g54
+((lp1393
+g1385
+atp1394
+Rp1395
+(dp1396
+g59
+(lp1397
+g1385
+asbsg48
+g1387
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp1398
+Vpolicy_queue_id
+p1399
+asg38
+g1303
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp1400
+Rp1401
+(dp1402
+g23
+g0
+(g24
+g25
+(dp1403
+g1376
+g1378
+stp1404
+Rp1405
+(dp1406
+g59
+(lp1407
+g1376
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp1408
+Rp1409
+(dp1410
+g59
+(lp1411
+g1385
+asbsg61
+g42
+((lp1412
+tp1413
+Rp1414
+sg65
+g0
+(g114
+g2
+Ntp1415
+Rp1416
+(dp1417
+g72
+(dp1418
+sbsg75
+g4
+sbsVuntouchable
+p1419
+g0
+(g28
+g2
+Ntp1420
+Rp1421
+(dp1422
+g32
+g1419
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1423
+Rp1424
+(dp1425
+g92
+g1421
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1426
+Rp1427
+(dp1428
+g99
+Vfalse
+p1429
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1430
+sbsbsg37
+I106
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1431
+g1421
+atp1432
+Rp1433
+sg46
+Nsg47
+Nsg48
+g1419
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1434
+tp1435
+Rp1436
+(dp1437
+g59
+(lp1438
+sbsg61
+g42
+((lp1439
+tp1440
+Rp1441
+sg65
+g0
+(g877
+g2
+Ntp1442
+Rp1443
+(dp1444
+g72
+(dp1445
+sbsg75
+g4
+sbsVsuite_name
+p1446
+g0
+(g28
+g2
+Ntp1447
+Rp1448
+(dp1449
+g32
+g1446
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I101
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1450
+g1448
+atp1451
+Rp1452
+sg46
+Nsg47
+Nsg48
+g1446
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1453
+tp1454
+Rp1455
+(dp1456
+g59
+(lp1457
+sbsg61
+g42
+((lp1458
+tp1459
+Rp1460
+sg65
+g0
+(g66
+g2
+Ntp1461
+Rp1462
+(dp1463
+g70
+Nsg71
+Nsg72
+(dp1464
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p1465
+g1300
+sVoverridesuite
+p1466
+g0
+(g28
+g2
+Ntp1467
+Rp1468
+(dp1469
+g32
+g1466
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I114
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1470
+g1468
+atp1471
+Rp1472
+sg46
+Nsg47
+Nsg48
+g1466
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1473
+tp1474
+Rp1475
+(dp1476
+g59
+(lp1477
+sbsg61
+g42
+((lp1478
+tp1479
+Rp1480
+sg65
+g0
+(g66
+g2
+Ntp1481
+Rp1482
+(dp1483
+g70
+Nsg71
+Nsg72
+(dp1484
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p1485
+g0
+(g28
+g2
+Ntp1486
+Rp1487
+(dp1488
+g32
+g1485
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1489
+Rp1490
+(dp1491
+g92
+g1487
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1492
+Rp1493
+(dp1494
+g99
+Vnow()
+p1495
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1496
+sbsbsg37
+I116
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1497
+g1487
+atp1498
+Rp1499
+sg46
+Nsg47
+Nsg48
+g1485
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1500
+tp1501
+Rp1502
+(dp1503
+g59
+(lp1504
+sbsg61
+g42
+((lp1505
+tp1506
+Rp1507
+sg65
+g0
+(g155
+g2
+Ntp1508
+Rp1509
+(dp1510
+g159
+I01
+sg72
+(dp1511
+sbsg75
+g4
+sbsVvalidtime
+p1512
+g0
+(g28
+g2
+Ntp1513
+Rp1514
+(dp1515
+g32
+g1512
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1516
+Rp1517
+(dp1518
+g92
+g1514
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1519
+Rp1520
+(dp1521
+g99
+V604800
+p1522
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1523
+sbsbsg37
+I110
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1524
+g1514
+atp1525
+Rp1526
+sg46
+Nsg47
+Nsg48
+g1512
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1527
+tp1528
+Rp1529
+(dp1530
+g59
+(lp1531
+sbsg61
+g42
+((lp1532
+tp1533
+Rp1534
+sg65
+g0
+(g114
+g2
+Ntp1535
+Rp1536
+(dp1537
+g72
+(dp1538
+sbsg75
+g4
+sbsVchangelog
+p1539
+g0
+(g28
+g2
+Ntp1540
+Rp1541
+(dp1542
+g32
+g1539
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I118
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1543
+g1541
+atp1544
+Rp1545
+sg46
+Nsg47
+Nsg48
+g1539
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1546
+tp1547
+Rp1548
+(dp1549
+g59
+(lp1550
+sbsg61
+g42
+((lp1551
+tp1552
+Rp1553
+sg65
+g0
+(g66
+g2
+Ntp1554
+Rp1555
+(dp1556
+g70
+Nsg71
+Nsg72
+(dp1557
+sg74
+I00
+sbsg75
+g4
+sbsVmodified
+p1558
+g0
+(g28
+g2
+Ntp1559
+Rp1560
+(dp1561
+g32
+g1558
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1562
+Rp1563
+(dp1564
+g92
+g1560
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1565
+Rp1566
+(dp1567
+g99
+Vnow()
+p1568
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1569
+sbsbsg37
+I117
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1570
+g1560
+atp1571
+Rp1572
+sg46
+Nsg47
+Nsg48
+g1558
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1573
+tp1574
+Rp1575
+(dp1576
+g59
+(lp1577
+sbsg61
+g42
+((lp1578
+tp1579
+Rp1580
+sg65
+g0
+(g155
+g2
+Ntp1581
+Rp1582
+(dp1583
+g159
+I01
+sg72
+(dp1584
+sbsg75
+g4
+sbsVlabel
+p1585
+g0
+(g28
+g2
+Ntp1586
+Rp1587
+(dp1588
+g32
+g1585
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I104
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1589
+g1587
+atp1590
+Rp1591
+sg46
+Nsg47
+Nsg48
+g1585
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1592
+tp1593
+Rp1594
+(dp1595
+g59
+(lp1596
+sbsg61
+g42
+((lp1597
+tp1598
+Rp1599
+sg65
+g0
+(g66
+g2
+Ntp1600
+Rp1601
+(dp1602
+g70
+Nsg71
+Nsg72
+(dp1603
+sg74
+I00
+sbsg75
+g4
+sbsVpriority
+p1604
+g0
+(g28
+g2
+Ntp1605
+Rp1606
+(dp1607
+g32
+g1604
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1608
+Rp1609
+(dp1610
+g92
+g1606
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1611
+Rp1612
+(dp1613
+g99
+V0
+p1614
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1615
+sbsbsg37
+I111
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1616
+g1606
+atp1617
+Rp1618
+sg46
+Nsg47
+Nsg48
+g1604
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1619
+tp1620
+Rp1621
+(dp1622
+g59
+(lp1623
+sbsg61
+g42
+((lp1624
+tp1625
+Rp1626
+sg65
+g0
+(g114
+g2
+Ntp1627
+Rp1628
+(dp1629
+g72
+(dp1630
+sbsg75
+g4
+sbsVoverridecodename
+p1631
+g0
+(g28
+g2
+Ntp1632
+Rp1633
+(dp1634
+g32
+g1631
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I109
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1635
+g1633
+atp1636
+Rp1637
+sg46
+Nsg47
+Nsg48
+g1631
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1638
+tp1639
+Rp1640
+(dp1641
+g59
+(lp1642
+sbsg61
+g42
+((lp1643
+tp1644
+Rp1645
+sg65
+g0
+(g66
+g2
+Ntp1646
+Rp1647
+(dp1648
+g70
+Nsg71
+Nsg72
+(dp1649
+sg74
+I00
+sbsg75
+g4
+sbsVversion
+p1650
+g0
+(g28
+g2
+Ntp1651
+Rp1652
+(dp1653
+g32
+g1650
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I102
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1654
+g1652
+atp1655
+Rp1656
+sg46
+Nsg47
+Nsg48
+g1650
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1657
+tp1658
+Rp1659
+(dp1660
+g59
+(lp1661
+sbsg61
+g42
+((lp1662
+tp1663
+Rp1664
+sg65
+g0
+(g66
+g2
+Ntp1665
+Rp1666
+(dp1667
+g70
+Nsg71
+Nsg72
+(dp1668
+sg74
+I00
+sbsg75
+g4
+sbsVannounce
+p1669
+g0
+(g28
+g2
+Ntp1670
+Rp1671
+(dp1672
+g32
+g1669
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1673
+Rp1674
+(dp1675
+g92
+g1671
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1676
+Rp1677
+(dp1678
+g99
+V'debian-devel-changes@lists.debian.org'::text
+p1679
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1680
+sbsbsg37
+I107
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1681
+g1671
+atp1682
+Rp1683
+sg46
+Nsg47
+Nsg48
+g1669
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1684
+tp1685
+Rp1686
+(dp1687
+g59
+(lp1688
+sbsg61
+g42
+((lp1689
+tp1690
+Rp1691
+sg65
+g0
+(g66
+g2
+Ntp1692
+Rp1693
+(dp1694
+g70
+Nsg71
+Nsg72
+(dp1695
+sg74
+I00
+sbsg75
+g4
+sbsVcodename
+p1696
+g0
+(g28
+g2
+Ntp1697
+Rp1698
+(dp1699
+g32
+g1696
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I108
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1700
+g1698
+atp1701
+Rp1702
+sg46
+Nsg47
+Nsg48
+g1696
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1703
+tp1704
+Rp1705
+(dp1706
+g59
+(lp1707
+sbsg61
+g42
+((lp1708
+tp1709
+Rp1710
+sg65
+g0
+(g66
+g2
+Ntp1711
+Rp1712
+(dp1713
+g70
+Nsg71
+Nsg72
+(dp1714
+sg74
+I00
+sbsg75
+g4
+sbsVcopychanges
+p1715
+g0
+(g28
+g2
+Ntp1716
+Rp1717
+(dp1718
+g32
+g1715
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I113
+sg38
+g1303
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1719
+g1717
+atp1720
+Rp1721
+sg46
+Nsg47
+Nsg48
+g1715
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1722
+tp1723
+Rp1724
+(dp1725
+g59
+(lp1726
+sbsg61
+g42
+((lp1727
+tp1728
+Rp1729
+sg65
+g0
+(g66
+g2
+Ntp1730
+Rp1731
+(dp1732
+g70
+Nsg71
+Nsg72
+(dp1733
+sg74
+I00
+sbsg75
+g4
+sbstp1734
+Rp1735
+(dp1736
+g59
+(lp1737
+g1465
+ag1446
+ag1650
+ag1311
+ag1585
+ag1330
+ag1419
+ag1669
+ag1696
+ag1631
+ag1512
+ag1604
+ag1349
+ag1715
+ag1466
+ag1376
+ag1485
+ag1558
+ag1539
+asbsbsg48
+Vsuite
+p1738
+sg192
+g0
+(g193
+g2
+Ntp1739
+Rp1740
+(dp1741
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp1742
+Rp1743
+(dp1744
+g23
+g0
+(g24
+g25
+(dp1745
+g1465
+g1300
+stp1746
+Rp1747
+(dp1748
+g59
+(lp1749
+g1465
+asbsbsg208
+(lp1750
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp1751
+g0
+(g212
+g2
+Ntp1752
+Rp1753
+(dp1754
+g48
+S'suite_hash'
+p1755
+sg217
+(dp1756
+sg38
+g1303
+sg39
+I00
+sg199
+(lp1757
+g1448
+asg75
+g4
+sbatp1758
+Rp1759
+sg222
+g54
+((lp1760
+g1385
+atp1761
+Rp1762
+(dp1763
+g59
+(lp1764
+g1385
+asbsg228
+(lp1765
+sg217
+(dp1766
+sg231
+g1738
+sg232
+Nsg233
+Nsg61
+g42
+((lp1767
+g1740
+ag1390
+atp1768
+Rp1769
+sg237
+S'suite'
+p1770
+sbsg39
+Nsg48
+g80
+sg41
+g42
+((lp1771
+g1300
+atp1772
+Rp1773
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp1774
+Rp1775
+(dp1776
+g32
+g1465
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1777
+Rp1778
+(dp1779
+g92
+g1775
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1780
+Rp1781
+(dp1782
+g99
+Vnextval(('suite_id_seq'::text)::regclass)
+p1783
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1784
+sbsbsg37
+I100
+sg38
+g1303
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g1465
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp1785
+tp1786
+Rp1787
+(dp1788
+g59
+(lp1789
+sbsg61
+g42
+((lp1790
+tp1791
+Rp1792
+sg65
+g0
+(g114
+g2
+Ntp1793
+Rp1794
+(dp1795
+g72
+(dp1796
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp1797
+tp1798
+Rp1799
+(dp1800
+g59
+(lp1801
+sbsg61
+g42
+((lp1802
+tp1803
+Rp1804
+sg65
+g0
+(g127
+g2
+Ntp1805
+Rp1806
+(dp1807
+g72
+(dp1808
+sbsg75
+g4
+sbsg624
+I00
+sbatp1809
+Rp1810
+(dp1811
+g59
+(lp1812
+g1276
+asbsg61
+g42
+((lp1813
+tp1814
+Rp1815
+sg65
+g0
+(g114
+g2
+Ntp1816
+Rp1817
+(dp1818
+g72
+(dp1819
+sbsg75
+g4
+sbsVsection
+p1820
+g0
+(g28
+g2
+Ntp1821
+Rp1822
+(dp1823
+g32
+g1820
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I349
+sg38
+g1193
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1824
+g1822
+atp1825
+Rp1826
+sg46
+Nsg47
+Nsg48
+g1820
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1827
+tp1828
+Rp1829
+(dp1830
+g59
+(lp1831
+sbsg61
+g42
+((lp1832
+tp1833
+Rp1834
+sg65
+g0
+(g66
+g2
+Ntp1835
+Rp1836
+(dp1837
+g70
+Nsg71
+Nsg72
+(dp1838
+sg74
+I00
+sbsg75
+g4
+sbsVarch
+p1839
+g0
+(g28
+g2
+Ntp1840
+Rp1841
+(dp1842
+g37
+I353
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g1839
+sg38
+g1193
+sg1267
+g42
+((lp1843
+g1841
+atp1844
+Rp1845
+sg48
+g1839
+sg41
+g42
+((lp1846
+g1841
+atp1847
+Rp1848
+sg46
+Nsg39
+Nsg47
+Nsg40
+I01
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp1849
+g0
+(g598
+g2
+Ntp1850
+Rp1851
+(dp1852
+g602
+g1841
+sg197
+Nsg603
+Nsg48
+Vudeb_contents_arch_fkey
+p1853
+sg605
+Varchitecture.id
+p1854
+sg607
+g0
+(g608
+g2
+Ntp1855
+Rp1856
+(dp1857
+g612
+(lp1858
+g1854
+asg52
+Nsg603
+Nsg614
+g54
+((lp1859
+g1851
+atp1860
+Rp1861
+(dp1862
+g59
+(lp1863
+g1851
+asbsg48
+g1853
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp1864
+Varch
+p1865
+asg38
+g1193
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp1866
+Rp1867
+(dp1868
+g23
+g0
+(g24
+g25
+(dp1869
+g1839
+g1841
+stp1870
+Rp1871
+(dp1872
+g59
+(lp1873
+g1839
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg92
+g0
+(g28
+g2
+Ntp1874
+Rp1875
+(dp1876
+g37
+I1
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g0
+(g9
+g2
+Ntp1877
+Rp1878
+(dp1879
+g13
+g14
+(g15
+tp1880
+Rp1881
+sg18
+g0
+(g19
+g2
+Ntp1882
+Rp1883
+(dp1884
+g23
+g0
+(g24
+g25
+(dp1885
+Vdescription
+p1886
+g0
+(g28
+g2
+Ntp1887
+Rp1888
+(dp1889
+g32
+g1886
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I4
+sg38
+g1878
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1890
+g1888
+atp1891
+Rp1892
+sg46
+Nsg47
+Nsg48
+g1886
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1893
+tp1894
+Rp1895
+(dp1896
+g59
+(lp1897
+sbsg61
+g42
+((lp1898
+tp1899
+Rp1900
+sg65
+g0
+(g66
+g2
+Ntp1901
+Rp1902
+(dp1903
+g70
+Nsg71
+Nsg72
+(dp1904
+sg74
+I00
+sbsg75
+g4
+sbsVarch_string
+p1905
+g0
+(g28
+g2
+Ntp1906
+Rp1907
+(dp1908
+g32
+g1905
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I3
+sg38
+g1878
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1909
+g1907
+atp1910
+Rp1911
+sg46
+Nsg47
+Nsg48
+g1905
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1912
+tp1913
+Rp1914
+(dp1915
+g59
+(lp1916
+sbsg61
+g42
+((lp1917
+tp1918
+Rp1919
+sg65
+g0
+(g66
+g2
+Ntp1920
+Rp1921
+(dp1922
+g70
+Nsg71
+Nsg72
+(dp1923
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p1924
+g1875
+sVmodified
+p1925
+g0
+(g28
+g2
+Ntp1926
+Rp1927
+(dp1928
+g32
+g1925
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1929
+Rp1930
+(dp1931
+g92
+g1927
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1932
+Rp1933
+(dp1934
+g99
+Vnow()
+p1935
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1936
+sbsbsg37
+I6
+sg38
+g1878
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1937
+g1927
+atp1938
+Rp1939
+sg46
+Nsg47
+Nsg48
+g1925
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1940
+tp1941
+Rp1942
+(dp1943
+g59
+(lp1944
+sbsg61
+g42
+((lp1945
+tp1946
+Rp1947
+sg65
+g0
+(g155
+g2
+Ntp1948
+Rp1949
+(dp1950
+g159
+I01
+sg72
+(dp1951
+sbsg75
+g4
+sbsVcreated
+p1952
+g0
+(g28
+g2
+Ntp1953
+Rp1954
+(dp1955
+g32
+g1952
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp1956
+Rp1957
+(dp1958
+g92
+g1954
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp1959
+Rp1960
+(dp1961
+g99
+Vnow()
+p1962
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp1963
+sbsbsg37
+I5
+sg38
+g1878
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp1964
+g1954
+atp1965
+Rp1966
+sg46
+Nsg47
+Nsg48
+g1952
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp1967
+tp1968
+Rp1969
+(dp1970
+g59
+(lp1971
+sbsg61
+g42
+((lp1972
+tp1973
+Rp1974
+sg65
+g0
+(g155
+g2
+Ntp1975
+Rp1976
+(dp1977
+g159
+I01
+sg72
+(dp1978
+sbsg75
+g4
+sbstp1979
+Rp1980
+(dp1981
+g59
+(lp1982
+g1924
+ag1905
+ag1886
+ag1952
+ag1925
+asbsbsg48
+S'architecture'
+p1983
+sg192
+g0
+(g193
+g2
+Ntp1984
+Rp1985
+(dp1986
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp1987
+Rp1988
+(dp1989
+g23
+g0
+(g24
+g25
+(dp1990
+g1924
+g1875
+stp1991
+Rp1992
+(dp1993
+g59
+(lp1994
+g1924
+asbsbsg208
+(lp1995
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp1996
+g0
+(g212
+g2
+Ntp1997
+Rp1998
+(dp1999
+g48
+S'architecture_arch_string_key'
+p2000
+sg217
+(dp2001
+sg38
+g1878
+sg39
+I01
+sg199
+(lp2002
+g1907
+asg75
+g4
+sbatp2003
+Rp2004
+sg222
+g54
+((lp2005
+tp2006
+Rp2007
+(dp2008
+g59
+(lp2009
+sbsg228
+(lp2010
+sg217
+(dp2011
+sg231
+g1983
+sg232
+Nsg233
+Nsg61
+g42
+((lp2012
+g1985
+atp2013
+Rp2014
+sg237
+S'architecture'
+p2015
+sbsg39
+Nsg48
+g80
+sg41
+g42
+((lp2016
+g1875
+atp2017
+Rp2018
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp2019
+Rp2020
+(dp2021
+g32
+g1924
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp2022
+Rp2023
+(dp2024
+g92
+g2020
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp2025
+Rp2026
+(dp2027
+g99
+Vnextval(('architecture_id_seq'::text)::regclass)
+p2028
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp2029
+sbsbsg37
+I2
+sg38
+g1878
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g1924
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp2030
+tp2031
+Rp2032
+(dp2033
+g59
+(lp2034
+sbsg61
+g42
+((lp2035
+tp2036
+Rp2037
+sg65
+g0
+(g114
+g2
+Ntp2038
+Rp2039
+(dp2040
+g72
+(dp2041
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp2042
+tp2043
+Rp2044
+(dp2045
+g59
+(lp2046
+sbsg61
+g42
+((lp2047
+tp2048
+Rp2049
+sg65
+g0
+(g127
+g2
+Ntp2050
+Rp2051
+(dp2052
+g72
+(dp2053
+sbsg75
+g4
+sbsg624
+I00
+sbatp2054
+Rp2055
+(dp2056
+g59
+(lp2057
+g1851
+asbsg61
+g42
+((lp2058
+tp2059
+Rp2060
+sg65
+g0
+(g114
+g2
+Ntp2061
+Rp2062
+(dp2063
+g72
+(dp2064
+sbsg75
+g4
+sbsVfilename
+p2065
+g0
+(g28
+g2
+Ntp2066
+Rp2067
+(dp2068
+g32
+g2065
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I348
+sg38
+g1193
+sg39
+Nsg40
+I01
+sg41
+g42
+((lp2069
+g2067
+atp2070
+Rp2071
+sg46
+Nsg47
+Nsg48
+g2065
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp2072
+tp2073
+Rp2074
+(dp2075
+g59
+(lp2076
+sbsg61
+g42
+((lp2077
+tp2078
+Rp2079
+sg65
+g0
+(g66
+g2
+Ntp2080
+Rp2081
+(dp2082
+g70
+Nsg71
+Nsg72
+(dp2083
+sg74
+I00
+sbsg75
+g4
+sbstp2084
+Rp2085
+(dp2086
+g59
+(lp2087
+g2065
+ag1820
+ag1201
+ag1220
+ag1263
+ag1839
+asbsbsg48
+g1191
+sg192
+g0
+(g193
+g2
+Ntp2088
+Rp2089
+(dp2090
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp2091
+Rp2092
+(dp2093
+g23
+g0
+(g24
+g25
+(dp2094
+g1263
+g1265
+sg2065
+g2067
+sg1839
+g1841
+sg1201
+g1203
+stp2095
+Rp2096
+(dp2097
+g59
+(lp2098
+g2065
+ag1201
+ag1839
+ag1263
+asbsbsg208
+(lp2099
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp2100
+g0
+(g212
+g2
+Ntp2101
+Rp2102
+(dp2103
+g48
+S'ind_udeb_contents_nonfree_unstable'
+p2104
+sg217
+(dp2105
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2106
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2107
+Rp2108
+(dp2109
+g48
+S'ind_udeb_contents_nonfree_etch_m68k'
+p2110
+sg217
+(dp2111
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2112
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2113
+Rp2114
+(dp2115
+g48
+S'ind_udeb_contents_main_etch_m68k'
+p2116
+sg217
+(dp2117
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2118
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2119
+Rp2120
+(dp2121
+g48
+S'ind_udeb_contents_main_experimental'
+p2122
+sg217
+(dp2123
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2124
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2125
+Rp2126
+(dp2127
+g48
+S'ind_udeb_contents_main_unstable'
+p2128
+sg217
+(dp2129
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2130
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2131
+Rp2132
+(dp2133
+g48
+S'ind_udeb_contents_nonfree_oldstable_proposed_updates'
+p2134
+sg217
+(dp2135
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2136
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2137
+Rp2138
+(dp2139
+g48
+S'ind_udeb_contents_nonfree_stable'
+p2140
+sg217
+(dp2141
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2142
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2143
+Rp2144
+(dp2145
+g48
+S'ind_udeb_contents_nonfree_oldstable'
+p2146
+sg217
+(dp2147
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2148
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2149
+Rp2150
+(dp2151
+g48
+S'ind_udeb_contents_name'
+p2152
+sg217
+(dp2153
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2154
+g1203
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2155
+Rp2156
+(dp2157
+g48
+S'ind_udeb_contents_main_oldstable'
+p2158
+sg217
+(dp2159
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2160
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2161
+Rp2162
+(dp2163
+g48
+S'ind_udeb_contents_nonfree_testing'
+p2164
+sg217
+(dp2165
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2166
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2167
+Rp2168
+(dp2169
+g48
+S'ind_udeb_contents_nonfree_proposed_updates'
+p2170
+sg217
+(dp2171
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2172
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2173
+Rp2174
+(dp2175
+g48
+S'ind_udeb_contents_main_testing_proposed_updates'
+p2176
+sg217
+(dp2177
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2178
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2179
+Rp2180
+(dp2181
+g48
+S'ind_udeb_contents_main_stable'
+p2182
+sg217
+(dp2183
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2184
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2185
+Rp2186
+(dp2187
+g48
+S'ind_udeb_contents_nonfree_experimental'
+p2188
+sg217
+(dp2189
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2190
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2191
+Rp2192
+(dp2193
+g48
+S'ind_udeb_contents_main_oldstable_proposed_updates'
+p2194
+sg217
+(dp2195
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2196
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2197
+Rp2198
+(dp2199
+g48
+S'ind_udeb_contents_main_testing'
+p2200
+sg217
+(dp2201
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2202
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2203
+Rp2204
+(dp2205
+g48
+S'ind_udeb_contents_main_proposed_updates'
+p2206
+sg217
+(dp2207
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2208
+g1822
+ag1265
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp2209
+Rp2210
+(dp2211
+g48
+S'ind_udeb_contents_nonfree_testing_proposed_updates'
+p2212
+sg217
+(dp2213
+sg38
+g1193
+sg39
+I00
+sg199
+(lp2214
+g1822
+ag1265
+asg75
+g4
+sbatp2215
+Rp2216
+sg222
+g54
+((lp2217
+g1851
+ag1229
+ag1276
+atp2218
+Rp2219
+(dp2220
+g59
+(lp2221
+g1851
+ag1229
+ag1276
+asbsg228
+(lp2222
+sg217
+(dp2223
+sg231
+g1191
+sg232
+Nsg233
+Nsg61
+g42
+((lp2224
+g2089
+ag1856
+ag1234
+ag1281
+atp2225
+Rp2226
+sg237
+S'udeb_contents'
+p2227
+sbsS'src_format'
+p2228
+g0
+(g9
+g2
+Ntp2229
+Rp2230
+(dp2231
+g13
+g14
+(g15
+tp2232
+Rp2233
+sg18
+g0
+(g19
+g2
+Ntp2234
+Rp2235
+(dp2236
+g23
+g0
+(g24
+g25
+(dp2237
+Vcreated
+p2238
+g0
+(g28
+g2
+Ntp2239
+Rp2240
+(dp2241
+g32
+g2238
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp2242
+Rp2243
+(dp2244
+g92
+g2240
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp2245
+Rp2246
+(dp2247
+g99
+Vnow()
+p2248
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp2249
+sbsbsg37
+I286
+sg38
+g2230
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2250
+g2240
+atp2251
+Rp2252
+sg46
+Nsg47
+Nsg48
+g2238
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2253
+tp2254
+Rp2255
+(dp2256
+g59
+(lp2257
+sbsg61
+g42
+((lp2258
+tp2259
+Rp2260
+sg65
+g0
+(g155
+g2
+Ntp2261
+Rp2262
+(dp2263
+g159
+I01
+sg72
+(dp2264
+sbsg75
+g4
+sbsVmodified
+p2265
+g0
+(g28
+g2
+Ntp2266
+Rp2267
+(dp2268
+g32
+g2265
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp2269
+Rp2270
+(dp2271
+g92
+g2267
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp2272
+Rp2273
+(dp2274
+g99
+Vnow()
+p2275
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp2276
+sbsbsg37
+I287
+sg38
+g2230
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2277
+g2267
+atp2278
+Rp2279
+sg46
+Nsg47
+Nsg48
+g2265
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2280
+tp2281
+Rp2282
+(dp2283
+g59
+(lp2284
+sbsg61
+g42
+((lp2285
+tp2286
+Rp2287
+sg65
+g0
+(g155
+g2
+Ntp2288
+Rp2289
+(dp2290
+g159
+I01
+sg72
+(dp2291
+sbsg75
+g4
+sbsVformat_name
+p2292
+g0
+(g28
+g2
+Ntp2293
+Rp2294
+(dp2295
+g32
+g2292
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I285
+sg38
+g2230
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2296
+g2294
+atp2297
+Rp2298
+sg46
+Nsg47
+Nsg48
+g2292
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2299
+tp2300
+Rp2301
+(dp2302
+g59
+(lp2303
+sbsg61
+g42
+((lp2304
+tp2305
+Rp2306
+sg65
+g0
+(g66
+g2
+Ntp2307
+Rp2308
+(dp2309
+g70
+Nsg71
+Nsg72
+(dp2310
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p2311
+g0
+(g28
+g2
+Ntp2312
+Rp2313
+(dp2314
+g37
+I283
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g2230
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp2315
+g2313
+atp2316
+Rp2317
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp2318
+Rp2319
+(dp2320
+g32
+g2311
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp2321
+Rp2322
+(dp2323
+g92
+g2319
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp2324
+Rp2325
+(dp2326
+g99
+Vnextval('src_format_id_seq'::regclass)
+p2327
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp2328
+sbsbsg37
+I284
+sg38
+g2230
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g2311
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp2329
+tp2330
+Rp2331
+(dp2332
+g59
+(lp2333
+sbsg61
+g42
+((lp2334
+tp2335
+Rp2336
+sg65
+g0
+(g114
+g2
+Ntp2337
+Rp2338
+(dp2339
+g72
+(dp2340
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp2341
+tp2342
+Rp2343
+(dp2344
+g59
+(lp2345
+sbsg61
+g42
+((lp2346
+tp2347
+Rp2348
+sg65
+g0
+(g127
+g2
+Ntp2349
+Rp2350
+(dp2351
+g72
+(dp2352
+sbsg75
+g4
+sbstp2353
+Rp2354
+(dp2355
+g59
+(lp2356
+g2311
+ag2292
+ag2238
+ag2265
+asbsbsg48
+g2228
+sg192
+g0
+(g193
+g2
+Ntp2357
+Rp2358
+(dp2359
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp2360
+Rp2361
+(dp2362
+g23
+g0
+(g24
+g25
+(dp2363
+g2311
+g2313
+stp2364
+Rp2365
+(dp2366
+g59
+(lp2367
+g2311
+asbsbsg208
+(lp2368
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp2369
+g0
+(g212
+g2
+Ntp2370
+Rp2371
+(dp2372
+g48
+S'src_format_format_name_key'
+p2373
+sg217
+(dp2374
+sg38
+g2230
+sg39
+I01
+sg199
+(lp2375
+g2294
+asg75
+g4
+sbatp2376
+Rp2377
+sg222
+g54
+((lp2378
+tp2379
+Rp2380
+(dp2381
+g59
+(lp2382
+sbsg228
+(lp2383
+sg217
+(dp2384
+sg231
+g2228
+sg232
+Nsg233
+Nsg61
+g42
+((lp2385
+g2358
+atp2386
+Rp2387
+sg237
+S'src_format'
+p2388
+sbsS'changes_pending_binaries'
+p2389
+g0
+(g9
+g2
+Ntp2390
+Rp2391
+(dp2392
+g13
+g14
+(g15
+tp2393
+Rp2394
+sg18
+g0
+(g19
+g2
+Ntp2395
+Rp2396
+(dp2397
+g23
+g0
+(g24
+g25
+(dp2398
+Vpackage
+p2399
+g0
+(g28
+g2
+Ntp2400
+Rp2401
+(dp2402
+g32
+g2399
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I176
+sg38
+g2391
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2403
+g2401
+atp2404
+Rp2405
+sg46
+Nsg47
+Nsg48
+g2399
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2406
+tp2407
+Rp2408
+(dp2409
+g59
+(lp2410
+sbsg61
+g42
+((lp2411
+tp2412
+Rp2413
+sg65
+g0
+(g66
+g2
+Ntp2414
+Rp2415
+(dp2416
+g70
+Nsg71
+Nsg72
+(dp2417
+sg74
+I00
+sbsg75
+g4
+sbsVchange_id
+p2418
+g0
+(g28
+g2
+Ntp2419
+Rp2420
+(dp2421
+g32
+g2418
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I175
+sg38
+g2391
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2422
+g2420
+atp2423
+Rp2424
+sg46
+Nsg47
+Nsg48
+g2418
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2425
+g0
+(g598
+g2
+Ntp2426
+Rp2427
+(dp2428
+g602
+g2420
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_binaries_change_id_fkey
+p2429
+sg605
+Vchanges.id
+p2430
+sg607
+g0
+(g608
+g2
+Ntp2431
+Rp2432
+(dp2433
+g612
+(lp2434
+g2430
+asg52
+Nsg603
+Nsg614
+g54
+((lp2435
+g2427
+atp2436
+Rp2437
+(dp2438
+g59
+(lp2439
+g2427
+asbsg48
+g2429
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp2440
+Vchange_id
+p2441
+asg38
+g2391
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp2442
+Rp2443
+(dp2444
+g23
+g0
+(g24
+g25
+(dp2445
+g2418
+g2420
+stp2446
+Rp2447
+(dp2448
+g59
+(lp2449
+g2418
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp2450
+Rp2451
+(dp2452
+g59
+(lp2453
+g2427
+asbsg61
+g42
+((lp2454
+tp2455
+Rp2456
+sg65
+g0
+(g114
+g2
+Ntp2457
+Rp2458
+(dp2459
+g72
+(dp2460
+sbsg75
+g4
+sbsVcreated
+p2461
+g0
+(g28
+g2
+Ntp2462
+Rp2463
+(dp2464
+g32
+g2461
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp2465
+Rp2466
+(dp2467
+g92
+g2463
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp2468
+Rp2469
+(dp2470
+g99
+Vnow()
+p2471
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp2472
+sbsbsg37
+I182
+sg38
+g2391
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2473
+g2463
+atp2474
+Rp2475
+sg46
+Nsg47
+Nsg48
+g2461
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2476
+tp2477
+Rp2478
+(dp2479
+g59
+(lp2480
+sbsg61
+g42
+((lp2481
+tp2482
+Rp2483
+sg65
+g0
+(g155
+g2
+Ntp2484
+Rp2485
+(dp2486
+g159
+I01
+sg72
+(dp2487
+sbsg75
+g4
+sbsVmodified
+p2488
+g0
+(g28
+g2
+Ntp2489
+Rp2490
+(dp2491
+g32
+g2488
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp2492
+Rp2493
+(dp2494
+g92
+g2490
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp2495
+Rp2496
+(dp2497
+g99
+Vnow()
+p2498
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp2499
+sbsbsg37
+I183
+sg38
+g2391
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2500
+g2490
+atp2501
+Rp2502
+sg46
+Nsg47
+Nsg48
+g2488
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2503
+tp2504
+Rp2505
+(dp2506
+g59
+(lp2507
+sbsg61
+g42
+((lp2508
+tp2509
+Rp2510
+sg65
+g0
+(g155
+g2
+Ntp2511
+Rp2512
+(dp2513
+g159
+I01
+sg72
+(dp2514
+sbsg75
+g4
+sbsVversion
+p2515
+g0
+(g28
+g2
+Ntp2516
+Rp2517
+(dp2518
+g32
+g2515
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I177
+sg38
+g2391
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2519
+g2517
+atp2520
+Rp2521
+sg46
+Nsg47
+Nsg48
+g2515
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2522
+tp2523
+Rp2524
+(dp2525
+g59
+(lp2526
+sbsg61
+g42
+((lp2527
+tp2528
+Rp2529
+sg65
+g0
+(cdaklib.dbconn
+DebVersion
+p2530
+g2
+Ntp2531
+Rp2532
+(dp2533
+g70
+Nsg71
+Nsg72
+(dp2534
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture_id
+p2535
+g0
+(g28
+g2
+Ntp2536
+Rp2537
+(dp2538
+g32
+g2535
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I178
+sg38
+g2391
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2539
+g2537
+atp2540
+Rp2541
+sg46
+Nsg47
+Nsg48
+g2535
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2542
+g0
+(g598
+g2
+Ntp2543
+Rp2544
+(dp2545
+g602
+g2537
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_binaries_architecture_id_fkey
+p2546
+sg605
+Varchitecture.id
+p2547
+sg607
+g0
+(g608
+g2
+Ntp2548
+Rp2549
+(dp2550
+g612
+(lp2551
+g2547
+asg52
+Nsg603
+Nsg614
+g54
+((lp2552
+g2544
+atp2553
+Rp2554
+(dp2555
+g59
+(lp2556
+g2544
+asbsg48
+g2546
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp2557
+Varchitecture_id
+p2558
+asg38
+g2391
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp2559
+Rp2560
+(dp2561
+g23
+g0
+(g24
+g25
+(dp2562
+g2535
+g2537
+stp2563
+Rp2564
+(dp2565
+g59
+(lp2566
+g2535
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp2567
+Rp2568
+(dp2569
+g59
+(lp2570
+g2544
+asbsg61
+g42
+((lp2571
+tp2572
+Rp2573
+sg65
+g0
+(g114
+g2
+Ntp2574
+Rp2575
+(dp2576
+g72
+(dp2577
+sbsg75
+g4
+sbsVpending_file_id
+p2578
+g0
+(g28
+g2
+Ntp2579
+Rp2580
+(dp2581
+g32
+g2578
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I181
+sg38
+g2391
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2582
+g2580
+atp2583
+Rp2584
+sg46
+Nsg47
+Nsg48
+g2578
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2585
+g0
+(g598
+g2
+Ntp2586
+Rp2587
+(dp2588
+g602
+g2580
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_binaries_pending_file_id_fkey
+p2589
+sg605
+Vchanges_pending_files.id
+p2590
+sg607
+g0
+(g608
+g2
+Ntp2591
+Rp2592
+(dp2593
+g612
+(lp2594
+g2590
+asg52
+Nsg603
+Nsg614
+g54
+((lp2595
+g2587
+atp2596
+Rp2597
+(dp2598
+g59
+(lp2599
+g2587
+asbsg48
+g2589
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp2600
+Vpending_file_id
+p2601
+asg38
+g2391
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp2602
+Rp2603
+(dp2604
+g23
+g0
+(g24
+g25
+(dp2605
+g2578
+g2580
+stp2606
+Rp2607
+(dp2608
+g59
+(lp2609
+g2578
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp2610
+Rp2611
+(dp2612
+g59
+(lp2613
+g2587
+asbsg61
+g42
+((lp2614
+tp2615
+Rp2616
+sg65
+g0
+(g114
+g2
+Ntp2617
+Rp2618
+(dp2619
+g72
+(dp2620
+sbsg75
+g4
+sbsVsource_id
+p2621
+g0
+(g28
+g2
+Ntp2622
+Rp2623
+(dp2624
+g32
+g2621
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I179
+sg38
+g2391
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2625
+g2623
+atp2626
+Rp2627
+sg46
+Nsg47
+Nsg48
+g2621
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2628
+g0
+(g598
+g2
+Ntp2629
+Rp2630
+(dp2631
+g602
+g2623
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_binaries_source_id_fkey
+p2632
+sg605
+Vsource.id
+p2633
+sg607
+g0
+(g608
+g2
+Ntp2634
+Rp2635
+(dp2636
+g612
+(lp2637
+g2633
+asg52
+Nsg603
+Nsg614
+g54
+((lp2638
+g2630
+atp2639
+Rp2640
+(dp2641
+g59
+(lp2642
+g2630
+asbsg48
+g2632
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp2643
+Vsource_id
+p2644
+asg38
+g2391
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp2645
+Rp2646
+(dp2647
+g23
+g0
+(g24
+g25
+(dp2648
+g2621
+g2623
+stp2649
+Rp2650
+(dp2651
+g59
+(lp2652
+g2621
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp2653
+Rp2654
+(dp2655
+g59
+(lp2656
+g2630
+asbsg61
+g42
+((lp2657
+tp2658
+Rp2659
+sg65
+g0
+(g114
+g2
+Ntp2660
+Rp2661
+(dp2662
+g72
+(dp2663
+sbsg75
+g4
+sbsVpending_source_id
+p2664
+g0
+(g28
+g2
+Ntp2665
+Rp2666
+(dp2667
+g32
+g2664
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I180
+sg38
+g2391
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2668
+g2666
+atp2669
+Rp2670
+sg46
+Nsg47
+Nsg48
+g2664
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2671
+g0
+(g598
+g2
+Ntp2672
+Rp2673
+(dp2674
+g602
+g2666
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_binaries_pending_source_id_fkey
+p2675
+sg605
+Vchanges_pending_source.id
+p2676
+sg607
+g0
+(g608
+g2
+Ntp2677
+Rp2678
+(dp2679
+g612
+(lp2680
+g2676
+asg52
+Nsg603
+Nsg614
+g54
+((lp2681
+g2673
+atp2682
+Rp2683
+(dp2684
+g59
+(lp2685
+g2673
+asbsg48
+g2675
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp2686
+Vpending_source_id
+p2687
+asg38
+g2391
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp2688
+Rp2689
+(dp2690
+g23
+g0
+(g24
+g25
+(dp2691
+g2664
+g2666
+stp2692
+Rp2693
+(dp2694
+g59
+(lp2695
+g2664
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp2696
+Rp2697
+(dp2698
+g59
+(lp2699
+g2673
+asbsg61
+g42
+((lp2700
+tp2701
+Rp2702
+sg65
+g0
+(g114
+g2
+Ntp2703
+Rp2704
+(dp2705
+g72
+(dp2706
+sbsg75
+g4
+sbsVid
+p2707
+g0
+(g28
+g2
+Ntp2708
+Rp2709
+(dp2710
+g37
+I173
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g2391
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp2711
+g2709
+atp2712
+Rp2713
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp2714
+Rp2715
+(dp2716
+g32
+g2707
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp2717
+Rp2718
+(dp2719
+g92
+g2715
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp2720
+Rp2721
+(dp2722
+g99
+Vnextval('changes_pending_binaries_id_seq'::regclass)
+p2723
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp2724
+sbsbsg37
+I174
+sg38
+g2391
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g2707
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp2725
+tp2726
+Rp2727
+(dp2728
+g59
+(lp2729
+sbsg61
+g42
+((lp2730
+tp2731
+Rp2732
+sg65
+g0
+(g114
+g2
+Ntp2733
+Rp2734
+(dp2735
+g72
+(dp2736
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp2737
+tp2738
+Rp2739
+(dp2740
+g59
+(lp2741
+sbsg61
+g42
+((lp2742
+tp2743
+Rp2744
+sg65
+g0
+(g127
+g2
+Ntp2745
+Rp2746
+(dp2747
+g72
+(dp2748
+sbsg75
+g4
+sbstp2749
+Rp2750
+(dp2751
+g59
+(lp2752
+g2707
+ag2418
+ag2399
+ag2515
+ag2535
+ag2621
+ag2664
+ag2578
+ag2461
+ag2488
+asbsbsg48
+g2389
+sg192
+g0
+(g193
+g2
+Ntp2753
+Rp2754
+(dp2755
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp2756
+Rp2757
+(dp2758
+g23
+g0
+(g24
+g25
+(dp2759
+g2707
+g2709
+stp2760
+Rp2761
+(dp2762
+g59
+(lp2763
+g2707
+asbsbsg208
+(lp2764
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp2765
+g0
+(g212
+g2
+Ntp2766
+Rp2767
+(dp2768
+g48
+S'changes_pending_binaries_package_key'
+p2769
+sg217
+(dp2770
+sg38
+g2391
+sg39
+I01
+sg199
+(lp2771
+g2401
+ag2517
+ag2537
+asg75
+g4
+sbatp2772
+Rp2773
+sg222
+g54
+((lp2774
+g2544
+ag2427
+ag2587
+ag2673
+ag2630
+atp2775
+Rp2776
+(dp2777
+g59
+(lp2778
+g2544
+ag2427
+ag2587
+ag2673
+ag2630
+asbsg228
+(lp2779
+sg217
+(dp2780
+sg231
+g2389
+sg232
+Nsg233
+Nsg61
+g42
+((lp2781
+g2549
+ag2432
+ag2754
+ag2592
+ag2635
+ag2678
+atp2782
+Rp2783
+sg237
+S'changes_pending_binaries'
+p2784
+sbsS'deb_contents'
+p2785
+g0
+(g9
+g2
+Ntp2786
+Rp2787
+(dp2788
+g13
+g14
+(g15
+tp2789
+Rp2790
+sg18
+g0
+(g19
+g2
+Ntp2791
+Rp2792
+(dp2793
+g23
+g0
+(g24
+g25
+(dp2794
+Vpackage
+p2795
+g0
+(g28
+g2
+Ntp2796
+Rp2797
+(dp2798
+g32
+g2795
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I323
+sg38
+g2787
+sg39
+Nsg40
+I01
+sg41
+g42
+((lp2799
+g2797
+atp2800
+Rp2801
+sg46
+Nsg47
+Nsg48
+g2795
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp2802
+tp2803
+Rp2804
+(dp2805
+g59
+(lp2806
+sbsg61
+g42
+((lp2807
+tp2808
+Rp2809
+sg65
+g0
+(g66
+g2
+Ntp2810
+Rp2811
+(dp2812
+g70
+Nsg71
+Nsg72
+(dp2813
+sg74
+I00
+sbsg75
+g4
+sbsVbinary_id
+p2814
+g0
+(g28
+g2
+Ntp2815
+Rp2816
+(dp2817
+g32
+g2814
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I324
+sg38
+g2787
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2818
+g2816
+atp2819
+Rp2820
+sg46
+Nsg47
+Nsg48
+g2814
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2821
+g0
+(g598
+g2
+Ntp2822
+Rp2823
+(dp2824
+g602
+g2816
+sg197
+Nsg603
+Nsg48
+Vdeb_contents_binary_fkey
+p2825
+sg605
+Vbinaries.id
+p2826
+sg607
+g0
+(g608
+g2
+Ntp2827
+Rp2828
+(dp2829
+g612
+(lp2830
+g2826
+asg52
+Nsg603
+Nsg614
+g54
+((lp2831
+g2823
+atp2832
+Rp2833
+(dp2834
+g59
+(lp2835
+g2823
+asbsg48
+g2825
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp2836
+Vbinary_id
+p2837
+asg38
+g2787
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp2838
+Rp2839
+(dp2840
+g23
+g0
+(g24
+g25
+(dp2841
+g2814
+g2816
+stp2842
+Rp2843
+(dp2844
+g59
+(lp2845
+g2814
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp2846
+Rp2847
+(dp2848
+g59
+(lp2849
+g2823
+asbsg61
+g42
+((lp2850
+tp2851
+Rp2852
+sg65
+g0
+(g114
+g2
+Ntp2853
+Rp2854
+(dp2855
+g72
+(dp2856
+sbsg75
+g4
+sbsVsuite
+p2857
+g0
+(g28
+g2
+Ntp2858
+Rp2859
+(dp2860
+g37
+I326
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g2857
+sg38
+g2787
+sg1267
+g42
+((lp2861
+g2859
+atp2862
+Rp2863
+sg48
+g2857
+sg41
+g42
+((lp2864
+g2859
+atp2865
+Rp2866
+sg46
+Nsg39
+Nsg47
+Nsg40
+I01
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp2867
+g0
+(g598
+g2
+Ntp2868
+Rp2869
+(dp2870
+g602
+g2859
+sg197
+Nsg603
+Nsg48
+Vdeb_contents_suite_fkey
+p2871
+sg605
+Vsuite.id
+p2872
+sg607
+g0
+(g608
+g2
+Ntp2873
+Rp2874
+(dp2875
+g612
+(lp2876
+g2872
+asg52
+Nsg603
+Nsg614
+g54
+((lp2877
+g2869
+atp2878
+Rp2879
+(dp2880
+g59
+(lp2881
+g2869
+asbsg48
+g2871
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp2882
+Vsuite
+p2883
+asg38
+g2787
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp2884
+Rp2885
+(dp2886
+g23
+g0
+(g24
+g25
+(dp2887
+g2857
+g2859
+stp2888
+Rp2889
+(dp2890
+g59
+(lp2891
+g2857
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg92
+g1300
+sg624
+I00
+sbatp2892
+Rp2893
+(dp2894
+g59
+(lp2895
+g2869
+asbsg61
+g42
+((lp2896
+tp2897
+Rp2898
+sg65
+g0
+(g114
+g2
+Ntp2899
+Rp2900
+(dp2901
+g72
+(dp2902
+sbsg75
+g4
+sbsVsection
+p2903
+g0
+(g28
+g2
+Ntp2904
+Rp2905
+(dp2906
+g32
+g2903
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I322
+sg38
+g2787
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp2907
+g2905
+atp2908
+Rp2909
+sg46
+Nsg47
+Nsg48
+g2903
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp2910
+tp2911
+Rp2912
+(dp2913
+g59
+(lp2914
+sbsg61
+g42
+((lp2915
+tp2916
+Rp2917
+sg65
+g0
+(g66
+g2
+Ntp2918
+Rp2919
+(dp2920
+g70
+Nsg71
+Nsg72
+(dp2921
+sg74
+I00
+sbsg75
+g4
+sbsVarch
+p2922
+g0
+(g28
+g2
+Ntp2923
+Rp2924
+(dp2925
+g37
+I325
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g2922
+sg38
+g2787
+sg1267
+g42
+((lp2926
+g2924
+atp2927
+Rp2928
+sg48
+g2922
+sg41
+g42
+((lp2929
+g2924
+atp2930
+Rp2931
+sg46
+Nsg39
+Nsg47
+Nsg40
+I01
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp2932
+g0
+(g598
+g2
+Ntp2933
+Rp2934
+(dp2935
+g602
+g2924
+sg197
+Nsg603
+Nsg48
+Vdeb_contents_arch_fkey
+p2936
+sg605
+Varchitecture.id
+p2937
+sg607
+g0
+(g608
+g2
+Ntp2938
+Rp2939
+(dp2940
+g612
+(lp2941
+g2937
+asg52
+Nsg603
+Nsg614
+g54
+((lp2942
+g2934
+atp2943
+Rp2944
+(dp2945
+g59
+(lp2946
+g2934
+asbsg48
+g2936
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp2947
+Varch
+p2948
+asg38
+g2787
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp2949
+Rp2950
+(dp2951
+g23
+g0
+(g24
+g25
+(dp2952
+g2922
+g2924
+stp2953
+Rp2954
+(dp2955
+g59
+(lp2956
+g2922
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg92
+g1875
+sg624
+I00
+sbatp2957
+Rp2958
+(dp2959
+g59
+(lp2960
+g2934
+asbsg61
+g42
+((lp2961
+tp2962
+Rp2963
+sg65
+g0
+(g114
+g2
+Ntp2964
+Rp2965
+(dp2966
+g72
+(dp2967
+sbsg75
+g4
+sbsVfilename
+p2968
+g0
+(g28
+g2
+Ntp2969
+Rp2970
+(dp2971
+g32
+g2968
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I321
+sg38
+g2787
+sg39
+Nsg40
+I01
+sg41
+g42
+((lp2972
+g2970
+atp2973
+Rp2974
+sg46
+Nsg47
+Nsg48
+g2968
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp2975
+tp2976
+Rp2977
+(dp2978
+g59
+(lp2979
+sbsg61
+g42
+((lp2980
+tp2981
+Rp2982
+sg65
+g0
+(g66
+g2
+Ntp2983
+Rp2984
+(dp2985
+g70
+Nsg71
+Nsg72
+(dp2986
+sg74
+I00
+sbsg75
+g4
+sbstp2987
+Rp2988
+(dp2989
+g59
+(lp2990
+g2968
+ag2903
+ag2795
+ag2814
+ag2922
+ag2857
+asbsbsg48
+g2785
+sg192
+g0
+(g193
+g2
+Ntp2991
+Rp2992
+(dp2993
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp2994
+Rp2995
+(dp2996
+g23
+g0
+(g24
+g25
+(dp2997
+g2857
+g2859
+sg2968
+g2970
+sg2922
+g2924
+sg2795
+g2797
+stp2998
+Rp2999
+(dp3000
+g59
+(lp3001
+g2968
+ag2795
+ag2922
+ag2857
+asbsbsg208
+(lp3002
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp3003
+g0
+(g212
+g2
+Ntp3004
+Rp3005
+(dp3006
+g48
+S'ind_deb_contents_mipsel_testing_proposed_updates'
+p3007
+sg217
+(dp3008
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3009
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3010
+Rp3011
+(dp3012
+g48
+S'ind_deb_contents_powerpc_stable'
+p3013
+sg217
+(dp3014
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3015
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3016
+Rp3017
+(dp3018
+g48
+S'ind_deb_contents_sparc_oldstable'
+p3019
+sg217
+(dp3020
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3021
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3022
+Rp3023
+(dp3024
+g48
+S'ind_deb_contents_i386_experimental'
+p3025
+sg217
+(dp3026
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3027
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3028
+Rp3029
+(dp3030
+g48
+S'ind_deb_contents_powerpc_testing'
+p3031
+sg217
+(dp3032
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3033
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3034
+Rp3035
+(dp3036
+g48
+S'ind_deb_contents_s390_experimental'
+p3037
+sg217
+(dp3038
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3039
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3040
+Rp3041
+(dp3042
+g48
+S'ind_deb_contents_i386_oldstable_proposed_updates'
+p3043
+sg217
+(dp3044
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3045
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3046
+Rp3047
+(dp3048
+g48
+S'ind_deb_contents_s390_testing'
+p3049
+sg217
+(dp3050
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3051
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3052
+Rp3053
+(dp3054
+g48
+S'ind_deb_contents_mipsel_oldstable'
+p3055
+sg217
+(dp3056
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3057
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3058
+Rp3059
+(dp3060
+g48
+S'ind_deb_contents_mips_proposed_updates'
+p3061
+sg217
+(dp3062
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3063
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3064
+Rp3065
+(dp3066
+g48
+S'ind_deb_contents_s390_stable'
+p3067
+sg217
+(dp3068
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3069
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3070
+Rp3071
+(dp3072
+g48
+S'ind_deb_contents_i386_oldstable'
+p3073
+sg217
+(dp3074
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3075
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3076
+Rp3077
+(dp3078
+g48
+S'ind_deb_contents_sparc_unstable'
+p3079
+sg217
+(dp3080
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3081
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3082
+Rp3083
+(dp3084
+g48
+S'ind_deb_contents_m68k_etch_m68k'
+p3085
+sg217
+(dp3086
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3087
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3088
+Rp3089
+(dp3090
+g48
+S'ind_deb_contents_armel_experimental'
+p3091
+sg217
+(dp3092
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3093
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3094
+Rp3095
+(dp3096
+g48
+S'ind_deb_contents_kfreebsd_i386_unstable'
+p3097
+sg217
+(dp3098
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3099
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3100
+Rp3101
+(dp3102
+g48
+S'ind_deb_contents_mipsel_unstable'
+p3103
+sg217
+(dp3104
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3105
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3106
+Rp3107
+(dp3108
+g48
+S'ind_deb_contents_ia64_experimental'
+p3109
+sg217
+(dp3110
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3111
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3112
+Rp3113
+(dp3114
+g48
+S'ind_deb_contents_armel_unstable'
+p3115
+sg217
+(dp3116
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3117
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3118
+Rp3119
+(dp3120
+g48
+S'ind_deb_contents_mips_testing'
+p3121
+sg217
+(dp3122
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3123
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3124
+Rp3125
+(dp3126
+g48
+S'ind_deb_contents_sparc_proposed_updates'
+p3127
+sg217
+(dp3128
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3129
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3130
+Rp3131
+(dp3132
+g48
+S'ind_deb_contents_i386_unstable'
+p3133
+sg217
+(dp3134
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3135
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3136
+Rp3137
+(dp3138
+g48
+S'ind_deb_contents_i386_testing'
+p3139
+sg217
+(dp3140
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3141
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3142
+Rp3143
+(dp3144
+g48
+S'ind_deb_contents_ia64_unstable'
+p3145
+sg217
+(dp3146
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3147
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3148
+Rp3149
+(dp3150
+g48
+S'ind_deb_contents_i386_proposed_updates'
+p3151
+sg217
+(dp3152
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3153
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3154
+Rp3155
+(dp3156
+g48
+S'ind_deb_contents_ia64_testing'
+p3157
+sg217
+(dp3158
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3159
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3160
+Rp3161
+(dp3162
+g48
+S'ind_deb_contents_name'
+p3163
+sg217
+(dp3164
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3165
+g2797
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3166
+Rp3167
+(dp3168
+g48
+S'ind_deb_contents_amd64_oldstable'
+p3169
+sg217
+(dp3170
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3171
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3172
+Rp3173
+(dp3174
+g48
+S'ind_deb_contents_amd64_testing_proposed_updates'
+p3175
+sg217
+(dp3176
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3177
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3178
+Rp3179
+(dp3180
+g48
+S'ind_deb_contents_powerpc_unstable'
+p3181
+sg217
+(dp3182
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3183
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3184
+Rp3185
+(dp3186
+g48
+S'ind_deb_contents_kfreebsd_i386_testing_proposed_updates'
+p3187
+sg217
+(dp3188
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3189
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3190
+Rp3191
+(dp3192
+g48
+S'ind_deb_contents_ia64_oldstable_proposed_updates'
+p3193
+sg217
+(dp3194
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3195
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3196
+Rp3197
+(dp3198
+g48
+S'ind_deb_contents_sparc_testing'
+p3199
+sg217
+(dp3200
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3201
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3202
+Rp3203
+(dp3204
+g48
+S'ind_deb_contents_mips_stable'
+p3205
+sg217
+(dp3206
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3207
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3208
+Rp3209
+(dp3210
+g48
+S'ind_deb_contents_s390_oldstable_proposed_updates'
+p3211
+sg217
+(dp3212
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3213
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3214
+Rp3215
+(dp3216
+g48
+S'ind_deb_contents_mipsel_testing'
+p3217
+sg217
+(dp3218
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3219
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3220
+Rp3221
+(dp3222
+g48
+S'ind_deb_contents_ia64_stable'
+p3223
+sg217
+(dp3224
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3225
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3226
+Rp3227
+(dp3228
+g48
+S'ind_deb_contents_powerpc_oldstable_proposed_updates'
+p3229
+sg217
+(dp3230
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3231
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3232
+Rp3233
+(dp3234
+g48
+S'ind_deb_contents_kfreebsd_amd64_testing'
+p3235
+sg217
+(dp3236
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3237
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3238
+Rp3239
+(dp3240
+g48
+S'ind_deb_contents_armel_testing_proposed_updates'
+p3241
+sg217
+(dp3242
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3243
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3244
+Rp3245
+(dp3246
+g48
+S'ind_deb_contents_mips_oldstable_proposed_updates'
+p3247
+sg217
+(dp3248
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3249
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3250
+Rp3251
+(dp3252
+g48
+S'ind_deb_contents_hppa_testing'
+p3253
+sg217
+(dp3254
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3255
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3256
+Rp3257
+(dp3258
+g48
+S'ind_deb_contents_powerpc_proposed_updates'
+p3259
+sg217
+(dp3260
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3261
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3262
+Rp3263
+(dp3264
+g48
+S'ind_deb_contents_sparc_oldstable_proposed_updates'
+p3265
+sg217
+(dp3266
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3267
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3268
+Rp3269
+(dp3270
+g48
+S'ind_deb_contents_kfreebsd_i386_experimental'
+p3271
+sg217
+(dp3272
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3273
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3274
+Rp3275
+(dp3276
+g48
+S'ind_deb_contents_amd64_unstable'
+p3277
+sg217
+(dp3278
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3279
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3280
+Rp3281
+(dp3282
+g48
+S'ind_deb_contents_amd64_proposed_updates'
+p3283
+sg217
+(dp3284
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3285
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3286
+Rp3287
+(dp3288
+g48
+S'ind_deb_contents_ia64_oldstable'
+p3289
+sg217
+(dp3290
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3291
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3292
+Rp3293
+(dp3294
+g48
+S'ind_deb_contents_kfreebsd_i386_testing'
+p3295
+sg217
+(dp3296
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3297
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3298
+Rp3299
+(dp3300
+g48
+S'ind_deb_contents_alpha_experimental'
+p3301
+sg217
+(dp3302
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3303
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3304
+Rp3305
+(dp3306
+g48
+S'ind_deb_contents_ia64_testing_proposed_updates'
+p3307
+sg217
+(dp3308
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3309
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3310
+Rp3311
+(dp3312
+g48
+S'ind_deb_contents_armel_testing'
+p3313
+sg217
+(dp3314
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3315
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3316
+Rp3317
+(dp3318
+g48
+S'ind_deb_contents_sparc_stable'
+p3319
+sg217
+(dp3320
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3321
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3322
+Rp3323
+(dp3324
+g48
+S'ind_deb_contents_hppa_experimental'
+p3325
+sg217
+(dp3326
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3327
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3328
+Rp3329
+(dp3330
+g48
+S'ind_deb_contents_amd64_testing'
+p3331
+sg217
+(dp3332
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3333
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3334
+Rp3335
+(dp3336
+g48
+S'ind_deb_contents_alpha_stable'
+p3337
+sg217
+(dp3338
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3339
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3340
+Rp3341
+(dp3342
+g48
+S'ind_deb_contents_s390_testing_proposed_updates'
+p3343
+sg217
+(dp3344
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3345
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3346
+Rp3347
+(dp3348
+g48
+S'ind_deb_contents_arm_proposed_updates'
+p3349
+sg217
+(dp3350
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3351
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3352
+Rp3353
+(dp3354
+g48
+S'ind_deb_contents_sparc_experimental'
+p3355
+sg217
+(dp3356
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3357
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3358
+Rp3359
+(dp3360
+g48
+S'ind_deb_contents_powerpc_testing_proposed_updates'
+p3361
+sg217
+(dp3362
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3363
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3364
+Rp3365
+(dp3366
+g48
+S'ind_deb_contents_binary'
+p3367
+sg217
+(dp3368
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3369
+g2816
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3370
+Rp3371
+(dp3372
+g48
+S'ind_deb_contents_kfreebsd_amd64_unstable'
+p3373
+sg217
+(dp3374
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3375
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3376
+Rp3377
+(dp3378
+g48
+S'ind_deb_contents_hppa_stable'
+p3379
+sg217
+(dp3380
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3381
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3382
+Rp3383
+(dp3384
+g48
+S'ind_deb_contents_kfreebsd_amd64_testing_proposed_updates'
+p3385
+sg217
+(dp3386
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3387
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3388
+Rp3389
+(dp3390
+g48
+S'ind_deb_contents_powerpc_experimental'
+p3391
+sg217
+(dp3392
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3393
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3394
+Rp3395
+(dp3396
+g48
+S'ind_deb_contents_arm_oldstable'
+p3397
+sg217
+(dp3398
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3399
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3400
+Rp3401
+(dp3402
+g48
+S'ind_deb_contents_kfreebsd_amd64_experimental'
+p3403
+sg217
+(dp3404
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3405
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3406
+Rp3407
+(dp3408
+g48
+S'ind_deb_contents_mipsel_oldstable_proposed_updates'
+p3409
+sg217
+(dp3410
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3411
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3412
+Rp3413
+(dp3414
+g48
+S'ind_deb_contents_alpha_unstable'
+p3415
+sg217
+(dp3416
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3417
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3418
+Rp3419
+(dp3420
+g48
+S'ind_deb_contents_hppa_oldstable_proposed_updates'
+p3421
+sg217
+(dp3422
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3423
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3424
+Rp3425
+(dp3426
+g48
+S'ind_deb_contents_hurd_i386_experimental'
+p3427
+sg217
+(dp3428
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3429
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3430
+Rp3431
+(dp3432
+g48
+S'ind_deb_contents_mipsel_proposed_updates'
+p3433
+sg217
+(dp3434
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3435
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3436
+Rp3437
+(dp3438
+g48
+S'ind_deb_contents_mipsel_stable'
+p3439
+sg217
+(dp3440
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3441
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3442
+Rp3443
+(dp3444
+g48
+S'ind_deb_contents_arm_oldstable_proposed_updates'
+p3445
+sg217
+(dp3446
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3447
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3448
+Rp3449
+(dp3450
+g48
+S'ind_deb_contents_hurd_i386_unstable'
+p3451
+sg217
+(dp3452
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3453
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3454
+Rp3455
+(dp3456
+g48
+S'ind_deb_contents_i386_stable'
+p3457
+sg217
+(dp3458
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3459
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3460
+Rp3461
+(dp3462
+g48
+S'ind_deb_contents_mips_oldstable'
+p3463
+sg217
+(dp3464
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3465
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3466
+Rp3467
+(dp3468
+g48
+S'ind_deb_contents_arm_stable'
+p3469
+sg217
+(dp3470
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3471
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3472
+Rp3473
+(dp3474
+g48
+S'ind_deb_contents_hppa_testing_proposed_updates'
+p3475
+sg217
+(dp3476
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3477
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3478
+Rp3479
+(dp3480
+g48
+S'ind_deb_contents_s390_unstable'
+p3481
+sg217
+(dp3482
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3483
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3484
+Rp3485
+(dp3486
+g48
+S'ind_deb_contents_alpha_proposed_updates'
+p3487
+sg217
+(dp3488
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3489
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3490
+Rp3491
+(dp3492
+g48
+S'ind_deb_contents_mips_testing_proposed_updates'
+p3493
+sg217
+(dp3494
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3495
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3496
+Rp3497
+(dp3498
+g48
+S'ind_deb_contents_s390_oldstable'
+p3499
+sg217
+(dp3500
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3501
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3502
+Rp3503
+(dp3504
+g48
+S'ind_deb_contents_mipsel_experimental'
+p3505
+sg217
+(dp3506
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3507
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3508
+Rp3509
+(dp3510
+g48
+S'ind_deb_contents_mips_unstable'
+p3511
+sg217
+(dp3512
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3513
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3514
+Rp3515
+(dp3516
+g48
+S'ind_deb_contents_hppa_proposed_updates'
+p3517
+sg217
+(dp3518
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3519
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3520
+Rp3521
+(dp3522
+g48
+S'ind_deb_contents_amd64_stable'
+p3523
+sg217
+(dp3524
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3525
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3526
+Rp3527
+(dp3528
+g48
+S'ind_deb_contents_sparc_testing_proposed_updates'
+p3529
+sg217
+(dp3530
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3531
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3532
+Rp3533
+(dp3534
+g48
+S'ind_deb_contents_i386_testing_proposed_updates'
+p3535
+sg217
+(dp3536
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3537
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3538
+Rp3539
+(dp3540
+g48
+S'ind_deb_contents_powerpc_oldstable'
+p3541
+sg217
+(dp3542
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3543
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3544
+Rp3545
+(dp3546
+g48
+S'ind_deb_contents_amd64_oldstable_proposed_updates'
+p3547
+sg217
+(dp3548
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3549
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3550
+Rp3551
+(dp3552
+g48
+S'ind_deb_contents_ia64_proposed_updates'
+p3553
+sg217
+(dp3554
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3555
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3556
+Rp3557
+(dp3558
+g48
+S'ind_deb_contents_armel_stable'
+p3559
+sg217
+(dp3560
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3561
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3562
+Rp3563
+(dp3564
+g48
+S'ind_deb_contents_armel_proposed_updates'
+p3565
+sg217
+(dp3566
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3567
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3568
+Rp3569
+(dp3570
+g48
+S'ind_deb_contents_hppa_unstable'
+p3571
+sg217
+(dp3572
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3573
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3574
+Rp3575
+(dp3576
+g48
+S'ind_deb_contents_amd64_experimental'
+p3577
+sg217
+(dp3578
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3579
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3580
+Rp3581
+(dp3582
+g48
+S'ind_deb_contents_hppa_oldstable'
+p3583
+sg217
+(dp3584
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3585
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3586
+Rp3587
+(dp3588
+g48
+S'ind_deb_contents_s390_proposed_updates'
+p3589
+sg217
+(dp3590
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3591
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3592
+Rp3593
+(dp3594
+g48
+S'ind_deb_contents_mips_experimental'
+p3595
+sg217
+(dp3596
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3597
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3598
+Rp3599
+(dp3600
+g48
+S'ind_deb_contents_alpha_oldstable_proposed_updates'
+p3601
+sg217
+(dp3602
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3603
+g2924
+ag2859
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp3604
+Rp3605
+(dp3606
+g48
+S'ind_deb_contents_alpha_oldstable'
+p3607
+sg217
+(dp3608
+sg38
+g2787
+sg39
+I00
+sg199
+(lp3609
+g2924
+ag2859
+asg75
+g4
+sbatp3610
+Rp3611
+sg222
+g54
+((lp3612
+g2934
+ag2823
+ag2869
+atp3613
+Rp3614
+(dp3615
+g59
+(lp3616
+g2934
+ag2823
+ag2869
+asbsg228
+(lp3617
+sg217
+(dp3618
+sg231
+g2785
+sg232
+Nsg233
+Nsg61
+g42
+((lp3619
+g2992
+ag2939
+ag2828
+ag2874
+atp3620
+Rp3621
+sg237
+S'deb_contents'
+p3622
+sbsS'newest_source'
+p3623
+g0
+(g9
+g2
+Ntp3624
+Rp3625
+(dp3626
+g13
+g14
+(g15
+tp3627
+Rp3628
+sg18
+g0
+(g19
+g2
+Ntp3629
+Rp3630
+(dp3631
+g23
+g0
+(g24
+g25
+(dp3632
+Vsource
+p3633
+g0
+(g28
+g2
+Ntp3634
+Rp3635
+(dp3636
+g32
+g3633
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I416
+sg38
+g3625
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g3633
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3637
+tp3638
+Rp3639
+(dp3640
+g59
+(lp3641
+sbsg61
+g42
+((lp3642
+tp3643
+Rp3644
+sg65
+g0
+(g66
+g2
+Ntp3645
+Rp3646
+(dp3647
+g70
+Nsg71
+Nsg72
+(dp3648
+sg74
+I00
+sbsg75
+g4
+sbsVversion
+p3649
+g0
+(g28
+g2
+Ntp3650
+Rp3651
+(dp3652
+g32
+g3649
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I417
+sg38
+g3625
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g3649
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3653
+tp3654
+Rp3655
+(dp3656
+g59
+(lp3657
+sbsg61
+g42
+((lp3658
+tp3659
+Rp3660
+sg65
+g0
+(g2530
+g2
+Ntp3661
+Rp3662
+(dp3663
+g70
+Nsg71
+Nsg72
+(dp3664
+sg74
+I00
+sbsg75
+g4
+sbsVsuite
+p3665
+g0
+(g28
+g2
+Ntp3666
+Rp3667
+(dp3668
+g32
+g3665
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I418
+sg38
+g3625
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g3665
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3669
+tp3670
+Rp3671
+(dp3672
+g59
+(lp3673
+sbsg61
+g42
+((lp3674
+tp3675
+Rp3676
+sg65
+g0
+(g114
+g2
+Ntp3677
+Rp3678
+(dp3679
+g72
+(dp3680
+sbsg75
+g4
+sbstp3681
+Rp3682
+(dp3683
+g59
+(lp3684
+g3633
+ag3649
+ag3665
+asbsbsg48
+g3623
+sg192
+g0
+(g193
+g2
+Ntp3685
+Rp3686
+(dp3687
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp3688
+Rp3689
+(dp3690
+g23
+g0
+(g24
+g25
+(dp3691
+tp3692
+Rp3693
+(dp3694
+g59
+(lp3695
+sbsbsg208
+(lp3696
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp3697
+tp3698
+Rp3699
+sg222
+g54
+((lp3700
+tp3701
+Rp3702
+(dp3703
+g59
+(lp3704
+sbsg228
+(lp3705
+sg217
+(dp3706
+sg231
+g3623
+sg61
+g42
+((lp3707
+g3686
+atp3708
+Rp3709
+sg233
+Nsg232
+NsbsS'build_queue'
+p3710
+g0
+(g9
+g2
+Ntp3711
+Rp3712
+(dp3713
+g13
+g14
+(g15
+tp3714
+Rp3715
+sg18
+g0
+(g19
+g2
+Ntp3716
+Rp3717
+(dp3718
+g23
+g0
+(g24
+g25
+(dp3719
+Vorigin
+p3720
+g0
+(g28
+g2
+Ntp3721
+Rp3722
+(dp3723
+g32
+g3720
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I146
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp3724
+g3722
+atp3725
+Rp3726
+sg46
+Nsg47
+Nsg48
+g3720
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3727
+tp3728
+Rp3729
+(dp3730
+g59
+(lp3731
+sbsg61
+g42
+((lp3732
+tp3733
+Rp3734
+sg65
+g0
+(g66
+g2
+Ntp3735
+Rp3736
+(dp3737
+g70
+Nsg71
+Nsg72
+(dp3738
+sg74
+I00
+sbsg75
+g4
+sbsVgenerate_metadata
+p3739
+g0
+(g28
+g2
+Ntp3740
+Rp3741
+(dp3742
+g32
+g3739
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp3743
+Rp3744
+(dp3745
+g92
+g3741
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp3746
+Rp3747
+(dp3748
+g99
+Vfalse
+p3749
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp3750
+sbsbsg37
+I145
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp3751
+g3741
+atp3752
+Rp3753
+sg46
+Nsg47
+Nsg48
+g3739
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3754
+tp3755
+Rp3756
+(dp3757
+g59
+(lp3758
+sbsg61
+g42
+((lp3759
+tp3760
+Rp3761
+sg65
+g0
+(g877
+g2
+Ntp3762
+Rp3763
+(dp3764
+g72
+(dp3765
+sbsg75
+g4
+sbsVcreated
+p3766
+g0
+(g28
+g2
+Ntp3767
+Rp3768
+(dp3769
+g32
+g3766
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp3770
+Rp3771
+(dp3772
+g92
+g3768
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp3773
+Rp3774
+(dp3775
+g99
+Vnow()
+p3776
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp3777
+sbsbsg37
+I151
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp3778
+g3768
+atp3779
+Rp3780
+sg46
+Nsg47
+Nsg48
+g3766
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3781
+tp3782
+Rp3783
+(dp3784
+g59
+(lp3785
+sbsg61
+g42
+((lp3786
+tp3787
+Rp3788
+sg65
+g0
+(g155
+g2
+Ntp3789
+Rp3790
+(dp3791
+g159
+I01
+sg72
+(dp3792
+sbsg75
+g4
+sbsVsigningkey
+p3793
+g0
+(g28
+g2
+Ntp3794
+Rp3795
+(dp3796
+g32
+g3793
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I149
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp3797
+g3795
+atp3798
+Rp3799
+sg46
+Nsg47
+Nsg48
+g3793
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3800
+tp3801
+Rp3802
+(dp3803
+g59
+(lp3804
+sbsg61
+g42
+((lp3805
+tp3806
+Rp3807
+sg65
+g0
+(g66
+g2
+Ntp3808
+Rp3809
+(dp3810
+g70
+Nsg71
+Nsg72
+(dp3811
+sg74
+I00
+sbsg75
+g4
+sbsVqueue_name
+p3812
+g0
+(g28
+g2
+Ntp3813
+Rp3814
+(dp3815
+g32
+g3812
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I142
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp3816
+g3814
+atp3817
+Rp3818
+sg46
+Nsg47
+Nsg48
+g3812
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3819
+tp3820
+Rp3821
+(dp3822
+g59
+(lp3823
+sbsg61
+g42
+((lp3824
+tp3825
+Rp3826
+sg65
+g0
+(g66
+g2
+Ntp3827
+Rp3828
+(dp3829
+g70
+Nsg71
+Nsg72
+(dp3830
+sg74
+I00
+sbsg75
+g4
+sbsVnotautomatic
+p3831
+g0
+(g28
+g2
+Ntp3832
+Rp3833
+(dp3834
+g32
+g3831
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp3835
+Rp3836
+(dp3837
+g92
+g3833
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp3838
+Rp3839
+(dp3840
+g99
+Vfalse
+p3841
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp3842
+sbsbsg37
+I153
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp3843
+g3833
+atp3844
+Rp3845
+sg46
+Nsg47
+Nsg48
+g3831
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3846
+tp3847
+Rp3848
+(dp3849
+g59
+(lp3850
+sbsg61
+g42
+((lp3851
+tp3852
+Rp3853
+sg65
+g0
+(g877
+g2
+Ntp3854
+Rp3855
+(dp3856
+g72
+(dp3857
+sbsg75
+g4
+sbsVmodified
+p3858
+g0
+(g28
+g2
+Ntp3859
+Rp3860
+(dp3861
+g32
+g3858
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp3862
+Rp3863
+(dp3864
+g92
+g3860
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp3865
+Rp3866
+(dp3867
+g99
+Vnow()
+p3868
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp3869
+sbsbsg37
+I152
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp3870
+g3860
+atp3871
+Rp3872
+sg46
+Nsg47
+Nsg48
+g3858
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3873
+tp3874
+Rp3875
+(dp3876
+g59
+(lp3877
+sbsg61
+g42
+((lp3878
+tp3879
+Rp3880
+sg65
+g0
+(g155
+g2
+Ntp3881
+Rp3882
+(dp3883
+g159
+I01
+sg72
+(dp3884
+sbsg75
+g4
+sbsVlabel
+p3885
+g0
+(g28
+g2
+Ntp3886
+Rp3887
+(dp3888
+g32
+g3885
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I147
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp3889
+g3887
+atp3890
+Rp3891
+sg46
+Nsg47
+Nsg48
+g3885
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3892
+tp3893
+Rp3894
+(dp3895
+g59
+(lp3896
+sbsg61
+g42
+((lp3897
+tp3898
+Rp3899
+sg65
+g0
+(g66
+g2
+Ntp3900
+Rp3901
+(dp3902
+g70
+Nsg71
+Nsg72
+(dp3903
+sg74
+I00
+sbsg75
+g4
+sbsVcopy_files
+p3904
+g0
+(g28
+g2
+Ntp3905
+Rp3906
+(dp3907
+g32
+g3904
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp3908
+Rp3909
+(dp3910
+g92
+g3906
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp3911
+Rp3912
+(dp3913
+g99
+Vfalse
+p3914
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp3915
+sbsbsg37
+I144
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp3916
+g3906
+atp3917
+Rp3918
+sg46
+Nsg47
+Nsg48
+g3904
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3919
+tp3920
+Rp3921
+(dp3922
+g59
+(lp3923
+sbsg61
+g42
+((lp3924
+tp3925
+Rp3926
+sg65
+g0
+(g877
+g2
+Ntp3927
+Rp3928
+(dp3929
+g72
+(dp3930
+sbsg75
+g4
+sbsVreleasedescription
+p3931
+g0
+(g28
+g2
+Ntp3932
+Rp3933
+(dp3934
+g32
+g3931
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I148
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp3935
+g3933
+atp3936
+Rp3937
+sg46
+Nsg47
+Nsg48
+g3931
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3938
+tp3939
+Rp3940
+(dp3941
+g59
+(lp3942
+sbsg61
+g42
+((lp3943
+tp3944
+Rp3945
+sg65
+g0
+(g66
+g2
+Ntp3946
+Rp3947
+(dp3948
+g70
+Nsg71
+Nsg72
+(dp3949
+sg74
+I00
+sbsg75
+g4
+sbsVpath
+p3950
+g0
+(g28
+g2
+Ntp3951
+Rp3952
+(dp3953
+g32
+g3950
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I143
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp3954
+g3952
+atp3955
+Rp3956
+sg46
+Nsg47
+Nsg48
+g3950
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp3957
+tp3958
+Rp3959
+(dp3960
+g59
+(lp3961
+sbsg61
+g42
+((lp3962
+tp3963
+Rp3964
+sg65
+g0
+(g66
+g2
+Ntp3965
+Rp3966
+(dp3967
+g70
+Nsg71
+Nsg72
+(dp3968
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p3969
+g0
+(g28
+g2
+Ntp3970
+Rp3971
+(dp3972
+g37
+I140
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g3712
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp3973
+g3971
+atp3974
+Rp3975
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp3976
+Rp3977
+(dp3978
+g32
+g3969
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp3979
+Rp3980
+(dp3981
+g92
+g3977
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp3982
+Rp3983
+(dp3984
+g99
+Vnextval('build_queue_id_seq'::regclass)
+p3985
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp3986
+sbsbsg37
+I141
+sg38
+g3712
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g3969
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp3987
+tp3988
+Rp3989
+(dp3990
+g59
+(lp3991
+sbsg61
+g42
+((lp3992
+tp3993
+Rp3994
+sg65
+g0
+(g114
+g2
+Ntp3995
+Rp3996
+(dp3997
+g72
+(dp3998
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp3999
+tp4000
+Rp4001
+(dp4002
+g59
+(lp4003
+sbsg61
+g42
+((lp4004
+tp4005
+Rp4006
+sg65
+g0
+(g127
+g2
+Ntp4007
+Rp4008
+(dp4009
+g72
+(dp4010
+sbsg75
+g4
+sbsVstay_of_execution
+p4011
+g0
+(g28
+g2
+Ntp4012
+Rp4013
+(dp4014
+g32
+g4011
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp4015
+Rp4016
+(dp4017
+g92
+g4013
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp4018
+Rp4019
+(dp4020
+g99
+V86400
+p4021
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp4022
+sbsbsg37
+I150
+sg38
+g3712
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4023
+g4013
+atp4024
+Rp4025
+sg46
+Nsg47
+Nsg48
+g4011
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4026
+tp4027
+Rp4028
+(dp4029
+g59
+(lp4030
+sbsg61
+g42
+((lp4031
+tp4032
+Rp4033
+sg65
+g0
+(g114
+g2
+Ntp4034
+Rp4035
+(dp4036
+g72
+(dp4037
+sbsg75
+g4
+sbstp4038
+Rp4039
+(dp4040
+g59
+(lp4041
+g3969
+ag3812
+ag3950
+ag3904
+ag3739
+ag3720
+ag3885
+ag3931
+ag3793
+ag4011
+ag3766
+ag3858
+ag3831
+asbsbsg48
+g3710
+sg192
+g0
+(g193
+g2
+Ntp4042
+Rp4043
+(dp4044
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp4045
+Rp4046
+(dp4047
+g23
+g0
+(g24
+g25
+(dp4048
+g3969
+g3971
+stp4049
+Rp4050
+(dp4051
+g59
+(lp4052
+g3969
+asbsbsg208
+(lp4053
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp4054
+g0
+(g212
+g2
+Ntp4055
+Rp4056
+(dp4057
+g48
+S'build_queue_queue_name_key'
+p4058
+sg217
+(dp4059
+sg38
+g3712
+sg39
+I01
+sg199
+(lp4060
+g3814
+asg75
+g4
+sbatp4061
+Rp4062
+sg222
+g54
+((lp4063
+tp4064
+Rp4065
+(dp4066
+g59
+(lp4067
+sbsg228
+(lp4068
+sg217
+(dp4069
+sg231
+g3710
+sg232
+Nsg233
+Nsg61
+g42
+((lp4070
+g4043
+atp4071
+Rp4072
+sg237
+S'build_queue'
+p4073
+sbsS'archive'
+p4074
+g0
+(g9
+g2
+Ntp4075
+Rp4076
+(dp4077
+g13
+g14
+(g15
+tp4078
+Rp4079
+sg18
+g0
+(g19
+g2
+Ntp4080
+Rp4081
+(dp4082
+g23
+g0
+(g24
+g25
+(dp4083
+Vdescription
+p4084
+g0
+(g28
+g2
+Ntp4085
+Rp4086
+(dp4087
+g32
+g4084
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I11
+sg38
+g4076
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4088
+g4086
+atp4089
+Rp4090
+sg46
+Nsg47
+Nsg48
+g4084
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4091
+tp4092
+Rp4093
+(dp4094
+g59
+(lp4095
+sbsg61
+g42
+((lp4096
+tp4097
+Rp4098
+sg65
+g0
+(g66
+g2
+Ntp4099
+Rp4100
+(dp4101
+g70
+Nsg71
+Nsg72
+(dp4102
+sg74
+I00
+sbsg75
+g4
+sbsVname
+p4103
+g0
+(g28
+g2
+Ntp4104
+Rp4105
+(dp4106
+g32
+g4103
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I9
+sg38
+g4076
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4107
+g4105
+atp4108
+Rp4109
+sg46
+Nsg47
+Nsg48
+g4103
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4110
+tp4111
+Rp4112
+(dp4113
+g59
+(lp4114
+sbsg61
+g42
+((lp4115
+tp4116
+Rp4117
+sg65
+g0
+(g66
+g2
+Ntp4118
+Rp4119
+(dp4120
+g70
+Nsg71
+Nsg72
+(dp4121
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p4122
+g0
+(g28
+g2
+Ntp4123
+Rp4124
+(dp4125
+g32
+g4122
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp4126
+Rp4127
+(dp4128
+g92
+g4124
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp4129
+Rp4130
+(dp4131
+g99
+Vnow()
+p4132
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp4133
+sbsbsg37
+I12
+sg38
+g4076
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4134
+g4124
+atp4135
+Rp4136
+sg46
+Nsg47
+Nsg48
+g4122
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4137
+tp4138
+Rp4139
+(dp4140
+g59
+(lp4141
+sbsg61
+g42
+((lp4142
+tp4143
+Rp4144
+sg65
+g0
+(g155
+g2
+Ntp4145
+Rp4146
+(dp4147
+g159
+I01
+sg72
+(dp4148
+sbsg75
+g4
+sbsVorigin_server
+p4149
+g0
+(g28
+g2
+Ntp4150
+Rp4151
+(dp4152
+g32
+g4149
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I10
+sg38
+g4076
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4153
+g4151
+atp4154
+Rp4155
+sg46
+Nsg47
+Nsg48
+g4149
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4156
+tp4157
+Rp4158
+(dp4159
+g59
+(lp4160
+sbsg61
+g42
+((lp4161
+tp4162
+Rp4163
+sg65
+g0
+(g66
+g2
+Ntp4164
+Rp4165
+(dp4166
+g70
+Nsg71
+Nsg72
+(dp4167
+sg74
+I00
+sbsg75
+g4
+sbsVmodified
+p4168
+g0
+(g28
+g2
+Ntp4169
+Rp4170
+(dp4171
+g32
+g4168
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp4172
+Rp4173
+(dp4174
+g92
+g4170
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp4175
+Rp4176
+(dp4177
+g99
+Vnow()
+p4178
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp4179
+sbsbsg37
+I13
+sg38
+g4076
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4180
+g4170
+atp4181
+Rp4182
+sg46
+Nsg47
+Nsg48
+g4168
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4183
+tp4184
+Rp4185
+(dp4186
+g59
+(lp4187
+sbsg61
+g42
+((lp4188
+tp4189
+Rp4190
+sg65
+g0
+(g155
+g2
+Ntp4191
+Rp4192
+(dp4193
+g159
+I01
+sg72
+(dp4194
+sbsg75
+g4
+sbsVid
+p4195
+g0
+(g28
+g2
+Ntp4196
+Rp4197
+(dp4198
+g37
+I7
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g4076
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp4199
+g4197
+atp4200
+Rp4201
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp4202
+Rp4203
+(dp4204
+g32
+g4195
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp4205
+Rp4206
+(dp4207
+g92
+g4203
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp4208
+Rp4209
+(dp4210
+g99
+Vnextval(('archive_id_seq'::text)::regclass)
+p4211
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp4212
+sbsbsg37
+I8
+sg38
+g4076
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g4195
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp4213
+tp4214
+Rp4215
+(dp4216
+g59
+(lp4217
+sbsg61
+g42
+((lp4218
+tp4219
+Rp4220
+sg65
+g0
+(g114
+g2
+Ntp4221
+Rp4222
+(dp4223
+g72
+(dp4224
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp4225
+tp4226
+Rp4227
+(dp4228
+g59
+(lp4229
+sbsg61
+g42
+((lp4230
+tp4231
+Rp4232
+sg65
+g0
+(g127
+g2
+Ntp4233
+Rp4234
+(dp4235
+g72
+(dp4236
+sbsg75
+g4
+sbstp4237
+Rp4238
+(dp4239
+g59
+(lp4240
+g4195
+ag4103
+ag4149
+ag4084
+ag4122
+ag4168
+asbsbsg48
+g4074
+sg192
+g0
+(g193
+g2
+Ntp4241
+Rp4242
+(dp4243
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp4244
+Rp4245
+(dp4246
+g23
+g0
+(g24
+g25
+(dp4247
+g4195
+g4197
+stp4248
+Rp4249
+(dp4250
+g59
+(lp4251
+g4195
+asbsbsg208
+(lp4252
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp4253
+g0
+(g212
+g2
+Ntp4254
+Rp4255
+(dp4256
+g48
+S'archive_name_key'
+p4257
+sg217
+(dp4258
+sg38
+g4076
+sg39
+I01
+sg199
+(lp4259
+g4105
+asg75
+g4
+sbatp4260
+Rp4261
+sg222
+g54
+((lp4262
+tp4263
+Rp4264
+(dp4265
+g59
+(lp4266
+sbsg228
+(lp4267
+sg217
+(dp4268
+sg231
+g4074
+sg232
+Nsg233
+Nsg61
+g42
+((lp4269
+g4242
+atp4270
+Rp4271
+sg237
+S'archive'
+p4272
+sbsVchanges_pending_source
+p4273
+g0
+(g9
+g2
+Ntp4274
+Rp4275
+(dp4276
+g13
+g14
+(g15
+tp4277
+Rp4278
+sg18
+g0
+(g19
+g2
+Ntp4279
+Rp4280
+(dp4281
+g23
+g0
+(g24
+g25
+(dp4282
+Vcreated
+p4283
+g0
+(g28
+g2
+Ntp4284
+Rp4285
+(dp4286
+g32
+g4283
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp4287
+Rp4288
+(dp4289
+g92
+g4285
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp4290
+Rp4291
+(dp4292
+g99
+Vnow()
+p4293
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp4294
+sbsbsg37
+I219
+sg38
+g4275
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4295
+g4285
+atp4296
+Rp4297
+sg46
+Nsg47
+Nsg48
+g4283
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4298
+tp4299
+Rp4300
+(dp4301
+g59
+(lp4302
+sbsg61
+g42
+((lp4303
+tp4304
+Rp4305
+sg65
+g0
+(g155
+g2
+Ntp4306
+Rp4307
+(dp4308
+g159
+I01
+sg72
+(dp4309
+sbsg75
+g4
+sbsVchange_id
+p4310
+g0
+(g28
+g2
+Ntp4311
+Rp4312
+(dp4313
+g32
+g4310
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I212
+sg38
+g4275
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4314
+g4312
+atp4315
+Rp4316
+sg46
+Nsg47
+Nsg48
+g4310
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4317
+g0
+(g598
+g2
+Ntp4318
+Rp4319
+(dp4320
+g602
+g4312
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_source_change_id_fkey
+p4321
+sg605
+Vchanges.id
+p4322
+sg607
+g0
+(g608
+g2
+Ntp4323
+Rp4324
+(dp4325
+g612
+(lp4326
+g4322
+asg52
+Nsg603
+Nsg614
+g54
+((lp4327
+g4319
+atp4328
+Rp4329
+(dp4330
+g59
+(lp4331
+g4319
+asbsg48
+g4321
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp4332
+Vchange_id
+p4333
+asg38
+g4275
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp4334
+Rp4335
+(dp4336
+g23
+g0
+(g24
+g25
+(dp4337
+g4310
+g4312
+stp4338
+Rp4339
+(dp4340
+g59
+(lp4341
+g4310
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp4342
+Rp4343
+(dp4344
+g59
+(lp4345
+g4319
+asbsg61
+g42
+((lp4346
+tp4347
+Rp4348
+sg65
+g0
+(g114
+g2
+Ntp4349
+Rp4350
+(dp4351
+g72
+(dp4352
+sbsg75
+g4
+sbsVmaintainer_id
+p4353
+g0
+(g28
+g2
+Ntp4354
+Rp4355
+(dp4356
+g32
+g4353
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I215
+sg38
+g4275
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4357
+g4355
+atp4358
+Rp4359
+sg46
+Nsg47
+Nsg48
+g4353
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4360
+g0
+(g598
+g2
+Ntp4361
+Rp4362
+(dp4363
+g602
+g4355
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_source_maintainer_id_fkey
+p4364
+sg605
+Vmaintainer.id
+p4365
+sg607
+g0
+(g608
+g2
+Ntp4366
+Rp4367
+(dp4368
+g612
+(lp4369
+g4365
+asg52
+Nsg603
+Nsg614
+g54
+((lp4370
+g4362
+atp4371
+Rp4372
+(dp4373
+g59
+(lp4374
+g4362
+asbsg48
+g4364
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp4375
+Vmaintainer_id
+p4376
+asg38
+g4275
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp4377
+Rp4378
+(dp4379
+g23
+g0
+(g24
+g25
+(dp4380
+g4353
+g4355
+stp4381
+Rp4382
+(dp4383
+g59
+(lp4384
+g4353
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp4385
+Rp4386
+(dp4387
+g59
+(lp4388
+g4362
+asbsg61
+g42
+((lp4389
+tp4390
+Rp4391
+sg65
+g0
+(g114
+g2
+Ntp4392
+Rp4393
+(dp4394
+g72
+(dp4395
+sbsg75
+g4
+sbsVsig_fpr
+p4396
+g0
+(g28
+g2
+Ntp4397
+Rp4398
+(dp4399
+g32
+g4396
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I217
+sg38
+g4275
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4400
+g4398
+atp4401
+Rp4402
+sg46
+Nsg47
+Nsg48
+g4396
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4403
+g0
+(g598
+g2
+Ntp4404
+Rp4405
+(dp4406
+g602
+g4398
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_source_sig_fpr_fkey
+p4407
+sg605
+Vfingerprint.id
+p4408
+sg607
+g0
+(g608
+g2
+Ntp4409
+Rp4410
+(dp4411
+g612
+(lp4412
+g4408
+asg52
+Nsg603
+Nsg614
+g54
+((lp4413
+g4405
+atp4414
+Rp4415
+(dp4416
+g59
+(lp4417
+g4405
+asbsg48
+g4407
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp4418
+Vsig_fpr
+p4419
+asg38
+g4275
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp4420
+Rp4421
+(dp4422
+g23
+g0
+(g24
+g25
+(dp4423
+g4396
+g4398
+stp4424
+Rp4425
+(dp4426
+g59
+(lp4427
+g4396
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp4428
+Rp4429
+(dp4430
+g59
+(lp4431
+g4405
+asbsg61
+g42
+((lp4432
+tp4433
+Rp4434
+sg65
+g0
+(g114
+g2
+Ntp4435
+Rp4436
+(dp4437
+g72
+(dp4438
+sbsg75
+g4
+sbsVmodified
+p4439
+g0
+(g28
+g2
+Ntp4440
+Rp4441
+(dp4442
+g32
+g4439
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp4443
+Rp4444
+(dp4445
+g92
+g4441
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp4446
+Rp4447
+(dp4448
+g99
+Vnow()
+p4449
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp4450
+sbsbsg37
+I220
+sg38
+g4275
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4451
+g4441
+atp4452
+Rp4453
+sg46
+Nsg47
+Nsg48
+g4439
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4454
+tp4455
+Rp4456
+(dp4457
+g59
+(lp4458
+sbsg61
+g42
+((lp4459
+tp4460
+Rp4461
+sg65
+g0
+(g155
+g2
+Ntp4462
+Rp4463
+(dp4464
+g159
+I01
+sg72
+(dp4465
+sbsg75
+g4
+sbsVsource
+p4466
+g0
+(g28
+g2
+Ntp4467
+Rp4468
+(dp4469
+g32
+g4466
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I213
+sg38
+g4275
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4470
+g4468
+atp4471
+Rp4472
+sg46
+Nsg47
+Nsg48
+g4466
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4473
+tp4474
+Rp4475
+(dp4476
+g59
+(lp4477
+sbsg61
+g42
+((lp4478
+tp4479
+Rp4480
+sg65
+g0
+(g66
+g2
+Ntp4481
+Rp4482
+(dp4483
+g70
+Nsg71
+Nsg72
+(dp4484
+sg74
+I00
+sbsg75
+g4
+sbsVversion
+p4485
+g0
+(g28
+g2
+Ntp4486
+Rp4487
+(dp4488
+g32
+g4485
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I214
+sg38
+g4275
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4489
+g4487
+atp4490
+Rp4491
+sg46
+Nsg47
+Nsg48
+g4485
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4492
+tp4493
+Rp4494
+(dp4495
+g59
+(lp4496
+sbsg61
+g42
+((lp4497
+tp4498
+Rp4499
+sg65
+g0
+(g2530
+g2
+Ntp4500
+Rp4501
+(dp4502
+g70
+Nsg71
+Nsg72
+(dp4503
+sg74
+I00
+sbsg75
+g4
+sbsVchangedby_id
+p4504
+g0
+(g28
+g2
+Ntp4505
+Rp4506
+(dp4507
+g32
+g4504
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I216
+sg38
+g4275
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4508
+g4506
+atp4509
+Rp4510
+sg46
+Nsg47
+Nsg48
+g4504
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4511
+g0
+(g598
+g2
+Ntp4512
+Rp4513
+(dp4514
+g602
+g4506
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_source_changedby_id_fkey
+p4515
+sg605
+Vmaintainer.id
+p4516
+sg607
+g0
+(g608
+g2
+Ntp4517
+Rp4518
+(dp4519
+g612
+(lp4520
+g4516
+asg52
+Nsg603
+Nsg614
+g54
+((lp4521
+g4513
+atp4522
+Rp4523
+(dp4524
+g59
+(lp4525
+g4513
+asbsg48
+g4515
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp4526
+Vchangedby_id
+p4527
+asg38
+g4275
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp4528
+Rp4529
+(dp4530
+g23
+g0
+(g24
+g25
+(dp4531
+g4504
+g4506
+stp4532
+Rp4533
+(dp4534
+g59
+(lp4535
+g4504
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp4536
+Rp4537
+(dp4538
+g59
+(lp4539
+g4513
+asbsg61
+g42
+((lp4540
+tp4541
+Rp4542
+sg65
+g0
+(g114
+g2
+Ntp4543
+Rp4544
+(dp4545
+g72
+(dp4546
+sbsg75
+g4
+sbsVdm_upload_allowed
+p4547
+g0
+(g28
+g2
+Ntp4548
+Rp4549
+(dp4550
+g32
+g4547
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp4551
+Rp4552
+(dp4553
+g92
+g4549
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp4554
+Rp4555
+(dp4556
+g99
+Vfalse
+p4557
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp4558
+sbsbsg37
+I218
+sg38
+g4275
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4559
+g4549
+atp4560
+Rp4561
+sg46
+Nsg47
+Nsg48
+g4547
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4562
+tp4563
+Rp4564
+(dp4565
+g59
+(lp4566
+sbsg61
+g42
+((lp4567
+tp4568
+Rp4569
+sg65
+g0
+(g877
+g2
+Ntp4570
+Rp4571
+(dp4572
+g72
+(dp4573
+sbsg75
+g4
+sbsVid
+p4574
+g0
+(g28
+g2
+Ntp4575
+Rp4576
+(dp4577
+g37
+I222
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g4275
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp4578
+g4576
+atp4579
+Rp4580
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp4581
+Rp4582
+(dp4583
+g32
+g4574
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp4584
+Rp4585
+(dp4586
+g92
+g4582
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp4587
+Rp4588
+(dp4589
+g99
+Vnextval('changes_pending_source_id_seq'::regclass)
+p4590
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp4591
+sbsbsg37
+I211
+sg38
+g4275
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g4574
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp4592
+tp4593
+Rp4594
+(dp4595
+g59
+(lp4596
+sbsg61
+g42
+((lp4597
+tp4598
+Rp4599
+sg65
+g0
+(g114
+g2
+Ntp4600
+Rp4601
+(dp4602
+g72
+(dp4603
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp4604
+tp4605
+Rp4606
+(dp4607
+g59
+(lp4608
+sbsg61
+g42
+((lp4609
+tp4610
+Rp4611
+sg65
+g0
+(g127
+g2
+Ntp4612
+Rp4613
+(dp4614
+g72
+(dp4615
+sbsg75
+g4
+sbstp4616
+Rp4617
+(dp4618
+g59
+(lp4619
+g4574
+ag4310
+ag4466
+ag4485
+ag4353
+ag4504
+ag4396
+ag4547
+ag4283
+ag4439
+asbsbsg48
+g4273
+sg192
+g0
+(g193
+g2
+Ntp4620
+Rp4621
+(dp4622
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp4623
+Rp4624
+(dp4625
+g23
+g0
+(g24
+g25
+(dp4626
+g4574
+g4576
+stp4627
+Rp4628
+(dp4629
+g59
+(lp4630
+g4574
+asbsbsg208
+(lp4631
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp4632
+tp4633
+Rp4634
+sg222
+g54
+((lp4635
+g4319
+ag4513
+ag4362
+ag4405
+atp4636
+Rp4637
+(dp4638
+g59
+(lp4639
+g4319
+ag4513
+ag4362
+ag4405
+asbsg228
+(lp4640
+sg217
+(dp4641
+sg231
+g4273
+sg232
+Nsg233
+Nsg61
+g42
+((lp4642
+g4621
+ag4324
+ag4367
+ag4410
+ag4518
+atp4643
+Rp4644
+sg237
+S'changes_pending_source'
+p4645
+sbsS'dsc_files'
+p4646
+g0
+(g9
+g2
+Ntp4647
+Rp4648
+(dp4649
+g13
+g14
+(g15
+tp4650
+Rp4651
+sg18
+g0
+(g19
+g2
+Ntp4652
+Rp4653
+(dp4654
+g23
+g0
+(g24
+g25
+(dp4655
+Vsource
+p4656
+g0
+(g28
+g2
+Ntp4657
+Rp4658
+(dp4659
+g32
+g4656
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I225
+sg38
+g4648
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4660
+g4658
+atp4661
+Rp4662
+sg46
+Nsg47
+Nsg48
+g4656
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4663
+g0
+(g598
+g2
+Ntp4664
+Rp4665
+(dp4666
+g602
+g4658
+sg197
+Nsg603
+Nsg48
+Vdsc_files_source
+p4667
+sg605
+Vsource.id
+p4668
+sg607
+g0
+(g608
+g2
+Ntp4669
+Rp4670
+(dp4671
+g612
+(lp4672
+g4668
+asg52
+Nsg603
+Nsg614
+g54
+((lp4673
+g4665
+atp4674
+Rp4675
+(dp4676
+g59
+(lp4677
+g4665
+asbsg48
+g4667
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp4678
+Vsource
+p4679
+asg38
+g4648
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp4680
+Rp4681
+(dp4682
+g23
+g0
+(g24
+g25
+(dp4683
+g4656
+g4658
+stp4684
+Rp4685
+(dp4686
+g59
+(lp4687
+g4656
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp4688
+Rp4689
+(dp4690
+g59
+(lp4691
+g4665
+asbsg61
+g42
+((lp4692
+tp4693
+Rp4694
+sg65
+g0
+(g114
+g2
+Ntp4695
+Rp4696
+(dp4697
+g72
+(dp4698
+sbsg75
+g4
+sbsVcreated
+p4699
+g0
+(g28
+g2
+Ntp4700
+Rp4701
+(dp4702
+g32
+g4699
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp4703
+Rp4704
+(dp4705
+g92
+g4701
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp4706
+Rp4707
+(dp4708
+g99
+Vnow()
+p4709
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp4710
+sbsbsg37
+I227
+sg38
+g4648
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4711
+g4701
+atp4712
+Rp4713
+sg46
+Nsg47
+Nsg48
+g4699
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4714
+tp4715
+Rp4716
+(dp4717
+g59
+(lp4718
+sbsg61
+g42
+((lp4719
+tp4720
+Rp4721
+sg65
+g0
+(g155
+g2
+Ntp4722
+Rp4723
+(dp4724
+g159
+I01
+sg72
+(dp4725
+sbsg75
+g4
+sbsVmodified
+p4726
+g0
+(g28
+g2
+Ntp4727
+Rp4728
+(dp4729
+g32
+g4726
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp4730
+Rp4731
+(dp4732
+g92
+g4728
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp4733
+Rp4734
+(dp4735
+g99
+Vnow()
+p4736
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp4737
+sbsbsg37
+I228
+sg38
+g4648
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4738
+g4728
+atp4739
+Rp4740
+sg46
+Nsg47
+Nsg48
+g4726
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4741
+tp4742
+Rp4743
+(dp4744
+g59
+(lp4745
+sbsg61
+g42
+((lp4746
+tp4747
+Rp4748
+sg65
+g0
+(g155
+g2
+Ntp4749
+Rp4750
+(dp4751
+g159
+I01
+sg72
+(dp4752
+sbsg75
+g4
+sbsVfile
+p4753
+g0
+(g28
+g2
+Ntp4754
+Rp4755
+(dp4756
+g32
+g4753
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I226
+sg38
+g4648
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp4757
+g4755
+atp4758
+Rp4759
+sg46
+Nsg47
+Nsg48
+g4753
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4760
+g0
+(g598
+g2
+Ntp4761
+Rp4762
+(dp4763
+g602
+g4755
+sg197
+Nsg603
+Nsg48
+Vdsc_files_file
+p4764
+sg605
+Vfiles.id
+p4765
+sg607
+g0
+(g608
+g2
+Ntp4766
+Rp4767
+(dp4768
+g612
+(lp4769
+g4765
+asg52
+Nsg603
+Nsg614
+g54
+((lp4770
+g4762
+atp4771
+Rp4772
+(dp4773
+g59
+(lp4774
+g4762
+asbsg48
+g4764
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp4775
+Vfile
+p4776
+asg38
+g4648
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp4777
+Rp4778
+(dp4779
+g23
+g0
+(g24
+g25
+(dp4780
+g4753
+g4755
+stp4781
+Rp4782
+(dp4783
+g59
+(lp4784
+g4753
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp4785
+Rp4786
+(dp4787
+g59
+(lp4788
+g4762
+asbsg61
+g42
+((lp4789
+tp4790
+Rp4791
+sg65
+g0
+(g114
+g2
+Ntp4792
+Rp4793
+(dp4794
+g72
+(dp4795
+sbsg75
+g4
+sbsVid
+p4796
+g0
+(g28
+g2
+Ntp4797
+Rp4798
+(dp4799
+g37
+I223
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g4648
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp4800
+g4798
+atp4801
+Rp4802
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp4803
+Rp4804
+(dp4805
+g32
+g4796
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp4806
+Rp4807
+(dp4808
+g92
+g4804
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp4809
+Rp4810
+(dp4811
+g99
+Vnextval(('dsc_files_id_seq'::text)::regclass)
+p4812
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp4813
+sbsbsg37
+I224
+sg38
+g4648
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g4796
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp4814
+tp4815
+Rp4816
+(dp4817
+g59
+(lp4818
+sbsg61
+g42
+((lp4819
+tp4820
+Rp4821
+sg65
+g0
+(g114
+g2
+Ntp4822
+Rp4823
+(dp4824
+g72
+(dp4825
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp4826
+tp4827
+Rp4828
+(dp4829
+g59
+(lp4830
+sbsg61
+g42
+((lp4831
+tp4832
+Rp4833
+sg65
+g0
+(g127
+g2
+Ntp4834
+Rp4835
+(dp4836
+g72
+(dp4837
+sbsg75
+g4
+sbstp4838
+Rp4839
+(dp4840
+g59
+(lp4841
+g4796
+ag4656
+ag4753
+ag4699
+ag4726
+asbsbsg48
+g4646
+sg192
+g0
+(g193
+g2
+Ntp4842
+Rp4843
+(dp4844
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp4845
+Rp4846
+(dp4847
+g23
+g0
+(g24
+g25
+(dp4848
+g4796
+g4798
+stp4849
+Rp4850
+(dp4851
+g59
+(lp4852
+g4796
+asbsbsg208
+(lp4853
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp4854
+g0
+(g212
+g2
+Ntp4855
+Rp4856
+(dp4857
+g48
+S'dsc_files_file'
+p4858
+sg217
+(dp4859
+sg38
+g4648
+sg39
+I00
+sg199
+(lp4860
+g4755
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp4861
+Rp4862
+(dp4863
+g48
+S'dsc_files_source_key'
+p4864
+sg217
+(dp4865
+sg38
+g4648
+sg39
+I01
+sg199
+(lp4866
+g4658
+ag4755
+asg75
+g4
+sbatp4867
+Rp4868
+sg222
+g54
+((lp4869
+g4762
+ag4665
+atp4870
+Rp4871
+(dp4872
+g59
+(lp4873
+g4762
+ag4665
+asbsg228
+(lp4874
+sg217
+(dp4875
+sg231
+g4646
+sg232
+Nsg233
+Nsg61
+g42
+((lp4876
+g4843
+ag4767
+ag4670
+atp4877
+Rp4878
+sg237
+S'dsc_files'
+p4879
+sbsS'any_associations_source'
+p4880
+g0
+(g9
+g2
+Ntp4881
+Rp4882
+(dp4883
+g13
+g14
+(g15
+tp4884
+Rp4885
+sg18
+g0
+(g19
+g2
+Ntp4886
+Rp4887
+(dp4888
+g23
+g0
+(g24
+g25
+(dp4889
+Vbin
+p4890
+g0
+(g28
+g2
+Ntp4891
+Rp4892
+(dp4893
+g32
+g4890
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I366
+sg38
+g4882
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g4890
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4894
+tp4895
+Rp4896
+(dp4897
+g59
+(lp4898
+sbsg61
+g42
+((lp4899
+tp4900
+Rp4901
+sg65
+g0
+(g114
+g2
+Ntp4902
+Rp4903
+(dp4904
+g72
+(dp4905
+sbsg75
+g4
+sbsVsrc
+p4906
+g0
+(g28
+g2
+Ntp4907
+Rp4908
+(dp4909
+g32
+g4906
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I370
+sg38
+g4882
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g4906
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4910
+tp4911
+Rp4912
+(dp4913
+g59
+(lp4914
+sbsg61
+g42
+((lp4915
+tp4916
+Rp4917
+sg65
+g0
+(g114
+g2
+Ntp4918
+Rp4919
+(dp4920
+g72
+(dp4921
+sbsg75
+g4
+sbsVpackage
+p4922
+g0
+(g28
+g2
+Ntp4923
+Rp4924
+(dp4925
+g32
+g4922
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I367
+sg38
+g4882
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g4922
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4926
+tp4927
+Rp4928
+(dp4929
+g59
+(lp4930
+sbsg61
+g42
+((lp4931
+tp4932
+Rp4933
+sg65
+g0
+(g66
+g2
+Ntp4934
+Rp4935
+(dp4936
+g70
+Nsg71
+Nsg72
+(dp4937
+sg74
+I00
+sbsg75
+g4
+sbsVsrcver
+p4938
+g0
+(g28
+g2
+Ntp4939
+Rp4940
+(dp4941
+g32
+g4938
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I372
+sg38
+g4882
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g4938
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4942
+tp4943
+Rp4944
+(dp4945
+g59
+(lp4946
+sbsg61
+g42
+((lp4947
+tp4948
+Rp4949
+sg65
+g0
+(g2530
+g2
+Ntp4950
+Rp4951
+(dp4952
+g70
+Nsg71
+Nsg72
+(dp4953
+sg74
+I00
+sbsg75
+g4
+sbsVsource
+p4954
+g0
+(g28
+g2
+Ntp4955
+Rp4956
+(dp4957
+g32
+g4954
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I371
+sg38
+g4882
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g4954
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4958
+tp4959
+Rp4960
+(dp4961
+g59
+(lp4962
+sbsg61
+g42
+((lp4963
+tp4964
+Rp4965
+sg65
+g0
+(g66
+g2
+Ntp4966
+Rp4967
+(dp4968
+g70
+Nsg71
+Nsg72
+(dp4969
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture
+p4970
+g0
+(g28
+g2
+Ntp4971
+Rp4972
+(dp4973
+g32
+g4970
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I369
+sg38
+g4882
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g4970
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4974
+tp4975
+Rp4976
+(dp4977
+g59
+(lp4978
+sbsg61
+g42
+((lp4979
+tp4980
+Rp4981
+sg65
+g0
+(g114
+g2
+Ntp4982
+Rp4983
+(dp4984
+g72
+(dp4985
+sbsg75
+g4
+sbsVsuite
+p4986
+g0
+(g28
+g2
+Ntp4987
+Rp4988
+(dp4989
+g32
+g4986
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I365
+sg38
+g4882
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g4986
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp4990
+tp4991
+Rp4992
+(dp4993
+g59
+(lp4994
+sbsg61
+g42
+((lp4995
+tp4996
+Rp4997
+sg65
+g0
+(g114
+g2
+Ntp4998
+Rp4999
+(dp5000
+g72
+(dp5001
+sbsg75
+g4
+sbsVbinver
+p5002
+g0
+(g28
+g2
+Ntp5003
+Rp5004
+(dp5005
+g32
+g5002
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I368
+sg38
+g4882
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5002
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5006
+tp5007
+Rp5008
+(dp5009
+g59
+(lp5010
+sbsg61
+g42
+((lp5011
+tp5012
+Rp5013
+sg65
+g0
+(g2530
+g2
+Ntp5014
+Rp5015
+(dp5016
+g70
+Nsg71
+Nsg72
+(dp5017
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p5018
+g0
+(g28
+g2
+Ntp5019
+Rp5020
+(dp5021
+g32
+g5018
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I364
+sg38
+g4882
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5018
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5022
+tp5023
+Rp5024
+(dp5025
+g59
+(lp5026
+sbsg61
+g42
+((lp5027
+tp5028
+Rp5029
+sg65
+g0
+(g114
+g2
+Ntp5030
+Rp5031
+(dp5032
+g72
+(dp5033
+sbsg75
+g4
+sbstp5034
+Rp5035
+(dp5036
+g59
+(lp5037
+g5018
+ag4986
+ag4890
+ag4922
+ag5002
+ag4970
+ag4906
+ag4954
+ag4938
+asbsbsg48
+g4880
+sg192
+g0
+(g193
+g2
+Ntp5038
+Rp5039
+(dp5040
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp5041
+Rp5042
+(dp5043
+g23
+g0
+(g24
+g25
+(dp5044
+tp5045
+Rp5046
+(dp5047
+g59
+(lp5048
+sbsbsg208
+(lp5049
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp5050
+tp5051
+Rp5052
+sg222
+g54
+((lp5053
+tp5054
+Rp5055
+(dp5056
+g59
+(lp5057
+sbsg228
+(lp5058
+sg217
+(dp5059
+sg231
+g4880
+sg61
+g42
+((lp5060
+g5039
+atp5061
+Rp5062
+sg233
+Nsg232
+NsbsS'pending_bin_contents'
+p5063
+g0
+(g9
+g2
+Ntp5064
+Rp5065
+(dp5066
+g13
+g14
+(g15
+tp5067
+Rp5068
+sg18
+g0
+(g19
+g2
+Ntp5069
+Rp5070
+(dp5071
+g23
+g0
+(g24
+g25
+(dp5072
+Vversion
+p5073
+g0
+(g28
+g2
+Ntp5074
+Rp5075
+(dp5076
+g32
+g5073
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I259
+sg38
+g5065
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5077
+g5075
+atp5078
+Rp5079
+sg46
+Nsg47
+Nsg48
+g5073
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5080
+tp5081
+Rp5082
+(dp5083
+g59
+(lp5084
+sbsg61
+g42
+((lp5085
+tp5086
+Rp5087
+sg65
+g0
+(g2530
+g2
+Ntp5088
+Rp5089
+(dp5090
+g70
+Nsg71
+Nsg72
+(dp5091
+sg74
+I00
+sbsg75
+g4
+sbsVpackage
+p5092
+g0
+(g28
+g2
+Ntp5093
+Rp5094
+(dp5095
+g32
+g5092
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I258
+sg38
+g5065
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5096
+g5094
+atp5097
+Rp5098
+sg46
+Nsg47
+Nsg48
+g5092
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5099
+tp5100
+Rp5101
+(dp5102
+g59
+(lp5103
+sbsg61
+g42
+((lp5104
+tp5105
+Rp5106
+sg65
+g0
+(g66
+g2
+Ntp5107
+Rp5108
+(dp5109
+g70
+Nsg71
+Nsg72
+(dp5110
+sg74
+I00
+sbsg75
+g4
+sbsVtype
+p5111
+g0
+(g28
+g2
+Ntp5112
+Rp5113
+(dp5114
+g32
+g5111
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I262
+sg38
+g5065
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5115
+g5113
+atp5116
+Rp5117
+sg46
+Nsg47
+Nsg48
+g5111
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5118
+tp5119
+Rp5120
+(dp5121
+g59
+(lp5122
+sbsg61
+g42
+((lp5123
+tp5124
+Rp5125
+sg65
+g0
+(g114
+g2
+Ntp5126
+Rp5127
+(dp5128
+g72
+(dp5129
+sbsg75
+g4
+sbsVarch
+p5130
+g0
+(g28
+g2
+Ntp5131
+Rp5132
+(dp5133
+g32
+g5130
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I260
+sg38
+g5065
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5134
+g5132
+atp5135
+Rp5136
+sg46
+Nsg47
+Nsg48
+g5130
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5137
+tp5138
+Rp5139
+(dp5140
+g59
+(lp5141
+sbsg61
+g42
+((lp5142
+tp5143
+Rp5144
+sg65
+g0
+(g114
+g2
+Ntp5145
+Rp5146
+(dp5147
+g72
+(dp5148
+sbsg75
+g4
+sbsVid
+p5149
+g0
+(g28
+g2
+Ntp5150
+Rp5151
+(dp5152
+g37
+I256
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g5065
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp5153
+g5151
+atp5154
+Rp5155
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp5156
+Rp5157
+(dp5158
+g32
+g5149
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp5159
+Rp5160
+(dp5161
+g92
+g5157
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp5162
+Rp5163
+(dp5164
+g99
+Vnextval('pending_bin_contents_id_seq'::regclass)
+p5165
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp5166
+sbsbsg37
+I257
+sg38
+g5065
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g5149
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp5167
+tp5168
+Rp5169
+(dp5170
+g59
+(lp5171
+sbsg61
+g42
+((lp5172
+tp5173
+Rp5174
+sg65
+g0
+(g114
+g2
+Ntp5175
+Rp5176
+(dp5177
+g72
+(dp5178
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp5179
+tp5180
+Rp5181
+(dp5182
+g59
+(lp5183
+sbsg61
+g42
+((lp5184
+tp5185
+Rp5186
+sg65
+g0
+(g127
+g2
+Ntp5187
+Rp5188
+(dp5189
+g72
+(dp5190
+sbsg75
+g4
+sbsVfilename
+p5191
+g0
+(g28
+g2
+Ntp5192
+Rp5193
+(dp5194
+g32
+g5191
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I261
+sg38
+g5065
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5195
+g5193
+atp5196
+Rp5197
+sg46
+Nsg47
+Nsg48
+g5191
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5198
+tp5199
+Rp5200
+(dp5201
+g59
+(lp5202
+sbsg61
+g42
+((lp5203
+tp5204
+Rp5205
+sg65
+g0
+(g66
+g2
+Ntp5206
+Rp5207
+(dp5208
+g70
+Nsg71
+Nsg72
+(dp5209
+sg74
+I00
+sbsg75
+g4
+sbstp5210
+Rp5211
+(dp5212
+g59
+(lp5213
+g5149
+ag5092
+ag5073
+ag5130
+ag5191
+ag5111
+asbsbsg48
+g5063
+sg192
+g0
+(g193
+g2
+Ntp5214
+Rp5215
+(dp5216
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp5217
+Rp5218
+(dp5219
+g23
+g0
+(g24
+g25
+(dp5220
+g5149
+g5151
+stp5221
+Rp5222
+(dp5223
+g59
+(lp5224
+g5149
+asbsbsg208
+(lp5225
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp5226
+tp5227
+Rp5228
+sg222
+g54
+((lp5229
+tp5230
+Rp5231
+(dp5232
+g59
+(lp5233
+sbsg228
+(lp5234
+sg217
+(dp5235
+sg231
+g5063
+sg232
+Nsg233
+Nsg61
+g42
+((lp5236
+g5215
+atp5237
+Rp5238
+sg237
+S'pending_bin_contents'
+p5239
+sbsS'obsolete_any_by_all_associations'
+p5240
+g0
+(g9
+g2
+Ntp5241
+Rp5242
+(dp5243
+g13
+g14
+(g15
+tp5244
+Rp5245
+sg18
+g0
+(g19
+g2
+Ntp5246
+Rp5247
+(dp5248
+g23
+g0
+(g24
+g25
+(dp5249
+Vsuite
+p5250
+g0
+(g28
+g2
+Ntp5251
+Rp5252
+(dp5253
+g32
+g5250
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I437
+sg38
+g5242
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5250
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5254
+tp5255
+Rp5256
+(dp5257
+g59
+(lp5258
+sbsg61
+g42
+((lp5259
+tp5260
+Rp5261
+sg65
+g0
+(g114
+g2
+Ntp5262
+Rp5263
+(dp5264
+g72
+(dp5265
+sbsg75
+g4
+sbsVpackage
+p5266
+g0
+(g28
+g2
+Ntp5267
+Rp5268
+(dp5269
+g32
+g5266
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I435
+sg38
+g5242
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5266
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5270
+tp5271
+Rp5272
+(dp5273
+g59
+(lp5274
+sbsg61
+g42
+((lp5275
+tp5276
+Rp5277
+sg65
+g0
+(g66
+g2
+Ntp5278
+Rp5279
+(dp5280
+g70
+Nsg71
+Nsg72
+(dp5281
+sg74
+I00
+sbsg75
+g4
+sbsVversion
+p5282
+g0
+(g28
+g2
+Ntp5283
+Rp5284
+(dp5285
+g32
+g5282
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I436
+sg38
+g5242
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5282
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5286
+tp5287
+Rp5288
+(dp5289
+g59
+(lp5290
+sbsg61
+g42
+((lp5291
+tp5292
+Rp5293
+sg65
+g0
+(g2530
+g2
+Ntp5294
+Rp5295
+(dp5296
+g70
+Nsg71
+Nsg72
+(dp5297
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture
+p5298
+g0
+(g28
+g2
+Ntp5299
+Rp5300
+(dp5301
+g32
+g5298
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I438
+sg38
+g5242
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5298
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5302
+tp5303
+Rp5304
+(dp5305
+g59
+(lp5306
+sbsg61
+g42
+((lp5307
+tp5308
+Rp5309
+sg65
+g0
+(g114
+g2
+Ntp5310
+Rp5311
+(dp5312
+g72
+(dp5313
+sbsg75
+g4
+sbsVid
+p5314
+g0
+(g28
+g2
+Ntp5315
+Rp5316
+(dp5317
+g32
+g5314
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I434
+sg38
+g5242
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5314
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5318
+tp5319
+Rp5320
+(dp5321
+g59
+(lp5322
+sbsg61
+g42
+((lp5323
+tp5324
+Rp5325
+sg65
+g0
+(g114
+g2
+Ntp5326
+Rp5327
+(dp5328
+g72
+(dp5329
+sbsg75
+g4
+sbstp5330
+Rp5331
+(dp5332
+g59
+(lp5333
+g5314
+ag5266
+ag5282
+ag5250
+ag5298
+asbsbsg48
+g5240
+sg192
+g0
+(g193
+g2
+Ntp5334
+Rp5335
+(dp5336
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp5337
+Rp5338
+(dp5339
+g23
+g0
+(g24
+g25
+(dp5340
+tp5341
+Rp5342
+(dp5343
+g59
+(lp5344
+sbsbsg208
+(lp5345
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp5346
+tp5347
+Rp5348
+sg222
+g54
+((lp5349
+tp5350
+Rp5351
+(dp5352
+g59
+(lp5353
+sbsg228
+(lp5354
+sg217
+(dp5355
+sg231
+g5240
+sg61
+g42
+((lp5356
+g5335
+atp5357
+Rp5358
+sg233
+Nsg232
+NsbsS'section'
+p5359
+g0
+(g9
+g2
+Ntp5360
+Rp5361
+(dp5362
+g13
+g14
+(g15
+tp5363
+Rp5364
+sg18
+g0
+(g19
+g2
+Ntp5365
+Rp5366
+(dp5367
+g23
+g0
+(g24
+g25
+(dp5368
+Vsection
+p5369
+g0
+(g28
+g2
+Ntp5370
+Rp5371
+(dp5372
+g32
+g5369
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I272
+sg38
+g5361
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5373
+g5371
+atp5374
+Rp5375
+sg46
+Nsg47
+Nsg48
+g5369
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5376
+tp5377
+Rp5378
+(dp5379
+g59
+(lp5380
+sbsg61
+g42
+((lp5381
+tp5382
+Rp5383
+sg65
+g0
+(g66
+g2
+Ntp5384
+Rp5385
+(dp5386
+g70
+Nsg71
+Nsg72
+(dp5387
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p5388
+g0
+(g28
+g2
+Ntp5389
+Rp5390
+(dp5391
+g32
+g5388
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp5392
+Rp5393
+(dp5394
+g92
+g5390
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp5395
+Rp5396
+(dp5397
+g99
+Vnow()
+p5398
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp5399
+sbsbsg37
+I273
+sg38
+g5361
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5400
+g5390
+atp5401
+Rp5402
+sg46
+Nsg47
+Nsg48
+g5388
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5403
+tp5404
+Rp5405
+(dp5406
+g59
+(lp5407
+sbsg61
+g42
+((lp5408
+tp5409
+Rp5410
+sg65
+g0
+(g155
+g2
+Ntp5411
+Rp5412
+(dp5413
+g159
+I01
+sg72
+(dp5414
+sbsg75
+g4
+sbsVid
+p5415
+g0
+(g28
+g2
+Ntp5416
+Rp5417
+(dp5418
+g37
+I270
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g5361
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp5419
+g5417
+atp5420
+Rp5421
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp5422
+Rp5423
+(dp5424
+g32
+g5415
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp5425
+Rp5426
+(dp5427
+g92
+g5423
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp5428
+Rp5429
+(dp5430
+g99
+Vnextval(('section_id_seq'::text)::regclass)
+p5431
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp5432
+sbsbsg37
+I271
+sg38
+g5361
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g5415
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp5433
+tp5434
+Rp5435
+(dp5436
+g59
+(lp5437
+sbsg61
+g42
+((lp5438
+tp5439
+Rp5440
+sg65
+g0
+(g114
+g2
+Ntp5441
+Rp5442
+(dp5443
+g72
+(dp5444
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp5445
+tp5446
+Rp5447
+(dp5448
+g59
+(lp5449
+sbsg61
+g42
+((lp5450
+tp5451
+Rp5452
+sg65
+g0
+(g127
+g2
+Ntp5453
+Rp5454
+(dp5455
+g72
+(dp5456
+sbsg75
+g4
+sbsVmodified
+p5457
+g0
+(g28
+g2
+Ntp5458
+Rp5459
+(dp5460
+g32
+g5457
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp5461
+Rp5462
+(dp5463
+g92
+g5459
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp5464
+Rp5465
+(dp5466
+g99
+Vnow()
+p5467
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp5468
+sbsbsg37
+I274
+sg38
+g5361
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5469
+g5459
+atp5470
+Rp5471
+sg46
+Nsg47
+Nsg48
+g5457
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5472
+tp5473
+Rp5474
+(dp5475
+g59
+(lp5476
+sbsg61
+g42
+((lp5477
+tp5478
+Rp5479
+sg65
+g0
+(g155
+g2
+Ntp5480
+Rp5481
+(dp5482
+g159
+I01
+sg72
+(dp5483
+sbsg75
+g4
+sbstp5484
+Rp5485
+(dp5486
+g59
+(lp5487
+g5415
+ag5369
+ag5388
+ag5457
+asbsbsg48
+g5359
+sg192
+g0
+(g193
+g2
+Ntp5488
+Rp5489
+(dp5490
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp5491
+Rp5492
+(dp5493
+g23
+g0
+(g24
+g25
+(dp5494
+g5415
+g5417
+stp5495
+Rp5496
+(dp5497
+g59
+(lp5498
+g5415
+asbsbsg208
+(lp5499
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp5500
+g0
+(g212
+g2
+Ntp5501
+Rp5502
+(dp5503
+g48
+S'section_section_key'
+p5504
+sg217
+(dp5505
+sg38
+g5361
+sg39
+I01
+sg199
+(lp5506
+g5371
+asg75
+g4
+sbatp5507
+Rp5508
+sg222
+g54
+((lp5509
+tp5510
+Rp5511
+(dp5512
+g59
+(lp5513
+sbsg228
+(lp5514
+sg217
+(dp5515
+sg231
+g5359
+sg232
+Nsg233
+Nsg61
+g42
+((lp5516
+g5489
+atp5517
+Rp5518
+sg237
+S'section'
+p5519
+sbsS'new_comments'
+p5520
+g0
+(g9
+g2
+Ntp5521
+Rp5522
+(dp5523
+g13
+g14
+(g15
+tp5524
+Rp5525
+sg18
+g0
+(g19
+g2
+Ntp5526
+Rp5527
+(dp5528
+g23
+g0
+(g24
+g25
+(dp5529
+Vcomment
+p5530
+g0
+(g28
+g2
+Ntp5531
+Rp5532
+(dp5533
+g32
+g5530
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I245
+sg38
+g5522
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5534
+g5532
+atp5535
+Rp5536
+sg46
+Nsg47
+Nsg48
+g5530
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5537
+tp5538
+Rp5539
+(dp5540
+g59
+(lp5541
+sbsg61
+g42
+((lp5542
+tp5543
+Rp5544
+sg65
+g0
+(g66
+g2
+Ntp5545
+Rp5546
+(dp5547
+g70
+Nsg71
+Nsg72
+(dp5548
+sg74
+I00
+sbsg75
+g4
+sbsVnotedate
+p5549
+g0
+(g28
+g2
+Ntp5550
+Rp5551
+(dp5552
+g32
+g5549
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp5553
+Rp5554
+(dp5555
+g92
+g5551
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp5556
+Rp5557
+(dp5558
+g99
+Vnow()
+p5559
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp5560
+sbsbsg37
+I247
+sg38
+g5522
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5561
+g5551
+atp5562
+Rp5563
+sg46
+Nsg47
+Nsg48
+g5549
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5564
+tp5565
+Rp5566
+(dp5567
+g59
+(lp5568
+sbsg61
+g42
+((lp5569
+tp5570
+Rp5571
+sg65
+g0
+(g155
+g2
+Ntp5572
+Rp5573
+(dp5574
+g159
+I01
+sg72
+(dp5575
+sbsg75
+g4
+sbsVauthor
+p5576
+g0
+(g28
+g2
+Ntp5577
+Rp5578
+(dp5579
+g32
+g5576
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I246
+sg38
+g5522
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5580
+g5578
+atp5581
+Rp5582
+sg46
+Nsg47
+Nsg48
+g5576
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5583
+tp5584
+Rp5585
+(dp5586
+g59
+(lp5587
+sbsg61
+g42
+((lp5588
+tp5589
+Rp5590
+sg65
+g0
+(g66
+g2
+Ntp5591
+Rp5592
+(dp5593
+g70
+Nsg71
+Nsg72
+(dp5594
+sg74
+I00
+sbsg75
+g4
+sbsVpackage
+p5595
+g0
+(g28
+g2
+Ntp5596
+Rp5597
+(dp5598
+g32
+g5595
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I243
+sg38
+g5522
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5599
+g5597
+atp5600
+Rp5601
+sg46
+Nsg47
+Nsg48
+g5595
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5602
+tp5603
+Rp5604
+(dp5605
+g59
+(lp5606
+sbsg61
+g42
+((lp5607
+tp5608
+Rp5609
+sg65
+g0
+(g66
+g2
+Ntp5610
+Rp5611
+(dp5612
+g70
+Nsg71
+Nsg72
+(dp5613
+sg74
+I00
+sbsg75
+g4
+sbsVmodified
+p5614
+g0
+(g28
+g2
+Ntp5615
+Rp5616
+(dp5617
+g32
+g5614
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp5618
+Rp5619
+(dp5620
+g92
+g5616
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp5621
+Rp5622
+(dp5623
+g99
+Vnow()
+p5624
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp5625
+sbsbsg37
+I250
+sg38
+g5522
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5626
+g5616
+atp5627
+Rp5628
+sg46
+Nsg47
+Nsg48
+g5614
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5629
+tp5630
+Rp5631
+(dp5632
+g59
+(lp5633
+sbsg61
+g42
+((lp5634
+tp5635
+Rp5636
+sg65
+g0
+(g155
+g2
+Ntp5637
+Rp5638
+(dp5639
+g159
+I01
+sg72
+(dp5640
+sbsg75
+g4
+sbsVcreated
+p5641
+g0
+(g28
+g2
+Ntp5642
+Rp5643
+(dp5644
+g32
+g5641
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp5645
+Rp5646
+(dp5647
+g92
+g5643
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp5648
+Rp5649
+(dp5650
+g99
+Vnow()
+p5651
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp5652
+sbsbsg37
+I249
+sg38
+g5522
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5653
+g5643
+atp5654
+Rp5655
+sg46
+Nsg47
+Nsg48
+g5641
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5656
+tp5657
+Rp5658
+(dp5659
+g59
+(lp5660
+sbsg61
+g42
+((lp5661
+tp5662
+Rp5663
+sg65
+g0
+(g155
+g2
+Ntp5664
+Rp5665
+(dp5666
+g159
+I01
+sg72
+(dp5667
+sbsg75
+g4
+sbsVversion
+p5668
+g0
+(g28
+g2
+Ntp5669
+Rp5670
+(dp5671
+g32
+g5668
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I244
+sg38
+g5522
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5672
+g5670
+atp5673
+Rp5674
+sg46
+Nsg47
+Nsg48
+g5668
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5675
+tp5676
+Rp5677
+(dp5678
+g59
+(lp5679
+sbsg61
+g42
+((lp5680
+tp5681
+Rp5682
+sg65
+g0
+(g66
+g2
+Ntp5683
+Rp5684
+(dp5685
+g70
+Nsg71
+Nsg72
+(dp5686
+sg74
+I00
+sbsg75
+g4
+sbsVtrainee
+p5687
+g0
+(g28
+g2
+Ntp5688
+Rp5689
+(dp5690
+g32
+g5687
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp5691
+Rp5692
+(dp5693
+g92
+g5689
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp5694
+Rp5695
+(dp5696
+g99
+Vfalse
+p5697
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp5698
+sbsbsg37
+I248
+sg38
+g5522
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5699
+g5689
+atp5700
+Rp5701
+sg46
+Nsg47
+Nsg48
+g5687
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5702
+tp5703
+Rp5704
+(dp5705
+g59
+(lp5706
+sbsg61
+g42
+((lp5707
+tp5708
+Rp5709
+sg65
+g0
+(g877
+g2
+Ntp5710
+Rp5711
+(dp5712
+g72
+(dp5713
+sbsg75
+g4
+sbsVid
+p5714
+g0
+(g28
+g2
+Ntp5715
+Rp5716
+(dp5717
+g37
+I241
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g5522
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp5718
+g5716
+atp5719
+Rp5720
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp5721
+Rp5722
+(dp5723
+g32
+g5714
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp5724
+Rp5725
+(dp5726
+g92
+g5722
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp5727
+Rp5728
+(dp5729
+g99
+Vnextval('new_comments_id_seq'::regclass)
+p5730
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp5731
+sbsbsg37
+I242
+sg38
+g5522
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g5714
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp5732
+tp5733
+Rp5734
+(dp5735
+g59
+(lp5736
+sbsg61
+g42
+((lp5737
+tp5738
+Rp5739
+sg65
+g0
+(g114
+g2
+Ntp5740
+Rp5741
+(dp5742
+g72
+(dp5743
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp5744
+tp5745
+Rp5746
+(dp5747
+g59
+(lp5748
+sbsg61
+g42
+((lp5749
+tp5750
+Rp5751
+sg65
+g0
+(g127
+g2
+Ntp5752
+Rp5753
+(dp5754
+g72
+(dp5755
+sbsg75
+g4
+sbstp5756
+Rp5757
+(dp5758
+g59
+(lp5759
+g5714
+ag5595
+ag5668
+ag5530
+ag5576
+ag5549
+ag5687
+ag5641
+ag5614
+asbsbsg48
+g5520
+sg192
+g0
+(g193
+g2
+Ntp5760
+Rp5761
+(dp5762
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp5763
+Rp5764
+(dp5765
+g23
+g0
+(g24
+g25
+(dp5766
+g5714
+g5716
+stp5767
+Rp5768
+(dp5769
+g59
+(lp5770
+g5714
+asbsbsg208
+(lp5771
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp5772
+tp5773
+Rp5774
+sg222
+g54
+((lp5775
+tp5776
+Rp5777
+(dp5778
+g59
+(lp5779
+sbsg228
+(lp5780
+sg217
+(dp5781
+sg231
+g5520
+sg232
+Nsg233
+Nsg61
+g42
+((lp5782
+g5761
+atp5783
+Rp5784
+sg237
+S'new_comments'
+p5785
+sbsS'src_associations_src'
+p5786
+g0
+(g9
+g2
+Ntp5787
+Rp5788
+(dp5789
+g13
+g14
+(g15
+tp5790
+Rp5791
+sg18
+g0
+(g19
+g2
+Ntp5792
+Rp5793
+(dp5794
+g23
+g0
+(g24
+g25
+(dp5795
+Vsource
+p5796
+g0
+(g28
+g2
+Ntp5797
+Rp5798
+(dp5799
+g32
+g5796
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I459
+sg38
+g5788
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5796
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5800
+tp5801
+Rp5802
+(dp5803
+g59
+(lp5804
+sbsg61
+g42
+((lp5805
+tp5806
+Rp5807
+sg65
+g0
+(g66
+g2
+Ntp5808
+Rp5809
+(dp5810
+g70
+Nsg71
+Nsg72
+(dp5811
+sg74
+I00
+sbsg75
+g4
+sbsVsrc
+p5812
+g0
+(g28
+g2
+Ntp5813
+Rp5814
+(dp5815
+g32
+g5812
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I458
+sg38
+g5788
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5812
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5816
+tp5817
+Rp5818
+(dp5819
+g59
+(lp5820
+sbsg61
+g42
+((lp5821
+tp5822
+Rp5823
+sg65
+g0
+(g114
+g2
+Ntp5824
+Rp5825
+(dp5826
+g72
+(dp5827
+sbsg75
+g4
+sbsVversion
+p5828
+g0
+(g28
+g2
+Ntp5829
+Rp5830
+(dp5831
+g32
+g5828
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I460
+sg38
+g5788
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5828
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5832
+tp5833
+Rp5834
+(dp5835
+g59
+(lp5836
+sbsg61
+g42
+((lp5837
+tp5838
+Rp5839
+sg65
+g0
+(g2530
+g2
+Ntp5840
+Rp5841
+(dp5842
+g70
+Nsg71
+Nsg72
+(dp5843
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p5844
+g0
+(g28
+g2
+Ntp5845
+Rp5846
+(dp5847
+g32
+g5844
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I456
+sg38
+g5788
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5844
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5848
+tp5849
+Rp5850
+(dp5851
+g59
+(lp5852
+sbsg61
+g42
+((lp5853
+tp5854
+Rp5855
+sg65
+g0
+(g114
+g2
+Ntp5856
+Rp5857
+(dp5858
+g72
+(dp5859
+sbsg75
+g4
+sbsVsuite
+p5860
+g0
+(g28
+g2
+Ntp5861
+Rp5862
+(dp5863
+g32
+g5860
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I457
+sg38
+g5788
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g5860
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5864
+tp5865
+Rp5866
+(dp5867
+g59
+(lp5868
+sbsg61
+g42
+((lp5869
+tp5870
+Rp5871
+sg65
+g0
+(g114
+g2
+Ntp5872
+Rp5873
+(dp5874
+g72
+(dp5875
+sbsg75
+g4
+sbstp5876
+Rp5877
+(dp5878
+g59
+(lp5879
+g5844
+ag5860
+ag5812
+ag5796
+ag5828
+asbsbsg48
+g5786
+sg192
+g0
+(g193
+g2
+Ntp5880
+Rp5881
+(dp5882
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp5883
+Rp5884
+(dp5885
+g23
+g0
+(g24
+g25
+(dp5886
+tp5887
+Rp5888
+(dp5889
+g59
+(lp5890
+sbsbsg208
+(lp5891
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp5892
+tp5893
+Rp5894
+sg222
+g54
+((lp5895
+tp5896
+Rp5897
+(dp5898
+g59
+(lp5899
+sbsg228
+(lp5900
+sg217
+(dp5901
+sg231
+g5786
+sg61
+g42
+((lp5902
+g5881
+atp5903
+Rp5904
+sg233
+Nsg232
+NsbsS'priority'
+p5905
+g0
+(g9
+g2
+Ntp5906
+Rp5907
+(dp5908
+g13
+g14
+(g15
+tp5909
+Rp5910
+sg18
+g0
+(g19
+g2
+Ntp5911
+Rp5912
+(dp5913
+g23
+g0
+(g24
+g25
+(dp5914
+Vpriority
+p5915
+g0
+(g28
+g2
+Ntp5916
+Rp5917
+(dp5918
+g32
+g5915
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I266
+sg38
+g5907
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5919
+g5917
+atp5920
+Rp5921
+sg46
+Nsg47
+Nsg48
+g5915
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5922
+tp5923
+Rp5924
+(dp5925
+g59
+(lp5926
+sbsg61
+g42
+((lp5927
+tp5928
+Rp5929
+sg65
+g0
+(g66
+g2
+Ntp5930
+Rp5931
+(dp5932
+g70
+Nsg71
+Nsg72
+(dp5933
+sg74
+I00
+sbsg75
+g4
+sbsVlevel
+p5934
+g0
+(g28
+g2
+Ntp5935
+Rp5936
+(dp5937
+g32
+g5934
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I267
+sg38
+g5907
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp5938
+g5936
+atp5939
+Rp5940
+sg46
+Nsg47
+Nsg48
+g5934
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp5941
+tp5942
+Rp5943
+(dp5944
+g59
+(lp5945
+sbsg61
+g42
+((lp5946
+tp5947
+Rp5948
+sg65
+g0
+(g114
+g2
+Ntp5949
+Rp5950
+(dp5951
+g72
+(dp5952
+sbsg75
+g4
+sbsVid
+p5953
+g0
+(g28
+g2
+Ntp5954
+Rp5955
+(dp5956
+g37
+I264
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g5907
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp5957
+g5955
+atp5958
+Rp5959
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp5960
+Rp5961
+(dp5962
+g32
+g5953
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp5963
+Rp5964
+(dp5965
+g92
+g5961
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp5966
+Rp5967
+(dp5968
+g99
+Vnextval(('priority_id_seq'::text)::regclass)
+p5969
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp5970
+sbsbsg37
+I265
+sg38
+g5907
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g5953
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp5971
+tp5972
+Rp5973
+(dp5974
+g59
+(lp5975
+sbsg61
+g42
+((lp5976
+tp5977
+Rp5978
+sg65
+g0
+(g114
+g2
+Ntp5979
+Rp5980
+(dp5981
+g72
+(dp5982
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp5983
+tp5984
+Rp5985
+(dp5986
+g59
+(lp5987
+sbsg61
+g42
+((lp5988
+tp5989
+Rp5990
+sg65
+g0
+(g127
+g2
+Ntp5991
+Rp5992
+(dp5993
+g72
+(dp5994
+sbsg75
+g4
+sbsVmodified
+p5995
+g0
+(g28
+g2
+Ntp5996
+Rp5997
+(dp5998
+g32
+g5995
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp5999
+Rp6000
+(dp6001
+g92
+g5997
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp6002
+Rp6003
+(dp6004
+g99
+Vnow()
+p6005
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp6006
+sbsbsg37
+I269
+sg38
+g5907
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6007
+g5997
+atp6008
+Rp6009
+sg46
+Nsg47
+Nsg48
+g5995
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6010
+tp6011
+Rp6012
+(dp6013
+g59
+(lp6014
+sbsg61
+g42
+((lp6015
+tp6016
+Rp6017
+sg65
+g0
+(g155
+g2
+Ntp6018
+Rp6019
+(dp6020
+g159
+I01
+sg72
+(dp6021
+sbsg75
+g4
+sbsVcreated
+p6022
+g0
+(g28
+g2
+Ntp6023
+Rp6024
+(dp6025
+g32
+g6022
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp6026
+Rp6027
+(dp6028
+g92
+g6024
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp6029
+Rp6030
+(dp6031
+g99
+Vnow()
+p6032
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp6033
+sbsbsg37
+I268
+sg38
+g5907
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6034
+g6024
+atp6035
+Rp6036
+sg46
+Nsg47
+Nsg48
+g6022
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6037
+tp6038
+Rp6039
+(dp6040
+g59
+(lp6041
+sbsg61
+g42
+((lp6042
+tp6043
+Rp6044
+sg65
+g0
+(g155
+g2
+Ntp6045
+Rp6046
+(dp6047
+g159
+I01
+sg72
+(dp6048
+sbsg75
+g4
+sbstp6049
+Rp6050
+(dp6051
+g59
+(lp6052
+g5953
+ag5915
+ag5934
+ag6022
+ag5995
+asbsbsg48
+g5905
+sg192
+g0
+(g193
+g2
+Ntp6053
+Rp6054
+(dp6055
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp6056
+Rp6057
+(dp6058
+g23
+g0
+(g24
+g25
+(dp6059
+g5953
+g5955
+stp6060
+Rp6061
+(dp6062
+g59
+(lp6063
+g5953
+asbsbsg208
+(lp6064
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp6065
+g0
+(g212
+g2
+Ntp6066
+Rp6067
+(dp6068
+g48
+S'priority_level_key'
+p6069
+sg217
+(dp6070
+sg38
+g5907
+sg39
+I01
+sg199
+(lp6071
+g5936
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp6072
+Rp6073
+(dp6074
+g48
+S'priority_priority_key'
+p6075
+sg217
+(dp6076
+sg38
+g5907
+sg39
+I01
+sg199
+(lp6077
+g5917
+asg75
+g4
+sbatp6078
+Rp6079
+sg222
+g54
+((lp6080
+tp6081
+Rp6082
+(dp6083
+g59
+(lp6084
+sbsg228
+(lp6085
+sg217
+(dp6086
+sg231
+g5905
+sg232
+Nsg233
+Nsg61
+g42
+((lp6087
+g6054
+atp6088
+Rp6089
+sg237
+S'priority'
+p6090
+sbsVsource
+p6091
+g0
+(g9
+g2
+Ntp6092
+Rp6093
+(dp6094
+g13
+g14
+(g15
+tp6095
+Rp6096
+sg18
+g0
+(g19
+g2
+Ntp6097
+Rp6098
+(dp6099
+g23
+g0
+(g24
+g25
+(dp6100
+Vchangedby
+p6101
+g0
+(g28
+g2
+Ntp6102
+Rp6103
+(dp6104
+g32
+g6101
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I96
+sg38
+g6093
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6105
+g6103
+atp6106
+Rp6107
+sg46
+Nsg47
+Nsg48
+g6101
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6108
+g0
+(g598
+g2
+Ntp6109
+Rp6110
+(dp6111
+g602
+g6103
+sg197
+Nsg603
+Nsg48
+Vsource_changedby
+p6112
+sg605
+Vmaintainer.id
+p6113
+sg607
+g0
+(g608
+g2
+Ntp6114
+Rp6115
+(dp6116
+g612
+(lp6117
+g6113
+asg52
+Nsg603
+Nsg614
+g54
+((lp6118
+g6110
+atp6119
+Rp6120
+(dp6121
+g59
+(lp6122
+g6110
+asbsg48
+g6112
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp6123
+Vchangedby
+p6124
+asg38
+g6093
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp6125
+Rp6126
+(dp6127
+g23
+g0
+(g24
+g25
+(dp6128
+g6101
+g6103
+stp6129
+Rp6130
+(dp6131
+g59
+(lp6132
+g6101
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp6133
+Rp6134
+(dp6135
+g59
+(lp6136
+g6110
+asbsg61
+g42
+((lp6137
+tp6138
+Rp6139
+sg65
+g0
+(g114
+g2
+Ntp6140
+Rp6141
+(dp6142
+g72
+(dp6143
+sbsg75
+g4
+sbsVmaintainer
+p6144
+g0
+(g28
+g2
+Ntp6145
+Rp6146
+(dp6147
+g32
+g6144
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I92
+sg38
+g6093
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6148
+g6146
+atp6149
+Rp6150
+sg46
+Nsg47
+Nsg48
+g6144
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6151
+g0
+(g598
+g2
+Ntp6152
+Rp6153
+(dp6154
+g602
+g6146
+sg197
+Nsg603
+Nsg48
+Vsource_maintainer
+p6155
+sg605
+Vmaintainer.id
+p6156
+sg607
+g0
+(g608
+g2
+Ntp6157
+Rp6158
+(dp6159
+g612
+(lp6160
+g6156
+asg52
+Nsg603
+Nsg614
+g54
+((lp6161
+g6153
+atp6162
+Rp6163
+(dp6164
+g59
+(lp6165
+g6153
+asbsg48
+g6155
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp6166
+Vmaintainer
+p6167
+asg38
+g6093
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp6168
+Rp6169
+(dp6170
+g23
+g0
+(g24
+g25
+(dp6171
+g6144
+g6146
+stp6172
+Rp6173
+(dp6174
+g59
+(lp6175
+g6144
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp6176
+Rp6177
+(dp6178
+g59
+(lp6179
+g6153
+asbsg61
+g42
+((lp6180
+tp6181
+Rp6182
+sg65
+g0
+(g114
+g2
+Ntp6183
+Rp6184
+(dp6185
+g72
+(dp6186
+sbsg75
+g4
+sbsVcreated
+p6187
+g0
+(g28
+g2
+Ntp6188
+Rp6189
+(dp6190
+g32
+g6187
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp6191
+Rp6192
+(dp6193
+g92
+g6189
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp6194
+Rp6195
+(dp6196
+g99
+Vnow()
+p6197
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp6198
+sbsbsg37
+I98
+sg38
+g6093
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6199
+g6189
+atp6200
+Rp6201
+sg46
+Nsg47
+Nsg48
+g6187
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6202
+tp6203
+Rp6204
+(dp6205
+g59
+(lp6206
+sbsg61
+g42
+((lp6207
+tp6208
+Rp6209
+sg65
+g0
+(g155
+g2
+Ntp6210
+Rp6211
+(dp6212
+g159
+I01
+sg72
+(dp6213
+sbsg75
+g4
+sbsVinstall_date
+p6214
+g0
+(g28
+g2
+Ntp6215
+Rp6216
+(dp6217
+g32
+g6214
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I95
+sg38
+g6093
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6218
+g6216
+atp6219
+Rp6220
+sg46
+Nsg47
+Nsg48
+g6214
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6221
+tp6222
+Rp6223
+(dp6224
+g59
+(lp6225
+sbsg61
+g42
+((lp6226
+tp6227
+Rp6228
+sg65
+g0
+(g155
+g2
+Ntp6229
+Rp6230
+(dp6231
+g159
+I01
+sg72
+(dp6232
+sbsg75
+g4
+sbsVsig_fpr
+p6233
+g0
+(g28
+g2
+Ntp6234
+Rp6235
+(dp6236
+g32
+g6233
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I94
+sg38
+g6093
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6237
+g6235
+atp6238
+Rp6239
+sg46
+Nsg47
+Nsg48
+g6233
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6240
+g0
+(g598
+g2
+Ntp6241
+Rp6242
+(dp6243
+g602
+g6235
+sg197
+Nsg603
+Nsg48
+Vsource_sig_fpr
+p6244
+sg605
+Vfingerprint.id
+p6245
+sg607
+g0
+(g608
+g2
+Ntp6246
+Rp6247
+(dp6248
+g612
+(lp6249
+g6245
+asg52
+Nsg603
+Nsg614
+g54
+((lp6250
+g6242
+atp6251
+Rp6252
+(dp6253
+g59
+(lp6254
+g6242
+asbsg48
+g6244
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp6255
+Vsig_fpr
+p6256
+asg38
+g6093
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp6257
+Rp6258
+(dp6259
+g23
+g0
+(g24
+g25
+(dp6260
+g6233
+g6235
+stp6261
+Rp6262
+(dp6263
+g59
+(lp6264
+g6233
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp6265
+Rp6266
+(dp6267
+g59
+(lp6268
+g6242
+asbsg61
+g42
+((lp6269
+tp6270
+Rp6271
+sg65
+g0
+(g114
+g2
+Ntp6272
+Rp6273
+(dp6274
+g72
+(dp6275
+sbsg75
+g4
+sbsVmodified
+p6276
+g0
+(g28
+g2
+Ntp6277
+Rp6278
+(dp6279
+g32
+g6276
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp6280
+Rp6281
+(dp6282
+g92
+g6278
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp6283
+Rp6284
+(dp6285
+g99
+Vnow()
+p6286
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp6287
+sbsbsg37
+I99
+sg38
+g6093
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6288
+g6278
+atp6289
+Rp6290
+sg46
+Nsg47
+Nsg48
+g6276
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6291
+tp6292
+Rp6293
+(dp6294
+g59
+(lp6295
+sbsg61
+g42
+((lp6296
+tp6297
+Rp6298
+sg65
+g0
+(g155
+g2
+Ntp6299
+Rp6300
+(dp6301
+g159
+I01
+sg72
+(dp6302
+sbsg75
+g4
+sbsVsource
+p6303
+g0
+(g28
+g2
+Ntp6304
+Rp6305
+(dp6306
+g32
+g6303
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I90
+sg38
+g6093
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6307
+g6305
+atp6308
+Rp6309
+sg46
+Nsg47
+Nsg48
+g6303
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6310
+tp6311
+Rp6312
+(dp6313
+g59
+(lp6314
+sbsg61
+g42
+((lp6315
+tp6316
+Rp6317
+sg65
+g0
+(g66
+g2
+Ntp6318
+Rp6319
+(dp6320
+g70
+Nsg71
+Nsg72
+(dp6321
+sg74
+I00
+sbsg75
+g4
+sbsVversion
+p6322
+g0
+(g28
+g2
+Ntp6323
+Rp6324
+(dp6325
+g32
+g6322
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I91
+sg38
+g6093
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6326
+g6324
+atp6327
+Rp6328
+sg46
+Nsg47
+Nsg48
+g6322
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6329
+tp6330
+Rp6331
+(dp6332
+g59
+(lp6333
+sbsg61
+g42
+((lp6334
+tp6335
+Rp6336
+sg65
+g0
+(g2530
+g2
+Ntp6337
+Rp6338
+(dp6339
+g70
+Nsg71
+Nsg72
+(dp6340
+sg74
+I00
+sbsg75
+g4
+sbsVfile
+p6341
+g0
+(g28
+g2
+Ntp6342
+Rp6343
+(dp6344
+g32
+g6341
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I93
+sg38
+g6093
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6345
+g6343
+atp6346
+Rp6347
+sg46
+Nsg47
+Nsg48
+g6341
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6348
+g0
+(g598
+g2
+Ntp6349
+Rp6350
+(dp6351
+g602
+g6343
+sg197
+Nsg603
+Nsg48
+Vsource_file
+p6352
+sg605
+Vfiles.id
+p6353
+sg607
+g0
+(g608
+g2
+Ntp6354
+Rp6355
+(dp6356
+g612
+(lp6357
+g6353
+asg52
+Nsg603
+Nsg614
+g54
+((lp6358
+g6350
+atp6359
+Rp6360
+(dp6361
+g59
+(lp6362
+g6350
+asbsg48
+g6352
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp6363
+Vfile
+p6364
+asg38
+g6093
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp6365
+Rp6366
+(dp6367
+g23
+g0
+(g24
+g25
+(dp6368
+g6341
+g6343
+stp6369
+Rp6370
+(dp6371
+g59
+(lp6372
+g6341
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp6373
+Rp6374
+(dp6375
+g59
+(lp6376
+g6350
+asbsg61
+g42
+((lp6377
+tp6378
+Rp6379
+sg65
+g0
+(g114
+g2
+Ntp6380
+Rp6381
+(dp6382
+g72
+(dp6383
+sbsg75
+g4
+sbsVdm_upload_allowed
+p6384
+g0
+(g28
+g2
+Ntp6385
+Rp6386
+(dp6387
+g32
+g6384
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp6388
+Rp6389
+(dp6390
+g92
+g6386
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp6391
+Rp6392
+(dp6393
+g99
+Vfalse
+p6394
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp6395
+sbsbsg37
+I97
+sg38
+g6093
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6396
+g6386
+atp6397
+Rp6398
+sg46
+Nsg47
+Nsg48
+g6384
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6399
+tp6400
+Rp6401
+(dp6402
+g59
+(lp6403
+sbsg61
+g42
+((lp6404
+tp6405
+Rp6406
+sg65
+g0
+(g877
+g2
+Ntp6407
+Rp6408
+(dp6409
+g72
+(dp6410
+sbsg75
+g4
+sbsVid
+p6411
+g0
+(g28
+g2
+Ntp6412
+Rp6413
+(dp6414
+g37
+I275
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g6093
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp6415
+g6413
+atp6416
+Rp6417
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp6418
+Rp6419
+(dp6420
+g32
+g6411
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp6421
+Rp6422
+(dp6423
+g92
+g6419
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp6424
+Rp6425
+(dp6426
+g99
+Vnextval(('source_id_seq'::text)::regclass)
+p6427
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp6428
+sbsbsg37
+I89
+sg38
+g6093
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g6411
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp6429
+tp6430
+Rp6431
+(dp6432
+g59
+(lp6433
+sbsg61
+g42
+((lp6434
+tp6435
+Rp6436
+sg65
+g0
+(g114
+g2
+Ntp6437
+Rp6438
+(dp6439
+g72
+(dp6440
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp6441
+tp6442
+Rp6443
+(dp6444
+g59
+(lp6445
+sbsg61
+g42
+((lp6446
+tp6447
+Rp6448
+sg65
+g0
+(g127
+g2
+Ntp6449
+Rp6450
+(dp6451
+g72
+(dp6452
+sbsg75
+g4
+sbstp6453
+Rp6454
+(dp6455
+g59
+(lp6456
+g6411
+ag6303
+ag6322
+ag6144
+ag6341
+ag6233
+ag6214
+ag6101
+ag6384
+ag6187
+ag6276
+asbsbsg48
+g6091
+sg192
+g0
+(g193
+g2
+Ntp6457
+Rp6458
+(dp6459
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp6460
+Rp6461
+(dp6462
+g23
+g0
+(g24
+g25
+(dp6463
+g6411
+g6413
+stp6464
+Rp6465
+(dp6466
+g59
+(lp6467
+g6411
+asbsbsg208
+(lp6468
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp6469
+g0
+(g212
+g2
+Ntp6470
+Rp6471
+(dp6472
+g48
+S'source_fingerprint'
+p6473
+sg217
+(dp6474
+sg38
+g6093
+sg39
+I00
+sg199
+(lp6475
+g6235
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp6476
+Rp6477
+(dp6478
+g48
+S'source_source_key'
+p6479
+sg217
+(dp6480
+sg38
+g6093
+sg39
+I01
+sg199
+(lp6481
+g6305
+ag6324
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp6482
+Rp6483
+(dp6484
+g48
+S'source_file_key'
+p6485
+sg217
+(dp6486
+sg38
+g6093
+sg39
+I01
+sg199
+(lp6487
+g6343
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp6488
+Rp6489
+(dp6490
+g48
+S'source_maintainer'
+p6491
+sg217
+(dp6492
+sg38
+g6093
+sg39
+I00
+sg199
+(lp6493
+g6146
+asg75
+g4
+sbatp6494
+Rp6495
+sg222
+g54
+((lp6496
+g6110
+ag6350
+ag6153
+ag6242
+atp6497
+Rp6498
+(dp6499
+g59
+(lp6500
+g6110
+ag6350
+ag6153
+ag6242
+asbsg228
+(lp6501
+sg217
+(dp6502
+sg231
+g6091
+sg232
+Nsg233
+Nsg61
+g42
+((lp6503
+g6458
+ag6115
+ag6158
+ag6247
+ag6355
+atp6504
+Rp6505
+sg237
+S'source'
+p6506
+sbsS'changes_pool_files'
+p6507
+g0
+(g9
+g2
+Ntp6508
+Rp6509
+(dp6510
+g13
+g14
+(g15
+tp6511
+Rp6512
+sg18
+g0
+(g19
+g2
+Ntp6513
+Rp6514
+(dp6515
+g23
+g0
+(g24
+g25
+(dp6516
+Vcreated
+p6517
+g0
+(g28
+g2
+Ntp6518
+Rp6519
+(dp6520
+g32
+g6517
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp6521
+Rp6522
+(dp6523
+g92
+g6519
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp6524
+Rp6525
+(dp6526
+g99
+Vnow()
+p6527
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp6528
+sbsbsg37
+I319
+sg38
+g6509
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g6517
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6529
+tp6530
+Rp6531
+(dp6532
+g59
+(lp6533
+sbsg61
+g42
+((lp6534
+tp6535
+Rp6536
+sg65
+g0
+(g155
+g2
+Ntp6537
+Rp6538
+(dp6539
+g159
+I01
+sg72
+(dp6540
+sbsg75
+g4
+sbsVchangeid
+p6541
+g0
+(g28
+g2
+Ntp6542
+Rp6543
+(dp6544
+g32
+g6541
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I317
+sg38
+g6509
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g6541
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp6545
+g0
+(g598
+g2
+Ntp6546
+Rp6547
+(dp6548
+g602
+g6543
+sg197
+Nsg603
+Nsg48
+Vchanges_pool_files_changeid_fkey
+p6549
+sg605
+Vchanges.id
+p6550
+sg607
+g0
+(g608
+g2
+Ntp6551
+Rp6552
+(dp6553
+g612
+(lp6554
+g6550
+asg52
+Nsg603
+Nsg614
+g54
+((lp6555
+g6547
+atp6556
+Rp6557
+(dp6558
+g59
+(lp6559
+g6547
+asbsg48
+g6549
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp6560
+Vchangeid
+p6561
+asg38
+g6509
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp6562
+Rp6563
+(dp6564
+g23
+g0
+(g24
+g25
+(dp6565
+g6541
+g6543
+stp6566
+Rp6567
+(dp6568
+g59
+(lp6569
+g6541
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp6570
+Rp6571
+(dp6572
+g59
+(lp6573
+g6547
+asbsg61
+g42
+((lp6574
+tp6575
+Rp6576
+sg65
+g0
+(g114
+g2
+Ntp6577
+Rp6578
+(dp6579
+g72
+(dp6580
+sbsg75
+g4
+sbsVmodified
+p6581
+g0
+(g28
+g2
+Ntp6582
+Rp6583
+(dp6584
+g32
+g6581
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp6585
+Rp6586
+(dp6587
+g92
+g6583
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp6588
+Rp6589
+(dp6590
+g99
+Vnow()
+p6591
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp6592
+sbsbsg37
+I320
+sg38
+g6509
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g6581
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6593
+tp6594
+Rp6595
+(dp6596
+g59
+(lp6597
+sbsg61
+g42
+((lp6598
+tp6599
+Rp6600
+sg65
+g0
+(g155
+g2
+Ntp6601
+Rp6602
+(dp6603
+g159
+I01
+sg72
+(dp6604
+sbsg75
+g4
+sbsVfileid
+p6605
+g0
+(g28
+g2
+Ntp6606
+Rp6607
+(dp6608
+g32
+g6605
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I318
+sg38
+g6509
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g6605
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp6609
+g0
+(g598
+g2
+Ntp6610
+Rp6611
+(dp6612
+g602
+g6607
+sg197
+Nsg603
+Nsg48
+Vchanges_pool_files_fileid_fkey
+p6613
+sg605
+Vfiles.id
+p6614
+sg607
+g0
+(g608
+g2
+Ntp6615
+Rp6616
+(dp6617
+g612
+(lp6618
+g6614
+asg52
+Nsg603
+Nsg614
+g54
+((lp6619
+g6611
+atp6620
+Rp6621
+(dp6622
+g59
+(lp6623
+g6611
+asbsg48
+g6613
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp6624
+Vfileid
+p6625
+asg38
+g6509
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp6626
+Rp6627
+(dp6628
+g23
+g0
+(g24
+g25
+(dp6629
+g6605
+g6607
+stp6630
+Rp6631
+(dp6632
+g59
+(lp6633
+g6605
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp6634
+Rp6635
+(dp6636
+g59
+(lp6637
+g6611
+asbsg61
+g42
+((lp6638
+tp6639
+Rp6640
+sg65
+g0
+(g114
+g2
+Ntp6641
+Rp6642
+(dp6643
+g72
+(dp6644
+sbsg75
+g4
+sbstp6645
+Rp6646
+(dp6647
+g59
+(lp6648
+g6541
+ag6605
+ag6517
+ag6581
+asbsbsg48
+g6507
+sg192
+g0
+(g193
+g2
+Ntp6649
+Rp6650
+(dp6651
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp6652
+Rp6653
+(dp6654
+g23
+g0
+(g24
+g25
+(dp6655
+g6541
+g6543
+sg6605
+g6607
+stp6656
+Rp6657
+(dp6658
+g59
+(lp6659
+g6541
+ag6605
+asbsbsg208
+(lp6660
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp6661
+tp6662
+Rp6663
+sg222
+g54
+((lp6664
+g6547
+ag6611
+atp6665
+Rp6666
+(dp6667
+g59
+(lp6668
+g6547
+ag6611
+asbsg228
+(lp6669
+sg217
+(dp6670
+sg231
+g6507
+sg61
+g42
+((lp6671
+g6650
+ag6552
+ag6616
+atp6672
+Rp6673
+sg233
+Nsg232
+NsbsS'changelogs'
+p6674
+g0
+(g9
+g2
+Ntp6675
+Rp6676
+(dp6677
+g13
+g14
+(g15
+tp6678
+Rp6679
+sg18
+g0
+(g19
+g2
+Ntp6680
+Rp6681
+(dp6682
+g23
+g0
+(g24
+g25
+(dp6683
+Vsource
+p6684
+g0
+(g28
+g2
+Ntp6685
+Rp6686
+(dp6687
+g32
+g6684
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I399
+sg38
+g6676
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g6684
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6688
+tp6689
+Rp6690
+(dp6691
+g59
+(lp6692
+sbsg61
+g42
+((lp6693
+tp6694
+Rp6695
+sg65
+g0
+(g66
+g2
+Ntp6696
+Rp6697
+(dp6698
+g70
+Nsg71
+Nsg72
+(dp6699
+sg74
+I00
+sbsg75
+g4
+sbsVversion
+p6700
+g0
+(g28
+g2
+Ntp6701
+Rp6702
+(dp6703
+g32
+g6700
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I400
+sg38
+g6676
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g6700
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6704
+tp6705
+Rp6706
+(dp6707
+g59
+(lp6708
+sbsg61
+g42
+((lp6709
+tp6710
+Rp6711
+sg65
+g0
+(g2530
+g2
+Ntp6712
+Rp6713
+(dp6714
+g70
+Nsg71
+Nsg72
+(dp6715
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture
+p6716
+g0
+(g28
+g2
+Ntp6717
+Rp6718
+(dp6719
+g32
+g6716
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I401
+sg38
+g6676
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g6716
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6720
+tp6721
+Rp6722
+(dp6723
+g59
+(lp6724
+sbsg61
+g42
+((lp6725
+tp6726
+Rp6727
+sg65
+g0
+(g66
+g2
+Ntp6728
+Rp6729
+(dp6730
+g70
+Nsg71
+Nsg72
+(dp6731
+sg74
+I00
+sbsg75
+g4
+sbsVchangelog
+p6732
+g0
+(g28
+g2
+Ntp6733
+Rp6734
+(dp6735
+g32
+g6732
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I402
+sg38
+g6676
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g6732
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6736
+tp6737
+Rp6738
+(dp6739
+g59
+(lp6740
+sbsg61
+g42
+((lp6741
+tp6742
+Rp6743
+sg65
+g0
+(g66
+g2
+Ntp6744
+Rp6745
+(dp6746
+g70
+Nsg71
+Nsg72
+(dp6747
+sg74
+I00
+sbsg75
+g4
+sbsVdistribution
+p6748
+g0
+(g28
+g2
+Ntp6749
+Rp6750
+(dp6751
+g32
+g6748
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I403
+sg38
+g6676
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g6748
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6752
+tp6753
+Rp6754
+(dp6755
+g59
+(lp6756
+sbsg61
+g42
+((lp6757
+tp6758
+Rp6759
+sg65
+g0
+(g66
+g2
+Ntp6760
+Rp6761
+(dp6762
+g70
+Nsg71
+Nsg72
+(dp6763
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p6764
+g0
+(g28
+g2
+Ntp6765
+Rp6766
+(dp6767
+g32
+g6764
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I398
+sg38
+g6676
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g6764
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6768
+tp6769
+Rp6770
+(dp6771
+g59
+(lp6772
+sbsg61
+g42
+((lp6773
+tp6774
+Rp6775
+sg65
+g0
+(g114
+g2
+Ntp6776
+Rp6777
+(dp6778
+g72
+(dp6779
+sbsg75
+g4
+sbstp6780
+Rp6781
+(dp6782
+g59
+(lp6783
+g6764
+ag6684
+ag6700
+ag6716
+ag6732
+ag6748
+asbsbsg48
+g6674
+sg192
+g0
+(g193
+g2
+Ntp6784
+Rp6785
+(dp6786
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp6787
+Rp6788
+(dp6789
+g23
+g0
+(g24
+g25
+(dp6790
+tp6791
+Rp6792
+(dp6793
+g59
+(lp6794
+sbsbsg208
+(lp6795
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp6796
+tp6797
+Rp6798
+sg222
+g54
+((lp6799
+tp6800
+Rp6801
+(dp6802
+g59
+(lp6803
+sbsg228
+(lp6804
+sg217
+(dp6805
+sg231
+g6674
+sg61
+g42
+((lp6806
+g6785
+atp6807
+Rp6808
+sg233
+Nsg232
+NsbsVlocation
+p6809
+g0
+(g9
+g2
+Ntp6810
+Rp6811
+(dp6812
+g13
+g14
+(g15
+tp6813
+Rp6814
+sg18
+g0
+(g19
+g2
+Ntp6815
+Rp6816
+(dp6817
+g23
+g0
+(g24
+g25
+(dp6818
+Vtype
+p6819
+g0
+(g28
+g2
+Ntp6820
+Rp6821
+(dp6822
+g32
+g6819
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I46
+sg38
+g6811
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6823
+g6821
+atp6824
+Rp6825
+sg46
+Nsg47
+Nsg48
+g6819
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6826
+tp6827
+Rp6828
+(dp6829
+g59
+(lp6830
+sbsg61
+g42
+((lp6831
+tp6832
+Rp6833
+sg65
+g0
+(g66
+g2
+Ntp6834
+Rp6835
+(dp6836
+g70
+Nsg71
+Nsg72
+(dp6837
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p6838
+g0
+(g28
+g2
+Ntp6839
+Rp6840
+(dp6841
+g32
+g6838
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp6842
+Rp6843
+(dp6844
+g92
+g6840
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp6845
+Rp6846
+(dp6847
+g99
+Vnow()
+p6848
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp6849
+sbsbsg37
+I47
+sg38
+g6811
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6850
+g6840
+atp6851
+Rp6852
+sg46
+Nsg47
+Nsg48
+g6838
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6853
+tp6854
+Rp6855
+(dp6856
+g59
+(lp6857
+sbsg61
+g42
+((lp6858
+tp6859
+Rp6860
+sg65
+g0
+(g155
+g2
+Ntp6861
+Rp6862
+(dp6863
+g159
+I01
+sg72
+(dp6864
+sbsg75
+g4
+sbsVid
+p6865
+g0
+(g28
+g2
+Ntp6866
+Rp6867
+(dp6868
+g37
+I239
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g6811
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp6869
+g6867
+atp6870
+Rp6871
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp6872
+Rp6873
+(dp6874
+g32
+g6865
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp6875
+Rp6876
+(dp6877
+g92
+g6873
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp6878
+Rp6879
+(dp6880
+g99
+Vnextval(('location_id_seq'::text)::regclass)
+p6881
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp6882
+sbsbsg37
+I42
+sg38
+g6811
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g6865
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp6883
+tp6884
+Rp6885
+(dp6886
+g59
+(lp6887
+sbsg61
+g42
+((lp6888
+tp6889
+Rp6890
+sg65
+g0
+(g114
+g2
+Ntp6891
+Rp6892
+(dp6893
+g72
+(dp6894
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp6895
+tp6896
+Rp6897
+(dp6898
+g59
+(lp6899
+sbsg61
+g42
+((lp6900
+tp6901
+Rp6902
+sg65
+g0
+(g127
+g2
+Ntp6903
+Rp6904
+(dp6905
+g72
+(dp6906
+sbsg75
+g4
+sbsVpath
+p6907
+g0
+(g28
+g2
+Ntp6908
+Rp6909
+(dp6910
+g32
+g6907
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I43
+sg38
+g6811
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6911
+g6909
+atp6912
+Rp6913
+sg46
+Nsg47
+Nsg48
+g6907
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6914
+tp6915
+Rp6916
+(dp6917
+g59
+(lp6918
+sbsg61
+g42
+((lp6919
+tp6920
+Rp6921
+sg65
+g0
+(g66
+g2
+Ntp6922
+Rp6923
+(dp6924
+g70
+Nsg71
+Nsg72
+(dp6925
+sg74
+I00
+sbsg75
+g4
+sbsVcomponent
+p6926
+g0
+(g28
+g2
+Ntp6927
+Rp6928
+(dp6929
+g32
+g6926
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I44
+sg38
+g6811
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6930
+g6928
+atp6931
+Rp6932
+sg46
+Nsg47
+Nsg48
+g6926
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6933
+g0
+(g598
+g2
+Ntp6934
+Rp6935
+(dp6936
+g602
+g6928
+sg197
+Nsg603
+Nsg48
+Vlocation_component_fkey
+p6937
+sg605
+Vcomponent.id
+p6938
+sg607
+g0
+(g608
+g2
+Ntp6939
+Rp6940
+(dp6941
+g612
+(lp6942
+g6938
+asg52
+Nsg603
+Nsg614
+g54
+((lp6943
+g6935
+atp6944
+Rp6945
+(dp6946
+g59
+(lp6947
+g6935
+asbsg48
+g6937
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp6948
+Vcomponent
+p6949
+asg38
+g6811
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp6950
+Rp6951
+(dp6952
+g23
+g0
+(g24
+g25
+(dp6953
+g6926
+g6928
+stp6954
+Rp6955
+(dp6956
+g59
+(lp6957
+g6926
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp6958
+Rp6959
+(dp6960
+g59
+(lp6961
+g6935
+asbsg61
+g42
+((lp6962
+tp6963
+Rp6964
+sg65
+g0
+(g114
+g2
+Ntp6965
+Rp6966
+(dp6967
+g72
+(dp6968
+sbsg75
+g4
+sbsVmodified
+p6969
+g0
+(g28
+g2
+Ntp6970
+Rp6971
+(dp6972
+g32
+g6969
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp6973
+Rp6974
+(dp6975
+g92
+g6971
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp6976
+Rp6977
+(dp6978
+g99
+Vnow()
+p6979
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp6980
+sbsbsg37
+I48
+sg38
+g6811
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp6981
+g6971
+atp6982
+Rp6983
+sg46
+Nsg47
+Nsg48
+g6969
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp6984
+tp6985
+Rp6986
+(dp6987
+g59
+(lp6988
+sbsg61
+g42
+((lp6989
+tp6990
+Rp6991
+sg65
+g0
+(g155
+g2
+Ntp6992
+Rp6993
+(dp6994
+g159
+I01
+sg72
+(dp6995
+sbsg75
+g4
+sbsVarchive
+p6996
+g0
+(g28
+g2
+Ntp6997
+Rp6998
+(dp6999
+g32
+g6996
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I45
+sg38
+g6811
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7000
+g6998
+atp7001
+Rp7002
+sg46
+Nsg47
+Nsg48
+g6996
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7003
+g0
+(g598
+g2
+Ntp7004
+Rp7005
+(dp7006
+g602
+g6998
+sg197
+Nsg603
+Nsg48
+Vlocation_archive_fkey
+p7007
+sg605
+Varchive.id
+p7008
+sg607
+g0
+(g608
+g2
+Ntp7009
+Rp7010
+(dp7011
+g612
+(lp7012
+g7008
+asg52
+Nsg603
+Nsg614
+g54
+((lp7013
+g7005
+atp7014
+Rp7015
+(dp7016
+g59
+(lp7017
+g7005
+asbsg48
+g7007
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp7018
+Varchive
+p7019
+asg38
+g6811
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp7020
+Rp7021
+(dp7022
+g23
+g0
+(g24
+g25
+(dp7023
+g6996
+g6998
+stp7024
+Rp7025
+(dp7026
+g59
+(lp7027
+g6996
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp7028
+Rp7029
+(dp7030
+g59
+(lp7031
+g7005
+asbsg61
+g42
+((lp7032
+tp7033
+Rp7034
+sg65
+g0
+(g114
+g2
+Ntp7035
+Rp7036
+(dp7037
+g72
+(dp7038
+sbsg75
+g4
+sbstp7039
+Rp7040
+(dp7041
+g59
+(lp7042
+g6865
+ag6907
+ag6926
+ag6996
+ag6819
+ag6838
+ag6969
+asbsbsg48
+g6809
+sg192
+g0
+(g193
+g2
+Ntp7043
+Rp7044
+(dp7045
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp7046
+Rp7047
+(dp7048
+g23
+g0
+(g24
+g25
+(dp7049
+g6865
+g6867
+stp7050
+Rp7051
+(dp7052
+g59
+(lp7053
+g6865
+asbsbsg208
+(lp7054
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp7055
+tp7056
+Rp7057
+sg222
+g54
+((lp7058
+g7005
+ag6935
+atp7059
+Rp7060
+(dp7061
+g59
+(lp7062
+g7005
+ag6935
+asbsg228
+(lp7063
+sg217
+(dp7064
+sg231
+g6809
+sg232
+Nsg233
+Nsg61
+g42
+((lp7065
+g7044
+ag7010
+ag6940
+atp7066
+Rp7067
+sg237
+S'location'
+p7068
+sbsS'changelogs_text'
+p7069
+g0
+(g9
+g2
+Ntp7070
+Rp7071
+(dp7072
+g13
+g14
+(g15
+tp7073
+Rp7074
+sg18
+g0
+(g19
+g2
+Ntp7075
+Rp7076
+(dp7077
+g23
+g0
+(g24
+g25
+(dp7078
+Vid
+p7079
+g0
+(g28
+g2
+Ntp7080
+Rp7081
+(dp7082
+g32
+g80
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I163
+sg38
+g7071
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g80
+sg49
+I00
+sg50
+Nsg51
+I01
+sg84
+g0
+(g28
+g2
+Ntp7083
+Rp7084
+(dp7085
+g32
+g7079
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp7086
+Rp7087
+(dp7088
+g92
+g7084
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp7089
+Rp7090
+(dp7091
+g99
+Vnextval('changelogs_text_id_seq'::regclass)
+p7092
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp7093
+sbsbsg37
+I164
+sg38
+g7071
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g7079
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp7094
+tp7095
+Rp7096
+(dp7097
+g59
+(lp7098
+sbsg61
+g42
+((lp7099
+tp7100
+Rp7101
+sg65
+g0
+(g114
+g2
+Ntp7102
+Rp7103
+(dp7104
+g72
+(dp7105
+sbsg75
+g4
+sbsg52
+Nsg53
+g54
+((lp7106
+tp7107
+Rp7108
+(dp7109
+g59
+(lp7110
+sbsg61
+g42
+((lp7111
+tp7112
+Rp7113
+sg65
+g0
+(g127
+g2
+Ntp7114
+Rp7115
+(dp7116
+g72
+(dp7117
+sbsg75
+g4
+sbsVchangelog
+p7118
+g0
+(g28
+g2
+Ntp7119
+Rp7120
+(dp7121
+g32
+g7118
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I165
+sg38
+g7071
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g7118
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7122
+tp7123
+Rp7124
+(dp7125
+g59
+(lp7126
+sbsg61
+g42
+((lp7127
+tp7128
+Rp7129
+sg65
+g0
+(g66
+g2
+Ntp7130
+Rp7131
+(dp7132
+g70
+Nsg71
+Nsg72
+(dp7133
+sg74
+I00
+sbsg75
+g4
+sbstp7134
+Rp7135
+(dp7136
+g59
+(lp7137
+g7079
+ag7118
+asbsbsg48
+g7069
+sg192
+g0
+(g193
+g2
+Ntp7138
+Rp7139
+(dp7140
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp7141
+Rp7142
+(dp7143
+g23
+g0
+(g24
+g25
+(dp7144
+g7079
+g7081
+stp7145
+Rp7146
+(dp7147
+g59
+(lp7148
+g7079
+asbsbsg208
+(lp7149
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp7150
+tp7151
+Rp7152
+sg222
+g54
+((lp7153
+tp7154
+Rp7155
+(dp7156
+g59
+(lp7157
+sbsg228
+(lp7158
+sg217
+(dp7159
+sg231
+g7069
+sg61
+g42
+((lp7160
+g7139
+atp7161
+Rp7162
+sg233
+Nsg232
+NsbsS'override'
+p7163
+g0
+(g9
+g2
+Ntp7164
+Rp7165
+(dp7166
+g13
+g14
+(g15
+tp7167
+Rp7168
+sg18
+g0
+(g19
+g2
+Ntp7169
+Rp7170
+(dp7171
+g23
+g0
+(g24
+g25
+(dp7172
+Vmaintainer
+p7173
+g0
+(g28
+g2
+Ntp7174
+Rp7175
+(dp7176
+g32
+g7173
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I333
+sg38
+g7165
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7177
+g7175
+atp7178
+Rp7179
+sg46
+Nsg47
+Nsg48
+g7173
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7180
+tp7181
+Rp7182
+(dp7183
+g59
+(lp7184
+sbsg61
+g42
+((lp7185
+tp7186
+Rp7187
+sg65
+g0
+(g66
+g2
+Ntp7188
+Rp7189
+(dp7190
+g70
+Nsg71
+Nsg72
+(dp7191
+sg74
+I00
+sbsg75
+g4
+sbsVpackage
+p7192
+g0
+(g28
+g2
+Ntp7193
+Rp7194
+(dp7195
+g32
+g7192
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I327
+sg38
+g7165
+sg39
+Nsg40
+I01
+sg41
+g42
+((lp7196
+g7194
+atp7197
+Rp7198
+sg46
+Nsg47
+Nsg48
+g7192
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp7199
+tp7200
+Rp7201
+(dp7202
+g59
+(lp7203
+sbsg61
+g42
+((lp7204
+tp7205
+Rp7206
+sg65
+g0
+(g66
+g2
+Ntp7207
+Rp7208
+(dp7209
+g70
+Nsg71
+Nsg72
+(dp7210
+sg74
+I00
+sbsg75
+g4
+sbsVsection
+p7211
+g0
+(g28
+g2
+Ntp7212
+Rp7213
+(dp7214
+g32
+g7211
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I331
+sg38
+g7165
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7215
+g7213
+atp7216
+Rp7217
+sg46
+Nsg47
+Nsg48
+g7211
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7218
+g0
+(g598
+g2
+Ntp7219
+Rp7220
+(dp7221
+g602
+g7213
+sg197
+Nsg603
+Nsg48
+Voverride_section
+p7222
+sg605
+Vsection.id
+p7223
+sg607
+g0
+(g608
+g2
+Ntp7224
+Rp7225
+(dp7226
+g612
+(lp7227
+g7223
+asg52
+Nsg603
+Nsg614
+g54
+((lp7228
+g7220
+atp7229
+Rp7230
+(dp7231
+g59
+(lp7232
+g7220
+asbsg48
+g7222
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp7233
+Vsection
+p7234
+asg38
+g7165
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp7235
+Rp7236
+(dp7237
+g23
+g0
+(g24
+g25
+(dp7238
+g7211
+g7213
+stp7239
+Rp7240
+(dp7241
+g59
+(lp7242
+g7211
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp7243
+Rp7244
+(dp7245
+g59
+(lp7246
+g7220
+asbsg61
+g42
+((lp7247
+tp7248
+Rp7249
+sg65
+g0
+(g114
+g2
+Ntp7250
+Rp7251
+(dp7252
+g72
+(dp7253
+sbsg75
+g4
+sbsVcreated
+p7254
+g0
+(g28
+g2
+Ntp7255
+Rp7256
+(dp7257
+g32
+g7254
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp7258
+Rp7259
+(dp7260
+g92
+g7256
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp7261
+Rp7262
+(dp7263
+g99
+Vnow()
+p7264
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp7265
+sbsbsg37
+I334
+sg38
+g7165
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7266
+g7256
+atp7267
+Rp7268
+sg46
+Nsg47
+Nsg48
+g7254
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7269
+tp7270
+Rp7271
+(dp7272
+g59
+(lp7273
+sbsg61
+g42
+((lp7274
+tp7275
+Rp7276
+sg65
+g0
+(g155
+g2
+Ntp7277
+Rp7278
+(dp7279
+g159
+I01
+sg72
+(dp7280
+sbsg75
+g4
+sbsVcomponent
+p7281
+g0
+(g28
+g2
+Ntp7282
+Rp7283
+(dp7284
+g37
+I329
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g7281
+sg38
+g7165
+sg1267
+g42
+((lp7285
+g7283
+atp7286
+Rp7287
+sg48
+g7281
+sg41
+g42
+((lp7288
+g7283
+atp7289
+Rp7290
+sg46
+Nsg39
+Nsg47
+Nsg40
+I01
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp7291
+g0
+(g598
+g2
+Ntp7292
+Rp7293
+(dp7294
+g602
+g7283
+sg197
+Nsg603
+Nsg48
+Voverride_component
+p7295
+sg605
+Vcomponent.id
+p7296
+sg607
+g0
+(g608
+g2
+Ntp7297
+Rp7298
+(dp7299
+g612
+(lp7300
+g7296
+asg52
+Nsg603
+Nsg614
+g54
+((lp7301
+g7293
+atp7302
+Rp7303
+(dp7304
+g59
+(lp7305
+g7293
+asbsg48
+g7295
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp7306
+Vcomponent
+p7307
+asg38
+g7165
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp7308
+Rp7309
+(dp7310
+g23
+g0
+(g24
+g25
+(dp7311
+g7281
+g7283
+stp7312
+Rp7313
+(dp7314
+g59
+(lp7315
+g7281
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg92
+g0
+(g28
+g2
+Ntp7316
+Rp7317
+(dp7318
+g37
+I166
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g0
+(g9
+g2
+Ntp7319
+Rp7320
+(dp7321
+g13
+g14
+(g15
+tp7322
+Rp7323
+sg18
+g0
+(g19
+g2
+Ntp7324
+Rp7325
+(dp7326
+g23
+g0
+(g24
+g25
+(dp7327
+Vdescription
+p7328
+g0
+(g28
+g2
+Ntp7329
+Rp7330
+(dp7331
+g32
+g7328
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I51
+sg38
+g7320
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7332
+g7330
+atp7333
+Rp7334
+sg46
+Nsg47
+Nsg48
+g7328
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7335
+tp7336
+Rp7337
+(dp7338
+g59
+(lp7339
+sbsg61
+g42
+((lp7340
+tp7341
+Rp7342
+sg65
+g0
+(g66
+g2
+Ntp7343
+Rp7344
+(dp7345
+g70
+Nsg71
+Nsg72
+(dp7346
+sg74
+I00
+sbsg75
+g4
+sbsVname
+p7347
+g0
+(g28
+g2
+Ntp7348
+Rp7349
+(dp7350
+g32
+g7347
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I50
+sg38
+g7320
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7351
+g7349
+atp7352
+Rp7353
+sg46
+Nsg47
+Nsg48
+g7347
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7354
+tp7355
+Rp7356
+(dp7357
+g59
+(lp7358
+sbsg61
+g42
+((lp7359
+tp7360
+Rp7361
+sg65
+g0
+(g66
+g2
+Ntp7362
+Rp7363
+(dp7364
+g70
+Nsg71
+Nsg72
+(dp7365
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p7366
+g0
+(g28
+g2
+Ntp7367
+Rp7368
+(dp7369
+g32
+g7366
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp7370
+Rp7371
+(dp7372
+g92
+g7368
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp7373
+Rp7374
+(dp7375
+g99
+Vnow()
+p7376
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp7377
+sbsbsg37
+I53
+sg38
+g7320
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7378
+g7368
+atp7379
+Rp7380
+sg46
+Nsg47
+Nsg48
+g7366
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7381
+tp7382
+Rp7383
+(dp7384
+g59
+(lp7385
+sbsg61
+g42
+((lp7386
+tp7387
+Rp7388
+sg65
+g0
+(g155
+g2
+Ntp7389
+Rp7390
+(dp7391
+g159
+I01
+sg72
+(dp7392
+sbsg75
+g4
+sbsVid
+p7393
+g7317
+sVmeets_dfsg
+p7394
+g0
+(g28
+g2
+Ntp7395
+Rp7396
+(dp7397
+g32
+g7394
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I52
+sg38
+g7320
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7398
+g7396
+atp7399
+Rp7400
+sg46
+Nsg47
+Nsg48
+g7394
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7401
+tp7402
+Rp7403
+(dp7404
+g59
+(lp7405
+sbsg61
+g42
+((lp7406
+tp7407
+Rp7408
+sg65
+g0
+(g877
+g2
+Ntp7409
+Rp7410
+(dp7411
+g72
+(dp7412
+sbsg75
+g4
+sbsVmodified
+p7413
+g0
+(g28
+g2
+Ntp7414
+Rp7415
+(dp7416
+g32
+g7413
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp7417
+Rp7418
+(dp7419
+g92
+g7415
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp7420
+Rp7421
+(dp7422
+g99
+Vnow()
+p7423
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp7424
+sbsbsg37
+I54
+sg38
+g7320
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7425
+g7415
+atp7426
+Rp7427
+sg46
+Nsg47
+Nsg48
+g7413
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7428
+tp7429
+Rp7430
+(dp7431
+g59
+(lp7432
+sbsg61
+g42
+((lp7433
+tp7434
+Rp7435
+sg65
+g0
+(g155
+g2
+Ntp7436
+Rp7437
+(dp7438
+g159
+I01
+sg72
+(dp7439
+sbsg75
+g4
+sbstp7440
+Rp7441
+(dp7442
+g59
+(lp7443
+g7393
+ag7347
+ag7328
+ag7394
+ag7366
+ag7413
+asbsbsg48
+Vcomponent
+p7444
+sg192
+g0
+(g193
+g2
+Ntp7445
+Rp7446
+(dp7447
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp7448
+Rp7449
+(dp7450
+g23
+g0
+(g24
+g25
+(dp7451
+g7393
+g7317
+stp7452
+Rp7453
+(dp7454
+g59
+(lp7455
+g7393
+asbsbsg208
+(lp7456
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp7457
+g0
+(g212
+g2
+Ntp7458
+Rp7459
+(dp7460
+g48
+S'component_name_key'
+p7461
+sg217
+(dp7462
+sg38
+g7320
+sg39
+I01
+sg199
+(lp7463
+g7349
+asg75
+g4
+sbatp7464
+Rp7465
+sg222
+g54
+((lp7466
+tp7467
+Rp7468
+(dp7469
+g59
+(lp7470
+sbsg228
+(lp7471
+sg217
+(dp7472
+sg231
+g7444
+sg232
+Nsg233
+Nsg61
+g42
+((lp7473
+g7446
+atp7474
+Rp7475
+sg237
+S'component'
+p7476
+sbsg39
+Nsg48
+g80
+sg41
+g42
+((lp7477
+g7317
+atp7478
+Rp7479
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp7480
+Rp7481
+(dp7482
+g32
+g7393
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp7483
+Rp7484
+(dp7485
+g92
+g7481
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp7486
+Rp7487
+(dp7488
+g99
+Vnextval(('component_id_seq'::text)::regclass)
+p7489
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp7490
+sbsbsg37
+I49
+sg38
+g7320
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g7393
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp7491
+tp7492
+Rp7493
+(dp7494
+g59
+(lp7495
+sbsg61
+g42
+((lp7496
+tp7497
+Rp7498
+sg65
+g0
+(g114
+g2
+Ntp7499
+Rp7500
+(dp7501
+g72
+(dp7502
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp7503
+tp7504
+Rp7505
+(dp7506
+g59
+(lp7507
+sbsg61
+g42
+((lp7508
+tp7509
+Rp7510
+sg65
+g0
+(g127
+g2
+Ntp7511
+Rp7512
+(dp7513
+g72
+(dp7514
+sbsg75
+g4
+sbsg624
+I00
+sbatp7515
+Rp7516
+(dp7517
+g59
+(lp7518
+g7293
+asbsg61
+g42
+((lp7519
+tp7520
+Rp7521
+sg65
+g0
+(g114
+g2
+Ntp7522
+Rp7523
+(dp7524
+g72
+(dp7525
+sbsg75
+g4
+sbsVmodified
+p7526
+g0
+(g28
+g2
+Ntp7527
+Rp7528
+(dp7529
+g32
+g7526
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp7530
+Rp7531
+(dp7532
+g92
+g7528
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp7533
+Rp7534
+(dp7535
+g99
+Vnow()
+p7536
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp7537
+sbsbsg37
+I335
+sg38
+g7165
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7538
+g7528
+atp7539
+Rp7540
+sg46
+Nsg47
+Nsg48
+g7526
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7541
+tp7542
+Rp7543
+(dp7544
+g59
+(lp7545
+sbsg61
+g42
+((lp7546
+tp7547
+Rp7548
+sg65
+g0
+(g155
+g2
+Ntp7549
+Rp7550
+(dp7551
+g159
+I01
+sg72
+(dp7552
+sbsg75
+g4
+sbsVpriority
+p7553
+g0
+(g28
+g2
+Ntp7554
+Rp7555
+(dp7556
+g32
+g7553
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I330
+sg38
+g7165
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7557
+g7555
+atp7558
+Rp7559
+sg46
+Nsg47
+Nsg48
+g7553
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7560
+g0
+(g598
+g2
+Ntp7561
+Rp7562
+(dp7563
+g602
+g7555
+sg197
+Nsg603
+Nsg48
+Voverride_priority
+p7564
+sg605
+Vpriority.id
+p7565
+sg607
+g0
+(g608
+g2
+Ntp7566
+Rp7567
+(dp7568
+g612
+(lp7569
+g7565
+asg52
+Nsg603
+Nsg614
+g54
+((lp7570
+g7562
+atp7571
+Rp7572
+(dp7573
+g59
+(lp7574
+g7562
+asbsg48
+g7564
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp7575
+Vpriority
+p7576
+asg38
+g7165
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp7577
+Rp7578
+(dp7579
+g23
+g0
+(g24
+g25
+(dp7580
+g7553
+g7555
+stp7581
+Rp7582
+(dp7583
+g59
+(lp7584
+g7553
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp7585
+Rp7586
+(dp7587
+g59
+(lp7588
+g7562
+asbsg61
+g42
+((lp7589
+tp7590
+Rp7591
+sg65
+g0
+(g114
+g2
+Ntp7592
+Rp7593
+(dp7594
+g72
+(dp7595
+sbsg75
+g4
+sbsVsuite
+p7596
+g0
+(g28
+g2
+Ntp7597
+Rp7598
+(dp7599
+g37
+I328
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g7596
+sg38
+g7165
+sg1267
+g42
+((lp7600
+g7598
+atp7601
+Rp7602
+sg48
+g7596
+sg41
+g42
+((lp7603
+g7598
+atp7604
+Rp7605
+sg46
+Nsg39
+Nsg47
+Nsg40
+I01
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp7606
+g0
+(g598
+g2
+Ntp7607
+Rp7608
+(dp7609
+g602
+g7598
+sg197
+Nsg603
+Nsg48
+Voverride_suite
+p7610
+sg605
+Vsuite.id
+p7611
+sg607
+g0
+(g608
+g2
+Ntp7612
+Rp7613
+(dp7614
+g612
+(lp7615
+g7611
+asg52
+Nsg603
+Nsg614
+g54
+((lp7616
+g7608
+atp7617
+Rp7618
+(dp7619
+g59
+(lp7620
+g7608
+asbsg48
+g7610
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp7621
+Vsuite
+p7622
+asg38
+g7165
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp7623
+Rp7624
+(dp7625
+g23
+g0
+(g24
+g25
+(dp7626
+g7596
+g7598
+stp7627
+Rp7628
+(dp7629
+g59
+(lp7630
+g7596
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg92
+g1300
+sg624
+I00
+sbatp7631
+Rp7632
+(dp7633
+g59
+(lp7634
+g7608
+asbsg61
+g42
+((lp7635
+tp7636
+Rp7637
+sg65
+g0
+(g114
+g2
+Ntp7638
+Rp7639
+(dp7640
+g72
+(dp7641
+sbsg75
+g4
+sbsVtype
+p7642
+g0
+(g28
+g2
+Ntp7643
+Rp7644
+(dp7645
+g37
+I332
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g7642
+sg38
+g7165
+sg1267
+g42
+((lp7646
+g7644
+atp7647
+Rp7648
+sg48
+g7642
+sg41
+g42
+((lp7649
+g7644
+atp7650
+Rp7651
+sg46
+Nsg39
+Nsg47
+Nsg40
+I01
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp7652
+g0
+(g598
+g2
+Ntp7653
+Rp7654
+(dp7655
+g602
+g7644
+sg197
+Nsg603
+Nsg48
+Voverride_type
+p7656
+sg605
+Voverride_type.id
+p7657
+sg607
+g0
+(g608
+g2
+Ntp7658
+Rp7659
+(dp7660
+g612
+(lp7661
+g7657
+asg52
+Nsg603
+Nsg614
+g54
+((lp7662
+g7654
+atp7663
+Rp7664
+(dp7665
+g59
+(lp7666
+g7654
+asbsg48
+g7656
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp7667
+Vtype
+p7668
+asg38
+g7165
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp7669
+Rp7670
+(dp7671
+g23
+g0
+(g24
+g25
+(dp7672
+g7642
+g7644
+stp7673
+Rp7674
+(dp7675
+g59
+(lp7676
+g7642
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg92
+g0
+(g28
+g2
+Ntp7677
+Rp7678
+(dp7679
+g37
+I251
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g0
+(g9
+g2
+Ntp7680
+Rp7681
+(dp7682
+g13
+g14
+(g15
+tp7683
+Rp7684
+sg18
+g0
+(g19
+g2
+Ntp7685
+Rp7686
+(dp7687
+g23
+g0
+(g24
+g25
+(dp7688
+Vcreated
+p7689
+g0
+(g28
+g2
+Ntp7690
+Rp7691
+(dp7692
+g32
+g7689
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp7693
+Rp7694
+(dp7695
+g92
+g7691
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp7696
+Rp7697
+(dp7698
+g99
+Vnow()
+p7699
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp7700
+sbsbsg37
+I254
+sg38
+g7681
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7701
+g7691
+atp7702
+Rp7703
+sg46
+Nsg47
+Nsg48
+g7689
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7704
+tp7705
+Rp7706
+(dp7707
+g59
+(lp7708
+sbsg61
+g42
+((lp7709
+tp7710
+Rp7711
+sg65
+g0
+(g155
+g2
+Ntp7712
+Rp7713
+(dp7714
+g159
+I01
+sg72
+(dp7715
+sbsg75
+g4
+sbsVtype
+p7716
+g0
+(g28
+g2
+Ntp7717
+Rp7718
+(dp7719
+g32
+g7716
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I253
+sg38
+g7681
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7720
+g7718
+atp7721
+Rp7722
+sg46
+Nsg47
+Nsg48
+g7716
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7723
+tp7724
+Rp7725
+(dp7726
+g59
+(lp7727
+sbsg61
+g42
+((lp7728
+tp7729
+Rp7730
+sg65
+g0
+(g66
+g2
+Ntp7731
+Rp7732
+(dp7733
+g70
+Nsg71
+Nsg72
+(dp7734
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p7735
+g7678
+sVmodified
+p7736
+g0
+(g28
+g2
+Ntp7737
+Rp7738
+(dp7739
+g32
+g7736
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp7740
+Rp7741
+(dp7742
+g92
+g7738
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp7743
+Rp7744
+(dp7745
+g99
+Vnow()
+p7746
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp7747
+sbsbsg37
+I255
+sg38
+g7681
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp7748
+g7738
+atp7749
+Rp7750
+sg46
+Nsg47
+Nsg48
+g7736
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7751
+tp7752
+Rp7753
+(dp7754
+g59
+(lp7755
+sbsg61
+g42
+((lp7756
+tp7757
+Rp7758
+sg65
+g0
+(g155
+g2
+Ntp7759
+Rp7760
+(dp7761
+g159
+I01
+sg72
+(dp7762
+sbsg75
+g4
+sbstp7763
+Rp7764
+(dp7765
+g59
+(lp7766
+g7735
+ag7716
+ag7689
+ag7736
+asbsbsg48
+S'override_type'
+p7767
+sg192
+g0
+(g193
+g2
+Ntp7768
+Rp7769
+(dp7770
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp7771
+Rp7772
+(dp7773
+g23
+g0
+(g24
+g25
+(dp7774
+g7735
+g7678
+stp7775
+Rp7776
+(dp7777
+g59
+(lp7778
+g7735
+asbsbsg208
+(lp7779
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp7780
+g0
+(g212
+g2
+Ntp7781
+Rp7782
+(dp7783
+g48
+S'override_type_type_key'
+p7784
+sg217
+(dp7785
+sg38
+g7681
+sg39
+I01
+sg199
+(lp7786
+g7718
+asg75
+g4
+sbatp7787
+Rp7788
+sg222
+g54
+((lp7789
+tp7790
+Rp7791
+(dp7792
+g59
+(lp7793
+sbsg228
+(lp7794
+sg217
+(dp7795
+sg231
+g7767
+sg232
+Nsg233
+Nsg61
+g42
+((lp7796
+g7769
+atp7797
+Rp7798
+sg237
+S'override_type'
+p7799
+sbsg39
+Nsg48
+g80
+sg41
+g42
+((lp7800
+g7678
+atp7801
+Rp7802
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp7803
+Rp7804
+(dp7805
+g32
+g7735
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp7806
+Rp7807
+(dp7808
+g92
+g7804
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp7809
+Rp7810
+(dp7811
+g99
+Vnextval(('override_type_id_seq'::text)::regclass)
+p7812
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp7813
+sbsbsg37
+I252
+sg38
+g7681
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g7735
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp7814
+tp7815
+Rp7816
+(dp7817
+g59
+(lp7818
+sbsg61
+g42
+((lp7819
+tp7820
+Rp7821
+sg65
+g0
+(g114
+g2
+Ntp7822
+Rp7823
+(dp7824
+g72
+(dp7825
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp7826
+tp7827
+Rp7828
+(dp7829
+g59
+(lp7830
+sbsg61
+g42
+((lp7831
+tp7832
+Rp7833
+sg65
+g0
+(g127
+g2
+Ntp7834
+Rp7835
+(dp7836
+g72
+(dp7837
+sbsg75
+g4
+sbsg624
+I00
+sbatp7838
+Rp7839
+(dp7840
+g59
+(lp7841
+g7654
+asbsg61
+g42
+((lp7842
+tp7843
+Rp7844
+sg65
+g0
+(g114
+g2
+Ntp7845
+Rp7846
+(dp7847
+g72
+(dp7848
+sbsg75
+g4
+sbstp7849
+Rp7850
+(dp7851
+g59
+(lp7852
+g7192
+ag7596
+ag7281
+ag7553
+ag7211
+ag7642
+ag7173
+ag7254
+ag7526
+asbsbsg48
+g7163
+sg192
+g0
+(g193
+g2
+Ntp7853
+Rp7854
+(dp7855
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp7856
+Rp7857
+(dp7858
+g23
+g0
+(g24
+g25
+(dp7859
+g7281
+g7283
+sg7596
+g7598
+sg7642
+g7644
+sg7192
+g7194
+stp7860
+Rp7861
+(dp7862
+g59
+(lp7863
+g7596
+ag7281
+ag7192
+ag7642
+asbsbsg208
+(lp7864
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp7865
+g0
+(g212
+g2
+Ntp7866
+Rp7867
+(dp7868
+g48
+S'jjt_override_type_idx'
+p7869
+sg217
+(dp7870
+sg38
+g7165
+sg39
+I00
+sg199
+(lp7871
+g7644
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp7872
+Rp7873
+(dp7874
+g48
+S'override_by_package'
+p7875
+sg217
+(dp7876
+sg38
+g7165
+sg39
+I00
+sg199
+(lp7877
+g7194
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp7878
+Rp7879
+(dp7880
+g48
+S'override_suite_key'
+p7881
+sg217
+(dp7882
+sg38
+g7165
+sg39
+I01
+sg199
+(lp7883
+g7598
+ag7283
+ag7194
+ag7644
+asg75
+g4
+sbatp7884
+Rp7885
+sg222
+g54
+((lp7886
+g7293
+ag7562
+ag7220
+ag7608
+ag7654
+atp7887
+Rp7888
+(dp7889
+g59
+(lp7890
+g7293
+ag7562
+ag7220
+ag7608
+ag7654
+asbsg228
+(lp7891
+sg217
+(dp7892
+sg231
+g7163
+sg232
+Nsg233
+Nsg61
+g42
+((lp7893
+g7298
+ag7613
+ag7659
+ag7854
+ag7567
+ag7225
+atp7894
+Rp7895
+sg237
+S'override'
+p7896
+sbsg1738
+g1303
+sS'newest_src_association'
+p7897
+g0
+(g9
+g2
+Ntp7898
+Rp7899
+(dp7900
+g13
+g14
+(g15
+tp7901
+Rp7902
+sg18
+g0
+(g19
+g2
+Ntp7903
+Rp7904
+(dp7905
+g23
+g0
+(g24
+g25
+(dp7906
+Vsource
+p7907
+g0
+(g28
+g2
+Ntp7908
+Rp7909
+(dp7910
+g32
+g7907
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I421
+sg38
+g7899
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g7907
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7911
+tp7912
+Rp7913
+(dp7914
+g59
+(lp7915
+sbsg61
+g42
+((lp7916
+tp7917
+Rp7918
+sg65
+g0
+(g66
+g2
+Ntp7919
+Rp7920
+(dp7921
+g70
+Nsg71
+Nsg72
+(dp7922
+sg74
+I00
+sbsg75
+g4
+sbsVsuite
+p7923
+g0
+(g28
+g2
+Ntp7924
+Rp7925
+(dp7926
+g32
+g7923
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I423
+sg38
+g7899
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g7923
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7927
+tp7928
+Rp7929
+(dp7930
+g59
+(lp7931
+sbsg61
+g42
+((lp7932
+tp7933
+Rp7934
+sg65
+g0
+(g114
+g2
+Ntp7935
+Rp7936
+(dp7937
+g72
+(dp7938
+sbsg75
+g4
+sbsVversion
+p7939
+g0
+(g28
+g2
+Ntp7940
+Rp7941
+(dp7942
+g32
+g7939
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I422
+sg38
+g7899
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g7939
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7943
+tp7944
+Rp7945
+(dp7946
+g59
+(lp7947
+sbsg61
+g42
+((lp7948
+tp7949
+Rp7950
+sg65
+g0
+(g2530
+g2
+Ntp7951
+Rp7952
+(dp7953
+g70
+Nsg71
+Nsg72
+(dp7954
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p7955
+g0
+(g28
+g2
+Ntp7956
+Rp7957
+(dp7958
+g32
+g7955
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I419
+sg38
+g7899
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g7955
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7959
+tp7960
+Rp7961
+(dp7962
+g59
+(lp7963
+sbsg61
+g42
+((lp7964
+tp7965
+Rp7966
+sg65
+g0
+(g114
+g2
+Ntp7967
+Rp7968
+(dp7969
+g72
+(dp7970
+sbsg75
+g4
+sbsVsrc
+p7971
+g0
+(g28
+g2
+Ntp7972
+Rp7973
+(dp7974
+g32
+g7971
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I420
+sg38
+g7899
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g7971
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp7975
+tp7976
+Rp7977
+(dp7978
+g59
+(lp7979
+sbsg61
+g42
+((lp7980
+tp7981
+Rp7982
+sg65
+g0
+(g114
+g2
+Ntp7983
+Rp7984
+(dp7985
+g72
+(dp7986
+sbsg75
+g4
+sbstp7987
+Rp7988
+(dp7989
+g59
+(lp7990
+g7955
+ag7971
+ag7907
+ag7939
+ag7923
+asbsbsg48
+g7897
+sg192
+g0
+(g193
+g2
+Ntp7991
+Rp7992
+(dp7993
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp7994
+Rp7995
+(dp7996
+g23
+g0
+(g24
+g25
+(dp7997
+tp7998
+Rp7999
+(dp8000
+g59
+(lp8001
+sbsbsg208
+(lp8002
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp8003
+tp8004
+Rp8005
+sg222
+g54
+((lp8006
+tp8007
+Rp8008
+(dp8009
+g59
+(lp8010
+sbsg228
+(lp8011
+sg217
+(dp8012
+sg231
+g7897
+sg61
+g42
+((lp8013
+g7992
+atp8014
+Rp8015
+sg233
+Nsg232
+NsbsS'config'
+p8016
+g0
+(g9
+g2
+Ntp8017
+Rp8018
+(dp8019
+g13
+g14
+(g15
+tp8020
+Rp8021
+sg18
+g0
+(g19
+g2
+Ntp8022
+Rp8023
+(dp8024
+g23
+g0
+(g24
+g25
+(dp8025
+Vid
+p8026
+g0
+(g28
+g2
+Ntp8027
+Rp8028
+(dp8029
+g37
+I167
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g8018
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp8030
+g8028
+atp8031
+Rp8032
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp8033
+Rp8034
+(dp8035
+g32
+g8026
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8036
+Rp8037
+(dp8038
+g92
+g8034
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp8039
+Rp8040
+(dp8041
+g99
+Vnextval('config_id_seq'::regclass)
+p8042
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp8043
+sbsbsg37
+I168
+sg38
+g8018
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g8026
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp8044
+tp8045
+Rp8046
+(dp8047
+g59
+(lp8048
+sbsg61
+g42
+((lp8049
+tp8050
+Rp8051
+sg65
+g0
+(g114
+g2
+Ntp8052
+Rp8053
+(dp8054
+g72
+(dp8055
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp8056
+tp8057
+Rp8058
+(dp8059
+g59
+(lp8060
+sbsg61
+g42
+((lp8061
+tp8062
+Rp8063
+sg65
+g0
+(g127
+g2
+Ntp8064
+Rp8065
+(dp8066
+g72
+(dp8067
+sbsg75
+g4
+sbsVname
+p8068
+g0
+(g28
+g2
+Ntp8069
+Rp8070
+(dp8071
+g32
+g8068
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I169
+sg38
+g8018
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8072
+g8070
+atp8073
+Rp8074
+sg46
+Nsg47
+Nsg48
+g8068
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8075
+tp8076
+Rp8077
+(dp8078
+g59
+(lp8079
+sbsg61
+g42
+((lp8080
+tp8081
+Rp8082
+sg65
+g0
+(g66
+g2
+Ntp8083
+Rp8084
+(dp8085
+g70
+Nsg71
+Nsg72
+(dp8086
+sg74
+I00
+sbsg75
+g4
+sbsVmodified
+p8087
+g0
+(g28
+g2
+Ntp8088
+Rp8089
+(dp8090
+g32
+g8087
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8091
+Rp8092
+(dp8093
+g92
+g8089
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp8094
+Rp8095
+(dp8096
+g99
+Vnow()
+p8097
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp8098
+sbsbsg37
+I172
+sg38
+g8018
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8099
+g8089
+atp8100
+Rp8101
+sg46
+Nsg47
+Nsg48
+g8087
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8102
+tp8103
+Rp8104
+(dp8105
+g59
+(lp8106
+sbsg61
+g42
+((lp8107
+tp8108
+Rp8109
+sg65
+g0
+(g155
+g2
+Ntp8110
+Rp8111
+(dp8112
+g159
+I01
+sg72
+(dp8113
+sbsg75
+g4
+sbsVvalue
+p8114
+g0
+(g28
+g2
+Ntp8115
+Rp8116
+(dp8117
+g32
+g8114
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I170
+sg38
+g8018
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8118
+g8116
+atp8119
+Rp8120
+sg46
+Nsg47
+Nsg48
+g8114
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8121
+tp8122
+Rp8123
+(dp8124
+g59
+(lp8125
+sbsg61
+g42
+((lp8126
+tp8127
+Rp8128
+sg65
+g0
+(g66
+g2
+Ntp8129
+Rp8130
+(dp8131
+g70
+Nsg71
+Nsg72
+(dp8132
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p8133
+g0
+(g28
+g2
+Ntp8134
+Rp8135
+(dp8136
+g32
+g8133
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8137
+Rp8138
+(dp8139
+g92
+g8135
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp8140
+Rp8141
+(dp8142
+g99
+Vnow()
+p8143
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp8144
+sbsbsg37
+I171
+sg38
+g8018
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8145
+g8135
+atp8146
+Rp8147
+sg46
+Nsg47
+Nsg48
+g8133
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8148
+tp8149
+Rp8150
+(dp8151
+g59
+(lp8152
+sbsg61
+g42
+((lp8153
+tp8154
+Rp8155
+sg65
+g0
+(g155
+g2
+Ntp8156
+Rp8157
+(dp8158
+g159
+I01
+sg72
+(dp8159
+sbsg75
+g4
+sbstp8160
+Rp8161
+(dp8162
+g59
+(lp8163
+g8026
+ag8068
+ag8114
+ag8133
+ag8087
+asbsbsg48
+g8016
+sg192
+g0
+(g193
+g2
+Ntp8164
+Rp8165
+(dp8166
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp8167
+Rp8168
+(dp8169
+g23
+g0
+(g24
+g25
+(dp8170
+g8026
+g8028
+stp8171
+Rp8172
+(dp8173
+g59
+(lp8174
+g8026
+asbsbsg208
+(lp8175
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp8176
+g0
+(g212
+g2
+Ntp8177
+Rp8178
+(dp8179
+g48
+S'config_name_key'
+p8180
+sg217
+(dp8181
+sg38
+g8018
+sg39
+I01
+sg199
+(lp8182
+g8070
+asg75
+g4
+sbatp8183
+Rp8184
+sg222
+g54
+((lp8185
+tp8186
+Rp8187
+(dp8188
+g59
+(lp8189
+sbsg228
+(lp8190
+sg217
+(dp8191
+sg231
+g8016
+sg232
+Nsg233
+Nsg61
+g42
+((lp8192
+g8165
+atp8193
+Rp8194
+sg237
+S'config'
+p8195
+sbsS'changes_pending_source_files'
+p8196
+g0
+(g9
+g2
+Ntp8197
+Rp8198
+(dp8199
+g13
+g14
+(g15
+tp8200
+Rp8201
+sg18
+g0
+(g19
+g2
+Ntp8202
+Rp8203
+(dp8204
+g23
+g0
+(g24
+g25
+(dp8205
+Vpending_file_id
+p8206
+g0
+(g28
+g2
+Ntp8207
+Rp8208
+(dp8209
+g32
+g8206
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I314
+sg38
+g8198
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g8206
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp8210
+g0
+(g598
+g2
+Ntp8211
+Rp8212
+(dp8213
+g602
+g8208
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_source_files_pending_file_id_fkey
+p8214
+sg605
+Vchanges_pending_files.id
+p8215
+sg607
+g0
+(g608
+g2
+Ntp8216
+Rp8217
+(dp8218
+g612
+(lp8219
+g8215
+asg52
+Nsg603
+Nsg614
+g54
+((lp8220
+g8212
+atp8221
+Rp8222
+(dp8223
+g59
+(lp8224
+g8212
+asbsg48
+g8214
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp8225
+Vpending_file_id
+p8226
+asg38
+g8198
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp8227
+Rp8228
+(dp8229
+g23
+g0
+(g24
+g25
+(dp8230
+g8206
+g8208
+stp8231
+Rp8232
+(dp8233
+g59
+(lp8234
+g8206
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp8235
+Rp8236
+(dp8237
+g59
+(lp8238
+g8212
+asbsg61
+g42
+((lp8239
+tp8240
+Rp8241
+sg65
+g0
+(g114
+g2
+Ntp8242
+Rp8243
+(dp8244
+g72
+(dp8245
+sbsg75
+g4
+sbsVpending_source_id
+p8246
+g0
+(g28
+g2
+Ntp8247
+Rp8248
+(dp8249
+g32
+g8246
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I313
+sg38
+g8198
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g8246
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp8250
+g0
+(g598
+g2
+Ntp8251
+Rp8252
+(dp8253
+g602
+g8248
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_source_files_pending_source_id_fkey
+p8254
+sg605
+Vchanges_pending_source.id
+p8255
+sg607
+g0
+(g608
+g2
+Ntp8256
+Rp8257
+(dp8258
+g612
+(lp8259
+g8255
+asg52
+Nsg603
+Nsg614
+g54
+((lp8260
+g8252
+atp8261
+Rp8262
+(dp8263
+g59
+(lp8264
+g8252
+asbsg48
+g8254
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp8265
+Vpending_source_id
+p8266
+asg38
+g8198
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp8267
+Rp8268
+(dp8269
+g23
+g0
+(g24
+g25
+(dp8270
+g8246
+g8248
+stp8271
+Rp8272
+(dp8273
+g59
+(lp8274
+g8246
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp8275
+Rp8276
+(dp8277
+g59
+(lp8278
+g8252
+asbsg61
+g42
+((lp8279
+tp8280
+Rp8281
+sg65
+g0
+(g114
+g2
+Ntp8282
+Rp8283
+(dp8284
+g72
+(dp8285
+sbsg75
+g4
+sbsVmodified
+p8286
+g0
+(g28
+g2
+Ntp8287
+Rp8288
+(dp8289
+g32
+g8286
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8290
+Rp8291
+(dp8292
+g92
+g8288
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp8293
+Rp8294
+(dp8295
+g99
+Vnow()
+p8296
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp8297
+sbsbsg37
+I316
+sg38
+g8198
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g8286
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8298
+tp8299
+Rp8300
+(dp8301
+g59
+(lp8302
+sbsg61
+g42
+((lp8303
+tp8304
+Rp8305
+sg65
+g0
+(g155
+g2
+Ntp8306
+Rp8307
+(dp8308
+g159
+I01
+sg72
+(dp8309
+sbsg75
+g4
+sbsVcreated
+p8310
+g0
+(g28
+g2
+Ntp8311
+Rp8312
+(dp8313
+g32
+g8310
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8314
+Rp8315
+(dp8316
+g92
+g8312
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp8317
+Rp8318
+(dp8319
+g99
+Vnow()
+p8320
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp8321
+sbsbsg37
+I315
+sg38
+g8198
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g8310
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8322
+tp8323
+Rp8324
+(dp8325
+g59
+(lp8326
+sbsg61
+g42
+((lp8327
+tp8328
+Rp8329
+sg65
+g0
+(g155
+g2
+Ntp8330
+Rp8331
+(dp8332
+g159
+I01
+sg72
+(dp8333
+sbsg75
+g4
+sbstp8334
+Rp8335
+(dp8336
+g59
+(lp8337
+g8246
+ag8206
+ag8310
+ag8286
+asbsbsg48
+g8196
+sg192
+g0
+(g193
+g2
+Ntp8338
+Rp8339
+(dp8340
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp8341
+Rp8342
+(dp8343
+g23
+g0
+(g24
+g25
+(dp8344
+g8206
+g8208
+sg8246
+g8248
+stp8345
+Rp8346
+(dp8347
+g59
+(lp8348
+g8246
+ag8206
+asbsbsg208
+(lp8349
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp8350
+tp8351
+Rp8352
+sg222
+g54
+((lp8353
+g8212
+ag8252
+atp8354
+Rp8355
+(dp8356
+g59
+(lp8357
+g8212
+ag8252
+asbsg228
+(lp8358
+sg217
+(dp8359
+sg231
+g8196
+sg61
+g42
+((lp8360
+g8339
+ag8217
+ag8257
+atp8361
+Rp8362
+sg233
+Nsg232
+NsbsVfiles
+p8363
+g0
+(g9
+g2
+Ntp8364
+Rp8365
+(dp8366
+g13
+g14
+(g15
+tp8367
+Rp8368
+sg18
+g0
+(g19
+g2
+Ntp8369
+Rp8370
+(dp8371
+g23
+g0
+(g24
+g25
+(dp8372
+Vsize
+p8373
+g0
+(g28
+g2
+Ntp8374
+Rp8375
+(dp8376
+g32
+g8373
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I34
+sg38
+g8365
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8377
+g8375
+atp8378
+Rp8379
+sg46
+Nsg47
+Nsg48
+g8373
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8380
+tp8381
+Rp8382
+(dp8383
+g59
+(lp8384
+sbsg61
+g42
+((lp8385
+tp8386
+Rp8387
+sg65
+g0
+(csqlalchemy.databases.postgres
+PGBigInteger
+p8388
+g2
+Ntp8389
+Rp8390
+(dp8391
+g72
+(dp8392
+sbsg75
+g4
+sbsVlast_used
+p8393
+g0
+(g28
+g2
+Ntp8394
+Rp8395
+(dp8396
+g32
+g8393
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I37
+sg38
+g8365
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8397
+g8395
+atp8398
+Rp8399
+sg46
+Nsg47
+Nsg48
+g8393
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8400
+tp8401
+Rp8402
+(dp8403
+g59
+(lp8404
+sbsg61
+g42
+((lp8405
+tp8406
+Rp8407
+sg65
+g0
+(g155
+g2
+Ntp8408
+Rp8409
+(dp8410
+g159
+I01
+sg72
+(dp8411
+sbsg75
+g4
+sbsVcreated
+p8412
+g0
+(g28
+g2
+Ntp8413
+Rp8414
+(dp8415
+g32
+g8412
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8416
+Rp8417
+(dp8418
+g92
+g8414
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp8419
+Rp8420
+(dp8421
+g99
+Vnow()
+p8422
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp8423
+sbsbsg37
+I40
+sg38
+g8365
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8424
+g8414
+atp8425
+Rp8426
+sg46
+Nsg47
+Nsg48
+g8412
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8427
+tp8428
+Rp8429
+(dp8430
+g59
+(lp8431
+sbsg61
+g42
+((lp8432
+tp8433
+Rp8434
+sg65
+g0
+(g155
+g2
+Ntp8435
+Rp8436
+(dp8437
+g159
+I01
+sg72
+(dp8438
+sbsg75
+g4
+sbsVmd5sum
+p8439
+g0
+(g28
+g2
+Ntp8440
+Rp8441
+(dp8442
+g32
+g8439
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I35
+sg38
+g8365
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8443
+g8441
+atp8444
+Rp8445
+sg46
+Nsg47
+Nsg48
+g8439
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8446
+tp8447
+Rp8448
+(dp8449
+g59
+(lp8450
+sbsg61
+g42
+((lp8451
+tp8452
+Rp8453
+sg65
+g0
+(g66
+g2
+Ntp8454
+Rp8455
+(dp8456
+g70
+Nsg71
+Nsg72
+(dp8457
+sg74
+I00
+sbsg75
+g4
+sbsVmodified
+p8458
+g0
+(g28
+g2
+Ntp8459
+Rp8460
+(dp8461
+g32
+g8458
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8462
+Rp8463
+(dp8464
+g92
+g8460
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp8465
+Rp8466
+(dp8467
+g99
+Vnow()
+p8468
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp8469
+sbsbsg37
+I41
+sg38
+g8365
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8470
+g8460
+atp8471
+Rp8472
+sg46
+Nsg47
+Nsg48
+g8458
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8473
+tp8474
+Rp8475
+(dp8476
+g59
+(lp8477
+sbsg61
+g42
+((lp8478
+tp8479
+Rp8480
+sg65
+g0
+(g155
+g2
+Ntp8481
+Rp8482
+(dp8483
+g159
+I01
+sg72
+(dp8484
+sbsg75
+g4
+sbsVfilename
+p8485
+g0
+(g28
+g2
+Ntp8486
+Rp8487
+(dp8488
+g32
+g8485
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I33
+sg38
+g8365
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8489
+g8487
+atp8490
+Rp8491
+sg46
+Nsg47
+Nsg48
+g8485
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8492
+tp8493
+Rp8494
+(dp8495
+g59
+(lp8496
+sbsg61
+g42
+((lp8497
+tp8498
+Rp8499
+sg65
+g0
+(g66
+g2
+Ntp8500
+Rp8501
+(dp8502
+g70
+Nsg71
+Nsg72
+(dp8503
+sg74
+I00
+sbsg75
+g4
+sbsVlocation
+p8504
+g0
+(g28
+g2
+Ntp8505
+Rp8506
+(dp8507
+g32
+g8504
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I36
+sg38
+g8365
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8508
+g8506
+atp8509
+Rp8510
+sg46
+Nsg47
+Nsg48
+g8504
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8511
+g0
+(g598
+g2
+Ntp8512
+Rp8513
+(dp8514
+g602
+g8506
+sg197
+Nsg603
+Nsg48
+Vfiles_location
+p8515
+sg605
+Vlocation.id
+p8516
+sg607
+g0
+(g608
+g2
+Ntp8517
+Rp8518
+(dp8519
+g612
+(lp8520
+g8516
+asg52
+Nsg603
+Nsg614
+g54
+((lp8521
+g8513
+atp8522
+Rp8523
+(dp8524
+g59
+(lp8525
+g8513
+asbsg48
+g8515
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp8526
+Vlocation
+p8527
+asg38
+g8365
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp8528
+Rp8529
+(dp8530
+g23
+g0
+(g24
+g25
+(dp8531
+g8504
+g8506
+stp8532
+Rp8533
+(dp8534
+g59
+(lp8535
+g8504
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp8536
+Rp8537
+(dp8538
+g59
+(lp8539
+g8513
+asbsg61
+g42
+((lp8540
+tp8541
+Rp8542
+sg65
+g0
+(g114
+g2
+Ntp8543
+Rp8544
+(dp8545
+g72
+(dp8546
+sbsg75
+g4
+sbsVsha256sum
+p8547
+g0
+(g28
+g2
+Ntp8548
+Rp8549
+(dp8550
+g32
+g8547
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I39
+sg38
+g8365
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8551
+g8549
+atp8552
+Rp8553
+sg46
+Nsg47
+Nsg48
+g8547
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8554
+tp8555
+Rp8556
+(dp8557
+g59
+(lp8558
+sbsg61
+g42
+((lp8559
+tp8560
+Rp8561
+sg65
+g0
+(g66
+g2
+Ntp8562
+Rp8563
+(dp8564
+g70
+Nsg71
+Nsg72
+(dp8565
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p8566
+g0
+(g28
+g2
+Ntp8567
+Rp8568
+(dp8569
+g37
+I229
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g8365
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp8570
+g8568
+atp8571
+Rp8572
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp8573
+Rp8574
+(dp8575
+g32
+g8566
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8576
+Rp8577
+(dp8578
+g92
+g8574
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp8579
+Rp8580
+(dp8581
+g99
+Vnextval(('files_id_seq'::text)::regclass)
+p8582
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp8583
+sbsbsg37
+I32
+sg38
+g8365
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g8566
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp8584
+tp8585
+Rp8586
+(dp8587
+g59
+(lp8588
+sbsg61
+g42
+((lp8589
+tp8590
+Rp8591
+sg65
+g0
+(g114
+g2
+Ntp8592
+Rp8593
+(dp8594
+g72
+(dp8595
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp8596
+tp8597
+Rp8598
+(dp8599
+g59
+(lp8600
+sbsg61
+g42
+((lp8601
+tp8602
+Rp8603
+sg65
+g0
+(g127
+g2
+Ntp8604
+Rp8605
+(dp8606
+g72
+(dp8607
+sbsg75
+g4
+sbsVsha1sum
+p8608
+g0
+(g28
+g2
+Ntp8609
+Rp8610
+(dp8611
+g32
+g8608
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I38
+sg38
+g8365
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8612
+g8610
+atp8613
+Rp8614
+sg46
+Nsg47
+Nsg48
+g8608
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8615
+tp8616
+Rp8617
+(dp8618
+g59
+(lp8619
+sbsg61
+g42
+((lp8620
+tp8621
+Rp8622
+sg65
+g0
+(g66
+g2
+Ntp8623
+Rp8624
+(dp8625
+g70
+Nsg71
+Nsg72
+(dp8626
+sg74
+I00
+sbsg75
+g4
+sbstp8627
+Rp8628
+(dp8629
+g59
+(lp8630
+g8566
+ag8485
+ag8373
+ag8439
+ag8504
+ag8393
+ag8608
+ag8547
+ag8412
+ag8458
+asbsbsg48
+g8363
+sg192
+g0
+(g193
+g2
+Ntp8631
+Rp8632
+(dp8633
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp8634
+Rp8635
+(dp8636
+g23
+g0
+(g24
+g25
+(dp8637
+g8566
+g8568
+stp8638
+Rp8639
+(dp8640
+g59
+(lp8641
+g8566
+asbsbsg208
+(lp8642
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp8643
+g0
+(g212
+g2
+Ntp8644
+Rp8645
+(dp8646
+g48
+S'jjt3'
+p8647
+sg217
+(dp8648
+sg38
+g8365
+sg39
+I00
+sg199
+(lp8649
+g8574
+ag8506
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp8650
+Rp8651
+(dp8652
+g48
+S'jjt'
+p8653
+sg217
+(dp8654
+sg38
+g8365
+sg39
+I00
+sg199
+(lp8655
+g8574
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp8656
+Rp8657
+(dp8658
+g48
+S'files_last_used'
+p8659
+sg217
+(dp8660
+sg38
+g8365
+sg39
+I00
+sg199
+(lp8661
+g8395
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp8662
+Rp8663
+(dp8664
+g48
+S'jjt2'
+p8665
+sg217
+(dp8666
+sg38
+g8365
+sg39
+I00
+sg199
+(lp8667
+g8506
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp8668
+Rp8669
+(dp8670
+g48
+S'files_filename_key'
+p8671
+sg217
+(dp8672
+sg38
+g8365
+sg39
+I01
+sg199
+(lp8673
+g8487
+ag8506
+asg75
+g4
+sbatp8674
+Rp8675
+sg222
+g54
+((lp8676
+g8513
+atp8677
+Rp8678
+(dp8679
+g59
+(lp8680
+g8513
+asbsg228
+(lp8681
+sg217
+(dp8682
+sg231
+g8363
+sg232
+Nsg233
+Nsg61
+g42
+((lp8683
+g8632
+ag8518
+atp8684
+Rp8685
+sg237
+S'files'
+p8686
+sbsS'binfiles_suite_component_arch'
+p8687
+g0
+(g9
+g2
+Ntp8688
+Rp8689
+(dp8690
+g13
+g14
+(g15
+tp8691
+Rp8692
+sg18
+g0
+(g19
+g2
+Ntp8693
+Rp8694
+(dp8695
+g23
+g0
+(g24
+g25
+(dp8696
+Vtype
+p8697
+g0
+(g28
+g2
+Ntp8698
+Rp8699
+(dp8700
+g32
+g8697
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I393
+sg38
+g8689
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g8697
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8701
+tp8702
+Rp8703
+(dp8704
+g59
+(lp8705
+sbsg61
+g42
+((lp8706
+tp8707
+Rp8708
+sg65
+g0
+(g66
+g2
+Ntp8709
+Rp8710
+(dp8711
+g70
+Nsg71
+Nsg72
+(dp8712
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture
+p8713
+g0
+(g28
+g2
+Ntp8714
+Rp8715
+(dp8716
+g32
+g8713
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I397
+sg38
+g8689
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g8713
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8717
+tp8718
+Rp8719
+(dp8720
+g59
+(lp8721
+sbsg61
+g42
+((lp8722
+tp8723
+Rp8724
+sg65
+g0
+(g114
+g2
+Ntp8725
+Rp8726
+(dp8727
+g72
+(dp8728
+sbsg75
+g4
+sbsVpath
+p8729
+g0
+(g28
+g2
+Ntp8730
+Rp8731
+(dp8732
+g32
+g8729
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I394
+sg38
+g8689
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g8729
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8733
+tp8734
+Rp8735
+(dp8736
+g59
+(lp8737
+sbsg61
+g42
+((lp8738
+tp8739
+Rp8740
+sg65
+g0
+(g66
+g2
+Ntp8741
+Rp8742
+(dp8743
+g70
+Nsg71
+Nsg72
+(dp8744
+sg74
+I00
+sbsg75
+g4
+sbsVsuite
+p8745
+g0
+(g28
+g2
+Ntp8746
+Rp8747
+(dp8748
+g32
+g8745
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I396
+sg38
+g8689
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g8745
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8749
+tp8750
+Rp8751
+(dp8752
+g59
+(lp8753
+sbsg61
+g42
+((lp8754
+tp8755
+Rp8756
+sg65
+g0
+(g114
+g2
+Ntp8757
+Rp8758
+(dp8759
+g72
+(dp8760
+sbsg75
+g4
+sbsVcomponent
+p8761
+g0
+(g28
+g2
+Ntp8762
+Rp8763
+(dp8764
+g32
+g8761
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I395
+sg38
+g8689
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g8761
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8765
+tp8766
+Rp8767
+(dp8768
+g59
+(lp8769
+sbsg61
+g42
+((lp8770
+tp8771
+Rp8772
+sg65
+g0
+(g114
+g2
+Ntp8773
+Rp8774
+(dp8775
+g72
+(dp8776
+sbsg75
+g4
+sbsVfilename
+p8777
+g0
+(g28
+g2
+Ntp8778
+Rp8779
+(dp8780
+g32
+g8777
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I392
+sg38
+g8689
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g8777
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8781
+tp8782
+Rp8783
+(dp8784
+g59
+(lp8785
+sbsg61
+g42
+((lp8786
+tp8787
+Rp8788
+sg65
+g0
+(g66
+g2
+Ntp8789
+Rp8790
+(dp8791
+g70
+Nsg71
+Nsg72
+(dp8792
+sg74
+I00
+sbsg75
+g4
+sbstp8793
+Rp8794
+(dp8795
+g59
+(lp8796
+g8777
+ag8697
+ag8729
+ag8761
+ag8745
+ag8713
+asbsbsg48
+g8687
+sg192
+g0
+(g193
+g2
+Ntp8797
+Rp8798
+(dp8799
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp8800
+Rp8801
+(dp8802
+g23
+g0
+(g24
+g25
+(dp8803
+tp8804
+Rp8805
+(dp8806
+g59
+(lp8807
+sbsbsg208
+(lp8808
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp8809
+tp8810
+Rp8811
+sg222
+g54
+((lp8812
+tp8813
+Rp8814
+(dp8815
+g59
+(lp8816
+sbsg228
+(lp8817
+sg217
+(dp8818
+sg231
+g8687
+sg61
+g42
+((lp8819
+g8798
+atp8820
+Rp8821
+sg233
+Nsg232
+NsbsVchanges_pending_files
+p8822
+g0
+(g9
+g2
+Ntp8823
+Rp8824
+(dp8825
+g13
+g14
+(g15
+tp8826
+Rp8827
+sg18
+g0
+(g19
+g2
+Ntp8828
+Rp8829
+(dp8830
+g23
+g0
+(g24
+g25
+(dp8831
+Vcreated
+p8832
+g0
+(g28
+g2
+Ntp8833
+Rp8834
+(dp8835
+g32
+g8832
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8836
+Rp8837
+(dp8838
+g92
+g8834
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp8839
+Rp8840
+(dp8841
+g99
+Vnow()
+p8842
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp8843
+sbsbsg37
+I208
+sg38
+g8824
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8844
+g8834
+atp8845
+Rp8846
+sg46
+Nsg47
+Nsg48
+g8832
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8847
+tp8848
+Rp8849
+(dp8850
+g59
+(lp8851
+sbsg61
+g42
+((lp8852
+tp8853
+Rp8854
+sg65
+g0
+(g155
+g2
+Ntp8855
+Rp8856
+(dp8857
+g159
+I01
+sg72
+(dp8858
+sbsg75
+g4
+sbsVmd5sum
+p8859
+g0
+(g28
+g2
+Ntp8860
+Rp8861
+(dp8862
+g32
+g8859
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I205
+sg38
+g8824
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8863
+g8861
+atp8864
+Rp8865
+sg46
+Nsg47
+Nsg48
+g8859
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8866
+tp8867
+Rp8868
+(dp8869
+g59
+(lp8870
+sbsg61
+g42
+((lp8871
+tp8872
+Rp8873
+sg65
+g0
+(g66
+g2
+Ntp8874
+Rp8875
+(dp8876
+g70
+Nsg71
+Nsg72
+(dp8877
+sg74
+I00
+sbsg75
+g4
+sbsVmodified
+p8878
+g0
+(g28
+g2
+Ntp8879
+Rp8880
+(dp8881
+g32
+g8878
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8882
+Rp8883
+(dp8884
+g92
+g8880
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp8885
+Rp8886
+(dp8887
+g99
+Vnow()
+p8888
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp8889
+sbsbsg37
+I209
+sg38
+g8824
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8890
+g8880
+atp8891
+Rp8892
+sg46
+Nsg47
+Nsg48
+g8878
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8893
+tp8894
+Rp8895
+(dp8896
+g59
+(lp8897
+sbsg61
+g42
+((lp8898
+tp8899
+Rp8900
+sg65
+g0
+(g155
+g2
+Ntp8901
+Rp8902
+(dp8903
+g159
+I01
+sg72
+(dp8904
+sbsg75
+g4
+sbsVfilename
+p8905
+g0
+(g28
+g2
+Ntp8906
+Rp8907
+(dp8908
+g32
+g8905
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I203
+sg38
+g8824
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8909
+g8907
+atp8910
+Rp8911
+sg46
+Nsg47
+Nsg48
+g8905
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8912
+tp8913
+Rp8914
+(dp8915
+g59
+(lp8916
+sbsg61
+g42
+((lp8917
+tp8918
+Rp8919
+sg65
+g0
+(g66
+g2
+Ntp8920
+Rp8921
+(dp8922
+g70
+Nsg71
+Nsg72
+(dp8923
+sg74
+I00
+sbsg75
+g4
+sbsVprocessed
+p8924
+g0
+(g28
+g2
+Ntp8925
+Rp8926
+(dp8927
+g32
+g8924
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8928
+Rp8929
+(dp8930
+g92
+g8926
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp8931
+Rp8932
+(dp8933
+g99
+Vfalse
+p8934
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp8935
+sbsbsg37
+I210
+sg38
+g8824
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8936
+g8926
+atp8937
+Rp8938
+sg46
+Nsg47
+Nsg48
+g8924
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8939
+tp8940
+Rp8941
+(dp8942
+g59
+(lp8943
+sbsg61
+g42
+((lp8944
+tp8945
+Rp8946
+sg65
+g0
+(g877
+g2
+Ntp8947
+Rp8948
+(dp8949
+g72
+(dp8950
+sbsg75
+g4
+sbsVsha1sum
+p8951
+g0
+(g28
+g2
+Ntp8952
+Rp8953
+(dp8954
+g32
+g8951
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I206
+sg38
+g8824
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8955
+g8953
+atp8956
+Rp8957
+sg46
+Nsg47
+Nsg48
+g8951
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8958
+tp8959
+Rp8960
+(dp8961
+g59
+(lp8962
+sbsg61
+g42
+((lp8963
+tp8964
+Rp8965
+sg65
+g0
+(g66
+g2
+Ntp8966
+Rp8967
+(dp8968
+g70
+Nsg71
+Nsg72
+(dp8969
+sg74
+I00
+sbsg75
+g4
+sbsVsha256sum
+p8970
+g0
+(g28
+g2
+Ntp8971
+Rp8972
+(dp8973
+g32
+g8970
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I207
+sg38
+g8824
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp8974
+g8972
+atp8975
+Rp8976
+sg46
+Nsg47
+Nsg48
+g8970
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp8977
+tp8978
+Rp8979
+(dp8980
+g59
+(lp8981
+sbsg61
+g42
+((lp8982
+tp8983
+Rp8984
+sg65
+g0
+(g66
+g2
+Ntp8985
+Rp8986
+(dp8987
+g70
+Nsg71
+Nsg72
+(dp8988
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p8989
+g0
+(g28
+g2
+Ntp8990
+Rp8991
+(dp8992
+g37
+I221
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g8824
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp8993
+g8991
+atp8994
+Rp8995
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp8996
+Rp8997
+(dp8998
+g32
+g8989
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp8999
+Rp9000
+(dp9001
+g92
+g8997
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp9002
+Rp9003
+(dp9004
+g99
+Vnextval('changes_pending_files_id_seq'::regclass)
+p9005
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp9006
+sbsbsg37
+I202
+sg38
+g8824
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g8989
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp9007
+tp9008
+Rp9009
+(dp9010
+g59
+(lp9011
+sbsg61
+g42
+((lp9012
+tp9013
+Rp9014
+sg65
+g0
+(g114
+g2
+Ntp9015
+Rp9016
+(dp9017
+g72
+(dp9018
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp9019
+tp9020
+Rp9021
+(dp9022
+g59
+(lp9023
+sbsg61
+g42
+((lp9024
+tp9025
+Rp9026
+sg65
+g0
+(g127
+g2
+Ntp9027
+Rp9028
+(dp9029
+g72
+(dp9030
+sbsg75
+g4
+sbsVsize
+p9031
+g0
+(g28
+g2
+Ntp9032
+Rp9033
+(dp9034
+g32
+g9031
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I204
+sg38
+g8824
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp9035
+g9033
+atp9036
+Rp9037
+sg46
+Nsg47
+Nsg48
+g9031
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9038
+tp9039
+Rp9040
+(dp9041
+g59
+(lp9042
+sbsg61
+g42
+((lp9043
+tp9044
+Rp9045
+sg65
+g0
+(g8388
+g2
+Ntp9046
+Rp9047
+(dp9048
+g72
+(dp9049
+sbsg75
+g4
+sbstp9050
+Rp9051
+(dp9052
+g59
+(lp9053
+g8989
+ag8905
+ag9031
+ag8859
+ag8951
+ag8970
+ag8832
+ag8878
+ag8924
+asbsbsg48
+g8822
+sg192
+g0
+(g193
+g2
+Ntp9054
+Rp9055
+(dp9056
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp9057
+Rp9058
+(dp9059
+g23
+g0
+(g24
+g25
+(dp9060
+g8989
+g8991
+stp9061
+Rp9062
+(dp9063
+g59
+(lp9064
+g8989
+asbsbsg208
+(lp9065
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp9066
+g0
+(g212
+g2
+Ntp9067
+Rp9068
+(dp9069
+g48
+S'changes_pending_files_filename_key'
+p9070
+sg217
+(dp9071
+sg38
+g8824
+sg39
+I01
+sg199
+(lp9072
+g8907
+asg75
+g4
+sbatp9073
+Rp9074
+sg222
+g54
+((lp9075
+tp9076
+Rp9077
+(dp9078
+g59
+(lp9079
+sbsg228
+(lp9080
+sg217
+(dp9081
+sg231
+g8822
+sg232
+Nsg233
+Nsg61
+g42
+((lp9082
+g9055
+atp9083
+Rp9084
+sg237
+S'changes_pending_files'
+p9085
+sbsS'suite_architectures'
+p9086
+g0
+(g9
+g2
+Ntp9087
+Rp9088
+(dp9089
+g13
+g14
+(g15
+tp9090
+Rp9091
+sg18
+g0
+(g19
+g2
+Ntp9092
+Rp9093
+(dp9094
+g23
+g0
+(g24
+g25
+(dp9095
+Vsuite
+p9096
+g0
+(g28
+g2
+Ntp9097
+Rp9098
+(dp9099
+g37
+I336
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g9096
+sg38
+g9088
+sg1267
+g42
+((lp9100
+g9098
+atp9101
+Rp9102
+sg48
+g9096
+sg41
+g42
+((lp9103
+g9098
+atp9104
+Rp9105
+sg46
+Nsg39
+Nsg47
+Nsg40
+I01
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp9106
+g0
+(g598
+g2
+Ntp9107
+Rp9108
+(dp9109
+g602
+g9098
+sg197
+Nsg603
+Nsg48
+Vsuite_architectures_suite
+p9110
+sg605
+Vsuite.id
+p9111
+sg607
+g0
+(g608
+g2
+Ntp9112
+Rp9113
+(dp9114
+g612
+(lp9115
+g9111
+asg52
+Nsg603
+Nsg614
+g54
+((lp9116
+g9108
+atp9117
+Rp9118
+(dp9119
+g59
+(lp9120
+g9108
+asbsg48
+g9110
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp9121
+Vsuite
+p9122
+asg38
+g9088
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp9123
+Rp9124
+(dp9125
+g23
+g0
+(g24
+g25
+(dp9126
+g9096
+g9098
+stp9127
+Rp9128
+(dp9129
+g59
+(lp9130
+g9096
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg92
+g1300
+sg624
+I00
+sbatp9131
+Rp9132
+(dp9133
+g59
+(lp9134
+g9108
+asbsg61
+g42
+((lp9135
+tp9136
+Rp9137
+sg65
+g0
+(g114
+g2
+Ntp9138
+Rp9139
+(dp9140
+g72
+(dp9141
+sbsg75
+g4
+sbsVcreated
+p9142
+g0
+(g28
+g2
+Ntp9143
+Rp9144
+(dp9145
+g32
+g9142
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp9146
+Rp9147
+(dp9148
+g92
+g9144
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp9149
+Rp9150
+(dp9151
+g99
+Vnow()
+p9152
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp9153
+sbsbsg37
+I338
+sg38
+g9088
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp9154
+g9144
+atp9155
+Rp9156
+sg46
+Nsg47
+Nsg48
+g9142
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9157
+tp9158
+Rp9159
+(dp9160
+g59
+(lp9161
+sbsg61
+g42
+((lp9162
+tp9163
+Rp9164
+sg65
+g0
+(g155
+g2
+Ntp9165
+Rp9166
+(dp9167
+g159
+I01
+sg72
+(dp9168
+sbsg75
+g4
+sbsVarchitecture
+p9169
+g0
+(g28
+g2
+Ntp9170
+Rp9171
+(dp9172
+g37
+I337
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g9169
+sg38
+g9088
+sg1267
+g42
+((lp9173
+g9171
+atp9174
+Rp9175
+sg48
+g9169
+sg41
+g42
+((lp9176
+g9171
+atp9177
+Rp9178
+sg46
+Nsg39
+Nsg47
+Nsg40
+I01
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp9179
+g0
+(g598
+g2
+Ntp9180
+Rp9181
+(dp9182
+g602
+g9171
+sg197
+Nsg603
+Nsg48
+Vsuite_architectures_architectur
+p9183
+sg605
+Varchitecture.id
+p9184
+sg607
+g0
+(g608
+g2
+Ntp9185
+Rp9186
+(dp9187
+g612
+(lp9188
+g9184
+asg52
+Nsg603
+Nsg614
+g54
+((lp9189
+g9181
+atp9190
+Rp9191
+(dp9192
+g59
+(lp9193
+g9181
+asbsg48
+g9183
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp9194
+Varchitecture
+p9195
+asg38
+g9088
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp9196
+Rp9197
+(dp9198
+g23
+g0
+(g24
+g25
+(dp9199
+g9169
+g9171
+stp9200
+Rp9201
+(dp9202
+g59
+(lp9203
+g9169
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg92
+g1875
+sg624
+I00
+sbatp9204
+Rp9205
+(dp9206
+g59
+(lp9207
+g9181
+asbsg61
+g42
+((lp9208
+tp9209
+Rp9210
+sg65
+g0
+(g114
+g2
+Ntp9211
+Rp9212
+(dp9213
+g72
+(dp9214
+sbsg75
+g4
+sbsVmodified
+p9215
+g0
+(g28
+g2
+Ntp9216
+Rp9217
+(dp9218
+g32
+g9215
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp9219
+Rp9220
+(dp9221
+g92
+g9217
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp9222
+Rp9223
+(dp9224
+g99
+Vnow()
+p9225
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp9226
+sbsbsg37
+I339
+sg38
+g9088
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp9227
+g9217
+atp9228
+Rp9229
+sg46
+Nsg47
+Nsg48
+g9215
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9230
+tp9231
+Rp9232
+(dp9233
+g59
+(lp9234
+sbsg61
+g42
+((lp9235
+tp9236
+Rp9237
+sg65
+g0
+(g155
+g2
+Ntp9238
+Rp9239
+(dp9240
+g159
+I01
+sg72
+(dp9241
+sbsg75
+g4
+sbstp9242
+Rp9243
+(dp9244
+g59
+(lp9245
+g9096
+ag9169
+ag9142
+ag9215
+asbsbsg48
+g9086
+sg192
+g0
+(g193
+g2
+Ntp9246
+Rp9247
+(dp9248
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp9249
+Rp9250
+(dp9251
+g23
+g0
+(g24
+g25
+(dp9252
+g9096
+g9098
+sg9169
+g9171
+stp9253
+Rp9254
+(dp9255
+g59
+(lp9256
+g9096
+ag9169
+asbsbsg208
+(lp9257
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp9258
+g0
+(g212
+g2
+Ntp9259
+Rp9260
+(dp9261
+g48
+S'suite_architectures_suite_key'
+p9262
+sg217
+(dp9263
+sg38
+g9088
+sg39
+I01
+sg199
+(lp9264
+g9098
+ag9171
+asg75
+g4
+sbatp9265
+Rp9266
+sg222
+g54
+((lp9267
+g9181
+ag9108
+atp9268
+Rp9269
+(dp9270
+g59
+(lp9271
+g9181
+ag9108
+asbsg228
+(lp9272
+sg217
+(dp9273
+sg231
+g9086
+sg232
+Nsg233
+Nsg61
+g42
+((lp9274
+g9247
+ag9186
+ag9113
+atp9275
+Rp9276
+sg237
+S'suite_architectures'
+p9277
+sbsS'newest_any_associations'
+p9278
+g0
+(g9
+g2
+Ntp9279
+Rp9280
+(dp9281
+g13
+g14
+(g15
+tp9282
+Rp9283
+sg18
+g0
+(g19
+g2
+Ntp9284
+Rp9285
+(dp9286
+g23
+g0
+(g24
+g25
+(dp9287
+Vsuite
+p9288
+g0
+(g28
+g2
+Ntp9289
+Rp9290
+(dp9291
+g32
+g9288
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I414
+sg38
+g9280
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9288
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9292
+tp9293
+Rp9294
+(dp9295
+g59
+(lp9296
+sbsg61
+g42
+((lp9297
+tp9298
+Rp9299
+sg65
+g0
+(g114
+g2
+Ntp9300
+Rp9301
+(dp9302
+g72
+(dp9303
+sbsg75
+g4
+sbsVversion
+p9304
+g0
+(g28
+g2
+Ntp9305
+Rp9306
+(dp9307
+g32
+g9304
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I413
+sg38
+g9280
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9304
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9308
+tp9309
+Rp9310
+(dp9311
+g59
+(lp9312
+sbsg61
+g42
+((lp9313
+tp9314
+Rp9315
+sg65
+g0
+(g2530
+g2
+Ntp9316
+Rp9317
+(dp9318
+g70
+Nsg71
+Nsg72
+(dp9319
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture
+p9320
+g0
+(g28
+g2
+Ntp9321
+Rp9322
+(dp9323
+g32
+g9320
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I415
+sg38
+g9280
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9320
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9324
+tp9325
+Rp9326
+(dp9327
+g59
+(lp9328
+sbsg61
+g42
+((lp9329
+tp9330
+Rp9331
+sg65
+g0
+(g114
+g2
+Ntp9332
+Rp9333
+(dp9334
+g72
+(dp9335
+sbsg75
+g4
+sbsVpackage
+p9336
+g0
+(g28
+g2
+Ntp9337
+Rp9338
+(dp9339
+g32
+g9336
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I412
+sg38
+g9280
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9336
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9340
+tp9341
+Rp9342
+(dp9343
+g59
+(lp9344
+sbsg61
+g42
+((lp9345
+tp9346
+Rp9347
+sg65
+g0
+(g66
+g2
+Ntp9348
+Rp9349
+(dp9350
+g70
+Nsg71
+Nsg72
+(dp9351
+sg74
+I00
+sbsg75
+g4
+sbstp9352
+Rp9353
+(dp9354
+g59
+(lp9355
+g9336
+ag9304
+ag9288
+ag9320
+asbsbsg48
+g9278
+sg192
+g0
+(g193
+g2
+Ntp9356
+Rp9357
+(dp9358
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp9359
+Rp9360
+(dp9361
+g23
+g0
+(g24
+g25
+(dp9362
+tp9363
+Rp9364
+(dp9365
+g59
+(lp9366
+sbsbsg208
+(lp9367
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp9368
+tp9369
+Rp9370
+sg222
+g54
+((lp9371
+tp9372
+Rp9373
+(dp9374
+g59
+(lp9375
+sbsg228
+(lp9376
+sg217
+(dp9377
+sg231
+g9278
+sg61
+g42
+((lp9378
+g9357
+atp9379
+Rp9380
+sg233
+Nsg232
+NsbsS'suite_build_queue_copy'
+p9381
+g0
+(g9
+g2
+Ntp9382
+Rp9383
+(dp9384
+g13
+g14
+(g15
+tp9385
+Rp9386
+sg18
+g0
+(g19
+g2
+Ntp9387
+Rp9388
+(dp9389
+g23
+g0
+(g24
+g25
+(dp9390
+Vsuite
+p9391
+g0
+(g28
+g2
+Ntp9392
+Rp9393
+(dp9394
+g32
+g9391
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I344
+sg38
+g9383
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g9391
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp9395
+g0
+(g598
+g2
+Ntp9396
+Rp9397
+(dp9398
+g602
+g9393
+sg197
+Nsg603
+Nsg48
+Vsuite_queue_copy_suite_fkey
+p9399
+sg605
+Vsuite.id
+p9400
+sg607
+g0
+(g608
+g2
+Ntp9401
+Rp9402
+(dp9403
+g612
+(lp9404
+g9400
+asg52
+Nsg603
+Nsg614
+g54
+((lp9405
+g9397
+atp9406
+Rp9407
+(dp9408
+g59
+(lp9409
+g9397
+asbsg48
+g9399
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp9410
+Vsuite
+p9411
+asg38
+g9383
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp9412
+Rp9413
+(dp9414
+g23
+g0
+(g24
+g25
+(dp9415
+g9391
+g9393
+stp9416
+Rp9417
+(dp9418
+g59
+(lp9419
+g9391
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp9420
+Rp9421
+(dp9422
+g59
+(lp9423
+g9397
+asbsg61
+g42
+((lp9424
+tp9425
+Rp9426
+sg65
+g0
+(g114
+g2
+Ntp9427
+Rp9428
+(dp9429
+g72
+(dp9430
+sbsg75
+g4
+sbsVmodified
+p9431
+g0
+(g28
+g2
+Ntp9432
+Rp9433
+(dp9434
+g32
+g9431
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp9435
+Rp9436
+(dp9437
+g92
+g9433
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp9438
+Rp9439
+(dp9440
+g99
+Vnow()
+p9441
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp9442
+sbsbsg37
+I347
+sg38
+g9383
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9431
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9443
+tp9444
+Rp9445
+(dp9446
+g59
+(lp9447
+sbsg61
+g42
+((lp9448
+tp9449
+Rp9450
+sg65
+g0
+(g155
+g2
+Ntp9451
+Rp9452
+(dp9453
+g159
+I01
+sg72
+(dp9454
+sbsg75
+g4
+sbsVbuild_queue_id
+p9455
+g0
+(g28
+g2
+Ntp9456
+Rp9457
+(dp9458
+g32
+g9455
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I345
+sg38
+g9383
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g9455
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp9459
+g0
+(g598
+g2
+Ntp9460
+Rp9461
+(dp9462
+g602
+g9457
+sg197
+Nsg603
+Nsg48
+Vsuite_build_queue_copy_build_queue_id_fkey
+p9463
+sg605
+Vbuild_queue.id
+p9464
+sg607
+g0
+(g608
+g2
+Ntp9465
+Rp9466
+(dp9467
+g612
+(lp9468
+g9464
+asg52
+Nsg603
+Nsg614
+g54
+((lp9469
+g9461
+atp9470
+Rp9471
+(dp9472
+g59
+(lp9473
+g9461
+asbsg48
+g9463
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp9474
+Vbuild_queue_id
+p9475
+asg38
+g9383
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp9476
+Rp9477
+(dp9478
+g23
+g0
+(g24
+g25
+(dp9479
+g9455
+g9457
+stp9480
+Rp9481
+(dp9482
+g59
+(lp9483
+g9455
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp9484
+Rp9485
+(dp9486
+g59
+(lp9487
+g9461
+asbsg61
+g42
+((lp9488
+tp9489
+Rp9490
+sg65
+g0
+(g114
+g2
+Ntp9491
+Rp9492
+(dp9493
+g72
+(dp9494
+sbsg75
+g4
+sbsVcreated
+p9495
+g0
+(g28
+g2
+Ntp9496
+Rp9497
+(dp9498
+g32
+g9495
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp9499
+Rp9500
+(dp9501
+g92
+g9497
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp9502
+Rp9503
+(dp9504
+g99
+Vnow()
+p9505
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp9506
+sbsbsg37
+I346
+sg38
+g9383
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9495
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9507
+tp9508
+Rp9509
+(dp9510
+g59
+(lp9511
+sbsg61
+g42
+((lp9512
+tp9513
+Rp9514
+sg65
+g0
+(g155
+g2
+Ntp9515
+Rp9516
+(dp9517
+g159
+I01
+sg72
+(dp9518
+sbsg75
+g4
+sbstp9519
+Rp9520
+(dp9521
+g59
+(lp9522
+g9391
+ag9455
+ag9495
+ag9431
+asbsbsg48
+g9381
+sg192
+g0
+(g193
+g2
+Ntp9523
+Rp9524
+(dp9525
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp9526
+Rp9527
+(dp9528
+g23
+g0
+(g24
+g25
+(dp9529
+g9391
+g9393
+sg9455
+g9457
+stp9530
+Rp9531
+(dp9532
+g59
+(lp9533
+g9391
+ag9455
+asbsbsg208
+(lp9534
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp9535
+tp9536
+Rp9537
+sg222
+g54
+((lp9538
+g9461
+ag9397
+atp9539
+Rp9540
+(dp9541
+g59
+(lp9542
+g9461
+ag9397
+asbsg228
+(lp9543
+sg217
+(dp9544
+sg231
+g9381
+sg61
+g42
+((lp9545
+g9524
+ag9466
+ag9402
+atp9546
+Rp9547
+sg233
+Nsg232
+Nsbsg7444
+g7320
+sS'changes_pending_files_map'
+p9548
+g0
+(g9
+g2
+Ntp9549
+Rp9550
+(dp9551
+g13
+g14
+(g15
+tp9552
+Rp9553
+sg18
+g0
+(g19
+g2
+Ntp9554
+Rp9555
+(dp9556
+g23
+g0
+(g24
+g25
+(dp9557
+Vchange_id
+p9558
+g0
+(g28
+g2
+Ntp9559
+Rp9560
+(dp9561
+g32
+g9558
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I310
+sg38
+g9550
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g9558
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp9562
+g0
+(g598
+g2
+Ntp9563
+Rp9564
+(dp9565
+g602
+g9560
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_files_map_change_id_fkey
+p9566
+sg605
+Vchanges.id
+p9567
+sg607
+g0
+(g608
+g2
+Ntp9568
+Rp9569
+(dp9570
+g612
+(lp9571
+g9567
+asg52
+Nsg603
+Nsg614
+g54
+((lp9572
+g9564
+atp9573
+Rp9574
+(dp9575
+g59
+(lp9576
+g9564
+asbsg48
+g9566
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp9577
+Vchange_id
+p9578
+asg38
+g9550
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp9579
+Rp9580
+(dp9581
+g23
+g0
+(g24
+g25
+(dp9582
+g9558
+g9560
+stp9583
+Rp9584
+(dp9585
+g59
+(lp9586
+g9558
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp9587
+Rp9588
+(dp9589
+g59
+(lp9590
+g9564
+asbsg61
+g42
+((lp9591
+tp9592
+Rp9593
+sg65
+g0
+(g114
+g2
+Ntp9594
+Rp9595
+(dp9596
+g72
+(dp9597
+sbsg75
+g4
+sbsVcreated
+p9598
+g0
+(g28
+g2
+Ntp9599
+Rp9600
+(dp9601
+g32
+g9598
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp9602
+Rp9603
+(dp9604
+g92
+g9600
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp9605
+Rp9606
+(dp9607
+g99
+Vnow()
+p9608
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp9609
+sbsbsg37
+I311
+sg38
+g9550
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9598
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9610
+tp9611
+Rp9612
+(dp9613
+g59
+(lp9614
+sbsg61
+g42
+((lp9615
+tp9616
+Rp9617
+sg65
+g0
+(g155
+g2
+Ntp9618
+Rp9619
+(dp9620
+g159
+I01
+sg72
+(dp9621
+sbsg75
+g4
+sbsVfile_id
+p9622
+g0
+(g28
+g2
+Ntp9623
+Rp9624
+(dp9625
+g32
+g9622
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I309
+sg38
+g9550
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g9622
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp9626
+g0
+(g598
+g2
+Ntp9627
+Rp9628
+(dp9629
+g602
+g9624
+sg197
+Nsg603
+Nsg48
+Vchanges_pending_files_map_file_id_fkey
+p9630
+sg605
+Vchanges_pending_files.id
+p9631
+sg607
+g0
+(g608
+g2
+Ntp9632
+Rp9633
+(dp9634
+g612
+(lp9635
+g9631
+asg52
+Nsg603
+Nsg614
+g54
+((lp9636
+g9628
+atp9637
+Rp9638
+(dp9639
+g59
+(lp9640
+g9628
+asbsg48
+g9630
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp9641
+Vfile_id
+p9642
+asg38
+g9550
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp9643
+Rp9644
+(dp9645
+g23
+g0
+(g24
+g25
+(dp9646
+g9622
+g9624
+stp9647
+Rp9648
+(dp9649
+g59
+(lp9650
+g9622
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp9651
+Rp9652
+(dp9653
+g59
+(lp9654
+g9628
+asbsg61
+g42
+((lp9655
+tp9656
+Rp9657
+sg65
+g0
+(g114
+g2
+Ntp9658
+Rp9659
+(dp9660
+g72
+(dp9661
+sbsg75
+g4
+sbsVmodified
+p9662
+g0
+(g28
+g2
+Ntp9663
+Rp9664
+(dp9665
+g32
+g9662
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp9666
+Rp9667
+(dp9668
+g92
+g9664
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp9669
+Rp9670
+(dp9671
+g99
+Vnow()
+p9672
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp9673
+sbsbsg37
+I312
+sg38
+g9550
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9662
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9674
+tp9675
+Rp9676
+(dp9677
+g59
+(lp9678
+sbsg61
+g42
+((lp9679
+tp9680
+Rp9681
+sg65
+g0
+(g155
+g2
+Ntp9682
+Rp9683
+(dp9684
+g159
+I01
+sg72
+(dp9685
+sbsg75
+g4
+sbstp9686
+Rp9687
+(dp9688
+g59
+(lp9689
+g9622
+ag9558
+ag9598
+ag9662
+asbsbsg48
+g9548
+sg192
+g0
+(g193
+g2
+Ntp9690
+Rp9691
+(dp9692
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp9693
+Rp9694
+(dp9695
+g23
+g0
+(g24
+g25
+(dp9696
+g9558
+g9560
+sg9622
+g9624
+stp9697
+Rp9698
+(dp9699
+g59
+(lp9700
+g9622
+ag9558
+asbsbsg208
+(lp9701
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp9702
+tp9703
+Rp9704
+sg222
+g54
+((lp9705
+g9564
+ag9628
+atp9706
+Rp9707
+(dp9708
+g59
+(lp9709
+g9564
+ag9628
+asbsg228
+(lp9710
+sg217
+(dp9711
+sg231
+g9548
+sg61
+g42
+((lp9712
+g9691
+ag9569
+ag9633
+atp9713
+Rp9714
+sg233
+Nsg232
+NsbsS'suite_arch_by_name'
+p9715
+g0
+(g9
+g2
+Ntp9716
+Rp9717
+(dp9718
+g13
+g14
+(g15
+tp9719
+Rp9720
+sg18
+g0
+(g19
+g2
+Ntp9721
+Rp9722
+(dp9723
+g23
+g0
+(g24
+g25
+(dp9724
+Vsuite
+p9725
+g0
+(g28
+g2
+Ntp9726
+Rp9727
+(dp9728
+g32
+g9725
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I461
+sg38
+g9717
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9725
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9729
+tp9730
+Rp9731
+(dp9732
+g59
+(lp9733
+sbsg61
+g42
+((lp9734
+tp9735
+Rp9736
+sg65
+g0
+(g66
+g2
+Ntp9737
+Rp9738
+(dp9739
+g70
+Nsg71
+Nsg72
+(dp9740
+sg74
+I00
+sbsg75
+g4
+sbsVarch
+p9741
+g0
+(g28
+g2
+Ntp9742
+Rp9743
+(dp9744
+g32
+g9741
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I462
+sg38
+g9717
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9741
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9745
+tp9746
+Rp9747
+(dp9748
+g59
+(lp9749
+sbsg61
+g42
+((lp9750
+tp9751
+Rp9752
+sg65
+g0
+(g66
+g2
+Ntp9753
+Rp9754
+(dp9755
+g70
+Nsg71
+Nsg72
+(dp9756
+sg74
+I00
+sbsg75
+g4
+sbstp9757
+Rp9758
+(dp9759
+g59
+(lp9760
+g9725
+ag9741
+asbsbsg48
+g9715
+sg192
+g0
+(g193
+g2
+Ntp9761
+Rp9762
+(dp9763
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp9764
+Rp9765
+(dp9766
+g23
+g0
+(g24
+g25
+(dp9767
+tp9768
+Rp9769
+(dp9770
+g59
+(lp9771
+sbsbsg208
+(lp9772
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp9773
+tp9774
+Rp9775
+sg222
+g54
+((lp9776
+tp9777
+Rp9778
+(dp9779
+g59
+(lp9780
+sbsg228
+(lp9781
+sg217
+(dp9782
+sg231
+g9715
+sg61
+g42
+((lp9783
+g9762
+atp9784
+Rp9785
+sg233
+Nsg232
+NsbsS'almost_obsolete_all_associations'
+p9786
+g0
+(g9
+g2
+Ntp9787
+Rp9788
+(dp9789
+g13
+g14
+(g15
+tp9790
+Rp9791
+sg18
+g0
+(g19
+g2
+Ntp9792
+Rp9793
+(dp9794
+g23
+g0
+(g24
+g25
+(dp9795
+Vbin
+p9796
+g0
+(g28
+g2
+Ntp9797
+Rp9798
+(dp9799
+g32
+g9796
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I355
+sg38
+g9788
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9796
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9800
+tp9801
+Rp9802
+(dp9803
+g59
+(lp9804
+sbsg61
+g42
+((lp9805
+tp9806
+Rp9807
+sg65
+g0
+(g114
+g2
+Ntp9808
+Rp9809
+(dp9810
+g72
+(dp9811
+sbsg75
+g4
+sbsVsuite
+p9812
+g0
+(g28
+g2
+Ntp9813
+Rp9814
+(dp9815
+g32
+g9812
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I358
+sg38
+g9788
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9812
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9816
+tp9817
+Rp9818
+(dp9819
+g59
+(lp9820
+sbsg61
+g42
+((lp9821
+tp9822
+Rp9823
+sg65
+g0
+(g114
+g2
+Ntp9824
+Rp9825
+(dp9826
+g72
+(dp9827
+sbsg75
+g4
+sbsVversion
+p9828
+g0
+(g28
+g2
+Ntp9829
+Rp9830
+(dp9831
+g32
+g9828
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I357
+sg38
+g9788
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9828
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9832
+tp9833
+Rp9834
+(dp9835
+g59
+(lp9836
+sbsg61
+g42
+((lp9837
+tp9838
+Rp9839
+sg65
+g0
+(g2530
+g2
+Ntp9840
+Rp9841
+(dp9842
+g70
+Nsg71
+Nsg72
+(dp9843
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p9844
+g0
+(g28
+g2
+Ntp9845
+Rp9846
+(dp9847
+g32
+g9844
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I354
+sg38
+g9788
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9844
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9848
+tp9849
+Rp9850
+(dp9851
+g59
+(lp9852
+sbsg61
+g42
+((lp9853
+tp9854
+Rp9855
+sg65
+g0
+(g114
+g2
+Ntp9856
+Rp9857
+(dp9858
+g72
+(dp9859
+sbsg75
+g4
+sbsVpackage
+p9860
+g0
+(g28
+g2
+Ntp9861
+Rp9862
+(dp9863
+g32
+g9860
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I356
+sg38
+g9788
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9860
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9864
+tp9865
+Rp9866
+(dp9867
+g59
+(lp9868
+sbsg61
+g42
+((lp9869
+tp9870
+Rp9871
+sg65
+g0
+(g66
+g2
+Ntp9872
+Rp9873
+(dp9874
+g70
+Nsg71
+Nsg72
+(dp9875
+sg74
+I00
+sbsg75
+g4
+sbstp9876
+Rp9877
+(dp9878
+g59
+(lp9879
+g9844
+ag9796
+ag9860
+ag9828
+ag9812
+asbsbsg48
+g9786
+sg192
+g0
+(g193
+g2
+Ntp9880
+Rp9881
+(dp9882
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp9883
+Rp9884
+(dp9885
+g23
+g0
+(g24
+g25
+(dp9886
+tp9887
+Rp9888
+(dp9889
+g59
+(lp9890
+sbsbsg208
+(lp9891
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp9892
+tp9893
+Rp9894
+sg222
+g54
+((lp9895
+tp9896
+Rp9897
+(dp9898
+g59
+(lp9899
+sbsg228
+(lp9900
+sg217
+(dp9901
+sg231
+g9786
+sg61
+g42
+((lp9902
+g9881
+atp9903
+Rp9904
+sg233
+Nsg232
+NsbsS'obsolete_all_associations'
+p9905
+g0
+(g9
+g2
+Ntp9906
+Rp9907
+(dp9908
+g13
+g14
+(g15
+tp9909
+Rp9910
+sg18
+g0
+(g19
+g2
+Ntp9911
+Rp9912
+(dp9913
+g23
+g0
+(g24
+g25
+(dp9914
+Vbin
+p9915
+g0
+(g28
+g2
+Ntp9916
+Rp9917
+(dp9918
+g32
+g9915
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I425
+sg38
+g9907
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9915
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9919
+tp9920
+Rp9921
+(dp9922
+g59
+(lp9923
+sbsg61
+g42
+((lp9924
+tp9925
+Rp9926
+sg65
+g0
+(g114
+g2
+Ntp9927
+Rp9928
+(dp9929
+g72
+(dp9930
+sbsg75
+g4
+sbsVsuite
+p9931
+g0
+(g28
+g2
+Ntp9932
+Rp9933
+(dp9934
+g32
+g9931
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I428
+sg38
+g9907
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9931
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9935
+tp9936
+Rp9937
+(dp9938
+g59
+(lp9939
+sbsg61
+g42
+((lp9940
+tp9941
+Rp9942
+sg65
+g0
+(g114
+g2
+Ntp9943
+Rp9944
+(dp9945
+g72
+(dp9946
+sbsg75
+g4
+sbsVversion
+p9947
+g0
+(g28
+g2
+Ntp9948
+Rp9949
+(dp9950
+g32
+g9947
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I427
+sg38
+g9907
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9947
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9951
+tp9952
+Rp9953
+(dp9954
+g59
+(lp9955
+sbsg61
+g42
+((lp9956
+tp9957
+Rp9958
+sg65
+g0
+(g2530
+g2
+Ntp9959
+Rp9960
+(dp9961
+g70
+Nsg71
+Nsg72
+(dp9962
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p9963
+g0
+(g28
+g2
+Ntp9964
+Rp9965
+(dp9966
+g32
+g9963
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I424
+sg38
+g9907
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9963
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9967
+tp9968
+Rp9969
+(dp9970
+g59
+(lp9971
+sbsg61
+g42
+((lp9972
+tp9973
+Rp9974
+sg65
+g0
+(g114
+g2
+Ntp9975
+Rp9976
+(dp9977
+g72
+(dp9978
+sbsg75
+g4
+sbsVpackage
+p9979
+g0
+(g28
+g2
+Ntp9980
+Rp9981
+(dp9982
+g32
+g9979
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I426
+sg38
+g9907
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g9979
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp9983
+tp9984
+Rp9985
+(dp9986
+g59
+(lp9987
+sbsg61
+g42
+((lp9988
+tp9989
+Rp9990
+sg65
+g0
+(g66
+g2
+Ntp9991
+Rp9992
+(dp9993
+g70
+Nsg71
+Nsg72
+(dp9994
+sg74
+I00
+sbsg75
+g4
+sbstp9995
+Rp9996
+(dp9997
+g59
+(lp9998
+g9963
+ag9915
+ag9979
+ag9947
+ag9931
+asbsbsg48
+g9905
+sg192
+g0
+(g193
+g2
+Ntp9999
+Rp10000
+(dp10001
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp10002
+Rp10003
+(dp10004
+g23
+g0
+(g24
+g25
+(dp10005
+tp10006
+Rp10007
+(dp10008
+g59
+(lp10009
+sbsbsg208
+(lp10010
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp10011
+tp10012
+Rp10013
+sg222
+g54
+((lp10014
+tp10015
+Rp10016
+(dp10017
+g59
+(lp10018
+sbsg228
+(lp10019
+sg217
+(dp10020
+sg231
+g9905
+sg61
+g42
+((lp10021
+g10000
+atp10022
+Rp10023
+sg233
+Nsg232
+NsbsS'binary_acl_map'
+p10024
+g0
+(g9
+g2
+Ntp10025
+Rp10026
+(dp10027
+g13
+g14
+(g15
+tp10028
+Rp10029
+sg18
+g0
+(g19
+g2
+Ntp10030
+Rp10031
+(dp10032
+g23
+g0
+(g24
+g25
+(dp10033
+Vfingerprint_id
+p10034
+g0
+(g28
+g2
+Ntp10035
+Rp10036
+(dp10037
+g32
+g10034
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I136
+sg38
+g10026
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10038
+g10036
+atp10039
+Rp10040
+sg46
+Nsg47
+Nsg48
+g10034
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10041
+g0
+(g598
+g2
+Ntp10042
+Rp10043
+(dp10044
+g602
+g10036
+sg197
+Nsg603
+Nsg48
+Vbinary_acl_map_fingerprint_id_fkey
+p10045
+sg605
+Vfingerprint.id
+p10046
+sg607
+g0
+(g608
+g2
+Ntp10047
+Rp10048
+(dp10049
+g612
+(lp10050
+g10046
+asg52
+Nsg603
+Nsg614
+g54
+((lp10051
+g10043
+atp10052
+Rp10053
+(dp10054
+g59
+(lp10055
+g10043
+asbsg48
+g10045
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp10056
+Vfingerprint_id
+p10057
+asg38
+g10026
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp10058
+Rp10059
+(dp10060
+g23
+g0
+(g24
+g25
+(dp10061
+g10034
+g10036
+stp10062
+Rp10063
+(dp10064
+g59
+(lp10065
+g10034
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp10066
+Rp10067
+(dp10068
+g59
+(lp10069
+g10043
+asbsg61
+g42
+((lp10070
+tp10071
+Rp10072
+sg65
+g0
+(g114
+g2
+Ntp10073
+Rp10074
+(dp10075
+g72
+(dp10076
+sbsg75
+g4
+sbsVcreated
+p10077
+g0
+(g28
+g2
+Ntp10078
+Rp10079
+(dp10080
+g32
+g10077
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp10081
+Rp10082
+(dp10083
+g92
+g10079
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp10084
+Rp10085
+(dp10086
+g99
+Vnow()
+p10087
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp10088
+sbsbsg37
+I138
+sg38
+g10026
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10089
+g10079
+atp10090
+Rp10091
+sg46
+Nsg47
+Nsg48
+g10077
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10092
+tp10093
+Rp10094
+(dp10095
+g59
+(lp10096
+sbsg61
+g42
+((lp10097
+tp10098
+Rp10099
+sg65
+g0
+(g155
+g2
+Ntp10100
+Rp10101
+(dp10102
+g159
+I01
+sg72
+(dp10103
+sbsg75
+g4
+sbsVarchitecture_id
+p10104
+g0
+(g28
+g2
+Ntp10105
+Rp10106
+(dp10107
+g32
+g10104
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I137
+sg38
+g10026
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10108
+g10106
+atp10109
+Rp10110
+sg46
+Nsg47
+Nsg48
+g10104
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10111
+g0
+(g598
+g2
+Ntp10112
+Rp10113
+(dp10114
+g602
+g10106
+sg197
+Nsg603
+Nsg48
+Vbinary_acl_map_architecture_id_fkey
+p10115
+sg605
+Varchitecture.id
+p10116
+sg607
+g0
+(g608
+g2
+Ntp10117
+Rp10118
+(dp10119
+g612
+(lp10120
+g10116
+asg52
+Nsg603
+Nsg614
+g54
+((lp10121
+g10113
+atp10122
+Rp10123
+(dp10124
+g59
+(lp10125
+g10113
+asbsg48
+g10115
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp10126
+Varchitecture_id
+p10127
+asg38
+g10026
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp10128
+Rp10129
+(dp10130
+g23
+g0
+(g24
+g25
+(dp10131
+g10104
+g10106
+stp10132
+Rp10133
+(dp10134
+g59
+(lp10135
+g10104
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp10136
+Rp10137
+(dp10138
+g59
+(lp10139
+g10113
+asbsg61
+g42
+((lp10140
+tp10141
+Rp10142
+sg65
+g0
+(g114
+g2
+Ntp10143
+Rp10144
+(dp10145
+g72
+(dp10146
+sbsg75
+g4
+sbsVid
+p10147
+g0
+(g28
+g2
+Ntp10148
+Rp10149
+(dp10150
+g37
+I134
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g10026
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp10151
+g10149
+atp10152
+Rp10153
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp10154
+Rp10155
+(dp10156
+g32
+g10147
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp10157
+Rp10158
+(dp10159
+g92
+g10155
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp10160
+Rp10161
+(dp10162
+g99
+Vnextval('binary_acl_map_id_seq'::regclass)
+p10163
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp10164
+sbsbsg37
+I135
+sg38
+g10026
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g10147
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp10165
+tp10166
+Rp10167
+(dp10168
+g59
+(lp10169
+sbsg61
+g42
+((lp10170
+tp10171
+Rp10172
+sg65
+g0
+(g114
+g2
+Ntp10173
+Rp10174
+(dp10175
+g72
+(dp10176
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp10177
+tp10178
+Rp10179
+(dp10180
+g59
+(lp10181
+sbsg61
+g42
+((lp10182
+tp10183
+Rp10184
+sg65
+g0
+(g127
+g2
+Ntp10185
+Rp10186
+(dp10187
+g72
+(dp10188
+sbsg75
+g4
+sbsVmodified
+p10189
+g0
+(g28
+g2
+Ntp10190
+Rp10191
+(dp10192
+g32
+g10189
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp10193
+Rp10194
+(dp10195
+g92
+g10191
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp10196
+Rp10197
+(dp10198
+g99
+Vnow()
+p10199
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp10200
+sbsbsg37
+I139
+sg38
+g10026
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10201
+g10191
+atp10202
+Rp10203
+sg46
+Nsg47
+Nsg48
+g10189
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10204
+tp10205
+Rp10206
+(dp10207
+g59
+(lp10208
+sbsg61
+g42
+((lp10209
+tp10210
+Rp10211
+sg65
+g0
+(g155
+g2
+Ntp10212
+Rp10213
+(dp10214
+g159
+I01
+sg72
+(dp10215
+sbsg75
+g4
+sbstp10216
+Rp10217
+(dp10218
+g59
+(lp10219
+g10147
+ag10034
+ag10104
+ag10077
+ag10189
+asbsbsg48
+g10024
+sg192
+g0
+(g193
+g2
+Ntp10220
+Rp10221
+(dp10222
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp10223
+Rp10224
+(dp10225
+g23
+g0
+(g24
+g25
+(dp10226
+g10147
+g10149
+stp10227
+Rp10228
+(dp10229
+g59
+(lp10230
+g10147
+asbsbsg208
+(lp10231
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp10232
+g0
+(g212
+g2
+Ntp10233
+Rp10234
+(dp10235
+g48
+S'binary_acl_map_fingerprint_id_key'
+p10236
+sg217
+(dp10237
+sg38
+g10026
+sg39
+I01
+sg199
+(lp10238
+g10036
+ag10106
+asg75
+g4
+sbatp10239
+Rp10240
+sg222
+g54
+((lp10241
+g10113
+ag10043
+atp10242
+Rp10243
+(dp10244
+g59
+(lp10245
+g10113
+ag10043
+asbsg228
+(lp10246
+sg217
+(dp10247
+sg231
+g10024
+sg232
+Nsg233
+Nsg61
+g42
+((lp10248
+g10221
+ag10118
+ag10048
+atp10249
+Rp10250
+sg237
+S'binary_acl_map'
+p10251
+sbsS'obsolete_src_associations'
+p10252
+g0
+(g9
+g2
+Ntp10253
+Rp10254
+(dp10255
+g13
+g14
+(g15
+tp10256
+Rp10257
+sg18
+g0
+(g19
+g2
+Ntp10258
+Rp10259
+(dp10260
+g23
+g0
+(g24
+g25
+(dp10261
+Vsource
+p10262
+g0
+(g28
+g2
+Ntp10263
+Rp10264
+(dp10265
+g32
+g10262
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I441
+sg38
+g10254
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10262
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10266
+tp10267
+Rp10268
+(dp10269
+g59
+(lp10270
+sbsg61
+g42
+((lp10271
+tp10272
+Rp10273
+sg65
+g0
+(g66
+g2
+Ntp10274
+Rp10275
+(dp10276
+g70
+Nsg71
+Nsg72
+(dp10277
+sg74
+I00
+sbsg75
+g4
+sbsVsuite
+p10278
+g0
+(g28
+g2
+Ntp10279
+Rp10280
+(dp10281
+g32
+g10278
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I443
+sg38
+g10254
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10278
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10282
+tp10283
+Rp10284
+(dp10285
+g59
+(lp10286
+sbsg61
+g42
+((lp10287
+tp10288
+Rp10289
+sg65
+g0
+(g114
+g2
+Ntp10290
+Rp10291
+(dp10292
+g72
+(dp10293
+sbsg75
+g4
+sbsVversion
+p10294
+g0
+(g28
+g2
+Ntp10295
+Rp10296
+(dp10297
+g32
+g10294
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I442
+sg38
+g10254
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10294
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10298
+tp10299
+Rp10300
+(dp10301
+g59
+(lp10302
+sbsg61
+g42
+((lp10303
+tp10304
+Rp10305
+sg65
+g0
+(g2530
+g2
+Ntp10306
+Rp10307
+(dp10308
+g70
+Nsg71
+Nsg72
+(dp10309
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p10310
+g0
+(g28
+g2
+Ntp10311
+Rp10312
+(dp10313
+g32
+g10310
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I439
+sg38
+g10254
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10310
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10314
+tp10315
+Rp10316
+(dp10317
+g59
+(lp10318
+sbsg61
+g42
+((lp10319
+tp10320
+Rp10321
+sg65
+g0
+(g114
+g2
+Ntp10322
+Rp10323
+(dp10324
+g72
+(dp10325
+sbsg75
+g4
+sbsVsrc
+p10326
+g0
+(g28
+g2
+Ntp10327
+Rp10328
+(dp10329
+g32
+g10326
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I440
+sg38
+g10254
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10326
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10330
+tp10331
+Rp10332
+(dp10333
+g59
+(lp10334
+sbsg61
+g42
+((lp10335
+tp10336
+Rp10337
+sg65
+g0
+(g114
+g2
+Ntp10338
+Rp10339
+(dp10340
+g72
+(dp10341
+sbsg75
+g4
+sbstp10342
+Rp10343
+(dp10344
+g59
+(lp10345
+g10310
+ag10326
+ag10262
+ag10294
+ag10278
+asbsbsg48
+g10252
+sg192
+g0
+(g193
+g2
+Ntp10346
+Rp10347
+(dp10348
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp10349
+Rp10350
+(dp10351
+g23
+g0
+(g24
+g25
+(dp10352
+tp10353
+Rp10354
+(dp10355
+g59
+(lp10356
+sbsbsg208
+(lp10357
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp10358
+tp10359
+Rp10360
+sg222
+g54
+((lp10361
+tp10362
+Rp10363
+(dp10364
+g59
+(lp10365
+sbsg228
+(lp10366
+sg217
+(dp10367
+sg231
+g10252
+sg61
+g42
+((lp10368
+g10347
+atp10369
+Rp10370
+sg233
+Nsg232
+NsbsS'keyring_acl_map'
+p10371
+g0
+(g9
+g2
+Ntp10372
+Rp10373
+(dp10374
+g13
+g14
+(g15
+tp10375
+Rp10376
+sg18
+g0
+(g19
+g2
+Ntp10377
+Rp10378
+(dp10379
+g23
+g0
+(g24
+g25
+(dp10380
+Vkeyring_id
+p10381
+g0
+(g28
+g2
+Ntp10382
+Rp10383
+(dp10384
+g32
+g10381
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I235
+sg38
+g10373
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10385
+g10383
+atp10386
+Rp10387
+sg46
+Nsg47
+Nsg48
+g10381
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10388
+g0
+(g598
+g2
+Ntp10389
+Rp10390
+(dp10391
+g602
+g10383
+sg197
+Nsg603
+Nsg48
+Vkeyring_acl_map_keyring_id_fkey
+p10392
+sg605
+Vkeyrings.id
+p10393
+sg607
+g0
+(g608
+g2
+Ntp10394
+Rp10395
+(dp10396
+g612
+(lp10397
+g10393
+asg52
+Nsg603
+Nsg614
+g54
+((lp10398
+g10390
+atp10399
+Rp10400
+(dp10401
+g59
+(lp10402
+g10390
+asbsg48
+g10392
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp10403
+Vkeyring_id
+p10404
+asg38
+g10373
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp10405
+Rp10406
+(dp10407
+g23
+g0
+(g24
+g25
+(dp10408
+g10381
+g10383
+stp10409
+Rp10410
+(dp10411
+g59
+(lp10412
+g10381
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp10413
+Rp10414
+(dp10415
+g59
+(lp10416
+g10390
+asbsg61
+g42
+((lp10417
+tp10418
+Rp10419
+sg65
+g0
+(g114
+g2
+Ntp10420
+Rp10421
+(dp10422
+g72
+(dp10423
+sbsg75
+g4
+sbsVarchitecture_id
+p10424
+g0
+(g28
+g2
+Ntp10425
+Rp10426
+(dp10427
+g32
+g10424
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I236
+sg38
+g10373
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10428
+g10426
+atp10429
+Rp10430
+sg46
+Nsg47
+Nsg48
+g10424
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10431
+g0
+(g598
+g2
+Ntp10432
+Rp10433
+(dp10434
+g602
+g10426
+sg197
+Nsg603
+Nsg48
+Vkeyring_acl_map_architecture_id_fkey
+p10435
+sg605
+Varchitecture.id
+p10436
+sg607
+g0
+(g608
+g2
+Ntp10437
+Rp10438
+(dp10439
+g612
+(lp10440
+g10436
+asg52
+Nsg603
+Nsg614
+g54
+((lp10441
+g10433
+atp10442
+Rp10443
+(dp10444
+g59
+(lp10445
+g10433
+asbsg48
+g10435
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp10446
+Varchitecture_id
+p10447
+asg38
+g10373
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp10448
+Rp10449
+(dp10450
+g23
+g0
+(g24
+g25
+(dp10451
+g10424
+g10426
+stp10452
+Rp10453
+(dp10454
+g59
+(lp10455
+g10424
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp10456
+Rp10457
+(dp10458
+g59
+(lp10459
+g10433
+asbsg61
+g42
+((lp10460
+tp10461
+Rp10462
+sg65
+g0
+(g114
+g2
+Ntp10463
+Rp10464
+(dp10465
+g72
+(dp10466
+sbsg75
+g4
+sbsVid
+p10467
+g0
+(g28
+g2
+Ntp10468
+Rp10469
+(dp10470
+g37
+I233
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g10373
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp10471
+g10469
+atp10472
+Rp10473
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp10474
+Rp10475
+(dp10476
+g32
+g10467
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp10477
+Rp10478
+(dp10479
+g92
+g10475
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp10480
+Rp10481
+(dp10482
+g99
+Vnextval('keyring_acl_map_id_seq'::regclass)
+p10483
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp10484
+sbsbsg37
+I234
+sg38
+g10373
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g10467
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp10485
+tp10486
+Rp10487
+(dp10488
+g59
+(lp10489
+sbsg61
+g42
+((lp10490
+tp10491
+Rp10492
+sg65
+g0
+(g114
+g2
+Ntp10493
+Rp10494
+(dp10495
+g72
+(dp10496
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp10497
+tp10498
+Rp10499
+(dp10500
+g59
+(lp10501
+sbsg61
+g42
+((lp10502
+tp10503
+Rp10504
+sg65
+g0
+(g127
+g2
+Ntp10505
+Rp10506
+(dp10507
+g72
+(dp10508
+sbsg75
+g4
+sbsVmodified
+p10509
+g0
+(g28
+g2
+Ntp10510
+Rp10511
+(dp10512
+g32
+g10509
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp10513
+Rp10514
+(dp10515
+g92
+g10511
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp10516
+Rp10517
+(dp10518
+g99
+Vnow()
+p10519
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp10520
+sbsbsg37
+I238
+sg38
+g10373
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10521
+g10511
+atp10522
+Rp10523
+sg46
+Nsg47
+Nsg48
+g10509
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10524
+tp10525
+Rp10526
+(dp10527
+g59
+(lp10528
+sbsg61
+g42
+((lp10529
+tp10530
+Rp10531
+sg65
+g0
+(g155
+g2
+Ntp10532
+Rp10533
+(dp10534
+g159
+I01
+sg72
+(dp10535
+sbsg75
+g4
+sbsVcreated
+p10536
+g0
+(g28
+g2
+Ntp10537
+Rp10538
+(dp10539
+g32
+g10536
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp10540
+Rp10541
+(dp10542
+g92
+g10538
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp10543
+Rp10544
+(dp10545
+g99
+Vnow()
+p10546
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp10547
+sbsbsg37
+I237
+sg38
+g10373
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10548
+g10538
+atp10549
+Rp10550
+sg46
+Nsg47
+Nsg48
+g10536
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10551
+tp10552
+Rp10553
+(dp10554
+g59
+(lp10555
+sbsg61
+g42
+((lp10556
+tp10557
+Rp10558
+sg65
+g0
+(g155
+g2
+Ntp10559
+Rp10560
+(dp10561
+g159
+I01
+sg72
+(dp10562
+sbsg75
+g4
+sbstp10563
+Rp10564
+(dp10565
+g59
+(lp10566
+g10467
+ag10381
+ag10424
+ag10536
+ag10509
+asbsbsg48
+g10371
+sg192
+g0
+(g193
+g2
+Ntp10567
+Rp10568
+(dp10569
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp10570
+Rp10571
+(dp10572
+g23
+g0
+(g24
+g25
+(dp10573
+g10467
+g10469
+stp10574
+Rp10575
+(dp10576
+g59
+(lp10577
+g10467
+asbsbsg208
+(lp10578
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp10579
+g0
+(g212
+g2
+Ntp10580
+Rp10581
+(dp10582
+g48
+S'keyring_acl_map_keyring_id_key'
+p10583
+sg217
+(dp10584
+sg38
+g10373
+sg39
+I01
+sg199
+(lp10585
+g10383
+ag10426
+asg75
+g4
+sbatp10586
+Rp10587
+sg222
+g54
+((lp10588
+g10433
+ag10390
+atp10589
+Rp10590
+(dp10591
+g59
+(lp10592
+g10433
+ag10390
+asbsg228
+(lp10593
+sg217
+(dp10594
+sg231
+g10371
+sg232
+Nsg233
+Nsg61
+g42
+((lp10595
+g10568
+ag10438
+ag10395
+atp10596
+Rp10597
+sg237
+S'keyring_acl_map'
+p10598
+sbsS'binaries_suite_arch'
+p10599
+g0
+(g9
+g2
+Ntp10600
+Rp10601
+(dp10602
+g13
+g14
+(g15
+tp10603
+Rp10604
+sg18
+g0
+(g19
+g2
+Ntp10605
+Rp10606
+(dp10607
+g23
+g0
+(g24
+g25
+(dp10608
+Vbin
+p10609
+g0
+(g28
+g2
+Ntp10610
+Rp10611
+(dp10612
+g32
+g10609
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I384
+sg38
+g10601
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10609
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10613
+tp10614
+Rp10615
+(dp10616
+g59
+(lp10617
+sbsg61
+g42
+((lp10618
+tp10619
+Rp10620
+sg65
+g0
+(g114
+g2
+Ntp10621
+Rp10622
+(dp10623
+g72
+(dp10624
+sbsg75
+g4
+sbsVarch_string
+p10625
+g0
+(g28
+g2
+Ntp10626
+Rp10627
+(dp10628
+g32
+g10625
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I391
+sg38
+g10601
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10625
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10629
+tp10630
+Rp10631
+(dp10632
+g59
+(lp10633
+sbsg61
+g42
+((lp10634
+tp10635
+Rp10636
+sg65
+g0
+(g66
+g2
+Ntp10637
+Rp10638
+(dp10639
+g70
+Nsg71
+Nsg72
+(dp10640
+sg74
+I00
+sbsg75
+g4
+sbsVpackage
+p10641
+g0
+(g28
+g2
+Ntp10642
+Rp10643
+(dp10644
+g32
+g10641
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I385
+sg38
+g10601
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10641
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10645
+tp10646
+Rp10647
+(dp10648
+g59
+(lp10649
+sbsg61
+g42
+((lp10650
+tp10651
+Rp10652
+sg65
+g0
+(g66
+g2
+Ntp10653
+Rp10654
+(dp10655
+g70
+Nsg71
+Nsg72
+(dp10656
+sg74
+I00
+sbsg75
+g4
+sbsVsource
+p10657
+g0
+(g28
+g2
+Ntp10658
+Rp10659
+(dp10660
+g32
+g10657
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I387
+sg38
+g10601
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10657
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10661
+tp10662
+Rp10663
+(dp10664
+g59
+(lp10665
+sbsg61
+g42
+((lp10666
+tp10667
+Rp10668
+sg65
+g0
+(g114
+g2
+Ntp10669
+Rp10670
+(dp10671
+g72
+(dp10672
+sbsg75
+g4
+sbsVversion
+p10673
+g0
+(g28
+g2
+Ntp10674
+Rp10675
+(dp10676
+g32
+g10673
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I386
+sg38
+g10601
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10673
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10677
+tp10678
+Rp10679
+(dp10680
+g59
+(lp10681
+sbsg61
+g42
+((lp10682
+tp10683
+Rp10684
+sg65
+g0
+(g2530
+g2
+Ntp10685
+Rp10686
+(dp10687
+g70
+Nsg71
+Nsg72
+(dp10688
+sg74
+I00
+sbsg75
+g4
+sbsVsuite_name
+p10689
+g0
+(g28
+g2
+Ntp10690
+Rp10691
+(dp10692
+g32
+g10689
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I389
+sg38
+g10601
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10689
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10693
+tp10694
+Rp10695
+(dp10696
+g59
+(lp10697
+sbsg61
+g42
+((lp10698
+tp10699
+Rp10700
+sg65
+g0
+(g66
+g2
+Ntp10701
+Rp10702
+(dp10703
+g70
+Nsg71
+Nsg72
+(dp10704
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture
+p10705
+g0
+(g28
+g2
+Ntp10706
+Rp10707
+(dp10708
+g32
+g10705
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I390
+sg38
+g10601
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10705
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10709
+tp10710
+Rp10711
+(dp10712
+g59
+(lp10713
+sbsg61
+g42
+((lp10714
+tp10715
+Rp10716
+sg65
+g0
+(g114
+g2
+Ntp10717
+Rp10718
+(dp10719
+g72
+(dp10720
+sbsg75
+g4
+sbsVsuite
+p10721
+g0
+(g28
+g2
+Ntp10722
+Rp10723
+(dp10724
+g32
+g10721
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I388
+sg38
+g10601
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10721
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10725
+tp10726
+Rp10727
+(dp10728
+g59
+(lp10729
+sbsg61
+g42
+((lp10730
+tp10731
+Rp10732
+sg65
+g0
+(g114
+g2
+Ntp10733
+Rp10734
+(dp10735
+g72
+(dp10736
+sbsg75
+g4
+sbsVid
+p10737
+g0
+(g28
+g2
+Ntp10738
+Rp10739
+(dp10740
+g32
+g10737
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I383
+sg38
+g10601
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g10737
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10741
+tp10742
+Rp10743
+(dp10744
+g59
+(lp10745
+sbsg61
+g42
+((lp10746
+tp10747
+Rp10748
+sg65
+g0
+(g114
+g2
+Ntp10749
+Rp10750
+(dp10751
+g72
+(dp10752
+sbsg75
+g4
+sbstp10753
+Rp10754
+(dp10755
+g59
+(lp10756
+g10737
+ag10609
+ag10641
+ag10673
+ag10657
+ag10721
+ag10689
+ag10705
+ag10625
+asbsbsg48
+g10599
+sg192
+g0
+(g193
+g2
+Ntp10757
+Rp10758
+(dp10759
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp10760
+Rp10761
+(dp10762
+g23
+g0
+(g24
+g25
+(dp10763
+tp10764
+Rp10765
+(dp10766
+g59
+(lp10767
+sbsbsg208
+(lp10768
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp10769
+tp10770
+Rp10771
+sg222
+g54
+((lp10772
+tp10773
+Rp10774
+(dp10775
+g59
+(lp10776
+sbsg228
+(lp10777
+sg217
+(dp10778
+sg231
+g10599
+sg61
+g42
+((lp10779
+g10758
+atp10780
+Rp10781
+sg233
+Nsg232
+NsbsVfingerprint
+p10782
+g0
+(g9
+g2
+Ntp10783
+Rp10784
+(dp10785
+g13
+g14
+(g15
+tp10786
+Rp10787
+sg18
+g0
+(g19
+g2
+Ntp10788
+Rp10789
+(dp10790
+g23
+g0
+(g24
+g25
+(dp10791
+Vsource_acl_id
+p10792
+g0
+(g28
+g2
+Ntp10793
+Rp10794
+(dp10795
+g32
+g10792
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I63
+sg38
+g10784
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10796
+g10794
+atp10797
+Rp10798
+sg46
+Nsg47
+Nsg48
+g10792
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10799
+g0
+(g598
+g2
+Ntp10800
+Rp10801
+(dp10802
+g602
+g10794
+sg197
+Nsg603
+Nsg48
+Vfingerprint_source_acl_id_fkey
+p10803
+sg605
+Vsource_acl.id
+p10804
+sg607
+g0
+(g608
+g2
+Ntp10805
+Rp10806
+(dp10807
+g612
+(lp10808
+g10804
+asg52
+Nsg603
+Nsg614
+g54
+((lp10809
+g10801
+atp10810
+Rp10811
+(dp10812
+g59
+(lp10813
+g10801
+asbsg48
+g10803
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp10814
+Vsource_acl_id
+p10815
+asg38
+g10784
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp10816
+Rp10817
+(dp10818
+g23
+g0
+(g24
+g25
+(dp10819
+g10792
+g10794
+stp10820
+Rp10821
+(dp10822
+g59
+(lp10823
+g10792
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp10824
+Rp10825
+(dp10826
+g59
+(lp10827
+g10801
+asbsg61
+g42
+((lp10828
+tp10829
+Rp10830
+sg65
+g0
+(g114
+g2
+Ntp10831
+Rp10832
+(dp10833
+g72
+(dp10834
+sbsg75
+g4
+sbsVuid
+p10835
+g0
+(g28
+g2
+Ntp10836
+Rp10837
+(dp10838
+g32
+g10835
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I61
+sg38
+g10784
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10839
+g10837
+atp10840
+Rp10841
+sg46
+Nsg47
+Nsg48
+g10835
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10842
+g0
+(g598
+g2
+Ntp10843
+Rp10844
+(dp10845
+g602
+g10837
+sg197
+Nsg603
+Nsg48
+Vfingerprint_uid
+p10846
+sg605
+Vuid.id
+p10847
+sg607
+g0
+(g608
+g2
+Ntp10848
+Rp10849
+(dp10850
+g612
+(lp10851
+g10847
+asg52
+Nsg603
+Nsg614
+g54
+((lp10852
+g10844
+atp10853
+Rp10854
+(dp10855
+g59
+(lp10856
+g10844
+asbsg48
+g10846
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp10857
+Vuid
+p10858
+asg38
+g10784
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp10859
+Rp10860
+(dp10861
+g23
+g0
+(g24
+g25
+(dp10862
+g10835
+g10837
+stp10863
+Rp10864
+(dp10865
+g59
+(lp10866
+g10835
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp10867
+Rp10868
+(dp10869
+g59
+(lp10870
+g10844
+asbsg61
+g42
+((lp10871
+tp10872
+Rp10873
+sg65
+g0
+(g114
+g2
+Ntp10874
+Rp10875
+(dp10876
+g72
+(dp10877
+sbsg75
+g4
+sbsVcreated
+p10878
+g0
+(g28
+g2
+Ntp10879
+Rp10880
+(dp10881
+g32
+g10878
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp10882
+Rp10883
+(dp10884
+g92
+g10880
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp10885
+Rp10886
+(dp10887
+g99
+Vnow()
+p10888
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp10889
+sbsbsg37
+I66
+sg38
+g10784
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10890
+g10880
+atp10891
+Rp10892
+sg46
+Nsg47
+Nsg48
+g10878
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10893
+tp10894
+Rp10895
+(dp10896
+g59
+(lp10897
+sbsg61
+g42
+((lp10898
+tp10899
+Rp10900
+sg65
+g0
+(g155
+g2
+Ntp10901
+Rp10902
+(dp10903
+g159
+I01
+sg72
+(dp10904
+sbsg75
+g4
+sbsVkeyring
+p10905
+g0
+(g28
+g2
+Ntp10906
+Rp10907
+(dp10908
+g32
+g10905
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I62
+sg38
+g10784
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10909
+g10907
+atp10910
+Rp10911
+sg46
+Nsg47
+Nsg48
+g10905
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10912
+g0
+(g598
+g2
+Ntp10913
+Rp10914
+(dp10915
+g602
+g10907
+sg197
+Nsg603
+Nsg48
+V$1
+p10916
+sg605
+Vkeyrings.id
+p10917
+sg607
+g0
+(g608
+g2
+Ntp10918
+Rp10919
+(dp10920
+g612
+(lp10921
+g10917
+asg52
+Nsg603
+Nsg614
+g54
+((lp10922
+g10914
+atp10923
+Rp10924
+(dp10925
+g59
+(lp10926
+g10914
+asbsg48
+g10916
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp10927
+Vkeyring
+p10928
+asg38
+g10784
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp10929
+Rp10930
+(dp10931
+g23
+g0
+(g24
+g25
+(dp10932
+g10905
+g10907
+stp10933
+Rp10934
+(dp10935
+g59
+(lp10936
+g10905
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp10937
+Rp10938
+(dp10939
+g59
+(lp10940
+g10914
+asbsg61
+g42
+((lp10941
+tp10942
+Rp10943
+sg65
+g0
+(g114
+g2
+Ntp10944
+Rp10945
+(dp10946
+g72
+(dp10947
+sbsg75
+g4
+sbsVmodified
+p10948
+g0
+(g28
+g2
+Ntp10949
+Rp10950
+(dp10951
+g32
+g10948
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp10952
+Rp10953
+(dp10954
+g92
+g10950
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp10955
+Rp10956
+(dp10957
+g99
+Vnow()
+p10958
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp10959
+sbsbsg37
+I67
+sg38
+g10784
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10960
+g10950
+atp10961
+Rp10962
+sg46
+Nsg47
+Nsg48
+g10948
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10963
+tp10964
+Rp10965
+(dp10966
+g59
+(lp10967
+sbsg61
+g42
+((lp10968
+tp10969
+Rp10970
+sg65
+g0
+(g155
+g2
+Ntp10971
+Rp10972
+(dp10973
+g159
+I01
+sg72
+(dp10974
+sbsg75
+g4
+sbsVbinary_reject
+p10975
+g0
+(g28
+g2
+Ntp10976
+Rp10977
+(dp10978
+g32
+g10975
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp10979
+Rp10980
+(dp10981
+g92
+g10977
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp10982
+Rp10983
+(dp10984
+g99
+Vtrue
+p10985
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp10986
+sbsbsg37
+I65
+sg38
+g10784
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp10987
+g10977
+atp10988
+Rp10989
+sg46
+Nsg47
+Nsg48
+g10975
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp10990
+tp10991
+Rp10992
+(dp10993
+g59
+(lp10994
+sbsg61
+g42
+((lp10995
+tp10996
+Rp10997
+sg65
+g0
+(g877
+g2
+Ntp10998
+Rp10999
+(dp11000
+g72
+(dp11001
+sbsg75
+g4
+sbsVbinary_acl_id
+p11002
+g0
+(g28
+g2
+Ntp11003
+Rp11004
+(dp11005
+g32
+g11002
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I64
+sg38
+g10784
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11006
+g11004
+atp11007
+Rp11008
+sg46
+Nsg47
+Nsg48
+g11002
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11009
+g0
+(g598
+g2
+Ntp11010
+Rp11011
+(dp11012
+g602
+g11004
+sg197
+Nsg603
+Nsg48
+Vfingerprint_binary_acl_id_fkey
+p11013
+sg605
+Vbinary_acl.id
+p11014
+sg607
+g0
+(g608
+g2
+Ntp11015
+Rp11016
+(dp11017
+g612
+(lp11018
+g11014
+asg52
+Nsg603
+Nsg614
+g54
+((lp11019
+g11011
+atp11020
+Rp11021
+(dp11022
+g59
+(lp11023
+g11011
+asbsg48
+g11013
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp11024
+Vbinary_acl_id
+p11025
+asg38
+g10784
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp11026
+Rp11027
+(dp11028
+g23
+g0
+(g24
+g25
+(dp11029
+g11002
+g11004
+stp11030
+Rp11031
+(dp11032
+g59
+(lp11033
+g11002
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp11034
+Rp11035
+(dp11036
+g59
+(lp11037
+g11011
+asbsg61
+g42
+((lp11038
+tp11039
+Rp11040
+sg65
+g0
+(g114
+g2
+Ntp11041
+Rp11042
+(dp11043
+g72
+(dp11044
+sbsg75
+g4
+sbsVfingerprint
+p11045
+g0
+(g28
+g2
+Ntp11046
+Rp11047
+(dp11048
+g32
+g11045
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I60
+sg38
+g10784
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11049
+g11047
+atp11050
+Rp11051
+sg46
+Nsg47
+Nsg48
+g11045
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11052
+tp11053
+Rp11054
+(dp11055
+g59
+(lp11056
+sbsg61
+g42
+((lp11057
+tp11058
+Rp11059
+sg65
+g0
+(g66
+g2
+Ntp11060
+Rp11061
+(dp11062
+g70
+Nsg71
+Nsg72
+(dp11063
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p11064
+g0
+(g28
+g2
+Ntp11065
+Rp11066
+(dp11067
+g37
+I230
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g10784
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp11068
+g11066
+atp11069
+Rp11070
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp11071
+Rp11072
+(dp11073
+g32
+g11064
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp11074
+Rp11075
+(dp11076
+g92
+g11072
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp11077
+Rp11078
+(dp11079
+g99
+Vnextval(('"fingerprint_id_seq"'::text)::regclass)
+p11080
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp11081
+sbsbsg37
+I59
+sg38
+g10784
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g11064
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp11082
+tp11083
+Rp11084
+(dp11085
+g59
+(lp11086
+sbsg61
+g42
+((lp11087
+tp11088
+Rp11089
+sg65
+g0
+(g114
+g2
+Ntp11090
+Rp11091
+(dp11092
+g72
+(dp11093
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp11094
+tp11095
+Rp11096
+(dp11097
+g59
+(lp11098
+sbsg61
+g42
+((lp11099
+tp11100
+Rp11101
+sg65
+g0
+(g127
+g2
+Ntp11102
+Rp11103
+(dp11104
+g72
+(dp11105
+sbsg75
+g4
+sbstp11106
+Rp11107
+(dp11108
+g59
+(lp11109
+g11064
+ag11045
+ag10835
+ag10905
+ag10792
+ag11002
+ag10975
+ag10878
+ag10948
+asbsbsg48
+g10782
+sg192
+g0
+(g193
+g2
+Ntp11110
+Rp11111
+(dp11112
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp11113
+Rp11114
+(dp11115
+g23
+g0
+(g24
+g25
+(dp11116
+g11064
+g11066
+stp11117
+Rp11118
+(dp11119
+g59
+(lp11120
+g11064
+asbsbsg208
+(lp11121
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp11122
+g0
+(g212
+g2
+Ntp11123
+Rp11124
+(dp11125
+g48
+S'fingerprint_fingerprint_key'
+p11126
+sg217
+(dp11127
+sg38
+g10784
+sg39
+I01
+sg199
+(lp11128
+g11047
+asg75
+g4
+sbatp11129
+Rp11130
+sg222
+g54
+((lp11131
+g10914
+ag11011
+ag10801
+ag10844
+atp11132
+Rp11133
+(dp11134
+g59
+(lp11135
+g10914
+ag11011
+ag10801
+ag10844
+asbsg228
+(lp11136
+sg217
+(dp11137
+sg231
+g10782
+sg232
+Nsg233
+Nsg61
+g42
+((lp11138
+g11111
+ag10919
+ag10849
+ag11016
+ag10806
+atp11139
+Rp11140
+sg237
+S'fingerprint'
+p11141
+sbsg7767
+g7681
+sVbinary_acl
+p11142
+g0
+(g9
+g2
+Ntp11143
+Rp11144
+(dp11145
+g13
+g14
+(g15
+tp11146
+Rp11147
+sg18
+g0
+(g19
+g2
+Ntp11148
+Rp11149
+(dp11150
+g23
+g0
+(g24
+g25
+(dp11151
+Vaccess_level
+p11152
+g0
+(g28
+g2
+Ntp11153
+Rp11154
+(dp11155
+g32
+g11152
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I77
+sg38
+g11144
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11156
+g11154
+atp11157
+Rp11158
+sg46
+Nsg47
+Nsg48
+g11152
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11159
+tp11160
+Rp11161
+(dp11162
+g59
+(lp11163
+sbsg61
+g42
+((lp11164
+tp11165
+Rp11166
+sg65
+g0
+(g66
+g2
+Ntp11167
+Rp11168
+(dp11169
+g70
+Nsg71
+Nsg72
+(dp11170
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p11171
+g0
+(g28
+g2
+Ntp11172
+Rp11173
+(dp11174
+g32
+g11171
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp11175
+Rp11176
+(dp11177
+g92
+g11173
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp11178
+Rp11179
+(dp11180
+g99
+Vnow()
+p11181
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp11182
+sbsbsg37
+I78
+sg38
+g11144
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11183
+g11173
+atp11184
+Rp11185
+sg46
+Nsg47
+Nsg48
+g11171
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11186
+tp11187
+Rp11188
+(dp11189
+g59
+(lp11190
+sbsg61
+g42
+((lp11191
+tp11192
+Rp11193
+sg65
+g0
+(g155
+g2
+Ntp11194
+Rp11195
+(dp11196
+g159
+I01
+sg72
+(dp11197
+sbsg75
+g4
+sbsVid
+p11198
+g0
+(g28
+g2
+Ntp11199
+Rp11200
+(dp11201
+g37
+I133
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g11144
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp11202
+g11200
+atp11203
+Rp11204
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp11205
+Rp11206
+(dp11207
+g32
+g11198
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp11208
+Rp11209
+(dp11210
+g92
+g11206
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp11211
+Rp11212
+(dp11213
+g99
+Vnextval('binary_acl_id_seq'::regclass)
+p11214
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp11215
+sbsbsg37
+I76
+sg38
+g11144
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g11198
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp11216
+tp11217
+Rp11218
+(dp11219
+g59
+(lp11220
+sbsg61
+g42
+((lp11221
+tp11222
+Rp11223
+sg65
+g0
+(g114
+g2
+Ntp11224
+Rp11225
+(dp11226
+g72
+(dp11227
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp11228
+tp11229
+Rp11230
+(dp11231
+g59
+(lp11232
+sbsg61
+g42
+((lp11233
+tp11234
+Rp11235
+sg65
+g0
+(g127
+g2
+Ntp11236
+Rp11237
+(dp11238
+g72
+(dp11239
+sbsg75
+g4
+sbsVmodified
+p11240
+g0
+(g28
+g2
+Ntp11241
+Rp11242
+(dp11243
+g32
+g11240
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp11244
+Rp11245
+(dp11246
+g92
+g11242
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp11247
+Rp11248
+(dp11249
+g99
+Vnow()
+p11250
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp11251
+sbsbsg37
+I79
+sg38
+g11144
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11252
+g11242
+atp11253
+Rp11254
+sg46
+Nsg47
+Nsg48
+g11240
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11255
+tp11256
+Rp11257
+(dp11258
+g59
+(lp11259
+sbsg61
+g42
+((lp11260
+tp11261
+Rp11262
+sg65
+g0
+(g155
+g2
+Ntp11263
+Rp11264
+(dp11265
+g159
+I01
+sg72
+(dp11266
+sbsg75
+g4
+sbstp11267
+Rp11268
+(dp11269
+g59
+(lp11270
+g11198
+ag11152
+ag11171
+ag11240
+asbsbsg48
+g11142
+sg192
+g0
+(g193
+g2
+Ntp11271
+Rp11272
+(dp11273
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp11274
+Rp11275
+(dp11276
+g23
+g0
+(g24
+g25
+(dp11277
+g11198
+g11200
+stp11278
+Rp11279
+(dp11280
+g59
+(lp11281
+g11198
+asbsbsg208
+(lp11282
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp11283
+g0
+(g212
+g2
+Ntp11284
+Rp11285
+(dp11286
+g48
+S'binary_acl_access_level_key'
+p11287
+sg217
+(dp11288
+sg38
+g11144
+sg39
+I01
+sg199
+(lp11289
+g11154
+asg75
+g4
+sbatp11290
+Rp11291
+sg222
+g54
+((lp11292
+tp11293
+Rp11294
+(dp11295
+g59
+(lp11296
+sbsg228
+(lp11297
+sg217
+(dp11298
+sg231
+g11142
+sg232
+Nsg233
+Nsg61
+g42
+((lp11299
+g11272
+atp11300
+Rp11301
+sg237
+S'binary_acl'
+p11302
+sbsS'obsolete_any_associations'
+p11303
+g0
+(g9
+g2
+Ntp11304
+Rp11305
+(dp11306
+g13
+g14
+(g15
+tp11307
+Rp11308
+sg18
+g0
+(g19
+g2
+Ntp11309
+Rp11310
+(dp11311
+g23
+g0
+(g24
+g25
+(dp11312
+Vsuite
+p11313
+g0
+(g28
+g2
+Ntp11314
+Rp11315
+(dp11316
+g32
+g11313
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I433
+sg38
+g11305
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11313
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11317
+tp11318
+Rp11319
+(dp11320
+g59
+(lp11321
+sbsg61
+g42
+((lp11322
+tp11323
+Rp11324
+sg65
+g0
+(g114
+g2
+Ntp11325
+Rp11326
+(dp11327
+g72
+(dp11328
+sbsg75
+g4
+sbsVversion
+p11329
+g0
+(g28
+g2
+Ntp11330
+Rp11331
+(dp11332
+g32
+g11329
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I431
+sg38
+g11305
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11329
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11333
+tp11334
+Rp11335
+(dp11336
+g59
+(lp11337
+sbsg61
+g42
+((lp11338
+tp11339
+Rp11340
+sg65
+g0
+(g2530
+g2
+Ntp11341
+Rp11342
+(dp11343
+g70
+Nsg71
+Nsg72
+(dp11344
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture
+p11345
+g0
+(g28
+g2
+Ntp11346
+Rp11347
+(dp11348
+g32
+g11345
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I430
+sg38
+g11305
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11345
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11349
+tp11350
+Rp11351
+(dp11352
+g59
+(lp11353
+sbsg61
+g42
+((lp11354
+tp11355
+Rp11356
+sg65
+g0
+(g114
+g2
+Ntp11357
+Rp11358
+(dp11359
+g72
+(dp11360
+sbsg75
+g4
+sbsVid
+p11361
+g0
+(g28
+g2
+Ntp11362
+Rp11363
+(dp11364
+g32
+g11361
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I429
+sg38
+g11305
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11361
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11365
+tp11366
+Rp11367
+(dp11368
+g59
+(lp11369
+sbsg61
+g42
+((lp11370
+tp11371
+Rp11372
+sg65
+g0
+(g114
+g2
+Ntp11373
+Rp11374
+(dp11375
+g72
+(dp11376
+sbsg75
+g4
+sbsVpackage
+p11377
+g0
+(g28
+g2
+Ntp11378
+Rp11379
+(dp11380
+g32
+g11377
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I432
+sg38
+g11305
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11377
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11381
+tp11382
+Rp11383
+(dp11384
+g59
+(lp11385
+sbsg61
+g42
+((lp11386
+tp11387
+Rp11388
+sg65
+g0
+(g66
+g2
+Ntp11389
+Rp11390
+(dp11391
+g70
+Nsg71
+Nsg72
+(dp11392
+sg74
+I00
+sbsg75
+g4
+sbstp11393
+Rp11394
+(dp11395
+g59
+(lp11396
+g11361
+ag11345
+ag11329
+ag11377
+ag11313
+asbsbsg48
+g11303
+sg192
+g0
+(g193
+g2
+Ntp11397
+Rp11398
+(dp11399
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp11400
+Rp11401
+(dp11402
+g23
+g0
+(g24
+g25
+(dp11403
+tp11404
+Rp11405
+(dp11406
+g59
+(lp11407
+sbsbsg208
+(lp11408
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp11409
+tp11410
+Rp11411
+sg222
+g54
+((lp11412
+tp11413
+Rp11414
+(dp11415
+g59
+(lp11416
+sbsg228
+(lp11417
+sg217
+(dp11418
+sg231
+g11303
+sg61
+g42
+((lp11419
+g11398
+atp11420
+Rp11421
+sg233
+Nsg232
+NsbsS'upload_blocks'
+p11422
+g0
+(g9
+g2
+Ntp11423
+Rp11424
+(dp11425
+g13
+g14
+(g15
+tp11426
+Rp11427
+sg18
+g0
+(g19
+g2
+Ntp11428
+Rp11429
+(dp11430
+g23
+g0
+(g24
+g25
+(dp11431
+Vcreated
+p11432
+g0
+(g28
+g2
+Ntp11433
+Rp11434
+(dp11435
+g32
+g11432
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp11436
+Rp11437
+(dp11438
+g92
+g11434
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp11439
+Rp11440
+(dp11441
+g99
+Vnow()
+p11442
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp11443
+sbsbsg37
+I303
+sg38
+g11424
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11444
+g11434
+atp11445
+Rp11446
+sg46
+Nsg47
+Nsg48
+g11432
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11447
+tp11448
+Rp11449
+(dp11450
+g59
+(lp11451
+sbsg61
+g42
+((lp11452
+tp11453
+Rp11454
+sg65
+g0
+(g155
+g2
+Ntp11455
+Rp11456
+(dp11457
+g159
+I01
+sg72
+(dp11458
+sbsg75
+g4
+sbsVuid_id
+p11459
+g0
+(g28
+g2
+Ntp11460
+Rp11461
+(dp11462
+g32
+g11459
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I301
+sg38
+g11424
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11463
+g11461
+atp11464
+Rp11465
+sg46
+Nsg47
+Nsg48
+g11459
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11466
+g0
+(g598
+g2
+Ntp11467
+Rp11468
+(dp11469
+g602
+g11461
+sg197
+Nsg603
+Nsg48
+Vupload_blocks_uid_id_fkey
+p11470
+sg605
+Vuid.id
+p11471
+sg607
+g0
+(g608
+g2
+Ntp11472
+Rp11473
+(dp11474
+g612
+(lp11475
+g11471
+asg52
+Nsg603
+Nsg614
+g54
+((lp11476
+g11468
+atp11477
+Rp11478
+(dp11479
+g59
+(lp11480
+g11468
+asbsg48
+g11470
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp11481
+Vuid_id
+p11482
+asg38
+g11424
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp11483
+Rp11484
+(dp11485
+g23
+g0
+(g24
+g25
+(dp11486
+g11459
+g11461
+stp11487
+Rp11488
+(dp11489
+g59
+(lp11490
+g11459
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp11491
+Rp11492
+(dp11493
+g59
+(lp11494
+g11468
+asbsg61
+g42
+((lp11495
+tp11496
+Rp11497
+sg65
+g0
+(g114
+g2
+Ntp11498
+Rp11499
+(dp11500
+g72
+(dp11501
+sbsg75
+g4
+sbsVfingerprint_id
+p11502
+g0
+(g28
+g2
+Ntp11503
+Rp11504
+(dp11505
+g32
+g11502
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I300
+sg38
+g11424
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11506
+g11504
+atp11507
+Rp11508
+sg46
+Nsg47
+Nsg48
+g11502
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11509
+g0
+(g598
+g2
+Ntp11510
+Rp11511
+(dp11512
+g602
+g11504
+sg197
+Nsg603
+Nsg48
+Vupload_blocks_fingerprint_id_fkey
+p11513
+sg605
+Vfingerprint.id
+p11514
+sg607
+g0
+(g608
+g2
+Ntp11515
+Rp11516
+(dp11517
+g612
+(lp11518
+g11514
+asg52
+Nsg603
+Nsg614
+g54
+((lp11519
+g11511
+atp11520
+Rp11521
+(dp11522
+g59
+(lp11523
+g11511
+asbsg48
+g11513
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp11524
+Vfingerprint_id
+p11525
+asg38
+g11424
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp11526
+Rp11527
+(dp11528
+g23
+g0
+(g24
+g25
+(dp11529
+g11502
+g11504
+stp11530
+Rp11531
+(dp11532
+g59
+(lp11533
+g11502
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp11534
+Rp11535
+(dp11536
+g59
+(lp11537
+g11511
+asbsg61
+g42
+((lp11538
+tp11539
+Rp11540
+sg65
+g0
+(g114
+g2
+Ntp11541
+Rp11542
+(dp11543
+g72
+(dp11544
+sbsg75
+g4
+sbsVmodified
+p11545
+g0
+(g28
+g2
+Ntp11546
+Rp11547
+(dp11548
+g32
+g11545
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp11549
+Rp11550
+(dp11551
+g92
+g11547
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp11552
+Rp11553
+(dp11554
+g99
+Vnow()
+p11555
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp11556
+sbsbsg37
+I304
+sg38
+g11424
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11557
+g11547
+atp11558
+Rp11559
+sg46
+Nsg47
+Nsg48
+g11545
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11560
+tp11561
+Rp11562
+(dp11563
+g59
+(lp11564
+sbsg61
+g42
+((lp11565
+tp11566
+Rp11567
+sg65
+g0
+(g155
+g2
+Ntp11568
+Rp11569
+(dp11570
+g159
+I01
+sg72
+(dp11571
+sbsg75
+g4
+sbsVsource
+p11572
+g0
+(g28
+g2
+Ntp11573
+Rp11574
+(dp11575
+g32
+g11572
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I298
+sg38
+g11424
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11576
+g11574
+atp11577
+Rp11578
+sg46
+Nsg47
+Nsg48
+g11572
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11579
+tp11580
+Rp11581
+(dp11582
+g59
+(lp11583
+sbsg61
+g42
+((lp11584
+tp11585
+Rp11586
+sg65
+g0
+(g66
+g2
+Ntp11587
+Rp11588
+(dp11589
+g70
+Nsg71
+Nsg72
+(dp11590
+sg74
+I00
+sbsg75
+g4
+sbsVreason
+p11591
+g0
+(g28
+g2
+Ntp11592
+Rp11593
+(dp11594
+g32
+g11591
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I302
+sg38
+g11424
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11595
+g11593
+atp11596
+Rp11597
+sg46
+Nsg47
+Nsg48
+g11591
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11598
+tp11599
+Rp11600
+(dp11601
+g59
+(lp11602
+sbsg61
+g42
+((lp11603
+tp11604
+Rp11605
+sg65
+g0
+(g66
+g2
+Ntp11606
+Rp11607
+(dp11608
+g70
+Nsg71
+Nsg72
+(dp11609
+sg74
+I00
+sbsg75
+g4
+sbsVversion
+p11610
+g0
+(g28
+g2
+Ntp11611
+Rp11612
+(dp11613
+g32
+g11610
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I299
+sg38
+g11424
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp11614
+g11612
+atp11615
+Rp11616
+sg46
+Nsg47
+Nsg48
+g11610
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11617
+tp11618
+Rp11619
+(dp11620
+g59
+(lp11621
+sbsg61
+g42
+((lp11622
+tp11623
+Rp11624
+sg65
+g0
+(g2530
+g2
+Ntp11625
+Rp11626
+(dp11627
+g70
+Nsg71
+Nsg72
+(dp11628
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p11629
+g0
+(g28
+g2
+Ntp11630
+Rp11631
+(dp11632
+g37
+I296
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g11424
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp11633
+g11631
+atp11634
+Rp11635
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp11636
+Rp11637
+(dp11638
+g32
+g11629
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp11639
+Rp11640
+(dp11641
+g92
+g11637
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp11642
+Rp11643
+(dp11644
+g99
+Vnextval('upload_blocks_id_seq'::regclass)
+p11645
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp11646
+sbsbsg37
+I297
+sg38
+g11424
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g11629
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp11647
+tp11648
+Rp11649
+(dp11650
+g59
+(lp11651
+sbsg61
+g42
+((lp11652
+tp11653
+Rp11654
+sg65
+g0
+(g114
+g2
+Ntp11655
+Rp11656
+(dp11657
+g72
+(dp11658
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp11659
+tp11660
+Rp11661
+(dp11662
+g59
+(lp11663
+sbsg61
+g42
+((lp11664
+tp11665
+Rp11666
+sg65
+g0
+(g127
+g2
+Ntp11667
+Rp11668
+(dp11669
+g72
+(dp11670
+sbsg75
+g4
+sbstp11671
+Rp11672
+(dp11673
+g59
+(lp11674
+g11629
+ag11572
+ag11610
+ag11502
+ag11459
+ag11591
+ag11432
+ag11545
+asbsbsg48
+g11422
+sg192
+g0
+(g193
+g2
+Ntp11675
+Rp11676
+(dp11677
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp11678
+Rp11679
+(dp11680
+g23
+g0
+(g24
+g25
+(dp11681
+g11629
+g11631
+stp11682
+Rp11683
+(dp11684
+g59
+(lp11685
+g11629
+asbsbsg208
+(lp11686
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp11687
+tp11688
+Rp11689
+sg222
+g54
+((lp11690
+g11511
+ag11468
+atp11691
+Rp11692
+(dp11693
+g59
+(lp11694
+g11511
+ag11468
+asbsg228
+(lp11695
+sg217
+(dp11696
+sg231
+g11422
+sg232
+Nsg233
+Nsg61
+g42
+((lp11697
+g11676
+ag11516
+ag11473
+atp11698
+Rp11699
+sg237
+S'upload_blocks'
+p11700
+sbsS'source_suite'
+p11701
+g0
+(g9
+g2
+Ntp11702
+Rp11703
+(dp11704
+g13
+g14
+(g15
+tp11705
+Rp11706
+sg18
+g0
+(g19
+g2
+Ntp11707
+Rp11708
+(dp11709
+g23
+g0
+(g24
+g25
+(dp11710
+Vsrc
+p11711
+g0
+(g28
+g2
+Ntp11712
+Rp11713
+(dp11714
+g32
+g11711
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I445
+sg38
+g11703
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11711
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11715
+tp11716
+Rp11717
+(dp11718
+g59
+(lp11719
+sbsg61
+g42
+((lp11720
+tp11721
+Rp11722
+sg65
+g0
+(g114
+g2
+Ntp11723
+Rp11724
+(dp11725
+g72
+(dp11726
+sbsg75
+g4
+sbsVversion
+p11727
+g0
+(g28
+g2
+Ntp11728
+Rp11729
+(dp11730
+g32
+g11727
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I447
+sg38
+g11703
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11727
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11731
+tp11732
+Rp11733
+(dp11734
+g59
+(lp11735
+sbsg61
+g42
+((lp11736
+tp11737
+Rp11738
+sg65
+g0
+(g2530
+g2
+Ntp11739
+Rp11740
+(dp11741
+g70
+Nsg71
+Nsg72
+(dp11742
+sg74
+I00
+sbsg75
+g4
+sbsVsuite_name
+p11743
+g0
+(g28
+g2
+Ntp11744
+Rp11745
+(dp11746
+g32
+g11743
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I449
+sg38
+g11703
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11743
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11747
+tp11748
+Rp11749
+(dp11750
+g59
+(lp11751
+sbsg61
+g42
+((lp11752
+tp11753
+Rp11754
+sg65
+g0
+(g66
+g2
+Ntp11755
+Rp11756
+(dp11757
+g70
+Nsg71
+Nsg72
+(dp11758
+sg74
+I00
+sbsg75
+g4
+sbsVsource
+p11759
+g0
+(g28
+g2
+Ntp11760
+Rp11761
+(dp11762
+g32
+g11759
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I446
+sg38
+g11703
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11759
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11763
+tp11764
+Rp11765
+(dp11766
+g59
+(lp11767
+sbsg61
+g42
+((lp11768
+tp11769
+Rp11770
+sg65
+g0
+(g66
+g2
+Ntp11771
+Rp11772
+(dp11773
+g70
+Nsg71
+Nsg72
+(dp11774
+sg74
+I00
+sbsg75
+g4
+sbsVsuite
+p11775
+g0
+(g28
+g2
+Ntp11776
+Rp11777
+(dp11778
+g32
+g11775
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I448
+sg38
+g11703
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11775
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11779
+tp11780
+Rp11781
+(dp11782
+g59
+(lp11783
+sbsg61
+g42
+((lp11784
+tp11785
+Rp11786
+sg65
+g0
+(g114
+g2
+Ntp11787
+Rp11788
+(dp11789
+g72
+(dp11790
+sbsg75
+g4
+sbsVinstall_date
+p11791
+g0
+(g28
+g2
+Ntp11792
+Rp11793
+(dp11794
+g32
+g11791
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I450
+sg38
+g11703
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11791
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11795
+tp11796
+Rp11797
+(dp11798
+g59
+(lp11799
+sbsg61
+g42
+((lp11800
+tp11801
+Rp11802
+sg65
+g0
+(g155
+g2
+Ntp11803
+Rp11804
+(dp11805
+g159
+I01
+sg72
+(dp11806
+sbsg75
+g4
+sbsVid
+p11807
+g0
+(g28
+g2
+Ntp11808
+Rp11809
+(dp11810
+g32
+g11807
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I444
+sg38
+g11703
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11807
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11811
+tp11812
+Rp11813
+(dp11814
+g59
+(lp11815
+sbsg61
+g42
+((lp11816
+tp11817
+Rp11818
+sg65
+g0
+(g114
+g2
+Ntp11819
+Rp11820
+(dp11821
+g72
+(dp11822
+sbsg75
+g4
+sbstp11823
+Rp11824
+(dp11825
+g59
+(lp11826
+g11807
+ag11711
+ag11759
+ag11727
+ag11775
+ag11743
+ag11791
+asbsbsg48
+g11701
+sg192
+g0
+(g193
+g2
+Ntp11827
+Rp11828
+(dp11829
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp11830
+Rp11831
+(dp11832
+g23
+g0
+(g24
+g25
+(dp11833
+tp11834
+Rp11835
+(dp11836
+g59
+(lp11837
+sbsbsg208
+(lp11838
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp11839
+tp11840
+Rp11841
+sg222
+g54
+((lp11842
+tp11843
+Rp11844
+(dp11845
+g59
+(lp11846
+sbsg228
+(lp11847
+sg217
+(dp11848
+sg231
+g11701
+sg61
+g42
+((lp11849
+g11828
+atp11850
+Rp11851
+sg233
+Nsg232
+NsbsS'file_arch_suite'
+p11852
+g0
+(g9
+g2
+Ntp11853
+Rp11854
+(dp11855
+g13
+g14
+(g15
+tp11856
+Rp11857
+sg18
+g0
+(g19
+g2
+Ntp11858
+Rp11859
+(dp11860
+g23
+g0
+(g24
+g25
+(dp11861
+Vsuite
+p11862
+g0
+(g28
+g2
+Ntp11863
+Rp11864
+(dp11865
+g32
+g11862
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I407
+sg38
+g11854
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11862
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11866
+tp11867
+Rp11868
+(dp11869
+g59
+(lp11870
+sbsg61
+g42
+((lp11871
+tp11872
+Rp11873
+sg65
+g0
+(g114
+g2
+Ntp11874
+Rp11875
+(dp11876
+g72
+(dp11877
+sbsg75
+g4
+sbsVarchitecture
+p11878
+g0
+(g28
+g2
+Ntp11879
+Rp11880
+(dp11881
+g32
+g11878
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I406
+sg38
+g11854
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11878
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11882
+tp11883
+Rp11884
+(dp11885
+g59
+(lp11886
+sbsg61
+g42
+((lp11887
+tp11888
+Rp11889
+sg65
+g0
+(g114
+g2
+Ntp11890
+Rp11891
+(dp11892
+g72
+(dp11893
+sbsg75
+g4
+sbsVfile
+p11894
+g0
+(g28
+g2
+Ntp11895
+Rp11896
+(dp11897
+g32
+g11894
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I404
+sg38
+g11854
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11894
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11898
+tp11899
+Rp11900
+(dp11901
+g59
+(lp11902
+sbsg61
+g42
+((lp11903
+tp11904
+Rp11905
+sg65
+g0
+(g114
+g2
+Ntp11906
+Rp11907
+(dp11908
+g72
+(dp11909
+sbsg75
+g4
+sbsVsize
+p11910
+g0
+(g28
+g2
+Ntp11911
+Rp11912
+(dp11913
+g32
+g11910
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I405
+sg38
+g11854
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11910
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11914
+tp11915
+Rp11916
+(dp11917
+g59
+(lp11918
+sbsg61
+g42
+((lp11919
+tp11920
+Rp11921
+sg65
+g0
+(g8388
+g2
+Ntp11922
+Rp11923
+(dp11924
+g72
+(dp11925
+sbsg75
+g4
+sbstp11926
+Rp11927
+(dp11928
+g59
+(lp11929
+g11894
+ag11910
+ag11878
+ag11862
+asbsbsg48
+g11852
+sg192
+g0
+(g193
+g2
+Ntp11930
+Rp11931
+(dp11932
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp11933
+Rp11934
+(dp11935
+g23
+g0
+(g24
+g25
+(dp11936
+tp11937
+Rp11938
+(dp11939
+g59
+(lp11940
+sbsbsg208
+(lp11941
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp11942
+tp11943
+Rp11944
+sg222
+g54
+((lp11945
+tp11946
+Rp11947
+(dp11948
+g59
+(lp11949
+sbsg228
+(lp11950
+sg217
+(dp11951
+sg231
+g11852
+sg61
+g42
+((lp11952
+g11931
+atp11953
+Rp11954
+sg233
+Nsg232
+NsbsS'bin_contents'
+p11955
+g0
+(g9
+g2
+Ntp11956
+Rp11957
+(dp11958
+g13
+g14
+(g15
+tp11959
+Rp11960
+sg18
+g0
+(g19
+g2
+Ntp11961
+Rp11962
+(dp11963
+g23
+g0
+(g24
+g25
+(dp11964
+Vbinary_id
+p11965
+g0
+(g28
+g2
+Ntp11966
+Rp11967
+(dp11968
+g32
+g11965
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I306
+sg38
+g11957
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g11965
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp11969
+g0
+(g598
+g2
+Ntp11970
+Rp11971
+(dp11972
+g602
+g11967
+sg197
+Nsg603
+Nsg48
+Vbin_contents_bin_fkey
+p11973
+sg605
+Vbinaries.id
+p11974
+sg607
+g0
+(g608
+g2
+Ntp11975
+Rp11976
+(dp11977
+g612
+(lp11978
+g11974
+asg52
+Nsg603
+Nsg614
+g54
+((lp11979
+g11971
+atp11980
+Rp11981
+(dp11982
+g59
+(lp11983
+g11971
+asbsg48
+g11973
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp11984
+Vbinary_id
+p11985
+asg38
+g11957
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp11986
+Rp11987
+(dp11988
+g23
+g0
+(g24
+g25
+(dp11989
+g11965
+g11967
+stp11990
+Rp11991
+(dp11992
+g59
+(lp11993
+g11965
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp11994
+Rp11995
+(dp11996
+g59
+(lp11997
+g11971
+asbsg61
+g42
+((lp11998
+tp11999
+Rp12000
+sg65
+g0
+(g114
+g2
+Ntp12001
+Rp12002
+(dp12003
+g72
+(dp12004
+sbsg75
+g4
+sbsVmodified
+p12005
+g0
+(g28
+g2
+Ntp12006
+Rp12007
+(dp12008
+g32
+g12005
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12009
+Rp12010
+(dp12011
+g92
+g12007
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12012
+Rp12013
+(dp12014
+g99
+Vnow()
+p12015
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12016
+sbsbsg37
+I308
+sg38
+g11957
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g12005
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12017
+tp12018
+Rp12019
+(dp12020
+g59
+(lp12021
+sbsg61
+g42
+((lp12022
+tp12023
+Rp12024
+sg65
+g0
+(g155
+g2
+Ntp12025
+Rp12026
+(dp12027
+g159
+I01
+sg72
+(dp12028
+sbsg75
+g4
+sbsVfile
+p12029
+g0
+(g28
+g2
+Ntp12030
+Rp12031
+(dp12032
+g32
+g12029
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I305
+sg38
+g11957
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g12029
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12033
+tp12034
+Rp12035
+(dp12036
+g59
+(lp12037
+sbsg61
+g42
+((lp12038
+tp12039
+Rp12040
+sg65
+g0
+(g66
+g2
+Ntp12041
+Rp12042
+(dp12043
+g70
+Nsg71
+Nsg72
+(dp12044
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p12045
+g0
+(g28
+g2
+Ntp12046
+Rp12047
+(dp12048
+g32
+g12045
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12049
+Rp12050
+(dp12051
+g92
+g12047
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12052
+Rp12053
+(dp12054
+g99
+Vnow()
+p12055
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12056
+sbsbsg37
+I307
+sg38
+g11957
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g12045
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12057
+tp12058
+Rp12059
+(dp12060
+g59
+(lp12061
+sbsg61
+g42
+((lp12062
+tp12063
+Rp12064
+sg65
+g0
+(g155
+g2
+Ntp12065
+Rp12066
+(dp12067
+g159
+I01
+sg72
+(dp12068
+sbsg75
+g4
+sbstp12069
+Rp12070
+(dp12071
+g59
+(lp12072
+g12029
+ag11965
+ag12045
+ag12005
+asbsbsg48
+g11955
+sg192
+g0
+(g193
+g2
+Ntp12073
+Rp12074
+(dp12075
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp12076
+Rp12077
+(dp12078
+g23
+g0
+(g24
+g25
+(dp12079
+tp12080
+Rp12081
+(dp12082
+g59
+(lp12083
+sbsbsg208
+(lp12084
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp12085
+g0
+(g212
+g2
+Ntp12086
+Rp12087
+(dp12088
+g48
+S'ind_bin_contents_binary'
+p12089
+sg217
+(dp12090
+sg38
+g11957
+sg39
+I00
+sg199
+(lp12091
+g11967
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp12092
+Rp12093
+(dp12094
+g48
+S'bin_contents_file_key'
+p12095
+sg217
+(dp12096
+sg38
+g11957
+sg39
+I01
+sg199
+(lp12097
+g12031
+ag11967
+asg75
+g4
+sbatp12098
+Rp12099
+sg222
+g54
+((lp12100
+g11971
+atp12101
+Rp12102
+(dp12103
+g59
+(lp12104
+g11971
+asbsg228
+(lp12105
+sg217
+(dp12106
+sg231
+g11955
+sg61
+g42
+((lp12107
+g12074
+ag11976
+atp12108
+Rp12109
+sg233
+Nsg232
+NsbsS'bin_assoc_by_arch'
+p12110
+g0
+(g9
+g2
+Ntp12111
+Rp12112
+(dp12113
+g13
+g14
+(g15
+tp12114
+Rp12115
+sg18
+g0
+(g19
+g2
+Ntp12116
+Rp12117
+(dp12118
+g23
+g0
+(g24
+g25
+(dp12119
+Vbin
+p12120
+g0
+(g28
+g2
+Ntp12121
+Rp12122
+(dp12123
+g32
+g12120
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I374
+sg38
+g12112
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g12120
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12124
+tp12125
+Rp12126
+(dp12127
+g59
+(lp12128
+sbsg61
+g42
+((lp12129
+tp12130
+Rp12131
+sg65
+g0
+(g114
+g2
+Ntp12132
+Rp12133
+(dp12134
+g72
+(dp12135
+sbsg75
+g4
+sbsVsuite
+p12136
+g0
+(g28
+g2
+Ntp12137
+Rp12138
+(dp12139
+g32
+g12136
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I373
+sg38
+g12112
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g12136
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12140
+tp12141
+Rp12142
+(dp12143
+g59
+(lp12144
+sbsg61
+g42
+((lp12145
+tp12146
+Rp12147
+sg65
+g0
+(g114
+g2
+Ntp12148
+Rp12149
+(dp12150
+g72
+(dp12151
+sbsg75
+g4
+sbsVarch
+p12152
+g0
+(g28
+g2
+Ntp12153
+Rp12154
+(dp12155
+g32
+g12152
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I375
+sg38
+g12112
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g12152
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12156
+tp12157
+Rp12158
+(dp12159
+g59
+(lp12160
+sbsg61
+g42
+((lp12161
+tp12162
+Rp12163
+sg65
+g0
+(g114
+g2
+Ntp12164
+Rp12165
+(dp12166
+g72
+(dp12167
+sbsg75
+g4
+sbstp12168
+Rp12169
+(dp12170
+g59
+(lp12171
+g12136
+ag12120
+ag12152
+asbsbsg48
+g12110
+sg192
+g0
+(g193
+g2
+Ntp12172
+Rp12173
+(dp12174
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp12175
+Rp12176
+(dp12177
+g23
+g0
+(g24
+g25
+(dp12178
+tp12179
+Rp12180
+(dp12181
+g59
+(lp12182
+sbsbsg208
+(lp12183
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp12184
+tp12185
+Rp12186
+sg222
+g54
+((lp12187
+tp12188
+Rp12189
+(dp12190
+g59
+(lp12191
+sbsg228
+(lp12192
+sg217
+(dp12193
+sg231
+g12110
+sg61
+g42
+((lp12194
+g12173
+atp12195
+Rp12196
+sg233
+Nsg232
+NsbsS'bin_associations'
+p12197
+g0
+(g9
+g2
+Ntp12198
+Rp12199
+(dp12200
+g13
+g14
+(g15
+tp12201
+Rp12202
+sg18
+g0
+(g19
+g2
+Ntp12203
+Rp12204
+(dp12205
+g23
+g0
+(g24
+g25
+(dp12206
+Vbin
+p12207
+g0
+(g28
+g2
+Ntp12208
+Rp12209
+(dp12210
+g32
+g12207
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I17
+sg38
+g12199
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12211
+g12209
+atp12212
+Rp12213
+sg46
+Nsg47
+Nsg48
+g12207
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12214
+g0
+(g598
+g2
+Ntp12215
+Rp12216
+(dp12217
+g602
+g12209
+sg197
+Nsg603
+Nsg48
+Vbin_associations_bin
+p12218
+sg605
+Vbinaries.id
+p12219
+sg607
+g0
+(g608
+g2
+Ntp12220
+Rp12221
+(dp12222
+g612
+(lp12223
+g12219
+asg52
+Nsg603
+Nsg614
+g54
+((lp12224
+g12216
+atp12225
+Rp12226
+(dp12227
+g59
+(lp12228
+g12216
+asbsg48
+g12218
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp12229
+Vbin
+p12230
+asg38
+g12199
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp12231
+Rp12232
+(dp12233
+g23
+g0
+(g24
+g25
+(dp12234
+g12207
+g12209
+stp12235
+Rp12236
+(dp12237
+g59
+(lp12238
+g12207
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp12239
+Rp12240
+(dp12241
+g59
+(lp12242
+g12216
+asbsg61
+g42
+((lp12243
+tp12244
+Rp12245
+sg65
+g0
+(g114
+g2
+Ntp12246
+Rp12247
+(dp12248
+g72
+(dp12249
+sbsg75
+g4
+sbsVsuite
+p12250
+g0
+(g28
+g2
+Ntp12251
+Rp12252
+(dp12253
+g32
+g12250
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I16
+sg38
+g12199
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12254
+g12252
+atp12255
+Rp12256
+sg46
+Nsg47
+Nsg48
+g12250
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12257
+g0
+(g598
+g2
+Ntp12258
+Rp12259
+(dp12260
+g602
+g12252
+sg197
+Nsg603
+Nsg48
+Vbin_associations_suite
+p12261
+sg605
+Vsuite.id
+p12262
+sg607
+g0
+(g608
+g2
+Ntp12263
+Rp12264
+(dp12265
+g612
+(lp12266
+g12262
+asg52
+Nsg603
+Nsg614
+g54
+((lp12267
+g12259
+atp12268
+Rp12269
+(dp12270
+g59
+(lp12271
+g12259
+asbsg48
+g12261
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp12272
+Vsuite
+p12273
+asg38
+g12199
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp12274
+Rp12275
+(dp12276
+g23
+g0
+(g24
+g25
+(dp12277
+g12250
+g12252
+stp12278
+Rp12279
+(dp12280
+g59
+(lp12281
+g12250
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp12282
+Rp12283
+(dp12284
+g59
+(lp12285
+g12259
+asbsg61
+g42
+((lp12286
+tp12287
+Rp12288
+sg65
+g0
+(g114
+g2
+Ntp12289
+Rp12290
+(dp12291
+g72
+(dp12292
+sbsg75
+g4
+sbsVcreated
+p12293
+g0
+(g28
+g2
+Ntp12294
+Rp12295
+(dp12296
+g32
+g12293
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12297
+Rp12298
+(dp12299
+g92
+g12295
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12300
+Rp12301
+(dp12302
+g99
+Vnow()
+p12303
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12304
+sbsbsg37
+I18
+sg38
+g12199
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12305
+g12295
+atp12306
+Rp12307
+sg46
+Nsg47
+Nsg48
+g12293
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12308
+tp12309
+Rp12310
+(dp12311
+g59
+(lp12312
+sbsg61
+g42
+((lp12313
+tp12314
+Rp12315
+sg65
+g0
+(g155
+g2
+Ntp12316
+Rp12317
+(dp12318
+g159
+I01
+sg72
+(dp12319
+sbsg75
+g4
+sbsVid
+p12320
+g0
+(g28
+g2
+Ntp12321
+Rp12322
+(dp12323
+g37
+I14
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g12199
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp12324
+g12322
+atp12325
+Rp12326
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp12327
+Rp12328
+(dp12329
+g32
+g12320
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12330
+Rp12331
+(dp12332
+g92
+g12328
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12333
+Rp12334
+(dp12335
+g99
+Vnextval(('bin_associations_id_seq'::text)::regclass)
+p12336
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12337
+sbsbsg37
+I15
+sg38
+g12199
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g12320
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp12338
+tp12339
+Rp12340
+(dp12341
+g59
+(lp12342
+sbsg61
+g42
+((lp12343
+tp12344
+Rp12345
+sg65
+g0
+(g114
+g2
+Ntp12346
+Rp12347
+(dp12348
+g72
+(dp12349
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp12350
+tp12351
+Rp12352
+(dp12353
+g59
+(lp12354
+sbsg61
+g42
+((lp12355
+tp12356
+Rp12357
+sg65
+g0
+(g127
+g2
+Ntp12358
+Rp12359
+(dp12360
+g72
+(dp12361
+sbsg75
+g4
+sbsVmodified
+p12362
+g0
+(g28
+g2
+Ntp12363
+Rp12364
+(dp12365
+g32
+g12362
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12366
+Rp12367
+(dp12368
+g92
+g12364
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12369
+Rp12370
+(dp12371
+g99
+Vnow()
+p12372
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12373
+sbsbsg37
+I19
+sg38
+g12199
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12374
+g12364
+atp12375
+Rp12376
+sg46
+Nsg47
+Nsg48
+g12362
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12377
+tp12378
+Rp12379
+(dp12380
+g59
+(lp12381
+sbsg61
+g42
+((lp12382
+tp12383
+Rp12384
+sg65
+g0
+(g155
+g2
+Ntp12385
+Rp12386
+(dp12387
+g159
+I01
+sg72
+(dp12388
+sbsg75
+g4
+sbstp12389
+Rp12390
+(dp12391
+g59
+(lp12392
+g12320
+ag12250
+ag12207
+ag12293
+ag12362
+asbsbsg48
+g12197
+sg192
+g0
+(g193
+g2
+Ntp12393
+Rp12394
+(dp12395
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp12396
+Rp12397
+(dp12398
+g23
+g0
+(g24
+g25
+(dp12399
+g12320
+g12322
+stp12400
+Rp12401
+(dp12402
+g59
+(lp12403
+g12320
+asbsbsg208
+(lp12404
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp12405
+g0
+(g212
+g2
+Ntp12406
+Rp12407
+(dp12408
+g48
+S'bin_associations_bin'
+p12409
+sg217
+(dp12410
+sg38
+g12199
+sg39
+I00
+sg199
+(lp12411
+g12209
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp12412
+Rp12413
+(dp12414
+g48
+S'bin_associations_suite_key'
+p12415
+sg217
+(dp12416
+sg38
+g12199
+sg39
+I01
+sg199
+(lp12417
+g12252
+ag12209
+asg75
+g4
+sbatp12418
+Rp12419
+sg222
+g54
+((lp12420
+g12216
+ag12259
+atp12421
+Rp12422
+(dp12423
+g59
+(lp12424
+g12216
+ag12259
+asbsg228
+(lp12425
+sg217
+(dp12426
+sg231
+g12197
+sg232
+Nsg233
+Nsg61
+g42
+((lp12427
+g12394
+ag12221
+ag12264
+atp12428
+Rp12429
+sg237
+S'bin_associations'
+p12430
+sbsS'src_uploaders'
+p12431
+g0
+(g9
+g2
+Ntp12432
+Rp12433
+(dp12434
+g13
+g14
+(g15
+tp12435
+Rp12436
+sg18
+g0
+(g19
+g2
+Ntp12437
+Rp12438
+(dp12439
+g23
+g0
+(g24
+g25
+(dp12440
+Vsource
+p12441
+g0
+(g28
+g2
+Ntp12442
+Rp12443
+(dp12444
+g32
+g12441
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I290
+sg38
+g12433
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12445
+g12443
+atp12446
+Rp12447
+sg46
+Nsg47
+Nsg48
+g12441
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12448
+g0
+(g598
+g2
+Ntp12449
+Rp12450
+(dp12451
+g602
+g12443
+sg197
+Nsg603
+Nsg48
+Vsrc_uploaders_source
+p12452
+sg605
+Vsource.id
+p12453
+sg607
+g0
+(g608
+g2
+Ntp12454
+Rp12455
+(dp12456
+g612
+(lp12457
+g12453
+asg52
+Nsg603
+Nsg614
+g54
+((lp12458
+g12450
+atp12459
+Rp12460
+(dp12461
+g59
+(lp12462
+g12450
+asbsg48
+g12452
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp12463
+Vsource
+p12464
+asg38
+g12433
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp12465
+Rp12466
+(dp12467
+g23
+g0
+(g24
+g25
+(dp12468
+g12441
+g12443
+stp12469
+Rp12470
+(dp12471
+g59
+(lp12472
+g12441
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp12473
+Rp12474
+(dp12475
+g59
+(lp12476
+g12450
+asbsg61
+g42
+((lp12477
+tp12478
+Rp12479
+sg65
+g0
+(g114
+g2
+Ntp12480
+Rp12481
+(dp12482
+g72
+(dp12483
+sbsg75
+g4
+sbsVcreated
+p12484
+g0
+(g28
+g2
+Ntp12485
+Rp12486
+(dp12487
+g32
+g12484
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12488
+Rp12489
+(dp12490
+g92
+g12486
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12491
+Rp12492
+(dp12493
+g99
+Vnow()
+p12494
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12495
+sbsbsg37
+I292
+sg38
+g12433
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12496
+g12486
+atp12497
+Rp12498
+sg46
+Nsg47
+Nsg48
+g12484
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12499
+tp12500
+Rp12501
+(dp12502
+g59
+(lp12503
+sbsg61
+g42
+((lp12504
+tp12505
+Rp12506
+sg65
+g0
+(g155
+g2
+Ntp12507
+Rp12508
+(dp12509
+g159
+I01
+sg72
+(dp12510
+sbsg75
+g4
+sbsVmaintainer
+p12511
+g0
+(g28
+g2
+Ntp12512
+Rp12513
+(dp12514
+g32
+g12511
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I291
+sg38
+g12433
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12515
+g12513
+atp12516
+Rp12517
+sg46
+Nsg47
+Nsg48
+g12511
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12518
+g0
+(g598
+g2
+Ntp12519
+Rp12520
+(dp12521
+g602
+g12513
+sg197
+Nsg603
+Nsg48
+Vsrc_uploaders_maintainer
+p12522
+sg605
+Vmaintainer.id
+p12523
+sg607
+g0
+(g608
+g2
+Ntp12524
+Rp12525
+(dp12526
+g612
+(lp12527
+g12523
+asg52
+Nsg603
+Nsg614
+g54
+((lp12528
+g12520
+atp12529
+Rp12530
+(dp12531
+g59
+(lp12532
+g12520
+asbsg48
+g12522
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp12533
+Vmaintainer
+p12534
+asg38
+g12433
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp12535
+Rp12536
+(dp12537
+g23
+g0
+(g24
+g25
+(dp12538
+g12511
+g12513
+stp12539
+Rp12540
+(dp12541
+g59
+(lp12542
+g12511
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp12543
+Rp12544
+(dp12545
+g59
+(lp12546
+g12520
+asbsg61
+g42
+((lp12547
+tp12548
+Rp12549
+sg65
+g0
+(g114
+g2
+Ntp12550
+Rp12551
+(dp12552
+g72
+(dp12553
+sbsg75
+g4
+sbsVid
+p12554
+g0
+(g28
+g2
+Ntp12555
+Rp12556
+(dp12557
+g37
+I288
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g12433
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp12558
+g12556
+atp12559
+Rp12560
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp12561
+Rp12562
+(dp12563
+g32
+g12554
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12564
+Rp12565
+(dp12566
+g92
+g12562
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12567
+Rp12568
+(dp12569
+g99
+Vnextval('src_uploaders_id_seq'::regclass)
+p12570
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12571
+sbsbsg37
+I289
+sg38
+g12433
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g12554
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp12572
+tp12573
+Rp12574
+(dp12575
+g59
+(lp12576
+sbsg61
+g42
+((lp12577
+tp12578
+Rp12579
+sg65
+g0
+(g114
+g2
+Ntp12580
+Rp12581
+(dp12582
+g72
+(dp12583
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp12584
+tp12585
+Rp12586
+(dp12587
+g59
+(lp12588
+sbsg61
+g42
+((lp12589
+tp12590
+Rp12591
+sg65
+g0
+(g127
+g2
+Ntp12592
+Rp12593
+(dp12594
+g72
+(dp12595
+sbsg75
+g4
+sbsVmodified
+p12596
+g0
+(g28
+g2
+Ntp12597
+Rp12598
+(dp12599
+g32
+g12596
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12600
+Rp12601
+(dp12602
+g92
+g12598
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12603
+Rp12604
+(dp12605
+g99
+Vnow()
+p12606
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12607
+sbsbsg37
+I293
+sg38
+g12433
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12608
+g12598
+atp12609
+Rp12610
+sg46
+Nsg47
+Nsg48
+g12596
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12611
+tp12612
+Rp12613
+(dp12614
+g59
+(lp12615
+sbsg61
+g42
+((lp12616
+tp12617
+Rp12618
+sg65
+g0
+(g155
+g2
+Ntp12619
+Rp12620
+(dp12621
+g159
+I01
+sg72
+(dp12622
+sbsg75
+g4
+sbstp12623
+Rp12624
+(dp12625
+g59
+(lp12626
+g12554
+ag12441
+ag12511
+ag12484
+ag12596
+asbsbsg48
+g12431
+sg192
+g0
+(g193
+g2
+Ntp12627
+Rp12628
+(dp12629
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp12630
+Rp12631
+(dp12632
+g23
+g0
+(g24
+g25
+(dp12633
+g12554
+g12556
+stp12634
+Rp12635
+(dp12636
+g59
+(lp12637
+g12554
+asbsbsg208
+(lp12638
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp12639
+g0
+(g212
+g2
+Ntp12640
+Rp12641
+(dp12642
+g48
+S'src_uploaders_source_key'
+p12643
+sg217
+(dp12644
+sg38
+g12433
+sg39
+I01
+sg199
+(lp12645
+g12443
+ag12513
+asg75
+g4
+sbatp12646
+Rp12647
+sg222
+g54
+((lp12648
+g12520
+ag12450
+atp12649
+Rp12650
+(dp12651
+g59
+(lp12652
+g12520
+ag12450
+asbsg228
+(lp12653
+sg217
+(dp12654
+sg231
+g12431
+sg232
+Nsg233
+Nsg61
+g42
+((lp12655
+g12628
+ag12525
+ag12455
+atp12656
+Rp12657
+sg237
+S'src_uploaders'
+p12658
+sbsS'build_queue_files'
+p12659
+g0
+(g9
+g2
+Ntp12660
+Rp12661
+(dp12662
+g13
+g14
+(g15
+tp12663
+Rp12664
+sg18
+g0
+(g19
+g2
+Ntp12665
+Rp12666
+(dp12667
+g23
+g0
+(g24
+g25
+(dp12668
+Vbuild_queue_id
+p12669
+g0
+(g28
+g2
+Ntp12670
+Rp12671
+(dp12672
+g32
+g12669
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I156
+sg38
+g12661
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12673
+g12671
+atp12674
+Rp12675
+sg46
+Nsg47
+Nsg48
+g12669
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12676
+g0
+(g598
+g2
+Ntp12677
+Rp12678
+(dp12679
+g602
+g12671
+sg197
+Nsg603
+Nsg48
+Vbuild_queue_files_build_queue_id_fkey
+p12680
+sg605
+Vbuild_queue.id
+p12681
+sg607
+g0
+(g608
+g2
+Ntp12682
+Rp12683
+(dp12684
+g612
+(lp12685
+g12681
+asg52
+Nsg603
+Nsg614
+g54
+((lp12686
+g12678
+atp12687
+Rp12688
+(dp12689
+g59
+(lp12690
+g12678
+asbsg48
+g12680
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp12691
+Vbuild_queue_id
+p12692
+asg38
+g12661
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp12693
+Rp12694
+(dp12695
+g23
+g0
+(g24
+g25
+(dp12696
+g12669
+g12671
+stp12697
+Rp12698
+(dp12699
+g59
+(lp12700
+g12669
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp12701
+Rp12702
+(dp12703
+g59
+(lp12704
+g12678
+asbsg61
+g42
+((lp12705
+tp12706
+Rp12707
+sg65
+g0
+(g114
+g2
+Ntp12708
+Rp12709
+(dp12710
+g72
+(dp12711
+sbsg75
+g4
+sbsVcreated
+p12712
+g0
+(g28
+g2
+Ntp12713
+Rp12714
+(dp12715
+g32
+g12712
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12716
+Rp12717
+(dp12718
+g92
+g12714
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12719
+Rp12720
+(dp12721
+g99
+Vnow()
+p12722
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12723
+sbsbsg37
+I161
+sg38
+g12661
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12724
+g12714
+atp12725
+Rp12726
+sg46
+Nsg47
+Nsg48
+g12712
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12727
+tp12728
+Rp12729
+(dp12730
+g59
+(lp12731
+sbsg61
+g42
+((lp12732
+tp12733
+Rp12734
+sg65
+g0
+(g155
+g2
+Ntp12735
+Rp12736
+(dp12737
+g159
+I01
+sg72
+(dp12738
+sbsg75
+g4
+sbsVinsertdate
+p12739
+g0
+(g28
+g2
+Ntp12740
+Rp12741
+(dp12742
+g32
+g12739
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12743
+Rp12744
+(dp12745
+g92
+g12741
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12746
+Rp12747
+(dp12748
+g99
+Vnow()
+p12749
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12750
+sbsbsg37
+I157
+sg38
+g12661
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12751
+g12741
+atp12752
+Rp12753
+sg46
+Nsg47
+Nsg48
+g12739
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12754
+tp12755
+Rp12756
+(dp12757
+g59
+(lp12758
+sbsg61
+g42
+((lp12759
+tp12760
+Rp12761
+sg65
+g0
+(g155
+g2
+Ntp12762
+Rp12763
+(dp12764
+g159
+I00
+sg72
+(dp12765
+sbsg75
+g4
+sbsVmodified
+p12766
+g0
+(g28
+g2
+Ntp12767
+Rp12768
+(dp12769
+g32
+g12766
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12770
+Rp12771
+(dp12772
+g92
+g12768
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12773
+Rp12774
+(dp12775
+g99
+Vnow()
+p12776
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12777
+sbsbsg37
+I162
+sg38
+g12661
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12778
+g12768
+atp12779
+Rp12780
+sg46
+Nsg47
+Nsg48
+g12766
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12781
+tp12782
+Rp12783
+(dp12784
+g59
+(lp12785
+sbsg61
+g42
+((lp12786
+tp12787
+Rp12788
+sg65
+g0
+(g155
+g2
+Ntp12789
+Rp12790
+(dp12791
+g159
+I01
+sg72
+(dp12792
+sbsg75
+g4
+sbsVfilename
+p12793
+g0
+(g28
+g2
+Ntp12794
+Rp12795
+(dp12796
+g32
+g12793
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I159
+sg38
+g12661
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12797
+g12795
+atp12798
+Rp12799
+sg46
+Nsg47
+Nsg48
+g12793
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12800
+tp12801
+Rp12802
+(dp12803
+g59
+(lp12804
+sbsg61
+g42
+((lp12805
+tp12806
+Rp12807
+sg65
+g0
+(g66
+g2
+Ntp12808
+Rp12809
+(dp12810
+g70
+Nsg71
+Nsg72
+(dp12811
+sg74
+I00
+sbsg75
+g4
+sbsVlastused
+p12812
+g0
+(g28
+g2
+Ntp12813
+Rp12814
+(dp12815
+g32
+g12812
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I158
+sg38
+g12661
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12816
+g12814
+atp12817
+Rp12818
+sg46
+Nsg47
+Nsg48
+g12812
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12819
+tp12820
+Rp12821
+(dp12822
+g59
+(lp12823
+sbsg61
+g42
+((lp12824
+tp12825
+Rp12826
+sg65
+g0
+(g155
+g2
+Ntp12827
+Rp12828
+(dp12829
+g159
+I00
+sg72
+(dp12830
+sbsg75
+g4
+sbsVid
+p12831
+g0
+(g28
+g2
+Ntp12832
+Rp12833
+(dp12834
+g37
+I154
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g12661
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp12835
+g12833
+atp12836
+Rp12837
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp12838
+Rp12839
+(dp12840
+g32
+g12831
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp12841
+Rp12842
+(dp12843
+g92
+g12839
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp12844
+Rp12845
+(dp12846
+g99
+Vnextval('queue_files_id_seq'::regclass)
+p12847
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp12848
+sbsbsg37
+I155
+sg38
+g12661
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g12831
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp12849
+tp12850
+Rp12851
+(dp12852
+g59
+(lp12853
+sbsg61
+g42
+((lp12854
+tp12855
+Rp12856
+sg65
+g0
+(g114
+g2
+Ntp12857
+Rp12858
+(dp12859
+g72
+(dp12860
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp12861
+tp12862
+Rp12863
+(dp12864
+g59
+(lp12865
+sbsg61
+g42
+((lp12866
+tp12867
+Rp12868
+sg65
+g0
+(g127
+g2
+Ntp12869
+Rp12870
+(dp12871
+g72
+(dp12872
+sbsg75
+g4
+sbsVfileid
+p12873
+g0
+(g28
+g2
+Ntp12874
+Rp12875
+(dp12876
+g32
+g12873
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I160
+sg38
+g12661
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp12877
+g12875
+atp12878
+Rp12879
+sg46
+Nsg47
+Nsg48
+g12873
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp12880
+g0
+(g598
+g2
+Ntp12881
+Rp12882
+(dp12883
+g602
+g12875
+sg197
+Nsg603
+Nsg48
+Vqueue_files_fileid_fkey
+p12884
+sg605
+Vfiles.id
+p12885
+sg607
+g0
+(g608
+g2
+Ntp12886
+Rp12887
+(dp12888
+g612
+(lp12889
+g12885
+asg52
+Nsg603
+Nsg614
+g54
+((lp12890
+g12882
+atp12891
+Rp12892
+(dp12893
+g59
+(lp12894
+g12882
+asbsg48
+g12884
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp12895
+Vfileid
+p12896
+asg38
+g12661
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp12897
+Rp12898
+(dp12899
+g23
+g0
+(g24
+g25
+(dp12900
+g12873
+g12875
+stp12901
+Rp12902
+(dp12903
+g59
+(lp12904
+g12873
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp12905
+Rp12906
+(dp12907
+g59
+(lp12908
+g12882
+asbsg61
+g42
+((lp12909
+tp12910
+Rp12911
+sg65
+g0
+(g114
+g2
+Ntp12912
+Rp12913
+(dp12914
+g72
+(dp12915
+sbsg75
+g4
+sbstp12916
+Rp12917
+(dp12918
+g59
+(lp12919
+g12831
+ag12669
+ag12739
+ag12812
+ag12793
+ag12873
+ag12712
+ag12766
+asbsbsg48
+g12659
+sg192
+g0
+(g193
+g2
+Ntp12920
+Rp12921
+(dp12922
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp12923
+Rp12924
+(dp12925
+g23
+g0
+(g24
+g25
+(dp12926
+g12831
+g12833
+stp12927
+Rp12928
+(dp12929
+g59
+(lp12930
+g12831
+asbsbsg208
+(lp12931
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp12932
+tp12933
+Rp12934
+sg222
+g54
+((lp12935
+g12678
+ag12882
+atp12936
+Rp12937
+(dp12938
+g59
+(lp12939
+g12678
+ag12882
+asbsg228
+(lp12940
+sg217
+(dp12941
+sg231
+g12659
+sg232
+Nsg233
+Nsg61
+g42
+((lp12942
+g12921
+ag12683
+ag12887
+atp12943
+Rp12944
+sg237
+S'build_queue_files'
+p12945
+sbsS'suite_src_formats'
+p12946
+g0
+(g9
+g2
+Ntp12947
+Rp12948
+(dp12949
+g13
+g14
+(g15
+tp12950
+Rp12951
+sg18
+g0
+(g19
+g2
+Ntp12952
+Rp12953
+(dp12954
+g23
+g0
+(g24
+g25
+(dp12955
+Vsuite
+p12956
+g0
+(g28
+g2
+Ntp12957
+Rp12958
+(dp12959
+g37
+I340
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g12956
+sg38
+g12948
+sg1267
+g42
+((lp12960
+g12958
+atp12961
+Rp12962
+sg48
+g12956
+sg41
+g42
+((lp12963
+g12958
+atp12964
+Rp12965
+sg46
+Nsg39
+Nsg47
+Nsg40
+I01
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp12966
+g0
+(g598
+g2
+Ntp12967
+Rp12968
+(dp12969
+g602
+g12958
+sg197
+Nsg603
+Nsg48
+Vsuite_key
+p12970
+sg605
+Vsuite.id
+p12971
+sg607
+g0
+(g608
+g2
+Ntp12972
+Rp12973
+(dp12974
+g612
+(lp12975
+g12971
+asg52
+Nsg603
+Nsg614
+g54
+((lp12976
+g12968
+atp12977
+Rp12978
+(dp12979
+g59
+(lp12980
+g12968
+asbsg48
+g12970
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp12981
+Vsuite
+p12982
+asg38
+g12948
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp12983
+Rp12984
+(dp12985
+g23
+g0
+(g24
+g25
+(dp12986
+g12956
+g12958
+stp12987
+Rp12988
+(dp12989
+g59
+(lp12990
+g12956
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg92
+g1300
+sg624
+I00
+sbatp12991
+Rp12992
+(dp12993
+g59
+(lp12994
+g12968
+asbsg61
+g42
+((lp12995
+tp12996
+Rp12997
+sg65
+g0
+(g114
+g2
+Ntp12998
+Rp12999
+(dp13000
+g72
+(dp13001
+sbsg75
+g4
+sbsVmodified
+p13002
+g0
+(g28
+g2
+Ntp13003
+Rp13004
+(dp13005
+g32
+g13002
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp13006
+Rp13007
+(dp13008
+g92
+g13004
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp13009
+Rp13010
+(dp13011
+g99
+Vnow()
+p13012
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp13013
+sbsbsg37
+I343
+sg38
+g12948
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13014
+g13004
+atp13015
+Rp13016
+sg46
+Nsg47
+Nsg48
+g13002
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13017
+tp13018
+Rp13019
+(dp13020
+g59
+(lp13021
+sbsg61
+g42
+((lp13022
+tp13023
+Rp13024
+sg65
+g0
+(g155
+g2
+Ntp13025
+Rp13026
+(dp13027
+g159
+I01
+sg72
+(dp13028
+sbsg75
+g4
+sbsVsrc_format
+p13029
+g0
+(g28
+g2
+Ntp13030
+Rp13031
+(dp13032
+g37
+I341
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g13029
+sg38
+g12948
+sg1267
+g42
+((lp13033
+g13031
+atp13034
+Rp13035
+sg48
+g13029
+sg41
+g42
+((lp13036
+g13031
+atp13037
+Rp13038
+sg46
+Nsg39
+Nsg47
+Nsg40
+I01
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp13039
+g0
+(g598
+g2
+Ntp13040
+Rp13041
+(dp13042
+g602
+g13031
+sg197
+Nsg603
+Nsg48
+Vsrc_format_key
+p13043
+sg605
+Vsrc_format.id
+p13044
+sg607
+g0
+(g608
+g2
+Ntp13045
+Rp13046
+(dp13047
+g612
+(lp13048
+g13044
+asg52
+Nsg603
+Nsg614
+g54
+((lp13049
+g13041
+atp13050
+Rp13051
+(dp13052
+g59
+(lp13053
+g13041
+asbsg48
+g13043
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp13054
+Vsrc_format
+p13055
+asg38
+g12948
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp13056
+Rp13057
+(dp13058
+g23
+g0
+(g24
+g25
+(dp13059
+g13029
+g13031
+stp13060
+Rp13061
+(dp13062
+g59
+(lp13063
+g13029
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg92
+g2313
+sg624
+I00
+sbatp13064
+Rp13065
+(dp13066
+g59
+(lp13067
+g13041
+asbsg61
+g42
+((lp13068
+tp13069
+Rp13070
+sg65
+g0
+(g114
+g2
+Ntp13071
+Rp13072
+(dp13073
+g72
+(dp13074
+sbsg75
+g4
+sbsVcreated
+p13075
+g0
+(g28
+g2
+Ntp13076
+Rp13077
+(dp13078
+g32
+g13075
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp13079
+Rp13080
+(dp13081
+g92
+g13077
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp13082
+Rp13083
+(dp13084
+g99
+Vnow()
+p13085
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp13086
+sbsbsg37
+I342
+sg38
+g12948
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13087
+g13077
+atp13088
+Rp13089
+sg46
+Nsg47
+Nsg48
+g13075
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13090
+tp13091
+Rp13092
+(dp13093
+g59
+(lp13094
+sbsg61
+g42
+((lp13095
+tp13096
+Rp13097
+sg65
+g0
+(g155
+g2
+Ntp13098
+Rp13099
+(dp13100
+g159
+I01
+sg72
+(dp13101
+sbsg75
+g4
+sbstp13102
+Rp13103
+(dp13104
+g59
+(lp13105
+g12956
+ag13029
+ag13075
+ag13002
+asbsbsg48
+g12946
+sg192
+g0
+(g193
+g2
+Ntp13106
+Rp13107
+(dp13108
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp13109
+Rp13110
+(dp13111
+g23
+g0
+(g24
+g25
+(dp13112
+g12956
+g12958
+sg13029
+g13031
+stp13113
+Rp13114
+(dp13115
+g59
+(lp13116
+g12956
+ag13029
+asbsbsg208
+(lp13117
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp13118
+g0
+(g212
+g2
+Ntp13119
+Rp13120
+(dp13121
+g48
+S'suite_src_formats_suite_key'
+p13122
+sg217
+(dp13123
+sg38
+g12948
+sg39
+I01
+sg199
+(lp13124
+g12958
+ag13031
+asg75
+g4
+sbatp13125
+Rp13126
+sg222
+g54
+((lp13127
+g13041
+ag12968
+atp13128
+Rp13129
+(dp13130
+g59
+(lp13131
+g13041
+ag12968
+asbsg228
+(lp13132
+sg217
+(dp13133
+sg231
+g12946
+sg232
+Nsg233
+Nsg61
+g42
+((lp13134
+g13107
+ag13046
+ag12973
+atp13135
+Rp13136
+sg237
+S'suite_src_formats'
+p13137
+sbsS'src_associations_bin'
+p13138
+g0
+(g9
+g2
+Ntp13139
+Rp13140
+(dp13141
+g13
+g14
+(g15
+tp13142
+Rp13143
+sg18
+g0
+(g19
+g2
+Ntp13144
+Rp13145
+(dp13146
+g23
+g0
+(g24
+g25
+(dp13147
+Vbin
+p13148
+g0
+(g28
+g2
+Ntp13149
+Rp13150
+(dp13151
+g32
+g13148
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I454
+sg38
+g13140
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13148
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13152
+tp13153
+Rp13154
+(dp13155
+g59
+(lp13156
+sbsg61
+g42
+((lp13157
+tp13158
+Rp13159
+sg65
+g0
+(g114
+g2
+Ntp13160
+Rp13161
+(dp13162
+g72
+(dp13163
+sbsg75
+g4
+sbsVsource
+p13164
+g0
+(g28
+g2
+Ntp13165
+Rp13166
+(dp13167
+g32
+g13164
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I452
+sg38
+g13140
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13164
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13168
+tp13169
+Rp13170
+(dp13171
+g59
+(lp13172
+sbsg61
+g42
+((lp13173
+tp13174
+Rp13175
+sg65
+g0
+(g114
+g2
+Ntp13176
+Rp13177
+(dp13178
+g72
+(dp13179
+sbsg75
+g4
+sbsVsuite
+p13180
+g0
+(g28
+g2
+Ntp13181
+Rp13182
+(dp13183
+g32
+g13180
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I453
+sg38
+g13140
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13180
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13184
+tp13185
+Rp13186
+(dp13187
+g59
+(lp13188
+sbsg61
+g42
+((lp13189
+tp13190
+Rp13191
+sg65
+g0
+(g114
+g2
+Ntp13192
+Rp13193
+(dp13194
+g72
+(dp13195
+sbsg75
+g4
+sbsVarchitecture
+p13196
+g0
+(g28
+g2
+Ntp13197
+Rp13198
+(dp13199
+g32
+g13196
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I455
+sg38
+g13140
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13196
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13200
+tp13201
+Rp13202
+(dp13203
+g59
+(lp13204
+sbsg61
+g42
+((lp13205
+tp13206
+Rp13207
+sg65
+g0
+(g114
+g2
+Ntp13208
+Rp13209
+(dp13210
+g72
+(dp13211
+sbsg75
+g4
+sbsVid
+p13212
+g0
+(g28
+g2
+Ntp13213
+Rp13214
+(dp13215
+g32
+g13212
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I451
+sg38
+g13140
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13212
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13216
+tp13217
+Rp13218
+(dp13219
+g59
+(lp13220
+sbsg61
+g42
+((lp13221
+tp13222
+Rp13223
+sg65
+g0
+(g114
+g2
+Ntp13224
+Rp13225
+(dp13226
+g72
+(dp13227
+sbsg75
+g4
+sbstp13228
+Rp13229
+(dp13230
+g59
+(lp13231
+g13212
+ag13164
+ag13180
+ag13148
+ag13196
+asbsbsg48
+g13138
+sg192
+g0
+(g193
+g2
+Ntp13232
+Rp13233
+(dp13234
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp13235
+Rp13236
+(dp13237
+g23
+g0
+(g24
+g25
+(dp13238
+tp13239
+Rp13240
+(dp13241
+g59
+(lp13242
+sbsbsg208
+(lp13243
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp13244
+tp13245
+Rp13246
+sg222
+g54
+((lp13247
+tp13248
+Rp13249
+(dp13250
+g59
+(lp13251
+sbsg228
+(lp13252
+sg217
+(dp13253
+sg231
+g13138
+sg61
+g42
+((lp13254
+g13233
+atp13255
+Rp13256
+sg233
+Nsg232
+NsbsS'newest_all_associations'
+p13257
+g0
+(g9
+g2
+Ntp13258
+Rp13259
+(dp13260
+g13
+g14
+(g15
+tp13261
+Rp13262
+sg18
+g0
+(g19
+g2
+Ntp13263
+Rp13264
+(dp13265
+g23
+g0
+(g24
+g25
+(dp13266
+Vsuite
+p13267
+g0
+(g28
+g2
+Ntp13268
+Rp13269
+(dp13270
+g32
+g13267
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I410
+sg38
+g13259
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13267
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13271
+tp13272
+Rp13273
+(dp13274
+g59
+(lp13275
+sbsg61
+g42
+((lp13276
+tp13277
+Rp13278
+sg65
+g0
+(g114
+g2
+Ntp13279
+Rp13280
+(dp13281
+g72
+(dp13282
+sbsg75
+g4
+sbsVversion
+p13283
+g0
+(g28
+g2
+Ntp13284
+Rp13285
+(dp13286
+g32
+g13283
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I409
+sg38
+g13259
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13283
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13287
+tp13288
+Rp13289
+(dp13290
+g59
+(lp13291
+sbsg61
+g42
+((lp13292
+tp13293
+Rp13294
+sg65
+g0
+(g2530
+g2
+Ntp13295
+Rp13296
+(dp13297
+g70
+Nsg71
+Nsg72
+(dp13298
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture
+p13299
+g0
+(g28
+g2
+Ntp13300
+Rp13301
+(dp13302
+g32
+g13299
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I411
+sg38
+g13259
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13299
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13303
+tp13304
+Rp13305
+(dp13306
+g59
+(lp13307
+sbsg61
+g42
+((lp13308
+tp13309
+Rp13310
+sg65
+g0
+(g114
+g2
+Ntp13311
+Rp13312
+(dp13313
+g72
+(dp13314
+sbsg75
+g4
+sbsVpackage
+p13315
+g0
+(g28
+g2
+Ntp13316
+Rp13317
+(dp13318
+g32
+g13315
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I408
+sg38
+g13259
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13315
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13319
+tp13320
+Rp13321
+(dp13322
+g59
+(lp13323
+sbsg61
+g42
+((lp13324
+tp13325
+Rp13326
+sg65
+g0
+(g66
+g2
+Ntp13327
+Rp13328
+(dp13329
+g70
+Nsg71
+Nsg72
+(dp13330
+sg74
+I00
+sbsg75
+g4
+sbstp13331
+Rp13332
+(dp13333
+g59
+(lp13334
+g13315
+ag13283
+ag13267
+ag13299
+asbsbsg48
+g13257
+sg192
+g0
+(g193
+g2
+Ntp13335
+Rp13336
+(dp13337
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp13338
+Rp13339
+(dp13340
+g23
+g0
+(g24
+g25
+(dp13341
+tp13342
+Rp13343
+(dp13344
+g59
+(lp13345
+sbsbsg208
+(lp13346
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp13347
+tp13348
+Rp13349
+sg222
+g54
+((lp13350
+tp13351
+Rp13352
+(dp13353
+g59
+(lp13354
+sbsg228
+(lp13355
+sg217
+(dp13356
+sg231
+g13257
+sg61
+g42
+((lp13357
+g13336
+atp13358
+Rp13359
+sg233
+Nsg232
+Nsbsg1983
+g1878
+sS'bin_associations_binaries'
+p13360
+g0
+(g9
+g2
+Ntp13361
+Rp13362
+(dp13363
+g13
+g14
+(g15
+tp13364
+Rp13365
+sg18
+g0
+(g19
+g2
+Ntp13366
+Rp13367
+(dp13368
+g23
+g0
+(g24
+g25
+(dp13369
+Vbin
+p13370
+g0
+(g28
+g2
+Ntp13371
+Rp13372
+(dp13373
+g32
+g13370
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I377
+sg38
+g13362
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13370
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13374
+tp13375
+Rp13376
+(dp13377
+g59
+(lp13378
+sbsg61
+g42
+((lp13379
+tp13380
+Rp13381
+sg65
+g0
+(g114
+g2
+Ntp13382
+Rp13383
+(dp13384
+g72
+(dp13385
+sbsg75
+g4
+sbsVsource
+p13386
+g0
+(g28
+g2
+Ntp13387
+Rp13388
+(dp13389
+g32
+g13386
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I382
+sg38
+g13362
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13386
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13390
+tp13391
+Rp13392
+(dp13393
+g59
+(lp13394
+sbsg61
+g42
+((lp13395
+tp13396
+Rp13397
+sg65
+g0
+(g114
+g2
+Ntp13398
+Rp13399
+(dp13400
+g72
+(dp13401
+sbsg75
+g4
+sbsVversion
+p13402
+g0
+(g28
+g2
+Ntp13403
+Rp13404
+(dp13405
+g32
+g13402
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I379
+sg38
+g13362
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13402
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13406
+tp13407
+Rp13408
+(dp13409
+g59
+(lp13410
+sbsg61
+g42
+((lp13411
+tp13412
+Rp13413
+sg65
+g0
+(g2530
+g2
+Ntp13414
+Rp13415
+(dp13416
+g70
+Nsg71
+Nsg72
+(dp13417
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture
+p13418
+g0
+(g28
+g2
+Ntp13419
+Rp13420
+(dp13421
+g32
+g13418
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I381
+sg38
+g13362
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13418
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13422
+tp13423
+Rp13424
+(dp13425
+g59
+(lp13426
+sbsg61
+g42
+((lp13427
+tp13428
+Rp13429
+sg65
+g0
+(g114
+g2
+Ntp13430
+Rp13431
+(dp13432
+g72
+(dp13433
+sbsg75
+g4
+sbsVpackage
+p13434
+g0
+(g28
+g2
+Ntp13435
+Rp13436
+(dp13437
+g32
+g13434
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I378
+sg38
+g13362
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13434
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13438
+tp13439
+Rp13440
+(dp13441
+g59
+(lp13442
+sbsg61
+g42
+((lp13443
+tp13444
+Rp13445
+sg65
+g0
+(g66
+g2
+Ntp13446
+Rp13447
+(dp13448
+g70
+Nsg71
+Nsg72
+(dp13449
+sg74
+I00
+sbsg75
+g4
+sbsVsuite
+p13450
+g0
+(g28
+g2
+Ntp13451
+Rp13452
+(dp13453
+g32
+g13450
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I380
+sg38
+g13362
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13450
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13454
+tp13455
+Rp13456
+(dp13457
+g59
+(lp13458
+sbsg61
+g42
+((lp13459
+tp13460
+Rp13461
+sg65
+g0
+(g114
+g2
+Ntp13462
+Rp13463
+(dp13464
+g72
+(dp13465
+sbsg75
+g4
+sbsVid
+p13466
+g0
+(g28
+g2
+Ntp13467
+Rp13468
+(dp13469
+g32
+g13466
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I376
+sg38
+g13362
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g13466
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13470
+tp13471
+Rp13472
+(dp13473
+g59
+(lp13474
+sbsg61
+g42
+((lp13475
+tp13476
+Rp13477
+sg65
+g0
+(g114
+g2
+Ntp13478
+Rp13479
+(dp13480
+g72
+(dp13481
+sbsg75
+g4
+sbstp13482
+Rp13483
+(dp13484
+g59
+(lp13485
+g13466
+ag13370
+ag13434
+ag13402
+ag13450
+ag13418
+ag13386
+asbsbsg48
+g13360
+sg192
+g0
+(g193
+g2
+Ntp13486
+Rp13487
+(dp13488
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp13489
+Rp13490
+(dp13491
+g23
+g0
+(g24
+g25
+(dp13492
+tp13493
+Rp13494
+(dp13495
+g59
+(lp13496
+sbsbsg208
+(lp13497
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp13498
+tp13499
+Rp13500
+sg222
+g54
+((lp13501
+tp13502
+Rp13503
+(dp13504
+g59
+(lp13505
+sbsg228
+(lp13506
+sg217
+(dp13507
+sg231
+g13360
+sg61
+g42
+((lp13508
+g13487
+atp13509
+Rp13510
+sg233
+Nsg232
+NsbsVkeyrings
+p13511
+g0
+(g9
+g2
+Ntp13512
+Rp13513
+(dp13514
+g13
+g14
+(g15
+tp13515
+Rp13516
+sg18
+g0
+(g19
+g2
+Ntp13517
+Rp13518
+(dp13519
+g23
+g0
+(g24
+g25
+(dp13520
+Vdefault_binary_reject
+p13521
+g0
+(g28
+g2
+Ntp13522
+Rp13523
+(dp13524
+g32
+g13521
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp13525
+Rp13526
+(dp13527
+g92
+g13523
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp13528
+Rp13529
+(dp13530
+g99
+Vtrue
+p13531
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp13532
+sbsbsg37
+I72
+sg38
+g13513
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13533
+g13523
+atp13534
+Rp13535
+sg46
+Nsg47
+Nsg48
+g13521
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13536
+tp13537
+Rp13538
+(dp13539
+g59
+(lp13540
+sbsg61
+g42
+((lp13541
+tp13542
+Rp13543
+sg65
+g0
+(g877
+g2
+Ntp13544
+Rp13545
+(dp13546
+g72
+(dp13547
+sbsg75
+g4
+sbsVname
+p13548
+g0
+(g28
+g2
+Ntp13549
+Rp13550
+(dp13551
+g32
+g13548
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I69
+sg38
+g13513
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13552
+g13550
+atp13553
+Rp13554
+sg46
+Nsg47
+Nsg48
+g13548
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13555
+tp13556
+Rp13557
+(dp13558
+g59
+(lp13559
+sbsg61
+g42
+((lp13560
+tp13561
+Rp13562
+sg65
+g0
+(g66
+g2
+Ntp13563
+Rp13564
+(dp13565
+g70
+Nsg71
+Nsg72
+(dp13566
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p13567
+g0
+(g28
+g2
+Ntp13568
+Rp13569
+(dp13570
+g32
+g13567
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp13571
+Rp13572
+(dp13573
+g92
+g13569
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp13574
+Rp13575
+(dp13576
+g99
+Vnow()
+p13577
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp13578
+sbsbsg37
+I74
+sg38
+g13513
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13579
+g13569
+atp13580
+Rp13581
+sg46
+Nsg47
+Nsg48
+g13567
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13582
+tp13583
+Rp13584
+(dp13585
+g59
+(lp13586
+sbsg61
+g42
+((lp13587
+tp13588
+Rp13589
+sg65
+g0
+(g155
+g2
+Ntp13590
+Rp13591
+(dp13592
+g159
+I01
+sg72
+(dp13593
+sbsg75
+g4
+sbsVdefault_source_acl_id
+p13594
+g0
+(g28
+g2
+Ntp13595
+Rp13596
+(dp13597
+g32
+g13594
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I70
+sg38
+g13513
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13598
+g13596
+atp13599
+Rp13600
+sg46
+Nsg47
+Nsg48
+g13594
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13601
+g0
+(g598
+g2
+Ntp13602
+Rp13603
+(dp13604
+g602
+g13596
+sg197
+Nsg603
+Nsg48
+Vkeyrings_default_source_acl_id_fkey
+p13605
+sg605
+Vsource_acl.id
+p13606
+sg607
+g0
+(g608
+g2
+Ntp13607
+Rp13608
+(dp13609
+g612
+(lp13610
+g13606
+asg52
+Nsg603
+Nsg614
+g54
+((lp13611
+g13603
+atp13612
+Rp13613
+(dp13614
+g59
+(lp13615
+g13603
+asbsg48
+g13605
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp13616
+Vdefault_source_acl_id
+p13617
+asg38
+g13513
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp13618
+Rp13619
+(dp13620
+g23
+g0
+(g24
+g25
+(dp13621
+g13594
+g13596
+stp13622
+Rp13623
+(dp13624
+g59
+(lp13625
+g13594
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp13626
+Rp13627
+(dp13628
+g59
+(lp13629
+g13603
+asbsg61
+g42
+((lp13630
+tp13631
+Rp13632
+sg65
+g0
+(g114
+g2
+Ntp13633
+Rp13634
+(dp13635
+g72
+(dp13636
+sbsg75
+g4
+sbsVmodified
+p13637
+g0
+(g28
+g2
+Ntp13638
+Rp13639
+(dp13640
+g32
+g13637
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp13641
+Rp13642
+(dp13643
+g92
+g13639
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp13644
+Rp13645
+(dp13646
+g99
+Vnow()
+p13647
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp13648
+sbsbsg37
+I75
+sg38
+g13513
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13649
+g13639
+atp13650
+Rp13651
+sg46
+Nsg47
+Nsg48
+g13637
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13652
+tp13653
+Rp13654
+(dp13655
+g59
+(lp13656
+sbsg61
+g42
+((lp13657
+tp13658
+Rp13659
+sg65
+g0
+(g155
+g2
+Ntp13660
+Rp13661
+(dp13662
+g159
+I01
+sg72
+(dp13663
+sbsg75
+g4
+sbsVpriority
+p13664
+g0
+(g28
+g2
+Ntp13665
+Rp13666
+(dp13667
+g32
+g13664
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp13668
+Rp13669
+(dp13670
+g92
+g13666
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp13671
+Rp13672
+(dp13673
+g99
+V100
+p13674
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp13675
+sbsbsg37
+I73
+sg38
+g13513
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13676
+g13666
+atp13677
+Rp13678
+sg46
+Nsg47
+Nsg48
+g13664
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13679
+tp13680
+Rp13681
+(dp13682
+g59
+(lp13683
+sbsg61
+g42
+((lp13684
+tp13685
+Rp13686
+sg65
+g0
+(g114
+g2
+Ntp13687
+Rp13688
+(dp13689
+g72
+(dp13690
+sbsg75
+g4
+sbsVdefault_binary_acl_id
+p13691
+g0
+(g28
+g2
+Ntp13692
+Rp13693
+(dp13694
+g32
+g13691
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I71
+sg38
+g13513
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13695
+g13693
+atp13696
+Rp13697
+sg46
+Nsg47
+Nsg48
+g13691
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13698
+g0
+(g598
+g2
+Ntp13699
+Rp13700
+(dp13701
+g602
+g13693
+sg197
+Nsg603
+Nsg48
+Vkeyrings_default_binary_acl_id_fkey
+p13702
+sg605
+Vbinary_acl.id
+p13703
+sg607
+g0
+(g608
+g2
+Ntp13704
+Rp13705
+(dp13706
+g612
+(lp13707
+g13703
+asg52
+Nsg603
+Nsg614
+g54
+((lp13708
+g13700
+atp13709
+Rp13710
+(dp13711
+g59
+(lp13712
+g13700
+asbsg48
+g13702
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp13713
+Vdefault_binary_acl_id
+p13714
+asg38
+g13513
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp13715
+Rp13716
+(dp13717
+g23
+g0
+(g24
+g25
+(dp13718
+g13691
+g13693
+stp13719
+Rp13720
+(dp13721
+g59
+(lp13722
+g13691
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp13723
+Rp13724
+(dp13725
+g59
+(lp13726
+g13700
+asbsg61
+g42
+((lp13727
+tp13728
+Rp13729
+sg65
+g0
+(g114
+g2
+Ntp13730
+Rp13731
+(dp13732
+g72
+(dp13733
+sbsg75
+g4
+sbsVid
+p13734
+g0
+(g28
+g2
+Ntp13735
+Rp13736
+(dp13737
+g37
+I231
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g13513
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp13738
+g13736
+atp13739
+Rp13740
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp13741
+Rp13742
+(dp13743
+g32
+g13734
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp13744
+Rp13745
+(dp13746
+g92
+g13742
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp13747
+Rp13748
+(dp13749
+g99
+Vnextval('keyrings_id_seq'::regclass)
+p13750
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp13751
+sbsbsg37
+I68
+sg38
+g13513
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g13734
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp13752
+tp13753
+Rp13754
+(dp13755
+g59
+(lp13756
+sbsg61
+g42
+((lp13757
+tp13758
+Rp13759
+sg65
+g0
+(g114
+g2
+Ntp13760
+Rp13761
+(dp13762
+g72
+(dp13763
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp13764
+tp13765
+Rp13766
+(dp13767
+g59
+(lp13768
+sbsg61
+g42
+((lp13769
+tp13770
+Rp13771
+sg65
+g0
+(g127
+g2
+Ntp13772
+Rp13773
+(dp13774
+g72
+(dp13775
+sbsg75
+g4
+sbstp13776
+Rp13777
+(dp13778
+g59
+(lp13779
+g13734
+ag13548
+ag13594
+ag13691
+ag13521
+ag13664
+ag13567
+ag13637
+asbsbsg48
+g13511
+sg192
+g0
+(g193
+g2
+Ntp13780
+Rp13781
+(dp13782
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp13783
+Rp13784
+(dp13785
+g23
+g0
+(g24
+g25
+(dp13786
+g13734
+g13736
+stp13787
+Rp13788
+(dp13789
+g59
+(lp13790
+g13734
+asbsbsg208
+(lp13791
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp13792
+g0
+(g212
+g2
+Ntp13793
+Rp13794
+(dp13795
+g48
+S'keyrings_name_key'
+p13796
+sg217
+(dp13797
+sg38
+g13513
+sg39
+I01
+sg199
+(lp13798
+g13550
+asg75
+g4
+sbatp13799
+Rp13800
+sg222
+g54
+((lp13801
+g13700
+ag13603
+atp13802
+Rp13803
+(dp13804
+g59
+(lp13805
+g13700
+ag13603
+asbsg228
+(lp13806
+sg217
+(dp13807
+sg231
+g13511
+sg232
+Nsg233
+Nsg61
+g42
+((lp13808
+g13781
+ag13705
+ag13608
+atp13809
+Rp13810
+sg237
+S'keyrings'
+p13811
+sbsVbinaries
+p13812
+g0
+(g9
+g2
+Ntp13813
+Rp13814
+(dp13815
+g13
+g14
+(g15
+tp13816
+Rp13817
+sg18
+g0
+(g19
+g2
+Ntp13818
+Rp13819
+(dp13820
+g23
+g0
+(g24
+g25
+(dp13821
+Vmaintainer
+p13822
+g0
+(g28
+g2
+Ntp13823
+Rp13824
+(dp13825
+g32
+g13822
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I23
+sg38
+g13814
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13826
+g13824
+atp13827
+Rp13828
+sg46
+Nsg47
+Nsg48
+g13822
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13829
+g0
+(g598
+g2
+Ntp13830
+Rp13831
+(dp13832
+g602
+g13824
+sg197
+Nsg603
+Nsg48
+Vbinaries_maintainer
+p13833
+sg605
+Vmaintainer.id
+p13834
+sg607
+g0
+(g608
+g2
+Ntp13835
+Rp13836
+(dp13837
+g612
+(lp13838
+g13834
+asg52
+Nsg603
+Nsg614
+g54
+((lp13839
+g13831
+atp13840
+Rp13841
+(dp13842
+g59
+(lp13843
+g13831
+asbsg48
+g13833
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp13844
+Vmaintainer
+p13845
+asg38
+g13814
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp13846
+Rp13847
+(dp13848
+g23
+g0
+(g24
+g25
+(dp13849
+g13822
+g13824
+stp13850
+Rp13851
+(dp13852
+g59
+(lp13853
+g13822
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp13854
+Rp13855
+(dp13856
+g59
+(lp13857
+g13831
+asbsg61
+g42
+((lp13858
+tp13859
+Rp13860
+sg65
+g0
+(g114
+g2
+Ntp13861
+Rp13862
+(dp13863
+g72
+(dp13864
+sbsg75
+g4
+sbsVpackage
+p13865
+g0
+(g28
+g2
+Ntp13866
+Rp13867
+(dp13868
+g32
+g13865
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I21
+sg38
+g13814
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13869
+g13867
+atp13870
+Rp13871
+sg46
+Nsg47
+Nsg48
+g13865
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13872
+tp13873
+Rp13874
+(dp13875
+g59
+(lp13876
+sbsg61
+g42
+((lp13877
+tp13878
+Rp13879
+sg65
+g0
+(g66
+g2
+Ntp13880
+Rp13881
+(dp13882
+g70
+Nsg71
+Nsg72
+(dp13883
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p13884
+g0
+(g28
+g2
+Ntp13885
+Rp13886
+(dp13887
+g32
+g13884
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp13888
+Rp13889
+(dp13890
+g92
+g13886
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp13891
+Rp13892
+(dp13893
+g99
+Vnow()
+p13894
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp13895
+sbsbsg37
+I30
+sg38
+g13814
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13896
+g13886
+atp13897
+Rp13898
+sg46
+Nsg47
+Nsg48
+g13884
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13899
+tp13900
+Rp13901
+(dp13902
+g59
+(lp13903
+sbsg61
+g42
+((lp13904
+tp13905
+Rp13906
+sg65
+g0
+(g155
+g2
+Ntp13907
+Rp13908
+(dp13909
+g159
+I01
+sg72
+(dp13910
+sbsg75
+g4
+sbsVinstall_date
+p13911
+g0
+(g28
+g2
+Ntp13912
+Rp13913
+(dp13914
+g32
+g13911
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp13915
+Rp13916
+(dp13917
+g92
+g13913
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp13918
+Rp13919
+(dp13920
+g99
+Vnow()
+p13921
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp13922
+sbsbsg37
+I29
+sg38
+g13814
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13923
+g13913
+atp13924
+Rp13925
+sg46
+Nsg47
+Nsg48
+g13911
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13926
+tp13927
+Rp13928
+(dp13929
+g59
+(lp13930
+sbsg61
+g42
+((lp13931
+tp13932
+Rp13933
+sg65
+g0
+(g155
+g2
+Ntp13934
+Rp13935
+(dp13936
+g159
+I01
+sg72
+(dp13937
+sbsg75
+g4
+sbsVsig_fpr
+p13938
+g0
+(g28
+g2
+Ntp13939
+Rp13940
+(dp13941
+g32
+g13938
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I28
+sg38
+g13814
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13942
+g13940
+atp13943
+Rp13944
+sg46
+Nsg47
+Nsg48
+g13938
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13945
+g0
+(g598
+g2
+Ntp13946
+Rp13947
+(dp13948
+g602
+g13940
+sg197
+Nsg603
+Nsg48
+Vbinaries_sig_fpr
+p13949
+sg605
+Vfingerprint.id
+p13950
+sg607
+g0
+(g608
+g2
+Ntp13951
+Rp13952
+(dp13953
+g612
+(lp13954
+g13950
+asg52
+Nsg603
+Nsg614
+g54
+((lp13955
+g13947
+atp13956
+Rp13957
+(dp13958
+g59
+(lp13959
+g13947
+asbsg48
+g13949
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp13960
+Vsig_fpr
+p13961
+asg38
+g13814
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp13962
+Rp13963
+(dp13964
+g23
+g0
+(g24
+g25
+(dp13965
+g13938
+g13940
+stp13966
+Rp13967
+(dp13968
+g59
+(lp13969
+g13938
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp13970
+Rp13971
+(dp13972
+g59
+(lp13973
+g13947
+asbsg61
+g42
+((lp13974
+tp13975
+Rp13976
+sg65
+g0
+(g114
+g2
+Ntp13977
+Rp13978
+(dp13979
+g72
+(dp13980
+sbsg75
+g4
+sbsVmodified
+p13981
+g0
+(g28
+g2
+Ntp13982
+Rp13983
+(dp13984
+g32
+g13981
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp13985
+Rp13986
+(dp13987
+g92
+g13983
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp13988
+Rp13989
+(dp13990
+g99
+Vnow()
+p13991
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp13992
+sbsbsg37
+I31
+sg38
+g13814
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp13993
+g13983
+atp13994
+Rp13995
+sg46
+Nsg47
+Nsg48
+g13981
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp13996
+tp13997
+Rp13998
+(dp13999
+g59
+(lp14000
+sbsg61
+g42
+((lp14001
+tp14002
+Rp14003
+sg65
+g0
+(g155
+g2
+Ntp14004
+Rp14005
+(dp14006
+g159
+I01
+sg72
+(dp14007
+sbsg75
+g4
+sbsVsource
+p14008
+g0
+(g28
+g2
+Ntp14009
+Rp14010
+(dp14011
+g32
+g14008
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I24
+sg38
+g13814
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14012
+g14010
+atp14013
+Rp14014
+sg46
+Nsg47
+Nsg48
+g14008
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14015
+g0
+(g598
+g2
+Ntp14016
+Rp14017
+(dp14018
+g602
+g14010
+sg197
+Nsg603
+Nsg48
+Vbinaries_source
+p14019
+sg605
+Vsource.id
+p14020
+sg607
+g0
+(g608
+g2
+Ntp14021
+Rp14022
+(dp14023
+g612
+(lp14024
+g14020
+asg52
+Nsg603
+Nsg614
+g54
+((lp14025
+g14017
+atp14026
+Rp14027
+(dp14028
+g59
+(lp14029
+g14017
+asbsg48
+g14019
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp14030
+Vsource
+p14031
+asg38
+g13814
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp14032
+Rp14033
+(dp14034
+g23
+g0
+(g24
+g25
+(dp14035
+g14008
+g14010
+stp14036
+Rp14037
+(dp14038
+g59
+(lp14039
+g14008
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp14040
+Rp14041
+(dp14042
+g59
+(lp14043
+g14017
+asbsg61
+g42
+((lp14044
+tp14045
+Rp14046
+sg65
+g0
+(g114
+g2
+Ntp14047
+Rp14048
+(dp14049
+g72
+(dp14050
+sbsg75
+g4
+sbsVversion
+p14051
+g0
+(g28
+g2
+Ntp14052
+Rp14053
+(dp14054
+g32
+g14051
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I22
+sg38
+g13814
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14055
+g14053
+atp14056
+Rp14057
+sg46
+Nsg47
+Nsg48
+g14051
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14058
+tp14059
+Rp14060
+(dp14061
+g59
+(lp14062
+sbsg61
+g42
+((lp14063
+tp14064
+Rp14065
+sg65
+g0
+(g2530
+g2
+Ntp14066
+Rp14067
+(dp14068
+g70
+Nsg71
+Nsg72
+(dp14069
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture
+p14070
+g0
+(g28
+g2
+Ntp14071
+Rp14072
+(dp14073
+g32
+g14070
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I25
+sg38
+g13814
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14074
+g14072
+atp14075
+Rp14076
+sg46
+Nsg47
+Nsg48
+g14070
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14077
+g0
+(g598
+g2
+Ntp14078
+Rp14079
+(dp14080
+g602
+g14072
+sg197
+Nsg603
+Nsg48
+Vbinaries_architecture
+p14081
+sg605
+Varchitecture.id
+p14082
+sg607
+g0
+(g608
+g2
+Ntp14083
+Rp14084
+(dp14085
+g612
+(lp14086
+g14082
+asg52
+Nsg603
+Nsg614
+g54
+((lp14087
+g14079
+atp14088
+Rp14089
+(dp14090
+g59
+(lp14091
+g14079
+asbsg48
+g14081
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp14092
+Varchitecture
+p14093
+asg38
+g13814
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp14094
+Rp14095
+(dp14096
+g23
+g0
+(g24
+g25
+(dp14097
+g14070
+g14072
+stp14098
+Rp14099
+(dp14100
+g59
+(lp14101
+g14070
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp14102
+Rp14103
+(dp14104
+g59
+(lp14105
+g14079
+asbsg61
+g42
+((lp14106
+tp14107
+Rp14108
+sg65
+g0
+(g114
+g2
+Ntp14109
+Rp14110
+(dp14111
+g72
+(dp14112
+sbsg75
+g4
+sbsVfile
+p14113
+g0
+(g28
+g2
+Ntp14114
+Rp14115
+(dp14116
+g32
+g14113
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I26
+sg38
+g13814
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14117
+g14115
+atp14118
+Rp14119
+sg46
+Nsg47
+Nsg48
+g14113
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14120
+g0
+(g598
+g2
+Ntp14121
+Rp14122
+(dp14123
+g602
+g14115
+sg197
+Nsg603
+Nsg48
+Vbinaries_file
+p14124
+sg605
+Vfiles.id
+p14125
+sg607
+g0
+(g608
+g2
+Ntp14126
+Rp14127
+(dp14128
+g612
+(lp14129
+g14125
+asg52
+Nsg603
+Nsg614
+g54
+((lp14130
+g14122
+atp14131
+Rp14132
+(dp14133
+g59
+(lp14134
+g14122
+asbsg48
+g14124
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp14135
+Vfile
+p14136
+asg38
+g13814
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp14137
+Rp14138
+(dp14139
+g23
+g0
+(g24
+g25
+(dp14140
+g14113
+g14115
+stp14141
+Rp14142
+(dp14143
+g59
+(lp14144
+g14113
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp14145
+Rp14146
+(dp14147
+g59
+(lp14148
+g14122
+asbsg61
+g42
+((lp14149
+tp14150
+Rp14151
+sg65
+g0
+(g114
+g2
+Ntp14152
+Rp14153
+(dp14154
+g72
+(dp14155
+sbsg75
+g4
+sbsVtype
+p14156
+g0
+(g28
+g2
+Ntp14157
+Rp14158
+(dp14159
+g32
+g14156
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I27
+sg38
+g13814
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14160
+g14158
+atp14161
+Rp14162
+sg46
+Nsg47
+Nsg48
+g14156
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14163
+tp14164
+Rp14165
+(dp14166
+g59
+(lp14167
+sbsg61
+g42
+((lp14168
+tp14169
+Rp14170
+sg65
+g0
+(g66
+g2
+Ntp14171
+Rp14172
+(dp14173
+g70
+Nsg71
+Nsg72
+(dp14174
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p14175
+g0
+(g28
+g2
+Ntp14176
+Rp14177
+(dp14178
+g37
+I132
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g13814
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp14179
+g14177
+atp14180
+Rp14181
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp14182
+Rp14183
+(dp14184
+g32
+g14175
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp14185
+Rp14186
+(dp14187
+g92
+g14183
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp14188
+Rp14189
+(dp14190
+g99
+Vnextval(('binaries_id_seq'::text)::regclass)
+p14191
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp14192
+sbsbsg37
+I20
+sg38
+g13814
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g14175
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp14193
+tp14194
+Rp14195
+(dp14196
+g59
+(lp14197
+sbsg61
+g42
+((lp14198
+tp14199
+Rp14200
+sg65
+g0
+(g114
+g2
+Ntp14201
+Rp14202
+(dp14203
+g72
+(dp14204
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp14205
+tp14206
+Rp14207
+(dp14208
+g59
+(lp14209
+sbsg61
+g42
+((lp14210
+tp14211
+Rp14212
+sg65
+g0
+(g127
+g2
+Ntp14213
+Rp14214
+(dp14215
+g72
+(dp14216
+sbsg75
+g4
+sbstp14217
+Rp14218
+(dp14219
+g59
+(lp14220
+g14175
+ag13865
+ag14051
+ag13822
+ag14008
+ag14070
+ag14113
+ag14156
+ag13938
+ag13911
+ag13884
+ag13981
+asbsbsg48
+g13812
+sg192
+g0
+(g193
+g2
+Ntp14221
+Rp14222
+(dp14223
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp14224
+Rp14225
+(dp14226
+g23
+g0
+(g24
+g25
+(dp14227
+g14175
+g14177
+stp14228
+Rp14229
+(dp14230
+g59
+(lp14231
+g14175
+asbsbsg208
+(lp14232
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp14233
+g0
+(g212
+g2
+Ntp14234
+Rp14235
+(dp14236
+g48
+S'binaries_files'
+p14237
+sg217
+(dp14238
+sg38
+g13814
+sg39
+I00
+sg199
+(lp14239
+g14115
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14240
+Rp14241
+(dp14242
+g48
+S'binaries_by_package'
+p14243
+sg217
+(dp14244
+sg38
+g13814
+sg39
+I00
+sg199
+(lp14245
+g14183
+ag13867
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14246
+Rp14247
+(dp14248
+g48
+S'binaries_architecture_idx'
+p14249
+sg217
+(dp14250
+sg38
+g13814
+sg39
+I00
+sg199
+(lp14251
+g14072
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14252
+Rp14253
+(dp14254
+g48
+S'binaries_id'
+p14255
+sg217
+(dp14256
+sg38
+g13814
+sg39
+I01
+sg199
+(lp14257
+g14183
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14258
+Rp14259
+(dp14260
+g48
+S'binaries_fingerprint'
+p14261
+sg217
+(dp14262
+sg38
+g13814
+sg39
+I00
+sg199
+(lp14263
+g13940
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14264
+Rp14265
+(dp14266
+g48
+S'binaries_file_key'
+p14267
+sg217
+(dp14268
+sg38
+g13814
+sg39
+I01
+sg199
+(lp14269
+g14115
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14270
+Rp14271
+(dp14272
+g48
+S'binaries_package_key'
+p14273
+sg217
+(dp14274
+sg38
+g13814
+sg39
+I01
+sg199
+(lp14275
+g13867
+ag14053
+ag14072
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14276
+Rp14277
+(dp14278
+g48
+S'jjt4'
+p14279
+sg217
+(dp14280
+sg38
+g13814
+sg39
+I00
+sg199
+(lp14281
+g14010
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14282
+Rp14283
+(dp14284
+g48
+S'binaries_maintainer'
+p14285
+sg217
+(dp14286
+sg38
+g13814
+sg39
+I00
+sg199
+(lp14287
+g13824
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14288
+Rp14289
+(dp14290
+g48
+S'jjt5'
+p14291
+sg217
+(dp14292
+sg38
+g13814
+sg39
+I00
+sg199
+(lp14293
+g14183
+ag14010
+asg75
+g4
+sbatp14294
+Rp14295
+sg222
+g54
+((lp14296
+g14079
+ag14122
+ag13831
+ag13947
+ag14017
+atp14297
+Rp14298
+(dp14299
+g59
+(lp14300
+g14079
+ag14122
+ag13831
+ag13947
+ag14017
+asbsg228
+(lp14301
+sg217
+(dp14302
+sg231
+g13812
+sg232
+Nsg233
+Nsg61
+g42
+((lp14303
+g14084
+ag13952
+ag13836
+ag14222
+ag14022
+ag14127
+atp14304
+Rp14305
+sg237
+S'binaries'
+p14306
+sbsVchanges
+p14307
+g0
+(g9
+g2
+Ntp14308
+Rp14309
+(dp14310
+g13
+g14
+(g15
+tp14311
+Rp14312
+sg18
+g0
+(g19
+g2
+Ntp14313
+Rp14314
+(dp14315
+g23
+g0
+(g24
+g25
+(dp14316
+Vchangedby
+p14317
+g0
+(g28
+g2
+Ntp14318
+Rp14319
+(dp14320
+g32
+g14317
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I195
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14321
+g14319
+atp14322
+Rp14323
+sg46
+Nsg47
+Nsg48
+g14317
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14324
+tp14325
+Rp14326
+(dp14327
+g59
+(lp14328
+sbsg61
+g42
+((lp14329
+tp14330
+Rp14331
+sg65
+g0
+(g66
+g2
+Ntp14332
+Rp14333
+(dp14334
+g70
+Nsg71
+Nsg72
+(dp14335
+sg74
+I00
+sbsg75
+g4
+sbsVmaintainer
+p14336
+g0
+(g28
+g2
+Ntp14337
+Rp14338
+(dp14339
+g32
+g14336
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I193
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14340
+g14338
+atp14341
+Rp14342
+sg46
+Nsg47
+Nsg48
+g14336
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14343
+tp14344
+Rp14345
+(dp14346
+g59
+(lp14347
+sbsg61
+g42
+((lp14348
+tp14349
+Rp14350
+sg65
+g0
+(g66
+g2
+Ntp14351
+Rp14352
+(dp14353
+g70
+Nsg71
+Nsg72
+(dp14354
+sg74
+I00
+sbsg75
+g4
+sbsVapproved_for
+p14355
+g0
+(g28
+g2
+Ntp14356
+Rp14357
+(dp14358
+g32
+g14355
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I198
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14359
+g14357
+atp14360
+Rp14361
+sg46
+Nsg47
+Nsg48
+g14355
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14362
+tp14363
+Rp14364
+(dp14365
+g59
+(lp14366
+sbsg61
+g42
+((lp14367
+tp14368
+Rp14369
+sg65
+g0
+(g114
+g2
+Ntp14370
+Rp14371
+(dp14372
+g72
+(dp14373
+sbsg75
+g4
+sbsVfingerprint
+p14374
+g0
+(g28
+g2
+Ntp14375
+Rp14376
+(dp14377
+g32
+g14374
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I194
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14378
+g14376
+atp14379
+Rp14380
+sg46
+Nsg47
+Nsg48
+g14374
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14381
+tp14382
+Rp14383
+(dp14384
+g59
+(lp14385
+sbsg61
+g42
+((lp14386
+tp14387
+Rp14388
+sg65
+g0
+(g66
+g2
+Ntp14389
+Rp14390
+(dp14391
+g70
+Nsg71
+Nsg72
+(dp14392
+sg74
+I00
+sbsg75
+g4
+sbsVdate
+p14393
+g0
+(g28
+g2
+Ntp14394
+Rp14395
+(dp14396
+g32
+g14393
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I196
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14397
+g14395
+atp14398
+Rp14399
+sg46
+Nsg47
+Nsg48
+g14393
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14400
+tp14401
+Rp14402
+(dp14403
+g59
+(lp14404
+sbsg61
+g42
+((lp14405
+tp14406
+Rp14407
+sg65
+g0
+(g66
+g2
+Ntp14408
+Rp14409
+(dp14410
+g70
+Nsg71
+Nsg72
+(dp14411
+sg74
+I00
+sbsg75
+g4
+sbsVseen
+p14412
+g0
+(g28
+g2
+Ntp14413
+Rp14414
+(dp14415
+g32
+g14412
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp14416
+Rp14417
+(dp14418
+g92
+g14414
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp14419
+Rp14420
+(dp14421
+g99
+Vnow()
+p14422
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp14423
+sbsbsg37
+I186
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14424
+g14414
+atp14425
+Rp14426
+sg46
+Nsg47
+Nsg48
+g14412
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14427
+tp14428
+Rp14429
+(dp14430
+g59
+(lp14431
+sbsg61
+g42
+((lp14432
+tp14433
+Rp14434
+sg65
+g0
+(g155
+g2
+Ntp14435
+Rp14436
+(dp14437
+g159
+I01
+sg72
+(dp14438
+sbsg75
+g4
+sbsVin_queue
+p14439
+g0
+(g28
+g2
+Ntp14440
+Rp14441
+(dp14442
+g32
+g14439
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I197
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14443
+g14441
+atp14444
+Rp14445
+sg46
+Nsg47
+Nsg48
+g14439
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14446
+g0
+(g598
+g2
+Ntp14447
+Rp14448
+(dp14449
+g602
+g14441
+sg197
+Nsg603
+Nsg48
+Vknown_changes_approved_for_fkey
+p14450
+sg605
+Vpolicy_queue.id
+p14451
+sg607
+g0
+(g608
+g2
+Ntp14452
+Rp14453
+(dp14454
+g612
+(lp14455
+g14451
+asg52
+Nsg603
+Nsg614
+g54
+((lp14456
+g14448
+atp14457
+Rp14458
+(dp14459
+g59
+(lp14460
+g14448
+asbsg48
+g14450
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp14461
+Vin_queue
+p14462
+asg38
+g14309
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp14463
+Rp14464
+(dp14465
+g23
+g0
+(g24
+g25
+(dp14466
+g14439
+g14441
+stp14467
+Rp14468
+(dp14469
+g59
+(lp14470
+g14439
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbag0
+(g598
+g2
+Ntp14471
+Rp14472
+(dp14473
+g602
+g14441
+sg197
+Nsg603
+Nsg48
+Vknown_changes_in_queue_fkey
+p14474
+sg605
+Vpolicy_queue.id
+p14475
+sg607
+g0
+(g608
+g2
+Ntp14476
+Rp14477
+(dp14478
+g612
+(lp14479
+g14475
+asg52
+Nsg603
+Nsg614
+g54
+((lp14480
+g14472
+atp14481
+Rp14482
+(dp14483
+g59
+(lp14484
+g14472
+asbsg48
+g14474
+sg198
+Nsg620
+I01
+sg197
+Nsg621
+(lp14485
+Vin_queue
+p14486
+asg38
+g14309
+sg624
+I00
+sg199
+g0
+(g19
+g2
+Ntp14487
+Rp14488
+(dp14489
+g23
+g0
+(g24
+g25
+(dp14490
+g14439
+g14441
+stp14491
+Rp14492
+(dp14493
+g59
+(lp14494
+g14439
+asbsbsbsg198
+Nsg620
+I01
+sg52
+Nsg624
+I00
+sbatp14495
+Rp14496
+(dp14497
+g59
+(lp14498
+g14448
+ag14472
+asbsg61
+g42
+((lp14499
+tp14500
+Rp14501
+sg65
+g0
+(g114
+g2
+Ntp14502
+Rp14503
+(dp14504
+g72
+(dp14505
+sbsg75
+g4
+sbsVchangesname
+p14506
+g0
+(g28
+g2
+Ntp14507
+Rp14508
+(dp14509
+g32
+g14506
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I185
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14510
+g14508
+atp14511
+Rp14512
+sg46
+Nsg47
+Nsg48
+g14506
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14513
+tp14514
+Rp14515
+(dp14516
+g59
+(lp14517
+sbsg61
+g42
+((lp14518
+tp14519
+Rp14520
+sg65
+g0
+(g66
+g2
+Ntp14521
+Rp14522
+(dp14523
+g70
+Nsg71
+Nsg72
+(dp14524
+sg74
+I00
+sbsg75
+g4
+sbsVcreated
+p14525
+g0
+(g28
+g2
+Ntp14526
+Rp14527
+(dp14528
+g32
+g14525
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp14529
+Rp14530
+(dp14531
+g92
+g14527
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp14532
+Rp14533
+(dp14534
+g99
+Vnow()
+p14535
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp14536
+sbsbsg37
+I199
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14537
+g14527
+atp14538
+Rp14539
+sg46
+Nsg47
+Nsg48
+g14525
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14540
+tp14541
+Rp14542
+(dp14543
+g59
+(lp14544
+sbsg61
+g42
+((lp14545
+tp14546
+Rp14547
+sg65
+g0
+(g155
+g2
+Ntp14548
+Rp14549
+(dp14550
+g159
+I01
+sg72
+(dp14551
+sbsg75
+g4
+sbsVchangelog_id
+p14552
+g0
+(g28
+g2
+Ntp14553
+Rp14554
+(dp14555
+g32
+g14552
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I201
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14556
+g14554
+atp14557
+Rp14558
+sg46
+Nsg47
+Nsg48
+g14552
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14559
+tp14560
+Rp14561
+(dp14562
+g59
+(lp14563
+sbsg61
+g42
+((lp14564
+tp14565
+Rp14566
+sg65
+g0
+(g114
+g2
+Ntp14567
+Rp14568
+(dp14569
+g72
+(dp14570
+sbsg75
+g4
+sbsVmodified
+p14571
+g0
+(g28
+g2
+Ntp14572
+Rp14573
+(dp14574
+g32
+g14571
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp14575
+Rp14576
+(dp14577
+g92
+g14573
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp14578
+Rp14579
+(dp14580
+g99
+Vnow()
+p14581
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp14582
+sbsbsg37
+I200
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14583
+g14573
+atp14584
+Rp14585
+sg46
+Nsg47
+Nsg48
+g14571
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14586
+tp14587
+Rp14588
+(dp14589
+g59
+(lp14590
+sbsg61
+g42
+((lp14591
+tp14592
+Rp14593
+sg65
+g0
+(g155
+g2
+Ntp14594
+Rp14595
+(dp14596
+g159
+I01
+sg72
+(dp14597
+sbsg75
+g4
+sbsVid
+p14598
+g0
+(g28
+g2
+Ntp14599
+Rp14600
+(dp14601
+g37
+I232
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg32
+g80
+sg38
+g14309
+sg39
+Nsg48
+g80
+sg41
+g42
+((lp14602
+g14600
+atp14603
+Rp14604
+sg46
+Nsg47
+Nsg40
+I01
+sg84
+g0
+(g28
+g2
+Ntp14605
+Rp14606
+(dp14607
+g32
+g14598
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+g0
+(g88
+g2
+Ntp14608
+Rp14609
+(dp14610
+g92
+g14606
+sg93
+I00
+sg94
+g0
+(g95
+g2
+Ntp14611
+Rp14612
+(dp14613
+g99
+Vnextval('known_changes_id_seq'::regclass)
+p14614
+sg101
+I00
+sg102
+Nsg103
+Nsg104
+(dp14615
+sbsbsg37
+I184
+sg38
+g14309
+sg39
+Nsg40
+I01
+sg46
+Nsg47
+Nsg48
+g14598
+sg49
+I00
+sg50
+Nsg51
+I00
+sg52
+Nsg53
+g54
+((lp14616
+tp14617
+Rp14618
+(dp14619
+g59
+(lp14620
+sbsg61
+g42
+((lp14621
+tp14622
+Rp14623
+sg65
+g0
+(g114
+g2
+Ntp14624
+Rp14625
+(dp14626
+g72
+(dp14627
+sbsg75
+g4
+sbsg50
+Nsg51
+I01
+sg49
+I00
+sg52
+Nsg53
+g54
+((lp14628
+tp14629
+Rp14630
+(dp14631
+g59
+(lp14632
+sbsg61
+g42
+((lp14633
+tp14634
+Rp14635
+sg65
+g0
+(g127
+g2
+Ntp14636
+Rp14637
+(dp14638
+g72
+(dp14639
+sbsg75
+g4
+sbsVsource
+p14640
+g0
+(g28
+g2
+Ntp14641
+Rp14642
+(dp14643
+g32
+g14640
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I187
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14644
+g14642
+atp14645
+Rp14646
+sg46
+Nsg47
+Nsg48
+g14640
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14647
+tp14648
+Rp14649
+(dp14650
+g59
+(lp14651
+sbsg61
+g42
+((lp14652
+tp14653
+Rp14654
+sg65
+g0
+(g66
+g2
+Ntp14655
+Rp14656
+(dp14657
+g70
+Nsg71
+Nsg72
+(dp14658
+sg74
+I00
+sbsg75
+g4
+sbsVversion
+p14659
+g0
+(g28
+g2
+Ntp14660
+Rp14661
+(dp14662
+g32
+g14659
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I190
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14663
+g14661
+atp14664
+Rp14665
+sg46
+Nsg47
+Nsg48
+g14659
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14666
+tp14667
+Rp14668
+(dp14669
+g59
+(lp14670
+sbsg61
+g42
+((lp14671
+tp14672
+Rp14673
+sg65
+g0
+(g66
+g2
+Ntp14674
+Rp14675
+(dp14676
+g70
+Nsg71
+Nsg72
+(dp14677
+sg74
+I00
+sbsg75
+g4
+sbsVarchitecture
+p14678
+g0
+(g28
+g2
+Ntp14679
+Rp14680
+(dp14681
+g32
+g14678
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I189
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14682
+g14680
+atp14683
+Rp14684
+sg46
+Nsg47
+Nsg48
+g14678
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14685
+tp14686
+Rp14687
+(dp14688
+g59
+(lp14689
+sbsg61
+g42
+((lp14690
+tp14691
+Rp14692
+sg65
+g0
+(g66
+g2
+Ntp14693
+Rp14694
+(dp14695
+g70
+Nsg71
+Nsg72
+(dp14696
+sg74
+I00
+sbsg75
+g4
+sbsVdistribution
+p14697
+g0
+(g28
+g2
+Ntp14698
+Rp14699
+(dp14700
+g32
+g14697
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I191
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14701
+g14699
+atp14702
+Rp14703
+sg46
+Nsg47
+Nsg48
+g14697
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14704
+tp14705
+Rp14706
+(dp14707
+g59
+(lp14708
+sbsg61
+g42
+((lp14709
+tp14710
+Rp14711
+sg65
+g0
+(g66
+g2
+Ntp14712
+Rp14713
+(dp14714
+g70
+Nsg71
+Nsg72
+(dp14715
+sg74
+I00
+sbsg75
+g4
+sbsVbinaries
+p14716
+g0
+(g28
+g2
+Ntp14717
+Rp14718
+(dp14719
+g32
+g14716
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I188
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14720
+g14718
+atp14721
+Rp14722
+sg46
+Nsg47
+Nsg48
+g14716
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14723
+tp14724
+Rp14725
+(dp14726
+g59
+(lp14727
+sbsg61
+g42
+((lp14728
+tp14729
+Rp14730
+sg65
+g0
+(g66
+g2
+Ntp14731
+Rp14732
+(dp14733
+g70
+Nsg71
+Nsg72
+(dp14734
+sg74
+I00
+sbsg75
+g4
+sbsVurgency
+p14735
+g0
+(g28
+g2
+Ntp14736
+Rp14737
+(dp14738
+g32
+g14735
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I192
+sg38
+g14309
+sg39
+Nsg40
+I00
+sg41
+g42
+((lp14739
+g14737
+atp14740
+Rp14741
+sg46
+Nsg47
+Nsg48
+g14735
+sg49
+I00
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14742
+tp14743
+Rp14744
+(dp14745
+g59
+(lp14746
+sbsg61
+g42
+((lp14747
+tp14748
+Rp14749
+sg65
+g0
+(g66
+g2
+Ntp14750
+Rp14751
+(dp14752
+g70
+Nsg71
+Nsg72
+(dp14753
+sg74
+I00
+sbsg75
+g4
+sbstp14754
+Rp14755
+(dp14756
+g59
+(lp14757
+g14598
+ag14506
+ag14412
+ag14640
+ag14716
+ag14678
+ag14659
+ag14697
+ag14735
+ag14336
+ag14374
+ag14317
+ag14393
+ag14439
+ag14355
+ag14525
+ag14571
+ag14552
+asbsbsg48
+g14307
+sg192
+g0
+(g193
+g2
+Ntp14758
+Rp14759
+(dp14760
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp14761
+Rp14762
+(dp14763
+g23
+g0
+(g24
+g25
+(dp14764
+g14598
+g14600
+stp14765
+Rp14766
+(dp14767
+g59
+(lp14768
+g14598
+asbsbsg208
+(lp14769
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp14770
+g0
+(g212
+g2
+Ntp14771
+Rp14772
+(dp14773
+g48
+S'changesurgency_ind'
+p14774
+sg217
+(dp14775
+sg38
+g14309
+sg39
+I00
+sg199
+(lp14776
+g14737
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14777
+Rp14778
+(dp14779
+g48
+S'changesin_queue_approved_for'
+p14780
+sg217
+(dp14781
+sg38
+g14309
+sg39
+I00
+sg199
+(lp14782
+g14441
+ag14357
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14783
+Rp14784
+(dp14785
+g48
+S'changessource_ind'
+p14786
+sg217
+(dp14787
+sg38
+g14309
+sg39
+I00
+sg199
+(lp14788
+g14642
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14789
+Rp14790
+(dp14791
+g48
+S'changesdistribution_ind'
+p14792
+sg217
+(dp14793
+sg38
+g14309
+sg39
+I00
+sg199
+(lp14794
+g14699
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14795
+Rp14796
+(dp14797
+g48
+S'changesin_queue'
+p14798
+sg217
+(dp14799
+sg38
+g14309
+sg39
+I00
+sg199
+(lp14800
+g14441
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14801
+Rp14802
+(dp14803
+g48
+S'changesapproved_for'
+p14804
+sg217
+(dp14805
+sg38
+g14309
+sg39
+I00
+sg199
+(lp14806
+g14357
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14807
+Rp14808
+(dp14809
+g48
+S'changesname_ind'
+p14810
+sg217
+(dp14811
+sg38
+g14309
+sg39
+I00
+sg199
+(lp14812
+g14508
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14813
+Rp14814
+(dp14815
+g48
+S'known_changes_changesname_key'
+p14816
+sg217
+(dp14817
+sg38
+g14309
+sg39
+I01
+sg199
+(lp14818
+g14508
+asg75
+g4
+sbag0
+(g212
+g2
+Ntp14819
+Rp14820
+(dp14821
+g48
+S'changestimestamp_ind'
+p14822
+sg217
+(dp14823
+sg38
+g14309
+sg39
+I00
+sg199
+(lp14824
+g14414
+asg75
+g4
+sbatp14825
+Rp14826
+sg222
+g54
+((lp14827
+g14448
+ag14472
+atp14828
+Rp14829
+(dp14830
+g59
+(lp14831
+g14448
+ag14472
+asbsg228
+(lp14832
+sg217
+(dp14833
+sg231
+g14307
+sg232
+Nsg233
+Nsg61
+g42
+((lp14834
+g14759
+ag14453
+ag14477
+atp14835
+Rp14836
+sg237
+S'changes'
+p14837
+sbsS'almost_obsolete_src_associations'
+p14838
+g0
+(g9
+g2
+Ntp14839
+Rp14840
+(dp14841
+g13
+g14
+(g15
+tp14842
+Rp14843
+sg18
+g0
+(g19
+g2
+Ntp14844
+Rp14845
+(dp14846
+g23
+g0
+(g24
+g25
+(dp14847
+Vsource
+p14848
+g0
+(g28
+g2
+Ntp14849
+Rp14850
+(dp14851
+g32
+g14848
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I361
+sg38
+g14840
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g14848
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14852
+tp14853
+Rp14854
+(dp14855
+g59
+(lp14856
+sbsg61
+g42
+((lp14857
+tp14858
+Rp14859
+sg65
+g0
+(g66
+g2
+Ntp14860
+Rp14861
+(dp14862
+g70
+Nsg71
+Nsg72
+(dp14863
+sg74
+I00
+sbsg75
+g4
+sbsVsuite
+p14864
+g0
+(g28
+g2
+Ntp14865
+Rp14866
+(dp14867
+g32
+g14864
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I363
+sg38
+g14840
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g14864
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14868
+tp14869
+Rp14870
+(dp14871
+g59
+(lp14872
+sbsg61
+g42
+((lp14873
+tp14874
+Rp14875
+sg65
+g0
+(g114
+g2
+Ntp14876
+Rp14877
+(dp14878
+g72
+(dp14879
+sbsg75
+g4
+sbsVversion
+p14880
+g0
+(g28
+g2
+Ntp14881
+Rp14882
+(dp14883
+g32
+g14880
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I362
+sg38
+g14840
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g14880
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14884
+tp14885
+Rp14886
+(dp14887
+g59
+(lp14888
+sbsg61
+g42
+((lp14889
+tp14890
+Rp14891
+sg65
+g0
+(g2530
+g2
+Ntp14892
+Rp14893
+(dp14894
+g70
+Nsg71
+Nsg72
+(dp14895
+sg74
+I00
+sbsg75
+g4
+sbsVid
+p14896
+g0
+(g28
+g2
+Ntp14897
+Rp14898
+(dp14899
+g32
+g14896
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I359
+sg38
+g14840
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g14896
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14900
+tp14901
+Rp14902
+(dp14903
+g59
+(lp14904
+sbsg61
+g42
+((lp14905
+tp14906
+Rp14907
+sg65
+g0
+(g114
+g2
+Ntp14908
+Rp14909
+(dp14910
+g72
+(dp14911
+sbsg75
+g4
+sbsVsrc
+p14912
+g0
+(g28
+g2
+Ntp14913
+Rp14914
+(dp14915
+g32
+g14912
+sg33
+I00
+sg34
+Nsg35
+Nsg36
+Nsg37
+I360
+sg38
+g14840
+sg39
+Nsg40
+I00
+sg46
+Nsg47
+Nsg48
+g14912
+sg49
+I01
+sg50
+Nsg51
+I01
+sg52
+Nsg53
+g54
+((lp14916
+tp14917
+Rp14918
+(dp14919
+g59
+(lp14920
+sbsg61
+g42
+((lp14921
+tp14922
+Rp14923
+sg65
+g0
+(g114
+g2
+Ntp14924
+Rp14925
+(dp14926
+g72
+(dp14927
+sbsg75
+g4
+sbstp14928
+Rp14929
+(dp14930
+g59
+(lp14931
+g14896
+ag14912
+ag14848
+ag14880
+ag14864
+asbsbsg48
+g14838
+sg192
+g0
+(g193
+g2
+Ntp14932
+Rp14933
+(dp14934
+g197
+Nsg198
+Nsg48
+Nsg199
+g0
+(g19
+g2
+Ntp14935
+Rp14936
+(dp14937
+g23
+g0
+(g24
+g25
+(dp14938
+tp14939
+Rp14940
+(dp14941
+g59
+(lp14942
+sbsbsg208
+(lp14943
+sbsg34
+Nsg75
+g4
+sg210
+g42
+((lp14944
+tp14945
+Rp14946
+sg222
+g54
+((lp14947
+tp14948
+Rp14949
+(dp14950
+g59
+(lp14951
+sbsg228
+(lp14952
+sg217
+(dp14953
+sg231
+g14838
+sg61
+g42
+((lp14954
+g14933
+atp14955
+Rp14956
+sg233
+Nsg232
+Nsbssb.ccollections
+defaultdict
+p0
+(c__builtin__
+list
+p1
+tp2
+Rp3
+.
\ No newline at end of file
diff --git a/tests/fixtures/db-metadata-0.6.3.pkl b/tests/fixtures/db-metadata-0.6.3.pkl
new file mode 100644 (file)
index 0000000..1a976f2
--- /dev/null
@@ -0,0 +1,46236 @@
+ccopy_reg
+_reconstructor
+p0
+(csqlalchemy.schema
+MetaData
+p1
+c__builtin__
+object
+p2
+Ntp3
+Rp4
+(dp5
+S'tables'
+p6
+(dp7
+Vmaintainer
+p8
+g0
+(csqlalchemy.schema
+Table
+p9
+g2
+Ntp10
+Rp11
+(dp12
+S'description'
+p13
+S'maintainer'
+p14
+sS'quote'
+p15
+NsS'_foreign_keys'
+p16
+csqlalchemy.util
+OrderedSet
+p17
+((lp18
+tp19
+Rp20
+(dp21
+S'_list'
+p22
+(lp23
+sbsS'_prefixes'
+p24
+(lp25
+sS'quote_schema'
+p26
+NsS'_extra_dependencies'
+p27
+c__builtin__
+set
+p28
+((lp29
+tp30
+Rp31
+sS'ddl_listeners'
+p32
+ccollections
+defaultdict
+p33
+(c__builtin__
+list
+p34
+tp35
+Rp36
+sS'_columns'
+p37
+g0
+(csqlalchemy.sql.expression
+ColumnCollection
+p38
+g2
+Ntp39
+Rp40
+(dp41
+S'_data'
+p42
+g0
+(csqlalchemy.util
+OrderedDict
+p43
+c__builtin__
+dict
+p44
+(dp45
+Vname
+p46
+g0
+(csqlalchemy.schema
+Column
+p47
+g2
+Ntp48
+Rp49
+(dp50
+S'key'
+p51
+g46
+sS'is_literal'
+p52
+I00
+sg15
+NsS'server_default'
+p53
+NsS'_creation_order'
+p54
+I100
+sS'table'
+p55
+g11
+sS'unique'
+p56
+NsS'primary_key'
+p57
+I00
+sS'proxy_set'
+p58
+g28
+((lp59
+g49
+atp60
+Rp61
+sS'index'
+p62
+NsS'server_onupdate'
+p63
+NsS'name'
+p64
+g46
+sS'nullable'
+p65
+I00
+sS'default'
+p66
+NsS'autoincrement'
+p67
+I00
+sS'onupdate'
+p68
+NsS'foreign_keys'
+p69
+g17
+((lp70
+tp71
+Rp72
+(dp73
+g22
+(lp74
+sbsS'doc'
+p75
+NsS'type'
+p76
+g0
+(csqlalchemy.types
+TEXT
+p77
+g2
+Ntp78
+Rp79
+(dp80
+S'length'
+p81
+NsS'unicode_error'
+p82
+NsS'convert_unicode'
+p83
+I00
+sS'_warn_on_bytestring'
+p84
+I00
+sbsS'constraints'
+p85
+g28
+((lp86
+tp87
+Rp88
+sbsVid
+p89
+g0
+(g47
+g2
+Ntp90
+Rp91
+(dp92
+g51
+g89
+sg52
+I00
+sg15
+Nsg53
+g0
+(csqlalchemy.schema
+DefaultClause
+p93
+g2
+Ntp94
+Rp95
+(dp96
+S'column'
+p97
+g91
+sS'for_update'
+p98
+I00
+sS'arg'
+p99
+g0
+(csqlalchemy.sql.expression
+_TextClause
+p100
+g2
+Ntp101
+Rp102
+(dp103
+S'text'
+p104
+Vnextval('maintainer_id_seq'::regclass)
+p105
+sS'_bind'
+p106
+NsS'typemap'
+p107
+NsS'bindparams'
+p108
+(dp109
+sbsbsg54
+I99
+sg55
+g11
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp110
+g91
+atp111
+Rp112
+sg62
+Nsg63
+Nsg64
+g89
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp113
+tp114
+Rp115
+(dp116
+g22
+(lp117
+sbsg75
+Nsg76
+g0
+(csqlalchemy.types
+INTEGER
+p118
+g2
+Ntp119
+Rp120
+sg85
+g28
+((lp121
+tp122
+Rp123
+sbsVmodified
+p124
+g0
+(g47
+g2
+Ntp125
+Rp126
+(dp127
+g51
+g124
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp128
+Rp129
+(dp130
+g97
+g126
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp131
+Rp132
+(dp133
+g104
+Vnow()
+p134
+sg106
+Nsg107
+Nsg108
+(dp135
+sbsbsg54
+I102
+sg55
+g11
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp136
+g126
+atp137
+Rp138
+sg62
+Nsg63
+Nsg64
+g124
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp139
+tp140
+Rp141
+(dp142
+g22
+(lp143
+sbsg75
+Nsg76
+g0
+(csqlalchemy.dialects.postgresql.base
+TIMESTAMP
+p144
+g2
+Ntp145
+Rp146
+(dp147
+S'timezone'
+p148
+I01
+sS'precision'
+p149
+Nsbsg85
+g28
+((lp150
+tp151
+Rp152
+sbsVcreated
+p153
+g0
+(g47
+g2
+Ntp154
+Rp155
+(dp156
+g51
+g153
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp157
+Rp158
+(dp159
+g97
+g155
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp160
+Rp161
+(dp162
+g104
+Vnow()
+p163
+sg106
+Nsg107
+Nsg108
+(dp164
+sbsbsg54
+I101
+sg55
+g11
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp165
+g155
+atp166
+Rp167
+sg62
+Nsg63
+Nsg64
+g153
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp168
+tp169
+Rp170
+(dp171
+g22
+(lp172
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp173
+Rp174
+(dp175
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp176
+tp177
+Rp178
+sbstp179
+Rp180
+(dp181
+g22
+(lp182
+g89
+ag46
+ag153
+ag124
+asbsbsg64
+g8
+sS'_primary_key'
+p183
+g0
+(csqlalchemy.schema
+PrimaryKeyConstraint
+p184
+g2
+Ntp185
+Rp186
+(dp187
+S'_pending_colargs'
+p188
+(lp189
+g91
+asg64
+Vmaintainer_pkey
+p190
+sS'parent'
+p191
+g11
+sS'initially'
+p192
+NsS'deferrable'
+p193
+NsS'_create_rule'
+p194
+NsS'columns'
+p195
+g0
+(g38
+g2
+Ntp196
+Rp197
+(dp198
+g42
+g0
+(g43
+g44
+(dp199
+g89
+g91
+stp200
+Rp201
+(dp202
+g22
+(lp203
+g89
+asbsbsbsS'metadata'
+p204
+g4
+sS'indexes'
+p205
+g28
+((lp206
+g0
+(csqlalchemy.schema
+Index
+p207
+g2
+Ntp208
+Rp209
+(dp210
+g55
+g11
+sg56
+I01
+sg64
+S'maintainer_name_key'
+p211
+sg195
+g0
+(g38
+g2
+Ntp212
+Rp213
+(dp214
+g42
+g0
+(g43
+g44
+(dp215
+g46
+g49
+stp216
+Rp217
+(dp218
+g22
+(lp219
+g46
+asbsbsS'kwargs'
+p220
+(dp221
+sbatp222
+Rp223
+sg220
+(dp224
+sS'fullname'
+p225
+g8
+sg85
+g28
+((lp226
+g186
+atp227
+Rp228
+sS'implicit_returning'
+p229
+I01
+sS'schema'
+p230
+NsbsVuid
+p231
+g0
+(g9
+g2
+Ntp232
+Rp233
+(dp234
+g13
+S'uid'
+p235
+sg15
+Nsg16
+g17
+((lp236
+tp237
+Rp238
+(dp239
+g22
+(lp240
+sbsg24
+(lp241
+sg26
+Nsg27
+g28
+((lp242
+tp243
+Rp244
+sg32
+g33
+(g34
+tp245
+Rp246
+sg37
+g0
+(g38
+g2
+Ntp247
+Rp248
+(dp249
+g42
+g0
+(g43
+g44
+(dp250
+Vid
+p251
+g0
+(g47
+g2
+Ntp252
+Rp253
+(dp254
+g51
+g251
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp255
+Rp256
+(dp257
+g97
+g253
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp258
+Rp259
+(dp260
+g104
+Vnextval('uid_id_seq'::regclass)
+p261
+sg106
+Nsg107
+Nsg108
+(dp262
+sbsbsg54
+I129
+sg55
+g233
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp263
+g253
+atp264
+Rp265
+sg62
+Nsg63
+Nsg64
+g251
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp266
+tp267
+Rp268
+(dp269
+g22
+(lp270
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp271
+Rp272
+sg85
+g28
+((lp273
+tp274
+Rp275
+sbsVuid
+p276
+g0
+(g47
+g2
+Ntp277
+Rp278
+(dp279
+g51
+g276
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I130
+sg55
+g233
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp280
+g278
+atp281
+Rp282
+sg62
+Nsg63
+Nsg64
+g276
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp283
+tp284
+Rp285
+(dp286
+g22
+(lp287
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp288
+Rp289
+(dp290
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp291
+tp292
+Rp293
+sbsVmodified
+p294
+g0
+(g47
+g2
+Ntp295
+Rp296
+(dp297
+g51
+g294
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp298
+Rp299
+(dp300
+g97
+g296
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp301
+Rp302
+(dp303
+g104
+Vnow()
+p304
+sg106
+Nsg107
+Nsg108
+(dp305
+sbsbsg54
+I133
+sg55
+g233
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp306
+g296
+atp307
+Rp308
+sg62
+Nsg63
+Nsg64
+g294
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp309
+tp310
+Rp311
+(dp312
+g22
+(lp313
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp314
+Rp315
+(dp316
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp317
+tp318
+Rp319
+sbsVname
+p320
+g0
+(g47
+g2
+Ntp321
+Rp322
+(dp323
+g51
+g320
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I131
+sg55
+g233
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp324
+g322
+atp325
+Rp326
+sg62
+Nsg63
+Nsg64
+g320
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp327
+tp328
+Rp329
+(dp330
+g22
+(lp331
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp332
+Rp333
+(dp334
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp335
+tp336
+Rp337
+sbsVcreated
+p338
+g0
+(g47
+g2
+Ntp339
+Rp340
+(dp341
+g51
+g338
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp342
+Rp343
+(dp344
+g97
+g340
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp345
+Rp346
+(dp347
+g104
+Vnow()
+p348
+sg106
+Nsg107
+Nsg108
+(dp349
+sbsbsg54
+I132
+sg55
+g233
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp350
+g340
+atp351
+Rp352
+sg62
+Nsg63
+Nsg64
+g338
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp353
+tp354
+Rp355
+(dp356
+g22
+(lp357
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp358
+Rp359
+(dp360
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp361
+tp362
+Rp363
+sbstp364
+Rp365
+(dp366
+g22
+(lp367
+g251
+ag276
+ag320
+ag338
+ag294
+asbsbsg64
+g231
+sg183
+g0
+(g184
+g2
+Ntp368
+Rp369
+(dp370
+g188
+(lp371
+g253
+asg64
+Vuid_pkey
+p372
+sg191
+g233
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp373
+Rp374
+(dp375
+g42
+g0
+(g43
+g44
+(dp376
+g251
+g253
+stp377
+Rp378
+(dp379
+g22
+(lp380
+g251
+asbsbsbsg204
+g4
+sg205
+g28
+((lp381
+g0
+(g207
+g2
+Ntp382
+Rp383
+(dp384
+g55
+g233
+sg56
+I01
+sg64
+S'uid_uid_key'
+p385
+sg195
+g0
+(g38
+g2
+Ntp386
+Rp387
+(dp388
+g42
+g0
+(g43
+g44
+(dp389
+g276
+g278
+stp390
+Rp391
+(dp392
+g22
+(lp393
+g276
+asbsbsg220
+(dp394
+sbatp395
+Rp396
+sg220
+(dp397
+sg225
+g231
+sg85
+g28
+((lp398
+g369
+atp399
+Rp400
+sg229
+I01
+sg230
+NsbsVsource_acl
+p401
+g0
+(g9
+g2
+Ntp402
+Rp403
+(dp404
+g13
+S'source_acl'
+p405
+sg15
+Nsg16
+g17
+((lp406
+tp407
+Rp408
+(dp409
+g22
+(lp410
+sbsg24
+(lp411
+sg26
+Nsg27
+g28
+((lp412
+tp413
+Rp414
+sg32
+g33
+(g34
+tp415
+Rp416
+sg37
+g0
+(g38
+g2
+Ntp417
+Rp418
+(dp419
+g42
+g0
+(g43
+g44
+(dp420
+Vaccess_level
+p421
+g0
+(g47
+g2
+Ntp422
+Rp423
+(dp424
+g51
+g421
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I126
+sg55
+g403
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp425
+g423
+atp426
+Rp427
+sg62
+Nsg63
+Nsg64
+g421
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp428
+tp429
+Rp430
+(dp431
+g22
+(lp432
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp433
+Rp434
+(dp435
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp436
+tp437
+Rp438
+sbsVcreated
+p439
+g0
+(g47
+g2
+Ntp440
+Rp441
+(dp442
+g51
+g439
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp443
+Rp444
+(dp445
+g97
+g441
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp446
+Rp447
+(dp448
+g104
+Vnow()
+p449
+sg106
+Nsg107
+Nsg108
+(dp450
+sbsbsg54
+I127
+sg55
+g403
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp451
+g441
+atp452
+Rp453
+sg62
+Nsg63
+Nsg64
+g439
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp454
+tp455
+Rp456
+(dp457
+g22
+(lp458
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp459
+Rp460
+(dp461
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp462
+tp463
+Rp464
+sbsVid
+p465
+g0
+(g47
+g2
+Ntp466
+Rp467
+(dp468
+g51
+g465
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp469
+Rp470
+(dp471
+g97
+g467
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp472
+Rp473
+(dp474
+g104
+Vnextval('source_acl_id_seq'::regclass)
+p475
+sg106
+Nsg107
+Nsg108
+(dp476
+sbsbsg54
+I125
+sg55
+g403
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp477
+g467
+atp478
+Rp479
+sg62
+Nsg63
+Nsg64
+g465
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp480
+tp481
+Rp482
+(dp483
+g22
+(lp484
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp485
+Rp486
+sg85
+g28
+((lp487
+tp488
+Rp489
+sbsVmodified
+p490
+g0
+(g47
+g2
+Ntp491
+Rp492
+(dp493
+g51
+g490
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp494
+Rp495
+(dp496
+g97
+g492
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp497
+Rp498
+(dp499
+g104
+Vnow()
+p500
+sg106
+Nsg107
+Nsg108
+(dp501
+sbsbsg54
+I128
+sg55
+g403
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp502
+g492
+atp503
+Rp504
+sg62
+Nsg63
+Nsg64
+g490
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp505
+tp506
+Rp507
+(dp508
+g22
+(lp509
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp510
+Rp511
+(dp512
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp513
+tp514
+Rp515
+sbstp516
+Rp517
+(dp518
+g22
+(lp519
+g465
+ag421
+ag439
+ag490
+asbsbsg64
+g401
+sg183
+g0
+(g184
+g2
+Ntp520
+Rp521
+(dp522
+g188
+(lp523
+g467
+asg64
+Vsource_acl_pkey
+p524
+sg191
+g403
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp525
+Rp526
+(dp527
+g42
+g0
+(g43
+g44
+(dp528
+g465
+g467
+stp529
+Rp530
+(dp531
+g22
+(lp532
+g465
+asbsbsbsg204
+g4
+sg205
+g28
+((lp533
+g0
+(g207
+g2
+Ntp534
+Rp535
+(dp536
+g55
+g403
+sg56
+I01
+sg64
+S'source_acl_access_level_key'
+p537
+sg195
+g0
+(g38
+g2
+Ntp538
+Rp539
+(dp540
+g42
+g0
+(g43
+g44
+(dp541
+g421
+g423
+stp542
+Rp543
+(dp544
+g22
+(lp545
+g421
+asbsbsg220
+(dp546
+sbatp547
+Rp548
+sg220
+(dp549
+sg225
+g401
+sg85
+g28
+((lp550
+g521
+atp551
+Rp552
+sg229
+I01
+sg230
+NsbsS'src_associations'
+p553
+g0
+(g9
+g2
+Ntp554
+Rp555
+(dp556
+g15
+Nsg16
+g17
+((lp557
+g0
+(csqlalchemy.schema
+ForeignKey
+p558
+g2
+Ntp559
+Rp560
+(dp561
+g191
+g0
+(g47
+g2
+Ntp562
+Rp563
+(dp564
+g51
+Vsource
+p565
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I339
+sg55
+g555
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g565
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp566
+g560
+atp567
+Rp568
+(dp569
+g22
+(lp570
+g560
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp571
+Rp572
+sg85
+g28
+((lp573
+tp574
+Rp575
+sbsg193
+NsS'ondelete'
+p576
+Nsg64
+Vsrc_associations_source
+p577
+sS'_colspec'
+p578
+Vsource.id
+p579
+sS'constraint'
+p580
+g0
+(csqlalchemy.schema
+ForeignKeyConstraint
+p581
+g2
+Ntp582
+Rp583
+(dp584
+g68
+Nsg576
+Nsg64
+g577
+sg191
+g555
+sg192
+NsS'link_to_name'
+p585
+I01
+sg193
+Nsg194
+NsS'_elements'
+p586
+g0
+(g43
+g44
+(dp587
+Vsource
+p588
+g560
+stp589
+Rp590
+(dp591
+g22
+(lp592
+g588
+asbsS'use_alter'
+p593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp594
+Rp595
+(dp596
+g191
+g0
+(g47
+g2
+Ntp597
+Rp598
+(dp599
+g51
+Vsuite
+p600
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I338
+sg55
+g555
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g600
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp601
+g595
+atp602
+Rp603
+(dp604
+g22
+(lp605
+g595
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp606
+Rp607
+sg85
+g28
+((lp608
+tp609
+Rp610
+sbsg193
+Nsg576
+Nsg64
+Vsrc_associations_suite
+p611
+sg578
+Vsuite.id
+p612
+sg580
+g0
+(g581
+g2
+Ntp613
+Rp614
+(dp615
+g68
+Nsg576
+Nsg64
+g611
+sg191
+g555
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp616
+Vsuite
+p617
+g595
+stp618
+Rp619
+(dp620
+g22
+(lp621
+g617
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp622
+Rp623
+(dp624
+g22
+(lp625
+g560
+ag595
+asbsg24
+(lp626
+sg26
+Nsg27
+g28
+((lp627
+tp628
+Rp629
+sg32
+g33
+(g34
+tp630
+Rp631
+sg37
+g0
+(g38
+g2
+Ntp632
+Rp633
+(dp634
+g42
+g0
+(g43
+g44
+(dp635
+g565
+g563
+sg600
+g598
+sVid
+p636
+g0
+(g47
+g2
+Ntp637
+Rp638
+(dp639
+g51
+g636
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp640
+Rp641
+(dp642
+g97
+g638
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp643
+Rp644
+(dp645
+g104
+Vnextval('src_associations_id_seq'::regclass)
+p646
+sg106
+Nsg107
+Nsg108
+(dp647
+sbsbsg54
+I337
+sg55
+g555
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp648
+g638
+atp649
+Rp650
+sg62
+Nsg63
+Nsg64
+g636
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp651
+tp652
+Rp653
+(dp654
+g22
+(lp655
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp656
+Rp657
+sg85
+g28
+((lp658
+tp659
+Rp660
+sbsVmodified
+p661
+g0
+(g47
+g2
+Ntp662
+Rp663
+(dp664
+g51
+g661
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp665
+Rp666
+(dp667
+g97
+g663
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp668
+Rp669
+(dp670
+g104
+Vnow()
+p671
+sg106
+Nsg107
+Nsg108
+(dp672
+sbsbsg54
+I341
+sg55
+g555
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g661
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp673
+tp674
+Rp675
+(dp676
+g22
+(lp677
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp678
+Rp679
+(dp680
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp681
+tp682
+Rp683
+sbsVcreated
+p684
+g0
+(g47
+g2
+Ntp685
+Rp686
+(dp687
+g51
+g684
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp688
+Rp689
+(dp690
+g97
+g686
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp691
+Rp692
+(dp693
+g104
+Vnow()
+p694
+sg106
+Nsg107
+Nsg108
+(dp695
+sbsbsg54
+I340
+sg55
+g555
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g684
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp696
+tp697
+Rp698
+(dp699
+g22
+(lp700
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp701
+Rp702
+(dp703
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp704
+tp705
+Rp706
+sbstp707
+Rp708
+(dp709
+g22
+(lp710
+g636
+ag600
+ag565
+ag684
+ag661
+asbsbsg64
+g553
+sg183
+g0
+(g184
+g2
+Ntp711
+Rp712
+(dp713
+g188
+(lp714
+g638
+asg64
+Vsrc_associations_pkey
+p715
+sg191
+g555
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp716
+Rp717
+(dp718
+g42
+g0
+(g43
+g44
+(dp719
+g636
+g638
+stp720
+Rp721
+(dp722
+g22
+(lp723
+g636
+asbsbsbsg204
+g4
+sg205
+g28
+((lp724
+g0
+(g207
+g2
+Ntp725
+Rp726
+(dp727
+g55
+g555
+sg56
+I00
+sg64
+S'src_associations_source'
+p728
+sg195
+g0
+(g38
+g2
+Ntp729
+Rp730
+(dp731
+g42
+g0
+(g43
+g44
+(dp732
+g565
+g563
+stp733
+Rp734
+(dp735
+g22
+(lp736
+g565
+asbsbsg220
+(dp737
+sbag0
+(g207
+g2
+Ntp738
+Rp739
+(dp740
+g55
+g555
+sg56
+I01
+sg64
+S'src_associations_suite_key'
+p741
+sg195
+g0
+(g38
+g2
+Ntp742
+Rp743
+(dp744
+g42
+g0
+(g43
+g44
+(dp745
+g600
+g598
+sg565
+g563
+stp746
+Rp747
+(dp748
+g22
+(lp749
+g600
+ag565
+asbsbsg220
+(dp750
+sbatp751
+Rp752
+sg220
+(dp753
+sg225
+g553
+sg85
+g28
+((lp754
+g712
+ag583
+ag614
+atp755
+Rp756
+sg229
+I01
+sg230
+NsbsVpolicy_queue
+p757
+g0
+(g9
+g2
+Ntp758
+Rp759
+(dp760
+g13
+S'policy_queue'
+p761
+sg15
+Nsg16
+g17
+((lp762
+tp763
+Rp764
+(dp765
+g22
+(lp766
+sbsg24
+(lp767
+sg26
+Nsg27
+g28
+((lp768
+tp769
+Rp770
+sg32
+g33
+(g34
+tp771
+Rp772
+sg37
+g0
+(g38
+g2
+Ntp773
+Rp774
+(dp775
+g42
+g0
+(g43
+g44
+(dp776
+Vorigin
+p777
+g0
+(g47
+g2
+Ntp778
+Rp779
+(dp780
+g51
+g777
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I173
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp781
+g779
+atp782
+Rp783
+sg62
+Nsg63
+Nsg64
+g777
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp784
+tp785
+Rp786
+(dp787
+g22
+(lp788
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp789
+Rp790
+(dp791
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp792
+tp793
+Rp794
+sbsVgenerate_metadata
+p795
+g0
+(g47
+g2
+Ntp796
+Rp797
+(dp798
+g51
+g795
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp799
+Rp800
+(dp801
+g97
+g797
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp802
+Rp803
+(dp804
+g104
+Vfalse
+p805
+sg106
+Nsg107
+Nsg108
+(dp806
+sbsbsg54
+I172
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp807
+g797
+atp808
+Rp809
+sg62
+Nsg63
+Nsg64
+g795
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp810
+tp811
+Rp812
+(dp813
+g22
+(lp814
+sbsg75
+Nsg76
+g0
+(csqlalchemy.types
+BOOLEAN
+p815
+g2
+Ntp816
+Rp817
+(dp818
+S'create_constraint'
+p819
+I01
+sS'_type_affinity'
+p820
+csqlalchemy.types
+Boolean
+p821
+sg64
+Nsbsg85
+g28
+((lp822
+tp823
+Rp824
+sbsVcreated
+p825
+g0
+(g47
+g2
+Ntp826
+Rp827
+(dp828
+g51
+g825
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp829
+Rp830
+(dp831
+g97
+g827
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp832
+Rp833
+(dp834
+g104
+Vnow()
+p835
+sg106
+Nsg107
+Nsg108
+(dp836
+sbsbsg54
+I178
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp837
+g827
+atp838
+Rp839
+sg62
+Nsg63
+Nsg64
+g825
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp840
+tp841
+Rp842
+(dp843
+g22
+(lp844
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp845
+Rp846
+(dp847
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp848
+tp849
+Rp850
+sbsVperms
+p851
+g0
+(g47
+g2
+Ntp852
+Rp853
+(dp854
+g51
+g851
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp855
+Rp856
+(dp857
+g97
+g853
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp858
+Rp859
+(dp860
+g104
+V'0660'::bpchar
+p861
+sg106
+Nsg107
+Nsg108
+(dp862
+sbsbsg54
+I170
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp863
+g853
+atp864
+Rp865
+sg62
+Nsg63
+Nsg64
+g851
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp866
+tp867
+Rp868
+(dp869
+g22
+(lp870
+sbsg75
+Nsg76
+g0
+(csqlalchemy.types
+CHAR
+p871
+g2
+Ntp872
+Rp873
+(dp874
+g81
+I4
+sg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp875
+tp876
+Rp877
+sbsVqueue_name
+p878
+g0
+(g47
+g2
+Ntp879
+Rp880
+(dp881
+g51
+g878
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I168
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp882
+g880
+atp883
+Rp884
+sg62
+Nsg63
+Nsg64
+g878
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp885
+tp886
+Rp887
+(dp888
+g22
+(lp889
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp890
+Rp891
+(dp892
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp893
+tp894
+Rp895
+sbsVmodified
+p896
+g0
+(g47
+g2
+Ntp897
+Rp898
+(dp899
+g51
+g896
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp900
+Rp901
+(dp902
+g97
+g898
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp903
+Rp904
+(dp905
+g104
+Vnow()
+p906
+sg106
+Nsg107
+Nsg108
+(dp907
+sbsbsg54
+I179
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp908
+g898
+atp909
+Rp910
+sg62
+Nsg63
+Nsg64
+g896
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp911
+tp912
+Rp913
+(dp914
+g22
+(lp915
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp916
+Rp917
+(dp918
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp919
+tp920
+Rp921
+sbsVlabel
+p922
+g0
+(g47
+g2
+Ntp923
+Rp924
+(dp925
+g51
+g922
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I174
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp926
+g924
+atp927
+Rp928
+sg62
+Nsg63
+Nsg64
+g922
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp929
+tp930
+Rp931
+(dp932
+g22
+(lp933
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp934
+Rp935
+(dp936
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp937
+tp938
+Rp939
+sbsVsigningkey
+p940
+g0
+(g47
+g2
+Ntp941
+Rp942
+(dp943
+g51
+g940
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I176
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp944
+g942
+atp945
+Rp946
+sg62
+Nsg63
+Nsg64
+g940
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp947
+tp948
+Rp949
+(dp950
+g22
+(lp951
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp952
+Rp953
+(dp954
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp955
+tp956
+Rp957
+sbsVsend_to_build_queues
+p958
+g0
+(g47
+g2
+Ntp959
+Rp960
+(dp961
+g51
+g958
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp962
+Rp963
+(dp964
+g97
+g960
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp965
+Rp966
+(dp967
+g104
+Vfalse
+p968
+sg106
+Nsg107
+Nsg108
+(dp969
+sbsbsg54
+I180
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp970
+g960
+atp971
+Rp972
+sg62
+Nsg63
+Nsg64
+g958
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp973
+tp974
+Rp975
+(dp976
+g22
+(lp977
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp978
+Rp979
+(dp980
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp981
+tp982
+Rp983
+sbsVchange_perms
+p984
+g0
+(g47
+g2
+Ntp985
+Rp986
+(dp987
+g51
+g984
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp988
+Rp989
+(dp990
+g97
+g986
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp991
+Rp992
+(dp993
+g104
+V'0660'::bpchar
+p994
+sg106
+Nsg107
+Nsg108
+(dp995
+sbsbsg54
+I171
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp996
+g986
+atp997
+Rp998
+sg62
+Nsg63
+Nsg64
+g984
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp999
+tp1000
+Rp1001
+(dp1002
+g22
+(lp1003
+sbsg75
+Nsg76
+g0
+(g871
+g2
+Ntp1004
+Rp1005
+(dp1006
+g81
+I4
+sg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp1007
+tp1008
+Rp1009
+sbsVpath
+p1010
+g0
+(g47
+g2
+Ntp1011
+Rp1012
+(dp1013
+g51
+g1010
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I169
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1014
+g1012
+atp1015
+Rp1016
+sg62
+Nsg63
+Nsg64
+g1010
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1017
+tp1018
+Rp1019
+(dp1020
+g22
+(lp1021
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp1022
+Rp1023
+(dp1024
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp1025
+tp1026
+Rp1027
+sbsVreleasedescription
+p1028
+g0
+(g47
+g2
+Ntp1029
+Rp1030
+(dp1031
+g51
+g1028
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I175
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1032
+g1030
+atp1033
+Rp1034
+sg62
+Nsg63
+Nsg64
+g1028
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1035
+tp1036
+Rp1037
+(dp1038
+g22
+(lp1039
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp1040
+Rp1041
+(dp1042
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp1043
+tp1044
+Rp1045
+sbsVid
+p1046
+g0
+(g47
+g2
+Ntp1047
+Rp1048
+(dp1049
+g51
+g1046
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1050
+Rp1051
+(dp1052
+g97
+g1048
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1053
+Rp1054
+(dp1055
+g104
+Vnextval('policy_queue_id_seq'::regclass)
+p1056
+sg106
+Nsg107
+Nsg108
+(dp1057
+sbsbsg54
+I167
+sg55
+g759
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp1058
+g1048
+atp1059
+Rp1060
+sg62
+Nsg63
+Nsg64
+g1046
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp1061
+tp1062
+Rp1063
+(dp1064
+g22
+(lp1065
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp1066
+Rp1067
+sg85
+g28
+((lp1068
+tp1069
+Rp1070
+sbsVstay_of_execution
+p1071
+g0
+(g47
+g2
+Ntp1072
+Rp1073
+(dp1074
+g51
+g1071
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1075
+Rp1076
+(dp1077
+g97
+g1073
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1078
+Rp1079
+(dp1080
+g104
+V86400
+p1081
+sg106
+Nsg107
+Nsg108
+(dp1082
+sbsbsg54
+I177
+sg55
+g759
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1083
+g1073
+atp1084
+Rp1085
+sg62
+Nsg63
+Nsg64
+g1071
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1086
+tp1087
+Rp1088
+(dp1089
+g22
+(lp1090
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp1091
+Rp1092
+sg85
+g28
+((lp1093
+tp1094
+Rp1095
+sbstp1096
+Rp1097
+(dp1098
+g22
+(lp1099
+g1046
+ag878
+ag1010
+ag851
+ag984
+ag795
+ag777
+ag922
+ag1028
+ag940
+ag1071
+ag825
+ag896
+ag958
+asbsbsg64
+g757
+sg183
+g0
+(g184
+g2
+Ntp1100
+Rp1101
+(dp1102
+g188
+(lp1103
+g1048
+asg64
+Vpolicy_queue_pkey
+p1104
+sg191
+g759
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp1105
+Rp1106
+(dp1107
+g42
+g0
+(g43
+g44
+(dp1108
+g1046
+g1048
+stp1109
+Rp1110
+(dp1111
+g22
+(lp1112
+g1046
+asbsbsbsg204
+g4
+sg205
+g28
+((lp1113
+g0
+(g207
+g2
+Ntp1114
+Rp1115
+(dp1116
+g55
+g759
+sg56
+I01
+sg64
+S'policy_queue_queue_name_key'
+p1117
+sg195
+g0
+(g38
+g2
+Ntp1118
+Rp1119
+(dp1120
+g42
+g0
+(g43
+g44
+(dp1121
+g878
+g880
+stp1122
+Rp1123
+(dp1124
+g22
+(lp1125
+g878
+asbsbsg220
+(dp1126
+sbatp1127
+Rp1128
+sg220
+(dp1129
+sg225
+g757
+sg85
+g28
+((lp1130
+g1101
+ag0
+(csqlalchemy.schema
+CheckConstraint
+p1131
+g2
+Ntp1132
+Rp1133
+(dp1134
+g64
+Nsg191
+g759
+sg192
+Nsg193
+Nsg194
+g0
+(csqlalchemy.util
+portable_instancemethod
+p1135
+g2
+Ntp1136
+Rp1137
+(dp1138
+S'target'
+p1139
+g817
+sg64
+S'_should_create_constraint'
+p1140
+sbsS'sqltext'
+p1141
+g0
+(csqlalchemy.sql.expression
+_BinaryExpression
+p1142
+g2
+Ntp1143
+Rp1144
+(dp1145
+S'operator'
+p1146
+csqlalchemy.sql.operators
+in_op
+p1147
+sS'modifiers'
+p1148
+(dp1149
+sS'right'
+p1150
+g0
+(csqlalchemy.sql.expression
+_Grouping
+p1151
+g2
+Ntp1152
+Rp1153
+(dp1154
+g76
+g0
+(csqlalchemy.types
+Integer
+p1155
+g2
+Ntp1156
+Rp1157
+(dp1158
+g820
+g1155
+sbsS'element'
+p1159
+g0
+(csqlalchemy.sql.expression
+ClauseList
+p1160
+g2
+Ntp1161
+Rp1162
+(dp1163
+g1146
+csqlalchemy.sql.operators
+comma_op
+p1164
+sg76
+g1157
+sS'group_contents'
+p1165
+I01
+sS'clauses'
+p1166
+(lp1167
+g0
+(csqlalchemy.sql.expression
+_BindParamClause
+p1168
+g2
+Ntp1169
+Rp1170
+(dp1171
+g56
+I01
+sS'isoutparam'
+p1172
+I00
+sg51
+g0
+(csqlalchemy.sql.expression
+_generated_label
+p1173
+c__builtin__
+unicode
+p1174
+V%(25616208 generate_metadata)s
+p1175
+tp1176
+Rp1177
+sS'required'
+p1178
+I00
+sg76
+g1157
+sS'_orig_key'
+p1179
+g795
+sS'value'
+p1180
+I0
+sbag0
+(g1168
+g2
+Ntp1181
+Rp1182
+(dp1183
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25616272 generate_metadata)s
+p1184
+tp1185
+Rp1186
+sg1178
+I00
+sg76
+g1157
+sg1179
+g795
+sg1180
+I1
+sbasS'group'
+p1187
+I01
+sbsbsS'negate'
+p1188
+csqlalchemy.sql.operators
+notin_op
+p1189
+sg76
+g0
+(g821
+g2
+Ntp1190
+Rp1191
+(dp1192
+g819
+I01
+sg64
+NsbsS'left'
+p1193
+g797
+sbsbag0
+(g1131
+g2
+Ntp1194
+Rp1195
+(dp1196
+g64
+Nsg191
+g759
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp1197
+Rp1198
+(dp1199
+g1139
+g979
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp1200
+Rp1201
+(dp1202
+g1146
+g1147
+sg1148
+(dp1203
+sg1150
+g0
+(g1151
+g2
+Ntp1204
+Rp1205
+(dp1206
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp1207
+Rp1208
+(dp1209
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp1210
+g0
+(g1168
+g2
+Ntp1211
+Rp1212
+(dp1213
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25634128 send_to_build_queues)s
+p1214
+tp1215
+Rp1216
+sg1178
+I00
+sg76
+g1157
+sg1179
+g958
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp1217
+Rp1218
+(dp1219
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25634192 send_to_build_queues)s
+p1220
+tp1221
+Rp1222
+sg1178
+I00
+sg76
+g1157
+sg1179
+g958
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g960
+sbsbatp1223
+Rp1224
+sg229
+I01
+sg230
+NsbsS'src_format'
+p1225
+g0
+(g9
+g2
+Ntp1226
+Rp1227
+(dp1228
+g13
+S'src_format'
+p1229
+sg15
+Nsg16
+g17
+((lp1230
+tp1231
+Rp1232
+(dp1233
+g22
+(lp1234
+sbsg24
+(lp1235
+sg26
+Nsg27
+g28
+((lp1236
+tp1237
+Rp1238
+sg32
+g33
+(g34
+tp1239
+Rp1240
+sg37
+g0
+(g38
+g2
+Ntp1241
+Rp1242
+(dp1243
+g42
+g0
+(g43
+g44
+(dp1244
+Vcreated
+p1245
+g0
+(g47
+g2
+Ntp1246
+Rp1247
+(dp1248
+g51
+g1245
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1249
+Rp1250
+(dp1251
+g97
+g1247
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1252
+Rp1253
+(dp1254
+g104
+Vnow()
+p1255
+sg106
+Nsg107
+Nsg108
+(dp1256
+sbsbsg54
+I348
+sg55
+g1227
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1257
+g1247
+atp1258
+Rp1259
+sg62
+Nsg63
+Nsg64
+g1245
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1260
+tp1261
+Rp1262
+(dp1263
+g22
+(lp1264
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp1265
+Rp1266
+(dp1267
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp1268
+tp1269
+Rp1270
+sbsVmodified
+p1271
+g0
+(g47
+g2
+Ntp1272
+Rp1273
+(dp1274
+g51
+g1271
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1275
+Rp1276
+(dp1277
+g97
+g1273
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1278
+Rp1279
+(dp1280
+g104
+Vnow()
+p1281
+sg106
+Nsg107
+Nsg108
+(dp1282
+sbsbsg54
+I349
+sg55
+g1227
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1283
+g1273
+atp1284
+Rp1285
+sg62
+Nsg63
+Nsg64
+g1271
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1286
+tp1287
+Rp1288
+(dp1289
+g22
+(lp1290
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp1291
+Rp1292
+(dp1293
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp1294
+tp1295
+Rp1296
+sbsVformat_name
+p1297
+g0
+(g47
+g2
+Ntp1298
+Rp1299
+(dp1300
+g51
+g1297
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I347
+sg55
+g1227
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1301
+g1299
+atp1302
+Rp1303
+sg62
+Nsg63
+Nsg64
+g1297
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1304
+tp1305
+Rp1306
+(dp1307
+g22
+(lp1308
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp1309
+Rp1310
+(dp1311
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp1312
+tp1313
+Rp1314
+sbsVid
+p1315
+g0
+(g47
+g2
+Ntp1316
+Rp1317
+(dp1318
+g51
+g1315
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1319
+Rp1320
+(dp1321
+g97
+g1317
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1322
+Rp1323
+(dp1324
+g104
+Vnextval('src_format_id_seq'::regclass)
+p1325
+sg106
+Nsg107
+Nsg108
+(dp1326
+sbsbsg54
+I346
+sg55
+g1227
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp1327
+g1317
+atp1328
+Rp1329
+sg62
+Nsg63
+Nsg64
+g1315
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp1330
+tp1331
+Rp1332
+(dp1333
+g22
+(lp1334
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp1335
+Rp1336
+sg85
+g28
+((lp1337
+tp1338
+Rp1339
+sbstp1340
+Rp1341
+(dp1342
+g22
+(lp1343
+g1315
+ag1297
+ag1245
+ag1271
+asbsbsg64
+g1225
+sg183
+g0
+(g184
+g2
+Ntp1344
+Rp1345
+(dp1346
+g188
+(lp1347
+g1317
+asg64
+Vsrc_format_pkey
+p1348
+sg191
+g1227
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp1349
+Rp1350
+(dp1351
+g42
+g0
+(g43
+g44
+(dp1352
+g1315
+g1317
+stp1353
+Rp1354
+(dp1355
+g22
+(lp1356
+g1315
+asbsbsbsg204
+g4
+sg205
+g28
+((lp1357
+g0
+(g207
+g2
+Ntp1358
+Rp1359
+(dp1360
+g55
+g1227
+sg56
+I01
+sg64
+S'src_format_format_name_key'
+p1361
+sg195
+g0
+(g38
+g2
+Ntp1362
+Rp1363
+(dp1364
+g42
+g0
+(g43
+g44
+(dp1365
+g1297
+g1299
+stp1366
+Rp1367
+(dp1368
+g22
+(lp1369
+g1297
+asbsbsg220
+(dp1370
+sbatp1371
+Rp1372
+sg220
+(dp1373
+sg225
+g1225
+sg85
+g28
+((lp1374
+g1345
+atp1375
+Rp1376
+sg229
+I01
+sg230
+NsbsS'changes_pending_binaries'
+p1377
+g0
+(g9
+g2
+Ntp1378
+Rp1379
+(dp1380
+g13
+S'changes_pending_binaries'
+p1381
+sg15
+Nsg16
+g17
+((lp1382
+g0
+(g558
+g2
+Ntp1383
+Rp1384
+(dp1385
+g191
+g0
+(g47
+g2
+Ntp1386
+Rp1387
+(dp1388
+g51
+Varchitecture_id
+p1389
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I260
+sg55
+g1379
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1390
+g1387
+atp1391
+Rp1392
+sg62
+Nsg63
+Nsg64
+g1389
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1393
+g1384
+atp1394
+Rp1395
+(dp1396
+g22
+(lp1397
+g1384
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp1398
+Rp1399
+sg85
+g28
+((lp1400
+tp1401
+Rp1402
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_binaries_architecture_id_fkey
+p1403
+sg578
+Varchitecture.id
+p1404
+sg580
+g0
+(g581
+g2
+Ntp1405
+Rp1406
+(dp1407
+g68
+Nsg576
+Nsg64
+g1403
+sg191
+g1379
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp1408
+Varchitecture_id
+p1409
+g1384
+stp1410
+Rp1411
+(dp1412
+g22
+(lp1413
+g1409
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp1414
+Rp1415
+(dp1416
+g191
+g0
+(g47
+g2
+Ntp1417
+Rp1418
+(dp1419
+g51
+Vchange_id
+p1420
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I257
+sg55
+g1379
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1421
+g1418
+atp1422
+Rp1423
+sg62
+Nsg63
+Nsg64
+g1420
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1424
+g1415
+atp1425
+Rp1426
+(dp1427
+g22
+(lp1428
+g1415
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp1429
+Rp1430
+sg85
+g28
+((lp1431
+tp1432
+Rp1433
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_binaries_change_id_fkey
+p1434
+sg578
+Vchanges.id
+p1435
+sg580
+g0
+(g581
+g2
+Ntp1436
+Rp1437
+(dp1438
+g68
+Nsg576
+Nsg64
+g1434
+sg191
+g1379
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp1439
+Vchange_id
+p1440
+g1415
+stp1441
+Rp1442
+(dp1443
+g22
+(lp1444
+g1440
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp1445
+Rp1446
+(dp1447
+g191
+g0
+(g47
+g2
+Ntp1448
+Rp1449
+(dp1450
+g51
+Vpending_file_id
+p1451
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I263
+sg55
+g1379
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1452
+g1449
+atp1453
+Rp1454
+sg62
+Nsg63
+Nsg64
+g1451
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1455
+g1446
+atp1456
+Rp1457
+(dp1458
+g22
+(lp1459
+g1446
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp1460
+Rp1461
+sg85
+g28
+((lp1462
+tp1463
+Rp1464
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_binaries_pending_file_id_fkey
+p1465
+sg578
+Vchanges_pending_files.id
+p1466
+sg580
+g0
+(g581
+g2
+Ntp1467
+Rp1468
+(dp1469
+g68
+Nsg576
+Nsg64
+g1465
+sg191
+g1379
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp1470
+Vpending_file_id
+p1471
+g1446
+stp1472
+Rp1473
+(dp1474
+g22
+(lp1475
+g1471
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp1476
+Rp1477
+(dp1478
+g191
+g0
+(g47
+g2
+Ntp1479
+Rp1480
+(dp1481
+g51
+Vpending_source_id
+p1482
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I262
+sg55
+g1379
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1483
+g1480
+atp1484
+Rp1485
+sg62
+Nsg63
+Nsg64
+g1482
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1486
+g1477
+atp1487
+Rp1488
+(dp1489
+g22
+(lp1490
+g1477
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp1491
+Rp1492
+sg85
+g28
+((lp1493
+tp1494
+Rp1495
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_binaries_pending_source_id_fkey
+p1496
+sg578
+Vchanges_pending_source.id
+p1497
+sg580
+g0
+(g581
+g2
+Ntp1498
+Rp1499
+(dp1500
+g68
+Nsg576
+Nsg64
+g1496
+sg191
+g1379
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp1501
+Vpending_source_id
+p1502
+g1477
+stp1503
+Rp1504
+(dp1505
+g22
+(lp1506
+g1502
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp1507
+Rp1508
+(dp1509
+g191
+g0
+(g47
+g2
+Ntp1510
+Rp1511
+(dp1512
+g51
+Vsource_id
+p1513
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I261
+sg55
+g1379
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1514
+g1511
+atp1515
+Rp1516
+sg62
+Nsg63
+Nsg64
+g1513
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1517
+g1508
+atp1518
+Rp1519
+(dp1520
+g22
+(lp1521
+g1508
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp1522
+Rp1523
+sg85
+g28
+((lp1524
+tp1525
+Rp1526
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_binaries_source_id_fkey
+p1527
+sg578
+Vsource.id
+p1528
+sg580
+g0
+(g581
+g2
+Ntp1529
+Rp1530
+(dp1531
+g68
+Nsg576
+Nsg64
+g1527
+sg191
+g1379
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp1532
+Vsource_id
+p1533
+g1508
+stp1534
+Rp1535
+(dp1536
+g22
+(lp1537
+g1533
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp1538
+Rp1539
+(dp1540
+g22
+(lp1541
+g1384
+ag1415
+ag1446
+ag1477
+ag1508
+asbsg24
+(lp1542
+sg26
+Nsg27
+g28
+((lp1543
+tp1544
+Rp1545
+sg32
+g33
+(g34
+tp1546
+Rp1547
+sg37
+g0
+(g38
+g2
+Ntp1548
+Rp1549
+(dp1550
+g42
+g0
+(g43
+g44
+(dp1551
+Vpackage
+p1552
+g0
+(g47
+g2
+Ntp1553
+Rp1554
+(dp1555
+g51
+g1552
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I258
+sg55
+g1379
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1556
+g1554
+atp1557
+Rp1558
+sg62
+Nsg63
+Nsg64
+g1552
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1559
+tp1560
+Rp1561
+(dp1562
+g22
+(lp1563
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp1564
+Rp1565
+(dp1566
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp1567
+tp1568
+Rp1569
+sbsg1420
+g1418
+sVcreated
+p1570
+g0
+(g47
+g2
+Ntp1571
+Rp1572
+(dp1573
+g51
+g1570
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1574
+Rp1575
+(dp1576
+g97
+g1572
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1577
+Rp1578
+(dp1579
+g104
+Vnow()
+p1580
+sg106
+Nsg107
+Nsg108
+(dp1581
+sbsbsg54
+I264
+sg55
+g1379
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1582
+g1572
+atp1583
+Rp1584
+sg62
+Nsg63
+Nsg64
+g1570
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1585
+tp1586
+Rp1587
+(dp1588
+g22
+(lp1589
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp1590
+Rp1591
+(dp1592
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp1593
+tp1594
+Rp1595
+sbsVmodified
+p1596
+g0
+(g47
+g2
+Ntp1597
+Rp1598
+(dp1599
+g51
+g1596
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1600
+Rp1601
+(dp1602
+g97
+g1598
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1603
+Rp1604
+(dp1605
+g104
+Vnow()
+p1606
+sg106
+Nsg107
+Nsg108
+(dp1607
+sbsbsg54
+I265
+sg55
+g1379
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1608
+g1598
+atp1609
+Rp1610
+sg62
+Nsg63
+Nsg64
+g1596
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1611
+tp1612
+Rp1613
+(dp1614
+g22
+(lp1615
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp1616
+Rp1617
+(dp1618
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp1619
+tp1620
+Rp1621
+sbsVversion
+p1622
+g0
+(g47
+g2
+Ntp1623
+Rp1624
+(dp1625
+g51
+g1622
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I259
+sg55
+g1379
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1626
+g1624
+atp1627
+Rp1628
+sg62
+Nsg63
+Nsg64
+g1622
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1629
+tp1630
+Rp1631
+(dp1632
+g22
+(lp1633
+sbsg75
+Nsg76
+g0
+(cdaklib.dbconn
+DebVersion
+p1634
+g2
+Ntp1635
+Rp1636
+sg85
+g28
+((lp1637
+tp1638
+Rp1639
+sbsg1389
+g1387
+sg1451
+g1449
+sg1513
+g1511
+sg1482
+g1480
+sVid
+p1640
+g0
+(g47
+g2
+Ntp1641
+Rp1642
+(dp1643
+g51
+g1640
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1644
+Rp1645
+(dp1646
+g97
+g1642
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1647
+Rp1648
+(dp1649
+g104
+Vnextval('changes_pending_binaries_id_seq'::regclass)
+p1650
+sg106
+Nsg107
+Nsg108
+(dp1651
+sbsbsg54
+I256
+sg55
+g1379
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp1652
+g1642
+atp1653
+Rp1654
+sg62
+Nsg63
+Nsg64
+g1640
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp1655
+tp1656
+Rp1657
+(dp1658
+g22
+(lp1659
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp1660
+Rp1661
+sg85
+g28
+((lp1662
+tp1663
+Rp1664
+sbstp1665
+Rp1666
+(dp1667
+g22
+(lp1668
+g1640
+ag1420
+ag1552
+ag1622
+ag1389
+ag1513
+ag1482
+ag1451
+ag1570
+ag1596
+asbsbsg64
+g1377
+sg183
+g0
+(g184
+g2
+Ntp1669
+Rp1670
+(dp1671
+g188
+(lp1672
+g1642
+asg64
+Vchanges_pending_binaries_pkey
+p1673
+sg191
+g1379
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp1674
+Rp1675
+(dp1676
+g42
+g0
+(g43
+g44
+(dp1677
+g1640
+g1642
+stp1678
+Rp1679
+(dp1680
+g22
+(lp1681
+g1640
+asbsbsbsg204
+g4
+sg205
+g28
+((lp1682
+g0
+(g207
+g2
+Ntp1683
+Rp1684
+(dp1685
+g55
+g1379
+sg56
+I01
+sg64
+S'changes_pending_binaries_package_key'
+p1686
+sg195
+g0
+(g38
+g2
+Ntp1687
+Rp1688
+(dp1689
+g42
+g0
+(g43
+g44
+(dp1690
+g1622
+g1624
+sg1389
+g1387
+sg1552
+g1554
+stp1691
+Rp1692
+(dp1693
+g22
+(lp1694
+g1552
+ag1622
+ag1389
+asbsbsg220
+(dp1695
+sbatp1696
+Rp1697
+sg220
+(dp1698
+sg225
+g1377
+sg85
+g28
+((lp1699
+g1406
+ag1468
+ag1670
+ag1530
+ag1437
+ag1499
+atp1700
+Rp1701
+sg229
+I01
+sg230
+NsbsS'newest_source'
+p1702
+g0
+(g9
+g2
+Ntp1703
+Rp1704
+(dp1705
+g15
+Nsg16
+g17
+((lp1706
+tp1707
+Rp1708
+(dp1709
+g22
+(lp1710
+sbsg24
+(lp1711
+sg26
+Nsg27
+g28
+((lp1712
+tp1713
+Rp1714
+sg32
+g33
+(g34
+tp1715
+Rp1716
+sg37
+g0
+(g38
+g2
+Ntp1717
+Rp1718
+(dp1719
+g42
+g0
+(g43
+g44
+(dp1720
+Vsource
+p1721
+g0
+(g47
+g2
+Ntp1722
+Rp1723
+(dp1724
+g51
+g1721
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I437
+sg55
+g1704
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g1721
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1725
+tp1726
+Rp1727
+(dp1728
+g22
+(lp1729
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp1730
+Rp1731
+(dp1732
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp1733
+tp1734
+Rp1735
+sbsVversion
+p1736
+g0
+(g47
+g2
+Ntp1737
+Rp1738
+(dp1739
+g51
+g1736
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I438
+sg55
+g1704
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g1736
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1740
+tp1741
+Rp1742
+(dp1743
+g22
+(lp1744
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp1745
+Rp1746
+sg85
+g28
+((lp1747
+tp1748
+Rp1749
+sbsVsuite
+p1750
+g0
+(g47
+g2
+Ntp1751
+Rp1752
+(dp1753
+g51
+g1750
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I439
+sg55
+g1704
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g1750
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1754
+tp1755
+Rp1756
+(dp1757
+g22
+(lp1758
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp1759
+Rp1760
+sg85
+g28
+((lp1761
+tp1762
+Rp1763
+sbstp1764
+Rp1765
+(dp1766
+g22
+(lp1767
+g1721
+ag1736
+ag1750
+asbsbsg64
+g1702
+sg183
+g0
+(g184
+g2
+Ntp1768
+Rp1769
+(dp1770
+g188
+(lp1771
+sg64
+Nsg191
+g1704
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp1772
+Rp1773
+(dp1774
+g42
+g0
+(g43
+g44
+(dp1775
+tp1776
+Rp1777
+(dp1778
+g22
+(lp1779
+sbsbsbsg204
+g4
+sg205
+g28
+((lp1780
+tp1781
+Rp1782
+sg220
+(dp1783
+sg225
+g1702
+sg85
+g28
+((lp1784
+g1769
+atp1785
+Rp1786
+sg229
+I01
+sg230
+NsbsS'build_queue'
+p1787
+g0
+(g9
+g2
+Ntp1788
+Rp1789
+(dp1790
+g13
+S'build_queue'
+p1791
+sg15
+Nsg16
+g17
+((lp1792
+tp1793
+Rp1794
+(dp1795
+g22
+(lp1796
+sbsg24
+(lp1797
+sg26
+Nsg27
+g28
+((lp1798
+tp1799
+Rp1800
+sg32
+g33
+(g34
+tp1801
+Rp1802
+sg37
+g0
+(g38
+g2
+Ntp1803
+Rp1804
+(dp1805
+g42
+g0
+(g43
+g44
+(dp1806
+Vorigin
+p1807
+g0
+(g47
+g2
+Ntp1808
+Rp1809
+(dp1810
+g51
+g1807
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I201
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1811
+g1809
+atp1812
+Rp1813
+sg62
+Nsg63
+Nsg64
+g1807
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1814
+tp1815
+Rp1816
+(dp1817
+g22
+(lp1818
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp1819
+Rp1820
+(dp1821
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp1822
+tp1823
+Rp1824
+sbsVgenerate_metadata
+p1825
+g0
+(g47
+g2
+Ntp1826
+Rp1827
+(dp1828
+g51
+g1825
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1829
+Rp1830
+(dp1831
+g97
+g1827
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1832
+Rp1833
+(dp1834
+g104
+Vfalse
+p1835
+sg106
+Nsg107
+Nsg108
+(dp1836
+sbsbsg54
+I200
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1837
+g1827
+atp1838
+Rp1839
+sg62
+Nsg63
+Nsg64
+g1825
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1840
+tp1841
+Rp1842
+(dp1843
+g22
+(lp1844
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp1845
+Rp1846
+(dp1847
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp1848
+tp1849
+Rp1850
+sbsVcreated
+p1851
+g0
+(g47
+g2
+Ntp1852
+Rp1853
+(dp1854
+g51
+g1851
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1855
+Rp1856
+(dp1857
+g97
+g1853
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1858
+Rp1859
+(dp1860
+g104
+Vnow()
+p1861
+sg106
+Nsg107
+Nsg108
+(dp1862
+sbsbsg54
+I206
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1863
+g1853
+atp1864
+Rp1865
+sg62
+Nsg63
+Nsg64
+g1851
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1866
+tp1867
+Rp1868
+(dp1869
+g22
+(lp1870
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp1871
+Rp1872
+(dp1873
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp1874
+tp1875
+Rp1876
+sbsVsigningkey
+p1877
+g0
+(g47
+g2
+Ntp1878
+Rp1879
+(dp1880
+g51
+g1877
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I204
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1881
+g1879
+atp1882
+Rp1883
+sg62
+Nsg63
+Nsg64
+g1877
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1884
+tp1885
+Rp1886
+(dp1887
+g22
+(lp1888
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp1889
+Rp1890
+(dp1891
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp1892
+tp1893
+Rp1894
+sbsVqueue_name
+p1895
+g0
+(g47
+g2
+Ntp1896
+Rp1897
+(dp1898
+g51
+g1895
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I197
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1899
+g1897
+atp1900
+Rp1901
+sg62
+Nsg63
+Nsg64
+g1895
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1902
+tp1903
+Rp1904
+(dp1905
+g22
+(lp1906
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp1907
+Rp1908
+(dp1909
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp1910
+tp1911
+Rp1912
+sbsVnotautomatic
+p1913
+g0
+(g47
+g2
+Ntp1914
+Rp1915
+(dp1916
+g51
+g1913
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1917
+Rp1918
+(dp1919
+g97
+g1915
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1920
+Rp1921
+(dp1922
+g104
+Vfalse
+p1923
+sg106
+Nsg107
+Nsg108
+(dp1924
+sbsbsg54
+I208
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1925
+g1915
+atp1926
+Rp1927
+sg62
+Nsg63
+Nsg64
+g1913
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1928
+tp1929
+Rp1930
+(dp1931
+g22
+(lp1932
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp1933
+Rp1934
+(dp1935
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp1936
+tp1937
+Rp1938
+sbsVmodified
+p1939
+g0
+(g47
+g2
+Ntp1940
+Rp1941
+(dp1942
+g51
+g1939
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1943
+Rp1944
+(dp1945
+g97
+g1941
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1946
+Rp1947
+(dp1948
+g104
+Vnow()
+p1949
+sg106
+Nsg107
+Nsg108
+(dp1950
+sbsbsg54
+I207
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1951
+g1941
+atp1952
+Rp1953
+sg62
+Nsg63
+Nsg64
+g1939
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1954
+tp1955
+Rp1956
+(dp1957
+g22
+(lp1958
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp1959
+Rp1960
+(dp1961
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp1962
+tp1963
+Rp1964
+sbsVlabel
+p1965
+g0
+(g47
+g2
+Ntp1966
+Rp1967
+(dp1968
+g51
+g1965
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I202
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1969
+g1967
+atp1970
+Rp1971
+sg62
+Nsg63
+Nsg64
+g1965
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1972
+tp1973
+Rp1974
+(dp1975
+g22
+(lp1976
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp1977
+Rp1978
+(dp1979
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp1980
+tp1981
+Rp1982
+sbsVcopy_files
+p1983
+g0
+(g47
+g2
+Ntp1984
+Rp1985
+(dp1986
+g51
+g1983
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp1987
+Rp1988
+(dp1989
+g97
+g1985
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp1990
+Rp1991
+(dp1992
+g104
+Vfalse
+p1993
+sg106
+Nsg107
+Nsg108
+(dp1994
+sbsbsg54
+I199
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp1995
+g1985
+atp1996
+Rp1997
+sg62
+Nsg63
+Nsg64
+g1983
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp1998
+tp1999
+Rp2000
+(dp2001
+g22
+(lp2002
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp2003
+Rp2004
+(dp2005
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp2006
+tp2007
+Rp2008
+sbsVreleasedescription
+p2009
+g0
+(g47
+g2
+Ntp2010
+Rp2011
+(dp2012
+g51
+g2009
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I203
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2013
+g2011
+atp2014
+Rp2015
+sg62
+Nsg63
+Nsg64
+g2009
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2016
+tp2017
+Rp2018
+(dp2019
+g22
+(lp2020
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp2021
+Rp2022
+(dp2023
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp2024
+tp2025
+Rp2026
+sbsVpath
+p2027
+g0
+(g47
+g2
+Ntp2028
+Rp2029
+(dp2030
+g51
+g2027
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I198
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2031
+g2029
+atp2032
+Rp2033
+sg62
+Nsg63
+Nsg64
+g2027
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2034
+tp2035
+Rp2036
+(dp2037
+g22
+(lp2038
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp2039
+Rp2040
+(dp2041
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp2042
+tp2043
+Rp2044
+sbsVid
+p2045
+g0
+(g47
+g2
+Ntp2046
+Rp2047
+(dp2048
+g51
+g2045
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp2049
+Rp2050
+(dp2051
+g97
+g2047
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp2052
+Rp2053
+(dp2054
+g104
+Vnextval('build_queue_id_seq'::regclass)
+p2055
+sg106
+Nsg107
+Nsg108
+(dp2056
+sbsbsg54
+I196
+sg55
+g1789
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp2057
+g2047
+atp2058
+Rp2059
+sg62
+Nsg63
+Nsg64
+g2045
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp2060
+tp2061
+Rp2062
+(dp2063
+g22
+(lp2064
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2065
+Rp2066
+sg85
+g28
+((lp2067
+tp2068
+Rp2069
+sbsVstay_of_execution
+p2070
+g0
+(g47
+g2
+Ntp2071
+Rp2072
+(dp2073
+g51
+g2070
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp2074
+Rp2075
+(dp2076
+g97
+g2072
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp2077
+Rp2078
+(dp2079
+g104
+V86400
+p2080
+sg106
+Nsg107
+Nsg108
+(dp2081
+sbsbsg54
+I205
+sg55
+g1789
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2082
+g2072
+atp2083
+Rp2084
+sg62
+Nsg63
+Nsg64
+g2070
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2085
+tp2086
+Rp2087
+(dp2088
+g22
+(lp2089
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2090
+Rp2091
+sg85
+g28
+((lp2092
+tp2093
+Rp2094
+sbstp2095
+Rp2096
+(dp2097
+g22
+(lp2098
+g2045
+ag1895
+ag2027
+ag1983
+ag1825
+ag1807
+ag1965
+ag2009
+ag1877
+ag2070
+ag1851
+ag1939
+ag1913
+asbsbsg64
+g1787
+sg183
+g0
+(g184
+g2
+Ntp2099
+Rp2100
+(dp2101
+g188
+(lp2102
+g2047
+asg64
+Vbuild_queue_pkey
+p2103
+sg191
+g1789
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp2104
+Rp2105
+(dp2106
+g42
+g0
+(g43
+g44
+(dp2107
+g2045
+g2047
+stp2108
+Rp2109
+(dp2110
+g22
+(lp2111
+g2045
+asbsbsbsg204
+g4
+sg205
+g28
+((lp2112
+g0
+(g207
+g2
+Ntp2113
+Rp2114
+(dp2115
+g55
+g1789
+sg56
+I01
+sg64
+S'build_queue_queue_name_key'
+p2116
+sg195
+g0
+(g38
+g2
+Ntp2117
+Rp2118
+(dp2119
+g42
+g0
+(g43
+g44
+(dp2120
+g1895
+g1897
+stp2121
+Rp2122
+(dp2123
+g22
+(lp2124
+g1895
+asbsbsg220
+(dp2125
+sbatp2126
+Rp2127
+sg220
+(dp2128
+sg225
+g1787
+sg85
+g28
+((lp2129
+g2100
+ag0
+(g1131
+g2
+Ntp2130
+Rp2131
+(dp2132
+g64
+Nsg191
+g1789
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp2133
+Rp2134
+(dp2135
+g1139
+g2004
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp2136
+Rp2137
+(dp2138
+g1146
+g1147
+sg1148
+(dp2139
+sg1150
+g0
+(g1151
+g2
+Ntp2140
+Rp2141
+(dp2142
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp2143
+Rp2144
+(dp2145
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp2146
+g0
+(g1168
+g2
+Ntp2147
+Rp2148
+(dp2149
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25649040 copy_files)s
+p2150
+tp2151
+Rp2152
+sg1178
+I00
+sg76
+g1157
+sg1179
+g1983
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp2153
+Rp2154
+(dp2155
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25648976 copy_files)s
+p2156
+tp2157
+Rp2158
+sg1178
+I00
+sg76
+g1157
+sg1179
+g1983
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g1985
+sbsbag0
+(g1131
+g2
+Ntp2159
+Rp2160
+(dp2161
+g64
+Nsg191
+g1789
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp2162
+Rp2163
+(dp2164
+g1139
+g1934
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp2165
+Rp2166
+(dp2167
+g1146
+g1147
+sg1148
+(dp2168
+sg1150
+g0
+(g1151
+g2
+Ntp2169
+Rp2170
+(dp2171
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp2172
+Rp2173
+(dp2174
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp2175
+g0
+(g1168
+g2
+Ntp2176
+Rp2177
+(dp2178
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24727056 notautomatic)s
+p2179
+tp2180
+Rp2181
+sg1178
+I00
+sg76
+g1157
+sg1179
+g1913
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp2182
+Rp2183
+(dp2184
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24727440 notautomatic)s
+p2185
+tp2186
+Rp2187
+sg1178
+I00
+sg76
+g1157
+sg1179
+g1913
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g1915
+sbsbag0
+(g1131
+g2
+Ntp2188
+Rp2189
+(dp2190
+g64
+Nsg191
+g1789
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp2191
+Rp2192
+(dp2193
+g1139
+g1846
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp2194
+Rp2195
+(dp2196
+g1146
+g1147
+sg1148
+(dp2197
+sg1150
+g0
+(g1151
+g2
+Ntp2198
+Rp2199
+(dp2200
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp2201
+Rp2202
+(dp2203
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp2204
+g0
+(g1168
+g2
+Ntp2205
+Rp2206
+(dp2207
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25647568 generate_metadata)s
+p2208
+tp2209
+Rp2210
+sg1178
+I00
+sg76
+g1157
+sg1179
+g1825
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp2211
+Rp2212
+(dp2213
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25647632 generate_metadata)s
+p2214
+tp2215
+Rp2216
+sg1178
+I00
+sg76
+g1157
+sg1179
+g1825
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g1827
+sbsbatp2217
+Rp2218
+sg229
+I01
+sg230
+NsbsS'archive'
+p2219
+g0
+(g9
+g2
+Ntp2220
+Rp2221
+(dp2222
+g13
+S'archive'
+p2223
+sg15
+Nsg16
+g17
+((lp2224
+tp2225
+Rp2226
+(dp2227
+g22
+(lp2228
+sbsg24
+(lp2229
+sg26
+Nsg27
+g28
+((lp2230
+tp2231
+Rp2232
+sg32
+g33
+(g34
+tp2233
+Rp2234
+sg37
+g0
+(g38
+g2
+Ntp2235
+Rp2236
+(dp2237
+g42
+g0
+(g43
+g44
+(dp2238
+Vdescription
+p2239
+g0
+(g47
+g2
+Ntp2240
+Rp2241
+(dp2242
+g51
+g2239
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I55
+sg55
+g2221
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2243
+g2241
+atp2244
+Rp2245
+sg62
+Nsg63
+Nsg64
+g2239
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2246
+tp2247
+Rp2248
+(dp2249
+g22
+(lp2250
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp2251
+Rp2252
+(dp2253
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp2254
+tp2255
+Rp2256
+sbsVname
+p2257
+g0
+(g47
+g2
+Ntp2258
+Rp2259
+(dp2260
+g51
+g2257
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I53
+sg55
+g2221
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2261
+g2259
+atp2262
+Rp2263
+sg62
+Nsg63
+Nsg64
+g2257
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2264
+tp2265
+Rp2266
+(dp2267
+g22
+(lp2268
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp2269
+Rp2270
+(dp2271
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp2272
+tp2273
+Rp2274
+sbsVcreated
+p2275
+g0
+(g47
+g2
+Ntp2276
+Rp2277
+(dp2278
+g51
+g2275
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp2279
+Rp2280
+(dp2281
+g97
+g2277
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp2282
+Rp2283
+(dp2284
+g104
+Vnow()
+p2285
+sg106
+Nsg107
+Nsg108
+(dp2286
+sbsbsg54
+I56
+sg55
+g2221
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2287
+g2277
+atp2288
+Rp2289
+sg62
+Nsg63
+Nsg64
+g2275
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2290
+tp2291
+Rp2292
+(dp2293
+g22
+(lp2294
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp2295
+Rp2296
+(dp2297
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp2298
+tp2299
+Rp2300
+sbsVorigin_server
+p2301
+g0
+(g47
+g2
+Ntp2302
+Rp2303
+(dp2304
+g51
+g2301
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I54
+sg55
+g2221
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2305
+g2303
+atp2306
+Rp2307
+sg62
+Nsg63
+Nsg64
+g2301
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2308
+tp2309
+Rp2310
+(dp2311
+g22
+(lp2312
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp2313
+Rp2314
+(dp2315
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp2316
+tp2317
+Rp2318
+sbsVmodified
+p2319
+g0
+(g47
+g2
+Ntp2320
+Rp2321
+(dp2322
+g51
+g2319
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp2323
+Rp2324
+(dp2325
+g97
+g2321
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp2326
+Rp2327
+(dp2328
+g104
+Vnow()
+p2329
+sg106
+Nsg107
+Nsg108
+(dp2330
+sbsbsg54
+I57
+sg55
+g2221
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2331
+g2321
+atp2332
+Rp2333
+sg62
+Nsg63
+Nsg64
+g2319
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2334
+tp2335
+Rp2336
+(dp2337
+g22
+(lp2338
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp2339
+Rp2340
+(dp2341
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp2342
+tp2343
+Rp2344
+sbsVid
+p2345
+g0
+(g47
+g2
+Ntp2346
+Rp2347
+(dp2348
+g51
+g2345
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp2349
+Rp2350
+(dp2351
+g97
+g2347
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp2352
+Rp2353
+(dp2354
+g104
+Vnextval('archive_id_seq'::regclass)
+p2355
+sg106
+Nsg107
+Nsg108
+(dp2356
+sbsbsg54
+I52
+sg55
+g2221
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp2357
+g2347
+atp2358
+Rp2359
+sg62
+Nsg63
+Nsg64
+g2345
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp2360
+tp2361
+Rp2362
+(dp2363
+g22
+(lp2364
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2365
+Rp2366
+sg85
+g28
+((lp2367
+tp2368
+Rp2369
+sbstp2370
+Rp2371
+(dp2372
+g22
+(lp2373
+g2345
+ag2257
+ag2301
+ag2239
+ag2275
+ag2319
+asbsbsg64
+g2219
+sg183
+g0
+(g184
+g2
+Ntp2374
+Rp2375
+(dp2376
+g188
+(lp2377
+g2347
+asg64
+Varchive_pkey
+p2378
+sg191
+g2221
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp2379
+Rp2380
+(dp2381
+g42
+g0
+(g43
+g44
+(dp2382
+g2345
+g2347
+stp2383
+Rp2384
+(dp2385
+g22
+(lp2386
+g2345
+asbsbsbsg204
+g4
+sg205
+g28
+((lp2387
+g0
+(g207
+g2
+Ntp2388
+Rp2389
+(dp2390
+g55
+g2221
+sg56
+I01
+sg64
+S'archive_name_key'
+p2391
+sg195
+g0
+(g38
+g2
+Ntp2392
+Rp2393
+(dp2394
+g42
+g0
+(g43
+g44
+(dp2395
+g2257
+g2259
+stp2396
+Rp2397
+(dp2398
+g22
+(lp2399
+g2257
+asbsbsg220
+(dp2400
+sbatp2401
+Rp2402
+sg220
+(dp2403
+sg225
+g2219
+sg85
+g28
+((lp2404
+g2375
+atp2405
+Rp2406
+sg229
+I01
+sg230
+NsbsVchanges_pending_source
+p2407
+g0
+(g9
+g2
+Ntp2408
+Rp2409
+(dp2410
+g13
+S'changes_pending_source'
+p2411
+sg15
+Nsg16
+g17
+((lp2412
+g0
+(g558
+g2
+Ntp2413
+Rp2414
+(dp2415
+g191
+g0
+(g47
+g2
+Ntp2416
+Rp2417
+(dp2418
+g51
+Vchange_id
+p2419
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I267
+sg55
+g2409
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2420
+g2417
+atp2421
+Rp2422
+sg62
+Nsg63
+Nsg64
+g2419
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2423
+g2414
+atp2424
+Rp2425
+(dp2426
+g22
+(lp2427
+g2414
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2428
+Rp2429
+sg85
+g28
+((lp2430
+tp2431
+Rp2432
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_source_change_id_fkey
+p2433
+sg578
+Vchanges.id
+p2434
+sg580
+g0
+(g581
+g2
+Ntp2435
+Rp2436
+(dp2437
+g68
+Nsg576
+Nsg64
+g2433
+sg191
+g2409
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp2438
+Vchange_id
+p2439
+g2414
+stp2440
+Rp2441
+(dp2442
+g22
+(lp2443
+g2439
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp2444
+Rp2445
+(dp2446
+g191
+g0
+(g47
+g2
+Ntp2447
+Rp2448
+(dp2449
+g51
+Vchangedby_id
+p2450
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I271
+sg55
+g2409
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2451
+g2448
+atp2452
+Rp2453
+sg62
+Nsg63
+Nsg64
+g2450
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2454
+g2445
+atp2455
+Rp2456
+(dp2457
+g22
+(lp2458
+g2445
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2459
+Rp2460
+sg85
+g28
+((lp2461
+tp2462
+Rp2463
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_source_changedby_id_fkey
+p2464
+sg578
+Vmaintainer.id
+p2465
+sg580
+g0
+(g581
+g2
+Ntp2466
+Rp2467
+(dp2468
+g68
+Nsg576
+Nsg64
+g2464
+sg191
+g2409
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp2469
+Vchangedby_id
+p2470
+g2445
+stp2471
+Rp2472
+(dp2473
+g22
+(lp2474
+g2470
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp2475
+Rp2476
+(dp2477
+g191
+g0
+(g47
+g2
+Ntp2478
+Rp2479
+(dp2480
+g51
+Vmaintainer_id
+p2481
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I270
+sg55
+g2409
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2482
+g2479
+atp2483
+Rp2484
+sg62
+Nsg63
+Nsg64
+g2481
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2485
+g2476
+atp2486
+Rp2487
+(dp2488
+g22
+(lp2489
+g2476
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2490
+Rp2491
+sg85
+g28
+((lp2492
+tp2493
+Rp2494
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_source_maintainer_id_fkey
+p2495
+sg578
+Vmaintainer.id
+p2496
+sg580
+g0
+(g581
+g2
+Ntp2497
+Rp2498
+(dp2499
+g68
+Nsg576
+Nsg64
+g2495
+sg191
+g2409
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp2500
+Vmaintainer_id
+p2501
+g2476
+stp2502
+Rp2503
+(dp2504
+g22
+(lp2505
+g2501
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp2506
+Rp2507
+(dp2508
+g191
+g0
+(g47
+g2
+Ntp2509
+Rp2510
+(dp2511
+g51
+Vsig_fpr
+p2512
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I272
+sg55
+g2409
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2513
+g2510
+atp2514
+Rp2515
+sg62
+Nsg63
+Nsg64
+g2512
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2516
+g2507
+atp2517
+Rp2518
+(dp2519
+g22
+(lp2520
+g2507
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2521
+Rp2522
+sg85
+g28
+((lp2523
+tp2524
+Rp2525
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_source_sig_fpr_fkey
+p2526
+sg578
+Vfingerprint.id
+p2527
+sg580
+g0
+(g581
+g2
+Ntp2528
+Rp2529
+(dp2530
+g68
+Nsg576
+Nsg64
+g2526
+sg191
+g2409
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp2531
+Vsig_fpr
+p2532
+g2507
+stp2533
+Rp2534
+(dp2535
+g22
+(lp2536
+g2532
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp2537
+Rp2538
+(dp2539
+g22
+(lp2540
+g2414
+ag2445
+ag2476
+ag2507
+asbsg24
+(lp2541
+sg26
+Nsg27
+g28
+((lp2542
+tp2543
+Rp2544
+sg32
+g33
+(g34
+tp2545
+Rp2546
+sg37
+g0
+(g38
+g2
+Ntp2547
+Rp2548
+(dp2549
+g42
+g0
+(g43
+g44
+(dp2550
+Vcreated
+p2551
+g0
+(g47
+g2
+Ntp2552
+Rp2553
+(dp2554
+g51
+g2551
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp2555
+Rp2556
+(dp2557
+g97
+g2553
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp2558
+Rp2559
+(dp2560
+g104
+Vnow()
+p2561
+sg106
+Nsg107
+Nsg108
+(dp2562
+sbsbsg54
+I274
+sg55
+g2409
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2563
+g2553
+atp2564
+Rp2565
+sg62
+Nsg63
+Nsg64
+g2551
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2566
+tp2567
+Rp2568
+(dp2569
+g22
+(lp2570
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp2571
+Rp2572
+(dp2573
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp2574
+tp2575
+Rp2576
+sbsg2419
+g2417
+sg2481
+g2479
+sg2512
+g2510
+sVmodified
+p2577
+g0
+(g47
+g2
+Ntp2578
+Rp2579
+(dp2580
+g51
+g2577
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp2581
+Rp2582
+(dp2583
+g97
+g2579
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp2584
+Rp2585
+(dp2586
+g104
+Vnow()
+p2587
+sg106
+Nsg107
+Nsg108
+(dp2588
+sbsbsg54
+I275
+sg55
+g2409
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2589
+g2579
+atp2590
+Rp2591
+sg62
+Nsg63
+Nsg64
+g2577
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2592
+tp2593
+Rp2594
+(dp2595
+g22
+(lp2596
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp2597
+Rp2598
+(dp2599
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp2600
+tp2601
+Rp2602
+sbsVsource
+p2603
+g0
+(g47
+g2
+Ntp2604
+Rp2605
+(dp2606
+g51
+g2603
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I268
+sg55
+g2409
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2607
+g2605
+atp2608
+Rp2609
+sg62
+Nsg63
+Nsg64
+g2603
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2610
+tp2611
+Rp2612
+(dp2613
+g22
+(lp2614
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp2615
+Rp2616
+(dp2617
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp2618
+tp2619
+Rp2620
+sbsVversion
+p2621
+g0
+(g47
+g2
+Ntp2622
+Rp2623
+(dp2624
+g51
+g2621
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I269
+sg55
+g2409
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2625
+g2623
+atp2626
+Rp2627
+sg62
+Nsg63
+Nsg64
+g2621
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2628
+tp2629
+Rp2630
+(dp2631
+g22
+(lp2632
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp2633
+Rp2634
+sg85
+g28
+((lp2635
+tp2636
+Rp2637
+sbsg2450
+g2448
+sVdm_upload_allowed
+p2638
+g0
+(g47
+g2
+Ntp2639
+Rp2640
+(dp2641
+g51
+g2638
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp2642
+Rp2643
+(dp2644
+g97
+g2640
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp2645
+Rp2646
+(dp2647
+g104
+Vfalse
+p2648
+sg106
+Nsg107
+Nsg108
+(dp2649
+sbsbsg54
+I273
+sg55
+g2409
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2650
+g2640
+atp2651
+Rp2652
+sg62
+Nsg63
+Nsg64
+g2638
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2653
+tp2654
+Rp2655
+(dp2656
+g22
+(lp2657
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp2658
+Rp2659
+(dp2660
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp2661
+tp2662
+Rp2663
+sbsVid
+p2664
+g0
+(g47
+g2
+Ntp2665
+Rp2666
+(dp2667
+g51
+g2664
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp2668
+Rp2669
+(dp2670
+g97
+g2666
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp2671
+Rp2672
+(dp2673
+g104
+Vnextval('changes_pending_source_id_seq'::regclass)
+p2674
+sg106
+Nsg107
+Nsg108
+(dp2675
+sbsbsg54
+I266
+sg55
+g2409
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp2676
+g2666
+atp2677
+Rp2678
+sg62
+Nsg63
+Nsg64
+g2664
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp2679
+tp2680
+Rp2681
+(dp2682
+g22
+(lp2683
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2684
+Rp2685
+sg85
+g28
+((lp2686
+tp2687
+Rp2688
+sbstp2689
+Rp2690
+(dp2691
+g22
+(lp2692
+g2664
+ag2419
+ag2603
+ag2621
+ag2481
+ag2450
+ag2512
+ag2638
+ag2551
+ag2577
+asbsbsg64
+g2407
+sg183
+g0
+(g184
+g2
+Ntp2693
+Rp2694
+(dp2695
+g188
+(lp2696
+g2666
+asg64
+Vchanges_pending_source_pkey
+p2697
+sg191
+g2409
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp2698
+Rp2699
+(dp2700
+g42
+g0
+(g43
+g44
+(dp2701
+g2664
+g2666
+stp2702
+Rp2703
+(dp2704
+g22
+(lp2705
+g2664
+asbsbsbsg204
+g4
+sg205
+g28
+((lp2706
+tp2707
+Rp2708
+sg220
+(dp2709
+sg225
+g2407
+sg85
+g28
+((lp2710
+g2529
+ag0
+(g1131
+g2
+Ntp2711
+Rp2712
+(dp2713
+g64
+Nsg191
+g2409
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp2714
+Rp2715
+(dp2716
+g1139
+g2659
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp2717
+Rp2718
+(dp2719
+g1146
+g1147
+sg1148
+(dp2720
+sg1150
+g0
+(g1151
+g2
+Ntp2721
+Rp2722
+(dp2723
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp2724
+Rp2725
+(dp2726
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp2727
+g0
+(g1168
+g2
+Ntp2728
+Rp2729
+(dp2730
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25749904 dm_upload_allowed)s
+p2731
+tp2732
+Rp2733
+sg1178
+I00
+sg76
+g1157
+sg1179
+g2638
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp2734
+Rp2735
+(dp2736
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25749264 dm_upload_allowed)s
+p2737
+tp2738
+Rp2739
+sg1178
+I00
+sg76
+g1157
+sg1179
+g2638
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g2640
+sbsbag2498
+ag2694
+ag2467
+ag2436
+atp2740
+Rp2741
+sg229
+I01
+sg230
+NsbsS'bin_associations_binaries'
+p2742
+g0
+(g9
+g2
+Ntp2743
+Rp2744
+(dp2745
+g15
+Nsg16
+g17
+((lp2746
+tp2747
+Rp2748
+(dp2749
+g22
+(lp2750
+sbsg24
+(lp2751
+sg26
+Nsg27
+g28
+((lp2752
+tp2753
+Rp2754
+sg32
+g33
+(g34
+tp2755
+Rp2756
+sg37
+g0
+(g38
+g2
+Ntp2757
+Rp2758
+(dp2759
+g42
+g0
+(g43
+g44
+(dp2760
+Vbin
+p2761
+g0
+(g47
+g2
+Ntp2762
+Rp2763
+(dp2764
+g51
+g2761
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I398
+sg55
+g2744
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g2761
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2765
+tp2766
+Rp2767
+(dp2768
+g22
+(lp2769
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2770
+Rp2771
+sg85
+g28
+((lp2772
+tp2773
+Rp2774
+sbsVsource
+p2775
+g0
+(g47
+g2
+Ntp2776
+Rp2777
+(dp2778
+g51
+g2775
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I403
+sg55
+g2744
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g2775
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2779
+tp2780
+Rp2781
+(dp2782
+g22
+(lp2783
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2784
+Rp2785
+sg85
+g28
+((lp2786
+tp2787
+Rp2788
+sbsVversion
+p2789
+g0
+(g47
+g2
+Ntp2790
+Rp2791
+(dp2792
+g51
+g2789
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I400
+sg55
+g2744
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g2789
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2793
+tp2794
+Rp2795
+(dp2796
+g22
+(lp2797
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp2798
+Rp2799
+sg85
+g28
+((lp2800
+tp2801
+Rp2802
+sbsVarchitecture
+p2803
+g0
+(g47
+g2
+Ntp2804
+Rp2805
+(dp2806
+g51
+g2803
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I402
+sg55
+g2744
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g2803
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2807
+tp2808
+Rp2809
+(dp2810
+g22
+(lp2811
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2812
+Rp2813
+sg85
+g28
+((lp2814
+tp2815
+Rp2816
+sbsVpackage
+p2817
+g0
+(g47
+g2
+Ntp2818
+Rp2819
+(dp2820
+g51
+g2817
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I399
+sg55
+g2744
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g2817
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2821
+tp2822
+Rp2823
+(dp2824
+g22
+(lp2825
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp2826
+Rp2827
+(dp2828
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp2829
+tp2830
+Rp2831
+sbsVsuite
+p2832
+g0
+(g47
+g2
+Ntp2833
+Rp2834
+(dp2835
+g51
+g2832
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I401
+sg55
+g2744
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g2832
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2836
+tp2837
+Rp2838
+(dp2839
+g22
+(lp2840
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2841
+Rp2842
+sg85
+g28
+((lp2843
+tp2844
+Rp2845
+sbsVid
+p2846
+g0
+(g47
+g2
+Ntp2847
+Rp2848
+(dp2849
+g51
+g2846
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I397
+sg55
+g2744
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g2846
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2850
+tp2851
+Rp2852
+(dp2853
+g22
+(lp2854
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2855
+Rp2856
+sg85
+g28
+((lp2857
+tp2858
+Rp2859
+sbstp2860
+Rp2861
+(dp2862
+g22
+(lp2863
+g2846
+ag2761
+ag2817
+ag2789
+ag2832
+ag2803
+ag2775
+asbsbsg64
+g2742
+sg183
+g0
+(g184
+g2
+Ntp2864
+Rp2865
+(dp2866
+g188
+(lp2867
+sg64
+Nsg191
+g2744
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp2868
+Rp2869
+(dp2870
+g42
+g0
+(g43
+g44
+(dp2871
+tp2872
+Rp2873
+(dp2874
+g22
+(lp2875
+sbsbsbsg204
+g4
+sg205
+g28
+((lp2876
+tp2877
+Rp2878
+sg220
+(dp2879
+sg225
+g2742
+sg85
+g28
+((lp2880
+g2865
+atp2881
+Rp2882
+sg229
+I01
+sg230
+NsbsS'dsc_files'
+p2883
+g0
+(g9
+g2
+Ntp2884
+Rp2885
+(dp2886
+g13
+S'dsc_files'
+p2887
+sg15
+Nsg16
+g17
+((lp2888
+g0
+(g558
+g2
+Ntp2889
+Rp2890
+(dp2891
+g191
+g0
+(g47
+g2
+Ntp2892
+Rp2893
+(dp2894
+g51
+Vfile
+p2895
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I290
+sg55
+g2885
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2896
+g2893
+atp2897
+Rp2898
+sg62
+Nsg63
+Nsg64
+g2895
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2899
+g2890
+atp2900
+Rp2901
+(dp2902
+g22
+(lp2903
+g2890
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2904
+Rp2905
+sg85
+g28
+((lp2906
+tp2907
+Rp2908
+sbsg193
+Nsg576
+Nsg64
+Vdsc_files_file
+p2909
+sg578
+Vfiles.id
+p2910
+sg580
+g0
+(g581
+g2
+Ntp2911
+Rp2912
+(dp2913
+g68
+Nsg576
+Nsg64
+g2909
+sg191
+g2885
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp2914
+Vfile
+p2915
+g2890
+stp2916
+Rp2917
+(dp2918
+g22
+(lp2919
+g2915
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp2920
+Rp2921
+(dp2922
+g191
+g0
+(g47
+g2
+Ntp2923
+Rp2924
+(dp2925
+g51
+Vsource
+p2926
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I289
+sg55
+g2885
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2927
+g2924
+atp2928
+Rp2929
+sg62
+Nsg63
+Nsg64
+g2926
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2930
+g2921
+atp2931
+Rp2932
+(dp2933
+g22
+(lp2934
+g2921
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp2935
+Rp2936
+sg85
+g28
+((lp2937
+tp2938
+Rp2939
+sbsg193
+Nsg576
+Nsg64
+Vdsc_files_source
+p2940
+sg578
+Vsource.id
+p2941
+sg580
+g0
+(g581
+g2
+Ntp2942
+Rp2943
+(dp2944
+g68
+Nsg576
+Nsg64
+g2940
+sg191
+g2885
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp2945
+Vsource
+p2946
+g2921
+stp2947
+Rp2948
+(dp2949
+g22
+(lp2950
+g2946
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp2951
+Rp2952
+(dp2953
+g22
+(lp2954
+g2890
+ag2921
+asbsg24
+(lp2955
+sg26
+Nsg27
+g28
+((lp2956
+tp2957
+Rp2958
+sg32
+g33
+(g34
+tp2959
+Rp2960
+sg37
+g0
+(g38
+g2
+Ntp2961
+Rp2962
+(dp2963
+g42
+g0
+(g43
+g44
+(dp2964
+g2926
+g2924
+sVcreated
+p2965
+g0
+(g47
+g2
+Ntp2966
+Rp2967
+(dp2968
+g51
+g2965
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp2969
+Rp2970
+(dp2971
+g97
+g2967
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp2972
+Rp2973
+(dp2974
+g104
+Vnow()
+p2975
+sg106
+Nsg107
+Nsg108
+(dp2976
+sbsbsg54
+I291
+sg55
+g2885
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp2977
+g2967
+atp2978
+Rp2979
+sg62
+Nsg63
+Nsg64
+g2965
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp2980
+tp2981
+Rp2982
+(dp2983
+g22
+(lp2984
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp2985
+Rp2986
+(dp2987
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp2988
+tp2989
+Rp2990
+sbsVmodified
+p2991
+g0
+(g47
+g2
+Ntp2992
+Rp2993
+(dp2994
+g51
+g2991
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp2995
+Rp2996
+(dp2997
+g97
+g2993
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp2998
+Rp2999
+(dp3000
+g104
+Vnow()
+p3001
+sg106
+Nsg107
+Nsg108
+(dp3002
+sbsbsg54
+I292
+sg55
+g2885
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3003
+g2993
+atp3004
+Rp3005
+sg62
+Nsg63
+Nsg64
+g2991
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3006
+tp3007
+Rp3008
+(dp3009
+g22
+(lp3010
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp3011
+Rp3012
+(dp3013
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp3014
+tp3015
+Rp3016
+sbsg2895
+g2893
+sVid
+p3017
+g0
+(g47
+g2
+Ntp3018
+Rp3019
+(dp3020
+g51
+g3017
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3021
+Rp3022
+(dp3023
+g97
+g3019
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3024
+Rp3025
+(dp3026
+g104
+Vnextval('dsc_files_id_seq'::regclass)
+p3027
+sg106
+Nsg107
+Nsg108
+(dp3028
+sbsbsg54
+I288
+sg55
+g2885
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp3029
+g3019
+atp3030
+Rp3031
+sg62
+Nsg63
+Nsg64
+g3017
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp3032
+tp3033
+Rp3034
+(dp3035
+g22
+(lp3036
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp3037
+Rp3038
+sg85
+g28
+((lp3039
+tp3040
+Rp3041
+sbstp3042
+Rp3043
+(dp3044
+g22
+(lp3045
+g3017
+ag2926
+ag2895
+ag2965
+ag2991
+asbsbsg64
+g2883
+sg183
+g0
+(g184
+g2
+Ntp3046
+Rp3047
+(dp3048
+g188
+(lp3049
+g3019
+asg64
+Vdsc_files_pkey
+p3050
+sg191
+g2885
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp3051
+Rp3052
+(dp3053
+g42
+g0
+(g43
+g44
+(dp3054
+g3017
+g3019
+stp3055
+Rp3056
+(dp3057
+g22
+(lp3058
+g3017
+asbsbsbsg204
+g4
+sg205
+g28
+((lp3059
+g0
+(g207
+g2
+Ntp3060
+Rp3061
+(dp3062
+g55
+g2885
+sg56
+I00
+sg64
+S'dsc_files_file'
+p3063
+sg195
+g0
+(g38
+g2
+Ntp3064
+Rp3065
+(dp3066
+g42
+g0
+(g43
+g44
+(dp3067
+g2895
+g2893
+stp3068
+Rp3069
+(dp3070
+g22
+(lp3071
+g2895
+asbsbsg220
+(dp3072
+sbag0
+(g207
+g2
+Ntp3073
+Rp3074
+(dp3075
+g55
+g2885
+sg56
+I01
+sg64
+S'dsc_files_source_key'
+p3076
+sg195
+g0
+(g38
+g2
+Ntp3077
+Rp3078
+(dp3079
+g42
+g0
+(g43
+g44
+(dp3080
+g2926
+g2924
+sg2895
+g2893
+stp3081
+Rp3082
+(dp3083
+g22
+(lp3084
+g2926
+ag2895
+asbsbsg220
+(dp3085
+sbatp3086
+Rp3087
+sg220
+(dp3088
+sg225
+g2883
+sg85
+g28
+((lp3089
+g3047
+ag2912
+ag2943
+atp3090
+Rp3091
+sg229
+I01
+sg230
+NsbsS'version_check'
+p3092
+g0
+(g9
+g2
+Ntp3093
+Rp3094
+(dp3095
+g13
+S'version_check'
+p3096
+sg15
+Nsg16
+g17
+((lp3097
+g0
+(g558
+g2
+Ntp3098
+Rp3099
+(dp3100
+g191
+g0
+(g47
+g2
+Ntp3101
+Rp3102
+(dp3103
+g54
+I377
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vreference
+p3104
+sg55
+g3094
+sS'base_columns'
+p3105
+g28
+((lp3106
+g3102
+atp3107
+Rp3108
+sg64
+g3104
+sg58
+g28
+((lp3109
+g3102
+atp3110
+Rp3111
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3112
+g3099
+atp3113
+Rp3114
+(dp3115
+g22
+(lp3116
+g3099
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp3117
+Rp3118
+sg85
+g28
+((lp3119
+tp3120
+Rp3121
+sbsg193
+Nsg576
+Nsg64
+Vversion_check_reference_fkey
+p3122
+sg578
+Vsuite.id
+p3123
+sg580
+g0
+(g581
+g2
+Ntp3124
+Rp3125
+(dp3126
+g68
+Nsg576
+Nsg64
+g3122
+sg191
+g3094
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp3127
+Vreference
+p3128
+g3099
+stp3129
+Rp3130
+(dp3131
+g22
+(lp3132
+g3128
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g0
+(g47
+g2
+Ntp3133
+Rp3134
+(dp3135
+g51
+Vid
+p3136
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3137
+Rp3138
+(dp3139
+g97
+g3134
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3140
+Rp3141
+(dp3142
+g104
+Vnextval('suite_id_seq'::regclass)
+p3143
+sg106
+Nsg107
+Nsg108
+(dp3144
+sbsbsg54
+I146
+sg55
+g0
+(g9
+g2
+Ntp3145
+Rp3146
+(dp3147
+g13
+S'suite'
+p3148
+sg15
+Nsg16
+g17
+((lp3149
+g0
+(g558
+g2
+Ntp3150
+Rp3151
+(dp3152
+g191
+g0
+(g47
+g2
+Ntp3153
+Rp3154
+(dp3155
+g51
+Vpolicy_queue_id
+p3156
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I161
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3157
+g3154
+atp3158
+Rp3159
+sg62
+Nsg63
+Nsg64
+g3156
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3160
+g3151
+atp3161
+Rp3162
+(dp3163
+g22
+(lp3164
+g3151
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp3165
+Rp3166
+sg85
+g28
+((lp3167
+tp3168
+Rp3169
+sbsg193
+Nsg576
+Nsg64
+Vsuite_policy_queue_fkey
+p3170
+sg578
+Vpolicy_queue.id
+p3171
+sg580
+g0
+(g581
+g2
+Ntp3172
+Rp3173
+(dp3174
+g68
+Nsg576
+Nsg64
+g3170
+sg191
+g3146
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp3175
+Vpolicy_queue_id
+p3176
+g3151
+stp3177
+Rp3178
+(dp3179
+g22
+(lp3180
+g3176
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp3181
+Rp3182
+(dp3183
+g22
+(lp3184
+g3151
+asbsg24
+(lp3185
+sg26
+Nsg27
+g28
+((lp3186
+tp3187
+Rp3188
+sg32
+g33
+(g34
+tp3189
+Rp3190
+sg37
+g0
+(g38
+g2
+Ntp3191
+Rp3192
+(dp3193
+g42
+g0
+(g43
+g44
+(dp3194
+Vorigin
+p3195
+g0
+(g47
+g2
+Ntp3196
+Rp3197
+(dp3198
+g51
+g3195
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I149
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3199
+g3197
+atp3200
+Rp3201
+sg62
+Nsg63
+Nsg64
+g3195
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3202
+tp3203
+Rp3204
+(dp3205
+g22
+(lp3206
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3207
+Rp3208
+(dp3209
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3210
+tp3211
+Rp3212
+sbsVdescription
+p3213
+g0
+(g47
+g2
+Ntp3214
+Rp3215
+(dp3216
+g51
+g3213
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I151
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3217
+g3215
+atp3218
+Rp3219
+sg62
+Nsg63
+Nsg64
+g3213
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3220
+tp3221
+Rp3222
+(dp3223
+g22
+(lp3224
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3225
+Rp3226
+(dp3227
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3228
+tp3229
+Rp3230
+sbsVnotautomatic
+p3231
+g0
+(g47
+g2
+Ntp3232
+Rp3233
+(dp3234
+g51
+g3231
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3235
+Rp3236
+(dp3237
+g97
+g3233
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3238
+Rp3239
+(dp3240
+g104
+Vfalse
+p3241
+sg106
+Nsg107
+Nsg108
+(dp3242
+sbsbsg54
+I158
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3243
+g3233
+atp3244
+Rp3245
+sg62
+Nsg63
+Nsg64
+g3231
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3246
+tp3247
+Rp3248
+(dp3249
+g22
+(lp3250
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp3251
+Rp3252
+(dp3253
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp3254
+tp3255
+Rp3256
+sbsg3156
+g3154
+sVuntouchable
+p3257
+g0
+(g47
+g2
+Ntp3258
+Rp3259
+(dp3260
+g51
+g3257
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3261
+Rp3262
+(dp3263
+g97
+g3259
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3264
+Rp3265
+(dp3266
+g104
+Vfalse
+p3267
+sg106
+Nsg107
+Nsg108
+(dp3268
+sbsbsg54
+I152
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3269
+g3259
+atp3270
+Rp3271
+sg62
+Nsg63
+Nsg64
+g3257
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3272
+tp3273
+Rp3274
+(dp3275
+g22
+(lp3276
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp3277
+Rp3278
+(dp3279
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp3280
+tp3281
+Rp3282
+sbsVbutautomaticupgrades
+p3283
+g0
+(g47
+g2
+Ntp3284
+Rp3285
+(dp3286
+g51
+g3283
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3287
+Rp3288
+(dp3289
+g97
+g3285
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3290
+Rp3291
+(dp3292
+g104
+Vfalse
+p3293
+sg106
+Nsg107
+Nsg108
+(dp3294
+sbsbsg54
+I165
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3295
+g3285
+atp3296
+Rp3297
+sg62
+Nsg63
+Nsg64
+g3283
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3298
+tp3299
+Rp3300
+(dp3301
+g22
+(lp3302
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp3303
+Rp3304
+(dp3305
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp3306
+tp3307
+Rp3308
+sbsVsuite_name
+p3309
+g0
+(g47
+g2
+Ntp3310
+Rp3311
+(dp3312
+g51
+g3309
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I147
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3313
+g3311
+atp3314
+Rp3315
+sg62
+Nsg63
+Nsg64
+g3309
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3316
+tp3317
+Rp3318
+(dp3319
+g22
+(lp3320
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3321
+Rp3322
+(dp3323
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3324
+tp3325
+Rp3326
+sbsg3136
+g3134
+sVsigningkeys
+p3327
+g0
+(g47
+g2
+Ntp3328
+Rp3329
+(dp3330
+g51
+g3327
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I166
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3331
+g3329
+atp3332
+Rp3333
+sg62
+Nsg63
+Nsg64
+g3327
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3334
+tp3335
+Rp3336
+(dp3337
+g22
+(lp3338
+sbsg75
+Nsg76
+g0
+(csqlalchemy.dialects.postgresql.base
+ARRAY
+p3339
+g2
+Ntp3340
+Rp3341
+(dp3342
+S'item_type'
+p3343
+g0
+(g77
+g2
+Ntp3344
+Rp3345
+(dp3346
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsS'mutable'
+p3347
+I01
+sbsg85
+g28
+((lp3348
+tp3349
+Rp3350
+sbsVoverridesuite
+p3351
+g0
+(g47
+g2
+Ntp3352
+Rp3353
+(dp3354
+g51
+g3351
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I160
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3355
+g3353
+atp3356
+Rp3357
+sg62
+Nsg63
+Nsg64
+g3351
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3358
+tp3359
+Rp3360
+(dp3361
+g22
+(lp3362
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3363
+Rp3364
+(dp3365
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3366
+tp3367
+Rp3368
+sbsVcreated
+p3369
+g0
+(g47
+g2
+Ntp3370
+Rp3371
+(dp3372
+g51
+g3369
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3373
+Rp3374
+(dp3375
+g97
+g3371
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3376
+Rp3377
+(dp3378
+g104
+Vnow()
+p3379
+sg106
+Nsg107
+Nsg108
+(dp3380
+sbsbsg54
+I162
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3381
+g3371
+atp3382
+Rp3383
+sg62
+Nsg63
+Nsg64
+g3369
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3384
+tp3385
+Rp3386
+(dp3387
+g22
+(lp3388
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp3389
+Rp3390
+(dp3391
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp3392
+tp3393
+Rp3394
+sbsVvalidtime
+p3395
+g0
+(g47
+g2
+Ntp3396
+Rp3397
+(dp3398
+g51
+g3395
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3399
+Rp3400
+(dp3401
+g97
+g3397
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3402
+Rp3403
+(dp3404
+g104
+V604800
+p3405
+sg106
+Nsg107
+Nsg108
+(dp3406
+sbsbsg54
+I156
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3407
+g3397
+atp3408
+Rp3409
+sg62
+Nsg63
+Nsg64
+g3395
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3410
+tp3411
+Rp3412
+(dp3413
+g22
+(lp3414
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp3415
+Rp3416
+sg85
+g28
+((lp3417
+tp3418
+Rp3419
+sbsVchangelog
+p3420
+g0
+(g47
+g2
+Ntp3421
+Rp3422
+(dp3423
+g51
+g3420
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I164
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3424
+g3422
+atp3425
+Rp3426
+sg62
+Nsg63
+Nsg64
+g3420
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3427
+tp3428
+Rp3429
+(dp3430
+g22
+(lp3431
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3432
+Rp3433
+(dp3434
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3435
+tp3436
+Rp3437
+sbsVmodified
+p3438
+g0
+(g47
+g2
+Ntp3439
+Rp3440
+(dp3441
+g51
+g3438
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3442
+Rp3443
+(dp3444
+g97
+g3440
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3445
+Rp3446
+(dp3447
+g104
+Vnow()
+p3448
+sg106
+Nsg107
+Nsg108
+(dp3449
+sbsbsg54
+I163
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3450
+g3440
+atp3451
+Rp3452
+sg62
+Nsg63
+Nsg64
+g3438
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3453
+tp3454
+Rp3455
+(dp3456
+g22
+(lp3457
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp3458
+Rp3459
+(dp3460
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp3461
+tp3462
+Rp3463
+sbsVlabel
+p3464
+g0
+(g47
+g2
+Ntp3465
+Rp3466
+(dp3467
+g51
+g3464
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I150
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3468
+g3466
+atp3469
+Rp3470
+sg62
+Nsg63
+Nsg64
+g3464
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3471
+tp3472
+Rp3473
+(dp3474
+g22
+(lp3475
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3476
+Rp3477
+(dp3478
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3479
+tp3480
+Rp3481
+sbsVpriority
+p3482
+g0
+(g47
+g2
+Ntp3483
+Rp3484
+(dp3485
+g51
+g3482
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3486
+Rp3487
+(dp3488
+g97
+g3484
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3489
+Rp3490
+(dp3491
+g104
+V0
+p3492
+sg106
+Nsg107
+Nsg108
+(dp3493
+sbsbsg54
+I157
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3494
+g3484
+atp3495
+Rp3496
+sg62
+Nsg63
+Nsg64
+g3482
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3497
+tp3498
+Rp3499
+(dp3500
+g22
+(lp3501
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp3502
+Rp3503
+sg85
+g28
+((lp3504
+tp3505
+Rp3506
+sbsVoverridecodename
+p3507
+g0
+(g47
+g2
+Ntp3508
+Rp3509
+(dp3510
+g51
+g3507
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I155
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3511
+g3509
+atp3512
+Rp3513
+sg62
+Nsg63
+Nsg64
+g3507
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3514
+tp3515
+Rp3516
+(dp3517
+g22
+(lp3518
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3519
+Rp3520
+(dp3521
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3522
+tp3523
+Rp3524
+sbsVversion
+p3525
+g0
+(g47
+g2
+Ntp3526
+Rp3527
+(dp3528
+g51
+g3525
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I148
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3529
+g3527
+atp3530
+Rp3531
+sg62
+Nsg63
+Nsg64
+g3525
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3532
+tp3533
+Rp3534
+(dp3535
+g22
+(lp3536
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3537
+Rp3538
+(dp3539
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3540
+tp3541
+Rp3542
+sbsVannounce
+p3543
+g0
+(g47
+g2
+Ntp3544
+Rp3545
+(dp3546
+g51
+g3543
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3547
+Rp3548
+(dp3549
+g97
+g3545
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3550
+Rp3551
+(dp3552
+g104
+V'debian-devel-changes@lists.debian.org'::text
+p3553
+sg106
+Nsg107
+Nsg108
+(dp3554
+sbsbsg54
+I153
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3555
+g3545
+atp3556
+Rp3557
+sg62
+Nsg63
+Nsg64
+g3543
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3558
+tp3559
+Rp3560
+(dp3561
+g22
+(lp3562
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3563
+Rp3564
+(dp3565
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3566
+tp3567
+Rp3568
+sbsVcodename
+p3569
+g0
+(g47
+g2
+Ntp3570
+Rp3571
+(dp3572
+g51
+g3569
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I154
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3573
+g3571
+atp3574
+Rp3575
+sg62
+Nsg63
+Nsg64
+g3569
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3576
+tp3577
+Rp3578
+(dp3579
+g22
+(lp3580
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3581
+Rp3582
+(dp3583
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3584
+tp3585
+Rp3586
+sbsVcopychanges
+p3587
+g0
+(g47
+g2
+Ntp3588
+Rp3589
+(dp3590
+g51
+g3587
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I159
+sg55
+g3146
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp3591
+g3589
+atp3592
+Rp3593
+sg62
+Nsg63
+Nsg64
+g3587
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3594
+tp3595
+Rp3596
+(dp3597
+g22
+(lp3598
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3599
+Rp3600
+(dp3601
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3602
+tp3603
+Rp3604
+sbstp3605
+Rp3606
+(dp3607
+g22
+(lp3608
+g3136
+ag3309
+ag3525
+ag3195
+ag3464
+ag3213
+ag3257
+ag3543
+ag3569
+ag3507
+ag3395
+ag3482
+ag3231
+ag3587
+ag3351
+ag3156
+ag3369
+ag3438
+ag3420
+ag3283
+ag3327
+asbsbsg64
+Vsuite
+p3609
+sg183
+g0
+(g184
+g2
+Ntp3610
+Rp3611
+(dp3612
+g188
+(lp3613
+g3134
+asg64
+Vsuite_pkey
+p3614
+sg191
+g3146
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp3615
+Rp3616
+(dp3617
+g42
+g0
+(g43
+g44
+(dp3618
+g3136
+g3134
+stp3619
+Rp3620
+(dp3621
+g22
+(lp3622
+g3136
+asbsbsbsg204
+g4
+sg205
+g28
+((lp3623
+g0
+(g207
+g2
+Ntp3624
+Rp3625
+(dp3626
+g55
+g3146
+sg56
+I00
+sg64
+S'suite_hash'
+p3627
+sg195
+g0
+(g38
+g2
+Ntp3628
+Rp3629
+(dp3630
+g42
+g0
+(g43
+g44
+(dp3631
+g3309
+g3311
+stp3632
+Rp3633
+(dp3634
+g22
+(lp3635
+g3309
+asbsbsg220
+(dp3636
+sbatp3637
+Rp3638
+sg220
+(dp3639
+sg225
+g3609
+sg85
+g28
+((lp3640
+g3611
+ag0
+(g1131
+g2
+Ntp3641
+Rp3642
+(dp3643
+g64
+Nsg191
+g3146
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp3644
+Rp3645
+(dp3646
+g1139
+g3278
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp3647
+Rp3648
+(dp3649
+g1146
+g1147
+sg1148
+(dp3650
+sg1150
+g0
+(g1151
+g2
+Ntp3651
+Rp3652
+(dp3653
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp3654
+Rp3655
+(dp3656
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp3657
+g0
+(g1168
+g2
+Ntp3658
+Rp3659
+(dp3660
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24735248 untouchable)s
+p3661
+tp3662
+Rp3663
+sg1178
+I00
+sg76
+g1157
+sg1179
+g3257
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp3664
+Rp3665
+(dp3666
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24735312 untouchable)s
+p3667
+tp3668
+Rp3669
+sg1178
+I00
+sg76
+g1157
+sg1179
+g3257
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g3259
+sbsbag0
+(g1131
+g2
+Ntp3670
+Rp3671
+(dp3672
+g64
+Nsg191
+g3146
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp3673
+Rp3674
+(dp3675
+g1139
+g3304
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp3676
+Rp3677
+(dp3678
+g1146
+g1147
+sg1148
+(dp3679
+sg1150
+g0
+(g1151
+g2
+Ntp3680
+Rp3681
+(dp3682
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp3683
+Rp3684
+(dp3685
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp3686
+g0
+(g1168
+g2
+Ntp3687
+Rp3688
+(dp3689
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25614480 butautomaticupgrades)s
+p3690
+tp3691
+Rp3692
+sg1178
+I00
+sg76
+g1157
+sg1179
+g3283
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp3693
+Rp3694
+(dp3695
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25614544 butautomaticupgrades)s
+p3696
+tp3697
+Rp3698
+sg1178
+I00
+sg76
+g1157
+sg1179
+g3283
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g3285
+sbsbag0
+(g1131
+g2
+Ntp3699
+Rp3700
+(dp3701
+g64
+Nsg191
+g3146
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp3702
+Rp3703
+(dp3704
+g1139
+g3252
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp3705
+Rp3706
+(dp3707
+g1146
+g1147
+sg1148
+(dp3708
+sg1150
+g0
+(g1151
+g2
+Ntp3709
+Rp3710
+(dp3711
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp3712
+Rp3713
+(dp3714
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp3715
+g0
+(g1168
+g2
+Ntp3716
+Rp3717
+(dp3718
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25613200 notautomatic)s
+p3719
+tp3720
+Rp3721
+sg1178
+I00
+sg76
+g1157
+sg1179
+g3231
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp3722
+Rp3723
+(dp3724
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25613264 notautomatic)s
+p3725
+tp3726
+Rp3727
+sg1178
+I00
+sg76
+g1157
+sg1179
+g3231
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g3233
+sbsbag3173
+atp3728
+Rp3729
+sg229
+I01
+sg230
+Nsbsg56
+Nsg57
+I01
+sg58
+g28
+((lp3730
+g3134
+atp3731
+Rp3732
+sg62
+Nsg63
+Nsg64
+g3136
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp3733
+tp3734
+Rp3735
+(dp3736
+g22
+(lp3737
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp3738
+Rp3739
+sg85
+g28
+((lp3740
+tp3741
+Rp3742
+sbsg593
+I00
+sbag0
+(g558
+g2
+Ntp3743
+Rp3744
+(dp3745
+g191
+g0
+(g47
+g2
+Ntp3746
+Rp3747
+(dp3748
+g54
+I375
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vsuite
+p3749
+sg55
+g3094
+sg3105
+g28
+((lp3750
+g3747
+atp3751
+Rp3752
+sg64
+g3749
+sg58
+g28
+((lp3753
+g3747
+atp3754
+Rp3755
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3756
+g3744
+atp3757
+Rp3758
+(dp3759
+g22
+(lp3760
+g3744
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp3761
+Rp3762
+sg85
+g28
+((lp3763
+tp3764
+Rp3765
+sbsg193
+Nsg576
+Nsg64
+Vversion_check_suite_fkey
+p3766
+sg578
+Vsuite.id
+p3767
+sg580
+g0
+(g581
+g2
+Ntp3768
+Rp3769
+(dp3770
+g68
+Nsg576
+Nsg64
+g3766
+sg191
+g3094
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp3771
+Vsuite
+p3772
+g3744
+stp3773
+Rp3774
+(dp3775
+g22
+(lp3776
+g3772
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g3134
+sg593
+I00
+sbatp3777
+Rp3778
+(dp3779
+g22
+(lp3780
+g3099
+ag3744
+asbsg24
+(lp3781
+sg26
+Nsg27
+g28
+((lp3782
+tp3783
+Rp3784
+sg32
+g33
+(g34
+tp3785
+Rp3786
+sg37
+g0
+(g38
+g2
+Ntp3787
+Rp3788
+(dp3789
+g42
+g0
+(g43
+g44
+(dp3790
+g3749
+g3747
+sVcheck
+p3791
+g0
+(g47
+g2
+Ntp3792
+Rp3793
+(dp3794
+g51
+g3791
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I376
+sg55
+g3094
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp3795
+g3793
+atp3796
+Rp3797
+sg62
+Nsg63
+Nsg64
+g3791
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3798
+tp3799
+Rp3800
+(dp3801
+g22
+(lp3802
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp3803
+Rp3804
+(dp3805
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp3806
+tp3807
+Rp3808
+sbsg3104
+g3102
+stp3809
+Rp3810
+(dp3811
+g22
+(lp3812
+g3749
+ag3791
+ag3104
+asbsbsg64
+g3092
+sg183
+g0
+(g184
+g2
+Ntp3813
+Rp3814
+(dp3815
+g188
+(lp3816
+g3747
+ag3793
+ag3102
+asg64
+Vversion_check_pkey
+p3817
+sg191
+g3094
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp3818
+Rp3819
+(dp3820
+g42
+g0
+(g43
+g44
+(dp3821
+g3749
+g3747
+sg3791
+g3793
+sg3104
+g3102
+stp3822
+Rp3823
+(dp3824
+g22
+(lp3825
+g3749
+ag3791
+ag3104
+asbsbsbsg204
+g4
+sg205
+g28
+((lp3826
+tp3827
+Rp3828
+sg220
+(dp3829
+sg225
+g3092
+sg85
+g28
+((lp3830
+g3814
+ag3125
+ag3769
+atp3831
+Rp3832
+sg229
+I01
+sg230
+NsbsS'suite_architectures'
+p3833
+g0
+(g9
+g2
+Ntp3834
+Rp3835
+(dp3836
+g15
+Nsg16
+g17
+((lp3837
+g0
+(g558
+g2
+Ntp3838
+Rp3839
+(dp3840
+g191
+g0
+(g47
+g2
+Ntp3841
+Rp3842
+(dp3843
+g51
+Varchitecture
+p3844
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I356
+sg55
+g3835
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp3845
+g3842
+atp3846
+Rp3847
+sg62
+Nsg63
+Nsg64
+g3844
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3848
+g3839
+atp3849
+Rp3850
+(dp3851
+g22
+(lp3852
+g3839
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp3853
+Rp3854
+sg85
+g28
+((lp3855
+tp3856
+Rp3857
+sbsg193
+Nsg576
+Nsg64
+Vsuite_architectures_architectur
+p3858
+sg578
+Varchitecture.id
+p3859
+sg580
+g0
+(g581
+g2
+Ntp3860
+Rp3861
+(dp3862
+g68
+Nsg576
+Nsg64
+g3858
+sg191
+g3835
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp3863
+Varchitecture
+p3864
+g3839
+stp3865
+Rp3866
+(dp3867
+g22
+(lp3868
+g3864
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp3869
+Rp3870
+(dp3871
+g191
+g0
+(g47
+g2
+Ntp3872
+Rp3873
+(dp3874
+g51
+Vsuite
+p3875
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I355
+sg55
+g3835
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp3876
+g3873
+atp3877
+Rp3878
+sg62
+Nsg63
+Nsg64
+g3875
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3879
+g3870
+atp3880
+Rp3881
+(dp3882
+g22
+(lp3883
+g3870
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp3884
+Rp3885
+sg85
+g28
+((lp3886
+tp3887
+Rp3888
+sbsg193
+Nsg576
+Nsg64
+Vsuite_architectures_suite
+p3889
+sg578
+Vsuite.id
+p3890
+sg580
+g0
+(g581
+g2
+Ntp3891
+Rp3892
+(dp3893
+g68
+Nsg576
+Nsg64
+g3889
+sg191
+g3835
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp3894
+Vsuite
+p3895
+g3870
+stp3896
+Rp3897
+(dp3898
+g22
+(lp3899
+g3895
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp3900
+Rp3901
+(dp3902
+g22
+(lp3903
+g3839
+ag3870
+asbsg24
+(lp3904
+sg26
+Nsg27
+g28
+((lp3905
+tp3906
+Rp3907
+sg32
+g33
+(g34
+tp3908
+Rp3909
+sg37
+g0
+(g38
+g2
+Ntp3910
+Rp3911
+(dp3912
+g42
+g0
+(g43
+g44
+(dp3913
+g3875
+g3873
+sVcreated
+p3914
+g0
+(g47
+g2
+Ntp3915
+Rp3916
+(dp3917
+g51
+g3914
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3918
+Rp3919
+(dp3920
+g97
+g3916
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3921
+Rp3922
+(dp3923
+g104
+Vnow()
+p3924
+sg106
+Nsg107
+Nsg108
+(dp3925
+sbsbsg54
+I357
+sg55
+g3835
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g3914
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3926
+tp3927
+Rp3928
+(dp3929
+g22
+(lp3930
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp3931
+Rp3932
+(dp3933
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp3934
+tp3935
+Rp3936
+sbsg3844
+g3842
+sVmodified
+p3937
+g0
+(g47
+g2
+Ntp3938
+Rp3939
+(dp3940
+g51
+g3937
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp3941
+Rp3942
+(dp3943
+g97
+g3939
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp3944
+Rp3945
+(dp3946
+g104
+Vnow()
+p3947
+sg106
+Nsg107
+Nsg108
+(dp3948
+sbsbsg54
+I358
+sg55
+g3835
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g3937
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp3949
+tp3950
+Rp3951
+(dp3952
+g22
+(lp3953
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp3954
+Rp3955
+(dp3956
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp3957
+tp3958
+Rp3959
+sbstp3960
+Rp3961
+(dp3962
+g22
+(lp3963
+g3875
+ag3844
+ag3914
+ag3937
+asbsbsg64
+g3833
+sg183
+g0
+(g184
+g2
+Ntp3964
+Rp3965
+(dp3966
+g188
+(lp3967
+g3873
+ag3842
+asg64
+Vsuite_architectures_pkey
+p3968
+sg191
+g3835
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp3969
+Rp3970
+(dp3971
+g42
+g0
+(g43
+g44
+(dp3972
+g3875
+g3873
+sg3844
+g3842
+stp3973
+Rp3974
+(dp3975
+g22
+(lp3976
+g3875
+ag3844
+asbsbsbsg204
+g4
+sg205
+g28
+((lp3977
+g0
+(g207
+g2
+Ntp3978
+Rp3979
+(dp3980
+g55
+g3835
+sg56
+I01
+sg64
+S'suite_architectures_suite_key'
+p3981
+sg195
+g0
+(g38
+g2
+Ntp3982
+Rp3983
+(dp3984
+g42
+g0
+(g43
+g44
+(dp3985
+g3875
+g3873
+sg3844
+g3842
+stp3986
+Rp3987
+(dp3988
+g22
+(lp3989
+g3875
+ag3844
+asbsbsg220
+(dp3990
+sbatp3991
+Rp3992
+sg220
+(dp3993
+sg225
+g3833
+sg85
+g28
+((lp3994
+g3965
+ag3861
+ag3892
+atp3995
+Rp3996
+sg229
+I01
+sg230
+NsbsVbinary_acl
+p3997
+g0
+(g9
+g2
+Ntp3998
+Rp3999
+(dp4000
+g13
+S'binary_acl'
+p4001
+sg15
+Nsg16
+g17
+((lp4002
+tp4003
+Rp4004
+(dp4005
+g22
+(lp4006
+sbsg24
+(lp4007
+sg26
+Nsg27
+g28
+((lp4008
+tp4009
+Rp4010
+sg32
+g33
+(g34
+tp4011
+Rp4012
+sg37
+g0
+(g38
+g2
+Ntp4013
+Rp4014
+(dp4015
+g42
+g0
+(g43
+g44
+(dp4016
+Vaccess_level
+p4017
+g0
+(g47
+g2
+Ntp4018
+Rp4019
+(dp4020
+g51
+g4017
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I122
+sg55
+g3999
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4021
+g4019
+atp4022
+Rp4023
+sg62
+Nsg63
+Nsg64
+g4017
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4024
+tp4025
+Rp4026
+(dp4027
+g22
+(lp4028
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp4029
+Rp4030
+(dp4031
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp4032
+tp4033
+Rp4034
+sbsVcreated
+p4035
+g0
+(g47
+g2
+Ntp4036
+Rp4037
+(dp4038
+g51
+g4035
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4039
+Rp4040
+(dp4041
+g97
+g4037
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4042
+Rp4043
+(dp4044
+g104
+Vnow()
+p4045
+sg106
+Nsg107
+Nsg108
+(dp4046
+sbsbsg54
+I123
+sg55
+g3999
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4047
+g4037
+atp4048
+Rp4049
+sg62
+Nsg63
+Nsg64
+g4035
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4050
+tp4051
+Rp4052
+(dp4053
+g22
+(lp4054
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp4055
+Rp4056
+(dp4057
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp4058
+tp4059
+Rp4060
+sbsVid
+p4061
+g0
+(g47
+g2
+Ntp4062
+Rp4063
+(dp4064
+g51
+g4061
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4065
+Rp4066
+(dp4067
+g97
+g4063
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4068
+Rp4069
+(dp4070
+g104
+Vnextval('binary_acl_id_seq'::regclass)
+p4071
+sg106
+Nsg107
+Nsg108
+(dp4072
+sbsbsg54
+I121
+sg55
+g3999
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp4073
+g4063
+atp4074
+Rp4075
+sg62
+Nsg63
+Nsg64
+g4061
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp4076
+tp4077
+Rp4078
+(dp4079
+g22
+(lp4080
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4081
+Rp4082
+sg85
+g28
+((lp4083
+tp4084
+Rp4085
+sbsVmodified
+p4086
+g0
+(g47
+g2
+Ntp4087
+Rp4088
+(dp4089
+g51
+g4086
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4090
+Rp4091
+(dp4092
+g97
+g4088
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4093
+Rp4094
+(dp4095
+g104
+Vnow()
+p4096
+sg106
+Nsg107
+Nsg108
+(dp4097
+sbsbsg54
+I124
+sg55
+g3999
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4098
+g4088
+atp4099
+Rp4100
+sg62
+Nsg63
+Nsg64
+g4086
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4101
+tp4102
+Rp4103
+(dp4104
+g22
+(lp4105
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp4106
+Rp4107
+(dp4108
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp4109
+tp4110
+Rp4111
+sbstp4112
+Rp4113
+(dp4114
+g22
+(lp4115
+g4061
+ag4017
+ag4035
+ag4086
+asbsbsg64
+g3997
+sg183
+g0
+(g184
+g2
+Ntp4116
+Rp4117
+(dp4118
+g188
+(lp4119
+g4063
+asg64
+Vbinary_acl_pkey
+p4120
+sg191
+g3999
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp4121
+Rp4122
+(dp4123
+g42
+g0
+(g43
+g44
+(dp4124
+g4061
+g4063
+stp4125
+Rp4126
+(dp4127
+g22
+(lp4128
+g4061
+asbsbsbsg204
+g4
+sg205
+g28
+((lp4129
+g0
+(g207
+g2
+Ntp4130
+Rp4131
+(dp4132
+g55
+g3999
+sg56
+I01
+sg64
+S'binary_acl_access_level_key'
+p4133
+sg195
+g0
+(g38
+g2
+Ntp4134
+Rp4135
+(dp4136
+g42
+g0
+(g43
+g44
+(dp4137
+g4017
+g4019
+stp4138
+Rp4139
+(dp4140
+g22
+(lp4141
+g4017
+asbsbsg220
+(dp4142
+sbatp4143
+Rp4144
+sg220
+(dp4145
+sg225
+g3997
+sg85
+g28
+((lp4146
+g4117
+atp4147
+Rp4148
+sg229
+I01
+sg230
+NsbsVsection
+p4149
+g0
+(g9
+g2
+Ntp4150
+Rp4151
+(dp4152
+g13
+S'section'
+p4153
+sg15
+Nsg16
+g17
+((lp4154
+tp4155
+Rp4156
+(dp4157
+g22
+(lp4158
+sbsg24
+(lp4159
+sg26
+Nsg27
+g28
+((lp4160
+tp4161
+Rp4162
+sg32
+g33
+(g34
+tp4163
+Rp4164
+sg37
+g0
+(g38
+g2
+Ntp4165
+Rp4166
+(dp4167
+g42
+g0
+(g43
+g44
+(dp4168
+Vsection
+p4169
+g0
+(g47
+g2
+Ntp4170
+Rp4171
+(dp4172
+g51
+g4169
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I327
+sg55
+g4151
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4173
+g4171
+atp4174
+Rp4175
+sg62
+Nsg63
+Nsg64
+g4169
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4176
+tp4177
+Rp4178
+(dp4179
+g22
+(lp4180
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp4181
+Rp4182
+(dp4183
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp4184
+tp4185
+Rp4186
+sbsVcreated
+p4187
+g0
+(g47
+g2
+Ntp4188
+Rp4189
+(dp4190
+g51
+g4187
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4191
+Rp4192
+(dp4193
+g97
+g4189
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4194
+Rp4195
+(dp4196
+g104
+Vnow()
+p4197
+sg106
+Nsg107
+Nsg108
+(dp4198
+sbsbsg54
+I328
+sg55
+g4151
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4199
+g4189
+atp4200
+Rp4201
+sg62
+Nsg63
+Nsg64
+g4187
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4202
+tp4203
+Rp4204
+(dp4205
+g22
+(lp4206
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp4207
+Rp4208
+(dp4209
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp4210
+tp4211
+Rp4212
+sbsVid
+p4213
+g0
+(g47
+g2
+Ntp4214
+Rp4215
+(dp4216
+g51
+g4213
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4217
+Rp4218
+(dp4219
+g97
+g4215
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4220
+Rp4221
+(dp4222
+g104
+Vnextval('section_id_seq'::regclass)
+p4223
+sg106
+Nsg107
+Nsg108
+(dp4224
+sbsbsg54
+I326
+sg55
+g4151
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp4225
+g4215
+atp4226
+Rp4227
+sg62
+Nsg63
+Nsg64
+g4213
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp4228
+tp4229
+Rp4230
+(dp4231
+g22
+(lp4232
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4233
+Rp4234
+sg85
+g28
+((lp4235
+tp4236
+Rp4237
+sbsVmodified
+p4238
+g0
+(g47
+g2
+Ntp4239
+Rp4240
+(dp4241
+g51
+g4238
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4242
+Rp4243
+(dp4244
+g97
+g4240
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4245
+Rp4246
+(dp4247
+g104
+Vnow()
+p4248
+sg106
+Nsg107
+Nsg108
+(dp4249
+sbsbsg54
+I329
+sg55
+g4151
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4250
+g4240
+atp4251
+Rp4252
+sg62
+Nsg63
+Nsg64
+g4238
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4253
+tp4254
+Rp4255
+(dp4256
+g22
+(lp4257
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp4258
+Rp4259
+(dp4260
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp4261
+tp4262
+Rp4263
+sbstp4264
+Rp4265
+(dp4266
+g22
+(lp4267
+g4213
+ag4169
+ag4187
+ag4238
+asbsbsg64
+g4149
+sg183
+g0
+(g184
+g2
+Ntp4268
+Rp4269
+(dp4270
+g188
+(lp4271
+g4215
+asg64
+Vsection_pkey
+p4272
+sg191
+g4151
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp4273
+Rp4274
+(dp4275
+g42
+g0
+(g43
+g44
+(dp4276
+g4213
+g4215
+stp4277
+Rp4278
+(dp4279
+g22
+(lp4280
+g4213
+asbsbsbsg204
+g4
+sg205
+g28
+((lp4281
+g0
+(g207
+g2
+Ntp4282
+Rp4283
+(dp4284
+g55
+g4151
+sg56
+I01
+sg64
+S'section_section_key'
+p4285
+sg195
+g0
+(g38
+g2
+Ntp4286
+Rp4287
+(dp4288
+g42
+g0
+(g43
+g44
+(dp4289
+g4169
+g4171
+stp4290
+Rp4291
+(dp4292
+g22
+(lp4293
+g4169
+asbsbsg220
+(dp4294
+sbatp4295
+Rp4296
+sg220
+(dp4297
+sg225
+g4149
+sg85
+g28
+((lp4298
+g4269
+atp4299
+Rp4300
+sg229
+I01
+sg230
+NsbsS'new_comments'
+p4301
+g0
+(g9
+g2
+Ntp4302
+Rp4303
+(dp4304
+g13
+S'new_comments'
+p4305
+sg15
+Nsg16
+g17
+((lp4306
+tp4307
+Rp4308
+(dp4309
+g22
+(lp4310
+sbsg24
+(lp4311
+sg26
+Nsg27
+g28
+((lp4312
+tp4313
+Rp4314
+sg32
+g33
+(g34
+tp4315
+Rp4316
+sg37
+g0
+(g38
+g2
+Ntp4317
+Rp4318
+(dp4319
+g42
+g0
+(g43
+g44
+(dp4320
+Vcomment
+p4321
+g0
+(g47
+g2
+Ntp4322
+Rp4323
+(dp4324
+g51
+g4321
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I306
+sg55
+g4303
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4325
+g4323
+atp4326
+Rp4327
+sg62
+Nsg63
+Nsg64
+g4321
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4328
+tp4329
+Rp4330
+(dp4331
+g22
+(lp4332
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp4333
+Rp4334
+(dp4335
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp4336
+tp4337
+Rp4338
+sbsVnotedate
+p4339
+g0
+(g47
+g2
+Ntp4340
+Rp4341
+(dp4342
+g51
+g4339
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4343
+Rp4344
+(dp4345
+g97
+g4341
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4346
+Rp4347
+(dp4348
+g104
+Vnow()
+p4349
+sg106
+Nsg107
+Nsg108
+(dp4350
+sbsbsg54
+I308
+sg55
+g4303
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4351
+g4341
+atp4352
+Rp4353
+sg62
+Nsg63
+Nsg64
+g4339
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4354
+tp4355
+Rp4356
+(dp4357
+g22
+(lp4358
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp4359
+Rp4360
+(dp4361
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp4362
+tp4363
+Rp4364
+sbsVauthor
+p4365
+g0
+(g47
+g2
+Ntp4366
+Rp4367
+(dp4368
+g51
+g4365
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I307
+sg55
+g4303
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4369
+g4367
+atp4370
+Rp4371
+sg62
+Nsg63
+Nsg64
+g4365
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4372
+tp4373
+Rp4374
+(dp4375
+g22
+(lp4376
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp4377
+Rp4378
+(dp4379
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp4380
+tp4381
+Rp4382
+sbsVpackage
+p4383
+g0
+(g47
+g2
+Ntp4384
+Rp4385
+(dp4386
+g51
+g4383
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I304
+sg55
+g4303
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4387
+g4385
+atp4388
+Rp4389
+sg62
+Nsg63
+Nsg64
+g4383
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4390
+tp4391
+Rp4392
+(dp4393
+g22
+(lp4394
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp4395
+Rp4396
+(dp4397
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp4398
+tp4399
+Rp4400
+sbsVmodified
+p4401
+g0
+(g47
+g2
+Ntp4402
+Rp4403
+(dp4404
+g51
+g4401
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4405
+Rp4406
+(dp4407
+g97
+g4403
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4408
+Rp4409
+(dp4410
+g104
+Vnow()
+p4411
+sg106
+Nsg107
+Nsg108
+(dp4412
+sbsbsg54
+I311
+sg55
+g4303
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4413
+g4403
+atp4414
+Rp4415
+sg62
+Nsg63
+Nsg64
+g4401
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4416
+tp4417
+Rp4418
+(dp4419
+g22
+(lp4420
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp4421
+Rp4422
+(dp4423
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp4424
+tp4425
+Rp4426
+sbsVcreated
+p4427
+g0
+(g47
+g2
+Ntp4428
+Rp4429
+(dp4430
+g51
+g4427
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4431
+Rp4432
+(dp4433
+g97
+g4429
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4434
+Rp4435
+(dp4436
+g104
+Vnow()
+p4437
+sg106
+Nsg107
+Nsg108
+(dp4438
+sbsbsg54
+I310
+sg55
+g4303
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4439
+g4429
+atp4440
+Rp4441
+sg62
+Nsg63
+Nsg64
+g4427
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4442
+tp4443
+Rp4444
+(dp4445
+g22
+(lp4446
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp4447
+Rp4448
+(dp4449
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp4450
+tp4451
+Rp4452
+sbsVversion
+p4453
+g0
+(g47
+g2
+Ntp4454
+Rp4455
+(dp4456
+g51
+g4453
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I305
+sg55
+g4303
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4457
+g4455
+atp4458
+Rp4459
+sg62
+Nsg63
+Nsg64
+g4453
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4460
+tp4461
+Rp4462
+(dp4463
+g22
+(lp4464
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp4465
+Rp4466
+(dp4467
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp4468
+tp4469
+Rp4470
+sbsVtrainee
+p4471
+g0
+(g47
+g2
+Ntp4472
+Rp4473
+(dp4474
+g51
+g4471
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4475
+Rp4476
+(dp4477
+g97
+g4473
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4478
+Rp4479
+(dp4480
+g104
+Vfalse
+p4481
+sg106
+Nsg107
+Nsg108
+(dp4482
+sbsbsg54
+I309
+sg55
+g4303
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4483
+g4473
+atp4484
+Rp4485
+sg62
+Nsg63
+Nsg64
+g4471
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4486
+tp4487
+Rp4488
+(dp4489
+g22
+(lp4490
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp4491
+Rp4492
+(dp4493
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp4494
+tp4495
+Rp4496
+sbsVid
+p4497
+g0
+(g47
+g2
+Ntp4498
+Rp4499
+(dp4500
+g51
+g4497
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4501
+Rp4502
+(dp4503
+g97
+g4499
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4504
+Rp4505
+(dp4506
+g104
+Vnextval('new_comments_id_seq'::regclass)
+p4507
+sg106
+Nsg107
+Nsg108
+(dp4508
+sbsbsg54
+I303
+sg55
+g4303
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp4509
+g4499
+atp4510
+Rp4511
+sg62
+Nsg63
+Nsg64
+g4497
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp4512
+tp4513
+Rp4514
+(dp4515
+g22
+(lp4516
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4517
+Rp4518
+sg85
+g28
+((lp4519
+tp4520
+Rp4521
+sbstp4522
+Rp4523
+(dp4524
+g22
+(lp4525
+g4497
+ag4383
+ag4453
+ag4321
+ag4365
+ag4339
+ag4471
+ag4427
+ag4401
+asbsbsg64
+g4301
+sg183
+g0
+(g184
+g2
+Ntp4526
+Rp4527
+(dp4528
+g188
+(lp4529
+g4499
+asg64
+Vnew_comments_pkey
+p4530
+sg191
+g4303
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp4531
+Rp4532
+(dp4533
+g42
+g0
+(g43
+g44
+(dp4534
+g4497
+g4499
+stp4535
+Rp4536
+(dp4537
+g22
+(lp4538
+g4497
+asbsbsbsg204
+g4
+sg205
+g28
+((lp4539
+tp4540
+Rp4541
+sg220
+(dp4542
+sg225
+g4301
+sg85
+g28
+((lp4543
+g4527
+ag0
+(g1131
+g2
+Ntp4544
+Rp4545
+(dp4546
+g64
+Nsg191
+g4303
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp4547
+Rp4548
+(dp4549
+g1139
+g4492
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp4550
+Rp4551
+(dp4552
+g1146
+g1147
+sg1148
+(dp4553
+sg1150
+g0
+(g1151
+g2
+Ntp4554
+Rp4555
+(dp4556
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp4557
+Rp4558
+(dp4559
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp4560
+g0
+(g1168
+g2
+Ntp4561
+Rp4562
+(dp4563
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25850832 trainee)s
+p4564
+tp4565
+Rp4566
+sg1178
+I00
+sg76
+g1157
+sg1179
+g4471
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp4567
+Rp4568
+(dp4569
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25850896 trainee)s
+p4570
+tp4571
+Rp4572
+sg1178
+I00
+sg76
+g1157
+sg1179
+g4471
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g4473
+sbsbatp4573
+Rp4574
+sg229
+I01
+sg230
+NsbsS'src_associations_src'
+p4575
+g0
+(g9
+g2
+Ntp4576
+Rp4577
+(dp4578
+g15
+Nsg16
+g17
+((lp4579
+tp4580
+Rp4581
+(dp4582
+g22
+(lp4583
+sbsg24
+(lp4584
+sg26
+Nsg27
+g28
+((lp4585
+tp4586
+Rp4587
+sg32
+g33
+(g34
+tp4588
+Rp4589
+sg37
+g0
+(g38
+g2
+Ntp4590
+Rp4591
+(dp4592
+g42
+g0
+(g43
+g44
+(dp4593
+Vsource
+p4594
+g0
+(g47
+g2
+Ntp4595
+Rp4596
+(dp4597
+g51
+g4594
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I480
+sg55
+g4577
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g4594
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4598
+tp4599
+Rp4600
+(dp4601
+g22
+(lp4602
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp4603
+Rp4604
+(dp4605
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp4606
+tp4607
+Rp4608
+sbsVsrc
+p4609
+g0
+(g47
+g2
+Ntp4610
+Rp4611
+(dp4612
+g51
+g4609
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I479
+sg55
+g4577
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g4609
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4613
+tp4614
+Rp4615
+(dp4616
+g22
+(lp4617
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4618
+Rp4619
+sg85
+g28
+((lp4620
+tp4621
+Rp4622
+sbsVversion
+p4623
+g0
+(g47
+g2
+Ntp4624
+Rp4625
+(dp4626
+g51
+g4623
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I481
+sg55
+g4577
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g4623
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4627
+tp4628
+Rp4629
+(dp4630
+g22
+(lp4631
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp4632
+Rp4633
+sg85
+g28
+((lp4634
+tp4635
+Rp4636
+sbsVid
+p4637
+g0
+(g47
+g2
+Ntp4638
+Rp4639
+(dp4640
+g51
+g4637
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I477
+sg55
+g4577
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g4637
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4641
+tp4642
+Rp4643
+(dp4644
+g22
+(lp4645
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4646
+Rp4647
+sg85
+g28
+((lp4648
+tp4649
+Rp4650
+sbsVsuite
+p4651
+g0
+(g47
+g2
+Ntp4652
+Rp4653
+(dp4654
+g51
+g4651
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I478
+sg55
+g4577
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g4651
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4655
+tp4656
+Rp4657
+(dp4658
+g22
+(lp4659
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4660
+Rp4661
+sg85
+g28
+((lp4662
+tp4663
+Rp4664
+sbstp4665
+Rp4666
+(dp4667
+g22
+(lp4668
+g4637
+ag4651
+ag4609
+ag4594
+ag4623
+asbsbsg64
+g4575
+sg183
+g0
+(g184
+g2
+Ntp4669
+Rp4670
+(dp4671
+g188
+(lp4672
+sg64
+Nsg191
+g4577
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp4673
+Rp4674
+(dp4675
+g42
+g0
+(g43
+g44
+(dp4676
+tp4677
+Rp4678
+(dp4679
+g22
+(lp4680
+sbsbsbsg204
+g4
+sg205
+g28
+((lp4681
+tp4682
+Rp4683
+sg220
+(dp4684
+sg225
+g4575
+sg85
+g28
+((lp4685
+g4670
+atp4686
+Rp4687
+sg229
+I01
+sg230
+NsbsVpriority
+p4688
+g0
+(g9
+g2
+Ntp4689
+Rp4690
+(dp4691
+g13
+S'priority'
+p4692
+sg15
+Nsg16
+g17
+((lp4693
+tp4694
+Rp4695
+(dp4696
+g22
+(lp4697
+sbsg24
+(lp4698
+sg26
+Nsg27
+g28
+((lp4699
+tp4700
+Rp4701
+sg32
+g33
+(g34
+tp4702
+Rp4703
+sg37
+g0
+(g38
+g2
+Ntp4704
+Rp4705
+(dp4706
+g42
+g0
+(g43
+g44
+(dp4707
+Vpriority
+p4708
+g0
+(g47
+g2
+Ntp4709
+Rp4710
+(dp4711
+g51
+g4708
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I322
+sg55
+g4690
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4712
+g4710
+atp4713
+Rp4714
+sg62
+Nsg63
+Nsg64
+g4708
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4715
+tp4716
+Rp4717
+(dp4718
+g22
+(lp4719
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp4720
+Rp4721
+(dp4722
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp4723
+tp4724
+Rp4725
+sbsVlevel
+p4726
+g0
+(g47
+g2
+Ntp4727
+Rp4728
+(dp4729
+g51
+g4726
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I323
+sg55
+g4690
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4730
+g4728
+atp4731
+Rp4732
+sg62
+Nsg63
+Nsg64
+g4726
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4733
+tp4734
+Rp4735
+(dp4736
+g22
+(lp4737
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4738
+Rp4739
+sg85
+g28
+((lp4740
+tp4741
+Rp4742
+sbsVid
+p4743
+g0
+(g47
+g2
+Ntp4744
+Rp4745
+(dp4746
+g51
+g4743
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4747
+Rp4748
+(dp4749
+g97
+g4745
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4750
+Rp4751
+(dp4752
+g104
+Vnextval('priority_id_seq'::regclass)
+p4753
+sg106
+Nsg107
+Nsg108
+(dp4754
+sbsbsg54
+I321
+sg55
+g4690
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp4755
+g4745
+atp4756
+Rp4757
+sg62
+Nsg63
+Nsg64
+g4743
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp4758
+tp4759
+Rp4760
+(dp4761
+g22
+(lp4762
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4763
+Rp4764
+sg85
+g28
+((lp4765
+tp4766
+Rp4767
+sbsVmodified
+p4768
+g0
+(g47
+g2
+Ntp4769
+Rp4770
+(dp4771
+g51
+g4768
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4772
+Rp4773
+(dp4774
+g97
+g4770
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4775
+Rp4776
+(dp4777
+g104
+Vnow()
+p4778
+sg106
+Nsg107
+Nsg108
+(dp4779
+sbsbsg54
+I325
+sg55
+g4690
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4780
+g4770
+atp4781
+Rp4782
+sg62
+Nsg63
+Nsg64
+g4768
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4783
+tp4784
+Rp4785
+(dp4786
+g22
+(lp4787
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp4788
+Rp4789
+(dp4790
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp4791
+tp4792
+Rp4793
+sbsVcreated
+p4794
+g0
+(g47
+g2
+Ntp4795
+Rp4796
+(dp4797
+g51
+g4794
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp4798
+Rp4799
+(dp4800
+g97
+g4796
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp4801
+Rp4802
+(dp4803
+g104
+Vnow()
+p4804
+sg106
+Nsg107
+Nsg108
+(dp4805
+sbsbsg54
+I324
+sg55
+g4690
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4806
+g4796
+atp4807
+Rp4808
+sg62
+Nsg63
+Nsg64
+g4794
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4809
+tp4810
+Rp4811
+(dp4812
+g22
+(lp4813
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp4814
+Rp4815
+(dp4816
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp4817
+tp4818
+Rp4819
+sbstp4820
+Rp4821
+(dp4822
+g22
+(lp4823
+g4743
+ag4708
+ag4726
+ag4794
+ag4768
+asbsbsg64
+g4688
+sg183
+g0
+(g184
+g2
+Ntp4824
+Rp4825
+(dp4826
+g188
+(lp4827
+g4745
+asg64
+Vpriority_pkey
+p4828
+sg191
+g4690
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp4829
+Rp4830
+(dp4831
+g42
+g0
+(g43
+g44
+(dp4832
+g4743
+g4745
+stp4833
+Rp4834
+(dp4835
+g22
+(lp4836
+g4743
+asbsbsbsg204
+g4
+sg205
+g28
+((lp4837
+g0
+(g207
+g2
+Ntp4838
+Rp4839
+(dp4840
+g55
+g4690
+sg56
+I01
+sg64
+S'priority_level_key'
+p4841
+sg195
+g0
+(g38
+g2
+Ntp4842
+Rp4843
+(dp4844
+g42
+g0
+(g43
+g44
+(dp4845
+g4726
+g4728
+stp4846
+Rp4847
+(dp4848
+g22
+(lp4849
+g4726
+asbsbsg220
+(dp4850
+sbag0
+(g207
+g2
+Ntp4851
+Rp4852
+(dp4853
+g55
+g4690
+sg56
+I01
+sg64
+S'priority_priority_key'
+p4854
+sg195
+g0
+(g38
+g2
+Ntp4855
+Rp4856
+(dp4857
+g42
+g0
+(g43
+g44
+(dp4858
+g4708
+g4710
+stp4859
+Rp4860
+(dp4861
+g22
+(lp4862
+g4708
+asbsbsg220
+(dp4863
+sbatp4864
+Rp4865
+sg220
+(dp4866
+sg225
+g4688
+sg85
+g28
+((lp4867
+g4825
+atp4868
+Rp4869
+sg229
+I01
+sg230
+NsbsVsource
+p4870
+g0
+(g9
+g2
+Ntp4871
+Rp4872
+(dp4873
+g13
+S'source'
+p4874
+sg15
+Nsg16
+g17
+((lp4875
+g0
+(g558
+g2
+Ntp4876
+Rp4877
+(dp4878
+g191
+g0
+(g47
+g2
+Ntp4879
+Rp4880
+(dp4881
+g51
+Vchangedby
+p4882
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I141
+sg55
+g4872
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4883
+g4880
+atp4884
+Rp4885
+sg62
+Nsg63
+Nsg64
+g4882
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4886
+g4877
+atp4887
+Rp4888
+(dp4889
+g22
+(lp4890
+g4877
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4891
+Rp4892
+sg85
+g28
+((lp4893
+tp4894
+Rp4895
+sbsg193
+Nsg576
+Nsg64
+Vsource_changedby
+p4896
+sg578
+Vmaintainer.id
+p4897
+sg580
+g0
+(g581
+g2
+Ntp4898
+Rp4899
+(dp4900
+g68
+Nsg576
+Nsg64
+g4896
+sg191
+g4872
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp4901
+Vchangedby
+p4902
+g4877
+stp4903
+Rp4904
+(dp4905
+g22
+(lp4906
+g4902
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp4907
+Rp4908
+(dp4909
+g191
+g0
+(g47
+g2
+Ntp4910
+Rp4911
+(dp4912
+g51
+Vfile
+p4913
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I138
+sg55
+g4872
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4914
+g4911
+atp4915
+Rp4916
+sg62
+Nsg63
+Nsg64
+g4913
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4917
+g4908
+atp4918
+Rp4919
+(dp4920
+g22
+(lp4921
+g4908
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4922
+Rp4923
+sg85
+g28
+((lp4924
+tp4925
+Rp4926
+sbsg193
+Nsg576
+Nsg64
+Vsource_file
+p4927
+sg578
+Vfiles.id
+p4928
+sg580
+g0
+(g581
+g2
+Ntp4929
+Rp4930
+(dp4931
+g68
+Nsg576
+Nsg64
+g4927
+sg191
+g4872
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp4932
+Vfile
+p4933
+g4908
+stp4934
+Rp4935
+(dp4936
+g22
+(lp4937
+g4933
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp4938
+Rp4939
+(dp4940
+g191
+g0
+(g47
+g2
+Ntp4941
+Rp4942
+(dp4943
+g51
+Vmaintainer
+p4944
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I137
+sg55
+g4872
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4945
+g4942
+atp4946
+Rp4947
+sg62
+Nsg63
+Nsg64
+g4944
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4948
+g4939
+atp4949
+Rp4950
+(dp4951
+g22
+(lp4952
+g4939
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4953
+Rp4954
+sg85
+g28
+((lp4955
+tp4956
+Rp4957
+sbsg193
+Nsg576
+Nsg64
+Vsource_maintainer
+p4958
+sg578
+Vmaintainer.id
+p4959
+sg580
+g0
+(g581
+g2
+Ntp4960
+Rp4961
+(dp4962
+g68
+Nsg576
+Nsg64
+g4958
+sg191
+g4872
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp4963
+Vmaintainer
+p4964
+g4939
+stp4965
+Rp4966
+(dp4967
+g22
+(lp4968
+g4964
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp4969
+Rp4970
+(dp4971
+g191
+g0
+(g47
+g2
+Ntp4972
+Rp4973
+(dp4974
+g51
+Vsig_fpr
+p4975
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I139
+sg55
+g4872
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp4976
+g4973
+atp4977
+Rp4978
+sg62
+Nsg63
+Nsg64
+g4975
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp4979
+g4970
+atp4980
+Rp4981
+(dp4982
+g22
+(lp4983
+g4970
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp4984
+Rp4985
+sg85
+g28
+((lp4986
+tp4987
+Rp4988
+sbsg193
+Nsg576
+Nsg64
+Vsource_sig_fpr
+p4989
+sg578
+Vfingerprint.id
+p4990
+sg580
+g0
+(g581
+g2
+Ntp4991
+Rp4992
+(dp4993
+g68
+Nsg576
+Nsg64
+g4989
+sg191
+g4872
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp4994
+Vsig_fpr
+p4995
+g4970
+stp4996
+Rp4997
+(dp4998
+g22
+(lp4999
+g4995
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp5000
+Rp5001
+(dp5002
+g22
+(lp5003
+g4877
+ag4908
+ag4939
+ag4970
+asbsg24
+(lp5004
+sg26
+Nsg27
+g28
+((lp5005
+tp5006
+Rp5007
+sg32
+g33
+(g34
+tp5008
+Rp5009
+sg37
+g0
+(g38
+g2
+Ntp5010
+Rp5011
+(dp5012
+g42
+g0
+(g43
+g44
+(dp5013
+g4882
+g4880
+sg4944
+g4942
+sVcreated
+p5014
+g0
+(g47
+g2
+Ntp5015
+Rp5016
+(dp5017
+g51
+g5014
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5018
+Rp5019
+(dp5020
+g97
+g5016
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5021
+Rp5022
+(dp5023
+g104
+Vnow()
+p5024
+sg106
+Nsg107
+Nsg108
+(dp5025
+sbsbsg54
+I143
+sg55
+g4872
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5026
+g5016
+atp5027
+Rp5028
+sg62
+Nsg63
+Nsg64
+g5014
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5029
+tp5030
+Rp5031
+(dp5032
+g22
+(lp5033
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp5034
+Rp5035
+(dp5036
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp5037
+tp5038
+Rp5039
+sbsVinstall_date
+p5040
+g0
+(g47
+g2
+Ntp5041
+Rp5042
+(dp5043
+g51
+g5040
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I140
+sg55
+g4872
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5044
+g5042
+atp5045
+Rp5046
+sg62
+Nsg63
+Nsg64
+g5040
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5047
+tp5048
+Rp5049
+(dp5050
+g22
+(lp5051
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp5052
+Rp5053
+(dp5054
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp5055
+tp5056
+Rp5057
+sbsg4975
+g4973
+sVmodified
+p5058
+g0
+(g47
+g2
+Ntp5059
+Rp5060
+(dp5061
+g51
+g5058
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5062
+Rp5063
+(dp5064
+g97
+g5060
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5065
+Rp5066
+(dp5067
+g104
+Vnow()
+p5068
+sg106
+Nsg107
+Nsg108
+(dp5069
+sbsbsg54
+I144
+sg55
+g4872
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5070
+g5060
+atp5071
+Rp5072
+sg62
+Nsg63
+Nsg64
+g5058
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5073
+tp5074
+Rp5075
+(dp5076
+g22
+(lp5077
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp5078
+Rp5079
+(dp5080
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp5081
+tp5082
+Rp5083
+sbsVsource
+p5084
+g0
+(g47
+g2
+Ntp5085
+Rp5086
+(dp5087
+g51
+g5084
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I135
+sg55
+g4872
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5088
+g5086
+atp5089
+Rp5090
+sg62
+Nsg63
+Nsg64
+g5084
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5091
+tp5092
+Rp5093
+(dp5094
+g22
+(lp5095
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5096
+Rp5097
+(dp5098
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5099
+tp5100
+Rp5101
+sbsVversion
+p5102
+g0
+(g47
+g2
+Ntp5103
+Rp5104
+(dp5105
+g51
+g5102
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I136
+sg55
+g4872
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5106
+g5104
+atp5107
+Rp5108
+sg62
+Nsg63
+Nsg64
+g5102
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5109
+tp5110
+Rp5111
+(dp5112
+g22
+(lp5113
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp5114
+Rp5115
+sg85
+g28
+((lp5116
+tp5117
+Rp5118
+sbsg4913
+g4911
+sVdm_upload_allowed
+p5119
+g0
+(g47
+g2
+Ntp5120
+Rp5121
+(dp5122
+g51
+g5119
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5123
+Rp5124
+(dp5125
+g97
+g5121
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5126
+Rp5127
+(dp5128
+g104
+Vfalse
+p5129
+sg106
+Nsg107
+Nsg108
+(dp5130
+sbsbsg54
+I142
+sg55
+g4872
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5131
+g5121
+atp5132
+Rp5133
+sg62
+Nsg63
+Nsg64
+g5119
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5134
+tp5135
+Rp5136
+(dp5137
+g22
+(lp5138
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp5139
+Rp5140
+(dp5141
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp5142
+tp5143
+Rp5144
+sbsVstanza
+p5145
+g0
+(g47
+g2
+Ntp5146
+Rp5147
+(dp5148
+g51
+g5145
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I145
+sg55
+g4872
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5149
+g5147
+atp5150
+Rp5151
+sg62
+Nsg63
+Nsg64
+g5145
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5152
+tp5153
+Rp5154
+(dp5155
+g22
+(lp5156
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5157
+Rp5158
+(dp5159
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5160
+tp5161
+Rp5162
+sbsVid
+p5163
+g0
+(g47
+g2
+Ntp5164
+Rp5165
+(dp5166
+g51
+g5163
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5167
+Rp5168
+(dp5169
+g97
+g5165
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5170
+Rp5171
+(dp5172
+g104
+Vnextval('source_id_seq'::regclass)
+p5173
+sg106
+Nsg107
+Nsg108
+(dp5174
+sbsbsg54
+I134
+sg55
+g4872
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp5175
+g5165
+atp5176
+Rp5177
+sg62
+Nsg63
+Nsg64
+g5163
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp5178
+tp5179
+Rp5180
+(dp5181
+g22
+(lp5182
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp5183
+Rp5184
+sg85
+g28
+((lp5185
+tp5186
+Rp5187
+sbstp5188
+Rp5189
+(dp5190
+g22
+(lp5191
+g5163
+ag5084
+ag5102
+ag4944
+ag4913
+ag4975
+ag5040
+ag4882
+ag5119
+ag5014
+ag5058
+ag5145
+asbsbsg64
+g4870
+sg183
+g0
+(g184
+g2
+Ntp5192
+Rp5193
+(dp5194
+g188
+(lp5195
+g5165
+asg64
+Vsource_pkey
+p5196
+sg191
+g4872
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp5197
+Rp5198
+(dp5199
+g42
+g0
+(g43
+g44
+(dp5200
+g5163
+g5165
+stp5201
+Rp5202
+(dp5203
+g22
+(lp5204
+g5163
+asbsbsbsg204
+g4
+sg205
+g28
+((lp5205
+g0
+(g207
+g2
+Ntp5206
+Rp5207
+(dp5208
+g55
+g4872
+sg56
+I01
+sg64
+S'source_file_key'
+p5209
+sg195
+g0
+(g38
+g2
+Ntp5210
+Rp5211
+(dp5212
+g42
+g0
+(g43
+g44
+(dp5213
+g4913
+g4911
+stp5214
+Rp5215
+(dp5216
+g22
+(lp5217
+g4913
+asbsbsg220
+(dp5218
+sbag0
+(g207
+g2
+Ntp5219
+Rp5220
+(dp5221
+g55
+g4872
+sg56
+I00
+sg64
+S'source_fingerprint'
+p5222
+sg195
+g0
+(g38
+g2
+Ntp5223
+Rp5224
+(dp5225
+g42
+g0
+(g43
+g44
+(dp5226
+g4975
+g4973
+stp5227
+Rp5228
+(dp5229
+g22
+(lp5230
+g4975
+asbsbsg220
+(dp5231
+sbag0
+(g207
+g2
+Ntp5232
+Rp5233
+(dp5234
+g55
+g4872
+sg56
+I01
+sg64
+S'source_source_key'
+p5235
+sg195
+g0
+(g38
+g2
+Ntp5236
+Rp5237
+(dp5238
+g42
+g0
+(g43
+g44
+(dp5239
+g5084
+g5086
+sg5102
+g5104
+stp5240
+Rp5241
+(dp5242
+g22
+(lp5243
+g5084
+ag5102
+asbsbsg220
+(dp5244
+sbag0
+(g207
+g2
+Ntp5245
+Rp5246
+(dp5247
+g55
+g4872
+sg56
+I00
+sg64
+S'source_maintainer'
+p5248
+sg195
+g0
+(g38
+g2
+Ntp5249
+Rp5250
+(dp5251
+g42
+g0
+(g43
+g44
+(dp5252
+g4944
+g4942
+stp5253
+Rp5254
+(dp5255
+g22
+(lp5256
+g4944
+asbsbsg220
+(dp5257
+sbatp5258
+Rp5259
+sg220
+(dp5260
+sg225
+g4870
+sg85
+g28
+((lp5261
+g0
+(g1131
+g2
+Ntp5262
+Rp5263
+(dp5264
+g64
+Nsg191
+g4872
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp5265
+Rp5266
+(dp5267
+g1139
+g5140
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp5268
+Rp5269
+(dp5270
+g1146
+g1147
+sg1148
+(dp5271
+sg1150
+g0
+(g1151
+g2
+Ntp5272
+Rp5273
+(dp5274
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp5275
+Rp5276
+(dp5277
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp5278
+g0
+(g1168
+g2
+Ntp5279
+Rp5280
+(dp5281
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24697040 dm_upload_allowed)s
+p5282
+tp5283
+Rp5284
+sg1178
+I00
+sg76
+g1157
+sg1179
+g5119
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp5285
+Rp5286
+(dp5287
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24697424 dm_upload_allowed)s
+p5288
+tp5289
+Rp5290
+sg1178
+I00
+sg76
+g1157
+sg1179
+g5119
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g5121
+sbsbag4992
+ag4930
+ag5193
+ag4961
+ag4899
+atp5291
+Rp5292
+sg229
+I01
+sg230
+NsbsS'changes_pool_files'
+p5293
+g0
+(g9
+g2
+Ntp5294
+Rp5295
+(dp5296
+g15
+Nsg16
+g17
+((lp5297
+g0
+(g558
+g2
+Ntp5298
+Rp5299
+(dp5300
+g191
+g0
+(g47
+g2
+Ntp5301
+Rp5302
+(dp5303
+g51
+Vchangeid
+p5304
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I284
+sg55
+g5295
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp5305
+g5302
+atp5306
+Rp5307
+sg62
+Nsg63
+Nsg64
+g5304
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5308
+g5299
+atp5309
+Rp5310
+(dp5311
+g22
+(lp5312
+g5299
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp5313
+Rp5314
+sg85
+g28
+((lp5315
+tp5316
+Rp5317
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pool_files_changeid_fkey
+p5318
+sg578
+Vchanges.id
+p5319
+sg580
+g0
+(g581
+g2
+Ntp5320
+Rp5321
+(dp5322
+g68
+Nsg576
+Nsg64
+g5318
+sg191
+g5295
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp5323
+Vchangeid
+p5324
+g5299
+stp5325
+Rp5326
+(dp5327
+g22
+(lp5328
+g5324
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp5329
+Rp5330
+(dp5331
+g191
+g0
+(g47
+g2
+Ntp5332
+Rp5333
+(dp5334
+g51
+Vfileid
+p5335
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I285
+sg55
+g5295
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp5336
+g5333
+atp5337
+Rp5338
+sg62
+Nsg63
+Nsg64
+g5335
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5339
+g5330
+atp5340
+Rp5341
+(dp5342
+g22
+(lp5343
+g5330
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp5344
+Rp5345
+sg85
+g28
+((lp5346
+tp5347
+Rp5348
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pool_files_fileid_fkey
+p5349
+sg578
+Vfiles.id
+p5350
+sg580
+g0
+(g581
+g2
+Ntp5351
+Rp5352
+(dp5353
+g68
+Nsg576
+Nsg64
+g5349
+sg191
+g5295
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp5354
+Vfileid
+p5355
+g5330
+stp5356
+Rp5357
+(dp5358
+g22
+(lp5359
+g5355
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp5360
+Rp5361
+(dp5362
+g22
+(lp5363
+g5299
+ag5330
+asbsg24
+(lp5364
+sg26
+Nsg27
+g28
+((lp5365
+tp5366
+Rp5367
+sg32
+g33
+(g34
+tp5368
+Rp5369
+sg37
+g0
+(g38
+g2
+Ntp5370
+Rp5371
+(dp5372
+g42
+g0
+(g43
+g44
+(dp5373
+Vcreated
+p5374
+g0
+(g47
+g2
+Ntp5375
+Rp5376
+(dp5377
+g51
+g5374
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5378
+Rp5379
+(dp5380
+g97
+g5376
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5381
+Rp5382
+(dp5383
+g104
+Vnow()
+p5384
+sg106
+Nsg107
+Nsg108
+(dp5385
+sbsbsg54
+I286
+sg55
+g5295
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g5374
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5386
+tp5387
+Rp5388
+(dp5389
+g22
+(lp5390
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp5391
+Rp5392
+(dp5393
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp5394
+tp5395
+Rp5396
+sbsg5304
+g5302
+sVmodified
+p5397
+g0
+(g47
+g2
+Ntp5398
+Rp5399
+(dp5400
+g51
+g5397
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5401
+Rp5402
+(dp5403
+g97
+g5399
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5404
+Rp5405
+(dp5406
+g104
+Vnow()
+p5407
+sg106
+Nsg107
+Nsg108
+(dp5408
+sbsbsg54
+I287
+sg55
+g5295
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g5397
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5409
+tp5410
+Rp5411
+(dp5412
+g22
+(lp5413
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp5414
+Rp5415
+(dp5416
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp5417
+tp5418
+Rp5419
+sbsg5335
+g5333
+stp5420
+Rp5421
+(dp5422
+g22
+(lp5423
+g5304
+ag5335
+ag5374
+ag5397
+asbsbsg64
+g5293
+sg183
+g0
+(g184
+g2
+Ntp5424
+Rp5425
+(dp5426
+g188
+(lp5427
+g5302
+ag5333
+asg64
+Vchanges_pool_files_pkey
+p5428
+sg191
+g5295
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp5429
+Rp5430
+(dp5431
+g42
+g0
+(g43
+g44
+(dp5432
+g5304
+g5302
+sg5335
+g5333
+stp5433
+Rp5434
+(dp5435
+g22
+(lp5436
+g5304
+ag5335
+asbsbsbsg204
+g4
+sg205
+g28
+((lp5437
+tp5438
+Rp5439
+sg220
+(dp5440
+sg225
+g5293
+sg85
+g28
+((lp5441
+g5425
+ag5321
+ag5352
+atp5442
+Rp5443
+sg229
+I01
+sg230
+NsbsS'changelogs'
+p5444
+g0
+(g9
+g2
+Ntp5445
+Rp5446
+(dp5447
+g15
+Nsg16
+g17
+((lp5448
+tp5449
+Rp5450
+(dp5451
+g22
+(lp5452
+sbsg24
+(lp5453
+sg26
+Nsg27
+g28
+((lp5454
+tp5455
+Rp5456
+sg32
+g33
+(g34
+tp5457
+Rp5458
+sg37
+g0
+(g38
+g2
+Ntp5459
+Rp5460
+(dp5461
+g42
+g0
+(g43
+g44
+(dp5462
+Vsource
+p5463
+g0
+(g47
+g2
+Ntp5464
+Rp5465
+(dp5466
+g51
+g5463
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I420
+sg55
+g5446
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g5463
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5467
+tp5468
+Rp5469
+(dp5470
+g22
+(lp5471
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5472
+Rp5473
+(dp5474
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5475
+tp5476
+Rp5477
+sbsVversion
+p5478
+g0
+(g47
+g2
+Ntp5479
+Rp5480
+(dp5481
+g51
+g5478
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I421
+sg55
+g5446
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g5478
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5482
+tp5483
+Rp5484
+(dp5485
+g22
+(lp5486
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp5487
+Rp5488
+sg85
+g28
+((lp5489
+tp5490
+Rp5491
+sbsVarchitecture
+p5492
+g0
+(g47
+g2
+Ntp5493
+Rp5494
+(dp5495
+g51
+g5492
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I422
+sg55
+g5446
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g5492
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5496
+tp5497
+Rp5498
+(dp5499
+g22
+(lp5500
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5501
+Rp5502
+(dp5503
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5504
+tp5505
+Rp5506
+sbsVchangelog
+p5507
+g0
+(g47
+g2
+Ntp5508
+Rp5509
+(dp5510
+g51
+g5507
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I423
+sg55
+g5446
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g5507
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5511
+tp5512
+Rp5513
+(dp5514
+g22
+(lp5515
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5516
+Rp5517
+(dp5518
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5519
+tp5520
+Rp5521
+sbsVdistribution
+p5522
+g0
+(g47
+g2
+Ntp5523
+Rp5524
+(dp5525
+g51
+g5522
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I424
+sg55
+g5446
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g5522
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5526
+tp5527
+Rp5528
+(dp5529
+g22
+(lp5530
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5531
+Rp5532
+(dp5533
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5534
+tp5535
+Rp5536
+sbsVid
+p5537
+g0
+(g47
+g2
+Ntp5538
+Rp5539
+(dp5540
+g51
+g5537
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I419
+sg55
+g5446
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g5537
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5541
+tp5542
+Rp5543
+(dp5544
+g22
+(lp5545
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp5546
+Rp5547
+sg85
+g28
+((lp5548
+tp5549
+Rp5550
+sbstp5551
+Rp5552
+(dp5553
+g22
+(lp5554
+g5537
+ag5463
+ag5478
+ag5492
+ag5507
+ag5522
+asbsbsg64
+g5444
+sg183
+g0
+(g184
+g2
+Ntp5555
+Rp5556
+(dp5557
+g188
+(lp5558
+sg64
+Nsg191
+g5446
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp5559
+Rp5560
+(dp5561
+g42
+g0
+(g43
+g44
+(dp5562
+tp5563
+Rp5564
+(dp5565
+g22
+(lp5566
+sbsbsbsg204
+g4
+sg205
+g28
+((lp5567
+tp5568
+Rp5569
+sg220
+(dp5570
+sg225
+g5444
+sg85
+g28
+((lp5571
+g5556
+atp5572
+Rp5573
+sg229
+I01
+sg230
+NsbsVlocation
+p5574
+g0
+(g9
+g2
+Ntp5575
+Rp5576
+(dp5577
+g13
+S'location'
+p5578
+sg15
+Nsg16
+g17
+((lp5579
+g0
+(g558
+g2
+Ntp5580
+Rp5581
+(dp5582
+g191
+g0
+(g47
+g2
+Ntp5583
+Rp5584
+(dp5585
+g51
+Varchive
+p5586
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I89
+sg55
+g5576
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5587
+g5584
+atp5588
+Rp5589
+sg62
+Nsg63
+Nsg64
+g5586
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5590
+g5581
+atp5591
+Rp5592
+(dp5593
+g22
+(lp5594
+g5581
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp5595
+Rp5596
+sg85
+g28
+((lp5597
+tp5598
+Rp5599
+sbsg193
+Nsg576
+Nsg64
+Vlocation_archive_fkey
+p5600
+sg578
+Varchive.id
+p5601
+sg580
+g0
+(g581
+g2
+Ntp5602
+Rp5603
+(dp5604
+g68
+Nsg576
+Nsg64
+g5600
+sg191
+g5576
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp5605
+Varchive
+p5606
+g5581
+stp5607
+Rp5608
+(dp5609
+g22
+(lp5610
+g5606
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp5611
+Rp5612
+(dp5613
+g191
+g0
+(g47
+g2
+Ntp5614
+Rp5615
+(dp5616
+g51
+Vcomponent
+p5617
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I88
+sg55
+g5576
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5618
+g5615
+atp5619
+Rp5620
+sg62
+Nsg63
+Nsg64
+g5617
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5621
+g5612
+atp5622
+Rp5623
+(dp5624
+g22
+(lp5625
+g5612
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp5626
+Rp5627
+sg85
+g28
+((lp5628
+tp5629
+Rp5630
+sbsg193
+Nsg576
+Nsg64
+Vlocation_component_fkey
+p5631
+sg578
+Vcomponent.id
+p5632
+sg580
+g0
+(g581
+g2
+Ntp5633
+Rp5634
+(dp5635
+g68
+Nsg576
+Nsg64
+g5631
+sg191
+g5576
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp5636
+Vcomponent
+p5637
+g5612
+stp5638
+Rp5639
+(dp5640
+g22
+(lp5641
+g5637
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp5642
+Rp5643
+(dp5644
+g22
+(lp5645
+g5581
+ag5612
+asbsg24
+(lp5646
+sg26
+Nsg27
+g28
+((lp5647
+tp5648
+Rp5649
+sg32
+g33
+(g34
+tp5650
+Rp5651
+sg37
+g0
+(g38
+g2
+Ntp5652
+Rp5653
+(dp5654
+g42
+g0
+(g43
+g44
+(dp5655
+Vtype
+p5656
+g0
+(g47
+g2
+Ntp5657
+Rp5658
+(dp5659
+g51
+g5656
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I90
+sg55
+g5576
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5660
+g5658
+atp5661
+Rp5662
+sg62
+Nsg63
+Nsg64
+g5656
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5663
+tp5664
+Rp5665
+(dp5666
+g22
+(lp5667
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5668
+Rp5669
+(dp5670
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5671
+tp5672
+Rp5673
+sbsVcreated
+p5674
+g0
+(g47
+g2
+Ntp5675
+Rp5676
+(dp5677
+g51
+g5674
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5678
+Rp5679
+(dp5680
+g97
+g5676
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5681
+Rp5682
+(dp5683
+g104
+Vnow()
+p5684
+sg106
+Nsg107
+Nsg108
+(dp5685
+sbsbsg54
+I91
+sg55
+g5576
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5686
+g5676
+atp5687
+Rp5688
+sg62
+Nsg63
+Nsg64
+g5674
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5689
+tp5690
+Rp5691
+(dp5692
+g22
+(lp5693
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp5694
+Rp5695
+(dp5696
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp5697
+tp5698
+Rp5699
+sbsVid
+p5700
+g0
+(g47
+g2
+Ntp5701
+Rp5702
+(dp5703
+g51
+g5700
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5704
+Rp5705
+(dp5706
+g97
+g5702
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5707
+Rp5708
+(dp5709
+g104
+Vnextval('location_id_seq'::regclass)
+p5710
+sg106
+Nsg107
+Nsg108
+(dp5711
+sbsbsg54
+I86
+sg55
+g5576
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp5712
+g5702
+atp5713
+Rp5714
+sg62
+Nsg63
+Nsg64
+g5700
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp5715
+tp5716
+Rp5717
+(dp5718
+g22
+(lp5719
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp5720
+Rp5721
+sg85
+g28
+((lp5722
+tp5723
+Rp5724
+sbsVpath
+p5725
+g0
+(g47
+g2
+Ntp5726
+Rp5727
+(dp5728
+g51
+g5725
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I87
+sg55
+g5576
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5729
+g5727
+atp5730
+Rp5731
+sg62
+Nsg63
+Nsg64
+g5725
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5732
+tp5733
+Rp5734
+(dp5735
+g22
+(lp5736
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5737
+Rp5738
+(dp5739
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5740
+tp5741
+Rp5742
+sbsg5617
+g5615
+sVmodified
+p5743
+g0
+(g47
+g2
+Ntp5744
+Rp5745
+(dp5746
+g51
+g5743
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5747
+Rp5748
+(dp5749
+g97
+g5745
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5750
+Rp5751
+(dp5752
+g104
+Vnow()
+p5753
+sg106
+Nsg107
+Nsg108
+(dp5754
+sbsbsg54
+I92
+sg55
+g5576
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5755
+g5745
+atp5756
+Rp5757
+sg62
+Nsg63
+Nsg64
+g5743
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5758
+tp5759
+Rp5760
+(dp5761
+g22
+(lp5762
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp5763
+Rp5764
+(dp5765
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp5766
+tp5767
+Rp5768
+sbsg5586
+g5584
+stp5769
+Rp5770
+(dp5771
+g22
+(lp5772
+g5700
+ag5725
+ag5617
+ag5586
+ag5656
+ag5674
+ag5743
+asbsbsg64
+g5574
+sg183
+g0
+(g184
+g2
+Ntp5773
+Rp5774
+(dp5775
+g188
+(lp5776
+g5702
+asg64
+Vlocation_pkey
+p5777
+sg191
+g5576
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp5778
+Rp5779
+(dp5780
+g42
+g0
+(g43
+g44
+(dp5781
+g5700
+g5702
+stp5782
+Rp5783
+(dp5784
+g22
+(lp5785
+g5700
+asbsbsbsg204
+g4
+sg205
+g28
+((lp5786
+tp5787
+Rp5788
+sg220
+(dp5789
+sg225
+g5574
+sg85
+g28
+((lp5790
+g5774
+ag5603
+ag5634
+atp5791
+Rp5792
+sg229
+I01
+sg230
+NsbsVchanges_pending_files
+p5793
+g0
+(g9
+g2
+Ntp5794
+Rp5795
+(dp5796
+g13
+S'changes_pending_files'
+p5797
+sg15
+Nsg16
+g17
+((lp5798
+tp5799
+Rp5800
+(dp5801
+g22
+(lp5802
+sbsg24
+(lp5803
+sg26
+Nsg27
+g28
+((lp5804
+tp5805
+Rp5806
+sg32
+g33
+(g34
+tp5807
+Rp5808
+sg37
+g0
+(g38
+g2
+Ntp5809
+Rp5810
+(dp5811
+g42
+g0
+(g43
+g44
+(dp5812
+Vcreated
+p5813
+g0
+(g47
+g2
+Ntp5814
+Rp5815
+(dp5816
+g51
+g5813
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5817
+Rp5818
+(dp5819
+g97
+g5815
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5820
+Rp5821
+(dp5822
+g104
+Vnow()
+p5823
+sg106
+Nsg107
+Nsg108
+(dp5824
+sbsbsg54
+I228
+sg55
+g5795
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5825
+g5815
+atp5826
+Rp5827
+sg62
+Nsg63
+Nsg64
+g5813
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5828
+tp5829
+Rp5830
+(dp5831
+g22
+(lp5832
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp5833
+Rp5834
+(dp5835
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp5836
+tp5837
+Rp5838
+sbsVmd5sum
+p5839
+g0
+(g47
+g2
+Ntp5840
+Rp5841
+(dp5842
+g51
+g5839
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I225
+sg55
+g5795
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5843
+g5841
+atp5844
+Rp5845
+sg62
+Nsg63
+Nsg64
+g5839
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5846
+tp5847
+Rp5848
+(dp5849
+g22
+(lp5850
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5851
+Rp5852
+(dp5853
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5854
+tp5855
+Rp5856
+sbsVmodified
+p5857
+g0
+(g47
+g2
+Ntp5858
+Rp5859
+(dp5860
+g51
+g5857
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5861
+Rp5862
+(dp5863
+g97
+g5859
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5864
+Rp5865
+(dp5866
+g104
+Vnow()
+p5867
+sg106
+Nsg107
+Nsg108
+(dp5868
+sbsbsg54
+I229
+sg55
+g5795
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5869
+g5859
+atp5870
+Rp5871
+sg62
+Nsg63
+Nsg64
+g5857
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5872
+tp5873
+Rp5874
+(dp5875
+g22
+(lp5876
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp5877
+Rp5878
+(dp5879
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp5880
+tp5881
+Rp5882
+sbsVfilename
+p5883
+g0
+(g47
+g2
+Ntp5884
+Rp5885
+(dp5886
+g51
+g5883
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I223
+sg55
+g5795
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5887
+g5885
+atp5888
+Rp5889
+sg62
+Nsg63
+Nsg64
+g5883
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5890
+tp5891
+Rp5892
+(dp5893
+g22
+(lp5894
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5895
+Rp5896
+(dp5897
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5898
+tp5899
+Rp5900
+sbsVprocessed
+p5901
+g0
+(g47
+g2
+Ntp5902
+Rp5903
+(dp5904
+g51
+g5901
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5905
+Rp5906
+(dp5907
+g97
+g5903
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5908
+Rp5909
+(dp5910
+g104
+Vfalse
+p5911
+sg106
+Nsg107
+Nsg108
+(dp5912
+sbsbsg54
+I230
+sg55
+g5795
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5913
+g5903
+atp5914
+Rp5915
+sg62
+Nsg63
+Nsg64
+g5901
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5916
+tp5917
+Rp5918
+(dp5919
+g22
+(lp5920
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp5921
+Rp5922
+(dp5923
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp5924
+tp5925
+Rp5926
+sbsVsha1sum
+p5927
+g0
+(g47
+g2
+Ntp5928
+Rp5929
+(dp5930
+g51
+g5927
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I226
+sg55
+g5795
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5931
+g5929
+atp5932
+Rp5933
+sg62
+Nsg63
+Nsg64
+g5927
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5934
+tp5935
+Rp5936
+(dp5937
+g22
+(lp5938
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5939
+Rp5940
+(dp5941
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5942
+tp5943
+Rp5944
+sbsVsha256sum
+p5945
+g0
+(g47
+g2
+Ntp5946
+Rp5947
+(dp5948
+g51
+g5945
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I227
+sg55
+g5795
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5949
+g5947
+atp5950
+Rp5951
+sg62
+Nsg63
+Nsg64
+g5945
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5952
+tp5953
+Rp5954
+(dp5955
+g22
+(lp5956
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp5957
+Rp5958
+(dp5959
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp5960
+tp5961
+Rp5962
+sbsVid
+p5963
+g0
+(g47
+g2
+Ntp5964
+Rp5965
+(dp5966
+g51
+g5963
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp5967
+Rp5968
+(dp5969
+g97
+g5965
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp5970
+Rp5971
+(dp5972
+g104
+Vnextval('changes_pending_files_id_seq'::regclass)
+p5973
+sg106
+Nsg107
+Nsg108
+(dp5974
+sbsbsg54
+I222
+sg55
+g5795
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp5975
+g5965
+atp5976
+Rp5977
+sg62
+Nsg63
+Nsg64
+g5963
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp5978
+tp5979
+Rp5980
+(dp5981
+g22
+(lp5982
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp5983
+Rp5984
+sg85
+g28
+((lp5985
+tp5986
+Rp5987
+sbsVsize
+p5988
+g0
+(g47
+g2
+Ntp5989
+Rp5990
+(dp5991
+g51
+g5988
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I224
+sg55
+g5795
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp5992
+g5990
+atp5993
+Rp5994
+sg62
+Nsg63
+Nsg64
+g5988
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp5995
+tp5996
+Rp5997
+(dp5998
+g22
+(lp5999
+sbsg75
+Nsg76
+g0
+(csqlalchemy.types
+BIGINT
+p6000
+g2
+Ntp6001
+Rp6002
+sg85
+g28
+((lp6003
+tp6004
+Rp6005
+sbstp6006
+Rp6007
+(dp6008
+g22
+(lp6009
+g5963
+ag5883
+ag5988
+ag5839
+ag5927
+ag5945
+ag5813
+ag5857
+ag5901
+asbsbsg64
+g5793
+sg183
+g0
+(g184
+g2
+Ntp6010
+Rp6011
+(dp6012
+g188
+(lp6013
+g5965
+asg64
+Vchanges_pending_files_pkey
+p6014
+sg191
+g5795
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp6015
+Rp6016
+(dp6017
+g42
+g0
+(g43
+g44
+(dp6018
+g5963
+g5965
+stp6019
+Rp6020
+(dp6021
+g22
+(lp6022
+g5963
+asbsbsbsg204
+g4
+sg205
+g28
+((lp6023
+g0
+(g207
+g2
+Ntp6024
+Rp6025
+(dp6026
+g55
+g5795
+sg56
+I01
+sg64
+S'changes_pending_files_filename_key'
+p6027
+sg195
+g0
+(g38
+g2
+Ntp6028
+Rp6029
+(dp6030
+g42
+g0
+(g43
+g44
+(dp6031
+g5883
+g5885
+stp6032
+Rp6033
+(dp6034
+g22
+(lp6035
+g5883
+asbsbsg220
+(dp6036
+sbatp6037
+Rp6038
+sg220
+(dp6039
+sg225
+g5793
+sg85
+g28
+((lp6040
+g6011
+ag0
+(g1131
+g2
+Ntp6041
+Rp6042
+(dp6043
+g64
+Nsg191
+g5795
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp6044
+Rp6045
+(dp6046
+g1139
+g5922
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp6047
+Rp6048
+(dp6049
+g1146
+g1147
+sg1148
+(dp6050
+sg1150
+g0
+(g1151
+g2
+Ntp6051
+Rp6052
+(dp6053
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp6054
+Rp6055
+(dp6056
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp6057
+g0
+(g1168
+g2
+Ntp6058
+Rp6059
+(dp6060
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25645008 processed)s
+p6061
+tp6062
+Rp6063
+sg1178
+I00
+sg76
+g1157
+sg1179
+g5901
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp6064
+Rp6065
+(dp6066
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(25644752 processed)s
+p6067
+tp6068
+Rp6069
+sg1178
+I00
+sg76
+g1157
+sg1179
+g5901
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g5903
+sbsbatp6070
+Rp6071
+sg229
+I01
+sg230
+NsbsS'suite_build_queue_copy'
+p6072
+g0
+(g9
+g2
+Ntp6073
+Rp6074
+(dp6075
+g15
+Nsg16
+g17
+((lp6076
+g0
+(g558
+g2
+Ntp6077
+Rp6078
+(dp6079
+g191
+g0
+(g47
+g2
+Ntp6080
+Rp6081
+(dp6082
+g51
+Vbuild_queue_id
+p6083
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I360
+sg55
+g6074
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp6084
+g6081
+atp6085
+Rp6086
+sg62
+Nsg63
+Nsg64
+g6083
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6087
+g6078
+atp6088
+Rp6089
+(dp6090
+g22
+(lp6091
+g6078
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp6092
+Rp6093
+sg85
+g28
+((lp6094
+tp6095
+Rp6096
+sbsg193
+Nsg576
+Nsg64
+Vsuite_build_queue_copy_build_queue_id_fkey
+p6097
+sg578
+Vbuild_queue.id
+p6098
+sg580
+g0
+(g581
+g2
+Ntp6099
+Rp6100
+(dp6101
+g68
+Nsg576
+Nsg64
+g6097
+sg191
+g6074
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp6102
+Vbuild_queue_id
+p6103
+g6078
+stp6104
+Rp6105
+(dp6106
+g22
+(lp6107
+g6103
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp6108
+Rp6109
+(dp6110
+g191
+g0
+(g47
+g2
+Ntp6111
+Rp6112
+(dp6113
+g51
+Vsuite
+p6114
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I359
+sg55
+g6074
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp6115
+g6112
+atp6116
+Rp6117
+sg62
+Nsg63
+Nsg64
+g6114
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6118
+g6109
+atp6119
+Rp6120
+(dp6121
+g22
+(lp6122
+g6109
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp6123
+Rp6124
+sg85
+g28
+((lp6125
+tp6126
+Rp6127
+sbsg193
+Nsg576
+Nsg64
+Vsuite_queue_copy_suite_fkey
+p6128
+sg578
+Vsuite.id
+p6129
+sg580
+g0
+(g581
+g2
+Ntp6130
+Rp6131
+(dp6132
+g68
+Nsg576
+Nsg64
+g6128
+sg191
+g6074
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp6133
+Vsuite
+p6134
+g6109
+stp6135
+Rp6136
+(dp6137
+g22
+(lp6138
+g6134
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp6139
+Rp6140
+(dp6141
+g22
+(lp6142
+g6078
+ag6109
+asbsg24
+(lp6143
+sg26
+Nsg27
+g28
+((lp6144
+tp6145
+Rp6146
+sg32
+g33
+(g34
+tp6147
+Rp6148
+sg37
+g0
+(g38
+g2
+Ntp6149
+Rp6150
+(dp6151
+g42
+g0
+(g43
+g44
+(dp6152
+g6114
+g6112
+sVmodified
+p6153
+g0
+(g47
+g2
+Ntp6154
+Rp6155
+(dp6156
+g51
+g6153
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp6157
+Rp6158
+(dp6159
+g97
+g6155
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp6160
+Rp6161
+(dp6162
+g104
+Vnow()
+p6163
+sg106
+Nsg107
+Nsg108
+(dp6164
+sbsbsg54
+I362
+sg55
+g6074
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g6153
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6165
+tp6166
+Rp6167
+(dp6168
+g22
+(lp6169
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp6170
+Rp6171
+(dp6172
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp6173
+tp6174
+Rp6175
+sbsg6083
+g6081
+sVcreated
+p6176
+g0
+(g47
+g2
+Ntp6177
+Rp6178
+(dp6179
+g51
+g6176
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp6180
+Rp6181
+(dp6182
+g97
+g6178
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp6183
+Rp6184
+(dp6185
+g104
+Vnow()
+p6186
+sg106
+Nsg107
+Nsg108
+(dp6187
+sbsbsg54
+I361
+sg55
+g6074
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g6176
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6188
+tp6189
+Rp6190
+(dp6191
+g22
+(lp6192
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp6193
+Rp6194
+(dp6195
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp6196
+tp6197
+Rp6198
+sbstp6199
+Rp6200
+(dp6201
+g22
+(lp6202
+g6114
+ag6083
+ag6176
+ag6153
+asbsbsg64
+g6072
+sg183
+g0
+(g184
+g2
+Ntp6203
+Rp6204
+(dp6205
+g188
+(lp6206
+g6112
+ag6081
+asg64
+Vsuite_queue_copy_pkey
+p6207
+sg191
+g6074
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp6208
+Rp6209
+(dp6210
+g42
+g0
+(g43
+g44
+(dp6211
+g6114
+g6112
+sg6083
+g6081
+stp6212
+Rp6213
+(dp6214
+g22
+(lp6215
+g6114
+ag6083
+asbsbsbsg204
+g4
+sg205
+g28
+((lp6216
+tp6217
+Rp6218
+sg220
+(dp6219
+sg225
+g6072
+sg85
+g28
+((lp6220
+g6204
+ag6100
+ag6131
+atp6221
+Rp6222
+sg229
+I01
+sg230
+NsbsS'override'
+p6223
+g0
+(g9
+g2
+Ntp6224
+Rp6225
+(dp6226
+g13
+S'override'
+p6227
+sg15
+Nsg16
+g17
+((lp6228
+g0
+(g558
+g2
+Ntp6229
+Rp6230
+(dp6231
+g191
+g0
+(g47
+g2
+Ntp6232
+Rp6233
+(dp6234
+g54
+I314
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vcomponent
+p6235
+sg55
+g6225
+sg3105
+g28
+((lp6236
+g6233
+atp6237
+Rp6238
+sg64
+g6235
+sg58
+g28
+((lp6239
+g6233
+atp6240
+Rp6241
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6242
+g6230
+atp6243
+Rp6244
+(dp6245
+g22
+(lp6246
+g6230
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp6247
+Rp6248
+sg85
+g28
+((lp6249
+tp6250
+Rp6251
+sbsg193
+Nsg576
+Nsg64
+Voverride_component
+p6252
+sg578
+Vcomponent.id
+p6253
+sg580
+g0
+(g581
+g2
+Ntp6254
+Rp6255
+(dp6256
+g68
+Nsg576
+Nsg64
+g6252
+sg191
+g6225
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp6257
+Vcomponent
+p6258
+g6230
+stp6259
+Rp6260
+(dp6261
+g22
+(lp6262
+g6258
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g0
+(g47
+g2
+Ntp6263
+Rp6264
+(dp6265
+g51
+Vid
+p6266
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp6267
+Rp6268
+(dp6269
+g97
+g6264
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp6270
+Rp6271
+(dp6272
+g104
+Vnextval('component_id_seq'::regclass)
+p6273
+sg106
+Nsg107
+Nsg108
+(dp6274
+sbsbsg54
+I93
+sg55
+g0
+(g9
+g2
+Ntp6275
+Rp6276
+(dp6277
+g13
+S'component'
+p6278
+sg15
+Nsg16
+g17
+((lp6279
+tp6280
+Rp6281
+(dp6282
+g22
+(lp6283
+sbsg24
+(lp6284
+sg26
+Nsg27
+g28
+((lp6285
+tp6286
+Rp6287
+sg32
+g33
+(g34
+tp6288
+Rp6289
+sg37
+g0
+(g38
+g2
+Ntp6290
+Rp6291
+(dp6292
+g42
+g0
+(g43
+g44
+(dp6293
+Vdescription
+p6294
+g0
+(g47
+g2
+Ntp6295
+Rp6296
+(dp6297
+g51
+g6294
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I95
+sg55
+g6276
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6298
+g6296
+atp6299
+Rp6300
+sg62
+Nsg63
+Nsg64
+g6294
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6301
+tp6302
+Rp6303
+(dp6304
+g22
+(lp6305
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp6306
+Rp6307
+(dp6308
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp6309
+tp6310
+Rp6311
+sbsVname
+p6312
+g0
+(g47
+g2
+Ntp6313
+Rp6314
+(dp6315
+g51
+g6312
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I94
+sg55
+g6276
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6316
+g6314
+atp6317
+Rp6318
+sg62
+Nsg63
+Nsg64
+g6312
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6319
+tp6320
+Rp6321
+(dp6322
+g22
+(lp6323
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp6324
+Rp6325
+(dp6326
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp6327
+tp6328
+Rp6329
+sbsVcreated
+p6330
+g0
+(g47
+g2
+Ntp6331
+Rp6332
+(dp6333
+g51
+g6330
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp6334
+Rp6335
+(dp6336
+g97
+g6332
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp6337
+Rp6338
+(dp6339
+g104
+Vnow()
+p6340
+sg106
+Nsg107
+Nsg108
+(dp6341
+sbsbsg54
+I97
+sg55
+g6276
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6342
+g6332
+atp6343
+Rp6344
+sg62
+Nsg63
+Nsg64
+g6330
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6345
+tp6346
+Rp6347
+(dp6348
+g22
+(lp6349
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp6350
+Rp6351
+(dp6352
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp6353
+tp6354
+Rp6355
+sbsg6266
+g6264
+sVmeets_dfsg
+p6356
+g0
+(g47
+g2
+Ntp6357
+Rp6358
+(dp6359
+g51
+g6356
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I96
+sg55
+g6276
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6360
+g6358
+atp6361
+Rp6362
+sg62
+Nsg63
+Nsg64
+g6356
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6363
+tp6364
+Rp6365
+(dp6366
+g22
+(lp6367
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp6368
+Rp6369
+(dp6370
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp6371
+tp6372
+Rp6373
+sbsVmodified
+p6374
+g0
+(g47
+g2
+Ntp6375
+Rp6376
+(dp6377
+g51
+g6374
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp6378
+Rp6379
+(dp6380
+g97
+g6376
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp6381
+Rp6382
+(dp6383
+g104
+Vnow()
+p6384
+sg106
+Nsg107
+Nsg108
+(dp6385
+sbsbsg54
+I98
+sg55
+g6276
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6386
+g6376
+atp6387
+Rp6388
+sg62
+Nsg63
+Nsg64
+g6374
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6389
+tp6390
+Rp6391
+(dp6392
+g22
+(lp6393
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp6394
+Rp6395
+(dp6396
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp6397
+tp6398
+Rp6399
+sbstp6400
+Rp6401
+(dp6402
+g22
+(lp6403
+g6266
+ag6312
+ag6294
+ag6356
+ag6330
+ag6374
+asbsbsg64
+Vcomponent
+p6404
+sg183
+g0
+(g184
+g2
+Ntp6405
+Rp6406
+(dp6407
+g188
+(lp6408
+g6264
+asg64
+Vcomponent_pkey
+p6409
+sg191
+g6276
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp6410
+Rp6411
+(dp6412
+g42
+g0
+(g43
+g44
+(dp6413
+g6266
+g6264
+stp6414
+Rp6415
+(dp6416
+g22
+(lp6417
+g6266
+asbsbsbsg204
+g4
+sg205
+g28
+((lp6418
+g0
+(g207
+g2
+Ntp6419
+Rp6420
+(dp6421
+g55
+g6276
+sg56
+I01
+sg64
+S'component_name_key'
+p6422
+sg195
+g0
+(g38
+g2
+Ntp6423
+Rp6424
+(dp6425
+g42
+g0
+(g43
+g44
+(dp6426
+g6312
+g6314
+stp6427
+Rp6428
+(dp6429
+g22
+(lp6430
+g6312
+asbsbsg220
+(dp6431
+sbatp6432
+Rp6433
+sg220
+(dp6434
+sg225
+g6404
+sg85
+g28
+((lp6435
+g6406
+ag0
+(g1131
+g2
+Ntp6436
+Rp6437
+(dp6438
+g64
+Nsg191
+g6276
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp6439
+Rp6440
+(dp6441
+g1139
+g6369
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp6442
+Rp6443
+(dp6444
+g1146
+g1147
+sg1148
+(dp6445
+sg1150
+g0
+(g1151
+g2
+Ntp6446
+Rp6447
+(dp6448
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp6449
+Rp6450
+(dp6451
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp6452
+g0
+(g1168
+g2
+Ntp6453
+Rp6454
+(dp6455
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24643728 meets_dfsg)s
+p6456
+tp6457
+Rp6458
+sg1178
+I00
+sg76
+g1157
+sg1179
+g6356
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp6459
+Rp6460
+(dp6461
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24643792 meets_dfsg)s
+p6462
+tp6463
+Rp6464
+sg1178
+I00
+sg76
+g1157
+sg1179
+g6356
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g6358
+sbsbatp6465
+Rp6466
+sg229
+I01
+sg230
+Nsbsg56
+Nsg57
+I01
+sg58
+g28
+((lp6467
+g6264
+atp6468
+Rp6469
+sg62
+Nsg63
+Nsg64
+g6266
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp6470
+tp6471
+Rp6472
+(dp6473
+g22
+(lp6474
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp6475
+Rp6476
+sg85
+g28
+((lp6477
+tp6478
+Rp6479
+sbsg593
+I00
+sbag0
+(g558
+g2
+Ntp6480
+Rp6481
+(dp6482
+g191
+g0
+(g47
+g2
+Ntp6483
+Rp6484
+(dp6485
+g51
+Vpriority
+p6486
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I315
+sg55
+g6225
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6487
+g6484
+atp6488
+Rp6489
+sg62
+Nsg63
+Nsg64
+g6486
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6490
+g6481
+atp6491
+Rp6492
+(dp6493
+g22
+(lp6494
+g6481
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp6495
+Rp6496
+sg85
+g28
+((lp6497
+tp6498
+Rp6499
+sbsg193
+Nsg576
+Nsg64
+Voverride_priority
+p6500
+sg578
+Vpriority.id
+p6501
+sg580
+g0
+(g581
+g2
+Ntp6502
+Rp6503
+(dp6504
+g68
+Nsg576
+Nsg64
+g6500
+sg191
+g6225
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp6505
+Vpriority
+p6506
+g6481
+stp6507
+Rp6508
+(dp6509
+g22
+(lp6510
+g6506
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp6511
+Rp6512
+(dp6513
+g191
+g0
+(g47
+g2
+Ntp6514
+Rp6515
+(dp6516
+g51
+Vsection
+p6517
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I316
+sg55
+g6225
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6518
+g6515
+atp6519
+Rp6520
+sg62
+Nsg63
+Nsg64
+g6517
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6521
+g6512
+atp6522
+Rp6523
+(dp6524
+g22
+(lp6525
+g6512
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp6526
+Rp6527
+sg85
+g28
+((lp6528
+tp6529
+Rp6530
+sbsg193
+Nsg576
+Nsg64
+Voverride_section
+p6531
+sg578
+Vsection.id
+p6532
+sg580
+g0
+(g581
+g2
+Ntp6533
+Rp6534
+(dp6535
+g68
+Nsg576
+Nsg64
+g6531
+sg191
+g6225
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp6536
+Vsection
+p6537
+g6512
+stp6538
+Rp6539
+(dp6540
+g22
+(lp6541
+g6537
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp6542
+Rp6543
+(dp6544
+g191
+g0
+(g47
+g2
+Ntp6545
+Rp6546
+(dp6547
+g54
+I313
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vsuite
+p6548
+sg55
+g6225
+sg3105
+g28
+((lp6549
+g6546
+atp6550
+Rp6551
+sg64
+g6548
+sg58
+g28
+((lp6552
+g6546
+atp6553
+Rp6554
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6555
+g6543
+atp6556
+Rp6557
+(dp6558
+g22
+(lp6559
+g6543
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp6560
+Rp6561
+sg85
+g28
+((lp6562
+tp6563
+Rp6564
+sbsg193
+Nsg576
+Nsg64
+Voverride_suite
+p6565
+sg578
+Vsuite.id
+p6566
+sg580
+g0
+(g581
+g2
+Ntp6567
+Rp6568
+(dp6569
+g68
+Nsg576
+Nsg64
+g6565
+sg191
+g6225
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp6570
+Vsuite
+p6571
+g6543
+stp6572
+Rp6573
+(dp6574
+g22
+(lp6575
+g6571
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g3134
+sg593
+I00
+sbag0
+(g558
+g2
+Ntp6576
+Rp6577
+(dp6578
+g191
+g0
+(g47
+g2
+Ntp6579
+Rp6580
+(dp6581
+g54
+I317
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vtype
+p6582
+sg55
+g6225
+sg3105
+g28
+((lp6583
+g6580
+atp6584
+Rp6585
+sg64
+g6582
+sg58
+g28
+((lp6586
+g6580
+atp6587
+Rp6588
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6589
+g6577
+atp6590
+Rp6591
+(dp6592
+g22
+(lp6593
+g6577
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp6594
+Rp6595
+sg85
+g28
+((lp6596
+tp6597
+Rp6598
+sbsg193
+Nsg576
+Nsg64
+Voverride_type
+p6599
+sg578
+Voverride_type.id
+p6600
+sg580
+g0
+(g581
+g2
+Ntp6601
+Rp6602
+(dp6603
+g68
+Nsg576
+Nsg64
+g6599
+sg191
+g6225
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp6604
+Vtype
+p6605
+g6577
+stp6606
+Rp6607
+(dp6608
+g22
+(lp6609
+g6605
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g0
+(g47
+g2
+Ntp6610
+Rp6611
+(dp6612
+g51
+Vid
+p6613
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp6614
+Rp6615
+(dp6616
+g97
+g6611
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp6617
+Rp6618
+(dp6619
+g104
+Vnextval('override_type_id_seq'::regclass)
+p6620
+sg106
+Nsg107
+Nsg108
+(dp6621
+sbsbsg54
+I330
+sg55
+g0
+(g9
+g2
+Ntp6622
+Rp6623
+(dp6624
+g13
+S'override_type'
+p6625
+sg15
+Nsg16
+g17
+((lp6626
+tp6627
+Rp6628
+(dp6629
+g22
+(lp6630
+sbsg24
+(lp6631
+sg26
+Nsg27
+g28
+((lp6632
+tp6633
+Rp6634
+sg32
+g33
+(g34
+tp6635
+Rp6636
+sg37
+g0
+(g38
+g2
+Ntp6637
+Rp6638
+(dp6639
+g42
+g0
+(g43
+g44
+(dp6640
+Vcreated
+p6641
+g0
+(g47
+g2
+Ntp6642
+Rp6643
+(dp6644
+g51
+g6641
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp6645
+Rp6646
+(dp6647
+g97
+g6643
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp6648
+Rp6649
+(dp6650
+g104
+Vnow()
+p6651
+sg106
+Nsg107
+Nsg108
+(dp6652
+sbsbsg54
+I332
+sg55
+g6623
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6653
+g6643
+atp6654
+Rp6655
+sg62
+Nsg63
+Nsg64
+g6641
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6656
+tp6657
+Rp6658
+(dp6659
+g22
+(lp6660
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp6661
+Rp6662
+(dp6663
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp6664
+tp6665
+Rp6666
+sbsVtype
+p6667
+g0
+(g47
+g2
+Ntp6668
+Rp6669
+(dp6670
+g51
+g6667
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I331
+sg55
+g6623
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6671
+g6669
+atp6672
+Rp6673
+sg62
+Nsg63
+Nsg64
+g6667
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6674
+tp6675
+Rp6676
+(dp6677
+g22
+(lp6678
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp6679
+Rp6680
+(dp6681
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp6682
+tp6683
+Rp6684
+sbsg6613
+g6611
+sVmodified
+p6685
+g0
+(g47
+g2
+Ntp6686
+Rp6687
+(dp6688
+g51
+g6685
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp6689
+Rp6690
+(dp6691
+g97
+g6687
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp6692
+Rp6693
+(dp6694
+g104
+Vnow()
+p6695
+sg106
+Nsg107
+Nsg108
+(dp6696
+sbsbsg54
+I333
+sg55
+g6623
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6697
+g6687
+atp6698
+Rp6699
+sg62
+Nsg63
+Nsg64
+g6685
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6700
+tp6701
+Rp6702
+(dp6703
+g22
+(lp6704
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp6705
+Rp6706
+(dp6707
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp6708
+tp6709
+Rp6710
+sbstp6711
+Rp6712
+(dp6713
+g22
+(lp6714
+g6613
+ag6667
+ag6641
+ag6685
+asbsbsg64
+Voverride_type
+p6715
+sg183
+g0
+(g184
+g2
+Ntp6716
+Rp6717
+(dp6718
+g188
+(lp6719
+g6611
+asg64
+Voverride_type_pkey
+p6720
+sg191
+g6623
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp6721
+Rp6722
+(dp6723
+g42
+g0
+(g43
+g44
+(dp6724
+g6613
+g6611
+stp6725
+Rp6726
+(dp6727
+g22
+(lp6728
+g6613
+asbsbsbsg204
+g4
+sg205
+g28
+((lp6729
+g0
+(g207
+g2
+Ntp6730
+Rp6731
+(dp6732
+g55
+g6623
+sg56
+I01
+sg64
+S'override_type_type_key'
+p6733
+sg195
+g0
+(g38
+g2
+Ntp6734
+Rp6735
+(dp6736
+g42
+g0
+(g43
+g44
+(dp6737
+g6667
+g6669
+stp6738
+Rp6739
+(dp6740
+g22
+(lp6741
+g6667
+asbsbsg220
+(dp6742
+sbatp6743
+Rp6744
+sg220
+(dp6745
+sg225
+g6715
+sg85
+g28
+((lp6746
+g6717
+atp6747
+Rp6748
+sg229
+I01
+sg230
+Nsbsg56
+Nsg57
+I01
+sg58
+g28
+((lp6749
+g6611
+atp6750
+Rp6751
+sg62
+Nsg63
+Nsg64
+g6613
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp6752
+tp6753
+Rp6754
+(dp6755
+g22
+(lp6756
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp6757
+Rp6758
+sg85
+g28
+((lp6759
+tp6760
+Rp6761
+sbsg593
+I00
+sbatp6762
+Rp6763
+(dp6764
+g22
+(lp6765
+g6230
+ag6481
+ag6512
+ag6543
+ag6577
+asbsg24
+(lp6766
+sg26
+Nsg27
+g28
+((lp6767
+tp6768
+Rp6769
+sg32
+g33
+(g34
+tp6770
+Rp6771
+sg37
+g0
+(g38
+g2
+Ntp6772
+Rp6773
+(dp6774
+g42
+g0
+(g43
+g44
+(dp6775
+Vmaintainer
+p6776
+g0
+(g47
+g2
+Ntp6777
+Rp6778
+(dp6779
+g51
+g6776
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I318
+sg55
+g6225
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6780
+g6778
+atp6781
+Rp6782
+sg62
+Nsg63
+Nsg64
+g6776
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6783
+tp6784
+Rp6785
+(dp6786
+g22
+(lp6787
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp6788
+Rp6789
+(dp6790
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp6791
+tp6792
+Rp6793
+sbsVpackage
+p6794
+g0
+(g47
+g2
+Ntp6795
+Rp6796
+(dp6797
+g51
+g6794
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I312
+sg55
+g6225
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp6798
+g6796
+atp6799
+Rp6800
+sg62
+Nsg63
+Nsg64
+g6794
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6801
+tp6802
+Rp6803
+(dp6804
+g22
+(lp6805
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp6806
+Rp6807
+(dp6808
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp6809
+tp6810
+Rp6811
+sbsg6517
+g6515
+sVcreated
+p6812
+g0
+(g47
+g2
+Ntp6813
+Rp6814
+(dp6815
+g51
+g6812
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp6816
+Rp6817
+(dp6818
+g97
+g6814
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp6819
+Rp6820
+(dp6821
+g104
+Vnow()
+p6822
+sg106
+Nsg107
+Nsg108
+(dp6823
+sbsbsg54
+I319
+sg55
+g6225
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6824
+g6814
+atp6825
+Rp6826
+sg62
+Nsg63
+Nsg64
+g6812
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6827
+tp6828
+Rp6829
+(dp6830
+g22
+(lp6831
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp6832
+Rp6833
+(dp6834
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp6835
+tp6836
+Rp6837
+sbsg6235
+g6233
+sVmodified
+p6838
+g0
+(g47
+g2
+Ntp6839
+Rp6840
+(dp6841
+g51
+g6838
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp6842
+Rp6843
+(dp6844
+g97
+g6840
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp6845
+Rp6846
+(dp6847
+g104
+Vnow()
+p6848
+sg106
+Nsg107
+Nsg108
+(dp6849
+sbsbsg54
+I320
+sg55
+g6225
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp6850
+g6840
+atp6851
+Rp6852
+sg62
+Nsg63
+Nsg64
+g6838
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6853
+tp6854
+Rp6855
+(dp6856
+g22
+(lp6857
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp6858
+Rp6859
+(dp6860
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp6861
+tp6862
+Rp6863
+sbsg6486
+g6484
+sg6548
+g6546
+sg6582
+g6580
+stp6864
+Rp6865
+(dp6866
+g22
+(lp6867
+g6794
+ag6548
+ag6235
+ag6486
+ag6517
+ag6582
+ag6776
+ag6812
+ag6838
+asbsbsg64
+g6223
+sg183
+g0
+(g184
+g2
+Ntp6868
+Rp6869
+(dp6870
+g188
+(lp6871
+g6546
+ag6233
+ag6796
+ag6580
+asg64
+Voverride_pkey
+p6872
+sg191
+g6225
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp6873
+Rp6874
+(dp6875
+g42
+g0
+(g43
+g44
+(dp6876
+g6235
+g6233
+sg6548
+g6546
+sg6582
+g6580
+sg6794
+g6796
+stp6877
+Rp6878
+(dp6879
+g22
+(lp6880
+g6548
+ag6235
+ag6794
+ag6582
+asbsbsbsg204
+g4
+sg205
+g28
+((lp6881
+g0
+(g207
+g2
+Ntp6882
+Rp6883
+(dp6884
+g55
+g6225
+sg56
+I00
+sg64
+S'jjt_override_type_idx'
+p6885
+sg195
+g0
+(g38
+g2
+Ntp6886
+Rp6887
+(dp6888
+g42
+g0
+(g43
+g44
+(dp6889
+g6582
+g6580
+stp6890
+Rp6891
+(dp6892
+g22
+(lp6893
+g6582
+asbsbsg220
+(dp6894
+sbag0
+(g207
+g2
+Ntp6895
+Rp6896
+(dp6897
+g55
+g6225
+sg56
+I00
+sg64
+S'override_by_package'
+p6898
+sg195
+g0
+(g38
+g2
+Ntp6899
+Rp6900
+(dp6901
+g42
+g0
+(g43
+g44
+(dp6902
+g6794
+g6796
+stp6903
+Rp6904
+(dp6905
+g22
+(lp6906
+g6794
+asbsbsg220
+(dp6907
+sbag0
+(g207
+g2
+Ntp6908
+Rp6909
+(dp6910
+g55
+g6225
+sg56
+I01
+sg64
+S'override_suite_key'
+p6911
+sg195
+g0
+(g38
+g2
+Ntp6912
+Rp6913
+(dp6914
+g42
+g0
+(g43
+g44
+(dp6915
+g6235
+g6233
+sg6548
+g6546
+sg6582
+g6580
+sg6794
+g6796
+stp6916
+Rp6917
+(dp6918
+g22
+(lp6919
+g6548
+ag6235
+ag6794
+ag6582
+asbsbsg220
+(dp6920
+sbatp6921
+Rp6922
+sg220
+(dp6923
+sg225
+g6223
+sg85
+g28
+((lp6924
+g6255
+ag6568
+ag6503
+ag6869
+ag6602
+ag6534
+atp6925
+Rp6926
+sg229
+I01
+sg230
+Nsbsg3609
+g3146
+sS'newest_src_association'
+p6927
+g0
+(g9
+g2
+Ntp6928
+Rp6929
+(dp6930
+g15
+Nsg16
+g17
+((lp6931
+tp6932
+Rp6933
+(dp6934
+g22
+(lp6935
+sbsg24
+(lp6936
+sg26
+Nsg27
+g28
+((lp6937
+tp6938
+Rp6939
+sg32
+g33
+(g34
+tp6940
+Rp6941
+sg37
+g0
+(g38
+g2
+Ntp6942
+Rp6943
+(dp6944
+g42
+g0
+(g43
+g44
+(dp6945
+Vsource
+p6946
+g0
+(g47
+g2
+Ntp6947
+Rp6948
+(dp6949
+g51
+g6946
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I442
+sg55
+g6929
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g6946
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6950
+tp6951
+Rp6952
+(dp6953
+g22
+(lp6954
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp6955
+Rp6956
+(dp6957
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp6958
+tp6959
+Rp6960
+sbsVsuite
+p6961
+g0
+(g47
+g2
+Ntp6962
+Rp6963
+(dp6964
+g51
+g6961
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I444
+sg55
+g6929
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g6961
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6965
+tp6966
+Rp6967
+(dp6968
+g22
+(lp6969
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp6970
+Rp6971
+sg85
+g28
+((lp6972
+tp6973
+Rp6974
+sbsVversion
+p6975
+g0
+(g47
+g2
+Ntp6976
+Rp6977
+(dp6978
+g51
+g6975
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I443
+sg55
+g6929
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g6975
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6979
+tp6980
+Rp6981
+(dp6982
+g22
+(lp6983
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp6984
+Rp6985
+sg85
+g28
+((lp6986
+tp6987
+Rp6988
+sbsVid
+p6989
+g0
+(g47
+g2
+Ntp6990
+Rp6991
+(dp6992
+g51
+g6989
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I440
+sg55
+g6929
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g6989
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp6993
+tp6994
+Rp6995
+(dp6996
+g22
+(lp6997
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp6998
+Rp6999
+sg85
+g28
+((lp7000
+tp7001
+Rp7002
+sbsVsrc
+p7003
+g0
+(g47
+g2
+Ntp7004
+Rp7005
+(dp7006
+g51
+g7003
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I441
+sg55
+g6929
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g7003
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7007
+tp7008
+Rp7009
+(dp7010
+g22
+(lp7011
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp7012
+Rp7013
+sg85
+g28
+((lp7014
+tp7015
+Rp7016
+sbstp7017
+Rp7018
+(dp7019
+g22
+(lp7020
+g6989
+ag7003
+ag6946
+ag6975
+ag6961
+asbsbsg64
+g6927
+sg183
+g0
+(g184
+g2
+Ntp7021
+Rp7022
+(dp7023
+g188
+(lp7024
+sg64
+Nsg191
+g6929
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp7025
+Rp7026
+(dp7027
+g42
+g0
+(g43
+g44
+(dp7028
+tp7029
+Rp7030
+(dp7031
+g22
+(lp7032
+sbsbsbsg204
+g4
+sg205
+g28
+((lp7033
+tp7034
+Rp7035
+sg220
+(dp7036
+sg225
+g6927
+sg85
+g28
+((lp7037
+g7022
+atp7038
+Rp7039
+sg229
+I01
+sg230
+NsbsS'config'
+p7040
+g0
+(g9
+g2
+Ntp7041
+Rp7042
+(dp7043
+g13
+S'config'
+p7044
+sg15
+Nsg16
+g17
+((lp7045
+tp7046
+Rp7047
+(dp7048
+g22
+(lp7049
+sbsg24
+(lp7050
+sg26
+Nsg27
+g28
+((lp7051
+tp7052
+Rp7053
+sg32
+g33
+(g34
+tp7054
+Rp7055
+sg37
+g0
+(g38
+g2
+Ntp7056
+Rp7057
+(dp7058
+g42
+g0
+(g43
+g44
+(dp7059
+Vid
+p7060
+g0
+(g47
+g2
+Ntp7061
+Rp7062
+(dp7063
+g51
+g7060
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp7064
+Rp7065
+(dp7066
+g97
+g7062
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp7067
+Rp7068
+(dp7069
+g104
+Vnextval('config_id_seq'::regclass)
+p7070
+sg106
+Nsg107
+Nsg108
+(dp7071
+sbsbsg54
+I251
+sg55
+g7042
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp7072
+g7062
+atp7073
+Rp7074
+sg62
+Nsg63
+Nsg64
+g7060
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp7075
+tp7076
+Rp7077
+(dp7078
+g22
+(lp7079
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp7080
+Rp7081
+sg85
+g28
+((lp7082
+tp7083
+Rp7084
+sbsVname
+p7085
+g0
+(g47
+g2
+Ntp7086
+Rp7087
+(dp7088
+g51
+g7085
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I252
+sg55
+g7042
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7089
+g7087
+atp7090
+Rp7091
+sg62
+Nsg63
+Nsg64
+g7085
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7092
+tp7093
+Rp7094
+(dp7095
+g22
+(lp7096
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp7097
+Rp7098
+(dp7099
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp7100
+tp7101
+Rp7102
+sbsVmodified
+p7103
+g0
+(g47
+g2
+Ntp7104
+Rp7105
+(dp7106
+g51
+g7103
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp7107
+Rp7108
+(dp7109
+g97
+g7105
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp7110
+Rp7111
+(dp7112
+g104
+Vnow()
+p7113
+sg106
+Nsg107
+Nsg108
+(dp7114
+sbsbsg54
+I255
+sg55
+g7042
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7115
+g7105
+atp7116
+Rp7117
+sg62
+Nsg63
+Nsg64
+g7103
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7118
+tp7119
+Rp7120
+(dp7121
+g22
+(lp7122
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp7123
+Rp7124
+(dp7125
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp7126
+tp7127
+Rp7128
+sbsVvalue
+p7129
+g0
+(g47
+g2
+Ntp7130
+Rp7131
+(dp7132
+g51
+g7129
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I253
+sg55
+g7042
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7133
+g7131
+atp7134
+Rp7135
+sg62
+Nsg63
+Nsg64
+g7129
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7136
+tp7137
+Rp7138
+(dp7139
+g22
+(lp7140
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp7141
+Rp7142
+(dp7143
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp7144
+tp7145
+Rp7146
+sbsVcreated
+p7147
+g0
+(g47
+g2
+Ntp7148
+Rp7149
+(dp7150
+g51
+g7147
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp7151
+Rp7152
+(dp7153
+g97
+g7149
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp7154
+Rp7155
+(dp7156
+g104
+Vnow()
+p7157
+sg106
+Nsg107
+Nsg108
+(dp7158
+sbsbsg54
+I254
+sg55
+g7042
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7159
+g7149
+atp7160
+Rp7161
+sg62
+Nsg63
+Nsg64
+g7147
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7162
+tp7163
+Rp7164
+(dp7165
+g22
+(lp7166
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp7167
+Rp7168
+(dp7169
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp7170
+tp7171
+Rp7172
+sbstp7173
+Rp7174
+(dp7175
+g22
+(lp7176
+g7060
+ag7085
+ag7129
+ag7147
+ag7103
+asbsbsg64
+g7040
+sg183
+g0
+(g184
+g2
+Ntp7177
+Rp7178
+(dp7179
+g188
+(lp7180
+g7062
+asg64
+Vconfig_pkey
+p7181
+sg191
+g7042
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp7182
+Rp7183
+(dp7184
+g42
+g0
+(g43
+g44
+(dp7185
+g7060
+g7062
+stp7186
+Rp7187
+(dp7188
+g22
+(lp7189
+g7060
+asbsbsbsg204
+g4
+sg205
+g28
+((lp7190
+g0
+(g207
+g2
+Ntp7191
+Rp7192
+(dp7193
+g55
+g7042
+sg56
+I01
+sg64
+S'config_name_key'
+p7194
+sg195
+g0
+(g38
+g2
+Ntp7195
+Rp7196
+(dp7197
+g42
+g0
+(g43
+g44
+(dp7198
+g7085
+g7087
+stp7199
+Rp7200
+(dp7201
+g22
+(lp7202
+g7085
+asbsbsg220
+(dp7203
+sbatp7204
+Rp7205
+sg220
+(dp7206
+sg225
+g7040
+sg85
+g28
+((lp7207
+g7178
+atp7208
+Rp7209
+sg229
+I01
+sg230
+NsbsS'changes_pending_source_files'
+p7210
+g0
+(g9
+g2
+Ntp7211
+Rp7212
+(dp7213
+g15
+Nsg16
+g17
+((lp7214
+g0
+(g558
+g2
+Ntp7215
+Rp7216
+(dp7217
+g191
+g0
+(g47
+g2
+Ntp7218
+Rp7219
+(dp7220
+g51
+Vpending_file_id
+p7221
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I281
+sg55
+g7212
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp7222
+g7219
+atp7223
+Rp7224
+sg62
+Nsg63
+Nsg64
+g7221
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7225
+g7216
+atp7226
+Rp7227
+(dp7228
+g22
+(lp7229
+g7216
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp7230
+Rp7231
+sg85
+g28
+((lp7232
+tp7233
+Rp7234
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_source_files_pending_file_id_fkey
+p7235
+sg578
+Vchanges_pending_files.id
+p7236
+sg580
+g0
+(g581
+g2
+Ntp7237
+Rp7238
+(dp7239
+g68
+Nsg576
+Nsg64
+g7235
+sg191
+g7212
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp7240
+Vpending_file_id
+p7241
+g7216
+stp7242
+Rp7243
+(dp7244
+g22
+(lp7245
+g7241
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp7246
+Rp7247
+(dp7248
+g191
+g0
+(g47
+g2
+Ntp7249
+Rp7250
+(dp7251
+g51
+Vpending_source_id
+p7252
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I280
+sg55
+g7212
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp7253
+g7250
+atp7254
+Rp7255
+sg62
+Nsg63
+Nsg64
+g7252
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7256
+g7247
+atp7257
+Rp7258
+(dp7259
+g22
+(lp7260
+g7247
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp7261
+Rp7262
+sg85
+g28
+((lp7263
+tp7264
+Rp7265
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_source_files_pending_source_id_fkey
+p7266
+sg578
+Vchanges_pending_source.id
+p7267
+sg580
+g0
+(g581
+g2
+Ntp7268
+Rp7269
+(dp7270
+g68
+Nsg576
+Nsg64
+g7266
+sg191
+g7212
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp7271
+Vpending_source_id
+p7272
+g7247
+stp7273
+Rp7274
+(dp7275
+g22
+(lp7276
+g7272
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp7277
+Rp7278
+(dp7279
+g22
+(lp7280
+g7216
+ag7247
+asbsg24
+(lp7281
+sg26
+Nsg27
+g28
+((lp7282
+tp7283
+Rp7284
+sg32
+g33
+(g34
+tp7285
+Rp7286
+sg37
+g0
+(g38
+g2
+Ntp7287
+Rp7288
+(dp7289
+g42
+g0
+(g43
+g44
+(dp7290
+g7221
+g7219
+sg7252
+g7250
+sVmodified
+p7291
+g0
+(g47
+g2
+Ntp7292
+Rp7293
+(dp7294
+g51
+g7291
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp7295
+Rp7296
+(dp7297
+g97
+g7293
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp7298
+Rp7299
+(dp7300
+g104
+Vnow()
+p7301
+sg106
+Nsg107
+Nsg108
+(dp7302
+sbsbsg54
+I283
+sg55
+g7212
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g7291
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7303
+tp7304
+Rp7305
+(dp7306
+g22
+(lp7307
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp7308
+Rp7309
+(dp7310
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp7311
+tp7312
+Rp7313
+sbsVcreated
+p7314
+g0
+(g47
+g2
+Ntp7315
+Rp7316
+(dp7317
+g51
+g7314
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp7318
+Rp7319
+(dp7320
+g97
+g7316
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp7321
+Rp7322
+(dp7323
+g104
+Vnow()
+p7324
+sg106
+Nsg107
+Nsg108
+(dp7325
+sbsbsg54
+I282
+sg55
+g7212
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g7314
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7326
+tp7327
+Rp7328
+(dp7329
+g22
+(lp7330
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp7331
+Rp7332
+(dp7333
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp7334
+tp7335
+Rp7336
+sbstp7337
+Rp7338
+(dp7339
+g22
+(lp7340
+g7252
+ag7221
+ag7314
+ag7291
+asbsbsg64
+g7210
+sg183
+g0
+(g184
+g2
+Ntp7341
+Rp7342
+(dp7343
+g188
+(lp7344
+g7250
+ag7219
+asg64
+Vchanges_pending_source_files_pkey
+p7345
+sg191
+g7212
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp7346
+Rp7347
+(dp7348
+g42
+g0
+(g43
+g44
+(dp7349
+g7221
+g7219
+sg7252
+g7250
+stp7350
+Rp7351
+(dp7352
+g22
+(lp7353
+g7252
+ag7221
+asbsbsbsg204
+g4
+sg205
+g28
+((lp7354
+tp7355
+Rp7356
+sg220
+(dp7357
+sg225
+g7210
+sg85
+g28
+((lp7358
+g7342
+ag7238
+ag7269
+atp7359
+Rp7360
+sg229
+I01
+sg230
+NsbsVfiles
+p7361
+g0
+(g9
+g2
+Ntp7362
+Rp7363
+(dp7364
+g13
+S'files'
+p7365
+sg15
+Nsg16
+g17
+((lp7366
+g0
+(g558
+g2
+Ntp7367
+Rp7368
+(dp7369
+g191
+g0
+(g47
+g2
+Ntp7370
+Rp7371
+(dp7372
+g51
+Vlocation
+p7373
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I80
+sg55
+g7363
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7374
+g7371
+atp7375
+Rp7376
+sg62
+Nsg63
+Nsg64
+g7373
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7377
+g7368
+atp7378
+Rp7379
+(dp7380
+g22
+(lp7381
+g7368
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp7382
+Rp7383
+sg85
+g28
+((lp7384
+tp7385
+Rp7386
+sbsg193
+Nsg576
+Nsg64
+Vfiles_location
+p7387
+sg578
+Vlocation.id
+p7388
+sg580
+g0
+(g581
+g2
+Ntp7389
+Rp7390
+(dp7391
+g68
+Nsg576
+Nsg64
+g7387
+sg191
+g7363
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp7392
+Vlocation
+p7393
+g7368
+stp7394
+Rp7395
+(dp7396
+g22
+(lp7397
+g7393
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp7398
+Rp7399
+(dp7400
+g22
+(lp7401
+g7368
+asbsg24
+(lp7402
+sg26
+Nsg27
+g28
+((lp7403
+tp7404
+Rp7405
+sg32
+g33
+(g34
+tp7406
+Rp7407
+sg37
+g0
+(g38
+g2
+Ntp7408
+Rp7409
+(dp7410
+g42
+g0
+(g43
+g44
+(dp7411
+Vsize
+p7412
+g0
+(g47
+g2
+Ntp7413
+Rp7414
+(dp7415
+g51
+g7412
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I78
+sg55
+g7363
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7416
+g7414
+atp7417
+Rp7418
+sg62
+Nsg63
+Nsg64
+g7412
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7419
+tp7420
+Rp7421
+(dp7422
+g22
+(lp7423
+sbsg75
+Nsg76
+g0
+(g6000
+g2
+Ntp7424
+Rp7425
+sg85
+g28
+((lp7426
+tp7427
+Rp7428
+sbsVlast_used
+p7429
+g0
+(g47
+g2
+Ntp7430
+Rp7431
+(dp7432
+g51
+g7429
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I81
+sg55
+g7363
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7433
+g7431
+atp7434
+Rp7435
+sg62
+Nsg63
+Nsg64
+g7429
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7436
+tp7437
+Rp7438
+(dp7439
+g22
+(lp7440
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp7441
+Rp7442
+(dp7443
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp7444
+tp7445
+Rp7446
+sbsVcreated
+p7447
+g0
+(g47
+g2
+Ntp7448
+Rp7449
+(dp7450
+g51
+g7447
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp7451
+Rp7452
+(dp7453
+g97
+g7449
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp7454
+Rp7455
+(dp7456
+g104
+Vnow()
+p7457
+sg106
+Nsg107
+Nsg108
+(dp7458
+sbsbsg54
+I84
+sg55
+g7363
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7459
+g7449
+atp7460
+Rp7461
+sg62
+Nsg63
+Nsg64
+g7447
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7462
+tp7463
+Rp7464
+(dp7465
+g22
+(lp7466
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp7467
+Rp7468
+(dp7469
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp7470
+tp7471
+Rp7472
+sbsVmd5sum
+p7473
+g0
+(g47
+g2
+Ntp7474
+Rp7475
+(dp7476
+g51
+g7473
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I79
+sg55
+g7363
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7477
+g7475
+atp7478
+Rp7479
+sg62
+Nsg63
+Nsg64
+g7473
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7480
+tp7481
+Rp7482
+(dp7483
+g22
+(lp7484
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp7485
+Rp7486
+(dp7487
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp7488
+tp7489
+Rp7490
+sbsVmodified
+p7491
+g0
+(g47
+g2
+Ntp7492
+Rp7493
+(dp7494
+g51
+g7491
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp7495
+Rp7496
+(dp7497
+g97
+g7493
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp7498
+Rp7499
+(dp7500
+g104
+Vnow()
+p7501
+sg106
+Nsg107
+Nsg108
+(dp7502
+sbsbsg54
+I85
+sg55
+g7363
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7503
+g7493
+atp7504
+Rp7505
+sg62
+Nsg63
+Nsg64
+g7491
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7506
+tp7507
+Rp7508
+(dp7509
+g22
+(lp7510
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp7511
+Rp7512
+(dp7513
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp7514
+tp7515
+Rp7516
+sbsVfilename
+p7517
+g0
+(g47
+g2
+Ntp7518
+Rp7519
+(dp7520
+g51
+g7517
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I77
+sg55
+g7363
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7521
+g7519
+atp7522
+Rp7523
+sg62
+Nsg63
+Nsg64
+g7517
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7524
+tp7525
+Rp7526
+(dp7527
+g22
+(lp7528
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp7529
+Rp7530
+(dp7531
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp7532
+tp7533
+Rp7534
+sbsg7373
+g7371
+sVsha256sum
+p7535
+g0
+(g47
+g2
+Ntp7536
+Rp7537
+(dp7538
+g51
+g7535
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I83
+sg55
+g7363
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7539
+g7537
+atp7540
+Rp7541
+sg62
+Nsg63
+Nsg64
+g7535
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7542
+tp7543
+Rp7544
+(dp7545
+g22
+(lp7546
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp7547
+Rp7548
+(dp7549
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp7550
+tp7551
+Rp7552
+sbsVid
+p7553
+g0
+(g47
+g2
+Ntp7554
+Rp7555
+(dp7556
+g51
+g7553
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp7557
+Rp7558
+(dp7559
+g97
+g7555
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp7560
+Rp7561
+(dp7562
+g104
+Vnextval('files_id_seq'::regclass)
+p7563
+sg106
+Nsg107
+Nsg108
+(dp7564
+sbsbsg54
+I76
+sg55
+g7363
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp7565
+g7555
+atp7566
+Rp7567
+sg62
+Nsg63
+Nsg64
+g7553
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp7568
+tp7569
+Rp7570
+(dp7571
+g22
+(lp7572
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp7573
+Rp7574
+sg85
+g28
+((lp7575
+tp7576
+Rp7577
+sbsVsha1sum
+p7578
+g0
+(g47
+g2
+Ntp7579
+Rp7580
+(dp7581
+g51
+g7578
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I82
+sg55
+g7363
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7582
+g7580
+atp7583
+Rp7584
+sg62
+Nsg63
+Nsg64
+g7578
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7585
+tp7586
+Rp7587
+(dp7588
+g22
+(lp7589
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp7590
+Rp7591
+(dp7592
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp7593
+tp7594
+Rp7595
+sbstp7596
+Rp7597
+(dp7598
+g22
+(lp7599
+g7553
+ag7517
+ag7412
+ag7473
+ag7373
+ag7429
+ag7578
+ag7535
+ag7447
+ag7491
+asbsbsg64
+g7361
+sg183
+g0
+(g184
+g2
+Ntp7600
+Rp7601
+(dp7602
+g188
+(lp7603
+g7555
+asg64
+Vfiles_pkey
+p7604
+sg191
+g7363
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp7605
+Rp7606
+(dp7607
+g42
+g0
+(g43
+g44
+(dp7608
+g7553
+g7555
+stp7609
+Rp7610
+(dp7611
+g22
+(lp7612
+g7553
+asbsbsbsg204
+g4
+sg205
+g28
+((lp7613
+g0
+(g207
+g2
+Ntp7614
+Rp7615
+(dp7616
+g55
+g7363
+sg56
+I01
+sg64
+S'files_filename_key'
+p7617
+sg195
+g0
+(g38
+g2
+Ntp7618
+Rp7619
+(dp7620
+g42
+g0
+(g43
+g44
+(dp7621
+g7373
+g7371
+sg7517
+g7519
+stp7622
+Rp7623
+(dp7624
+g22
+(lp7625
+g7517
+ag7373
+asbsbsg220
+(dp7626
+sbag0
+(g207
+g2
+Ntp7627
+Rp7628
+(dp7629
+g55
+g7363
+sg56
+I00
+sg64
+S'files_last_used'
+p7630
+sg195
+g0
+(g38
+g2
+Ntp7631
+Rp7632
+(dp7633
+g42
+g0
+(g43
+g44
+(dp7634
+g7429
+g7431
+stp7635
+Rp7636
+(dp7637
+g22
+(lp7638
+g7429
+asbsbsg220
+(dp7639
+sbag0
+(g207
+g2
+Ntp7640
+Rp7641
+(dp7642
+g55
+g7363
+sg56
+I00
+sg64
+S'jjt2'
+p7643
+sg195
+g0
+(g38
+g2
+Ntp7644
+Rp7645
+(dp7646
+g42
+g0
+(g43
+g44
+(dp7647
+g7373
+g7371
+stp7648
+Rp7649
+(dp7650
+g22
+(lp7651
+g7373
+asbsbsg220
+(dp7652
+sbag0
+(g207
+g2
+Ntp7653
+Rp7654
+(dp7655
+g55
+g7363
+sg56
+I00
+sg64
+S'jjt'
+p7656
+sg195
+g0
+(g38
+g2
+Ntp7657
+Rp7658
+(dp7659
+g42
+g0
+(g43
+g44
+(dp7660
+g7553
+g7555
+stp7661
+Rp7662
+(dp7663
+g22
+(lp7664
+g7553
+asbsbsg220
+(dp7665
+sbag0
+(g207
+g2
+Ntp7666
+Rp7667
+(dp7668
+g55
+g7363
+sg56
+I00
+sg64
+S'jjt3'
+p7669
+sg195
+g0
+(g38
+g2
+Ntp7670
+Rp7671
+(dp7672
+g42
+g0
+(g43
+g44
+(dp7673
+g7553
+g7555
+sg7373
+g7371
+stp7674
+Rp7675
+(dp7676
+g22
+(lp7677
+g7553
+ag7373
+asbsbsg220
+(dp7678
+sbatp7679
+Rp7680
+sg220
+(dp7681
+sg225
+g7361
+sg85
+g28
+((lp7682
+g7601
+ag7390
+atp7683
+Rp7684
+sg229
+I01
+sg230
+NsbsS'binfiles_suite_component_arch'
+p7685
+g0
+(g9
+g2
+Ntp7686
+Rp7687
+(dp7688
+g15
+Nsg16
+g17
+((lp7689
+tp7690
+Rp7691
+(dp7692
+g22
+(lp7693
+sbsg24
+(lp7694
+sg26
+Nsg27
+g28
+((lp7695
+tp7696
+Rp7697
+sg32
+g33
+(g34
+tp7698
+Rp7699
+sg37
+g0
+(g38
+g2
+Ntp7700
+Rp7701
+(dp7702
+g42
+g0
+(g43
+g44
+(dp7703
+Vtype
+p7704
+g0
+(g47
+g2
+Ntp7705
+Rp7706
+(dp7707
+g51
+g7704
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I414
+sg55
+g7687
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g7704
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7708
+tp7709
+Rp7710
+(dp7711
+g22
+(lp7712
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp7713
+Rp7714
+(dp7715
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp7716
+tp7717
+Rp7718
+sbsVarchitecture
+p7719
+g0
+(g47
+g2
+Ntp7720
+Rp7721
+(dp7722
+g51
+g7719
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I418
+sg55
+g7687
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g7719
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7723
+tp7724
+Rp7725
+(dp7726
+g22
+(lp7727
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp7728
+Rp7729
+sg85
+g28
+((lp7730
+tp7731
+Rp7732
+sbsVpath
+p7733
+g0
+(g47
+g2
+Ntp7734
+Rp7735
+(dp7736
+g51
+g7733
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I415
+sg55
+g7687
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g7733
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7737
+tp7738
+Rp7739
+(dp7740
+g22
+(lp7741
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp7742
+Rp7743
+(dp7744
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp7745
+tp7746
+Rp7747
+sbsVsuite
+p7748
+g0
+(g47
+g2
+Ntp7749
+Rp7750
+(dp7751
+g51
+g7748
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I417
+sg55
+g7687
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g7748
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7752
+tp7753
+Rp7754
+(dp7755
+g22
+(lp7756
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp7757
+Rp7758
+sg85
+g28
+((lp7759
+tp7760
+Rp7761
+sbsVcomponent
+p7762
+g0
+(g47
+g2
+Ntp7763
+Rp7764
+(dp7765
+g51
+g7762
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I416
+sg55
+g7687
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g7762
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7766
+tp7767
+Rp7768
+(dp7769
+g22
+(lp7770
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp7771
+Rp7772
+sg85
+g28
+((lp7773
+tp7774
+Rp7775
+sbsVfilename
+p7776
+g0
+(g47
+g2
+Ntp7777
+Rp7778
+(dp7779
+g51
+g7776
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I413
+sg55
+g7687
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g7776
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7780
+tp7781
+Rp7782
+(dp7783
+g22
+(lp7784
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp7785
+Rp7786
+(dp7787
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp7788
+tp7789
+Rp7790
+sbstp7791
+Rp7792
+(dp7793
+g22
+(lp7794
+g7776
+ag7704
+ag7733
+ag7762
+ag7748
+ag7719
+asbsbsg64
+g7685
+sg183
+g0
+(g184
+g2
+Ntp7795
+Rp7796
+(dp7797
+g188
+(lp7798
+sg64
+Nsg191
+g7687
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp7799
+Rp7800
+(dp7801
+g42
+g0
+(g43
+g44
+(dp7802
+tp7803
+Rp7804
+(dp7805
+g22
+(lp7806
+sbsbsbsg204
+g4
+sg205
+g28
+((lp7807
+tp7808
+Rp7809
+sg220
+(dp7810
+sg225
+g7685
+sg85
+g28
+((lp7811
+g7796
+atp7812
+Rp7813
+sg229
+I01
+sg230
+NsbsS'src_contents'
+p7814
+g0
+(g9
+g2
+Ntp7815
+Rp7816
+(dp7817
+g13
+S'src_contents'
+p7818
+sg15
+Nsg16
+g17
+((lp7819
+g0
+(g558
+g2
+Ntp7820
+Rp7821
+(dp7822
+g191
+g0
+(g47
+g2
+Ntp7823
+Rp7824
+(dp7825
+g54
+I343
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vsource_id
+p7826
+sg55
+g7816
+sg3105
+g28
+((lp7827
+g7824
+atp7828
+Rp7829
+sg64
+g7826
+sg58
+g28
+((lp7830
+g7824
+atp7831
+Rp7832
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7833
+g7821
+atp7834
+Rp7835
+(dp7836
+g22
+(lp7837
+g7821
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp7838
+Rp7839
+sg85
+g28
+((lp7840
+tp7841
+Rp7842
+sbsg193
+Nsg576
+Nsg64
+Vsrc_contents_source_id_fkey
+p7843
+sg578
+Vsource.id
+p7844
+sg580
+g0
+(g581
+g2
+Ntp7845
+Rp7846
+(dp7847
+g68
+Nsg576
+Nsg64
+g7843
+sg191
+g7816
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp7848
+Vsource_id
+p7849
+g7821
+stp7850
+Rp7851
+(dp7852
+g22
+(lp7853
+g7849
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g5165
+sg593
+I00
+sbatp7854
+Rp7855
+(dp7856
+g22
+(lp7857
+g7821
+asbsg24
+(lp7858
+sg26
+Nsg27
+g28
+((lp7859
+tp7860
+Rp7861
+sg32
+g33
+(g34
+tp7862
+Rp7863
+sg37
+g0
+(g38
+g2
+Ntp7864
+Rp7865
+(dp7866
+g42
+g0
+(g43
+g44
+(dp7867
+g7826
+g7824
+sVmodified
+p7868
+g0
+(g47
+g2
+Ntp7869
+Rp7870
+(dp7871
+g51
+g7868
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp7872
+Rp7873
+(dp7874
+g97
+g7870
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp7875
+Rp7876
+(dp7877
+g104
+Vnow()
+p7878
+sg106
+Nsg107
+Nsg108
+(dp7879
+sbsbsg54
+I345
+sg55
+g7816
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7880
+g7870
+atp7881
+Rp7882
+sg62
+Nsg63
+Nsg64
+g7868
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7883
+tp7884
+Rp7885
+(dp7886
+g22
+(lp7887
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp7888
+Rp7889
+(dp7890
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp7891
+tp7892
+Rp7893
+sbsVfile
+p7894
+g0
+(g47
+g2
+Ntp7895
+Rp7896
+(dp7897
+g51
+g7894
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I342
+sg55
+g7816
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp7898
+g7896
+atp7899
+Rp7900
+sg62
+Nsg63
+Nsg64
+g7894
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7901
+tp7902
+Rp7903
+(dp7904
+g22
+(lp7905
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp7906
+Rp7907
+(dp7908
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp7909
+tp7910
+Rp7911
+sbsVcreated
+p7912
+g0
+(g47
+g2
+Ntp7913
+Rp7914
+(dp7915
+g51
+g7912
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp7916
+Rp7917
+(dp7918
+g97
+g7914
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp7919
+Rp7920
+(dp7921
+g104
+Vnow()
+p7922
+sg106
+Nsg107
+Nsg108
+(dp7923
+sbsbsg54
+I344
+sg55
+g7816
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp7924
+g7914
+atp7925
+Rp7926
+sg62
+Nsg63
+Nsg64
+g7912
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7927
+tp7928
+Rp7929
+(dp7930
+g22
+(lp7931
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp7932
+Rp7933
+(dp7934
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp7935
+tp7936
+Rp7937
+sbstp7938
+Rp7939
+(dp7940
+g22
+(lp7941
+g7894
+ag7826
+ag7912
+ag7868
+asbsbsg64
+g7814
+sg183
+g0
+(g184
+g2
+Ntp7942
+Rp7943
+(dp7944
+g188
+(lp7945
+g7896
+ag7824
+asg64
+Vsrc_contents_pkey
+p7946
+sg191
+g7816
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp7947
+Rp7948
+(dp7949
+g42
+g0
+(g43
+g44
+(dp7950
+g7826
+g7824
+sg7894
+g7896
+stp7951
+Rp7952
+(dp7953
+g22
+(lp7954
+g7894
+ag7826
+asbsbsbsg204
+g4
+sg205
+g28
+((lp7955
+g0
+(g207
+g2
+Ntp7956
+Rp7957
+(dp7958
+g55
+g7816
+sg56
+I00
+sg64
+S'src_contents_source_id_idx'
+p7959
+sg195
+g0
+(g38
+g2
+Ntp7960
+Rp7961
+(dp7962
+g42
+g0
+(g43
+g44
+(dp7963
+g7826
+g7824
+stp7964
+Rp7965
+(dp7966
+g22
+(lp7967
+g7826
+asbsbsg220
+(dp7968
+sbatp7969
+Rp7970
+sg220
+(dp7971
+sg225
+g7814
+sg85
+g28
+((lp7972
+g7943
+ag7846
+atp7973
+Rp7974
+sg229
+I01
+sg230
+NsbsS'obsolete_any_by_all_associations'
+p7975
+g0
+(g9
+g2
+Ntp7976
+Rp7977
+(dp7978
+g15
+Nsg16
+g17
+((lp7979
+tp7980
+Rp7981
+(dp7982
+g22
+(lp7983
+sbsg24
+(lp7984
+sg26
+Nsg27
+g28
+((lp7985
+tp7986
+Rp7987
+sg32
+g33
+(g34
+tp7988
+Rp7989
+sg37
+g0
+(g38
+g2
+Ntp7990
+Rp7991
+(dp7992
+g42
+g0
+(g43
+g44
+(dp7993
+Vsuite
+p7994
+g0
+(g47
+g2
+Ntp7995
+Rp7996
+(dp7997
+g51
+g7994
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I458
+sg55
+g7977
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g7994
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp7998
+tp7999
+Rp8000
+(dp8001
+g22
+(lp8002
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8003
+Rp8004
+sg85
+g28
+((lp8005
+tp8006
+Rp8007
+sbsVpackage
+p8008
+g0
+(g47
+g2
+Ntp8009
+Rp8010
+(dp8011
+g51
+g8008
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I456
+sg55
+g7977
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g8008
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8012
+tp8013
+Rp8014
+(dp8015
+g22
+(lp8016
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp8017
+Rp8018
+(dp8019
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp8020
+tp8021
+Rp8022
+sbsVversion
+p8023
+g0
+(g47
+g2
+Ntp8024
+Rp8025
+(dp8026
+g51
+g8023
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I457
+sg55
+g7977
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g8023
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8027
+tp8028
+Rp8029
+(dp8030
+g22
+(lp8031
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp8032
+Rp8033
+sg85
+g28
+((lp8034
+tp8035
+Rp8036
+sbsVarchitecture
+p8037
+g0
+(g47
+g2
+Ntp8038
+Rp8039
+(dp8040
+g51
+g8037
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I459
+sg55
+g7977
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g8037
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8041
+tp8042
+Rp8043
+(dp8044
+g22
+(lp8045
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8046
+Rp8047
+sg85
+g28
+((lp8048
+tp8049
+Rp8050
+sbsVid
+p8051
+g0
+(g47
+g2
+Ntp8052
+Rp8053
+(dp8054
+g51
+g8051
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I455
+sg55
+g7977
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g8051
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8055
+tp8056
+Rp8057
+(dp8058
+g22
+(lp8059
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8060
+Rp8061
+sg85
+g28
+((lp8062
+tp8063
+Rp8064
+sbstp8065
+Rp8066
+(dp8067
+g22
+(lp8068
+g8051
+ag8008
+ag8023
+ag7994
+ag8037
+asbsbsg64
+g7975
+sg183
+g0
+(g184
+g2
+Ntp8069
+Rp8070
+(dp8071
+g188
+(lp8072
+sg64
+Nsg191
+g7977
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp8073
+Rp8074
+(dp8075
+g42
+g0
+(g43
+g44
+(dp8076
+tp8077
+Rp8078
+(dp8079
+g22
+(lp8080
+sbsbsbsg204
+g4
+sg205
+g28
+((lp8081
+tp8082
+Rp8083
+sg220
+(dp8084
+sg225
+g7975
+sg85
+g28
+((lp8085
+g8070
+atp8086
+Rp8087
+sg229
+I01
+sg230
+NsbsS'build_queue_policy_files'
+p8088
+g0
+(g9
+g2
+Ntp8089
+Rp8090
+(dp8091
+g13
+S'build_queue_policy_files'
+p8092
+sg15
+Nsg16
+g17
+((lp8093
+g0
+(g558
+g2
+Ntp8094
+Rp8095
+(dp8096
+g191
+g0
+(g47
+g2
+Ntp8097
+Rp8098
+(dp8099
+g54
+I217
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vbuild_queue_id
+p8100
+sg55
+g8090
+sg3105
+g28
+((lp8101
+g8098
+atp8102
+Rp8103
+sg64
+g8100
+sg58
+g28
+((lp8104
+g8098
+atp8105
+Rp8106
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8107
+g8095
+atp8108
+Rp8109
+(dp8110
+g22
+(lp8111
+g8095
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8112
+Rp8113
+sg85
+g28
+((lp8114
+tp8115
+Rp8116
+sbsg193
+Nsg576
+Nsg64
+Vbuild_queue_policy_files_build_queue_id_fkey
+p8117
+sg578
+Vbuild_queue.id
+p8118
+sg580
+g0
+(g581
+g2
+Ntp8119
+Rp8120
+(dp8121
+g68
+Nsg576
+Nsg64
+g8117
+sg191
+g8090
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp8122
+Vbuild_queue_id
+p8123
+g8095
+stp8124
+Rp8125
+(dp8126
+g22
+(lp8127
+g8123
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g2047
+sg593
+I00
+sbag0
+(g558
+g2
+Ntp8128
+Rp8129
+(dp8130
+g191
+g0
+(g47
+g2
+Ntp8131
+Rp8132
+(dp8133
+g54
+I218
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vfile_id
+p8134
+sg55
+g8090
+sg3105
+g28
+((lp8135
+g8132
+atp8136
+Rp8137
+sg64
+g8134
+sg58
+g28
+((lp8138
+g8132
+atp8139
+Rp8140
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8141
+g8129
+atp8142
+Rp8143
+(dp8144
+g22
+(lp8145
+g8129
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8146
+Rp8147
+sg85
+g28
+((lp8148
+tp8149
+Rp8150
+sbsg193
+Nsg576
+Nsg64
+Vbuild_queue_policy_files_file_id_fkey
+p8151
+sg578
+Vchanges_pending_files.id
+p8152
+sg580
+g0
+(g581
+g2
+Ntp8153
+Rp8154
+(dp8155
+g68
+Nsg576
+Nsg64
+g8151
+sg191
+g8090
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp8156
+Vfile_id
+p8157
+g8129
+stp8158
+Rp8159
+(dp8160
+g22
+(lp8161
+g8157
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g5965
+sg593
+I00
+sbatp8162
+Rp8163
+(dp8164
+g22
+(lp8165
+g8095
+ag8129
+asbsg24
+(lp8166
+sg26
+Nsg27
+g28
+((lp8167
+tp8168
+Rp8169
+sg32
+g33
+(g34
+tp8170
+Rp8171
+sg37
+g0
+(g38
+g2
+Ntp8172
+Rp8173
+(dp8174
+g42
+g0
+(g43
+g44
+(dp8175
+Vfilename
+p8176
+g0
+(g47
+g2
+Ntp8177
+Rp8178
+(dp8179
+g51
+g8176
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I219
+sg55
+g8090
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp8180
+g8178
+atp8181
+Rp8182
+sg62
+Nsg63
+Nsg64
+g8176
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8183
+tp8184
+Rp8185
+(dp8186
+g22
+(lp8187
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp8188
+Rp8189
+(dp8190
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp8191
+tp8192
+Rp8193
+sbsVcreated
+p8194
+g0
+(g47
+g2
+Ntp8195
+Rp8196
+(dp8197
+g51
+g8194
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp8198
+Rp8199
+(dp8200
+g97
+g8196
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp8201
+Rp8202
+(dp8203
+g104
+Vnow()
+p8204
+sg106
+Nsg107
+Nsg108
+(dp8205
+sbsbsg54
+I220
+sg55
+g8090
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp8206
+g8196
+atp8207
+Rp8208
+sg62
+Nsg63
+Nsg64
+g8194
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8209
+tp8210
+Rp8211
+(dp8212
+g22
+(lp8213
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp8214
+Rp8215
+(dp8216
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp8217
+tp8218
+Rp8219
+sbsg8134
+g8132
+sg8100
+g8098
+sVlastused
+p8220
+g0
+(g47
+g2
+Ntp8221
+Rp8222
+(dp8223
+g51
+g8220
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I221
+sg55
+g8090
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp8224
+g8222
+atp8225
+Rp8226
+sg62
+Nsg63
+Nsg64
+g8220
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8227
+tp8228
+Rp8229
+(dp8230
+g22
+(lp8231
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp8232
+Rp8233
+(dp8234
+g148
+I00
+sg149
+Nsbsg85
+g28
+((lp8235
+tp8236
+Rp8237
+sbstp8238
+Rp8239
+(dp8240
+g22
+(lp8241
+g8100
+ag8134
+ag8176
+ag8194
+ag8220
+asbsbsg64
+g8088
+sg183
+g0
+(g184
+g2
+Ntp8242
+Rp8243
+(dp8244
+g188
+(lp8245
+g8098
+ag8132
+asg64
+Vbuild_queue_policy_files_pkey
+p8246
+sg191
+g8090
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp8247
+Rp8248
+(dp8249
+g42
+g0
+(g43
+g44
+(dp8250
+g8134
+g8132
+sg8100
+g8098
+stp8251
+Rp8252
+(dp8253
+g22
+(lp8254
+g8100
+ag8134
+asbsbsbsg204
+g4
+sg205
+g28
+((lp8255
+tp8256
+Rp8257
+sg220
+(dp8258
+sg225
+g8088
+sg85
+g28
+((lp8259
+g8243
+ag8120
+ag8154
+atp8260
+Rp8261
+sg229
+I01
+sg230
+NsbsS'source_metadata'
+p8262
+g0
+(g9
+g2
+Ntp8263
+Rp8264
+(dp8265
+g13
+S'source_metadata'
+p8266
+sg15
+Nsg16
+g17
+((lp8267
+g0
+(g558
+g2
+Ntp8268
+Rp8269
+(dp8270
+g191
+g0
+(g47
+g2
+Ntp8271
+Rp8272
+(dp8273
+g54
+I335
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vkey_id
+p8274
+sg55
+g8264
+sg3105
+g28
+((lp8275
+g8272
+atp8276
+Rp8277
+sg64
+g8274
+sg58
+g28
+((lp8278
+g8272
+atp8279
+Rp8280
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8281
+g8269
+atp8282
+Rp8283
+(dp8284
+g22
+(lp8285
+g8269
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8286
+Rp8287
+sg85
+g28
+((lp8288
+tp8289
+Rp8290
+sbsg193
+Nsg576
+Nsg64
+Vsource_metadata_key_id_fkey
+p8291
+sg578
+Vmetadata_keys.key_id
+p8292
+sg580
+g0
+(g581
+g2
+Ntp8293
+Rp8294
+(dp8295
+g68
+Nsg576
+Nsg64
+g8291
+sg191
+g8264
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp8296
+Vkey_id
+p8297
+g8269
+stp8298
+Rp8299
+(dp8300
+g22
+(lp8301
+g8297
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g0
+(g47
+g2
+Ntp8302
+Rp8303
+(dp8304
+g51
+Vkey_id
+p8305
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp8306
+Rp8307
+(dp8308
+g97
+g8303
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp8309
+Rp8310
+(dp8311
+g104
+Vnextval('metadata_keys_key_id_seq'::regclass)
+p8312
+sg106
+Nsg107
+Nsg108
+(dp8313
+sbsbsg54
+I188
+sg55
+g0
+(g9
+g2
+Ntp8314
+Rp8315
+(dp8316
+g13
+S'metadata_keys'
+p8317
+sg15
+Nsg16
+g17
+((lp8318
+tp8319
+Rp8320
+(dp8321
+g22
+(lp8322
+sbsg24
+(lp8323
+sg26
+Nsg27
+g28
+((lp8324
+tp8325
+Rp8326
+sg32
+g33
+(g34
+tp8327
+Rp8328
+sg37
+g0
+(g38
+g2
+Ntp8329
+Rp8330
+(dp8331
+g42
+g0
+(g43
+g44
+(dp8332
+Vordering
+p8333
+g0
+(g47
+g2
+Ntp8334
+Rp8335
+(dp8336
+g51
+g8333
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp8337
+Rp8338
+(dp8339
+g97
+g8335
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp8340
+Rp8341
+(dp8342
+g104
+V0
+p8343
+sg106
+Nsg107
+Nsg108
+(dp8344
+sbsbsg54
+I190
+sg55
+g8315
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp8345
+g8335
+atp8346
+Rp8347
+sg62
+Nsg63
+Nsg64
+g8333
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8348
+tp8349
+Rp8350
+(dp8351
+g22
+(lp8352
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8353
+Rp8354
+sg85
+g28
+((lp8355
+tp8356
+Rp8357
+sbsg8305
+g8303
+sVkey
+p8358
+g0
+(g47
+g2
+Ntp8359
+Rp8360
+(dp8361
+g51
+g8358
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I189
+sg55
+g8315
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp8362
+g8360
+atp8363
+Rp8364
+sg62
+Nsg63
+Nsg64
+g8358
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8365
+tp8366
+Rp8367
+(dp8368
+g22
+(lp8369
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp8370
+Rp8371
+(dp8372
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp8373
+tp8374
+Rp8375
+sbstp8376
+Rp8377
+(dp8378
+g22
+(lp8379
+g8305
+ag8358
+ag8333
+asbsbsg64
+Vmetadata_keys
+p8380
+sg183
+g0
+(g184
+g2
+Ntp8381
+Rp8382
+(dp8383
+g188
+(lp8384
+g8303
+asg64
+Vmetadata_keys_pkey
+p8385
+sg191
+g8315
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp8386
+Rp8387
+(dp8388
+g42
+g0
+(g43
+g44
+(dp8389
+g8305
+g8303
+stp8390
+Rp8391
+(dp8392
+g22
+(lp8393
+g8305
+asbsbsbsg204
+g4
+sg205
+g28
+((lp8394
+g0
+(g207
+g2
+Ntp8395
+Rp8396
+(dp8397
+g55
+g8315
+sg56
+I01
+sg64
+S'metadata_keys_key_key'
+p8398
+sg195
+g0
+(g38
+g2
+Ntp8399
+Rp8400
+(dp8401
+g42
+g0
+(g43
+g44
+(dp8402
+g8358
+g8360
+stp8403
+Rp8404
+(dp8405
+g22
+(lp8406
+g8358
+asbsbsg220
+(dp8407
+sbatp8408
+Rp8409
+sg220
+(dp8410
+sg225
+g8380
+sg85
+g28
+((lp8411
+g8382
+atp8412
+Rp8413
+sg229
+I01
+sg230
+Nsbsg56
+Nsg57
+I01
+sg58
+g28
+((lp8414
+g8303
+atp8415
+Rp8416
+sg62
+Nsg63
+Nsg64
+g8305
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp8417
+tp8418
+Rp8419
+(dp8420
+g22
+(lp8421
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8422
+Rp8423
+sg85
+g28
+((lp8424
+tp8425
+Rp8426
+sbsg593
+I00
+sbag0
+(g558
+g2
+Ntp8427
+Rp8428
+(dp8429
+g191
+g0
+(g47
+g2
+Ntp8430
+Rp8431
+(dp8432
+g54
+I334
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vsrc_id
+p8433
+sg55
+g8264
+sg3105
+g28
+((lp8434
+g8431
+atp8435
+Rp8436
+sg64
+g8433
+sg58
+g28
+((lp8437
+g8431
+atp8438
+Rp8439
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8440
+g8428
+atp8441
+Rp8442
+(dp8443
+g22
+(lp8444
+g8428
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8445
+Rp8446
+sg85
+g28
+((lp8447
+tp8448
+Rp8449
+sbsg193
+Nsg576
+Nsg64
+Vsource_metadata_src_id_fkey
+p8450
+sg578
+Vsource.id
+p8451
+sg580
+g0
+(g581
+g2
+Ntp8452
+Rp8453
+(dp8454
+g68
+Nsg576
+Nsg64
+g8450
+sg191
+g8264
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp8455
+Vsrc_id
+p8456
+g8428
+stp8457
+Rp8458
+(dp8459
+g22
+(lp8460
+g8456
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g5165
+sg593
+I00
+sbatp8461
+Rp8462
+(dp8463
+g22
+(lp8464
+g8269
+ag8428
+asbsg24
+(lp8465
+sg26
+Nsg27
+g28
+((lp8466
+tp8467
+Rp8468
+sg32
+g33
+(g34
+tp8469
+Rp8470
+sg37
+g0
+(g38
+g2
+Ntp8471
+Rp8472
+(dp8473
+g42
+g0
+(g43
+g44
+(dp8474
+g8274
+g8272
+sg8433
+g8431
+sVvalue
+p8475
+g0
+(g47
+g2
+Ntp8476
+Rp8477
+(dp8478
+g51
+g8475
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I336
+sg55
+g8264
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp8479
+g8477
+atp8480
+Rp8481
+sg62
+Nsg63
+Nsg64
+g8475
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8482
+tp8483
+Rp8484
+(dp8485
+g22
+(lp8486
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp8487
+Rp8488
+(dp8489
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp8490
+tp8491
+Rp8492
+sbstp8493
+Rp8494
+(dp8495
+g22
+(lp8496
+g8433
+ag8274
+ag8475
+asbsbsg64
+g8262
+sg183
+g0
+(g184
+g2
+Ntp8497
+Rp8498
+(dp8499
+g188
+(lp8500
+g8431
+ag8272
+asg64
+Vsource_metadata_pkey
+p8501
+sg191
+g8264
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp8502
+Rp8503
+(dp8504
+g42
+g0
+(g43
+g44
+(dp8505
+g8274
+g8272
+sg8433
+g8431
+stp8506
+Rp8507
+(dp8508
+g22
+(lp8509
+g8433
+ag8274
+asbsbsbsg204
+g4
+sg205
+g28
+((lp8510
+tp8511
+Rp8512
+sg220
+(dp8513
+sg225
+g8262
+sg85
+g28
+((lp8514
+g8498
+ag8294
+ag8453
+atp8515
+Rp8516
+sg229
+I01
+sg230
+NsbsS'newest_any_associations'
+p8517
+g0
+(g9
+g2
+Ntp8518
+Rp8519
+(dp8520
+g15
+Nsg16
+g17
+((lp8521
+tp8522
+Rp8523
+(dp8524
+g22
+(lp8525
+sbsg24
+(lp8526
+sg26
+Nsg27
+g28
+((lp8527
+tp8528
+Rp8529
+sg32
+g33
+(g34
+tp8530
+Rp8531
+sg37
+g0
+(g38
+g2
+Ntp8532
+Rp8533
+(dp8534
+g42
+g0
+(g43
+g44
+(dp8535
+Vsuite
+p8536
+g0
+(g47
+g2
+Ntp8537
+Rp8538
+(dp8539
+g51
+g8536
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I435
+sg55
+g8519
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g8536
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8540
+tp8541
+Rp8542
+(dp8543
+g22
+(lp8544
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8545
+Rp8546
+sg85
+g28
+((lp8547
+tp8548
+Rp8549
+sbsVversion
+p8550
+g0
+(g47
+g2
+Ntp8551
+Rp8552
+(dp8553
+g51
+g8550
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I434
+sg55
+g8519
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g8550
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8554
+tp8555
+Rp8556
+(dp8557
+g22
+(lp8558
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp8559
+Rp8560
+sg85
+g28
+((lp8561
+tp8562
+Rp8563
+sbsVarchitecture
+p8564
+g0
+(g47
+g2
+Ntp8565
+Rp8566
+(dp8567
+g51
+g8564
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I436
+sg55
+g8519
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g8564
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8568
+tp8569
+Rp8570
+(dp8571
+g22
+(lp8572
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8573
+Rp8574
+sg85
+g28
+((lp8575
+tp8576
+Rp8577
+sbsVpackage
+p8578
+g0
+(g47
+g2
+Ntp8579
+Rp8580
+(dp8581
+g51
+g8578
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I433
+sg55
+g8519
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g8578
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8582
+tp8583
+Rp8584
+(dp8585
+g22
+(lp8586
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp8587
+Rp8588
+(dp8589
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp8590
+tp8591
+Rp8592
+sbstp8593
+Rp8594
+(dp8595
+g22
+(lp8596
+g8578
+ag8550
+ag8536
+ag8564
+asbsbsg64
+g8517
+sg183
+g0
+(g184
+g2
+Ntp8597
+Rp8598
+(dp8599
+g188
+(lp8600
+sg64
+Nsg191
+g8519
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp8601
+Rp8602
+(dp8603
+g42
+g0
+(g43
+g44
+(dp8604
+tp8605
+Rp8606
+(dp8607
+g22
+(lp8608
+sbsbsbsg204
+g4
+sg205
+g28
+((lp8609
+tp8610
+Rp8611
+sg220
+(dp8612
+sg225
+g8517
+sg85
+g28
+((lp8613
+g8598
+atp8614
+Rp8615
+sg229
+I01
+sg230
+NsbsS'external_overrides'
+p8616
+g0
+(g9
+g2
+Ntp8617
+Rp8618
+(dp8619
+g13
+S'external_overrides'
+p8620
+sg15
+Nsg16
+g17
+((lp8621
+tp8622
+Rp8623
+(dp8624
+g22
+(lp8625
+sbsg24
+(lp8626
+sg26
+Nsg27
+g28
+((lp8627
+tp8628
+Rp8629
+sg32
+g33
+(g34
+tp8630
+Rp8631
+sg37
+g0
+(g38
+g2
+Ntp8632
+Rp8633
+(dp8634
+g42
+g0
+(g43
+g44
+(dp8635
+Vkey
+p8636
+g0
+(g47
+g2
+Ntp8637
+Rp8638
+(dp8639
+g51
+g8636
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I294
+sg55
+g8618
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp8640
+g8638
+atp8641
+Rp8642
+sg62
+Nsg63
+Nsg64
+g8636
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8643
+tp8644
+Rp8645
+(dp8646
+g22
+(lp8647
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp8648
+Rp8649
+(dp8650
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp8651
+tp8652
+Rp8653
+sbsVvalue
+p8654
+g0
+(g47
+g2
+Ntp8655
+Rp8656
+(dp8657
+g51
+g8654
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I295
+sg55
+g8618
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp8658
+g8656
+atp8659
+Rp8660
+sg62
+Nsg63
+Nsg64
+g8654
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8661
+tp8662
+Rp8663
+(dp8664
+g22
+(lp8665
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp8666
+Rp8667
+(dp8668
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp8669
+tp8670
+Rp8671
+sbsVpackage
+p8672
+g0
+(g47
+g2
+Ntp8673
+Rp8674
+(dp8675
+g51
+g8672
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I293
+sg55
+g8618
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp8676
+g8674
+atp8677
+Rp8678
+sg62
+Nsg63
+Nsg64
+g8672
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8679
+tp8680
+Rp8681
+(dp8682
+g22
+(lp8683
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp8684
+Rp8685
+(dp8686
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp8687
+tp8688
+Rp8689
+sbstp8690
+Rp8691
+(dp8692
+g22
+(lp8693
+g8672
+ag8636
+ag8654
+asbsbsg64
+g8616
+sg183
+g0
+(g184
+g2
+Ntp8694
+Rp8695
+(dp8696
+g188
+(lp8697
+g8674
+ag8638
+asg64
+Vexternal_overrides_pkey
+p8698
+sg191
+g8618
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp8699
+Rp8700
+(dp8701
+g42
+g0
+(g43
+g44
+(dp8702
+g8636
+g8638
+sg8672
+g8674
+stp8703
+Rp8704
+(dp8705
+g22
+(lp8706
+g8672
+ag8636
+asbsbsbsg204
+g4
+sg205
+g28
+((lp8707
+tp8708
+Rp8709
+sg220
+(dp8710
+sg225
+g8616
+sg85
+g28
+((lp8711
+g8695
+atp8712
+Rp8713
+sg229
+I01
+sg230
+NsbsS'suite_src_formats'
+p8714
+g0
+(g9
+g2
+Ntp8715
+Rp8716
+(dp8717
+g13
+S'suite_src_formats'
+p8718
+sg15
+Nsg16
+g17
+((lp8719
+g0
+(g558
+g2
+Ntp8720
+Rp8721
+(dp8722
+g191
+g0
+(g47
+g2
+Ntp8723
+Rp8724
+(dp8725
+g54
+I364
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vsrc_format
+p8726
+sg55
+g8716
+sg3105
+g28
+((lp8727
+g8724
+atp8728
+Rp8729
+sg64
+g8726
+sg58
+g28
+((lp8730
+g8724
+atp8731
+Rp8732
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8733
+g8721
+atp8734
+Rp8735
+(dp8736
+g22
+(lp8737
+g8721
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8738
+Rp8739
+sg85
+g28
+((lp8740
+tp8741
+Rp8742
+sbsg193
+Nsg576
+Nsg64
+Vsrc_format_key
+p8743
+sg578
+Vsrc_format.id
+p8744
+sg580
+g0
+(g581
+g2
+Ntp8745
+Rp8746
+(dp8747
+g68
+Nsg576
+Nsg64
+g8743
+sg191
+g8716
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp8748
+Vsrc_format
+p8749
+g8721
+stp8750
+Rp8751
+(dp8752
+g22
+(lp8753
+g8749
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g1317
+sg593
+I00
+sbag0
+(g558
+g2
+Ntp8754
+Rp8755
+(dp8756
+g191
+g0
+(g47
+g2
+Ntp8757
+Rp8758
+(dp8759
+g54
+I363
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vsuite
+p8760
+sg55
+g8716
+sg3105
+g28
+((lp8761
+g8758
+atp8762
+Rp8763
+sg64
+g8760
+sg58
+g28
+((lp8764
+g8758
+atp8765
+Rp8766
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8767
+g8755
+atp8768
+Rp8769
+(dp8770
+g22
+(lp8771
+g8755
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8772
+Rp8773
+sg85
+g28
+((lp8774
+tp8775
+Rp8776
+sbsg193
+Nsg576
+Nsg64
+Vsuite_key
+p8777
+sg578
+Vsuite.id
+p8778
+sg580
+g0
+(g581
+g2
+Ntp8779
+Rp8780
+(dp8781
+g68
+Nsg576
+Nsg64
+g8777
+sg191
+g8716
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp8782
+Vsuite
+p8783
+g8755
+stp8784
+Rp8785
+(dp8786
+g22
+(lp8787
+g8783
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g3134
+sg593
+I00
+sbatp8788
+Rp8789
+(dp8790
+g22
+(lp8791
+g8721
+ag8755
+asbsg24
+(lp8792
+sg26
+Nsg27
+g28
+((lp8793
+tp8794
+Rp8795
+sg32
+g33
+(g34
+tp8796
+Rp8797
+sg37
+g0
+(g38
+g2
+Ntp8798
+Rp8799
+(dp8800
+g42
+g0
+(g43
+g44
+(dp8801
+g8760
+g8758
+sVmodified
+p8802
+g0
+(g47
+g2
+Ntp8803
+Rp8804
+(dp8805
+g51
+g8802
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp8806
+Rp8807
+(dp8808
+g97
+g8804
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp8809
+Rp8810
+(dp8811
+g104
+Vnow()
+p8812
+sg106
+Nsg107
+Nsg108
+(dp8813
+sbsbsg54
+I366
+sg55
+g8716
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp8814
+g8804
+atp8815
+Rp8816
+sg62
+Nsg63
+Nsg64
+g8802
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8817
+tp8818
+Rp8819
+(dp8820
+g22
+(lp8821
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp8822
+Rp8823
+(dp8824
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp8825
+tp8826
+Rp8827
+sbsg8726
+g8724
+sVcreated
+p8828
+g0
+(g47
+g2
+Ntp8829
+Rp8830
+(dp8831
+g51
+g8828
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp8832
+Rp8833
+(dp8834
+g97
+g8830
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp8835
+Rp8836
+(dp8837
+g104
+Vnow()
+p8838
+sg106
+Nsg107
+Nsg108
+(dp8839
+sbsbsg54
+I365
+sg55
+g8716
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp8840
+g8830
+atp8841
+Rp8842
+sg62
+Nsg63
+Nsg64
+g8828
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8843
+tp8844
+Rp8845
+(dp8846
+g22
+(lp8847
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp8848
+Rp8849
+(dp8850
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp8851
+tp8852
+Rp8853
+sbstp8854
+Rp8855
+(dp8856
+g22
+(lp8857
+g8760
+ag8726
+ag8828
+ag8802
+asbsbsg64
+g8714
+sg183
+g0
+(g184
+g2
+Ntp8858
+Rp8859
+(dp8860
+g188
+(lp8861
+g8758
+ag8724
+asg64
+Vsuite_src_formats_pkey
+p8862
+sg191
+g8716
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp8863
+Rp8864
+(dp8865
+g42
+g0
+(g43
+g44
+(dp8866
+g8760
+g8758
+sg8726
+g8724
+stp8867
+Rp8868
+(dp8869
+g22
+(lp8870
+g8760
+ag8726
+asbsbsbsg204
+g4
+sg205
+g28
+((lp8871
+g0
+(g207
+g2
+Ntp8872
+Rp8873
+(dp8874
+g55
+g8716
+sg56
+I01
+sg64
+S'suite_src_formats_suite_key'
+p8875
+sg195
+g0
+(g38
+g2
+Ntp8876
+Rp8877
+(dp8878
+g42
+g0
+(g43
+g44
+(dp8879
+g8760
+g8758
+sg8726
+g8724
+stp8880
+Rp8881
+(dp8882
+g22
+(lp8883
+g8760
+ag8726
+asbsbsg220
+(dp8884
+sbatp8885
+Rp8886
+sg220
+(dp8887
+sg225
+g8714
+sg85
+g28
+((lp8888
+g8859
+ag8746
+ag8780
+atp8889
+Rp8890
+sg229
+I01
+sg230
+Nsbsg6404
+g6276
+sS'changes_pending_files_map'
+p8891
+g0
+(g9
+g2
+Ntp8892
+Rp8893
+(dp8894
+g15
+Nsg16
+g17
+((lp8895
+g0
+(g558
+g2
+Ntp8896
+Rp8897
+(dp8898
+g191
+g0
+(g47
+g2
+Ntp8899
+Rp8900
+(dp8901
+g51
+Vchange_id
+p8902
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I277
+sg55
+g8893
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp8903
+g8900
+atp8904
+Rp8905
+sg62
+Nsg63
+Nsg64
+g8902
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8906
+g8897
+atp8907
+Rp8908
+(dp8909
+g22
+(lp8910
+g8897
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8911
+Rp8912
+sg85
+g28
+((lp8913
+tp8914
+Rp8915
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_files_map_change_id_fkey
+p8916
+sg578
+Vchanges.id
+p8917
+sg580
+g0
+(g581
+g2
+Ntp8918
+Rp8919
+(dp8920
+g68
+Nsg576
+Nsg64
+g8916
+sg191
+g8893
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp8921
+Vchange_id
+p8922
+g8897
+stp8923
+Rp8924
+(dp8925
+g22
+(lp8926
+g8922
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp8927
+Rp8928
+(dp8929
+g191
+g0
+(g47
+g2
+Ntp8930
+Rp8931
+(dp8932
+g51
+Vfile_id
+p8933
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I276
+sg55
+g8893
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp8934
+g8931
+atp8935
+Rp8936
+sg62
+Nsg63
+Nsg64
+g8933
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8937
+g8928
+atp8938
+Rp8939
+(dp8940
+g22
+(lp8941
+g8928
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp8942
+Rp8943
+sg85
+g28
+((lp8944
+tp8945
+Rp8946
+sbsg193
+Nsg576
+Nsg64
+Vchanges_pending_files_map_file_id_fkey
+p8947
+sg578
+Vchanges_pending_files.id
+p8948
+sg580
+g0
+(g581
+g2
+Ntp8949
+Rp8950
+(dp8951
+g68
+Nsg576
+Nsg64
+g8947
+sg191
+g8893
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp8952
+Vfile_id
+p8953
+g8928
+stp8954
+Rp8955
+(dp8956
+g22
+(lp8957
+g8953
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp8958
+Rp8959
+(dp8960
+g22
+(lp8961
+g8897
+ag8928
+asbsg24
+(lp8962
+sg26
+Nsg27
+g28
+((lp8963
+tp8964
+Rp8965
+sg32
+g33
+(g34
+tp8966
+Rp8967
+sg37
+g0
+(g38
+g2
+Ntp8968
+Rp8969
+(dp8970
+g42
+g0
+(g43
+g44
+(dp8971
+g8902
+g8900
+sVcreated
+p8972
+g0
+(g47
+g2
+Ntp8973
+Rp8974
+(dp8975
+g51
+g8972
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp8976
+Rp8977
+(dp8978
+g97
+g8974
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp8979
+Rp8980
+(dp8981
+g104
+Vnow()
+p8982
+sg106
+Nsg107
+Nsg108
+(dp8983
+sbsbsg54
+I278
+sg55
+g8893
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g8972
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp8984
+tp8985
+Rp8986
+(dp8987
+g22
+(lp8988
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp8989
+Rp8990
+(dp8991
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp8992
+tp8993
+Rp8994
+sbsg8933
+g8931
+sVmodified
+p8995
+g0
+(g47
+g2
+Ntp8996
+Rp8997
+(dp8998
+g51
+g8995
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp8999
+Rp9000
+(dp9001
+g97
+g8997
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp9002
+Rp9003
+(dp9004
+g104
+Vnow()
+p9005
+sg106
+Nsg107
+Nsg108
+(dp9006
+sbsbsg54
+I279
+sg55
+g8893
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g8995
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9007
+tp9008
+Rp9009
+(dp9010
+g22
+(lp9011
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp9012
+Rp9013
+(dp9014
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp9015
+tp9016
+Rp9017
+sbstp9018
+Rp9019
+(dp9020
+g22
+(lp9021
+g8933
+ag8902
+ag8972
+ag8995
+asbsbsg64
+g8891
+sg183
+g0
+(g184
+g2
+Ntp9022
+Rp9023
+(dp9024
+g188
+(lp9025
+g8931
+ag8900
+asg64
+Vchanges_pending_files_map_pkey
+p9026
+sg191
+g8893
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp9027
+Rp9028
+(dp9029
+g42
+g0
+(g43
+g44
+(dp9030
+g8902
+g8900
+sg8933
+g8931
+stp9031
+Rp9032
+(dp9033
+g22
+(lp9034
+g8933
+ag8902
+asbsbsbsg204
+g4
+sg205
+g28
+((lp9035
+tp9036
+Rp9037
+sg220
+(dp9038
+sg225
+g8891
+sg85
+g28
+((lp9039
+g9023
+ag8919
+ag8950
+atp9040
+Rp9041
+sg229
+I01
+sg230
+NsbsS'suite_arch_by_name'
+p9042
+g0
+(g9
+g2
+Ntp9043
+Rp9044
+(dp9045
+g15
+Nsg16
+g17
+((lp9046
+tp9047
+Rp9048
+(dp9049
+g22
+(lp9050
+sbsg24
+(lp9051
+sg26
+Nsg27
+g28
+((lp9052
+tp9053
+Rp9054
+sg32
+g33
+(g34
+tp9055
+Rp9056
+sg37
+g0
+(g38
+g2
+Ntp9057
+Rp9058
+(dp9059
+g42
+g0
+(g43
+g44
+(dp9060
+Vsuite
+p9061
+g0
+(g47
+g2
+Ntp9062
+Rp9063
+(dp9064
+g51
+g9061
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I482
+sg55
+g9044
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9061
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9065
+tp9066
+Rp9067
+(dp9068
+g22
+(lp9069
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp9070
+Rp9071
+(dp9072
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp9073
+tp9074
+Rp9075
+sbsVarch
+p9076
+g0
+(g47
+g2
+Ntp9077
+Rp9078
+(dp9079
+g51
+g9076
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I483
+sg55
+g9044
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9076
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9080
+tp9081
+Rp9082
+(dp9083
+g22
+(lp9084
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp9085
+Rp9086
+(dp9087
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp9088
+tp9089
+Rp9090
+sbstp9091
+Rp9092
+(dp9093
+g22
+(lp9094
+g9061
+ag9076
+asbsbsg64
+g9042
+sg183
+g0
+(g184
+g2
+Ntp9095
+Rp9096
+(dp9097
+g188
+(lp9098
+sg64
+Nsg191
+g9044
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp9099
+Rp9100
+(dp9101
+g42
+g0
+(g43
+g44
+(dp9102
+tp9103
+Rp9104
+(dp9105
+g22
+(lp9106
+sbsbsbsg204
+g4
+sg205
+g28
+((lp9107
+tp9108
+Rp9109
+sg220
+(dp9110
+sg225
+g9042
+sg85
+g28
+((lp9111
+g9096
+atp9112
+Rp9113
+sg229
+I01
+sg230
+NsbsS'almost_obsolete_all_associations'
+p9114
+g0
+(g9
+g2
+Ntp9115
+Rp9116
+(dp9117
+g15
+Nsg16
+g17
+((lp9118
+tp9119
+Rp9120
+(dp9121
+g22
+(lp9122
+sbsg24
+(lp9123
+sg26
+Nsg27
+g28
+((lp9124
+tp9125
+Rp9126
+sg32
+g33
+(g34
+tp9127
+Rp9128
+sg37
+g0
+(g38
+g2
+Ntp9129
+Rp9130
+(dp9131
+g42
+g0
+(g43
+g44
+(dp9132
+Vbin
+p9133
+g0
+(g47
+g2
+Ntp9134
+Rp9135
+(dp9136
+g51
+g9133
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I379
+sg55
+g9116
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9133
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9137
+tp9138
+Rp9139
+(dp9140
+g22
+(lp9141
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9142
+Rp9143
+sg85
+g28
+((lp9144
+tp9145
+Rp9146
+sbsVsuite
+p9147
+g0
+(g47
+g2
+Ntp9148
+Rp9149
+(dp9150
+g51
+g9147
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I382
+sg55
+g9116
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9147
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9151
+tp9152
+Rp9153
+(dp9154
+g22
+(lp9155
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9156
+Rp9157
+sg85
+g28
+((lp9158
+tp9159
+Rp9160
+sbsVversion
+p9161
+g0
+(g47
+g2
+Ntp9162
+Rp9163
+(dp9164
+g51
+g9161
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I381
+sg55
+g9116
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9161
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9165
+tp9166
+Rp9167
+(dp9168
+g22
+(lp9169
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp9170
+Rp9171
+sg85
+g28
+((lp9172
+tp9173
+Rp9174
+sbsVid
+p9175
+g0
+(g47
+g2
+Ntp9176
+Rp9177
+(dp9178
+g51
+g9175
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I378
+sg55
+g9116
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9175
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9179
+tp9180
+Rp9181
+(dp9182
+g22
+(lp9183
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9184
+Rp9185
+sg85
+g28
+((lp9186
+tp9187
+Rp9188
+sbsVpackage
+p9189
+g0
+(g47
+g2
+Ntp9190
+Rp9191
+(dp9192
+g51
+g9189
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I380
+sg55
+g9116
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9189
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9193
+tp9194
+Rp9195
+(dp9196
+g22
+(lp9197
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp9198
+Rp9199
+(dp9200
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp9201
+tp9202
+Rp9203
+sbstp9204
+Rp9205
+(dp9206
+g22
+(lp9207
+g9175
+ag9133
+ag9189
+ag9161
+ag9147
+asbsbsg64
+g9114
+sg183
+g0
+(g184
+g2
+Ntp9208
+Rp9209
+(dp9210
+g188
+(lp9211
+sg64
+Nsg191
+g9116
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp9212
+Rp9213
+(dp9214
+g42
+g0
+(g43
+g44
+(dp9215
+tp9216
+Rp9217
+(dp9218
+g22
+(lp9219
+sbsbsbsg204
+g4
+sg205
+g28
+((lp9220
+tp9221
+Rp9222
+sg220
+(dp9223
+sg225
+g9114
+sg85
+g28
+((lp9224
+g9209
+atp9225
+Rp9226
+sg229
+I01
+sg230
+NsbsS'obsolete_all_associations'
+p9227
+g0
+(g9
+g2
+Ntp9228
+Rp9229
+(dp9230
+g15
+Nsg16
+g17
+((lp9231
+tp9232
+Rp9233
+(dp9234
+g22
+(lp9235
+sbsg24
+(lp9236
+sg26
+Nsg27
+g28
+((lp9237
+tp9238
+Rp9239
+sg32
+g33
+(g34
+tp9240
+Rp9241
+sg37
+g0
+(g38
+g2
+Ntp9242
+Rp9243
+(dp9244
+g42
+g0
+(g43
+g44
+(dp9245
+Vbin
+p9246
+g0
+(g47
+g2
+Ntp9247
+Rp9248
+(dp9249
+g51
+g9246
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I446
+sg55
+g9229
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9246
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9250
+tp9251
+Rp9252
+(dp9253
+g22
+(lp9254
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9255
+Rp9256
+sg85
+g28
+((lp9257
+tp9258
+Rp9259
+sbsVsuite
+p9260
+g0
+(g47
+g2
+Ntp9261
+Rp9262
+(dp9263
+g51
+g9260
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I449
+sg55
+g9229
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9260
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9264
+tp9265
+Rp9266
+(dp9267
+g22
+(lp9268
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9269
+Rp9270
+sg85
+g28
+((lp9271
+tp9272
+Rp9273
+sbsVversion
+p9274
+g0
+(g47
+g2
+Ntp9275
+Rp9276
+(dp9277
+g51
+g9274
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I448
+sg55
+g9229
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9274
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9278
+tp9279
+Rp9280
+(dp9281
+g22
+(lp9282
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp9283
+Rp9284
+sg85
+g28
+((lp9285
+tp9286
+Rp9287
+sbsVid
+p9288
+g0
+(g47
+g2
+Ntp9289
+Rp9290
+(dp9291
+g51
+g9288
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I445
+sg55
+g9229
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9288
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9292
+tp9293
+Rp9294
+(dp9295
+g22
+(lp9296
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9297
+Rp9298
+sg85
+g28
+((lp9299
+tp9300
+Rp9301
+sbsVpackage
+p9302
+g0
+(g47
+g2
+Ntp9303
+Rp9304
+(dp9305
+g51
+g9302
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I447
+sg55
+g9229
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9302
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9306
+tp9307
+Rp9308
+(dp9309
+g22
+(lp9310
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp9311
+Rp9312
+(dp9313
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp9314
+tp9315
+Rp9316
+sbstp9317
+Rp9318
+(dp9319
+g22
+(lp9320
+g9288
+ag9246
+ag9302
+ag9274
+ag9260
+asbsbsg64
+g9227
+sg183
+g0
+(g184
+g2
+Ntp9321
+Rp9322
+(dp9323
+g188
+(lp9324
+sg64
+Nsg191
+g9229
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp9325
+Rp9326
+(dp9327
+g42
+g0
+(g43
+g44
+(dp9328
+tp9329
+Rp9330
+(dp9331
+g22
+(lp9332
+sbsbsbsg204
+g4
+sg205
+g28
+((lp9333
+tp9334
+Rp9335
+sg220
+(dp9336
+sg225
+g9227
+sg85
+g28
+((lp9337
+g9322
+atp9338
+Rp9339
+sg229
+I01
+sg230
+NsbsS'extra_src_references'
+p9340
+g0
+(g9
+g2
+Ntp9341
+Rp9342
+(dp9343
+g15
+Nsg16
+g17
+((lp9344
+g0
+(g558
+g2
+Ntp9345
+Rp9346
+(dp9347
+g191
+g0
+(g47
+g2
+Ntp9348
+Rp9349
+(dp9350
+g51
+Vbin_id
+p9351
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I296
+sg55
+g9342
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp9352
+g9349
+atp9353
+Rp9354
+sg62
+Nsg63
+Nsg64
+g9351
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9355
+g9346
+atp9356
+Rp9357
+(dp9358
+g22
+(lp9359
+g9346
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9360
+Rp9361
+sg85
+g28
+((lp9362
+tp9363
+Rp9364
+sbsg193
+Nsg576
+Nsg64
+Vextra_src_references_bin_id_fkey
+p9365
+sg578
+Vbinaries.id
+p9366
+sg580
+g0
+(g581
+g2
+Ntp9367
+Rp9368
+(dp9369
+g68
+Nsg576
+Nsg64
+g9365
+sg191
+g9342
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp9370
+Vbin_id
+p9371
+g9346
+stp9372
+Rp9373
+(dp9374
+g22
+(lp9375
+g9371
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp9376
+Rp9377
+(dp9378
+g191
+g0
+(g47
+g2
+Ntp9379
+Rp9380
+(dp9381
+g51
+Vsrc_id
+p9382
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I297
+sg55
+g9342
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp9383
+g9380
+atp9384
+Rp9385
+sg62
+Nsg63
+Nsg64
+g9382
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9386
+g9377
+atp9387
+Rp9388
+(dp9389
+g22
+(lp9390
+g9377
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9391
+Rp9392
+sg85
+g28
+((lp9393
+tp9394
+Rp9395
+sbsg193
+Nsg576
+Nsg64
+Vextra_src_references_src_id_fkey
+p9396
+sg578
+Vsource.id
+p9397
+sg580
+g0
+(g581
+g2
+Ntp9398
+Rp9399
+(dp9400
+g68
+Nsg576
+Nsg64
+g9396
+sg191
+g9342
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp9401
+Vsrc_id
+p9402
+g9377
+stp9403
+Rp9404
+(dp9405
+g22
+(lp9406
+g9402
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp9407
+Rp9408
+(dp9409
+g22
+(lp9410
+g9346
+ag9377
+asbsg24
+(lp9411
+sg26
+Nsg27
+g28
+((lp9412
+tp9413
+Rp9414
+sg32
+g33
+(g34
+tp9415
+Rp9416
+sg37
+g0
+(g38
+g2
+Ntp9417
+Rp9418
+(dp9419
+g42
+g0
+(g43
+g44
+(dp9420
+g9351
+g9349
+sg9382
+g9380
+stp9421
+Rp9422
+(dp9423
+g22
+(lp9424
+g9351
+ag9382
+asbsbsg64
+g9340
+sg183
+g0
+(g184
+g2
+Ntp9425
+Rp9426
+(dp9427
+g188
+(lp9428
+g9349
+ag9380
+asg64
+Vextra_src_references_pkey
+p9429
+sg191
+g9342
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp9430
+Rp9431
+(dp9432
+g42
+g0
+(g43
+g44
+(dp9433
+g9351
+g9349
+sg9382
+g9380
+stp9434
+Rp9435
+(dp9436
+g22
+(lp9437
+g9351
+ag9382
+asbsbsbsg204
+g4
+sg205
+g28
+((lp9438
+tp9439
+Rp9440
+sg220
+(dp9441
+sg225
+g9340
+sg85
+g28
+((lp9442
+g9426
+ag9368
+ag9399
+atp9443
+Rp9444
+sg229
+I01
+sg230
+NsbsS'binary_acl_map'
+p9445
+g0
+(g9
+g2
+Ntp9446
+Rp9447
+(dp9448
+g13
+S'binary_acl_map'
+p9449
+sg15
+Nsg16
+g17
+((lp9450
+g0
+(g558
+g2
+Ntp9451
+Rp9452
+(dp9453
+g191
+g0
+(g47
+g2
+Ntp9454
+Rp9455
+(dp9456
+g51
+Varchitecture_id
+p9457
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I193
+sg55
+g9447
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp9458
+g9455
+atp9459
+Rp9460
+sg62
+Nsg63
+Nsg64
+g9457
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9461
+g9452
+atp9462
+Rp9463
+(dp9464
+g22
+(lp9465
+g9452
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9466
+Rp9467
+sg85
+g28
+((lp9468
+tp9469
+Rp9470
+sbsg193
+Nsg576
+Nsg64
+Vbinary_acl_map_architecture_id_fkey
+p9471
+sg578
+Varchitecture.id
+p9472
+sg580
+g0
+(g581
+g2
+Ntp9473
+Rp9474
+(dp9475
+g68
+Nsg576
+Nsg64
+g9471
+sg191
+g9447
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp9476
+Varchitecture_id
+p9477
+g9452
+stp9478
+Rp9479
+(dp9480
+g22
+(lp9481
+g9477
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp9482
+Rp9483
+(dp9484
+g191
+g0
+(g47
+g2
+Ntp9485
+Rp9486
+(dp9487
+g51
+Vfingerprint_id
+p9488
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I192
+sg55
+g9447
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp9489
+g9486
+atp9490
+Rp9491
+sg62
+Nsg63
+Nsg64
+g9488
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9492
+g9483
+atp9493
+Rp9494
+(dp9495
+g22
+(lp9496
+g9483
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9497
+Rp9498
+sg85
+g28
+((lp9499
+tp9500
+Rp9501
+sbsg193
+Nsg576
+Nsg64
+Vbinary_acl_map_fingerprint_id_fkey
+p9502
+sg578
+Vfingerprint.id
+p9503
+sg580
+g0
+(g581
+g2
+Ntp9504
+Rp9505
+(dp9506
+g68
+Nsg576
+Nsg64
+g9502
+sg191
+g9447
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp9507
+Vfingerprint_id
+p9508
+g9483
+stp9509
+Rp9510
+(dp9511
+g22
+(lp9512
+g9508
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp9513
+Rp9514
+(dp9515
+g22
+(lp9516
+g9452
+ag9483
+asbsg24
+(lp9517
+sg26
+Nsg27
+g28
+((lp9518
+tp9519
+Rp9520
+sg32
+g33
+(g34
+tp9521
+Rp9522
+sg37
+g0
+(g38
+g2
+Ntp9523
+Rp9524
+(dp9525
+g42
+g0
+(g43
+g44
+(dp9526
+g9488
+g9486
+sVcreated
+p9527
+g0
+(g47
+g2
+Ntp9528
+Rp9529
+(dp9530
+g51
+g9527
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp9531
+Rp9532
+(dp9533
+g97
+g9529
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp9534
+Rp9535
+(dp9536
+g104
+Vnow()
+p9537
+sg106
+Nsg107
+Nsg108
+(dp9538
+sbsbsg54
+I194
+sg55
+g9447
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp9539
+g9529
+atp9540
+Rp9541
+sg62
+Nsg63
+Nsg64
+g9527
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9542
+tp9543
+Rp9544
+(dp9545
+g22
+(lp9546
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp9547
+Rp9548
+(dp9549
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp9550
+tp9551
+Rp9552
+sbsg9457
+g9455
+sVid
+p9553
+g0
+(g47
+g2
+Ntp9554
+Rp9555
+(dp9556
+g51
+g9553
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp9557
+Rp9558
+(dp9559
+g97
+g9555
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp9560
+Rp9561
+(dp9562
+g104
+Vnextval('binary_acl_map_id_seq'::regclass)
+p9563
+sg106
+Nsg107
+Nsg108
+(dp9564
+sbsbsg54
+I191
+sg55
+g9447
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp9565
+g9555
+atp9566
+Rp9567
+sg62
+Nsg63
+Nsg64
+g9553
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp9568
+tp9569
+Rp9570
+(dp9571
+g22
+(lp9572
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9573
+Rp9574
+sg85
+g28
+((lp9575
+tp9576
+Rp9577
+sbsVmodified
+p9578
+g0
+(g47
+g2
+Ntp9579
+Rp9580
+(dp9581
+g51
+g9578
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp9582
+Rp9583
+(dp9584
+g97
+g9580
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp9585
+Rp9586
+(dp9587
+g104
+Vnow()
+p9588
+sg106
+Nsg107
+Nsg108
+(dp9589
+sbsbsg54
+I195
+sg55
+g9447
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp9590
+g9580
+atp9591
+Rp9592
+sg62
+Nsg63
+Nsg64
+g9578
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9593
+tp9594
+Rp9595
+(dp9596
+g22
+(lp9597
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp9598
+Rp9599
+(dp9600
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp9601
+tp9602
+Rp9603
+sbstp9604
+Rp9605
+(dp9606
+g22
+(lp9607
+g9553
+ag9488
+ag9457
+ag9527
+ag9578
+asbsbsg64
+g9445
+sg183
+g0
+(g184
+g2
+Ntp9608
+Rp9609
+(dp9610
+g188
+(lp9611
+g9555
+asg64
+Vbinary_acl_map_pkey
+p9612
+sg191
+g9447
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp9613
+Rp9614
+(dp9615
+g42
+g0
+(g43
+g44
+(dp9616
+g9553
+g9555
+stp9617
+Rp9618
+(dp9619
+g22
+(lp9620
+g9553
+asbsbsbsg204
+g4
+sg205
+g28
+((lp9621
+g0
+(g207
+g2
+Ntp9622
+Rp9623
+(dp9624
+g55
+g9447
+sg56
+I01
+sg64
+S'binary_acl_map_fingerprint_id_key'
+p9625
+sg195
+g0
+(g38
+g2
+Ntp9626
+Rp9627
+(dp9628
+g42
+g0
+(g43
+g44
+(dp9629
+g9488
+g9486
+sg9457
+g9455
+stp9630
+Rp9631
+(dp9632
+g22
+(lp9633
+g9488
+ag9457
+asbsbsg220
+(dp9634
+sbatp9635
+Rp9636
+sg220
+(dp9637
+sg225
+g9445
+sg85
+g28
+((lp9638
+g9609
+ag9474
+ag9505
+atp9639
+Rp9640
+sg229
+I01
+sg230
+NsbsS'obsolete_src_associations'
+p9641
+g0
+(g9
+g2
+Ntp9642
+Rp9643
+(dp9644
+g15
+Nsg16
+g17
+((lp9645
+tp9646
+Rp9647
+(dp9648
+g22
+(lp9649
+sbsg24
+(lp9650
+sg26
+Nsg27
+g28
+((lp9651
+tp9652
+Rp9653
+sg32
+g33
+(g34
+tp9654
+Rp9655
+sg37
+g0
+(g38
+g2
+Ntp9656
+Rp9657
+(dp9658
+g42
+g0
+(g43
+g44
+(dp9659
+Vsource
+p9660
+g0
+(g47
+g2
+Ntp9661
+Rp9662
+(dp9663
+g51
+g9660
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I462
+sg55
+g9643
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9660
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9664
+tp9665
+Rp9666
+(dp9667
+g22
+(lp9668
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp9669
+Rp9670
+(dp9671
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp9672
+tp9673
+Rp9674
+sbsVsuite
+p9675
+g0
+(g47
+g2
+Ntp9676
+Rp9677
+(dp9678
+g51
+g9675
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I464
+sg55
+g9643
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9675
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9679
+tp9680
+Rp9681
+(dp9682
+g22
+(lp9683
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9684
+Rp9685
+sg85
+g28
+((lp9686
+tp9687
+Rp9688
+sbsVversion
+p9689
+g0
+(g47
+g2
+Ntp9690
+Rp9691
+(dp9692
+g51
+g9689
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I463
+sg55
+g9643
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9689
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9693
+tp9694
+Rp9695
+(dp9696
+g22
+(lp9697
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp9698
+Rp9699
+sg85
+g28
+((lp9700
+tp9701
+Rp9702
+sbsVid
+p9703
+g0
+(g47
+g2
+Ntp9704
+Rp9705
+(dp9706
+g51
+g9703
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I460
+sg55
+g9643
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9703
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9707
+tp9708
+Rp9709
+(dp9710
+g22
+(lp9711
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9712
+Rp9713
+sg85
+g28
+((lp9714
+tp9715
+Rp9716
+sbsVsrc
+p9717
+g0
+(g47
+g2
+Ntp9718
+Rp9719
+(dp9720
+g51
+g9717
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I461
+sg55
+g9643
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9717
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9721
+tp9722
+Rp9723
+(dp9724
+g22
+(lp9725
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9726
+Rp9727
+sg85
+g28
+((lp9728
+tp9729
+Rp9730
+sbstp9731
+Rp9732
+(dp9733
+g22
+(lp9734
+g9703
+ag9717
+ag9660
+ag9689
+ag9675
+asbsbsg64
+g9641
+sg183
+g0
+(g184
+g2
+Ntp9735
+Rp9736
+(dp9737
+g188
+(lp9738
+sg64
+Nsg191
+g9643
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp9739
+Rp9740
+(dp9741
+g42
+g0
+(g43
+g44
+(dp9742
+tp9743
+Rp9744
+(dp9745
+g22
+(lp9746
+sbsbsbsg204
+g4
+sg205
+g28
+((lp9747
+tp9748
+Rp9749
+sg220
+(dp9750
+sg225
+g9641
+sg85
+g28
+((lp9751
+g9736
+atp9752
+Rp9753
+sg229
+I01
+sg230
+NsbsS'keyring_acl_map'
+p9754
+g0
+(g9
+g2
+Ntp9755
+Rp9756
+(dp9757
+g13
+S'keyring_acl_map'
+p9758
+sg15
+Nsg16
+g17
+((lp9759
+g0
+(g558
+g2
+Ntp9760
+Rp9761
+(dp9762
+g191
+g0
+(g47
+g2
+Ntp9763
+Rp9764
+(dp9765
+g51
+Varchitecture_id
+p9766
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I300
+sg55
+g9756
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp9767
+g9764
+atp9768
+Rp9769
+sg62
+Nsg63
+Nsg64
+g9766
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9770
+g9761
+atp9771
+Rp9772
+(dp9773
+g22
+(lp9774
+g9761
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9775
+Rp9776
+sg85
+g28
+((lp9777
+tp9778
+Rp9779
+sbsg193
+Nsg576
+Nsg64
+Vkeyring_acl_map_architecture_id_fkey
+p9780
+sg578
+Varchitecture.id
+p9781
+sg580
+g0
+(g581
+g2
+Ntp9782
+Rp9783
+(dp9784
+g68
+Nsg576
+Nsg64
+g9780
+sg191
+g9756
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp9785
+Varchitecture_id
+p9786
+g9761
+stp9787
+Rp9788
+(dp9789
+g22
+(lp9790
+g9786
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp9791
+Rp9792
+(dp9793
+g191
+g0
+(g47
+g2
+Ntp9794
+Rp9795
+(dp9796
+g51
+Vkeyring_id
+p9797
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I299
+sg55
+g9756
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp9798
+g9795
+atp9799
+Rp9800
+sg62
+Nsg63
+Nsg64
+g9797
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9801
+g9792
+atp9802
+Rp9803
+(dp9804
+g22
+(lp9805
+g9792
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9806
+Rp9807
+sg85
+g28
+((lp9808
+tp9809
+Rp9810
+sbsg193
+Nsg576
+Nsg64
+Vkeyring_acl_map_keyring_id_fkey
+p9811
+sg578
+Vkeyrings.id
+p9812
+sg580
+g0
+(g581
+g2
+Ntp9813
+Rp9814
+(dp9815
+g68
+Nsg576
+Nsg64
+g9811
+sg191
+g9756
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp9816
+Vkeyring_id
+p9817
+g9792
+stp9818
+Rp9819
+(dp9820
+g22
+(lp9821
+g9817
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp9822
+Rp9823
+(dp9824
+g22
+(lp9825
+g9761
+ag9792
+asbsg24
+(lp9826
+sg26
+Nsg27
+g28
+((lp9827
+tp9828
+Rp9829
+sg32
+g33
+(g34
+tp9830
+Rp9831
+sg37
+g0
+(g38
+g2
+Ntp9832
+Rp9833
+(dp9834
+g42
+g0
+(g43
+g44
+(dp9835
+g9797
+g9795
+sg9766
+g9764
+sVid
+p9836
+g0
+(g47
+g2
+Ntp9837
+Rp9838
+(dp9839
+g51
+g9836
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp9840
+Rp9841
+(dp9842
+g97
+g9838
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp9843
+Rp9844
+(dp9845
+g104
+Vnextval('keyring_acl_map_id_seq'::regclass)
+p9846
+sg106
+Nsg107
+Nsg108
+(dp9847
+sbsbsg54
+I298
+sg55
+g9756
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp9848
+g9838
+atp9849
+Rp9850
+sg62
+Nsg63
+Nsg64
+g9836
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp9851
+tp9852
+Rp9853
+(dp9854
+g22
+(lp9855
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9856
+Rp9857
+sg85
+g28
+((lp9858
+tp9859
+Rp9860
+sbsVmodified
+p9861
+g0
+(g47
+g2
+Ntp9862
+Rp9863
+(dp9864
+g51
+g9861
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp9865
+Rp9866
+(dp9867
+g97
+g9863
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp9868
+Rp9869
+(dp9870
+g104
+Vnow()
+p9871
+sg106
+Nsg107
+Nsg108
+(dp9872
+sbsbsg54
+I302
+sg55
+g9756
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp9873
+g9863
+atp9874
+Rp9875
+sg62
+Nsg63
+Nsg64
+g9861
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9876
+tp9877
+Rp9878
+(dp9879
+g22
+(lp9880
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp9881
+Rp9882
+(dp9883
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp9884
+tp9885
+Rp9886
+sbsVcreated
+p9887
+g0
+(g47
+g2
+Ntp9888
+Rp9889
+(dp9890
+g51
+g9887
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp9891
+Rp9892
+(dp9893
+g97
+g9889
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp9894
+Rp9895
+(dp9896
+g104
+Vnow()
+p9897
+sg106
+Nsg107
+Nsg108
+(dp9898
+sbsbsg54
+I301
+sg55
+g9756
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp9899
+g9889
+atp9900
+Rp9901
+sg62
+Nsg63
+Nsg64
+g9887
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9902
+tp9903
+Rp9904
+(dp9905
+g22
+(lp9906
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp9907
+Rp9908
+(dp9909
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp9910
+tp9911
+Rp9912
+sbstp9913
+Rp9914
+(dp9915
+g22
+(lp9916
+g9836
+ag9797
+ag9766
+ag9887
+ag9861
+asbsbsg64
+g9754
+sg183
+g0
+(g184
+g2
+Ntp9917
+Rp9918
+(dp9919
+g188
+(lp9920
+g9838
+asg64
+Vkeyring_acl_map_pkey
+p9921
+sg191
+g9756
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp9922
+Rp9923
+(dp9924
+g42
+g0
+(g43
+g44
+(dp9925
+g9836
+g9838
+stp9926
+Rp9927
+(dp9928
+g22
+(lp9929
+g9836
+asbsbsbsg204
+g4
+sg205
+g28
+((lp9930
+g0
+(g207
+g2
+Ntp9931
+Rp9932
+(dp9933
+g55
+g9756
+sg56
+I01
+sg64
+S'keyring_acl_map_keyring_id_key'
+p9934
+sg195
+g0
+(g38
+g2
+Ntp9935
+Rp9936
+(dp9937
+g42
+g0
+(g43
+g44
+(dp9938
+g9766
+g9764
+sg9797
+g9795
+stp9939
+Rp9940
+(dp9941
+g22
+(lp9942
+g9797
+ag9766
+asbsbsg220
+(dp9943
+sbatp9944
+Rp9945
+sg220
+(dp9946
+sg225
+g9754
+sg85
+g28
+((lp9947
+g9918
+ag9783
+ag9814
+atp9948
+Rp9949
+sg229
+I01
+sg230
+NsbsS'binaries_suite_arch'
+p9950
+g0
+(g9
+g2
+Ntp9951
+Rp9952
+(dp9953
+g15
+Nsg16
+g17
+((lp9954
+tp9955
+Rp9956
+(dp9957
+g22
+(lp9958
+sbsg24
+(lp9959
+sg26
+Nsg27
+g28
+((lp9960
+tp9961
+Rp9962
+sg32
+g33
+(g34
+tp9963
+Rp9964
+sg37
+g0
+(g38
+g2
+Ntp9965
+Rp9966
+(dp9967
+g42
+g0
+(g43
+g44
+(dp9968
+Vbin
+p9969
+g0
+(g47
+g2
+Ntp9970
+Rp9971
+(dp9972
+g51
+g9969
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I405
+sg55
+g9952
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9969
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9973
+tp9974
+Rp9975
+(dp9976
+g22
+(lp9977
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp9978
+Rp9979
+sg85
+g28
+((lp9980
+tp9981
+Rp9982
+sbsVarch_string
+p9983
+g0
+(g47
+g2
+Ntp9984
+Rp9985
+(dp9986
+g51
+g9983
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I412
+sg55
+g9952
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9983
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp9987
+tp9988
+Rp9989
+(dp9990
+g22
+(lp9991
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp9992
+Rp9993
+(dp9994
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp9995
+tp9996
+Rp9997
+sbsVpackage
+p9998
+g0
+(g47
+g2
+Ntp9999
+Rp10000
+(dp10001
+g51
+g9998
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I406
+sg55
+g9952
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g9998
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10002
+tp10003
+Rp10004
+(dp10005
+g22
+(lp10006
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp10007
+Rp10008
+(dp10009
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp10010
+tp10011
+Rp10012
+sbsVsource
+p10013
+g0
+(g47
+g2
+Ntp10014
+Rp10015
+(dp10016
+g51
+g10013
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I408
+sg55
+g9952
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10013
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10017
+tp10018
+Rp10019
+(dp10020
+g22
+(lp10021
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10022
+Rp10023
+sg85
+g28
+((lp10024
+tp10025
+Rp10026
+sbsVversion
+p10027
+g0
+(g47
+g2
+Ntp10028
+Rp10029
+(dp10030
+g51
+g10027
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I407
+sg55
+g9952
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10027
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10031
+tp10032
+Rp10033
+(dp10034
+g22
+(lp10035
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp10036
+Rp10037
+sg85
+g28
+((lp10038
+tp10039
+Rp10040
+sbsVsuite_name
+p10041
+g0
+(g47
+g2
+Ntp10042
+Rp10043
+(dp10044
+g51
+g10041
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I410
+sg55
+g9952
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10041
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10045
+tp10046
+Rp10047
+(dp10048
+g22
+(lp10049
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp10050
+Rp10051
+(dp10052
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp10053
+tp10054
+Rp10055
+sbsVarchitecture
+p10056
+g0
+(g47
+g2
+Ntp10057
+Rp10058
+(dp10059
+g51
+g10056
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I411
+sg55
+g9952
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10056
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10060
+tp10061
+Rp10062
+(dp10063
+g22
+(lp10064
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10065
+Rp10066
+sg85
+g28
+((lp10067
+tp10068
+Rp10069
+sbsVsuite
+p10070
+g0
+(g47
+g2
+Ntp10071
+Rp10072
+(dp10073
+g51
+g10070
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I409
+sg55
+g9952
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10070
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10074
+tp10075
+Rp10076
+(dp10077
+g22
+(lp10078
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10079
+Rp10080
+sg85
+g28
+((lp10081
+tp10082
+Rp10083
+sbsVid
+p10084
+g0
+(g47
+g2
+Ntp10085
+Rp10086
+(dp10087
+g51
+g10084
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I404
+sg55
+g9952
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10084
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10088
+tp10089
+Rp10090
+(dp10091
+g22
+(lp10092
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10093
+Rp10094
+sg85
+g28
+((lp10095
+tp10096
+Rp10097
+sbstp10098
+Rp10099
+(dp10100
+g22
+(lp10101
+g10084
+ag9969
+ag9998
+ag10027
+ag10013
+ag10070
+ag10041
+ag10056
+ag9983
+asbsbsg64
+g9950
+sg183
+g0
+(g184
+g2
+Ntp10102
+Rp10103
+(dp10104
+g188
+(lp10105
+sg64
+Nsg191
+g9952
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp10106
+Rp10107
+(dp10108
+g42
+g0
+(g43
+g44
+(dp10109
+tp10110
+Rp10111
+(dp10112
+g22
+(lp10113
+sbsbsbsg204
+g4
+sg205
+g28
+((lp10114
+tp10115
+Rp10116
+sg220
+(dp10117
+sg225
+g9950
+sg85
+g28
+((lp10118
+g10103
+atp10119
+Rp10120
+sg229
+I01
+sg230
+NsbsVfingerprint
+p10121
+g0
+(g9
+g2
+Ntp10122
+Rp10123
+(dp10124
+g13
+S'fingerprint'
+p10125
+sg15
+Nsg16
+g17
+((lp10126
+g0
+(g558
+g2
+Ntp10127
+Rp10128
+(dp10129
+g191
+g0
+(g47
+g2
+Ntp10130
+Rp10131
+(dp10132
+g51
+Vkeyring
+p10133
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I106
+sg55
+g10123
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10134
+g10131
+atp10135
+Rp10136
+sg62
+Nsg63
+Nsg64
+g10133
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10137
+g10128
+atp10138
+Rp10139
+(dp10140
+g22
+(lp10141
+g10128
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10142
+Rp10143
+sg85
+g28
+((lp10144
+tp10145
+Rp10146
+sbsg193
+Nsg576
+Nsg64
+V$1
+p10147
+sg578
+Vkeyrings.id
+p10148
+sg580
+g0
+(g581
+g2
+Ntp10149
+Rp10150
+(dp10151
+g68
+Nsg576
+Nsg64
+g10147
+sg191
+g10123
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp10152
+Vkeyring
+p10153
+g10128
+stp10154
+Rp10155
+(dp10156
+g22
+(lp10157
+g10153
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp10158
+Rp10159
+(dp10160
+g191
+g0
+(g47
+g2
+Ntp10161
+Rp10162
+(dp10163
+g51
+Vbinary_acl_id
+p10164
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I108
+sg55
+g10123
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10165
+g10162
+atp10166
+Rp10167
+sg62
+Nsg63
+Nsg64
+g10164
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10168
+g10159
+atp10169
+Rp10170
+(dp10171
+g22
+(lp10172
+g10159
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10173
+Rp10174
+sg85
+g28
+((lp10175
+tp10176
+Rp10177
+sbsg193
+Nsg576
+Nsg64
+Vfingerprint_binary_acl_id_fkey
+p10178
+sg578
+Vbinary_acl.id
+p10179
+sg580
+g0
+(g581
+g2
+Ntp10180
+Rp10181
+(dp10182
+g68
+Nsg576
+Nsg64
+g10178
+sg191
+g10123
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp10183
+Vbinary_acl_id
+p10184
+g10159
+stp10185
+Rp10186
+(dp10187
+g22
+(lp10188
+g10184
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp10189
+Rp10190
+(dp10191
+g191
+g0
+(g47
+g2
+Ntp10192
+Rp10193
+(dp10194
+g51
+Vsource_acl_id
+p10195
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I107
+sg55
+g10123
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10196
+g10193
+atp10197
+Rp10198
+sg62
+Nsg63
+Nsg64
+g10195
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10199
+g10190
+atp10200
+Rp10201
+(dp10202
+g22
+(lp10203
+g10190
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10204
+Rp10205
+sg85
+g28
+((lp10206
+tp10207
+Rp10208
+sbsg193
+Nsg576
+Nsg64
+Vfingerprint_source_acl_id_fkey
+p10209
+sg578
+Vsource_acl.id
+p10210
+sg580
+g0
+(g581
+g2
+Ntp10211
+Rp10212
+(dp10213
+g68
+Nsg576
+Nsg64
+g10209
+sg191
+g10123
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp10214
+Vsource_acl_id
+p10215
+g10190
+stp10216
+Rp10217
+(dp10218
+g22
+(lp10219
+g10215
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp10220
+Rp10221
+(dp10222
+g191
+g0
+(g47
+g2
+Ntp10223
+Rp10224
+(dp10225
+g51
+Vuid
+p10226
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I105
+sg55
+g10123
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10227
+g10224
+atp10228
+Rp10229
+sg62
+Nsg63
+Nsg64
+g10226
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10230
+g10221
+atp10231
+Rp10232
+(dp10233
+g22
+(lp10234
+g10221
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10235
+Rp10236
+sg85
+g28
+((lp10237
+tp10238
+Rp10239
+sbsg193
+Nsg576
+Nsg64
+Vfingerprint_uid
+p10240
+sg578
+Vuid.id
+p10241
+sg580
+g0
+(g581
+g2
+Ntp10242
+Rp10243
+(dp10244
+g68
+Nsg576
+Nsg64
+g10240
+sg191
+g10123
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp10245
+Vuid
+p10246
+g10221
+stp10247
+Rp10248
+(dp10249
+g22
+(lp10250
+g10246
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp10251
+Rp10252
+(dp10253
+g22
+(lp10254
+g10128
+ag10159
+ag10190
+ag10221
+asbsg24
+(lp10255
+sg26
+Nsg27
+g28
+((lp10256
+tp10257
+Rp10258
+sg32
+g33
+(g34
+tp10259
+Rp10260
+sg37
+g0
+(g38
+g2
+Ntp10261
+Rp10262
+(dp10263
+g42
+g0
+(g43
+g44
+(dp10264
+g10195
+g10193
+sg10226
+g10224
+sVcreated
+p10265
+g0
+(g47
+g2
+Ntp10266
+Rp10267
+(dp10268
+g51
+g10265
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp10269
+Rp10270
+(dp10271
+g97
+g10267
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp10272
+Rp10273
+(dp10274
+g104
+Vnow()
+p10275
+sg106
+Nsg107
+Nsg108
+(dp10276
+sbsbsg54
+I110
+sg55
+g10123
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10277
+g10267
+atp10278
+Rp10279
+sg62
+Nsg63
+Nsg64
+g10265
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10280
+tp10281
+Rp10282
+(dp10283
+g22
+(lp10284
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp10285
+Rp10286
+(dp10287
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp10288
+tp10289
+Rp10290
+sbsg10133
+g10131
+sVmodified
+p10291
+g0
+(g47
+g2
+Ntp10292
+Rp10293
+(dp10294
+g51
+g10291
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp10295
+Rp10296
+(dp10297
+g97
+g10293
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp10298
+Rp10299
+(dp10300
+g104
+Vnow()
+p10301
+sg106
+Nsg107
+Nsg108
+(dp10302
+sbsbsg54
+I111
+sg55
+g10123
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10303
+g10293
+atp10304
+Rp10305
+sg62
+Nsg63
+Nsg64
+g10291
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10306
+tp10307
+Rp10308
+(dp10309
+g22
+(lp10310
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp10311
+Rp10312
+(dp10313
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp10314
+tp10315
+Rp10316
+sbsVbinary_reject
+p10317
+g0
+(g47
+g2
+Ntp10318
+Rp10319
+(dp10320
+g51
+g10317
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp10321
+Rp10322
+(dp10323
+g97
+g10319
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp10324
+Rp10325
+(dp10326
+g104
+Vtrue
+p10327
+sg106
+Nsg107
+Nsg108
+(dp10328
+sbsbsg54
+I109
+sg55
+g10123
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10329
+g10319
+atp10330
+Rp10331
+sg62
+Nsg63
+Nsg64
+g10317
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10332
+tp10333
+Rp10334
+(dp10335
+g22
+(lp10336
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp10337
+Rp10338
+(dp10339
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp10340
+tp10341
+Rp10342
+sbsg10164
+g10162
+sVfingerprint
+p10343
+g0
+(g47
+g2
+Ntp10344
+Rp10345
+(dp10346
+g51
+g10343
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I104
+sg55
+g10123
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10347
+g10345
+atp10348
+Rp10349
+sg62
+Nsg63
+Nsg64
+g10343
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10350
+tp10351
+Rp10352
+(dp10353
+g22
+(lp10354
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp10355
+Rp10356
+(dp10357
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp10358
+tp10359
+Rp10360
+sbsVid
+p10361
+g0
+(g47
+g2
+Ntp10362
+Rp10363
+(dp10364
+g51
+g10361
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp10365
+Rp10366
+(dp10367
+g97
+g10363
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp10368
+Rp10369
+(dp10370
+g104
+Vnextval('fingerprint_id_seq'::regclass)
+p10371
+sg106
+Nsg107
+Nsg108
+(dp10372
+sbsbsg54
+I103
+sg55
+g10123
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp10373
+g10363
+atp10374
+Rp10375
+sg62
+Nsg63
+Nsg64
+g10361
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp10376
+tp10377
+Rp10378
+(dp10379
+g22
+(lp10380
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10381
+Rp10382
+sg85
+g28
+((lp10383
+tp10384
+Rp10385
+sbstp10386
+Rp10387
+(dp10388
+g22
+(lp10389
+g10361
+ag10343
+ag10226
+ag10133
+ag10195
+ag10164
+ag10317
+ag10265
+ag10291
+asbsbsg64
+g10121
+sg183
+g0
+(g184
+g2
+Ntp10390
+Rp10391
+(dp10392
+g188
+(lp10393
+g10363
+asg64
+Vfingerprint_pkey
+p10394
+sg191
+g10123
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp10395
+Rp10396
+(dp10397
+g42
+g0
+(g43
+g44
+(dp10398
+g10361
+g10363
+stp10399
+Rp10400
+(dp10401
+g22
+(lp10402
+g10361
+asbsbsbsg204
+g4
+sg205
+g28
+((lp10403
+g0
+(g207
+g2
+Ntp10404
+Rp10405
+(dp10406
+g55
+g10123
+sg56
+I01
+sg64
+S'fingerprint_fingerprint_key'
+p10407
+sg195
+g0
+(g38
+g2
+Ntp10408
+Rp10409
+(dp10410
+g42
+g0
+(g43
+g44
+(dp10411
+g10343
+g10345
+stp10412
+Rp10413
+(dp10414
+g22
+(lp10415
+g10343
+asbsbsg220
+(dp10416
+sbatp10417
+Rp10418
+sg220
+(dp10419
+sg225
+g10121
+sg85
+g28
+((lp10420
+g0
+(g1131
+g2
+Ntp10421
+Rp10422
+(dp10423
+g64
+Nsg191
+g10123
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp10424
+Rp10425
+(dp10426
+g1139
+g10338
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp10427
+Rp10428
+(dp10429
+g1146
+g1147
+sg1148
+(dp10430
+sg1150
+g0
+(g1151
+g2
+Ntp10431
+Rp10432
+(dp10433
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp10434
+Rp10435
+(dp10436
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp10437
+g0
+(g1168
+g2
+Ntp10438
+Rp10439
+(dp10440
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24603216 binary_reject)s
+p10441
+tp10442
+Rp10443
+sg1178
+I00
+sg76
+g1157
+sg1179
+g10317
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp10444
+Rp10445
+(dp10446
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24602640 binary_reject)s
+p10447
+tp10448
+Rp10449
+sg1178
+I00
+sg76
+g1157
+sg1179
+g10317
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g10319
+sbsbag10181
+ag10150
+ag10391
+ag10212
+ag10243
+atp10450
+Rp10451
+sg229
+I01
+sg230
+NsbsS'any_associations_source'
+p10452
+g0
+(g9
+g2
+Ntp10453
+Rp10454
+(dp10455
+g15
+Nsg16
+g17
+((lp10456
+tp10457
+Rp10458
+(dp10459
+g22
+(lp10460
+sbsg24
+(lp10461
+sg26
+Nsg27
+g28
+((lp10462
+tp10463
+Rp10464
+sg32
+g33
+(g34
+tp10465
+Rp10466
+sg37
+g0
+(g38
+g2
+Ntp10467
+Rp10468
+(dp10469
+g42
+g0
+(g43
+g44
+(dp10470
+Vbin
+p10471
+g0
+(g47
+g2
+Ntp10472
+Rp10473
+(dp10474
+g51
+g10471
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I390
+sg55
+g10454
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10471
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10475
+tp10476
+Rp10477
+(dp10478
+g22
+(lp10479
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10480
+Rp10481
+sg85
+g28
+((lp10482
+tp10483
+Rp10484
+sbsVsrc
+p10485
+g0
+(g47
+g2
+Ntp10486
+Rp10487
+(dp10488
+g51
+g10485
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I394
+sg55
+g10454
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10485
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10489
+tp10490
+Rp10491
+(dp10492
+g22
+(lp10493
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10494
+Rp10495
+sg85
+g28
+((lp10496
+tp10497
+Rp10498
+sbsVpackage
+p10499
+g0
+(g47
+g2
+Ntp10500
+Rp10501
+(dp10502
+g51
+g10499
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I391
+sg55
+g10454
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10499
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10503
+tp10504
+Rp10505
+(dp10506
+g22
+(lp10507
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp10508
+Rp10509
+(dp10510
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp10511
+tp10512
+Rp10513
+sbsVsrcver
+p10514
+g0
+(g47
+g2
+Ntp10515
+Rp10516
+(dp10517
+g51
+g10514
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I396
+sg55
+g10454
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10514
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10518
+tp10519
+Rp10520
+(dp10521
+g22
+(lp10522
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp10523
+Rp10524
+sg85
+g28
+((lp10525
+tp10526
+Rp10527
+sbsVsource
+p10528
+g0
+(g47
+g2
+Ntp10529
+Rp10530
+(dp10531
+g51
+g10528
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I395
+sg55
+g10454
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10528
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10532
+tp10533
+Rp10534
+(dp10535
+g22
+(lp10536
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp10537
+Rp10538
+(dp10539
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp10540
+tp10541
+Rp10542
+sbsVarchitecture
+p10543
+g0
+(g47
+g2
+Ntp10544
+Rp10545
+(dp10546
+g51
+g10543
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I393
+sg55
+g10454
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10543
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10547
+tp10548
+Rp10549
+(dp10550
+g22
+(lp10551
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10552
+Rp10553
+sg85
+g28
+((lp10554
+tp10555
+Rp10556
+sbsVsuite
+p10557
+g0
+(g47
+g2
+Ntp10558
+Rp10559
+(dp10560
+g51
+g10557
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I389
+sg55
+g10454
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10557
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10561
+tp10562
+Rp10563
+(dp10564
+g22
+(lp10565
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10566
+Rp10567
+sg85
+g28
+((lp10568
+tp10569
+Rp10570
+sbsVbinver
+p10571
+g0
+(g47
+g2
+Ntp10572
+Rp10573
+(dp10574
+g51
+g10571
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I392
+sg55
+g10454
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10571
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10575
+tp10576
+Rp10577
+(dp10578
+g22
+(lp10579
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp10580
+Rp10581
+sg85
+g28
+((lp10582
+tp10583
+Rp10584
+sbsVid
+p10585
+g0
+(g47
+g2
+Ntp10586
+Rp10587
+(dp10588
+g51
+g10585
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I388
+sg55
+g10454
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g10585
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10589
+tp10590
+Rp10591
+(dp10592
+g22
+(lp10593
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10594
+Rp10595
+sg85
+g28
+((lp10596
+tp10597
+Rp10598
+sbstp10599
+Rp10600
+(dp10601
+g22
+(lp10602
+g10585
+ag10557
+ag10471
+ag10499
+ag10571
+ag10543
+ag10485
+ag10528
+ag10514
+asbsbsg64
+g10452
+sg183
+g0
+(g184
+g2
+Ntp10603
+Rp10604
+(dp10605
+g188
+(lp10606
+sg64
+Nsg191
+g10454
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp10607
+Rp10608
+(dp10609
+g42
+g0
+(g43
+g44
+(dp10610
+tp10611
+Rp10612
+(dp10613
+g22
+(lp10614
+sbsbsbsg204
+g4
+sg205
+g28
+((lp10615
+tp10616
+Rp10617
+sg220
+(dp10618
+sg225
+g10452
+sg85
+g28
+((lp10619
+g10604
+atp10620
+Rp10621
+sg229
+I01
+sg230
+Nsbsg6715
+g6623
+sS'binaries_metadata'
+p10622
+g0
+(g9
+g2
+Ntp10623
+Rp10624
+(dp10625
+g13
+S'binaries_metadata'
+p10626
+sg15
+Nsg16
+g17
+((lp10627
+g0
+(g558
+g2
+Ntp10628
+Rp10629
+(dp10630
+g191
+g0
+(g47
+g2
+Ntp10631
+Rp10632
+(dp10633
+g54
+I185
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vbin_id
+p10634
+sg55
+g10624
+sg3105
+g28
+((lp10635
+g10632
+atp10636
+Rp10637
+sg64
+g10634
+sg58
+g28
+((lp10638
+g10632
+atp10639
+Rp10640
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10641
+g10629
+atp10642
+Rp10643
+(dp10644
+g22
+(lp10645
+g10629
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10646
+Rp10647
+sg85
+g28
+((lp10648
+tp10649
+Rp10650
+sbsg193
+Nsg576
+Nsg64
+Vbinaries_metadata_bin_id_fkey
+p10651
+sg578
+Vbinaries.id
+p10652
+sg580
+g0
+(g581
+g2
+Ntp10653
+Rp10654
+(dp10655
+g68
+Nsg576
+Nsg64
+g10651
+sg191
+g10624
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp10656
+Vbin_id
+p10657
+g10629
+stp10658
+Rp10659
+(dp10660
+g22
+(lp10661
+g10657
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g0
+(g47
+g2
+Ntp10662
+Rp10663
+(dp10664
+g51
+Vid
+p10665
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp10666
+Rp10667
+(dp10668
+g97
+g10663
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp10669
+Rp10670
+(dp10671
+g104
+Vnextval('binaries_id_seq'::regclass)
+p10672
+sg106
+Nsg107
+Nsg108
+(dp10673
+sbsbsg54
+I63
+sg55
+g0
+(g9
+g2
+Ntp10674
+Rp10675
+(dp10676
+g13
+S'binaries'
+p10677
+sg15
+Nsg16
+g17
+((lp10678
+g0
+(g558
+g2
+Ntp10679
+Rp10680
+(dp10681
+g191
+g0
+(g47
+g2
+Ntp10682
+Rp10683
+(dp10684
+g51
+Varchitecture
+p10685
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I68
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10686
+g10683
+atp10687
+Rp10688
+sg62
+Nsg63
+Nsg64
+g10685
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10689
+g10680
+atp10690
+Rp10691
+(dp10692
+g22
+(lp10693
+g10680
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10694
+Rp10695
+sg85
+g28
+((lp10696
+tp10697
+Rp10698
+sbsg193
+Nsg576
+Nsg64
+Vbinaries_architecture
+p10699
+sg578
+Varchitecture.id
+p10700
+sg580
+g0
+(g581
+g2
+Ntp10701
+Rp10702
+(dp10703
+g68
+Nsg576
+Nsg64
+g10699
+sg191
+g10675
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp10704
+Varchitecture
+p10705
+g10680
+stp10706
+Rp10707
+(dp10708
+g22
+(lp10709
+g10705
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp10710
+Rp10711
+(dp10712
+g191
+g0
+(g47
+g2
+Ntp10713
+Rp10714
+(dp10715
+g51
+Vfile
+p10716
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I69
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10717
+g10714
+atp10718
+Rp10719
+sg62
+Nsg63
+Nsg64
+g10716
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10720
+g10711
+atp10721
+Rp10722
+(dp10723
+g22
+(lp10724
+g10711
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10725
+Rp10726
+sg85
+g28
+((lp10727
+tp10728
+Rp10729
+sbsg193
+Nsg576
+Nsg64
+Vbinaries_file
+p10730
+sg578
+Vfiles.id
+p10731
+sg580
+g0
+(g581
+g2
+Ntp10732
+Rp10733
+(dp10734
+g68
+Nsg576
+Nsg64
+g10730
+sg191
+g10675
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp10735
+Vfile
+p10736
+g10711
+stp10737
+Rp10738
+(dp10739
+g22
+(lp10740
+g10736
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp10741
+Rp10742
+(dp10743
+g191
+g0
+(g47
+g2
+Ntp10744
+Rp10745
+(dp10746
+g51
+Vmaintainer
+p10747
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I66
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10748
+g10745
+atp10749
+Rp10750
+sg62
+Nsg63
+Nsg64
+g10747
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10751
+g10742
+atp10752
+Rp10753
+(dp10754
+g22
+(lp10755
+g10742
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10756
+Rp10757
+sg85
+g28
+((lp10758
+tp10759
+Rp10760
+sbsg193
+Nsg576
+Nsg64
+Vbinaries_maintainer
+p10761
+sg578
+Vmaintainer.id
+p10762
+sg580
+g0
+(g581
+g2
+Ntp10763
+Rp10764
+(dp10765
+g68
+Nsg576
+Nsg64
+g10761
+sg191
+g10675
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp10766
+Vmaintainer
+p10767
+g10742
+stp10768
+Rp10769
+(dp10770
+g22
+(lp10771
+g10767
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp10772
+Rp10773
+(dp10774
+g191
+g0
+(g47
+g2
+Ntp10775
+Rp10776
+(dp10777
+g51
+Vsig_fpr
+p10778
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I71
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10779
+g10776
+atp10780
+Rp10781
+sg62
+Nsg63
+Nsg64
+g10778
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10782
+g10773
+atp10783
+Rp10784
+(dp10785
+g22
+(lp10786
+g10773
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10787
+Rp10788
+sg85
+g28
+((lp10789
+tp10790
+Rp10791
+sbsg193
+Nsg576
+Nsg64
+Vbinaries_sig_fpr
+p10792
+sg578
+Vfingerprint.id
+p10793
+sg580
+g0
+(g581
+g2
+Ntp10794
+Rp10795
+(dp10796
+g68
+Nsg576
+Nsg64
+g10792
+sg191
+g10675
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp10797
+Vsig_fpr
+p10798
+g10773
+stp10799
+Rp10800
+(dp10801
+g22
+(lp10802
+g10798
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp10803
+Rp10804
+(dp10805
+g191
+g0
+(g47
+g2
+Ntp10806
+Rp10807
+(dp10808
+g51
+Vsource
+p10809
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I67
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10810
+g10807
+atp10811
+Rp10812
+sg62
+Nsg63
+Nsg64
+g10809
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10813
+g10804
+atp10814
+Rp10815
+(dp10816
+g22
+(lp10817
+g10804
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp10818
+Rp10819
+sg85
+g28
+((lp10820
+tp10821
+Rp10822
+sbsg193
+Nsg576
+Nsg64
+Vbinaries_source
+p10823
+sg578
+Vsource.id
+p10824
+sg580
+g0
+(g581
+g2
+Ntp10825
+Rp10826
+(dp10827
+g68
+Nsg576
+Nsg64
+g10823
+sg191
+g10675
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp10828
+Vsource
+p10829
+g10804
+stp10830
+Rp10831
+(dp10832
+g22
+(lp10833
+g10829
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp10834
+Rp10835
+(dp10836
+g22
+(lp10837
+g10680
+ag10711
+ag10742
+ag10773
+ag10804
+asbsg24
+(lp10838
+sg26
+Nsg27
+g28
+((lp10839
+tp10840
+Rp10841
+sg32
+g33
+(g34
+tp10842
+Rp10843
+sg37
+g0
+(g38
+g2
+Ntp10844
+Rp10845
+(dp10846
+g42
+g0
+(g43
+g44
+(dp10847
+g10747
+g10745
+sVpackage
+p10848
+g0
+(g47
+g2
+Ntp10849
+Rp10850
+(dp10851
+g51
+g10848
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I64
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10852
+g10850
+atp10853
+Rp10854
+sg62
+Nsg63
+Nsg64
+g10848
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10855
+tp10856
+Rp10857
+(dp10858
+g22
+(lp10859
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp10860
+Rp10861
+(dp10862
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp10863
+tp10864
+Rp10865
+sbsVcreated
+p10866
+g0
+(g47
+g2
+Ntp10867
+Rp10868
+(dp10869
+g51
+g10866
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp10870
+Rp10871
+(dp10872
+g97
+g10868
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp10873
+Rp10874
+(dp10875
+g104
+Vnow()
+p10876
+sg106
+Nsg107
+Nsg108
+(dp10877
+sbsbsg54
+I73
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10878
+g10868
+atp10879
+Rp10880
+sg62
+Nsg63
+Nsg64
+g10866
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10881
+tp10882
+Rp10883
+(dp10884
+g22
+(lp10885
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp10886
+Rp10887
+(dp10888
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp10889
+tp10890
+Rp10891
+sbsVinstall_date
+p10892
+g0
+(g47
+g2
+Ntp10893
+Rp10894
+(dp10895
+g51
+g10892
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp10896
+Rp10897
+(dp10898
+g97
+g10894
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp10899
+Rp10900
+(dp10901
+g104
+Vnow()
+p10902
+sg106
+Nsg107
+Nsg108
+(dp10903
+sbsbsg54
+I72
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10904
+g10894
+atp10905
+Rp10906
+sg62
+Nsg63
+Nsg64
+g10892
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10907
+tp10908
+Rp10909
+(dp10910
+g22
+(lp10911
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp10912
+Rp10913
+(dp10914
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp10915
+tp10916
+Rp10917
+sbsg10778
+g10776
+sVmodified
+p10918
+g0
+(g47
+g2
+Ntp10919
+Rp10920
+(dp10921
+g51
+g10918
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp10922
+Rp10923
+(dp10924
+g97
+g10920
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp10925
+Rp10926
+(dp10927
+g104
+Vnow()
+p10928
+sg106
+Nsg107
+Nsg108
+(dp10929
+sbsbsg54
+I74
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10930
+g10920
+atp10931
+Rp10932
+sg62
+Nsg63
+Nsg64
+g10918
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10933
+tp10934
+Rp10935
+(dp10936
+g22
+(lp10937
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp10938
+Rp10939
+(dp10940
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp10941
+tp10942
+Rp10943
+sbsg10809
+g10807
+sVversion
+p10944
+g0
+(g47
+g2
+Ntp10945
+Rp10946
+(dp10947
+g51
+g10944
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I65
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10948
+g10946
+atp10949
+Rp10950
+sg62
+Nsg63
+Nsg64
+g10944
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10951
+tp10952
+Rp10953
+(dp10954
+g22
+(lp10955
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp10956
+Rp10957
+sg85
+g28
+((lp10958
+tp10959
+Rp10960
+sbsg10685
+g10683
+sg10716
+g10714
+sVstanza
+p10961
+g0
+(g47
+g2
+Ntp10962
+Rp10963
+(dp10964
+g51
+g10961
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I75
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10965
+g10963
+atp10966
+Rp10967
+sg62
+Nsg63
+Nsg64
+g10961
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10968
+tp10969
+Rp10970
+(dp10971
+g22
+(lp10972
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp10973
+Rp10974
+(dp10975
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp10976
+tp10977
+Rp10978
+sbsVtype
+p10979
+g0
+(g47
+g2
+Ntp10980
+Rp10981
+(dp10982
+g51
+g10979
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I70
+sg55
+g10675
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp10983
+g10981
+atp10984
+Rp10985
+sg62
+Nsg63
+Nsg64
+g10979
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp10986
+tp10987
+Rp10988
+(dp10989
+g22
+(lp10990
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp10991
+Rp10992
+(dp10993
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp10994
+tp10995
+Rp10996
+sbsg10665
+g10663
+stp10997
+Rp10998
+(dp10999
+g22
+(lp11000
+g10665
+ag10848
+ag10944
+ag10747
+ag10809
+ag10685
+ag10716
+ag10979
+ag10778
+ag10892
+ag10866
+ag10918
+ag10961
+asbsbsg64
+Vbinaries
+p11001
+sg183
+g0
+(g184
+g2
+Ntp11002
+Rp11003
+(dp11004
+g188
+(lp11005
+g10663
+asg64
+Vbinaries_pkey
+p11006
+sg191
+g10675
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp11007
+Rp11008
+(dp11009
+g42
+g0
+(g43
+g44
+(dp11010
+g10665
+g10663
+stp11011
+Rp11012
+(dp11013
+g22
+(lp11014
+g10665
+asbsbsbsg204
+g4
+sg205
+g28
+((lp11015
+g0
+(g207
+g2
+Ntp11016
+Rp11017
+(dp11018
+g55
+g10675
+sg56
+I01
+sg64
+S'binaries_id'
+p11019
+sg195
+g0
+(g38
+g2
+Ntp11020
+Rp11021
+(dp11022
+g42
+g0
+(g43
+g44
+(dp11023
+g10665
+g10663
+stp11024
+Rp11025
+(dp11026
+g22
+(lp11027
+g10665
+asbsbsg220
+(dp11028
+sbag0
+(g207
+g2
+Ntp11029
+Rp11030
+(dp11031
+g55
+g10675
+sg56
+I00
+sg64
+S'binaries_by_package'
+p11032
+sg195
+g0
+(g38
+g2
+Ntp11033
+Rp11034
+(dp11035
+g42
+g0
+(g43
+g44
+(dp11036
+g10665
+g10663
+sg10848
+g10850
+stp11037
+Rp11038
+(dp11039
+g22
+(lp11040
+g10665
+ag10848
+asbsbsg220
+(dp11041
+sbag0
+(g207
+g2
+Ntp11042
+Rp11043
+(dp11044
+g55
+g10675
+sg56
+I00
+sg64
+S'binaries_maintainer'
+p11045
+sg195
+g0
+(g38
+g2
+Ntp11046
+Rp11047
+(dp11048
+g42
+g0
+(g43
+g44
+(dp11049
+g10747
+g10745
+stp11050
+Rp11051
+(dp11052
+g22
+(lp11053
+g10747
+asbsbsg220
+(dp11054
+sbag0
+(g207
+g2
+Ntp11055
+Rp11056
+(dp11057
+g55
+g10675
+sg56
+I00
+sg64
+S'jjt5'
+p11058
+sg195
+g0
+(g38
+g2
+Ntp11059
+Rp11060
+(dp11061
+g42
+g0
+(g43
+g44
+(dp11062
+g10809
+g10807
+sg10665
+g10663
+stp11063
+Rp11064
+(dp11065
+g22
+(lp11066
+g10665
+ag10809
+asbsbsg220
+(dp11067
+sbag0
+(g207
+g2
+Ntp11068
+Rp11069
+(dp11070
+g55
+g10675
+sg56
+I01
+sg64
+S'binaries_package_key'
+p11071
+sg195
+g0
+(g38
+g2
+Ntp11072
+Rp11073
+(dp11074
+g42
+g0
+(g43
+g44
+(dp11075
+g10944
+g10946
+sg10685
+g10683
+sg10848
+g10850
+stp11076
+Rp11077
+(dp11078
+g22
+(lp11079
+g10848
+ag10944
+ag10685
+asbsbsg220
+(dp11080
+sbag0
+(g207
+g2
+Ntp11081
+Rp11082
+(dp11083
+g55
+g10675
+sg56
+I00
+sg64
+S'jjt4'
+p11084
+sg195
+g0
+(g38
+g2
+Ntp11085
+Rp11086
+(dp11087
+g42
+g0
+(g43
+g44
+(dp11088
+g10809
+g10807
+stp11089
+Rp11090
+(dp11091
+g22
+(lp11092
+g10809
+asbsbsg220
+(dp11093
+sbag0
+(g207
+g2
+Ntp11094
+Rp11095
+(dp11096
+g55
+g10675
+sg56
+I00
+sg64
+S'binaries_architecture_idx'
+p11097
+sg195
+g0
+(g38
+g2
+Ntp11098
+Rp11099
+(dp11100
+g42
+g0
+(g43
+g44
+(dp11101
+g10685
+g10683
+stp11102
+Rp11103
+(dp11104
+g22
+(lp11105
+g10685
+asbsbsg220
+(dp11106
+sbag0
+(g207
+g2
+Ntp11107
+Rp11108
+(dp11109
+g55
+g10675
+sg56
+I01
+sg64
+S'binaries_file_key'
+p11110
+sg195
+g0
+(g38
+g2
+Ntp11111
+Rp11112
+(dp11113
+g42
+g0
+(g43
+g44
+(dp11114
+g10716
+g10714
+stp11115
+Rp11116
+(dp11117
+g22
+(lp11118
+g10716
+asbsbsg220
+(dp11119
+sbag0
+(g207
+g2
+Ntp11120
+Rp11121
+(dp11122
+g55
+g10675
+sg56
+I00
+sg64
+S'binaries_files'
+p11123
+sg195
+g0
+(g38
+g2
+Ntp11124
+Rp11125
+(dp11126
+g42
+g0
+(g43
+g44
+(dp11127
+g10716
+g10714
+stp11128
+Rp11129
+(dp11130
+g22
+(lp11131
+g10716
+asbsbsg220
+(dp11132
+sbag0
+(g207
+g2
+Ntp11133
+Rp11134
+(dp11135
+g55
+g10675
+sg56
+I00
+sg64
+S'binaries_fingerprint'
+p11136
+sg195
+g0
+(g38
+g2
+Ntp11137
+Rp11138
+(dp11139
+g42
+g0
+(g43
+g44
+(dp11140
+g10778
+g10776
+stp11141
+Rp11142
+(dp11143
+g22
+(lp11144
+g10778
+asbsbsg220
+(dp11145
+sbatp11146
+Rp11147
+sg220
+(dp11148
+sg225
+g11001
+sg85
+g28
+((lp11149
+g10733
+ag10702
+ag10826
+ag11003
+ag10764
+ag10795
+atp11150
+Rp11151
+sg229
+I01
+sg230
+Nsbsg56
+Nsg57
+I01
+sg58
+g28
+((lp11152
+g10663
+atp11153
+Rp11154
+sg62
+Nsg63
+Nsg64
+g10665
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp11155
+tp11156
+Rp11157
+(dp11158
+g22
+(lp11159
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11160
+Rp11161
+sg85
+g28
+((lp11162
+tp11163
+Rp11164
+sbsg593
+I00
+sbag0
+(g558
+g2
+Ntp11165
+Rp11166
+(dp11167
+g191
+g0
+(g47
+g2
+Ntp11168
+Rp11169
+(dp11170
+g54
+I186
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vkey_id
+p11171
+sg55
+g10624
+sg3105
+g28
+((lp11172
+g11169
+atp11173
+Rp11174
+sg64
+g11171
+sg58
+g28
+((lp11175
+g11169
+atp11176
+Rp11177
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11178
+g11166
+atp11179
+Rp11180
+(dp11181
+g22
+(lp11182
+g11166
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11183
+Rp11184
+sg85
+g28
+((lp11185
+tp11186
+Rp11187
+sbsg193
+Nsg576
+Nsg64
+Vbinaries_metadata_key_id_fkey
+p11188
+sg578
+Vmetadata_keys.key_id
+p11189
+sg580
+g0
+(g581
+g2
+Ntp11190
+Rp11191
+(dp11192
+g68
+Nsg576
+Nsg64
+g11188
+sg191
+g10624
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp11193
+Vkey_id
+p11194
+g11166
+stp11195
+Rp11196
+(dp11197
+g22
+(lp11198
+g11194
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g8303
+sg593
+I00
+sbatp11199
+Rp11200
+(dp11201
+g22
+(lp11202
+g10629
+ag11166
+asbsg24
+(lp11203
+sg26
+Nsg27
+g28
+((lp11204
+tp11205
+Rp11206
+sg32
+g33
+(g34
+tp11207
+Rp11208
+sg37
+g0
+(g38
+g2
+Ntp11209
+Rp11210
+(dp11211
+g42
+g0
+(g43
+g44
+(dp11212
+g11171
+g11169
+sg10634
+g10632
+sVvalue
+p11213
+g0
+(g47
+g2
+Ntp11214
+Rp11215
+(dp11216
+g51
+g11213
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I187
+sg55
+g10624
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp11217
+g11215
+atp11218
+Rp11219
+sg62
+Nsg63
+Nsg64
+g11213
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11220
+tp11221
+Rp11222
+(dp11223
+g22
+(lp11224
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp11225
+Rp11226
+(dp11227
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp11228
+tp11229
+Rp11230
+sbstp11231
+Rp11232
+(dp11233
+g22
+(lp11234
+g10634
+ag11171
+ag11213
+asbsbsg64
+g10622
+sg183
+g0
+(g184
+g2
+Ntp11235
+Rp11236
+(dp11237
+g188
+(lp11238
+g10632
+ag11169
+asg64
+Vbinaries_metadata_pkey
+p11239
+sg191
+g10624
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp11240
+Rp11241
+(dp11242
+g42
+g0
+(g43
+g44
+(dp11243
+g11171
+g11169
+sg10634
+g10632
+stp11244
+Rp11245
+(dp11246
+g22
+(lp11247
+g10634
+ag11171
+asbsbsbsg204
+g4
+sg205
+g28
+((lp11248
+tp11249
+Rp11250
+sg220
+(dp11251
+sg225
+g10622
+sg85
+g28
+((lp11252
+g11236
+ag10654
+ag11191
+atp11253
+Rp11254
+sg229
+I01
+sg230
+NsbsS'obsolete_any_associations'
+p11255
+g0
+(g9
+g2
+Ntp11256
+Rp11257
+(dp11258
+g15
+Nsg16
+g17
+((lp11259
+tp11260
+Rp11261
+(dp11262
+g22
+(lp11263
+sbsg24
+(lp11264
+sg26
+Nsg27
+g28
+((lp11265
+tp11266
+Rp11267
+sg32
+g33
+(g34
+tp11268
+Rp11269
+sg37
+g0
+(g38
+g2
+Ntp11270
+Rp11271
+(dp11272
+g42
+g0
+(g43
+g44
+(dp11273
+Vsuite
+p11274
+g0
+(g47
+g2
+Ntp11275
+Rp11276
+(dp11277
+g51
+g11274
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I454
+sg55
+g11257
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11274
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11278
+tp11279
+Rp11280
+(dp11281
+g22
+(lp11282
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11283
+Rp11284
+sg85
+g28
+((lp11285
+tp11286
+Rp11287
+sbsVversion
+p11288
+g0
+(g47
+g2
+Ntp11289
+Rp11290
+(dp11291
+g51
+g11288
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I452
+sg55
+g11257
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11288
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11292
+tp11293
+Rp11294
+(dp11295
+g22
+(lp11296
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp11297
+Rp11298
+sg85
+g28
+((lp11299
+tp11300
+Rp11301
+sbsVarchitecture
+p11302
+g0
+(g47
+g2
+Ntp11303
+Rp11304
+(dp11305
+g51
+g11302
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I451
+sg55
+g11257
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11302
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11306
+tp11307
+Rp11308
+(dp11309
+g22
+(lp11310
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11311
+Rp11312
+sg85
+g28
+((lp11313
+tp11314
+Rp11315
+sbsVid
+p11316
+g0
+(g47
+g2
+Ntp11317
+Rp11318
+(dp11319
+g51
+g11316
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I450
+sg55
+g11257
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11316
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11320
+tp11321
+Rp11322
+(dp11323
+g22
+(lp11324
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11325
+Rp11326
+sg85
+g28
+((lp11327
+tp11328
+Rp11329
+sbsVpackage
+p11330
+g0
+(g47
+g2
+Ntp11331
+Rp11332
+(dp11333
+g51
+g11330
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I453
+sg55
+g11257
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11330
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11334
+tp11335
+Rp11336
+(dp11337
+g22
+(lp11338
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp11339
+Rp11340
+(dp11341
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp11342
+tp11343
+Rp11344
+sbstp11345
+Rp11346
+(dp11347
+g22
+(lp11348
+g11316
+ag11302
+ag11288
+ag11330
+ag11274
+asbsbsg64
+g11255
+sg183
+g0
+(g184
+g2
+Ntp11349
+Rp11350
+(dp11351
+g188
+(lp11352
+sg64
+Nsg191
+g11257
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp11353
+Rp11354
+(dp11355
+g42
+g0
+(g43
+g44
+(dp11356
+tp11357
+Rp11358
+(dp11359
+g22
+(lp11360
+sbsbsbsg204
+g4
+sg205
+g28
+((lp11361
+tp11362
+Rp11363
+sg220
+(dp11364
+sg225
+g11255
+sg85
+g28
+((lp11365
+g11350
+atp11366
+Rp11367
+sg229
+I01
+sg230
+NsbsS'upload_blocks'
+p11368
+g0
+(g9
+g2
+Ntp11369
+Rp11370
+(dp11371
+g13
+S'upload_blocks'
+p11372
+sg15
+Nsg16
+g17
+((lp11373
+g0
+(g558
+g2
+Ntp11374
+Rp11375
+(dp11376
+g191
+g0
+(g47
+g2
+Ntp11377
+Rp11378
+(dp11379
+g51
+Vfingerprint_id
+p11380
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I370
+sg55
+g11370
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp11381
+g11378
+atp11382
+Rp11383
+sg62
+Nsg63
+Nsg64
+g11380
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11384
+g11375
+atp11385
+Rp11386
+(dp11387
+g22
+(lp11388
+g11375
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11389
+Rp11390
+sg85
+g28
+((lp11391
+tp11392
+Rp11393
+sbsg193
+Nsg576
+Nsg64
+Vupload_blocks_fingerprint_id_fkey
+p11394
+sg578
+Vfingerprint.id
+p11395
+sg580
+g0
+(g581
+g2
+Ntp11396
+Rp11397
+(dp11398
+g68
+Nsg576
+Nsg64
+g11394
+sg191
+g11370
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp11399
+Vfingerprint_id
+p11400
+g11375
+stp11401
+Rp11402
+(dp11403
+g22
+(lp11404
+g11400
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp11405
+Rp11406
+(dp11407
+g191
+g0
+(g47
+g2
+Ntp11408
+Rp11409
+(dp11410
+g51
+Vuid_id
+p11411
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I371
+sg55
+g11370
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp11412
+g11409
+atp11413
+Rp11414
+sg62
+Nsg63
+Nsg64
+g11411
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11415
+g11406
+atp11416
+Rp11417
+(dp11418
+g22
+(lp11419
+g11406
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11420
+Rp11421
+sg85
+g28
+((lp11422
+tp11423
+Rp11424
+sbsg193
+Nsg576
+Nsg64
+Vupload_blocks_uid_id_fkey
+p11425
+sg578
+Vuid.id
+p11426
+sg580
+g0
+(g581
+g2
+Ntp11427
+Rp11428
+(dp11429
+g68
+Nsg576
+Nsg64
+g11425
+sg191
+g11370
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp11430
+Vuid_id
+p11431
+g11406
+stp11432
+Rp11433
+(dp11434
+g22
+(lp11435
+g11431
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp11436
+Rp11437
+(dp11438
+g22
+(lp11439
+g11375
+ag11406
+asbsg24
+(lp11440
+sg26
+Nsg27
+g28
+((lp11441
+tp11442
+Rp11443
+sg32
+g33
+(g34
+tp11444
+Rp11445
+sg37
+g0
+(g38
+g2
+Ntp11446
+Rp11447
+(dp11448
+g42
+g0
+(g43
+g44
+(dp11449
+Vcreated
+p11450
+g0
+(g47
+g2
+Ntp11451
+Rp11452
+(dp11453
+g51
+g11450
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp11454
+Rp11455
+(dp11456
+g97
+g11452
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp11457
+Rp11458
+(dp11459
+g104
+Vnow()
+p11460
+sg106
+Nsg107
+Nsg108
+(dp11461
+sbsbsg54
+I373
+sg55
+g11370
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp11462
+g11452
+atp11463
+Rp11464
+sg62
+Nsg63
+Nsg64
+g11450
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11465
+tp11466
+Rp11467
+(dp11468
+g22
+(lp11469
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp11470
+Rp11471
+(dp11472
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp11473
+tp11474
+Rp11475
+sbsg11411
+g11409
+sg11380
+g11378
+sVmodified
+p11476
+g0
+(g47
+g2
+Ntp11477
+Rp11478
+(dp11479
+g51
+g11476
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp11480
+Rp11481
+(dp11482
+g97
+g11478
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp11483
+Rp11484
+(dp11485
+g104
+Vnow()
+p11486
+sg106
+Nsg107
+Nsg108
+(dp11487
+sbsbsg54
+I374
+sg55
+g11370
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp11488
+g11478
+atp11489
+Rp11490
+sg62
+Nsg63
+Nsg64
+g11476
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11491
+tp11492
+Rp11493
+(dp11494
+g22
+(lp11495
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp11496
+Rp11497
+(dp11498
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp11499
+tp11500
+Rp11501
+sbsVsource
+p11502
+g0
+(g47
+g2
+Ntp11503
+Rp11504
+(dp11505
+g51
+g11502
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I368
+sg55
+g11370
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp11506
+g11504
+atp11507
+Rp11508
+sg62
+Nsg63
+Nsg64
+g11502
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11509
+tp11510
+Rp11511
+(dp11512
+g22
+(lp11513
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp11514
+Rp11515
+(dp11516
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp11517
+tp11518
+Rp11519
+sbsVreason
+p11520
+g0
+(g47
+g2
+Ntp11521
+Rp11522
+(dp11523
+g51
+g11520
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I372
+sg55
+g11370
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp11524
+g11522
+atp11525
+Rp11526
+sg62
+Nsg63
+Nsg64
+g11520
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11527
+tp11528
+Rp11529
+(dp11530
+g22
+(lp11531
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp11532
+Rp11533
+(dp11534
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp11535
+tp11536
+Rp11537
+sbsVversion
+p11538
+g0
+(g47
+g2
+Ntp11539
+Rp11540
+(dp11541
+g51
+g11538
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I369
+sg55
+g11370
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp11542
+g11540
+atp11543
+Rp11544
+sg62
+Nsg63
+Nsg64
+g11538
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11545
+tp11546
+Rp11547
+(dp11548
+g22
+(lp11549
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp11550
+Rp11551
+sg85
+g28
+((lp11552
+tp11553
+Rp11554
+sbsVid
+p11555
+g0
+(g47
+g2
+Ntp11556
+Rp11557
+(dp11558
+g51
+g11555
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp11559
+Rp11560
+(dp11561
+g97
+g11557
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp11562
+Rp11563
+(dp11564
+g104
+Vnextval('upload_blocks_id_seq'::regclass)
+p11565
+sg106
+Nsg107
+Nsg108
+(dp11566
+sbsbsg54
+I367
+sg55
+g11370
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp11567
+g11557
+atp11568
+Rp11569
+sg62
+Nsg63
+Nsg64
+g11555
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp11570
+tp11571
+Rp11572
+(dp11573
+g22
+(lp11574
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11575
+Rp11576
+sg85
+g28
+((lp11577
+tp11578
+Rp11579
+sbstp11580
+Rp11581
+(dp11582
+g22
+(lp11583
+g11555
+ag11502
+ag11538
+ag11380
+ag11411
+ag11520
+ag11450
+ag11476
+asbsbsg64
+g11368
+sg183
+g0
+(g184
+g2
+Ntp11584
+Rp11585
+(dp11586
+g188
+(lp11587
+g11557
+asg64
+Vupload_blocks_pkey
+p11588
+sg191
+g11370
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp11589
+Rp11590
+(dp11591
+g42
+g0
+(g43
+g44
+(dp11592
+g11555
+g11557
+stp11593
+Rp11594
+(dp11595
+g22
+(lp11596
+g11555
+asbsbsbsg204
+g4
+sg205
+g28
+((lp11597
+tp11598
+Rp11599
+sg220
+(dp11600
+sg225
+g11368
+sg85
+g28
+((lp11601
+g11585
+ag11397
+ag11428
+atp11602
+Rp11603
+sg229
+I01
+sg230
+NsbsS'source_suite'
+p11604
+g0
+(g9
+g2
+Ntp11605
+Rp11606
+(dp11607
+g15
+Nsg16
+g17
+((lp11608
+tp11609
+Rp11610
+(dp11611
+g22
+(lp11612
+sbsg24
+(lp11613
+sg26
+Nsg27
+g28
+((lp11614
+tp11615
+Rp11616
+sg32
+g33
+(g34
+tp11617
+Rp11618
+sg37
+g0
+(g38
+g2
+Ntp11619
+Rp11620
+(dp11621
+g42
+g0
+(g43
+g44
+(dp11622
+Vsrc
+p11623
+g0
+(g47
+g2
+Ntp11624
+Rp11625
+(dp11626
+g51
+g11623
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I466
+sg55
+g11606
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11623
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11627
+tp11628
+Rp11629
+(dp11630
+g22
+(lp11631
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11632
+Rp11633
+sg85
+g28
+((lp11634
+tp11635
+Rp11636
+sbsVversion
+p11637
+g0
+(g47
+g2
+Ntp11638
+Rp11639
+(dp11640
+g51
+g11637
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I468
+sg55
+g11606
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11637
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11641
+tp11642
+Rp11643
+(dp11644
+g22
+(lp11645
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp11646
+Rp11647
+sg85
+g28
+((lp11648
+tp11649
+Rp11650
+sbsVsuite_name
+p11651
+g0
+(g47
+g2
+Ntp11652
+Rp11653
+(dp11654
+g51
+g11651
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I470
+sg55
+g11606
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11651
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11655
+tp11656
+Rp11657
+(dp11658
+g22
+(lp11659
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp11660
+Rp11661
+(dp11662
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp11663
+tp11664
+Rp11665
+sbsVsource
+p11666
+g0
+(g47
+g2
+Ntp11667
+Rp11668
+(dp11669
+g51
+g11666
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I467
+sg55
+g11606
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11666
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11670
+tp11671
+Rp11672
+(dp11673
+g22
+(lp11674
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp11675
+Rp11676
+(dp11677
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp11678
+tp11679
+Rp11680
+sbsVsuite
+p11681
+g0
+(g47
+g2
+Ntp11682
+Rp11683
+(dp11684
+g51
+g11681
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I469
+sg55
+g11606
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11681
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11685
+tp11686
+Rp11687
+(dp11688
+g22
+(lp11689
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11690
+Rp11691
+sg85
+g28
+((lp11692
+tp11693
+Rp11694
+sbsVinstall_date
+p11695
+g0
+(g47
+g2
+Ntp11696
+Rp11697
+(dp11698
+g51
+g11695
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I471
+sg55
+g11606
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11695
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11699
+tp11700
+Rp11701
+(dp11702
+g22
+(lp11703
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp11704
+Rp11705
+(dp11706
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp11707
+tp11708
+Rp11709
+sbsVid
+p11710
+g0
+(g47
+g2
+Ntp11711
+Rp11712
+(dp11713
+g51
+g11710
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I465
+sg55
+g11606
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11710
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11714
+tp11715
+Rp11716
+(dp11717
+g22
+(lp11718
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11719
+Rp11720
+sg85
+g28
+((lp11721
+tp11722
+Rp11723
+sbstp11724
+Rp11725
+(dp11726
+g22
+(lp11727
+g11710
+ag11623
+ag11666
+ag11637
+ag11681
+ag11651
+ag11695
+asbsbsg64
+g11604
+sg183
+g0
+(g184
+g2
+Ntp11728
+Rp11729
+(dp11730
+g188
+(lp11731
+sg64
+Nsg191
+g11606
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp11732
+Rp11733
+(dp11734
+g42
+g0
+(g43
+g44
+(dp11735
+tp11736
+Rp11737
+(dp11738
+g22
+(lp11739
+sbsbsbsg204
+g4
+sg205
+g28
+((lp11740
+tp11741
+Rp11742
+sg220
+(dp11743
+sg225
+g11604
+sg85
+g28
+((lp11744
+g11729
+atp11745
+Rp11746
+sg229
+I01
+sg230
+NsbsS'file_arch_suite'
+p11747
+g0
+(g9
+g2
+Ntp11748
+Rp11749
+(dp11750
+g15
+Nsg16
+g17
+((lp11751
+tp11752
+Rp11753
+(dp11754
+g22
+(lp11755
+sbsg24
+(lp11756
+sg26
+Nsg27
+g28
+((lp11757
+tp11758
+Rp11759
+sg32
+g33
+(g34
+tp11760
+Rp11761
+sg37
+g0
+(g38
+g2
+Ntp11762
+Rp11763
+(dp11764
+g42
+g0
+(g43
+g44
+(dp11765
+Vsuite
+p11766
+g0
+(g47
+g2
+Ntp11767
+Rp11768
+(dp11769
+g51
+g11766
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I428
+sg55
+g11749
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11766
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11770
+tp11771
+Rp11772
+(dp11773
+g22
+(lp11774
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11775
+Rp11776
+sg85
+g28
+((lp11777
+tp11778
+Rp11779
+sbsVarchitecture
+p11780
+g0
+(g47
+g2
+Ntp11781
+Rp11782
+(dp11783
+g51
+g11780
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I427
+sg55
+g11749
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11780
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11784
+tp11785
+Rp11786
+(dp11787
+g22
+(lp11788
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11789
+Rp11790
+sg85
+g28
+((lp11791
+tp11792
+Rp11793
+sbsVfile
+p11794
+g0
+(g47
+g2
+Ntp11795
+Rp11796
+(dp11797
+g51
+g11794
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I425
+sg55
+g11749
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11794
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11798
+tp11799
+Rp11800
+(dp11801
+g22
+(lp11802
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11803
+Rp11804
+sg85
+g28
+((lp11805
+tp11806
+Rp11807
+sbsVsize
+p11808
+g0
+(g47
+g2
+Ntp11809
+Rp11810
+(dp11811
+g51
+g11808
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I426
+sg55
+g11749
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g11808
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11812
+tp11813
+Rp11814
+(dp11815
+g22
+(lp11816
+sbsg75
+Nsg76
+g0
+(g6000
+g2
+Ntp11817
+Rp11818
+sg85
+g28
+((lp11819
+tp11820
+Rp11821
+sbstp11822
+Rp11823
+(dp11824
+g22
+(lp11825
+g11794
+ag11808
+ag11780
+ag11766
+asbsbsg64
+g11747
+sg183
+g0
+(g184
+g2
+Ntp11826
+Rp11827
+(dp11828
+g188
+(lp11829
+sg64
+Nsg191
+g11749
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp11830
+Rp11831
+(dp11832
+g42
+g0
+(g43
+g44
+(dp11833
+tp11834
+Rp11835
+(dp11836
+g22
+(lp11837
+sbsbsbsg204
+g4
+sg205
+g28
+((lp11838
+tp11839
+Rp11840
+sg220
+(dp11841
+sg225
+g11747
+sg85
+g28
+((lp11842
+g11827
+atp11843
+Rp11844
+sg229
+I01
+sg230
+NsbsS'bin_contents'
+p11845
+g0
+(g9
+g2
+Ntp11846
+Rp11847
+(dp11848
+g13
+S'bin_contents'
+p11849
+sg15
+Nsg16
+g17
+((lp11850
+g0
+(g558
+g2
+Ntp11851
+Rp11852
+(dp11853
+g191
+g0
+(g47
+g2
+Ntp11854
+Rp11855
+(dp11856
+g54
+I182
+sg52
+I00
+sg15
+Nsg53
+Nsg51
+Vbinary_id
+p11857
+sg55
+g11847
+sg3105
+g28
+((lp11858
+g11855
+atp11859
+Rp11860
+sg64
+g11857
+sg58
+g28
+((lp11861
+g11855
+atp11862
+Rp11863
+sg62
+Nsg56
+Nsg63
+Nsg57
+I01
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11864
+g11852
+atp11865
+Rp11866
+(dp11867
+g22
+(lp11868
+g11852
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp11869
+Rp11870
+sg85
+g28
+((lp11871
+tp11872
+Rp11873
+sbsg193
+Nsg576
+Nsg64
+Vbin_contents_bin_fkey
+p11874
+sg578
+Vbinaries.id
+p11875
+sg580
+g0
+(g581
+g2
+Ntp11876
+Rp11877
+(dp11878
+g68
+Nsg576
+Nsg64
+g11874
+sg191
+g11847
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp11879
+Vbinary_id
+p11880
+g11852
+stp11881
+Rp11882
+(dp11883
+g22
+(lp11884
+g11880
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg97
+g10663
+sg593
+I00
+sbatp11885
+Rp11886
+(dp11887
+g22
+(lp11888
+g11852
+asbsg24
+(lp11889
+sg26
+Nsg27
+g28
+((lp11890
+tp11891
+Rp11892
+sg32
+g33
+(g34
+tp11893
+Rp11894
+sg37
+g0
+(g38
+g2
+Ntp11895
+Rp11896
+(dp11897
+g42
+g0
+(g43
+g44
+(dp11898
+g11857
+g11855
+sVmodified
+p11899
+g0
+(g47
+g2
+Ntp11900
+Rp11901
+(dp11902
+g51
+g11899
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp11903
+Rp11904
+(dp11905
+g97
+g11901
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp11906
+Rp11907
+(dp11908
+g104
+Vnow()
+p11909
+sg106
+Nsg107
+Nsg108
+(dp11910
+sbsbsg54
+I184
+sg55
+g11847
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp11911
+g11901
+atp11912
+Rp11913
+sg62
+Nsg63
+Nsg64
+g11899
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11914
+tp11915
+Rp11916
+(dp11917
+g22
+(lp11918
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp11919
+Rp11920
+(dp11921
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp11922
+tp11923
+Rp11924
+sbsVfile
+p11925
+g0
+(g47
+g2
+Ntp11926
+Rp11927
+(dp11928
+g51
+g11925
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I181
+sg55
+g11847
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp11929
+g11927
+atp11930
+Rp11931
+sg62
+Nsg63
+Nsg64
+g11925
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11932
+tp11933
+Rp11934
+(dp11935
+g22
+(lp11936
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp11937
+Rp11938
+(dp11939
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp11940
+tp11941
+Rp11942
+sbsVcreated
+p11943
+g0
+(g47
+g2
+Ntp11944
+Rp11945
+(dp11946
+g51
+g11943
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp11947
+Rp11948
+(dp11949
+g97
+g11945
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp11950
+Rp11951
+(dp11952
+g104
+Vnow()
+p11953
+sg106
+Nsg107
+Nsg108
+(dp11954
+sbsbsg54
+I183
+sg55
+g11847
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp11955
+g11945
+atp11956
+Rp11957
+sg62
+Nsg63
+Nsg64
+g11943
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp11958
+tp11959
+Rp11960
+(dp11961
+g22
+(lp11962
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp11963
+Rp11964
+(dp11965
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp11966
+tp11967
+Rp11968
+sbstp11969
+Rp11970
+(dp11971
+g22
+(lp11972
+g11925
+ag11857
+ag11943
+ag11899
+asbsbsg64
+g11845
+sg183
+g0
+(g184
+g2
+Ntp11973
+Rp11974
+(dp11975
+g188
+(lp11976
+g11927
+ag11855
+asg64
+Vbin_contents_pkey
+p11977
+sg191
+g11847
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp11978
+Rp11979
+(dp11980
+g42
+g0
+(g43
+g44
+(dp11981
+g11857
+g11855
+sg11925
+g11927
+stp11982
+Rp11983
+(dp11984
+g22
+(lp11985
+g11925
+ag11857
+asbsbsbsg204
+g4
+sg205
+g28
+((lp11986
+g0
+(g207
+g2
+Ntp11987
+Rp11988
+(dp11989
+g55
+g11847
+sg56
+I00
+sg64
+S'ind_bin_contents_binary'
+p11990
+sg195
+g0
+(g38
+g2
+Ntp11991
+Rp11992
+(dp11993
+g42
+g0
+(g43
+g44
+(dp11994
+g11857
+g11855
+stp11995
+Rp11996
+(dp11997
+g22
+(lp11998
+g11857
+asbsbsg220
+(dp11999
+sbatp12000
+Rp12001
+sg220
+(dp12002
+sg225
+g11845
+sg85
+g28
+((lp12003
+g11974
+ag11877
+atp12004
+Rp12005
+sg229
+I01
+sg230
+NsbsS'bin_associations'
+p12006
+g0
+(g9
+g2
+Ntp12007
+Rp12008
+(dp12009
+g15
+Nsg16
+g17
+((lp12010
+g0
+(g558
+g2
+Ntp12011
+Rp12012
+(dp12013
+g191
+g0
+(g47
+g2
+Ntp12014
+Rp12015
+(dp12016
+g51
+Vbin
+p12017
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I60
+sg55
+g12008
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12017
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12018
+g12012
+atp12019
+Rp12020
+(dp12021
+g22
+(lp12022
+g12012
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12023
+Rp12024
+sg85
+g28
+((lp12025
+tp12026
+Rp12027
+sbsg193
+Nsg576
+Nsg64
+Vbin_associations_bin
+p12028
+sg578
+Vbinaries.id
+p12029
+sg580
+g0
+(g581
+g2
+Ntp12030
+Rp12031
+(dp12032
+g68
+Nsg576
+Nsg64
+g12028
+sg191
+g12008
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp12033
+Vbin
+p12034
+g12012
+stp12035
+Rp12036
+(dp12037
+g22
+(lp12038
+g12034
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp12039
+Rp12040
+(dp12041
+g191
+g0
+(g47
+g2
+Ntp12042
+Rp12043
+(dp12044
+g51
+Vsuite
+p12045
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I59
+sg55
+g12008
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12045
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12046
+g12040
+atp12047
+Rp12048
+(dp12049
+g22
+(lp12050
+g12040
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12051
+Rp12052
+sg85
+g28
+((lp12053
+tp12054
+Rp12055
+sbsg193
+Nsg576
+Nsg64
+Vbin_associations_suite
+p12056
+sg578
+Vsuite.id
+p12057
+sg580
+g0
+(g581
+g2
+Ntp12058
+Rp12059
+(dp12060
+g68
+Nsg576
+Nsg64
+g12056
+sg191
+g12008
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp12061
+Vsuite
+p12062
+g12040
+stp12063
+Rp12064
+(dp12065
+g22
+(lp12066
+g12062
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp12067
+Rp12068
+(dp12069
+g22
+(lp12070
+g12012
+ag12040
+asbsg24
+(lp12071
+sg26
+Nsg27
+g28
+((lp12072
+tp12073
+Rp12074
+sg32
+g33
+(g34
+tp12075
+Rp12076
+sg37
+g0
+(g38
+g2
+Ntp12077
+Rp12078
+(dp12079
+g42
+g0
+(g43
+g44
+(dp12080
+g12017
+g12015
+sg12045
+g12043
+sVcreated
+p12081
+g0
+(g47
+g2
+Ntp12082
+Rp12083
+(dp12084
+g51
+g12081
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12085
+Rp12086
+(dp12087
+g97
+g12083
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12088
+Rp12089
+(dp12090
+g104
+Vnow()
+p12091
+sg106
+Nsg107
+Nsg108
+(dp12092
+sbsbsg54
+I61
+sg55
+g12008
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12081
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12093
+tp12094
+Rp12095
+(dp12096
+g22
+(lp12097
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp12098
+Rp12099
+(dp12100
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp12101
+tp12102
+Rp12103
+sbsVid
+p12104
+g0
+(g47
+g2
+Ntp12105
+Rp12106
+(dp12107
+g51
+g12104
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12108
+Rp12109
+(dp12110
+g97
+g12106
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12111
+Rp12112
+(dp12113
+g104
+Vnextval('bin_associations_id_seq'::regclass)
+p12114
+sg106
+Nsg107
+Nsg108
+(dp12115
+sbsbsg54
+I58
+sg55
+g12008
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp12116
+g12106
+atp12117
+Rp12118
+sg62
+Nsg63
+Nsg64
+g12104
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp12119
+tp12120
+Rp12121
+(dp12122
+g22
+(lp12123
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12124
+Rp12125
+sg85
+g28
+((lp12126
+tp12127
+Rp12128
+sbsVmodified
+p12129
+g0
+(g47
+g2
+Ntp12130
+Rp12131
+(dp12132
+g51
+g12129
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12133
+Rp12134
+(dp12135
+g97
+g12131
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12136
+Rp12137
+(dp12138
+g104
+Vnow()
+p12139
+sg106
+Nsg107
+Nsg108
+(dp12140
+sbsbsg54
+I62
+sg55
+g12008
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12129
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12141
+tp12142
+Rp12143
+(dp12144
+g22
+(lp12145
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp12146
+Rp12147
+(dp12148
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp12149
+tp12150
+Rp12151
+sbstp12152
+Rp12153
+(dp12154
+g22
+(lp12155
+g12104
+ag12045
+ag12017
+ag12081
+ag12129
+asbsbsg64
+g12006
+sg183
+g0
+(g184
+g2
+Ntp12156
+Rp12157
+(dp12158
+g188
+(lp12159
+g12106
+asg64
+Vbin_associations_pkey
+p12160
+sg191
+g12008
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp12161
+Rp12162
+(dp12163
+g42
+g0
+(g43
+g44
+(dp12164
+g12104
+g12106
+stp12165
+Rp12166
+(dp12167
+g22
+(lp12168
+g12104
+asbsbsbsg204
+g4
+sg205
+g28
+((lp12169
+g0
+(g207
+g2
+Ntp12170
+Rp12171
+(dp12172
+g55
+g12008
+sg56
+I00
+sg64
+S'bin_associations_bin'
+p12173
+sg195
+g0
+(g38
+g2
+Ntp12174
+Rp12175
+(dp12176
+g42
+g0
+(g43
+g44
+(dp12177
+g12017
+g12015
+stp12178
+Rp12179
+(dp12180
+g22
+(lp12181
+g12017
+asbsbsg220
+(dp12182
+sbag0
+(g207
+g2
+Ntp12183
+Rp12184
+(dp12185
+g55
+g12008
+sg56
+I01
+sg64
+S'bin_associations_suite_key'
+p12186
+sg195
+g0
+(g38
+g2
+Ntp12187
+Rp12188
+(dp12189
+g42
+g0
+(g43
+g44
+(dp12190
+g12017
+g12015
+sg12045
+g12043
+stp12191
+Rp12192
+(dp12193
+g22
+(lp12194
+g12045
+ag12017
+asbsbsg220
+(dp12195
+sbatp12196
+Rp12197
+sg220
+(dp12198
+sg225
+g12006
+sg85
+g28
+((lp12199
+g12157
+ag12031
+ag12059
+atp12200
+Rp12201
+sg229
+I01
+sg230
+NsbsS'src_uploaders'
+p12202
+g0
+(g9
+g2
+Ntp12203
+Rp12204
+(dp12205
+g15
+Nsg16
+g17
+((lp12206
+g0
+(g558
+g2
+Ntp12207
+Rp12208
+(dp12209
+g191
+g0
+(g47
+g2
+Ntp12210
+Rp12211
+(dp12212
+g51
+Vmaintainer
+p12213
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I352
+sg55
+g12204
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12213
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12214
+g12208
+atp12215
+Rp12216
+(dp12217
+g22
+(lp12218
+g12208
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12219
+Rp12220
+sg85
+g28
+((lp12221
+tp12222
+Rp12223
+sbsg193
+Nsg576
+Nsg64
+Vsrc_uploaders_maintainer
+p12224
+sg578
+Vmaintainer.id
+p12225
+sg580
+g0
+(g581
+g2
+Ntp12226
+Rp12227
+(dp12228
+g68
+Nsg576
+Nsg64
+g12224
+sg191
+g12204
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp12229
+Vmaintainer
+p12230
+g12208
+stp12231
+Rp12232
+(dp12233
+g22
+(lp12234
+g12230
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp12235
+Rp12236
+(dp12237
+g191
+g0
+(g47
+g2
+Ntp12238
+Rp12239
+(dp12240
+g51
+Vsource
+p12241
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I351
+sg55
+g12204
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12241
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12242
+g12236
+atp12243
+Rp12244
+(dp12245
+g22
+(lp12246
+g12236
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12247
+Rp12248
+sg85
+g28
+((lp12249
+tp12250
+Rp12251
+sbsg193
+Nsg576
+Nsg64
+Vsrc_uploaders_source
+p12252
+sg578
+Vsource.id
+p12253
+sg580
+g0
+(g581
+g2
+Ntp12254
+Rp12255
+(dp12256
+g68
+Nsg576
+Nsg64
+g12252
+sg191
+g12204
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp12257
+Vsource
+p12258
+g12236
+stp12259
+Rp12260
+(dp12261
+g22
+(lp12262
+g12258
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp12263
+Rp12264
+(dp12265
+g22
+(lp12266
+g12208
+ag12236
+asbsg24
+(lp12267
+sg26
+Nsg27
+g28
+((lp12268
+tp12269
+Rp12270
+sg32
+g33
+(g34
+tp12271
+Rp12272
+sg37
+g0
+(g38
+g2
+Ntp12273
+Rp12274
+(dp12275
+g42
+g0
+(g43
+g44
+(dp12276
+g12241
+g12239
+sVcreated
+p12277
+g0
+(g47
+g2
+Ntp12278
+Rp12279
+(dp12280
+g51
+g12277
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12281
+Rp12282
+(dp12283
+g97
+g12279
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12284
+Rp12285
+(dp12286
+g104
+Vnow()
+p12287
+sg106
+Nsg107
+Nsg108
+(dp12288
+sbsbsg54
+I353
+sg55
+g12204
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12277
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12289
+tp12290
+Rp12291
+(dp12292
+g22
+(lp12293
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp12294
+Rp12295
+(dp12296
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp12297
+tp12298
+Rp12299
+sbsg12213
+g12211
+sVid
+p12300
+g0
+(g47
+g2
+Ntp12301
+Rp12302
+(dp12303
+g51
+g12300
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12304
+Rp12305
+(dp12306
+g97
+g12302
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12307
+Rp12308
+(dp12309
+g104
+Vnextval('src_uploaders_id_seq'::regclass)
+p12310
+sg106
+Nsg107
+Nsg108
+(dp12311
+sbsbsg54
+I350
+sg55
+g12204
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp12312
+g12302
+atp12313
+Rp12314
+sg62
+Nsg63
+Nsg64
+g12300
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp12315
+tp12316
+Rp12317
+(dp12318
+g22
+(lp12319
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12320
+Rp12321
+sg85
+g28
+((lp12322
+tp12323
+Rp12324
+sbsVmodified
+p12325
+g0
+(g47
+g2
+Ntp12326
+Rp12327
+(dp12328
+g51
+g12325
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12329
+Rp12330
+(dp12331
+g97
+g12327
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12332
+Rp12333
+(dp12334
+g104
+Vnow()
+p12335
+sg106
+Nsg107
+Nsg108
+(dp12336
+sbsbsg54
+I354
+sg55
+g12204
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12325
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12337
+tp12338
+Rp12339
+(dp12340
+g22
+(lp12341
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp12342
+Rp12343
+(dp12344
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp12345
+tp12346
+Rp12347
+sbstp12348
+Rp12349
+(dp12350
+g22
+(lp12351
+g12300
+ag12241
+ag12213
+ag12277
+ag12325
+asbsbsg64
+g12202
+sg183
+g0
+(g184
+g2
+Ntp12352
+Rp12353
+(dp12354
+g188
+(lp12355
+g12302
+asg64
+Vsrc_uploaders_pkey
+p12356
+sg191
+g12204
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp12357
+Rp12358
+(dp12359
+g42
+g0
+(g43
+g44
+(dp12360
+g12300
+g12302
+stp12361
+Rp12362
+(dp12363
+g22
+(lp12364
+g12300
+asbsbsbsg204
+g4
+sg205
+g28
+((lp12365
+g0
+(g207
+g2
+Ntp12366
+Rp12367
+(dp12368
+g55
+g12204
+sg56
+I01
+sg64
+S'src_uploaders_source_key'
+p12369
+sg195
+g0
+(g38
+g2
+Ntp12370
+Rp12371
+(dp12372
+g42
+g0
+(g43
+g44
+(dp12373
+g12241
+g12239
+sg12213
+g12211
+stp12374
+Rp12375
+(dp12376
+g22
+(lp12377
+g12241
+ag12213
+asbsbsg220
+(dp12378
+sbatp12379
+Rp12380
+sg220
+(dp12381
+sg225
+g12202
+sg85
+g28
+((lp12382
+g12353
+ag12227
+ag12255
+atp12383
+Rp12384
+sg229
+I01
+sg230
+NsbsS'build_queue_files'
+p12385
+g0
+(g9
+g2
+Ntp12386
+Rp12387
+(dp12388
+g13
+S'build_queue_files'
+p12389
+sg15
+Nsg16
+g17
+((lp12390
+g0
+(g558
+g2
+Ntp12391
+Rp12392
+(dp12393
+g191
+g0
+(g47
+g2
+Ntp12394
+Rp12395
+(dp12396
+g51
+Vbuild_queue_id
+p12397
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I210
+sg55
+g12387
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp12398
+g12395
+atp12399
+Rp12400
+sg62
+Nsg63
+Nsg64
+g12397
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12401
+g12392
+atp12402
+Rp12403
+(dp12404
+g22
+(lp12405
+g12392
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12406
+Rp12407
+sg85
+g28
+((lp12408
+tp12409
+Rp12410
+sbsg193
+Nsg576
+Nsg64
+Vbuild_queue_files_build_queue_id_fkey
+p12411
+sg578
+Vbuild_queue.id
+p12412
+sg580
+g0
+(g581
+g2
+Ntp12413
+Rp12414
+(dp12415
+g68
+Nsg576
+Nsg64
+g12411
+sg191
+g12387
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp12416
+Vbuild_queue_id
+p12417
+g12392
+stp12418
+Rp12419
+(dp12420
+g22
+(lp12421
+g12417
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp12422
+Rp12423
+(dp12424
+g191
+g0
+(g47
+g2
+Ntp12425
+Rp12426
+(dp12427
+g51
+Vfileid
+p12428
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I214
+sg55
+g12387
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp12429
+g12426
+atp12430
+Rp12431
+sg62
+Nsg63
+Nsg64
+g12428
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12432
+g12423
+atp12433
+Rp12434
+(dp12435
+g22
+(lp12436
+g12423
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12437
+Rp12438
+sg85
+g28
+((lp12439
+tp12440
+Rp12441
+sbsg193
+Nsg576
+Nsg64
+Vqueue_files_fileid_fkey
+p12442
+sg578
+Vfiles.id
+p12443
+sg580
+g0
+(g581
+g2
+Ntp12444
+Rp12445
+(dp12446
+g68
+Nsg576
+Nsg64
+g12442
+sg191
+g12387
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp12447
+Vfileid
+p12448
+g12423
+stp12449
+Rp12450
+(dp12451
+g22
+(lp12452
+g12448
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp12453
+Rp12454
+(dp12455
+g22
+(lp12456
+g12392
+ag12423
+asbsg24
+(lp12457
+sg26
+Nsg27
+g28
+((lp12458
+tp12459
+Rp12460
+sg32
+g33
+(g34
+tp12461
+Rp12462
+sg37
+g0
+(g38
+g2
+Ntp12463
+Rp12464
+(dp12465
+g42
+g0
+(g43
+g44
+(dp12466
+g12397
+g12395
+sVcreated
+p12467
+g0
+(g47
+g2
+Ntp12468
+Rp12469
+(dp12470
+g51
+g12467
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12471
+Rp12472
+(dp12473
+g97
+g12469
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12474
+Rp12475
+(dp12476
+g104
+Vnow()
+p12477
+sg106
+Nsg107
+Nsg108
+(dp12478
+sbsbsg54
+I215
+sg55
+g12387
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp12479
+g12469
+atp12480
+Rp12481
+sg62
+Nsg63
+Nsg64
+g12467
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12482
+tp12483
+Rp12484
+(dp12485
+g22
+(lp12486
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp12487
+Rp12488
+(dp12489
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp12490
+tp12491
+Rp12492
+sbsVinsertdate
+p12493
+g0
+(g47
+g2
+Ntp12494
+Rp12495
+(dp12496
+g51
+g12493
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12497
+Rp12498
+(dp12499
+g97
+g12495
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12500
+Rp12501
+(dp12502
+g104
+Vnow()
+p12503
+sg106
+Nsg107
+Nsg108
+(dp12504
+sbsbsg54
+I211
+sg55
+g12387
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp12505
+g12495
+atp12506
+Rp12507
+sg62
+Nsg63
+Nsg64
+g12493
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12508
+tp12509
+Rp12510
+(dp12511
+g22
+(lp12512
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp12513
+Rp12514
+(dp12515
+g148
+I00
+sg149
+Nsbsg85
+g28
+((lp12516
+tp12517
+Rp12518
+sbsVmodified
+p12519
+g0
+(g47
+g2
+Ntp12520
+Rp12521
+(dp12522
+g51
+g12519
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12523
+Rp12524
+(dp12525
+g97
+g12521
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12526
+Rp12527
+(dp12528
+g104
+Vnow()
+p12529
+sg106
+Nsg107
+Nsg108
+(dp12530
+sbsbsg54
+I216
+sg55
+g12387
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp12531
+g12521
+atp12532
+Rp12533
+sg62
+Nsg63
+Nsg64
+g12519
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12534
+tp12535
+Rp12536
+(dp12537
+g22
+(lp12538
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp12539
+Rp12540
+(dp12541
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp12542
+tp12543
+Rp12544
+sbsVfilename
+p12545
+g0
+(g47
+g2
+Ntp12546
+Rp12547
+(dp12548
+g51
+g12545
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I213
+sg55
+g12387
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp12549
+g12547
+atp12550
+Rp12551
+sg62
+Nsg63
+Nsg64
+g12545
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12552
+tp12553
+Rp12554
+(dp12555
+g22
+(lp12556
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp12557
+Rp12558
+(dp12559
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp12560
+tp12561
+Rp12562
+sbsVlastused
+p12563
+g0
+(g47
+g2
+Ntp12564
+Rp12565
+(dp12566
+g51
+g12563
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I212
+sg55
+g12387
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp12567
+g12565
+atp12568
+Rp12569
+sg62
+Nsg63
+Nsg64
+g12563
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12570
+tp12571
+Rp12572
+(dp12573
+g22
+(lp12574
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp12575
+Rp12576
+(dp12577
+g148
+I00
+sg149
+Nsbsg85
+g28
+((lp12578
+tp12579
+Rp12580
+sbsVid
+p12581
+g0
+(g47
+g2
+Ntp12582
+Rp12583
+(dp12584
+g51
+g12581
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12585
+Rp12586
+(dp12587
+g97
+g12583
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12588
+Rp12589
+(dp12590
+g104
+Vnextval('build_queue_files_id_seq'::regclass)
+p12591
+sg106
+Nsg107
+Nsg108
+(dp12592
+sbsbsg54
+I209
+sg55
+g12387
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp12593
+g12583
+atp12594
+Rp12595
+sg62
+Nsg63
+Nsg64
+g12581
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp12596
+tp12597
+Rp12598
+(dp12599
+g22
+(lp12600
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12601
+Rp12602
+sg85
+g28
+((lp12603
+tp12604
+Rp12605
+sbsg12428
+g12426
+stp12606
+Rp12607
+(dp12608
+g22
+(lp12609
+g12581
+ag12397
+ag12493
+ag12563
+ag12545
+ag12428
+ag12467
+ag12519
+asbsbsg64
+g12385
+sg183
+g0
+(g184
+g2
+Ntp12610
+Rp12611
+(dp12612
+g188
+(lp12613
+g12583
+asg64
+Vqueue_files_pkey
+p12614
+sg191
+g12387
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp12615
+Rp12616
+(dp12617
+g42
+g0
+(g43
+g44
+(dp12618
+g12581
+g12583
+stp12619
+Rp12620
+(dp12621
+g22
+(lp12622
+g12581
+asbsbsbsg204
+g4
+sg205
+g28
+((lp12623
+tp12624
+Rp12625
+sg220
+(dp12626
+sg225
+g12385
+sg85
+g28
+((lp12627
+g12611
+ag12414
+ag12445
+atp12628
+Rp12629
+sg229
+I01
+sg230
+Nsbsg8380
+g8315
+sS'src_associations_bin'
+p12630
+g0
+(g9
+g2
+Ntp12631
+Rp12632
+(dp12633
+g15
+Nsg16
+g17
+((lp12634
+tp12635
+Rp12636
+(dp12637
+g22
+(lp12638
+sbsg24
+(lp12639
+sg26
+Nsg27
+g28
+((lp12640
+tp12641
+Rp12642
+sg32
+g33
+(g34
+tp12643
+Rp12644
+sg37
+g0
+(g38
+g2
+Ntp12645
+Rp12646
+(dp12647
+g42
+g0
+(g43
+g44
+(dp12648
+Vbin
+p12649
+g0
+(g47
+g2
+Ntp12650
+Rp12651
+(dp12652
+g51
+g12649
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I475
+sg55
+g12632
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12649
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12653
+tp12654
+Rp12655
+(dp12656
+g22
+(lp12657
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12658
+Rp12659
+sg85
+g28
+((lp12660
+tp12661
+Rp12662
+sbsVsource
+p12663
+g0
+(g47
+g2
+Ntp12664
+Rp12665
+(dp12666
+g51
+g12663
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I473
+sg55
+g12632
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12663
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12667
+tp12668
+Rp12669
+(dp12670
+g22
+(lp12671
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12672
+Rp12673
+sg85
+g28
+((lp12674
+tp12675
+Rp12676
+sbsVsuite
+p12677
+g0
+(g47
+g2
+Ntp12678
+Rp12679
+(dp12680
+g51
+g12677
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I474
+sg55
+g12632
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12677
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12681
+tp12682
+Rp12683
+(dp12684
+g22
+(lp12685
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12686
+Rp12687
+sg85
+g28
+((lp12688
+tp12689
+Rp12690
+sbsVarchitecture
+p12691
+g0
+(g47
+g2
+Ntp12692
+Rp12693
+(dp12694
+g51
+g12691
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I476
+sg55
+g12632
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12691
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12695
+tp12696
+Rp12697
+(dp12698
+g22
+(lp12699
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12700
+Rp12701
+sg85
+g28
+((lp12702
+tp12703
+Rp12704
+sbsVid
+p12705
+g0
+(g47
+g2
+Ntp12706
+Rp12707
+(dp12708
+g51
+g12705
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I472
+sg55
+g12632
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12705
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12709
+tp12710
+Rp12711
+(dp12712
+g22
+(lp12713
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12714
+Rp12715
+sg85
+g28
+((lp12716
+tp12717
+Rp12718
+sbstp12719
+Rp12720
+(dp12721
+g22
+(lp12722
+g12705
+ag12663
+ag12677
+ag12649
+ag12691
+asbsbsg64
+g12630
+sg183
+g0
+(g184
+g2
+Ntp12723
+Rp12724
+(dp12725
+g188
+(lp12726
+sg64
+Nsg191
+g12632
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp12727
+Rp12728
+(dp12729
+g42
+g0
+(g43
+g44
+(dp12730
+tp12731
+Rp12732
+(dp12733
+g22
+(lp12734
+sbsbsbsg204
+g4
+sg205
+g28
+((lp12735
+tp12736
+Rp12737
+sg220
+(dp12738
+sg225
+g12630
+sg85
+g28
+((lp12739
+g12724
+atp12740
+Rp12741
+sg229
+I01
+sg230
+NsbsS'newest_all_associations'
+p12742
+g0
+(g9
+g2
+Ntp12743
+Rp12744
+(dp12745
+g15
+Nsg16
+g17
+((lp12746
+tp12747
+Rp12748
+(dp12749
+g22
+(lp12750
+sbsg24
+(lp12751
+sg26
+Nsg27
+g28
+((lp12752
+tp12753
+Rp12754
+sg32
+g33
+(g34
+tp12755
+Rp12756
+sg37
+g0
+(g38
+g2
+Ntp12757
+Rp12758
+(dp12759
+g42
+g0
+(g43
+g44
+(dp12760
+Vsuite
+p12761
+g0
+(g47
+g2
+Ntp12762
+Rp12763
+(dp12764
+g51
+g12761
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I431
+sg55
+g12744
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12761
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12765
+tp12766
+Rp12767
+(dp12768
+g22
+(lp12769
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12770
+Rp12771
+sg85
+g28
+((lp12772
+tp12773
+Rp12774
+sbsVversion
+p12775
+g0
+(g47
+g2
+Ntp12776
+Rp12777
+(dp12778
+g51
+g12775
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I430
+sg55
+g12744
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12775
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12779
+tp12780
+Rp12781
+(dp12782
+g22
+(lp12783
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp12784
+Rp12785
+sg85
+g28
+((lp12786
+tp12787
+Rp12788
+sbsVarchitecture
+p12789
+g0
+(g47
+g2
+Ntp12790
+Rp12791
+(dp12792
+g51
+g12789
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I432
+sg55
+g12744
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12789
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12793
+tp12794
+Rp12795
+(dp12796
+g22
+(lp12797
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12798
+Rp12799
+sg85
+g28
+((lp12800
+tp12801
+Rp12802
+sbsVpackage
+p12803
+g0
+(g47
+g2
+Ntp12804
+Rp12805
+(dp12806
+g51
+g12803
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I429
+sg55
+g12744
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g12803
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12807
+tp12808
+Rp12809
+(dp12810
+g22
+(lp12811
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp12812
+Rp12813
+(dp12814
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp12815
+tp12816
+Rp12817
+sbstp12818
+Rp12819
+(dp12820
+g22
+(lp12821
+g12803
+ag12775
+ag12761
+ag12789
+asbsbsg64
+g12742
+sg183
+g0
+(g184
+g2
+Ntp12822
+Rp12823
+(dp12824
+g188
+(lp12825
+sg64
+Nsg191
+g12744
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp12826
+Rp12827
+(dp12828
+g42
+g0
+(g43
+g44
+(dp12829
+tp12830
+Rp12831
+(dp12832
+g22
+(lp12833
+sbsbsbsg204
+g4
+sg205
+g28
+((lp12834
+tp12835
+Rp12836
+sg220
+(dp12837
+sg225
+g12742
+sg85
+g28
+((lp12838
+g12823
+atp12839
+Rp12840
+sg229
+I01
+sg230
+NsbsS'architecture'
+p12841
+g0
+(g9
+g2
+Ntp12842
+Rp12843
+(dp12844
+g13
+S'architecture'
+p12845
+sg15
+Nsg16
+g17
+((lp12846
+tp12847
+Rp12848
+(dp12849
+g22
+(lp12850
+sbsg24
+(lp12851
+sg26
+Nsg27
+g28
+((lp12852
+tp12853
+Rp12854
+sg32
+g33
+(g34
+tp12855
+Rp12856
+sg37
+g0
+(g38
+g2
+Ntp12857
+Rp12858
+(dp12859
+g42
+g0
+(g43
+g44
+(dp12860
+Vdescription
+p12861
+g0
+(g47
+g2
+Ntp12862
+Rp12863
+(dp12864
+g51
+g12861
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I49
+sg55
+g12843
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp12865
+g12863
+atp12866
+Rp12867
+sg62
+Nsg63
+Nsg64
+g12861
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12868
+tp12869
+Rp12870
+(dp12871
+g22
+(lp12872
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp12873
+Rp12874
+(dp12875
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp12876
+tp12877
+Rp12878
+sbsVarch_string
+p12879
+g0
+(g47
+g2
+Ntp12880
+Rp12881
+(dp12882
+g51
+g12879
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I48
+sg55
+g12843
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp12883
+g12881
+atp12884
+Rp12885
+sg62
+Nsg63
+Nsg64
+g12879
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12886
+tp12887
+Rp12888
+(dp12889
+g22
+(lp12890
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp12891
+Rp12892
+(dp12893
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp12894
+tp12895
+Rp12896
+sbsVid
+p12897
+g0
+(g47
+g2
+Ntp12898
+Rp12899
+(dp12900
+g51
+g12897
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12901
+Rp12902
+(dp12903
+g97
+g12899
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12904
+Rp12905
+(dp12906
+g104
+Vnextval('architecture_id_seq'::regclass)
+p12907
+sg106
+Nsg107
+Nsg108
+(dp12908
+sbsbsg54
+I47
+sg55
+g12843
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp12909
+g12899
+atp12910
+Rp12911
+sg62
+Nsg63
+Nsg64
+g12897
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp12912
+tp12913
+Rp12914
+(dp12915
+g22
+(lp12916
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp12917
+Rp12918
+sg85
+g28
+((lp12919
+tp12920
+Rp12921
+sbsVmodified
+p12922
+g0
+(g47
+g2
+Ntp12923
+Rp12924
+(dp12925
+g51
+g12922
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12926
+Rp12927
+(dp12928
+g97
+g12924
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12929
+Rp12930
+(dp12931
+g104
+Vnow()
+p12932
+sg106
+Nsg107
+Nsg108
+(dp12933
+sbsbsg54
+I51
+sg55
+g12843
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp12934
+g12924
+atp12935
+Rp12936
+sg62
+Nsg63
+Nsg64
+g12922
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12937
+tp12938
+Rp12939
+(dp12940
+g22
+(lp12941
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp12942
+Rp12943
+(dp12944
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp12945
+tp12946
+Rp12947
+sbsVcreated
+p12948
+g0
+(g47
+g2
+Ntp12949
+Rp12950
+(dp12951
+g51
+g12948
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp12952
+Rp12953
+(dp12954
+g97
+g12950
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp12955
+Rp12956
+(dp12957
+g104
+Vnow()
+p12958
+sg106
+Nsg107
+Nsg108
+(dp12959
+sbsbsg54
+I50
+sg55
+g12843
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp12960
+g12950
+atp12961
+Rp12962
+sg62
+Nsg63
+Nsg64
+g12948
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp12963
+tp12964
+Rp12965
+(dp12966
+g22
+(lp12967
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp12968
+Rp12969
+(dp12970
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp12971
+tp12972
+Rp12973
+sbstp12974
+Rp12975
+(dp12976
+g22
+(lp12977
+g12897
+ag12879
+ag12861
+ag12948
+ag12922
+asbsbsg64
+g12841
+sg183
+g0
+(g184
+g2
+Ntp12978
+Rp12979
+(dp12980
+g188
+(lp12981
+g12899
+asg64
+Varchitecture_pkey
+p12982
+sg191
+g12843
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp12983
+Rp12984
+(dp12985
+g42
+g0
+(g43
+g44
+(dp12986
+g12897
+g12899
+stp12987
+Rp12988
+(dp12989
+g22
+(lp12990
+g12897
+asbsbsbsg204
+g4
+sg205
+g28
+((lp12991
+g0
+(g207
+g2
+Ntp12992
+Rp12993
+(dp12994
+g55
+g12843
+sg56
+I01
+sg64
+S'architecture_arch_string_key'
+p12995
+sg195
+g0
+(g38
+g2
+Ntp12996
+Rp12997
+(dp12998
+g42
+g0
+(g43
+g44
+(dp12999
+g12879
+g12881
+stp13000
+Rp13001
+(dp13002
+g22
+(lp13003
+g12879
+asbsbsg220
+(dp13004
+sbatp13005
+Rp13006
+sg220
+(dp13007
+sg225
+g12841
+sg85
+g28
+((lp13008
+g12979
+atp13009
+Rp13010
+sg229
+I01
+sg230
+NsbsS'changelogs_text'
+p13011
+g0
+(g9
+g2
+Ntp13012
+Rp13013
+(dp13014
+g15
+Nsg16
+g17
+((lp13015
+tp13016
+Rp13017
+(dp13018
+g22
+(lp13019
+sbsg24
+(lp13020
+sg26
+Nsg27
+g28
+((lp13021
+tp13022
+Rp13023
+sg32
+g33
+(g34
+tp13024
+Rp13025
+sg37
+g0
+(g38
+g2
+Ntp13026
+Rp13027
+(dp13028
+g42
+g0
+(g43
+g44
+(dp13029
+Vid
+p13030
+g0
+(g47
+g2
+Ntp13031
+Rp13032
+(dp13033
+g51
+g13030
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp13034
+Rp13035
+(dp13036
+g97
+g13032
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp13037
+Rp13038
+(dp13039
+g104
+Vnextval('changelogs_text_id_seq'::regclass)
+p13040
+sg106
+Nsg107
+Nsg108
+(dp13041
+sbsbsg54
+I231
+sg55
+g13013
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp13042
+g13032
+atp13043
+Rp13044
+sg62
+Nsg63
+Nsg64
+g13030
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp13045
+tp13046
+Rp13047
+(dp13048
+g22
+(lp13049
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp13050
+Rp13051
+sg85
+g28
+((lp13052
+tp13053
+Rp13054
+sbsVchangelog
+p13055
+g0
+(g47
+g2
+Ntp13056
+Rp13057
+(dp13058
+g51
+g13055
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I232
+sg55
+g13013
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g13055
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13059
+tp13060
+Rp13061
+(dp13062
+g22
+(lp13063
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13064
+Rp13065
+(dp13066
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13067
+tp13068
+Rp13069
+sbstp13070
+Rp13071
+(dp13072
+g22
+(lp13073
+g13030
+ag13055
+asbsbsg64
+g13011
+sg183
+g0
+(g184
+g2
+Ntp13074
+Rp13075
+(dp13076
+g188
+(lp13077
+g13032
+asg64
+Vchangelogs_text_pkey
+p13078
+sg191
+g13013
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp13079
+Rp13080
+(dp13081
+g42
+g0
+(g43
+g44
+(dp13082
+g13030
+g13032
+stp13083
+Rp13084
+(dp13085
+g22
+(lp13086
+g13030
+asbsbsbsg204
+g4
+sg205
+g28
+((lp13087
+tp13088
+Rp13089
+sg220
+(dp13090
+sg225
+g13011
+sg85
+g28
+((lp13091
+g13075
+atp13092
+Rp13093
+sg229
+I01
+sg230
+NsbsVkeyrings
+p13094
+g0
+(g9
+g2
+Ntp13095
+Rp13096
+(dp13097
+g13
+S'keyrings'
+p13098
+sg15
+Nsg16
+g17
+((lp13099
+g0
+(g558
+g2
+Ntp13100
+Rp13101
+(dp13102
+g191
+g0
+(g47
+g2
+Ntp13103
+Rp13104
+(dp13105
+g51
+Vdefault_binary_acl_id
+p13106
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I115
+sg55
+g13096
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13107
+g13104
+atp13108
+Rp13109
+sg62
+Nsg63
+Nsg64
+g13106
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13110
+g13101
+atp13111
+Rp13112
+(dp13113
+g22
+(lp13114
+g13101
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp13115
+Rp13116
+sg85
+g28
+((lp13117
+tp13118
+Rp13119
+sbsg193
+Nsg576
+Nsg64
+Vkeyrings_default_binary_acl_id_fkey
+p13120
+sg578
+Vbinary_acl.id
+p13121
+sg580
+g0
+(g581
+g2
+Ntp13122
+Rp13123
+(dp13124
+g68
+Nsg576
+Nsg64
+g13120
+sg191
+g13096
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp13125
+Vdefault_binary_acl_id
+p13126
+g13101
+stp13127
+Rp13128
+(dp13129
+g22
+(lp13130
+g13126
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag0
+(g558
+g2
+Ntp13131
+Rp13132
+(dp13133
+g191
+g0
+(g47
+g2
+Ntp13134
+Rp13135
+(dp13136
+g51
+Vdefault_source_acl_id
+p13137
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I114
+sg55
+g13096
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13138
+g13135
+atp13139
+Rp13140
+sg62
+Nsg63
+Nsg64
+g13137
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13141
+g13132
+atp13142
+Rp13143
+(dp13144
+g22
+(lp13145
+g13132
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp13146
+Rp13147
+sg85
+g28
+((lp13148
+tp13149
+Rp13150
+sbsg193
+Nsg576
+Nsg64
+Vkeyrings_default_source_acl_id_fkey
+p13151
+sg578
+Vsource_acl.id
+p13152
+sg580
+g0
+(g581
+g2
+Ntp13153
+Rp13154
+(dp13155
+g68
+Nsg576
+Nsg64
+g13151
+sg191
+g13096
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp13156
+Vdefault_source_acl_id
+p13157
+g13132
+stp13158
+Rp13159
+(dp13160
+g22
+(lp13161
+g13157
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp13162
+Rp13163
+(dp13164
+g22
+(lp13165
+g13101
+ag13132
+asbsg24
+(lp13166
+sg26
+Nsg27
+g28
+((lp13167
+tp13168
+Rp13169
+sg32
+g33
+(g34
+tp13170
+Rp13171
+sg37
+g0
+(g38
+g2
+Ntp13172
+Rp13173
+(dp13174
+g42
+g0
+(g43
+g44
+(dp13175
+Vdefault_binary_reject
+p13176
+g0
+(g47
+g2
+Ntp13177
+Rp13178
+(dp13179
+g51
+g13176
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp13180
+Rp13181
+(dp13182
+g97
+g13178
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp13183
+Rp13184
+(dp13185
+g104
+Vtrue
+p13186
+sg106
+Nsg107
+Nsg108
+(dp13187
+sbsbsg54
+I116
+sg55
+g13096
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13188
+g13178
+atp13189
+Rp13190
+sg62
+Nsg63
+Nsg64
+g13176
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13191
+tp13192
+Rp13193
+(dp13194
+g22
+(lp13195
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp13196
+Rp13197
+(dp13198
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp13199
+tp13200
+Rp13201
+sbsVname
+p13202
+g0
+(g47
+g2
+Ntp13203
+Rp13204
+(dp13205
+g51
+g13202
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I113
+sg55
+g13096
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13206
+g13204
+atp13207
+Rp13208
+sg62
+Nsg63
+Nsg64
+g13202
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13209
+tp13210
+Rp13211
+(dp13212
+g22
+(lp13213
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13214
+Rp13215
+(dp13216
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13217
+tp13218
+Rp13219
+sbsVcreated
+p13220
+g0
+(g47
+g2
+Ntp13221
+Rp13222
+(dp13223
+g51
+g13220
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp13224
+Rp13225
+(dp13226
+g97
+g13222
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp13227
+Rp13228
+(dp13229
+g104
+Vnow()
+p13230
+sg106
+Nsg107
+Nsg108
+(dp13231
+sbsbsg54
+I118
+sg55
+g13096
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13232
+g13222
+atp13233
+Rp13234
+sg62
+Nsg63
+Nsg64
+g13220
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13235
+tp13236
+Rp13237
+(dp13238
+g22
+(lp13239
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp13240
+Rp13241
+(dp13242
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp13243
+tp13244
+Rp13245
+sbsg13137
+g13135
+sVmodified
+p13246
+g0
+(g47
+g2
+Ntp13247
+Rp13248
+(dp13249
+g51
+g13246
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp13250
+Rp13251
+(dp13252
+g97
+g13248
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp13253
+Rp13254
+(dp13255
+g104
+Vnow()
+p13256
+sg106
+Nsg107
+Nsg108
+(dp13257
+sbsbsg54
+I119
+sg55
+g13096
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13258
+g13248
+atp13259
+Rp13260
+sg62
+Nsg63
+Nsg64
+g13246
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13261
+tp13262
+Rp13263
+(dp13264
+g22
+(lp13265
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp13266
+Rp13267
+(dp13268
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp13269
+tp13270
+Rp13271
+sbsVpriority
+p13272
+g0
+(g47
+g2
+Ntp13273
+Rp13274
+(dp13275
+g51
+g13272
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp13276
+Rp13277
+(dp13278
+g97
+g13274
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp13279
+Rp13280
+(dp13281
+g104
+V100
+p13282
+sg106
+Nsg107
+Nsg108
+(dp13283
+sbsbsg54
+I117
+sg55
+g13096
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13284
+g13274
+atp13285
+Rp13286
+sg62
+Nsg63
+Nsg64
+g13272
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13287
+tp13288
+Rp13289
+(dp13290
+g22
+(lp13291
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp13292
+Rp13293
+sg85
+g28
+((lp13294
+tp13295
+Rp13296
+sbsVactive
+p13297
+g0
+(g47
+g2
+Ntp13298
+Rp13299
+(dp13300
+g51
+g13297
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp13301
+Rp13302
+(dp13303
+g97
+g13299
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp13304
+Rp13305
+(dp13306
+g104
+Vtrue
+p13307
+sg106
+Nsg107
+Nsg108
+(dp13308
+sbsbsg54
+I120
+sg55
+g13096
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13309
+g13299
+atp13310
+Rp13311
+sg62
+Nsg63
+Nsg64
+g13297
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13312
+tp13313
+Rp13314
+(dp13315
+g22
+(lp13316
+sbsg75
+Nsg76
+g0
+(g815
+g2
+Ntp13317
+Rp13318
+(dp13319
+g819
+I01
+sg820
+g821
+sg64
+Nsbsg85
+g28
+((lp13320
+tp13321
+Rp13322
+sbsg13106
+g13104
+sVid
+p13323
+g0
+(g47
+g2
+Ntp13324
+Rp13325
+(dp13326
+g51
+g13323
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp13327
+Rp13328
+(dp13329
+g97
+g13325
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp13330
+Rp13331
+(dp13332
+g104
+Vnextval('keyrings_id_seq'::regclass)
+p13333
+sg106
+Nsg107
+Nsg108
+(dp13334
+sbsbsg54
+I112
+sg55
+g13096
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp13335
+g13325
+atp13336
+Rp13337
+sg62
+Nsg63
+Nsg64
+g13323
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp13338
+tp13339
+Rp13340
+(dp13341
+g22
+(lp13342
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp13343
+Rp13344
+sg85
+g28
+((lp13345
+tp13346
+Rp13347
+sbstp13348
+Rp13349
+(dp13350
+g22
+(lp13351
+g13323
+ag13202
+ag13137
+ag13106
+ag13176
+ag13272
+ag13220
+ag13246
+ag13297
+asbsbsg64
+g13094
+sg183
+g0
+(g184
+g2
+Ntp13352
+Rp13353
+(dp13354
+g188
+(lp13355
+g13325
+asg64
+Vkeyrings_pkey
+p13356
+sg191
+g13096
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp13357
+Rp13358
+(dp13359
+g42
+g0
+(g43
+g44
+(dp13360
+g13323
+g13325
+stp13361
+Rp13362
+(dp13363
+g22
+(lp13364
+g13323
+asbsbsbsg204
+g4
+sg205
+g28
+((lp13365
+g0
+(g207
+g2
+Ntp13366
+Rp13367
+(dp13368
+g55
+g13096
+sg56
+I01
+sg64
+S'keyrings_name_key'
+p13369
+sg195
+g0
+(g38
+g2
+Ntp13370
+Rp13371
+(dp13372
+g42
+g0
+(g43
+g44
+(dp13373
+g13202
+g13204
+stp13374
+Rp13375
+(dp13376
+g22
+(lp13377
+g13202
+asbsbsg220
+(dp13378
+sbatp13379
+Rp13380
+sg220
+(dp13381
+sg225
+g13094
+sg85
+g28
+((lp13382
+g13353
+ag0
+(g1131
+g2
+Ntp13383
+Rp13384
+(dp13385
+g64
+Nsg191
+g13096
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp13386
+Rp13387
+(dp13388
+g1139
+g13197
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp13389
+Rp13390
+(dp13391
+g1146
+g1147
+sg1148
+(dp13392
+sg1150
+g0
+(g1151
+g2
+Ntp13393
+Rp13394
+(dp13395
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp13396
+Rp13397
+(dp13398
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp13399
+g0
+(g1168
+g2
+Ntp13400
+Rp13401
+(dp13402
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24679504 default_binary_reject)s
+p13403
+tp13404
+Rp13405
+sg1178
+I00
+sg76
+g1157
+sg1179
+g13176
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp13406
+Rp13407
+(dp13408
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24679568 default_binary_reject)s
+p13409
+tp13410
+Rp13411
+sg1178
+I00
+sg76
+g1157
+sg1179
+g13176
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g13178
+sbsbag13123
+ag13154
+ag0
+(g1131
+g2
+Ntp13412
+Rp13413
+(dp13414
+g64
+Nsg191
+g13096
+sg192
+Nsg193
+Nsg194
+g0
+(g1135
+g2
+Ntp13415
+Rp13416
+(dp13417
+g1139
+g13318
+sg64
+g1140
+sbsg1141
+g0
+(g1142
+g2
+Ntp13418
+Rp13419
+(dp13420
+g1146
+g1147
+sg1148
+(dp13421
+sg1150
+g0
+(g1151
+g2
+Ntp13422
+Rp13423
+(dp13424
+g76
+g1157
+sg1159
+g0
+(g1160
+g2
+Ntp13425
+Rp13426
+(dp13427
+g1146
+g1164
+sg76
+g1157
+sg1165
+I01
+sg1166
+(lp13428
+g0
+(g1168
+g2
+Ntp13429
+Rp13430
+(dp13431
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24680720 active)s
+p13432
+tp13433
+Rp13434
+sg1178
+I00
+sg76
+g1157
+sg1179
+g13297
+sg1180
+I0
+sbag0
+(g1168
+g2
+Ntp13435
+Rp13436
+(dp13437
+g56
+I01
+sg1172
+I00
+sg51
+g0
+(g1173
+g1174
+V%(24680784 active)s
+p13438
+tp13439
+Rp13440
+sg1178
+I00
+sg76
+g1157
+sg1179
+g13297
+sg1180
+I1
+sbasg1187
+I01
+sbsbsg1188
+g1189
+sg76
+g1191
+sg1193
+g13299
+sbsbatp13441
+Rp13442
+sg229
+I01
+sg230
+Nsbsg11001
+g10675
+sS'changes'
+p13443
+g0
+(g9
+g2
+Ntp13444
+Rp13445
+(dp13446
+g13
+S'changes'
+p13447
+sg15
+Nsg16
+g17
+((lp13448
+g0
+(g558
+g2
+Ntp13449
+Rp13450
+(dp13451
+g191
+g0
+(g47
+g2
+Ntp13452
+Rp13453
+(dp13454
+g51
+Vin_queue
+p13455
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I246
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13456
+g13453
+atp13457
+Rp13458
+sg62
+Nsg63
+Nsg64
+g13455
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13459
+g13450
+ag0
+(g558
+g2
+Ntp13460
+Rp13461
+(dp13462
+g191
+g13453
+sg193
+Nsg576
+Nsg64
+Vknown_changes_in_queue_fkey
+p13463
+sg578
+Vpolicy_queue.id
+p13464
+sg580
+g0
+(g581
+g2
+Ntp13465
+Rp13466
+(dp13467
+g68
+Nsg576
+Nsg64
+g13463
+sg191
+g13445
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp13468
+Vin_queue
+p13469
+g13461
+stp13470
+Rp13471
+(dp13472
+g22
+(lp13473
+g13469
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbatp13474
+Rp13475
+(dp13476
+g22
+(lp13477
+g13450
+ag13461
+asbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp13478
+Rp13479
+sg85
+g28
+((lp13480
+tp13481
+Rp13482
+sbsg193
+Nsg576
+Nsg64
+Vknown_changes_approved_for_fkey
+p13483
+sg578
+Vpolicy_queue.id
+p13484
+sg580
+g0
+(g581
+g2
+Ntp13485
+Rp13486
+(dp13487
+g68
+Nsg576
+Nsg64
+g13483
+sg191
+g13445
+sg192
+Nsg585
+I01
+sg193
+Nsg194
+Nsg586
+g0
+(g43
+g44
+(dp13488
+Vin_queue
+p13489
+g13450
+stp13490
+Rp13491
+(dp13492
+g22
+(lp13493
+g13489
+asbsg593
+I00
+sbsg192
+Nsg585
+I01
+sg68
+Nsg593
+I00
+sbag13461
+atp13494
+Rp13495
+(dp13496
+g22
+(lp13497
+g13450
+ag13461
+asbsg24
+(lp13498
+sg26
+Nsg27
+g28
+((lp13499
+tp13500
+Rp13501
+sg32
+g33
+(g34
+tp13502
+Rp13503
+sg37
+g0
+(g38
+g2
+Ntp13504
+Rp13505
+(dp13506
+g42
+g0
+(g43
+g44
+(dp13507
+Vchangedby
+p13508
+g0
+(g47
+g2
+Ntp13509
+Rp13510
+(dp13511
+g51
+g13508
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I244
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13512
+g13510
+atp13513
+Rp13514
+sg62
+Nsg63
+Nsg64
+g13508
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13515
+tp13516
+Rp13517
+(dp13518
+g22
+(lp13519
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13520
+Rp13521
+(dp13522
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13523
+tp13524
+Rp13525
+sbsVmaintainer
+p13526
+g0
+(g47
+g2
+Ntp13527
+Rp13528
+(dp13529
+g51
+g13526
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I242
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13530
+g13528
+atp13531
+Rp13532
+sg62
+Nsg63
+Nsg64
+g13526
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13533
+tp13534
+Rp13535
+(dp13536
+g22
+(lp13537
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13538
+Rp13539
+(dp13540
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13541
+tp13542
+Rp13543
+sbsVapproved_for
+p13544
+g0
+(g47
+g2
+Ntp13545
+Rp13546
+(dp13547
+g51
+g13544
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I247
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13548
+g13546
+atp13549
+Rp13550
+sg62
+Nsg63
+Nsg64
+g13544
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13551
+tp13552
+Rp13553
+(dp13554
+g22
+(lp13555
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp13556
+Rp13557
+sg85
+g28
+((lp13558
+tp13559
+Rp13560
+sbsVfingerprint
+p13561
+g0
+(g47
+g2
+Ntp13562
+Rp13563
+(dp13564
+g51
+g13561
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I243
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13565
+g13563
+atp13566
+Rp13567
+sg62
+Nsg63
+Nsg64
+g13561
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13568
+tp13569
+Rp13570
+(dp13571
+g22
+(lp13572
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13573
+Rp13574
+(dp13575
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13576
+tp13577
+Rp13578
+sbsVdate
+p13579
+g0
+(g47
+g2
+Ntp13580
+Rp13581
+(dp13582
+g51
+g13579
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I245
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13583
+g13581
+atp13584
+Rp13585
+sg62
+Nsg63
+Nsg64
+g13579
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13586
+tp13587
+Rp13588
+(dp13589
+g22
+(lp13590
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13591
+Rp13592
+(dp13593
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13594
+tp13595
+Rp13596
+sbsVseen
+p13597
+g0
+(g47
+g2
+Ntp13598
+Rp13599
+(dp13600
+g51
+g13597
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp13601
+Rp13602
+(dp13603
+g97
+g13599
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp13604
+Rp13605
+(dp13606
+g104
+Vnow()
+p13607
+sg106
+Nsg107
+Nsg108
+(dp13608
+sbsbsg54
+I235
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13609
+g13599
+atp13610
+Rp13611
+sg62
+Nsg63
+Nsg64
+g13597
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13612
+tp13613
+Rp13614
+(dp13615
+g22
+(lp13616
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp13617
+Rp13618
+(dp13619
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp13620
+tp13621
+Rp13622
+sbsg13455
+g13453
+sVchangesname
+p13623
+g0
+(g47
+g2
+Ntp13624
+Rp13625
+(dp13626
+g51
+g13623
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I234
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13627
+g13625
+atp13628
+Rp13629
+sg62
+Nsg63
+Nsg64
+g13623
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13630
+tp13631
+Rp13632
+(dp13633
+g22
+(lp13634
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13635
+Rp13636
+(dp13637
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13638
+tp13639
+Rp13640
+sbsVcreated
+p13641
+g0
+(g47
+g2
+Ntp13642
+Rp13643
+(dp13644
+g51
+g13641
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp13645
+Rp13646
+(dp13647
+g97
+g13643
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp13648
+Rp13649
+(dp13650
+g104
+Vnow()
+p13651
+sg106
+Nsg107
+Nsg108
+(dp13652
+sbsbsg54
+I248
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13653
+g13643
+atp13654
+Rp13655
+sg62
+Nsg63
+Nsg64
+g13641
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13656
+tp13657
+Rp13658
+(dp13659
+g22
+(lp13660
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp13661
+Rp13662
+(dp13663
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp13664
+tp13665
+Rp13666
+sbsVchangelog_id
+p13667
+g0
+(g47
+g2
+Ntp13668
+Rp13669
+(dp13670
+g51
+g13667
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I250
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13671
+g13669
+atp13672
+Rp13673
+sg62
+Nsg63
+Nsg64
+g13667
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13674
+tp13675
+Rp13676
+(dp13677
+g22
+(lp13678
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp13679
+Rp13680
+sg85
+g28
+((lp13681
+tp13682
+Rp13683
+sbsVmodified
+p13684
+g0
+(g47
+g2
+Ntp13685
+Rp13686
+(dp13687
+g51
+g13684
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp13688
+Rp13689
+(dp13690
+g97
+g13686
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp13691
+Rp13692
+(dp13693
+g104
+Vnow()
+p13694
+sg106
+Nsg107
+Nsg108
+(dp13695
+sbsbsg54
+I249
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13696
+g13686
+atp13697
+Rp13698
+sg62
+Nsg63
+Nsg64
+g13684
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13699
+tp13700
+Rp13701
+(dp13702
+g22
+(lp13703
+sbsg75
+Nsg76
+g0
+(g144
+g2
+Ntp13704
+Rp13705
+(dp13706
+g148
+I01
+sg149
+Nsbsg85
+g28
+((lp13707
+tp13708
+Rp13709
+sbsVid
+p13710
+g0
+(g47
+g2
+Ntp13711
+Rp13712
+(dp13713
+g51
+g13710
+sg52
+I00
+sg15
+Nsg53
+g0
+(g93
+g2
+Ntp13714
+Rp13715
+(dp13716
+g97
+g13712
+sg98
+I00
+sg99
+g0
+(g100
+g2
+Ntp13717
+Rp13718
+(dp13719
+g104
+Vnextval('changes_id_seq'::regclass)
+p13720
+sg106
+Nsg107
+Nsg108
+(dp13721
+sbsbsg54
+I233
+sg55
+g13445
+sg56
+Nsg57
+I01
+sg58
+g28
+((lp13722
+g13712
+atp13723
+Rp13724
+sg62
+Nsg63
+Nsg64
+g13710
+sg65
+I00
+sg66
+Nsg67
+I01
+sg68
+Nsg69
+g17
+((lp13725
+tp13726
+Rp13727
+(dp13728
+g22
+(lp13729
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp13730
+Rp13731
+sg85
+g28
+((lp13732
+tp13733
+Rp13734
+sbsVsource
+p13735
+g0
+(g47
+g2
+Ntp13736
+Rp13737
+(dp13738
+g51
+g13735
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I236
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13739
+g13737
+atp13740
+Rp13741
+sg62
+Nsg63
+Nsg64
+g13735
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13742
+tp13743
+Rp13744
+(dp13745
+g22
+(lp13746
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13747
+Rp13748
+(dp13749
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13750
+tp13751
+Rp13752
+sbsVversion
+p13753
+g0
+(g47
+g2
+Ntp13754
+Rp13755
+(dp13756
+g51
+g13753
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I239
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13757
+g13755
+atp13758
+Rp13759
+sg62
+Nsg63
+Nsg64
+g13753
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13760
+tp13761
+Rp13762
+(dp13763
+g22
+(lp13764
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13765
+Rp13766
+(dp13767
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13768
+tp13769
+Rp13770
+sbsVarchitecture
+p13771
+g0
+(g47
+g2
+Ntp13772
+Rp13773
+(dp13774
+g51
+g13771
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I238
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13775
+g13773
+atp13776
+Rp13777
+sg62
+Nsg63
+Nsg64
+g13771
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13778
+tp13779
+Rp13780
+(dp13781
+g22
+(lp13782
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13783
+Rp13784
+(dp13785
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13786
+tp13787
+Rp13788
+sbsVdistribution
+p13789
+g0
+(g47
+g2
+Ntp13790
+Rp13791
+(dp13792
+g51
+g13789
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I240
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13793
+g13791
+atp13794
+Rp13795
+sg62
+Nsg63
+Nsg64
+g13789
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13796
+tp13797
+Rp13798
+(dp13799
+g22
+(lp13800
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13801
+Rp13802
+(dp13803
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13804
+tp13805
+Rp13806
+sbsVbinaries
+p13807
+g0
+(g47
+g2
+Ntp13808
+Rp13809
+(dp13810
+g51
+g13807
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I237
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13811
+g13809
+atp13812
+Rp13813
+sg62
+Nsg63
+Nsg64
+g13807
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13814
+tp13815
+Rp13816
+(dp13817
+g22
+(lp13818
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13819
+Rp13820
+(dp13821
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13822
+tp13823
+Rp13824
+sbsVurgency
+p13825
+g0
+(g47
+g2
+Ntp13826
+Rp13827
+(dp13828
+g51
+g13825
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I241
+sg55
+g13445
+sg56
+Nsg57
+I00
+sg58
+g28
+((lp13829
+g13827
+atp13830
+Rp13831
+sg62
+Nsg63
+Nsg64
+g13825
+sg65
+I00
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp13832
+tp13833
+Rp13834
+(dp13835
+g22
+(lp13836
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp13837
+Rp13838
+(dp13839
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp13840
+tp13841
+Rp13842
+sbstp13843
+Rp13844
+(dp13845
+g22
+(lp13846
+g13710
+ag13623
+ag13597
+ag13735
+ag13807
+ag13771
+ag13753
+ag13789
+ag13825
+ag13526
+ag13561
+ag13508
+ag13579
+ag13455
+ag13544
+ag13641
+ag13684
+ag13667
+asbsbsg64
+g13443
+sg183
+g0
+(g184
+g2
+Ntp13847
+Rp13848
+(dp13849
+g188
+(lp13850
+g13712
+asg64
+Vknown_changes_pkey
+p13851
+sg191
+g13445
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp13852
+Rp13853
+(dp13854
+g42
+g0
+(g43
+g44
+(dp13855
+g13710
+g13712
+stp13856
+Rp13857
+(dp13858
+g22
+(lp13859
+g13710
+asbsbsbsg204
+g4
+sg205
+g28
+((lp13860
+g0
+(g207
+g2
+Ntp13861
+Rp13862
+(dp13863
+g55
+g13445
+sg56
+I00
+sg64
+S'changesurgency_ind'
+p13864
+sg195
+g0
+(g38
+g2
+Ntp13865
+Rp13866
+(dp13867
+g42
+g0
+(g43
+g44
+(dp13868
+g13825
+g13827
+stp13869
+Rp13870
+(dp13871
+g22
+(lp13872
+g13825
+asbsbsg220
+(dp13873
+sbag0
+(g207
+g2
+Ntp13874
+Rp13875
+(dp13876
+g55
+g13445
+sg56
+I00
+sg64
+S'changesdistribution_ind'
+p13877
+sg195
+g0
+(g38
+g2
+Ntp13878
+Rp13879
+(dp13880
+g42
+g0
+(g43
+g44
+(dp13881
+g13789
+g13791
+stp13882
+Rp13883
+(dp13884
+g22
+(lp13885
+g13789
+asbsbsg220
+(dp13886
+sbag0
+(g207
+g2
+Ntp13887
+Rp13888
+(dp13889
+g55
+g13445
+sg56
+I00
+sg64
+S'changestimestamp_ind'
+p13890
+sg195
+g0
+(g38
+g2
+Ntp13891
+Rp13892
+(dp13893
+g42
+g0
+(g43
+g44
+(dp13894
+g13597
+g13599
+stp13895
+Rp13896
+(dp13897
+g22
+(lp13898
+g13597
+asbsbsg220
+(dp13899
+sbag0
+(g207
+g2
+Ntp13900
+Rp13901
+(dp13902
+g55
+g13445
+sg56
+I00
+sg64
+S'changesname_ind'
+p13903
+sg195
+g0
+(g38
+g2
+Ntp13904
+Rp13905
+(dp13906
+g42
+g0
+(g43
+g44
+(dp13907
+g13623
+g13625
+stp13908
+Rp13909
+(dp13910
+g22
+(lp13911
+g13623
+asbsbsg220
+(dp13912
+sbag0
+(g207
+g2
+Ntp13913
+Rp13914
+(dp13915
+g55
+g13445
+sg56
+I00
+sg64
+S'changesin_queue'
+p13916
+sg195
+g0
+(g38
+g2
+Ntp13917
+Rp13918
+(dp13919
+g42
+g0
+(g43
+g44
+(dp13920
+g13455
+g13453
+stp13921
+Rp13922
+(dp13923
+g22
+(lp13924
+g13455
+asbsbsg220
+(dp13925
+sbag0
+(g207
+g2
+Ntp13926
+Rp13927
+(dp13928
+g55
+g13445
+sg56
+I01
+sg64
+S'known_changes_changesname_key'
+p13929
+sg195
+g0
+(g38
+g2
+Ntp13930
+Rp13931
+(dp13932
+g42
+g0
+(g43
+g44
+(dp13933
+g13623
+g13625
+stp13934
+Rp13935
+(dp13936
+g22
+(lp13937
+g13623
+asbsbsg220
+(dp13938
+sbag0
+(g207
+g2
+Ntp13939
+Rp13940
+(dp13941
+g55
+g13445
+sg56
+I00
+sg64
+S'changesapproved_for'
+p13942
+sg195
+g0
+(g38
+g2
+Ntp13943
+Rp13944
+(dp13945
+g42
+g0
+(g43
+g44
+(dp13946
+g13544
+g13546
+stp13947
+Rp13948
+(dp13949
+g22
+(lp13950
+g13544
+asbsbsg220
+(dp13951
+sbag0
+(g207
+g2
+Ntp13952
+Rp13953
+(dp13954
+g55
+g13445
+sg56
+I00
+sg64
+S'changesin_queue_approved_for'
+p13955
+sg195
+g0
+(g38
+g2
+Ntp13956
+Rp13957
+(dp13958
+g42
+g0
+(g43
+g44
+(dp13959
+g13544
+g13546
+sg13455
+g13453
+stp13960
+Rp13961
+(dp13962
+g22
+(lp13963
+g13455
+ag13544
+asbsbsg220
+(dp13964
+sbag0
+(g207
+g2
+Ntp13965
+Rp13966
+(dp13967
+g55
+g13445
+sg56
+I00
+sg64
+S'changessource_ind'
+p13968
+sg195
+g0
+(g38
+g2
+Ntp13969
+Rp13970
+(dp13971
+g42
+g0
+(g43
+g44
+(dp13972
+g13735
+g13737
+stp13973
+Rp13974
+(dp13975
+g22
+(lp13976
+g13735
+asbsbsg220
+(dp13977
+sbatp13978
+Rp13979
+sg220
+(dp13980
+sg225
+g13443
+sg85
+g28
+((lp13981
+g13848
+ag13486
+ag13466
+atp13982
+Rp13983
+sg229
+I01
+sg230
+NsbsS'almost_obsolete_src_associations'
+p13984
+g0
+(g9
+g2
+Ntp13985
+Rp13986
+(dp13987
+g15
+Nsg16
+g17
+((lp13988
+tp13989
+Rp13990
+(dp13991
+g22
+(lp13992
+sbsg24
+(lp13993
+sg26
+Nsg27
+g28
+((lp13994
+tp13995
+Rp13996
+sg32
+g33
+(g34
+tp13997
+Rp13998
+sg37
+g0
+(g38
+g2
+Ntp13999
+Rp14000
+(dp14001
+g42
+g0
+(g43
+g44
+(dp14002
+Vsource
+p14003
+g0
+(g47
+g2
+Ntp14004
+Rp14005
+(dp14006
+g51
+g14003
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I385
+sg55
+g13986
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g14003
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp14007
+tp14008
+Rp14009
+(dp14010
+g22
+(lp14011
+sbsg75
+Nsg76
+g0
+(g77
+g2
+Ntp14012
+Rp14013
+(dp14014
+g81
+Nsg82
+Nsg83
+I00
+sg84
+I00
+sbsg85
+g28
+((lp14015
+tp14016
+Rp14017
+sbsVsuite
+p14018
+g0
+(g47
+g2
+Ntp14019
+Rp14020
+(dp14021
+g51
+g14018
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I387
+sg55
+g13986
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g14018
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp14022
+tp14023
+Rp14024
+(dp14025
+g22
+(lp14026
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp14027
+Rp14028
+sg85
+g28
+((lp14029
+tp14030
+Rp14031
+sbsVversion
+p14032
+g0
+(g47
+g2
+Ntp14033
+Rp14034
+(dp14035
+g51
+g14032
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I386
+sg55
+g13986
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g14032
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp14036
+tp14037
+Rp14038
+(dp14039
+g22
+(lp14040
+sbsg75
+Nsg76
+g0
+(g1634
+g2
+Ntp14041
+Rp14042
+sg85
+g28
+((lp14043
+tp14044
+Rp14045
+sbsVid
+p14046
+g0
+(g47
+g2
+Ntp14047
+Rp14048
+(dp14049
+g51
+g14046
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I383
+sg55
+g13986
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g14046
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp14050
+tp14051
+Rp14052
+(dp14053
+g22
+(lp14054
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp14055
+Rp14056
+sg85
+g28
+((lp14057
+tp14058
+Rp14059
+sbsVsrc
+p14060
+g0
+(g47
+g2
+Ntp14061
+Rp14062
+(dp14063
+g51
+g14060
+sg52
+I00
+sg15
+Nsg53
+Nsg54
+I384
+sg55
+g13986
+sg56
+Nsg57
+I00
+sg62
+Nsg63
+Nsg64
+g14060
+sg65
+I01
+sg66
+Nsg67
+I00
+sg68
+Nsg69
+g17
+((lp14064
+tp14065
+Rp14066
+(dp14067
+g22
+(lp14068
+sbsg75
+Nsg76
+g0
+(g118
+g2
+Ntp14069
+Rp14070
+sg85
+g28
+((lp14071
+tp14072
+Rp14073
+sbstp14074
+Rp14075
+(dp14076
+g22
+(lp14077
+g14046
+ag14060
+ag14003
+ag14032
+ag14018
+asbsbsg64
+g13984
+sg183
+g0
+(g184
+g2
+Ntp14078
+Rp14079
+(dp14080
+g188
+(lp14081
+sg64
+Nsg191
+g13986
+sg192
+Nsg193
+Nsg194
+Nsg195
+g0
+(g38
+g2
+Ntp14082
+Rp14083
+(dp14084
+g42
+g0
+(g43
+g44
+(dp14085
+tp14086
+Rp14087
+(dp14088
+g22
+(lp14089
+sbsbsbsg204
+g4
+sg205
+g28
+((lp14090
+tp14091
+Rp14092
+sg220
+(dp14093
+sg225
+g13984
+sg85
+g28
+((lp14094
+g14079
+atp14095
+Rp14096
+sg229
+I01
+sg230
+Nsbssb.ccollections
+defaultdict
+p0
+(c__builtin__
+list
+p1
+tp2
+Rp3
+.
\ No newline at end of file
diff --git a/tests/fixtures/ftp/dists/proposed-updates/main/.keepme b/tests/fixtures/ftp/dists/proposed-updates/main/.keepme
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fixtures/ftp/dists/stable/main/.keepme b/tests/fixtures/ftp/dists/stable/main/.keepme
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fixtures/ftp/dists/testing/main/installer-i386/20110106/something b/tests/fixtures/ftp/dists/testing/main/installer-i386/20110106/something
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fixtures/ftp/dists/unstable/main/installer-amd64/20110106/somedir/file b/tests/fixtures/ftp/dists/unstable/main/installer-amd64/20110106/somedir/file
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fixtures/ftp/dists/unstable/main/installer-amd64/20110106/something b/tests/fixtures/ftp/dists/unstable/main/installer-amd64/20110106/something
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fixtures/ftp/dists/unstable/main/installer-i386/20110106/somedir/file b/tests/fixtures/ftp/dists/unstable/main/installer-i386/20110106/somedir/file
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fixtures/ftp/dists/unstable/main/installer-i386/20110106/something b/tests/fixtures/ftp/dists/unstable/main/installer-i386/20110106/something
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fixtures/ftp/pool/main/h/hello/hello_2.2-1.debian.tar.gz b/tests/fixtures/ftp/pool/main/h/hello/hello_2.2-1.debian.tar.gz
new file mode 100644 (file)
index 0000000..c185f1b
Binary files /dev/null and b/tests/fixtures/ftp/pool/main/h/hello/hello_2.2-1.debian.tar.gz differ
diff --git a/tests/fixtures/ftp/pool/main/h/hello/hello_2.2-1.dsc b/tests/fixtures/ftp/pool/main/h/hello/hello_2.2-1.dsc
new file mode 100644 (file)
index 0000000..f564ce4
--- /dev/null
@@ -0,0 +1,13 @@
+Format: 3.0 (quilt)
+Source: hello
+Version: 2.2-1
+Maintainer: Mr. Me <me@somewhere.world>
+Checksums-Sha1: 
+ 9613ac479ddb6bca7f3ec5436b27ab983733b963 147 hello_2.2.orig.tar.gz
+ 97cfabb792685ac19c1ddc03f7d4aa1022f626e1 462 hello_2.2-1.debian.tar.gz
+Checksums-Sha256: 
+ b041547e956f091a46030f133b6e47af15bc836771540118fec98d0913602ce0 147 hello_2.2.orig.tar.gz
+ da28e21cbae014b915abc8afc4be1c0b8e5148b78802dce815d5342e80cd52e7 462 hello_2.2-1.debian.tar.gz
+Files: 
+ cc4b081e2697fca88c87986b1cad905f 147 hello_2.2.orig.tar.gz
+ d7bdb277cbdbaad4ab700c6d5cee9b54 462 hello_2.2-1.debian.tar.gz
diff --git a/tests/fixtures/ftp/pool/main/h/hello/hello_2.2-1_i386.deb b/tests/fixtures/ftp/pool/main/h/hello/hello_2.2-1_i386.deb
new file mode 100644 (file)
index 0000000..f40802b
Binary files /dev/null and b/tests/fixtures/ftp/pool/main/h/hello/hello_2.2-1_i386.deb differ
diff --git a/tests/fixtures/ftp/pool/main/h/hello/hello_2.2.orig.tar.gz b/tests/fixtures/ftp/pool/main/h/hello/hello_2.2.orig.tar.gz
new file mode 100644 (file)
index 0000000..f3fbc18
Binary files /dev/null and b/tests/fixtures/ftp/pool/main/h/hello/hello_2.2.orig.tar.gz differ
diff --git a/tests/test_copy_installer.py b/tests/test_copy_installer.py
new file mode 100755 (executable)
index 0000000..09bd13a
--- /dev/null
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+
+from base_test import DakTestCase
+
+from dak.copy_installer import InstallerCopier
+
+import unittest
+
+class ImportTestCase(DakTestCase):
+    def test_arguments(self):
+        '''test constructor arguments'''
+        # version argument is required
+        self.assertRaises(KeyError, InstallerCopier)
+
+        copier = InstallerCopier(version = '20110106')
+        self.assertEqual('20110106', copier.version)
+        self.assertEqual('unstable', copier.source)
+        self.assertEqual('testing', copier.dest)
+
+        copier = InstallerCopier(version = '20110106', source = \
+                'proposed-updates')
+        self.assertEqual('proposed-updates', copier.source)
+
+        copier = InstallerCopier(version = '20110106', dest = 'stable')
+        self.assertEqual('stable', copier.dest)
+
+    def test_dir_names(self):
+        copier = InstallerCopier(version = '20110106')
+        self.assertEqual('tests/fixtures/ftp/dists/unstable/main',
+                copier.source_dir)
+        self.assertEqual('tests/fixtures/ftp/dists/testing/main',
+                copier.dest_dir)
+
+    def missing_source(self):
+        copier = InstallerCopier(version = '20110106', source = 'foo')
+
+    def missing_dest(self):
+        copier = InstallerCopier(version = '20110106', dest = 'bar')
+
+    def test_suites(self):
+        self.assertRaises(IOError, self.missing_source)
+        self.assertRaises(IOError, self.missing_dest)
+
+    def test_copy(self):
+        copier = InstallerCopier(version = '20110106')
+        self.assertEqual(['amd64'], copier.architectures)
+        self.assertEqual(['i386'], copier.skip_architectures)
+        self.assertEqual( \
+            [('tests/fixtures/ftp/dists/unstable/main/installer-amd64/20110106', \
+              'tests/fixtures/ftp/dists/testing/main/installer-amd64/20110106'),], \
+            copier.trees_to_copy)
+        self.assertEqual([('20110106', \
+            'tests/fixtures/ftp/dists/testing/main/installer-amd64/current')], \
+            copier.symlinks_to_create)
+        self.assertEqual('''
+Will copy installer version 20110106 from suite unstable to
+testing.
+Architectures to copy: amd64
+Architectures to skip: i386''', copier.get_message())
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/test_multiprocessing.py b/tests/test_multiprocessing.py
new file mode 100755 (executable)
index 0000000..595032f
--- /dev/null
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+
+from base_test import DakTestCase
+
+from daklib.dakmultiprocessing import DakProcessPool, \
+                                      PROC_STATUS_SUCCESS,   PROC_STATUS_MISCFAILURE, \
+                                      PROC_STATUS_EXCEPTION, PROC_STATUS_SIGNALRAISED
+import signal
+
+def test_function(num, num2):
+    from os import kill, getpid
+
+    if num == 1:
+        sigs = [signal.SIGTERM, signal.SIGPIPE, signal.SIGALRM, signal.SIGHUP]
+        kill(getpid(), sigs[num2])
+
+    if num2 == 3:
+        raise Exception('Test uncaught exception handling')
+
+    if num == 0 and num2 == 1:
+        return (PROC_STATUS_MISCFAILURE, 'Test custom error return')
+
+    return (PROC_STATUS_SUCCESS, 'blah, %d, %d' % (num, num2))
+
+class DakProcessPoolTestCase(DakTestCase):
+    def testPool(self):
+        def alarm_handler(signum, frame):
+            raise AssertionError('Timed out')
+
+        # Shouldn't take us more than 15 seconds to run this test
+        signal.signal(signal.SIGALRM, alarm_handler)
+        signal.alarm(15)
+
+        p = DakProcessPool()
+        for s in range(3):
+            for j in range(4):
+                p.apply_async(test_function, [s, j])
+
+        p.close()
+        p.join()
+
+        signal.alarm(0)
+        signal.signal(signal.SIGALRM, signal.SIG_DFL)
+
+        expected = [(PROC_STATUS_SUCCESS,      'blah, 0, 0'),
+                    (PROC_STATUS_MISCFAILURE,  'Test custom error return'),
+                    (PROC_STATUS_SUCCESS,      'blah, 0, 2'),
+                    (PROC_STATUS_EXCEPTION,    'Test uncaught exception handling'),
+                    (PROC_STATUS_SIGNALRAISED, 15),
+                    (PROC_STATUS_SIGNALRAISED, 13),
+                    (PROC_STATUS_SIGNALRAISED, 14),
+                    (PROC_STATUS_SIGNALRAISED, 1),
+                    (PROC_STATUS_SUCCESS,      'blah, 2, 0'),
+                    (PROC_STATUS_SUCCESS,      'blah, 2, 1'),
+                    (PROC_STATUS_SUCCESS,      'blah, 2, 2'),
+                    (PROC_STATUS_EXCEPTION,    'Test uncaught exception handling')]
+
+        self.assertEqual( len(p.results), len(expected) )
+
+        for r in range(len(p.results)):
+            self.assertEqual(p.results[r], expected[r])
index 4f5ec72d0452ad92e4452c882b8f7eccecc5ccff..85a76948d193c5f4a8f4615eb71aa1fdc011236f 100755 (executable)
@@ -4,6 +4,7 @@ from base_test import DakTestCase, fixture
 
 import unittest
 
+from daklib.gpg import GpgException
 from daklib.utils import parse_changes
 from daklib.dak_exceptions import InvalidDscError, ParseChangesError
 
@@ -17,49 +18,51 @@ class ParseChangesTestCase(DakTestCase):
             self.fail('%s was not recognised as invalid' % filename)
         except ParseChangesError:
             pass
+        except GpgException:
+            pass
         except InvalidDscError, actual_line:
             if line is not None:
                 assertEqual(actual_line, line)
 
 class ParseDscTestCase(ParseChangesTestCase):
     def test_1(self):
-        self.assertParse('dsc/1.dsc', 0, 1)
+        self.assertParse('dsc/1.dsc', -1, 1)
 
     def test_1_ignoreErrors(self):
         # Valid .dsc ; ignoring errors
-        self.assertParse('dsc/1.dsc', 0, 1)
+        self.assertParse('dsc/1.dsc', -1, 1)
 
     def test_2(self):
         # Missing blank line before signature body
-        self.assertParse('dsc/2.dsc', 0, 1)
+        self.assertParse('dsc/2.dsc', -1, 1)
 
     def test_2_ignoreErrors(self):
         # Invalid .dsc ; ignoring errors
-        self.assertParse('dsc/2.dsc', 0, 1)
+        self.assertParse('dsc/2.dsc', -1, 1)
 
     def test_3(self):
         # Missing blank line after signature header
-        self.assertParse('dsc/3.dsc', 0, 1)
+        self.assertParse('dsc/3.dsc', -1, 1)
 
     def test_4(self):
         # No blank lines at all
-        self.assertParse('dsc/4.dsc', 0, 1)
+        self.assertFails('dsc/4.dsc', -1, 1)
 
     def test_5(self):
         # Extra blank line before signature body
-        self.assertParse('dsc/5.dsc', 0, 1)
+        self.assertParse('dsc/5.dsc', -1, 1)
 
     def test_6(self):
         # Extra blank line after signature header
-        self.assertParse('dsc/6.dsc', 0, 1)
+        self.assertParse('dsc/6.dsc', -1, 1)
 
 class ParseChangesTestCase(ParseChangesTestCase):
     def test_1(self):
         # Empty changes
-        self.assertFails('changes/1.changes', line=5)
+        self.assertFails('changes/1.changes', 5, -1)
 
     def test_2(self):
-        changes = self.assertParse('changes/2.changes', 0)
+        changes = self.assertParse('changes/2.changes', -1)
 
         binaries = changes['binary']
 
@@ -67,12 +70,17 @@ class ParseChangesTestCase(ParseChangesTestCase):
 
     def test_3(self):
         for filename in ('valid', 'bogus-pre', 'bogus-post'):
-            for strict_whitespace in (0, 1):
+            for strict_whitespace in (-1,):
                 changes = self.assertParse(
                     'changes/%s.changes' % filename,
                     strict_whitespace,
                 )
                 self.failIf(changes.get('you'))
 
+    def test_4(self):
+        changes = self.assertParse('changes/two-beginnings.changes', -1, 1)
+        self.assert_(changes['question'] == 'Is this a bug?')
+        self.failIf(changes.get('this'))
+
 if __name__ == '__main__':
     unittest.main()
index 16c482a0ef7e26653b80d64618a9c8c4d3f7f687..e4d3caecaa4a77f4c2380274816d55c39ed43e0f 100644 (file)
@@ -64,7 +64,22 @@ $statusdelay = 30;
 
 # names of the keyring files
 @keyrings = ( "/srv/keyring.debian.org/keyrings/debian-keyring.gpg",
-              "/srv/keyring.debian.org/keyrings/debian-maintainers.gpg" );
+              "/srv/keyring.debian.org/keyrings/debian-maintainers.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-alpha-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-amd64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-armel-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-arm-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-hppa-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-hurd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-ia64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-kfreebsd-amd64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-kfreebsd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-mipsel-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-mips-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-powerpc-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-s390-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-sparc-keyring.gpg");
 
 # our log file
 $logfile = "$queued_dir/log";
index f04e925df7bbdd1d64967c5066af1298a1a0bf9a..1c9e0c9a9854a2f10b141c9b3d08e3273a9cb249 100644 (file)
@@ -63,7 +63,22 @@ $statusfile = "$incoming/status";
 $statusdelay = 30;
 
 # names of the keyring files
-@keyrings = ( "/srv/backports-master.debian.org/keyrings/keyring.gpg" );
+@keyrings = ( "/srv/backports-master.debian.org/keyrings/keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-alpha-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-amd64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-armel-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-arm-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-hppa-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-hurd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-ia64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-kfreebsd-amd64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-kfreebsd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-mipsel-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-mips-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-powerpc-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-s390-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-sparc-keyring.gpg");
 
 # our log file
 $logfile = "$queued_dir/log";
index 57a8f3a3d212ec107f8781049e51fa38f87c4825..1806a1143e0c461b4c86c43326e87afed56239aa 100644 (file)
@@ -34,7 +34,7 @@ $ssh_options = "-o'BatchMode yes' -o'FallBackToRsh no' ".
 $ssh_key_file = "";
 
 # the incoming dir we live in
-$incoming = "/srv/queued/UploadQueue";
+$incoming = "/srv/queued/ftpmaster";
 
 # the delayed incoming directories
 $incoming_delayed = "/srv/queued/UploadQueue/DELAYED/%d-day";
@@ -63,7 +63,22 @@ $statusfile = "$incoming/status";
 $statusdelay = 30;
 
 # names of the keyring files
-@keyrings = ( "/srv/keyring.debian.org/keyrings/debian-keyring.gpg" );
+@keyrings = ( "/srv/keyring.debian.org/keyrings/debian-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-alpha-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-amd64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-armel-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-arm-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-hppa-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-hurd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-ia64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-kfreebsd-amd64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-kfreebsd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-mipsel-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-mips-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-powerpc-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-s390-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-sparc-keyring.gpg");
 
 # our log file
 $logfile = "$queued_dir/log";
@@ -124,6 +139,9 @@ $remote_timeout = 3*60*60; # 3 hours
 # mail address of maintainer
 $maintainer_mail = "ftpmaster\@debian.org";
 
+# to override the TO address of ALL outgoing mail, set this value.
+$overridemail = "dak\@security.debian.org";
+
 
 # logfile rotating:
 # -----------------
index 77cc90d7a264cd0cfea475782ee655dbe73f7990..d6071278402d8311f25748a56861c5dfb8ae980f 100644 (file)
@@ -64,7 +64,22 @@ $statusdelay = 30;
 
 # names of the keyring files
 @keyrings = ( "/srv/keyring.debian.org/keyrings/debian-keyring.gpg",
-              "/srv/keyring.debian.org/keyrings/debian-maintainers.gpg" );
+              "/srv/keyring.debian.org/keyrings/debian-maintainers.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-alpha-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-amd64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-armel-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-arm-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-hppa-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-hurd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-ia64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-kfreebsd-amd64-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-kfreebsd-i386-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-mipsel-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-mips-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-powerpc-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-s390-keyring.gpg",
+              "/srv/keyring.debian.org/keyrings/buildd-keyrings/buildd-sparc-keyring.gpg");
 
 # our log file
 $logfile = "$queued_dir/log";
index e229ac076996bf19a798735866c795ad9c46f370..2a45d5d88628226df990801451328b7154452de5 100755 (executable)
@@ -694,7 +694,7 @@ sub process_changes($\@) {
        $pgplines,     @files,     @filenames,  @changes_stats,
        $failure_file, $retries,   $last_retry, $upload_time,
        $file,         $do_report, $ls_l,       $problems_reported,
-       $errs,         $pkgname,   $signator
+       $errs,         $pkgname,   $signator,   $extralines
      );
   local (*CHANGES);
   local (*FAILS);
@@ -711,12 +711,19 @@ sub process_changes($\@) {
   open( CHANGES, "<$changes" )
     or die "Cannot open ${main::current_incoming_short}/$changes: $!\n";
   $pgplines        = 0;
+  $extralines      = 0;
   $main::mail_addr = "";
   @files           = ();
 outer_loop: while (<CHANGES>) {
     if (/^---+(BEGIN|END) PGP .*---+$/) {
       ++$pgplines;
-    } elsif (/^Maintainer:\s*/i) {
+      next;
+    }
+    if ( $pgplines < 1 or $pgplines >= 3 ) {
+      $extralines++ if length $_ > 1;
+      next;
+    }
+    if (/^Maintainer:\s*/i) {
       chomp( $main::mail_addr = $' );
       $main::mail_addr = $1 if $main::mail_addr =~ /<([^>]*)>/;
     } elsif (/^Source:\s*/i) {
@@ -762,6 +769,12 @@ outer_loop: while (<CHANGES>) {
   @$keep_list = @filenames;
 
   # some consistency checks
+  if ( $extralines ) {
+    msg( "log,mail",
+"$main::current_incoming_short/$changes contained lines outside the pgp signed "
+."part, cannot process\n" );
+    goto remove_only_changes;
+  } ## end if ( $extralines )
   if ( !$main::mail_addr ) {
     msg( "log,mail",
 "$main::current_incoming_short/$changes doesn't contain a Maintainer: field; "
index fd67d5bd3ab0bd4a222bae83313f899405bc75e7..b04816e0c6e91d0132d58197ef57edd00e8427c2 100755 (executable)
@@ -17,7 +17,7 @@ from datetime import datetime
 
 import PyRSS2Gen
 
-from debian_bundle.deb822 import Changes
+from debian.deb822 import Changes
 
 inrss_filename = "NEW_in.rss"
 outrss_filename = "NEW_out.rss"