Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uOmCU-00B46R-IY for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Jun 2025 23:46:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uOmCS-00Eqmy-Db for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Jun 2025 23:46:45 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uOmCS-00Eqmp-1R for pgsql-hackers@lists.postgresql.org; Mon, 09 Jun 2025 23:46:44 +0000 Received: from mout.gmx.net ([212.227.17.22]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uOmCQ-0018Zn-1y for pgsql-hackers@lists.postgresql.org; Mon, 09 Jun 2025 23:46:44 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1749512800; x=1750117600; i=jimis@gmx.net; bh=xhkNJnvdEosoRs3BEOdeP9FgTJs5EfcKPqOXODWWX8U=; h=X-UI-Sender-Class:Date:From:To:Subject:In-Reply-To:Message-ID: References:MIME-Version:Content-Type:cc:content-transfer-encoding: content-type:date:from:message-id:mime-version:reply-to:subject: to; b=jgtmVCalu8StTVHDlKKD1g0vF0FGRdi8g7vWf8e+9v5mDwiVmaGTAUTMpJEMrrE1 9TPSqK/zFZ0x5xIHvBubl54aokdMDCTWc0KmqVhFyUaEYtUi1qZYupgZPKDqvgwdQ Ixu08xCj7jrhFyhZBjpq4hGMW1TV6zp1me6rukVjzYJymqp5cnz8djDi/EbOET2GQ Kq+HKs/Dx1+o6eeDZcV6D3F0T2QjzIFPKGGjEB2v6i4NsWn7NoI5M7UCx3Hra1khO GtwBoMsPnRUIGpS77kYz5XjMSUvaq810FB6s35UFNXe9hloXVHk++FcCZszTvjf4I ptq8eGv2uyDTDbzZ3Q== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.1.75] ([84.215.109.181]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MMofc-1u60rU27LY-00Tt02 for ; Tue, 10 Jun 2025 01:46:40 +0200 Date: Tue, 10 Jun 2025 01:46:39 +0200 (CEST) From: Dimitrios Apostolou To: pgsql-hackers@lists.postgresql.org Subject: [PATCH v2] parallel pg_restore: move offset-building phase to before forking In-Reply-To: Message-ID: <9bb6c0f7-4e1a-ad5b-655b-2468e42c620f@gmx.net> References: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="-1463770111-1026633542-1749512800=:87001" X-Provags-ID: V03:K1:Xe5/60ILVKCmhdcRinG9vowY/Umnai0XGl0UWFoVscld7ZcHc3N +/3FRo9BDyzFeNOtW2Wqcu+0sVAJaWvNtX169n3zLIuXuRYnAP5gs5M79uZ8i5OVCoZ26Ml bnMy+4LBnstiQ1+2B59Meby36rutn93EikeZbkGIQTFeNZ0ePkEtIST0j2sj2EqweyIh9bg DXVpyTQ9ltPpAiSqaZEuA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:KyzaTk38N7A=;m6kC2v5amX1M+1cHiAutXRsNVZa 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 Lf3109UfwrrqB712z5QVSircEaiPZnBZWKZXNw== List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1463770111-1026633542-1749512800=:87001 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: quoted-printable Rebased and attached new patch. Should I add it to July's commitfest? On Fri, 4 Apr 2025, Dimitrios Apostolou wrote: > Hello list, > > based on the delays I experienced in pg_restore, as described at: > > https://www.postgresql.org/message-id/flat/6bd16bdb-aa5e-0512-739d-b8410= 0596035@gmx.net > > I noticed that the seeking-reading behaviour was manifested by every one= of=20 > the pg_restore worker processes, in parallel, making the situation even= =20 > worse. With this patch I moved this phase to the parent process before= =20 > fork(), so that the children have the necessary information from birth. > > Copying the commit message: > > A pg_dump custom format archive without offsets in the table of > contents, is usually generated when pg_dump writes to stdout instead of > a file. When doing parallel pg_restore (-j) from such a file, every > worker process was scanning the full archive sequentially, in order to > build the offset table and find the parts assigned to restore. This led > to the worker processes competing for I/O. > > This patch moves this offset-table building phase to the parent process, > before forking the worker processes. > > The upside is that we now have only one extra scan of the file. > And this scan happens without other competing I/O, so it completes > faster. > > The downside is that there is a delay before spawning the children and > starting assigning jobs to them. > > > What do you think? > > Thanks, > Dimitris > ---1463770111-1026633542-1749512800=:87001 Content-Type: text/x-patch; name=v2-0001-parallel-pg_restore-move-offset-building-phase-to.patch Content-Transfer-Encoding: BASE64 Content-ID: <64fee028-7646-4139-ddf1-bbe342697ef8@NO.WHERE> Content-Description: Content-Disposition: attachment; filename=v2-0001-parallel-pg_restore-move-offset-building-phase-to.patch RnJvbSA4ZWNlZDAyZWFjZjYyYWVlNTc2NmIwZjgxYjVlYjUwMGRhMGU2MTQw IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogRGltaXRyaW9zIEFw b3N0b2xvdSA8amltaXNAcXQuaW8+DQpEYXRlOiBTYXQsIDI5IE1hciAyMDI1 IDAxOjE2OjE5ICswMTAwDQpTdWJqZWN0OiBbUEFUQ0ggdjJdIHBhcmFsbGVs IHBnX3Jlc3RvcmU6IG1vdmUgb2Zmc2V0LWJ1aWxkaW5nIHBoYXNlIHRvIGJl Zm9yZQ0KIGZvcmtpbmcNCg0KQSBwZ19kdW1wIGN1c3RvbSBmb3JtYXQgYXJj aGl2ZSB3aXRob3V0IG9mZnNldHMgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRz DQppcyB1c3VhbGx5IGdlbmVyYXRlZCB3aGVuIGl0IHdyaXRlcyB0byBzdGRv dXQgaW5zdGVhZCBvZiBhIGZpbGUuDQoNCldoZW4gZG9pbmcgcGFyYWxsZWwg cGdfcmVzdG9yZSAoLWopIGZyb20gc3VjaCBhIGZpbGUsIGV2ZXJ5IHdvcmtl cg0KcHJvY2VzcyB3YXMgc2Nhbm5pbmcgdGhlIGZ1bGwgYXJjaGl2ZSBzZXF1 ZW50aWFsbHksIGluIG9yZGVyIHRvIGJ1aWxkDQp0aGUgb2Zmc2V0IHRhYmxl IGFuZCBmaW5kIHRoZSBwYXJ0cyBhc3NpZ25lZCB0byByZXN0b3JlLg0KDQpU aGlzIHBhdGNoIG1vdmVzIHRoaXMgb2Zmc2V0LXRhYmxlIGJ1aWxkaW5nIHBo YXNlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcywNCmJlZm9yZSBmb3JraW5nIHRo ZSB3b3JrZXIgcHJvY2Vzc2VzLg0KDQpUaGUgdXBzaWRlIGlzIHRoYXQgd2Ug bm93IGhhdmUgb25seSBvbmUgZXh0cmEgc2NhbiBvZiB0aGUgZmlsZS4NCkFu ZCB0aGlzIHNjYW4gaGFwcGVucyB3aXRob3V0IG90aGVyIGNvbXBldGluZyBJ L08sIHNvIGl0IGNvbXBsZXRlcw0KZmFzdGVyLg0KDQpUaGUgZG93bnNpZGUg aXMgdGhhdCB0aGVyZSBpcyBhIGRlbGF5IGJlZm9yZSBzcGF3bmluZyB0aGUg Y2hpbGRyZW4gYW5kDQpzdGFydGluZyBhc3NpZ25pbmcgam9icyB0byB0aGVt Lg0KLS0tDQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyB8 IDkxICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLQ0KIDEgZmlsZSBj aGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQ0KDQpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20u YyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMNCmluZGV4 IDI3Njk1ZTI0ZGRlLi5iNjVjZjU2ZDU2NCAxMDA2NDQNCi0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMNCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMNCkBAIC04MTUsNjQgKzgxNSwx NDMgQEAgX1Jlb3BlbkFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpDQogCUFI LT5GSCA9IGZvcGVuKEFILT5mU3BlYywgUEdfQklOQVJZX1IpOw0KIAlpZiAo IUFILT5GSCkNCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBpbnB1dCBm aWxlIFwiJXNcIjogJW0iLCBBSC0+ZlNwZWMpOw0KIA0KIAlpZiAoZnNlZWtv KEFILT5GSCwgdHBvcywgU0VFS19TRVQpICE9IDApDQogCQlwZ19mYXRhbCgi Y291bGQgbm90IHNldCBzZWVrIHBvc2l0aW9uIGluIGFyY2hpdmUgZmlsZTog JW0iKTsNCiB9DQogDQorLyoNCisgKiBSZWFkIHRocm91Z2ggKHNraXApIG9u ZSBmdWxsIGRhdGEgZW50cnkgZnJvbSB0aGUgYXJjaGl2ZS4NCisgKiBSZXR1 cm4gdGhlIHNpemUsIGFuZCBzYXZlIHRoZSBkdW1wSWQgb2YgdGhlIHNjYW5u ZWQgZW50cnkuDQorICovDQorc3RhdGljIHNpemVfdA0KK19SZWFkT25lRnVs bEVudHJ5KEFyY2hpdmVIYW5kbGUgKkFILCBwZ29mZl90IGN1clBvcywgRHVt cElkICpzY2FubmVkX2lkKQ0KK3sNCisJaW50CQkJYmxrVHlwZTsNCisNCisJ X3JlYWRCbG9ja0hlYWRlcihBSCwgJmJsa1R5cGUsIHNjYW5uZWRfaWQpOw0K Kw0KKwlpZiAoYmxrVHlwZSA9PSBFT0YpDQorCQlyZXR1cm4gMDsNCisNCisJ c3dpdGNoIChibGtUeXBlKQ0KKwl7DQorCQljYXNlIEJMS19EQVRBOg0KKwkJ CV9za2lwRGF0YShBSCk7DQorCQkJYnJlYWs7DQorDQorCQljYXNlIEJMS19C TE9CUzoNCisJCQlfc2tpcExPcyhBSCk7DQorCQkJYnJlYWs7DQorDQorCQlk ZWZhdWx0OgkJCQkvKiBBbHdheXMgaGF2ZSBhIGRlZmF1bHQgKi8NCisJCQlw Z19mYXRhbCgidW5yZWNvZ25pemVkIGRhdGEgYmxvY2sgdHlwZSAoJWQpIHdo aWxlIHNlYXJjaGluZyBhcmNoaXZlIiwNCisJCQkJCSBibGtUeXBlKTsNCisJ CQlicmVhazsNCisJfQ0KKw0KKwlyZXR1cm4gZnRlbGxvKEFILT5GSCkgLSBj dXJQb3M7DQorfQ0KKw0KIC8qDQogICogUHJlcGFyZSBmb3IgcGFyYWxsZWwg cmVzdG9yZS4NCiAgKg0KICAqIFRoZSBtYWluIHRoaW5nIHRoYXQgbmVlZHMg dG8gaGFwcGVuIGhlcmUgaXMgdG8gZmlsbCBpbiBUQUJMRSBEQVRBIGFuZCBC TE9CUw0KICAqIFRPQyBlbnRyaWVzJyBkYXRhTGVuZ3RoIGZpZWxkcyB3aXRo IGFwcHJvcHJpYXRlIHZhbHVlcyB0byBndWlkZSB0aGUNCiAgKiBvcmRlcmlu ZyBvZiByZXN0b3JlIGpvYnMuICBUaGUgc291cmNlIG9mIHNhaWQgZGF0YSBp cyBmb3JtYXQtZGVwZW5kZW50LA0KICAqIGFzIGlzIHRoZSBleGFjdCBtZWFu aW5nIG9mIHRoZSB2YWx1ZXMuDQogICoNCiAgKiBBIGZvcm1hdCBtb2R1bGUg bWlnaHQgYWxzbyBjaG9vc2UgdG8gZG8gb3RoZXIgc2V0dXAgaGVyZS4NCiAg Ki8NCiBzdGF0aWMgdm9pZA0KIF9QcmVwUGFyYWxsZWxSZXN0b3JlKEFyY2hp dmVIYW5kbGUgKkFIKQ0KIHsNCiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENv bnRleHQgKikgQUgtPmZvcm1hdERhdGE7DQorCVRvY0VudHJ5ICAgKnRlOw0K IAlUb2NFbnRyeSAgICpwcmV2X3RlID0gTlVMTDsNCiAJbGNsVG9jRW50cnkg KnByZXZfdGN0eCA9IE5VTEw7DQotCVRvY0VudHJ5ICAgKnRlOw0KKwljb25z dCBpbnQJaGFzU2VlayA9IGN0eC0+aGFzU2VlazsNCisJcGdvZmZfdAkJY3Vy UG9zID0gY3R4LT5sYXN0RmlsZVBvczsNCisJYm9vbAkJZmlyc3RfZGF0YV9l bnRyeSA9IHRydWU7DQorDQorCWlmIChoYXNTZWVrICYmICgNCisJCQkJCWZz ZWVrbyhBSC0+RkgsIGN1clBvcywgU0VFS19TRVQpICE9IDApKQ0KKwkJcGdf ZmF0YWwoImVycm9yIGR1cmluZyBmaWxlIHNlZWs6ICVtIik7DQogDQogCS8q DQogCSAqIEtub3dpbmcgdGhhdCB0aGUgZGF0YSBpdGVtcyB3ZXJlIGR1bXBl ZCBvdXQgaW4gVE9DIG9yZGVyLCB3ZSBjYW4NCiAJICogcmVjb25zdHJ1Y3Qg dGhlIGxlbmd0aCBvZiBlYWNoIGl0ZW0gYXMgdGhlIGRlbHRhIHRvIHRoZSBz dGFydCBvZmZzZXQgb2YNCiAJICogdGhlIG5leHQgZGF0YSBpdGVtLg0KIAkg Ki8NCiAJZm9yICh0ZSA9IEFILT50b2MtPm5leHQ7IHRlICE9IEFILT50b2M7 IHRlID0gdGUtPm5leHQpDQogCXsNCiAJCWxjbFRvY0VudHJ5ICp0Y3R4ID0g KGxjbFRvY0VudHJ5ICopIHRlLT5mb3JtYXREYXRhOw0KIA0KKwkJaWYgKHRj dHgtPmRhdGFTdGF0ZSA9PSBLX09GRlNFVF9QT1NfU0VUKQ0KKwkJew0KKwkJ CWlmIChmaXJzdF9kYXRhX2VudHJ5ICYmIHRjdHgtPmRhdGFQb3MgIT0gY3Vy UG9zKQ0KKwkJCQlwZ19mYXRhbCgiZGF0YSBmb3IgZmlyc3QgYXJjaGl2ZSBl bnRyeSAlZCBpcyByZWNvcmRlZCB0byINCisJCQkJCQkgIiBzdGFydCBhdCAl bGQgYnV0IGl0IHJlYWxseSBzdGFydHMgYXQgJWxkIiwNCisJCQkJCQkgdGUt PmR1bXBJZCwgdGN0eC0+ZGF0YVBvcywgY3VyUG9zKTsNCisJCX0NCisNCisJ CS8qDQorCQkgKiBJZiB0aGUgYXJjaGl2ZSdzIFRPQyBpcyBtaXNzaW5nIHRo ZSBwb3NpdGlvbnMgb2YgZWFjaCBlbnRyeSwgdGhlbg0KKwkJICogbW9zdCBs aWtlbHkgdGhlIGFyY2hpdmUgd2FzIHdyaXR0ZW4gdG8gYSBwaXBlLiBJZiB3 ZSBhcmUgbm90DQorCQkgKiByZWFkaW5nIGZyb20gYSBwaXBlIG5vdywgd2Ug Y2FuIGRvIG9uZSBleHRyYSBzY2FuIHRvIGZpbmQgdGhlDQorCQkgKiBtaXNz aW5nIHBvc2l0aW9ucy4gVGhleSBhcmUgbmVlZGVkIGluIHBhcmFsbGVsIHJl c3RvcmUgaW4gb3JkZXIgdG8NCisJCSAqIGFzc2lnbiBUT0MgZW50cmllcyBh cyBqb2JzIHRvIHRoZSB3b3JrZXJzLg0KKwkJICovDQorCQllbHNlIGlmICh0 Y3R4LT5kYXRhU3RhdGUgPT0gS19PRkZTRVRfUE9TX05PVF9TRVQgJiYgaGFz U2VlaykNCisJCXsNCisJCQlEdW1wSWQJCWR1bXBfaWQ7DQorCQkJc2l6ZV90 CQllbnRyeV9zaXplOw0KKw0KKwkJCWlmIChmaXJzdF9kYXRhX2VudHJ5KQ0K KwkJCXsNCisJCQkJcGdfbG9nX2luZm8oImFyY2hpdmUgZG9lcyBub3QgY29u dGFpbiBvZmZzZXRzOyINCisJCQkJCQkJIiBkb2luZyBvbmUgZnVsbCBzY2Fu IHRvIGNhbGN1bGF0ZSB0aGVtLi4uIik7DQorCQkJfQ0KKwkJCS8qIEZpbGwg aW4gdGhlIG1pc3NpbmcgaW5mbyAqLw0KKwkJCXRjdHgtPmRhdGFQb3MgPSBj dXJQb3M7DQorCQkJdGN0eC0+ZGF0YVN0YXRlID0gS19PRkZTRVRfUE9TX1NF VDsNCisJCQkvKiBBZHZhbmNlICovDQorCQkJZW50cnlfc2l6ZSA9IF9SZWFk T25lRnVsbEVudHJ5KEFILCBjdXJQb3MsICZkdW1wX2lkKTsNCisJCQlpZiAo ZHVtcF9pZCAhPSB0ZS0+ZHVtcElkKQ0KKwkJCQlwZ19mYXRhbCgiZm91bmQg dW5leHBlY3RlZCBkdW1wIElEICVkIC0tIGV4cGVjdGVkICVkIiwNCisJCQkJ CQkgZHVtcF9pZCwgdGUtPmR1bXBJZCk7DQorCQkJY3VyUG9zICs9IGVudHJ5 X3NpemU7DQorCQl9DQorDQogCQkvKg0KLQkJICogSWdub3JlIGVudHJpZXMg d2l0aG91dCBhIGtub3duIGRhdGEgb2Zmc2V0OyBpZiB3ZSB3ZXJlIHVuYWJs ZSB0bw0KLQkJICogc2VlayB0byByZXdyaXRlIHRoZSBUT0Mgd2hlbiBjcmVh dGluZyB0aGUgYXJjaGl2ZSwgdGhpcydsbCBiZSBhbGwNCi0JCSAqIG9mIHRo ZW0sIGFuZCB3ZSdsbCBlbmQgdXAgd2l0aCBubyBzaXplIGVzdGltYXRlcy4N CisJCSAqIFdoZW4gd2UgY2FuJ3Qgc2VlaywgaWdub3JlIGRhdGEgZW50cmll cyB3aXRob3V0IGEga25vd24gZGF0YQ0KKwkJICogb2Zmc2V0LiBUaGlzIHNo b3VsZG4ndCBoYXBwZW4gaW4gcGFyYWxsZWwgcmVzdG9yZSB0aG91Z2gsIHRo ZQ0KKwkJICogYXJjaGl2ZSBzaG91bGQgYWx3YXlzIGJlIHNlZWthYmxlLiBB bHNvIHNraXAgS19PRkZTRVRfTk9fREFUQQ0KKwkJICogZW50cmllcyBzaW5j ZSB0aGV5IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgZGF0YSBzZWN0aW9uIG9m IHRoZQ0KKwkJICogYXJjaGl2ZS4NCiAJCSAqLw0KLQkJaWYgKHRjdHgtPmRh dGFTdGF0ZSAhPSBLX09GRlNFVF9QT1NfU0VUKQ0KKwkJZWxzZQ0KIAkJCWNv bnRpbnVlOw0KIA0KIAkJLyogQ29tcHV0ZSBwcmV2aW91cyBkYXRhIGl0ZW0n cyBsZW5ndGggKi8NCiAJCWlmIChwcmV2X3RlKQ0KIAkJew0KIAkJCWlmICh0 Y3R4LT5kYXRhUG9zID4gcHJldl90Y3R4LT5kYXRhUG9zKQ0KIAkJCQlwcmV2 X3RlLT5kYXRhTGVuZ3RoID0gdGN0eC0+ZGF0YVBvcyAtIHByZXZfdGN0eC0+ ZGF0YVBvczsNCiAJCX0NCiANCiAJCXByZXZfdGUgPSB0ZTsNCiAJCXByZXZf dGN0eCA9IHRjdHg7DQorCQlmaXJzdF9kYXRhX2VudHJ5ID0gZmFsc2U7DQog CX0NCiANCiAJLyogSWYgT0sgdG8gc2Vlaywgd2UgY2FuIGRldGVybWluZSB0 aGUgbGVuZ3RoIG9mIHRoZSBsYXN0IGl0ZW0gKi8NCi0JaWYgKHByZXZfdGUg JiYgY3R4LT5oYXNTZWVrKQ0KKwlpZiAocHJldl90ZSAmJiBoYXNTZWVrKQ0K IAl7DQogCQlwZ29mZl90CQllbmRwb3M7DQogDQogCQlpZiAoZnNlZWtvKEFI LT5GSCwgMCwgU0VFS19FTkQpICE9IDApDQogCQkJcGdfZmF0YWwoImVycm9y IGR1cmluZyBmaWxlIHNlZWs6ICVtIik7DQogCQllbmRwb3MgPSBmdGVsbG8o QUgtPkZIKTsNCiAJCWlmIChlbmRwb3MgPiBwcmV2X3RjdHgtPmRhdGFQb3Mp DQogCQkJcHJldl90ZS0+ZGF0YUxlbmd0aCA9IGVuZHBvcyAtIHByZXZfdGN0 eC0+ZGF0YVBvczsNCi0tIA0KMi40OS4wDQoNCg== ---1463770111-1026633542-1749512800=:87001--