Received: from localhost (unknown [200.46.208.211]) by mail.postgresql.org (Postfix) with ESMTP id 696EF632D22 for ; Wed, 25 Mar 2009 03:29:29 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.208.211]) (amavisd-maia, port 10024) with ESMTP id 56785-05 for ; Wed, 25 Mar 2009 03:29:22 -0300 (ADT) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.230]) by mail.postgresql.org (Postfix) with ESMTP id 152BC6327A8 for ; Wed, 25 Mar 2009 03:29:22 -0300 (ADT) Received: by rv-out-0506.google.com with SMTP id l9so2944589rvb.43 for ; Tue, 24 Mar 2009 23:29:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=g+Qt9P4N7VHO21KTvRuKzuub8A66gv+vLRyCRVGk5N8=; b=XfV6paMRT1qoyAlyQNSBKmVU7Rvk8z0TpfPG/smLBj+ccF/j3NiDe4wcYF99Od6IGU CXpnx5iVG3aN9BDkioU9OH61PY5mnv0j4DCjwcgHLX8hUFyTDUebCAoctS6QZw57HDlh Mpbn5951oN/oy1onbjBNr3XWwZOguafG/7G58= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=asL1XpJm8FXW1OcKXBYOWmU48KmdwHDIqm5v+nwRIcYo/YAa5STziGykGGpAKzYKhQ SUzkOOYRq4oEoGmgLu1IKkpxMlBOmT2LxLhGVxRMTYTpsmdGsQgADcO/XcB3VC3ntGHF JepEFdMdzrw6EDtvW3hmXuU+H45w4QDsI1AN4= MIME-Version: 1.0 Received: by 10.140.173.10 with SMTP id v10mr3385132rve.199.1237962561328; Tue, 24 Mar 2009 23:29:21 -0700 (PDT) Date: Wed, 25 Mar 2009 15:29:21 +0900 Message-ID: <3f0b79eb0903242329j12865d55s348f5c873a956e71@mail.gmail.com> Subject: New trigger option of pg_standby From: Fujii Masao To: pgsql-hackers Content-Type: multipart/mixed; boundary=000e0cd172a4b698610465eb9e1f X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200903/970 X-Sequence-Number: 135648 --000e0cd172a4b698610465eb9e1f Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hi, Current pg_standby is dangerous because the presence of the trigger file causes recovery to end whether or not the next WAL file is available. So, some *available* transactions may be lost at failover. Such danger will become high if the standby server has not caught up with the primary. Attached patch fixes the above problem by adding a new trigger option to pg_standby; the presence of this new trigger file causes recovery to end after replaying all the available WAL files. Specifically, pg_standby acts like 'cp' or 'ln' command while this new trigger file exists. I've not changed any existing features, so backward-compatibility is maintained. Thought? -- Fujii Masao NIPPON TELEGRAPH AND TELEPHONE CORPORATION NTT Open Source Software Center --000e0cd172a4b698610465eb9e1f Content-Type: application/octet-stream; name="pgstandby_new_trigger_0325.patch" Content-Disposition: attachment; filename="pgstandby_new_trigger_0325.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fspmxowb0 PyBHTlVtYWtlZmlsZQo/IGNvbmZpZy5sb2cKPyBjb25maWcuc3RhdHVzCj8gY29udHJpYi9wZ19z dGFuZGJ5L3BnX3N0YW5kYnkKPyBjb250cmliL3BnYmVuY2gvcGdiZW5jaAo/IHNyYy9NYWtlZmls ZS5nbG9iYWwKPyBzcmMvYmFja2VuZC9wb3N0Z3Jlcwo/IHNyYy9iYWNrZW5kL2NhdGFsb2cvcG9z dGdyZXMuYmtpCj8gc3JjL2JhY2tlbmQvY2F0YWxvZy9wb3N0Z3Jlcy5kZXNjcmlwdGlvbgo/IHNy Yy9iYWNrZW5kL2NhdGFsb2cvcG9zdGdyZXMuc2hkZXNjcmlwdGlvbgo/IHNyYy9iYWNrZW5kL3Nu b3diYWxsL3Nub3diYWxsX2NyZWF0ZS5zcWwKPyBzcmMvYmFja2VuZC91dGlscy9wcm9iZXMuaAo/ IHNyYy9iYWNrZW5kL3V0aWxzL21iL2NvbnZlcnNpb25fcHJvY3MvY29udmVyc2lvbl9jcmVhdGUu c3FsCj8gc3JjL2Jpbi9pbml0ZGIvaW5pdGRiCj8gc3JjL2Jpbi9wZ19jb25maWcvcGdfY29uZmln Cj8gc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YQo/IHNyYy9iaW4vcGdfY3Rs L3BnX2N0bAo/IHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wCj8gc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXBhbGwKPyBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZQo/IHNyYy9iaW4vcGdfcmVzZXR4bG9n L3BnX3Jlc2V0eGxvZwo/IHNyYy9iaW4vcHNxbC9wc3FsCj8gc3JjL2Jpbi9zY3JpcHRzL2NsdXN0 ZXJkYgo/IHNyYy9iaW4vc2NyaXB0cy9jcmVhdGVkYgo/IHNyYy9iaW4vc2NyaXB0cy9jcmVhdGVs YW5nCj8gc3JjL2Jpbi9zY3JpcHRzL2NyZWF0ZXVzZXIKPyBzcmMvYmluL3NjcmlwdHMvZHJvcGRi Cj8gc3JjL2Jpbi9zY3JpcHRzL2Ryb3BsYW5nCj8gc3JjL2Jpbi9zY3JpcHRzL2Ryb3B1c2VyCj8g c3JjL2Jpbi9zY3JpcHRzL3JlaW5kZXhkYgo/IHNyYy9iaW4vc2NyaXB0cy92YWN1dW1kYgo/IHNy Yy9pbmNsdWRlL3BnX2NvbmZpZy5oCj8gc3JjL2luY2x1ZGUvc3RhbXAtaAo/IHNyYy9pbnRlcmZh Y2VzL2VjcGcvY29tcGF0bGliL2V4cG9ydHMubGlzdAo/IHNyYy9pbnRlcmZhY2VzL2VjcGcvY29t cGF0bGliL2xpYmVjcGdfY29tcGF0LnNvLjMuMQo/IHNyYy9pbnRlcmZhY2VzL2VjcGcvZWNwZ2xp Yi9leHBvcnRzLmxpc3QKPyBzcmMvaW50ZXJmYWNlcy9lY3BnL2VjcGdsaWIvbGliZWNwZy5zby42 LjEKPyBzcmMvaW50ZXJmYWNlcy9lY3BnL2luY2x1ZGUvZWNwZ19jb25maWcuaAo/IHNyYy9pbnRl cmZhY2VzL2VjcGcvaW5jbHVkZS9zdGFtcC1oCj8gc3JjL2ludGVyZmFjZXMvZWNwZy9wZ3R5cGVz bGliL2V4cG9ydHMubGlzdAo/IHNyYy9pbnRlcmZhY2VzL2VjcGcvcGd0eXBlc2xpYi9saWJwZ3R5 cGVzLnNvLjMuMQo/IHNyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnCj8gc3JjL2ludGVy ZmFjZXMvbGlicHEvZXhwb3J0cy5saXN0Cj8gc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEuc28u NS4yCj8gc3JjL3BvcnQvcGdfY29uZmlnX3BhdGhzLmgKPyBzcmMvdGVzdC9yZWdyZXNzL3BnX3Jl Z3Jlc3MKPyBzcmMvdGVzdC9yZWdyZXNzL3Rlc3R0YWJsZXNwYWNlCj8gc3JjL3RpbWV6b25lL3pp YwpJbmRleDogY29udHJpYi9wZ19zdGFuZGJ5L3BnX3N0YW5kYnkuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9jb250cmliL3BnX3N0YW5kYnkvcGdfc3RhbmRi eS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLWMgLXIxLjIwIHBnX3N0YW5kYnku YwoqKiogY29udHJpYi9wZ19zdGFuZGJ5L3BnX3N0YW5kYnkuYwkxOCBNYXIgMjAwOSAyMDozMDoz NSAtMDAwMAkxLjIwCi0tLSBjb250cmliL3BnX3N0YW5kYnkvcGdfc3RhbmRieS5jCTI1IE1hciAy MDA5IDA2OjI2OjQwIC0wMDAwCioqKioqKioqKioqKioqKgoqKiogNTIsNjUgKioqKgogIGludAkJ CWtlZXBmaWxlcyA9IDA7CQkvKiBudW1iZXIgb2YgV0FMIGZpbGVzIHRvIGtlZXAsIDAga2VlcCBh bGwgKi8KICBpbnQJCQltYXhyZXRyaWVzID0gMzsJCS8qIG51bWJlciBvZiByZXRyaWVzIG9uIHJl c3RvcmUgY29tbWFuZCAqLwogIGJvb2wJCWRlYnVnID0gZmFsc2U7CQkvKiBhcmUgd2UgZGVidWdn aW5nPyAqLwohIGJvb2wJCXRyaWdnZXJlZCA9IGZhbHNlOwkvKiBoYXZlIHdlIGJlZW4gdHJpZ2dl cmVkPyAqLwogIGJvb2wJCW5lZWRfY2xlYW51cCA9IGZhbHNlOwkJLyogZG8gd2UgbmVlZCB0byBy ZW1vdmUgZmlsZXMgZnJvbQogIAkJCQkJCQkJCQkgKiBhcmNoaXZlPyAqLwogIAogIHN0YXRpYyB2 b2xhdGlsZSBzaWdfYXRvbWljX3Qgc2lnbmFsZWQgPSBmYWxzZTsKICAKICBjaGFyCSAgICphcmNo aXZlTG9jYXRpb247CS8qIHdoZXJlIHRvIGZpbmQgdGhlIGFyY2hpdmU/ICovCi0gY2hhcgkgICAq dHJpZ2dlclBhdGg7CQkvKiB3aGVyZSB0byBmaW5kIHRoZSB0cmlnZ2VyIGZpbGU/ICovCiAgY2hh cgkgICAqeGxvZ0ZpbGVQYXRoOwkJLyogd2hlcmUgd2UgYXJlIGdvaW5nIHRvIHJlc3RvcmUgdG8g Ki8KICBjaGFyCSAgICpuZXh0V0FMRmlsZU5hbWU7CS8qIHRoZSBmaWxlIHdlIG5lZWQgdG8gZ2V0 IGZyb20gYXJjaGl2ZSAqLwogIGNoYXIJICAgKnJlc3RhcnRXQUxGaWxlTmFtZTsgLyogdGhlIGZp bGUgZnJvbSB3aGljaCB3ZSBjYW4gcmVzdGFydCByZXN0b3JlICovCi0tLSA1Miw2NCAtLS0tCiAg aW50CQkJa2VlcGZpbGVzID0gMDsJCS8qIG51bWJlciBvZiBXQUwgZmlsZXMgdG8ga2VlcCwgMCBr ZWVwIGFsbCAqLwogIGludAkJCW1heHJldHJpZXMgPSAzOwkJLyogbnVtYmVyIG9mIHJldHJpZXMg b24gcmVzdG9yZSBjb21tYW5kICovCiAgYm9vbAkJZGVidWcgPSBmYWxzZTsJCS8qIGFyZSB3ZSBk ZWJ1Z2dpbmc/ICovCiEgYm9vbAkJdHJpZ2dlcmVkID0gZmFsc2U7CS8qIGhhdmUgd2UgYmVlbiB0 cmlnZ2VyZWQgKGNhbmNlbCk/ICovCiAgYm9vbAkJbmVlZF9jbGVhbnVwID0gZmFsc2U7CQkvKiBk byB3ZSBuZWVkIHRvIHJlbW92ZSBmaWxlcyBmcm9tCiAgCQkJCQkJCQkJCSAqIGFyY2hpdmU/ICov CiAgCiAgc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBzaWduYWxlZCA9IGZhbHNlOwogIAog IGNoYXIJICAgKmFyY2hpdmVMb2NhdGlvbjsJLyogd2hlcmUgdG8gZmluZCB0aGUgYXJjaGl2ZT8g Ki8KICBjaGFyCSAgICp4bG9nRmlsZVBhdGg7CQkvKiB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gcmVz dG9yZSB0byAqLwogIGNoYXIJICAgKm5leHRXQUxGaWxlTmFtZTsJLyogdGhlIGZpbGUgd2UgbmVl ZCB0byBnZXQgZnJvbSBhcmNoaXZlICovCiAgY2hhcgkgICAqcmVzdGFydFdBTEZpbGVOYW1lOyAv KiB0aGUgZmlsZSBmcm9tIHdoaWNoIHdlIGNhbiByZXN0YXJ0IHJlc3RvcmUgKi8KKioqKioqKioq KioqKioqCioqKiA2OSw3NCAqKioqCi0tLSA2OCw5MiAtLS0tCiAgY2hhcgkJZXhjbHVzaXZlQ2xl YW51cEZpbGVOYW1lW01BWFBHUEFUSF07CQkvKiB0aGUgZmlsZSB3ZSBuZWVkIHRvCiAgCQkJCQkJ CQkJCQkJCQkgKiBnZXQgZnJvbSBhcmNoaXZlICovCiAgCisgLyoKKyAgKiBXaGVyZSB0byBmaW5k IHRoZSB0cmlnZ2VyIGZpbGU/CisgICoKKyAgKiBUd28gdHlwZXMgKGZpbmlzaCBhbmQgY2FuY2Vs KSBvZiB0cmlnZ2VyIGZpbGVzIGFyZSBzdXBwb3J0ZWQuCisgICoKKyAgKiBXaGVuICJmaW5pc2gi IHRyaWdnZXIgZmlsZSBleGlzdHMsIHBnX3N0YW5kYnkgYWN0cyBhcyBjcCBvciBsbiBjb21tYW5k IGl0c2VsZiwKKyAgKiBhbmQgcmVjb3Zlcnkgd2FpdHMgdG8gZmluaXNoIHVudGlsIGFsbCB0aGUg YXZhaWxhYmxlIFdBTCBmaWxlcyBhcmUgcmVkb25lLiBJdCdzCisgICogZ3VhcmFudGVlZCB0aGF0 IG5vICJhdmFpbGFibGUiIGNvbW1pdCB0cmFuc2FjdGlvbnMgYXJlIGxvc3QuIEJ1dCBpdCBtaWdo dCB0YWtlCisgICogc29tZSB0aW1lcyBiZWZvcmUgZmluaXNoaW5nIHJlY292ZXJ5LgorICAqCisg ICogT24gdGhlIG90aGVyIGhhbmQsIHRoZSBleGlzdGVuY2Ugb2YgImNhbmNlbCIgdHJpZ2dlciBm aWxlIGNhdXNlcyByZWNvdmVyeSB0bworICAqIGVuZCBpbW1lZGlhdGVseSBldmVuIGlmIHRoZSBh dmFpbGFibGUgV0FMIGZpbGVzIHJlbWFpbi4gU28sIHNvbWUgdHJhbnNhY3Rpb25zCisgICogbWln aHQgYmUgbG9zdC4KKyAgKgorICAqIFdoZW4gYm90aCBvZiB0aGVtIGV4aXN0LCB3ZSBwcmVmZXIg ImNhbmNlbCIgdHJpZ2dlciBmaWxlIHRvICJmaW5pc2giIG9uZS4KKyAgKi8KKyBjaGFyCSpmaW5p c2hUcmlnZ2VyUGF0aDsKKyBjaGFyCSpjYW5jZWxUcmlnZ2VyUGF0aDsKKyAKICAjZGVmaW5lIFJF U1RPUkVfQ09NTUFORF9DT1BZIDAKICAjZGVmaW5lIFJFU1RPUkVfQ09NTUFORF9MSU5LIDEKICBp bnQJCQlyZXN0b3JlQ29tbWFuZFR5cGU7CioqKioqKioqKioqKioqKgoqKiogMzU1LDM2NCAqKioq CiAgICoJICBJcyB0aGVyZSBhIHRyaWdnZXIgZmlsZT8KICAgKi8KICBzdGF0aWMgYm9vbAohIENo ZWNrRm9yRXh0ZXJuYWxUcmlnZ2VyKHZvaWQpCiAgewogIAlpbnQJCQlyYzsKICAKICAJLyoKICAJ ICogTG9vayBmb3IgYSB0cmlnZ2VyIGZpbGUsIGlmIHRoYXQgb3B0aW9uIGhhcyBiZWVuIHNlbGVj dGVkCiAgCSAqCi0tLSAzNzMsMzg5IC0tLS0KICAgKgkgIElzIHRoZXJlIGEgdHJpZ2dlciBmaWxl PwogICAqLwogIHN0YXRpYyBib29sCiEgQ2hlY2tGb3JFeHRlcm5hbFRyaWdnZXIoY2hhciAqdHJp Z2dlclBhdGgsIGJvb2wgZGVsZXRlX3RyaWdnZXIpCiAgewogIAlpbnQJCQlyYzsKICAKKyAJaWYg KGRlYnVnKQorICAJeworICAJCWlmICh0cmlnZ2VyUGF0aCkKKyAgCQkJZnByaW50ZihzdGRlcnIs ICIgQ2hlY2tpbmcgZm9yIHRyaWdnZXIgZmlsZS4uLjogJXMiLCB0cmlnZ2VyUGF0aCk7CisgIAkJ ZmZsdXNoKHN0ZGVycik7CisgIAl9CisgCiAgCS8qCiAgCSAqIExvb2sgZm9yIGEgdHJpZ2dlciBm aWxlLCBpZiB0aGF0IG9wdGlvbiBoYXMgYmVlbiBzZWxlY3RlZAogIAkgKgoqKioqKioqKioqKioq KioKKioqIDM2NywzODggKioqKgogIAkgKi8KICAJaWYgKHRyaWdnZXJQYXRoICYmIHN0YXQodHJp Z2dlclBhdGgsICZzdGF0X2J1ZikgPT0gMCkKICAJewohIAkJZnByaW50ZihzdGRlcnIsICJ0cmln Z2VyIGZpbGUgZm91bmRcbiIpOwogIAkJZmZsdXNoKHN0ZGVycik7CiAgCiEgCQkvKgohIAkJICog SWYgdHJpZ2dlciBmaWxlIGZvdW5kLCB3ZSAqbXVzdCogZGVsZXRlIGl0LiBIZXJlJ3Mgd2h5OiBX aGVuCiEgCQkgKiByZWNvdmVyeSBjb21wbGV0ZXMsIHdlIHdpbGwgYmUgYXNrZWQgYWdhaW4gZm9y IHRoZSBzYW1lIGZpbGUgZnJvbQohIAkJICogdGhlIGFyY2hpdmUgdXNpbmcgcGdfc3RhbmRieSBz byBtdXN0IHJlbW92ZSB0cmlnZ2VyIGZpbGUgc28gd2UgY2FuCiEgCQkgKiByZWxvYWQgZmlsZSBh Z2FpbiBhbmQgY29tZSB1cCBjb3JyZWN0bHkuCiEgCQkgKi8KISAJCXJjID0gdW5saW5rKHRyaWdn ZXJQYXRoKTsKISAJCWlmIChyYyAhPSAwKQogIAkJewohIAkJCWZwcmludGYoc3RkZXJyLCAiXG4g RVJST1I6IGNvdWxkIG5vdCByZW1vdmUgXCIlc1wiOiAlcyIsIHRyaWdnZXJQYXRoLCBzdHJlcnJv cihlcnJubykpOwohIAkJCWZmbHVzaChzdGRlcnIpOwohIAkJCWV4aXQocmMpOwogIAkJfQogIAkJ cmV0dXJuIHRydWU7CiAgCX0KICAKLS0tIDM5Miw0MTEgLS0tLQogIAkgKi8KICAJaWYgKHRyaWdn ZXJQYXRoICYmIHN0YXQodHJpZ2dlclBhdGgsICZzdGF0X2J1ZikgPT0gMCkKICAJewohIAkJZnBy aW50ZihzdGRlcnIsICJ0cmlnZ2VyIGZpbGUgZm91bmQ6ICVzXG4iLCB0cmlnZ2VyUGF0aCk7CiAg CQlmZmx1c2goc3RkZXJyKTsKICAKISAJCWlmIChkZWxldGVfdHJpZ2dlcikKICAJCXsKISAJCQly YyA9IHVubGluayh0cmlnZ2VyUGF0aCk7CiEgCQkJaWYgKHJjICE9IDApCiEgCQkJewohIAkJCQlm cHJpbnRmKHN0ZGVyciwgIlxuIEVSUk9SOiBjb3VsZCBub3QgcmVtb3ZlIFwiJXNcIjogJXMiLCB0 cmlnZ2VyUGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKISAJCQkJZmZsdXNoKHN0ZGVycik7CiEgCQkJ CWV4aXQocmMpOwohIAkJCX0KICAJCX0KKyAJCQogIAkJcmV0dXJuIHRydWU7CiAgCX0KICAKKioq KioqKioqKioqKioqCioqKiA0NTAsNDU2ICoqKioKICAJCSAgICIgICAgICAgICAgICAgICAgICAg ICAoZGVmYXVsdD0zKVxuIik7CiAgCXByaW50ZigiICAtcyBTTEVFUFRJTUUgICAgICAgc2Vjb25k cyB0byB3YWl0IGJldHdlZW4gZmlsZSBjaGVja3MgKG1pbj0xLCBtYXg9NjAsXG4iCiAgCQkgICAi ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD01KVxuIik7CiEgCXByaW50ZigiICAtdCBUUklH R0VSRklMRSAgICAgZGVmaW5lcyBhIHRyaWdnZXIgZmlsZSB0byBpbml0aWF0ZSBmYWlsb3ZlciAo bm8gZGVmYXVsdClcbiIpOwogIAlwcmludGYoIiAgLXcgTUFYV0FJVFRJTUUgICAgIG1heCBzZWNv bmRzIHRvIHdhaXQgZm9yIGEgZmlsZSAoMD1ubyBsaW1pdCkgKGRlZmF1bHQ9MClcbiIpOwogIAlw cmludGYoIiAgLS1oZWxwICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwLCB0aGVuIGV4aXRcbiIp OwogIAlwcmludGYoIiAgLS12ZXJzaW9uICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0 aW9uLCB0aGVuIGV4aXRcbiIpOwotLS0gNDczLDQ4MCAtLS0tCiAgCQkgICAiICAgICAgICAgICAg ICAgICAgICAgKGRlZmF1bHQ9MylcbiIpOwogIAlwcmludGYoIiAgLXMgU0xFRVBUSU1FICAgICAg IHNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIGZpbGUgY2hlY2tzIChtaW49MSwgbWF4PTYwLFxuIgog IAkJICAgIiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9NSlcbiIpOwohIAlwcmludGYoIiAg LXQgQ0FOQ0VMVFJJR0dFUkZJTEUJZGVmaW5lcyBhIHRyaWdnZXIgZmlsZSB0byBjYW5jZWwgcmVj b3ZlcnkgKG5vIGRlZmF1bHQpXG4iKTsKISAJcHJpbnRmKCIgIC1UIEZJTklTSFRSSUdHRVJGSUxF CWRlZmluZXMgYSB0cmlnZ2VyIGZpbGUgdG8gZmluaXNoIHJlY292ZXJ5IChubyBkZWZhdWx0KVxu Iik7CiAgCXByaW50ZigiICAtdyBNQVhXQUlUVElNRSAgICAgbWF4IHNlY29uZHMgdG8gd2FpdCBm b3IgYSBmaWxlICgwPW5vIGxpbWl0KSAoZGVmYXVsdD0wKVxuIik7CiAgCXByaW50ZigiICAtLWhl bHAgICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAsIHRoZW4gZXhpdFxuIik7CiAgCXByaW50Zigi ICAtLXZlcnNpb24gICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhp dFxuIik7CioqKioqKioqKioqKioqKgoqKiogNTEzLDUxOSAqKioqCiAgCSh2b2lkKSBzaWduYWwo U0lHUVVJVCwgc2lncXVpdF9oYW5kbGVyKTsKICAjZW5kaWYKICAKISAJd2hpbGUgKChjID0gZ2V0 b3B0KGFyZ2MsIGFyZ3YsICJjZGs6bHI6czp0Onc6IikpICE9IC0xKQogIAl7CiAgCQlzd2l0Y2gg KGMpCiAgCQl7Ci0tLSA1MzcsNTQzIC0tLS0KICAJKHZvaWQpIHNpZ25hbChTSUdRVUlULCBzaWdx dWl0X2hhbmRsZXIpOwogICNlbmRpZgogIAohIAl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJn diwgImNkazpscjpzOnQ6VDp3OiIpKSAhPSAtMSkKICAJewogIAkJc3dpdGNoIChjKQogIAkJewoq KioqKioqKioqKioqKioKKioqIDU1MCw1NjAgKioqKgogIAkJCQkJZXhpdCgyKTsKICAJCQkJfQog IAkJCQlicmVhazsKISAJCQljYXNlICd0JzoJCQkvKiBUcmlnZ2VyIGZpbGUgKi8KISAJCQkJdHJp Z2dlclBhdGggPSBvcHRhcmc7CiEgCQkJCWlmIChDaGVja0ZvckV4dGVybmFsVHJpZ2dlcigpKQog IAkJCQkJZXhpdCgxKTsJLyogTm9ybWFsIGV4aXQsIHdpdGggbm9uLXplcm8gKi8KICAJCQkJYnJl YWs7CiAgCQkJY2FzZSAndyc6CQkJLyogTWF4IHdhaXQgdGltZSAqLwogIAkJCQltYXh3YWl0dGlt ZSA9IGF0b2kob3B0YXJnKTsKICAJCQkJaWYgKG1heHdhaXR0aW1lIDwgMCkKLS0tIDU3NCw1ODcg LS0tLQogIAkJCQkJZXhpdCgyKTsKICAJCQkJfQogIAkJCQlicmVhazsKISAJCQljYXNlICd0JzoJ CQkvKiBDYW5jZWwgdHJpZ2dlciBmaWxlICovCiEgCQkJCWNhbmNlbFRyaWdnZXJQYXRoID0gb3B0 YXJnOwohIAkJCQlpZiAoQ2hlY2tGb3JFeHRlcm5hbFRyaWdnZXIoY2FuY2VsVHJpZ2dlclBhdGgs IHRydWUpKQogIAkJCQkJZXhpdCgxKTsJLyogTm9ybWFsIGV4aXQsIHdpdGggbm9uLXplcm8gKi8K ICAJCQkJYnJlYWs7CisgCQkJY2FzZSAnVCc6CQkJLyogRmluaXNoIHRyaWdnZXIgZmlsZSAqLwor IAkJCQlmaW5pc2hUcmlnZ2VyUGF0aCA9IG9wdGFyZzsKKyAJCQkJYnJlYWs7CiAgCQkJY2FzZSAn dyc6CQkJLyogTWF4IHdhaXQgdGltZSAqLwogIAkJCQltYXh3YWl0dGltZSA9IGF0b2kob3B0YXJn KTsKICAJCQkJaWYgKG1heHdhaXR0aW1lIDwgMCkKKioqKioqKioqKioqKioqCioqKiA2MzMsNjM5 ICoqKioKICAKICAJaWYgKGRlYnVnKQogIAl7CiEgCQlmcHJpbnRmKHN0ZGVyciwgIlxuVHJpZ2dl ciBmaWxlIAkJOiAlcyIsIHRyaWdnZXJQYXRoID8gdHJpZ2dlclBhdGggOiAiPG5vdCBzZXQ+Iik7 CiAgCQlmcHJpbnRmKHN0ZGVyciwgIlxuV2FpdGluZyBmb3IgV0FMIGZpbGUJOiAlcyIsIG5leHRX QUxGaWxlTmFtZSk7CiAgCQlmcHJpbnRmKHN0ZGVyciwgIlxuV0FMIGZpbGUgcGF0aAkJOiAlcyIs IFdBTEZpbGVQYXRoKTsKICAJCWZwcmludGYoc3RkZXJyLCAiXG5SZXN0b3JpbmcgdG8uLi4JCTog JXMiLCB4bG9nRmlsZVBhdGgpOwotLS0gNjYwLDY2OSAtLS0tCiAgCiAgCWlmIChkZWJ1ZykKICAJ ewohIAkJZnByaW50ZihzdGRlcnIsICJcbkNhbmNlbCB0cmlnZ2VyIGZpbGUgCQk6ICVzIiwKISAJ CQkJY2FuY2VsVHJpZ2dlclBhdGggPyBjYW5jZWxUcmlnZ2VyUGF0aCA6ICI8bm90IHNldD4iKTsK ISAJCWZwcmludGYoc3RkZXJyLCAiXG5GaW5pc2ggdHJpZ2dlciBmaWxlIAkJOiAlcyIsCiEgCQkJ CWZpbmlzaFRyaWdnZXJQYXRoID8gZmluaXNoVHJpZ2dlclBhdGggOiAiPG5vdCBzZXQ+Iik7CiAg CQlmcHJpbnRmKHN0ZGVyciwgIlxuV2FpdGluZyBmb3IgV0FMIGZpbGUJOiAlcyIsIG5leHRXQUxG aWxlTmFtZSk7CiAgCQlmcHJpbnRmKHN0ZGVyciwgIlxuV0FMIGZpbGUgcGF0aAkJOiAlcyIsIFdB TEZpbGVQYXRoKTsKICAJCWZwcmludGYoc3RkZXJyLCAiXG5SZXN0b3JpbmcgdG8uLi4JCTogJXMi LCB4bG9nRmlsZVBhdGgpOwoqKioqKioqKioqKioqKioKKioqIDY3Myw3MjQgKioqKgogIAkJfQog IAl9CiAgCiEgCS8qCiEgCSAqIE1haW4gd2FpdCBsb29wCiEgCSAqLwohIAl3aGlsZSAoIUN1c3Rv bWl6YWJsZU5leHRXQUxGaWxlUmVhZHkoKSAmJiAhdHJpZ2dlcmVkKQohIAl7CiEgCQlpZiAoc2xl ZXB0aW1lIDw9IDYwKQohIAkJCXBnX3VzbGVlcChzbGVlcHRpbWUgKiAxMDAwMDAwTCk7CiEgCiEg CQlpZiAoc2lnbmFsZWQpCiAgCQl7CiEgCQkJdHJpZ2dlcmVkID0gdHJ1ZTsKISAJCQlpZiAoZGVi dWcpCiAgCQkJewohIAkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuc2lnbmFsZWQgdG8gZXhpdFxuIik7 CiEgCQkJCWZmbHVzaChzdGRlcnIpOwogIAkJCX0KISAJCX0KISAJCWVsc2UKISAJCXsKISAKISAJ CQlpZiAoZGVidWcpCiAgCQkJewohIAkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuV0FMIGZpbGUgbm90 IHByZXNlbnQgeWV0LiIpOwohIAkJCQlpZiAodHJpZ2dlclBhdGgpCiEgCQkJCQlmcHJpbnRmKHN0 ZGVyciwgIiBDaGVja2luZyBmb3IgdHJpZ2dlciBmaWxlLi4uIik7CiEgCQkJCWZmbHVzaChzdGRl cnIpOwogIAkJCX0KICAKISAJCQl3YWl0dGltZSArPSBzbGVlcHRpbWU7CiEgCiEgCQkJaWYgKCF0 cmlnZ2VyZWQgJiYgKENoZWNrRm9yRXh0ZXJuYWxUcmlnZ2VyKCkgfHwgKHdhaXR0aW1lID49IG1h eHdhaXR0aW1lICYmIG1heHdhaXR0aW1lID4gMCkpKQohIAkJCXsKISAJCQkJdHJpZ2dlcmVkID0g dHJ1ZTsKISAJCQkJaWYgKGRlYnVnICYmIHdhaXR0aW1lID49IG1heHdhaXR0aW1lICYmIG1heHdh aXR0aW1lID4gMCkKISAJCQkJCWZwcmludGYoc3RkZXJyLCAiXG5UaW1lZCBvdXQgYWZ0ZXIgJWQg c2Vjb25kc1xuIiwgd2FpdHRpbWUpOwohIAkJCX0KICAJCX0KICAJfQogIAogIAkvKgotIAkgKiBB Y3Rpb24gb24gZXhpdAotIAkgKi8KLSAJaWYgKHRyaWdnZXJlZCkKLSAJCWV4aXQoMSk7CQkJCS8q IE5vcm1hbCBleGl0LCB3aXRoIG5vbi16ZXJvICovCi0gCi0gCS8qCiAgCSAqIE9uY2Ugd2UgaGF2 ZSByZXN0b3JlZCB0aGlzIGZpbGUgc3VjY2Vzc2Z1bGx5IHdlIGNhbiByZW1vdmUgc29tZSBwcmlv cgogIAkgKiBXQUwgZmlsZXMuIElmIHRoaXMgcmVzdG9yZSBmYWlscyB3ZSBtdXNuJ3QgcmVtb3Zl IGFueSBmaWxlIGJlY2F1c2Ugc29tZQogIAkgKiBvZiB0aGVtIHdpbGwgYmUgcmVxdWVzdGVkIGFn YWluIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmYWlsZWQgcmVzdG9yZSwKLS0tIDcwMyw3NzEgLS0t LQogIAkJfQogIAl9CiAgCiEgICAJLyoKISAgCSAqIElmICJmaW5pc2giIHRyaWdnZXIgZmlsZSBl eGlzdHMsIHdlIHdvdWxkIHNraXAgdGhlIHdhaXQgbG9vcCBhbmQgdHJ5IHRvCiEgIAkgKiByZXN0 b3JlIHRoZSBsb2csIHdoaWNoIG1ha2VzIHBnX3N0YW5kYnkgYWN0IGFzIGNwIG9yIGxuIGNvbW1h bmQuCiEgIAkgKi8KISAgCWlmICghQ2hlY2tGb3JFeHRlcm5hbFRyaWdnZXIoZmluaXNoVHJpZ2dl clBhdGgsIGZhbHNlKSkKISAgIAl7CiEgCQkvKgohIAkJICogTWFpbiB3YWl0IGxvb3AKISAJCSAq LwohIAkJd2hpbGUgKCFDdXN0b21pemFibGVOZXh0V0FMRmlsZVJlYWR5KCkgJiYgIXRyaWdnZXJl ZCkKICAJCXsKISAJCQlpZiAoc2xlZXB0aW1lIDw9IDYwKQohIAkJCQlwZ191c2xlZXAoc2xlZXB0 aW1lICogMTAwMDAwMEwpOwohIAkJCQohIAkJCWlmIChzaWduYWxlZCkKICAJCQl7CiEgCQkJCXRy aWdnZXJlZCA9IHRydWU7CiEgCQkJCWlmIChkZWJ1ZykKISAJCQkJewohIAkJCQkJZnByaW50Zihz dGRlcnIsICJcbnNpZ25hbGVkIHRvIGV4aXRcbiIpOwohIAkJCQkJZmZsdXNoKHN0ZGVycik7CiEg CQkJCX0KICAJCQl9CiEgCQkJZWxzZQogIAkJCXsKISAJCQkJaWYgKGRlYnVnKQohIAkJCQl7CiEg CQkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuV0FMIGZpbGUgbm90IHByZXNlbnQgeWV0LiIpOwohIAkJ CQkJZmZsdXNoKHN0ZGVycik7CiEgCQkJCX0KISAJCQkJCiEgCQkJCXdhaXR0aW1lICs9IHNsZWVw dGltZTsKISAJCQkJCiEgCQkJCS8qCiEgCQkJCSAqIElmICJjYW5jZWwiIHRyaWdnZXIgZmlsZSBm b3VuZCwgd2UgKm11c3QqIGRlbGV0ZSBpdC4gSGVyZSdzIHdoeTogV2hlbgohIAkJCQkgKiByZWNv dmVyeSBmaW5pc2hlcywgd2Ugd2lsbCBiZSBhc2tlZCBhZ2FpbiBmb3IgdGhlIHNhbWUgZmlsZSBm cm9tCiEgCQkJCSAqIHRoZSBhcmNoaXZlIHVzaW5nIHBnX3N0YW5kYnkgc28gbXVzdCByZW1vdmUg dHJpZ2dlciBmaWxlIHNvIHdlIGNhbgohIAkJCQkgKiByZWxvYWQgZmlsZSBhZ2FpbiBhbmQgY29t ZSB1cCBjb3JyZWN0bHkuCiEgCQkJCSAqLwohIAkJCQlpZiAoIXRyaWdnZXJlZCAmJiAoQ2hlY2tG b3JFeHRlcm5hbFRyaWdnZXIoY2FuY2VsVHJpZ2dlclBhdGgsIHRydWUpIHx8CiEgCQkJCQkJCQkg ICAod2FpdHRpbWUgPj0gbWF4d2FpdHRpbWUgJiYgbWF4d2FpdHRpbWUgPiAwKSkpCiEgCQkJCXsK ISAJCQkJCXRyaWdnZXJlZCA9IHRydWU7CiEgCQkJCQlpZiAoZGVidWcgJiYgd2FpdHRpbWUgPj0g bWF4d2FpdHRpbWUgJiYgbWF4d2FpdHRpbWUgPiAwKQohIAkJCQkJCWZwcmludGYoc3RkZXJyLCAi XG5UaW1lZCBvdXQgYWZ0ZXIgJWQgc2Vjb25kc1xuIiwgd2FpdHRpbWUpOwohIAkJCQl9CiAgCQkJ fQogIAohIAkJCS8qCiEgIAkJCSAqIEFjdGlvbiBvbiBleGl0CiEgIAkJCSAqLwohICAJCQlpZiAo dHJpZ2dlcmVkKQohICAJCQkJZXhpdCgxKTsJCQkJLyogTm9ybWFsIGV4aXQsIHdpdGggbm9uLXpl cm8gKi8KISAJCQkKISAgCQkJLyoKISAgCQkJICogSWYgImZpbmlzaCIgdHJpZ2dlciBmaWxlIGV4 aXN0cywgd2UgdHJ5IHRvIHJlc3RvcmUgdGhlIGxvZyBzb29uLgohICAJCQkgKi8KISAgCQkJaWYg KENoZWNrRm9yRXh0ZXJuYWxUcmlnZ2VyKGZpbmlzaFRyaWdnZXJQYXRoLCBmYWxzZSkpCiEgIAkJ CQlicmVhazsKICAJCX0KICAJfQogIAogIAkvKgogIAkgKiBPbmNlIHdlIGhhdmUgcmVzdG9yZWQg dGhpcyBmaWxlIHN1Y2Nlc3NmdWxseSB3ZSBjYW4gcmVtb3ZlIHNvbWUgcHJpb3IKICAJICogV0FM IGZpbGVzLiBJZiB0aGlzIHJlc3RvcmUgZmFpbHMgd2UgbXVzbid0IHJlbW92ZSBhbnkgZmlsZSBi ZWNhdXNlIHNvbWUKICAJICogb2YgdGhlbSB3aWxsIGJlIHJlcXVlc3RlZCBhZ2FpbiBpbW1lZGlh dGVseSBhZnRlciB0aGUgZmFpbGVkIHJlc3RvcmUsCkluZGV4OiBkb2Mvc3JjL3NnbWwvcGdzdGFu ZGJ5LnNnbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwvZG9j L3NyYy9zZ21sL3Bnc3RhbmRieS5zZ21sLHYKcmV0cmlldmluZyByZXZpc2lvbiAyLjcKZGlmZiAt YyAtcjIuNyBwZ3N0YW5kYnkuc2dtbAoqKiogZG9jL3NyYy9zZ21sL3Bnc3RhbmRieS5zZ21sCTI3 IEZlYiAyMDA5IDA5OjMwOjIxIC0wMDAwCTIuNwotLS0gZG9jL3NyYy9zZ21sL3Bnc3RhbmRieS5z Z21sCTI1IE1hciAyMDA5IDA2OjI2OjQwIC0wMDAwCioqKioqKioqKioqKioqKgoqKiogMTc0LDE4 MCAqKioqCiAgICAgICAgPC9lbnRyeT4KICAgICAgIDwvcm93PgogICAgICAgPHJvdz4KISAgICAg ICA8ZW50cnk+PGxpdGVyYWw+LXQ8Lz4gPHJlcGxhY2VhYmxlPnRyaWdnZXJmaWxlPC8+PC9lbnRy eT4KICAgICAgICA8ZW50cnk+bm9uZTwvZW50cnk+CiAgICAgICAgPGVudHJ5PgogICAgICAgICBT cGVjaWZ5IGEgdHJpZ2dlciBmaWxlIHdob3NlIHByZXNlbmNlIHNob3VsZCBjYXVzZSByZWNvdmVy eSB0byBlbmQKLS0tIDE3NCwxODAgLS0tLQogICAgICAgIDwvZW50cnk+CiAgICAgICA8L3Jvdz4K ICAgICAgIDxyb3c+CiEgICAgICAgPGVudHJ5PjxsaXRlcmFsPi10PC8+IDxyZXBsYWNlYWJsZT5j YW5jZWx0cmlnZ2VyPC8+PC9lbnRyeT4KICAgICAgICA8ZW50cnk+bm9uZTwvZW50cnk+CiAgICAg ICAgPGVudHJ5PgogICAgICAgICBTcGVjaWZ5IGEgdHJpZ2dlciBmaWxlIHdob3NlIHByZXNlbmNl IHNob3VsZCBjYXVzZSByZWNvdmVyeSB0byBlbmQKKioqKioqKioqKioqKioqCioqKiAxODIsMTg4 ICoqKioKICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIGEgc3RydWN0dXJl ZCBmaWxlbmFtZSB0bwogICAgICAgICBhdm9pZCBjb25mdXNpb24gYXMgdG8gd2hpY2ggc2VydmVy IGlzIGJlaW5nIHRyaWdnZXJlZAogICAgICAgICB3aGVuIG11bHRpcGxlIHNlcnZlcnMgZXhpc3Qg b24gdGhlIHNhbWUgc3lzdGVtOyBmb3IgZXhhbXBsZQohICAgICAgICA8ZmlsZW5hbWU+L3RtcC9w Z3NxbC50cmlnZ2VyLjU0MzI8Lz4uCiAgICAgICAgPC9lbnRyeT4KICAgICAgIDwvcm93PgogICAg ICAgPHJvdz4KLS0tIDE4MiwyMDEgLS0tLQogICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0 IHlvdSB1c2UgYSBzdHJ1Y3R1cmVkIGZpbGVuYW1lIHRvCiAgICAgICAgIGF2b2lkIGNvbmZ1c2lv biBhcyB0byB3aGljaCBzZXJ2ZXIgaXMgYmVpbmcgdHJpZ2dlcmVkCiAgICAgICAgIHdoZW4gbXVs dGlwbGUgc2VydmVycyBleGlzdCBvbiB0aGUgc2FtZSBzeXN0ZW07IGZvciBleGFtcGxlCiEgICAg ICAgIDxmaWxlbmFtZT4vdG1wL3Bnc3FsLmNhbmNlbC41NDQyPC8+LgohICAgICAgICBOb3RlIHRo YXQgdGhlIHRyaWdnZXIgZmlsZSBkb2Vzbid0IGV4aXN0IGFmdGVyIHJlY292ZXJ5LgohICAgICAg IDwvZW50cnk+CiEgICAgICA8L3Jvdz4KISAgICAgIDxyb3c+CiEgICAgICAgPGVudHJ5PjxsaXRl cmFsPi1UPC8+IDxyZXBsYWNlYWJsZT5maW5pc2h0cmlnZ2VyPC8+PC9lbnRyeT4KISAgICAgICA8 ZW50cnk+bm9uZTwvZW50cnk+CiEgICAgICAgPGVudHJ5PgohICAgICAgICBTcGVjaWZ5IGEgdHJp Z2dlciBmaWxlIHdob3NlIHByZXNlbmNlIHNob3VsZCBjYXVzZSByZWNvdmVyeSB0byBlbmQKISAg ICAgICAgYWZ0ZXIgcmVwbGF5aW5nIGFsbCB0aGUgYXZhaWxhYmxlIFdBTCBmaWxlcy4KISAgICAg ICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIGEgc3RydWN0dXJlZCBmaWxlbmFtZSBs aWtlIDxsaXRlcmFsPi10PC8+LgohICAgICAgICA8bGl0ZXJhbD4tVDwvPiBpcyBpZ25vcmVkIGlm IHRoZSBzYW1lIHRyaWdnZXIgZmlsZSBhcyB0aGF0IG9mCiEgICAgICAgIDxsaXRlcmFsPi10PC8+ IGlzIHNwZWNpZmllZC4KISAgICAgICAgTm90ZSB0aGF0IHRoZSB0cmlnZ2VyIGZpbGUgcmVtYWlu cyBldmVuIGFmdGVyIHJlY292ZXJ5LgogICAgICAgIDwvZW50cnk+CiAgICAgICA8L3Jvdz4KICAg ICAgIDxyb3c+CioqKioqKioqKioqKioqKgoqKiogMjA5LDIxNSAqKioqCiAgICA8cHJvZ3JhbWxp c3Rpbmc+CiAgYXJjaGl2ZV9jb21tYW5kID0gJ2NwICVwIC4uLi9hcmNoaXZlLyVmJwogIAohIHJl c3RvcmVfY29tbWFuZCA9ICdwZ19zdGFuZGJ5IC1sIC1kIC1zIDIgLXQgL3RtcC9wZ3NxbC50cmln Z2VyLjU0NDIgLi4uL2FyY2hpdmUgJWYgJXAgJXIgMj4+c3RhbmRieS5sb2cnCiAgICA8L3Byb2dy YW1saXN0aW5nPgogICAgPHBhcmE+CiAgICAgd2hlcmUgdGhlIGFyY2hpdmUgZGlyZWN0b3J5IGlz IHBoeXNpY2FsbHkgbG9jYXRlZCBvbiB0aGUgc3RhbmRieSBzZXJ2ZXIsCi0tLSAyMjIsMjI4IC0t LS0KICAgIDxwcm9ncmFtbGlzdGluZz4KICBhcmNoaXZlX2NvbW1hbmQgPSAnY3AgJXAgLi4uL2Fy Y2hpdmUvJWYnCiAgCiEgcmVzdG9yZV9jb21tYW5kID0gJ3BnX3N0YW5kYnkgLWwgLWQgLXMgMiAt dCAvdG1wL3Bnc3FsLmNhbmNlbC41NDQyIC1UIC90bXAvcGdzcWwuZmluaXNoLjU0NDIgLi4uL2Fy Y2hpdmUgJWYgJXAgJXIgMj4+c3RhbmRieS5sb2cnCiAgICA8L3Byb2dyYW1saXN0aW5nPgogICAg PHBhcmE+CiAgICAgd2hlcmUgdGhlIGFyY2hpdmUgZGlyZWN0b3J5IGlzIHBoeXNpY2FsbHkgbG9j YXRlZCBvbiB0aGUgc3RhbmRieSBzZXJ2ZXIsCioqKioqKioqKioqKioqKgoqKiogMjM2LDI0MiAq KioqCiAgICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KICAgICAgIHN0b3Agd2FpdGluZyBvbmx5 IHdoZW4gYSB0cmlnZ2VyIGZpbGUgY2FsbGVkCiEgICAgICA8ZmlsZW5hbWU+L3RtcC9wZ3NxbC50 cmlnZ2VyLjU0NDI8Lz4gYXBwZWFycwogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAg ICA8bGlzdGl0ZW0+Ci0tLSAyNDksMjYzIC0tLS0KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJh PgogICAgICAgc3RvcCB3YWl0aW5nIG9ubHkgd2hlbiBhIHRyaWdnZXIgZmlsZSBjYWxsZWQKISAg ICAgIDxmaWxlbmFtZT4vdG1wL3Bnc3FsLmNhbmNlbC41NDQyPC8+IGFwcGVhcnMsCiEgICAgICB0 aGVuIGRvIG5vdGhpbmcgZXZlbiBpZiB0aGVyZSBhcmUgdGhlIGF2YWlsYWJsZSBXQUwgZmlsZXMK ISAgICAgPC9wYXJhPgohICAgIDwvbGlzdGl0ZW0+CiEgICAgPGxpc3RpdGVtPgohICAgICA8cGFy YT4KISAgICAgIHN0b3Agd2FpdGluZyBvbmx5IHdoZW4gYSB0cmlnZ2VyIGZpbGUgY2FsbGVkCiEg ICAgICA8ZmlsZW5hbWU+L3RtcC9wZ3NxbC5maW5pc2guNTQ0MjwvPiBhcHBlYXJzLAohICAgICAg dGhlbiByZXN0b3JlIHRoZSBhdmFpbGFibGUgV0FMIGZpbGUgaWYgaXQgZXhpc3RzCiAgICAgIDwv cGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgIDxsaXN0aXRlbT4KKioqKioqKioqKioqKioqCioq KiAyNTEsMjU3ICoqKioKICAgIDxwcm9ncmFtbGlzdGluZz4KICBhcmNoaXZlX2NvbW1hbmQgPSAn Y29weSAlcCAuLi5cXGFyY2hpdmVcXCVmJwogIAohIHJlc3RvcmVfY29tbWFuZCA9ICdwZ19zdGFu ZGJ5IC1kIC1zIDUgLXQgQzpccGdzcWwudHJpZ2dlci41NDQyIC4uLlxhcmNoaXZlICVmICVwICVy IDI+PnN0YW5kYnkubG9nJwogICAgPC9wcm9ncmFtbGlzdGluZz4KICAgIDxwYXJhPgogICAgIE5v dGUgdGhhdCBiYWNrc2xhc2hlcyBuZWVkIHRvIGJlIGRvdWJsZWQgaW4gdGhlCi0tLSAyNzIsMjc4 IC0tLS0KICAgIDxwcm9ncmFtbGlzdGluZz4KICBhcmNoaXZlX2NvbW1hbmQgPSAnY29weSAlcCAu Li5cXGFyY2hpdmVcXCVmJwogIAohIHJlc3RvcmVfY29tbWFuZCA9ICdwZ19zdGFuZGJ5IC1kIC1z IDUgLXQgQzpccGdzcWwuY2FuY2VsLjU0NDIgLVQgQzpccGdzcWwuZmluaXNoLjU0NDIgLi4uXGFy Y2hpdmUgJWYgJXAgJXIgMj4+c3RhbmRieS5sb2cnCiAgICA8L3Byb2dyYW1saXN0aW5nPgogICAg PHBhcmE+CiAgICAgTm90ZSB0aGF0IGJhY2tzbGFzaGVzIG5lZWQgdG8gYmUgZG91YmxlZCBpbiB0 aGUKKioqKioqKioqKioqKioqCioqKiAyNzcsMjgzICoqKioKICAgICA8bGlzdGl0ZW0+CiAgICAg IDxwYXJhPgogICAgICAgc3RvcCB3YWl0aW5nIG9ubHkgd2hlbiBhIHRyaWdnZXIgZmlsZSBjYWxs ZWQKISAgICAgIDxmaWxlbmFtZT5DOlxwZ3NxbC50cmlnZ2VyLjU0NDI8Lz4gYXBwZWFycwogICAg ICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgICA8bGlzdGl0ZW0+Ci0tLSAyOTgsMzEyIC0t LS0KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgogICAgICAgc3RvcCB3YWl0aW5nIG9ubHkg d2hlbiBhIHRyaWdnZXIgZmlsZSBjYWxsZWQKISAgICAgIDxmaWxlbmFtZT5DOlxwZ3NxbC5jYW5j ZWwuNTQ0MjwvPiBhcHBlYXJzLAohICAgICAgdGhlbiBkbyBub3RoaW5nIGV2ZW4gaWYgdGhlcmUg YXJlIHRoZSBhdmFpbGFibGUgV0FMIGZpbGVzCiEgICAgIDwvcGFyYT4KISAgICA8L2xpc3RpdGVt PgohICAgIDxsaXN0aXRlbT4KISAgICAgPHBhcmE+CiEgICAgICBzdG9wIHdhaXRpbmcgb25seSB3 aGVuIGEgdHJpZ2dlciBmaWxlIGNhbGxlZAohICAgICAgPGZpbGVuYW1lPkM6XHBnc3FsLnRyaWdn ZXIuNTQ0MjwvPiBhcHBlYXJzLAohICAgICAgdGhlbiByZXN0b3JlIHRoZSBhdmFpbGFibGUgV0FM IGZpbGUgaWYgaXQgZXhpc3RzCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgIDxs aXN0aXRlbT4K --000e0cd172a4b698610465eb9e1f--