Return-Path: Delivered-To: apmail-incubator-stdcxx-dev-archive@www.apache.org Received: (qmail 8990 invoked from network); 21 Feb 2007 01:25:42 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 21 Feb 2007 01:25:42 -0000 Received: (qmail 28898 invoked by uid 500); 21 Feb 2007 01:25:50 -0000 Delivered-To: apmail-incubator-stdcxx-dev-archive@incubator.apache.org Received: (qmail 28841 invoked by uid 500); 21 Feb 2007 01:25:50 -0000 Mailing-List: contact stdcxx-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: stdcxx-dev@incubator.apache.org Delivered-To: mailing list stdcxx-dev@incubator.apache.org Received: (qmail 28830 invoked by uid 99); 21 Feb 2007 01:25:50 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Feb 2007 17:25:50 -0800 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests=UNPARSEABLE_RELAY X-Spam-Check-By: apache.org Received-SPF: neutral (herse.apache.org: local policy) Received: from [195.234.96.4] (HELO mx1.kievnet.com.ua) (195.234.96.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Feb 2007 17:25:39 -0800 Received: from dummy.name; Wed, 21 Feb 2007 03:25:03 +0200 Message-ID: <45DBA051.60205@kyiv.vdiweb.com> Date: Wed, 21 Feb 2007 03:28:49 +0200 From: Farid Zaripov User-Agent: Thunderbird 2.0b2 (Windows/20070116) MIME-Version: 1.0 To: stdcxx-dev@incubator.apache.org Subject: [PATCH] Introducing 23.containers.h and 23.containers.cpp Content-Type: multipart/mixed; boundary="------------030701090307040209060502" X-Virus-Checked: Checked by ClamAV on apache.org X-Old-Spam-Status: No, hits=-4.4 required=5.0 --------------030701090307040209060502 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit ChangeLog: * 21.strings.h: #included 23.containers.h; struct StringIds inherited from struct ContainerIds; removed definitions of the AllocId and IteratorId. * 23.containers.h: New file with definitions of helpers used in clause 23 tests. * 23.containers.cpp: Ditto. The patch and new files are attached. Farid. --------------030701090307040209060502 Content-Type: text/plain; name="23.containers.h" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="23.containers.h" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKg0KKg0KKiAyMy5jb250YWluZXJzLmggLSBkZWZpbml0aW9u cyBvZiBoZWxwZXJzIHVzZWQgaW4gY2xhdXNlIDIzIHRlc3RzDQoqDQoqICRJZDogMjMuY29u dGFpbmVycy5oDQoqDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCioNCiogTGljZW5zZWQgdG8g dGhlIEFwYWNoZSBTb2Z0d2FyZSAgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9y ZQ0KKiBjb250cmlidXRvciAgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlICB0aGUgTk9USUNF ICBmaWxlIGRpc3RyaWJ1dGVkDQoqIHdpdGggIHRoaXMgIHdvcmsgIGZvciAgYWRkaXRpb25h bCBpbmZvcm1hdGlvbiAgcmVnYXJkaW5nICBjb3B5cmlnaHQNCiogb3duZXJzaGlwLiAgIFRo ZSBBU0YgIGxpY2Vuc2VzIHRoaXMgIGZpbGUgdG8gIHlvdSB1bmRlciAgdGhlIEFwYWNoZQ0K KiBMaWNlbnNlLCBWZXJzaW9uICAyLjAgKHRoZSAgIkxpY2Vuc2UiKTsgeW91IG1heSAgbm90 IHVzZSAgdGhpcyBmaWxlDQoqIGV4Y2VwdCBpbiAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl bnNlLiAgIFlvdSBtYXkgb2J0YWluICBhIGNvcHkgb2YNCiogdGhlIExpY2Vuc2UgYXQNCioN CiogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQoqDQoqIFVu bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu Zywgc29mdHdhcmUNCiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlICBMaWNlbnNlIGlzIGRpc3Ry aWJ1dGVkIG9uIGFuICAiQVMgSVMiIEJBU0lTLA0KKiBXSVRIT1VUICBXQVJSQU5USUVTIE9S IENPTkRJVElPTlMgIE9GIEFOWSAgS0lORCwgZWl0aGVyICBleHByZXNzIG9yDQoqIGltcGxp ZWQuICAgU2VlICB0aGUgTGljZW5zZSAgZm9yICB0aGUgIHNwZWNpZmljIGxhbmd1YWdlICBn b3Zlcm5pbmcNCiogcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl bnNlLg0KKiANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQojaWZuZGVmIFJXXzIzX0NPTlRB SU5FUlNfSF9JTkNMVURFRA0KI2RlZmluZSBSV18yM19DT05UQUlORVJTX0hfSU5DTFVERUQN Cg0KI2luY2x1ZGUgPHRlc3RkZWZzLmg+DQojaW5jbHVkZSA8cndfdmFsdWUuaD4gICAgICAg Ly8gZm9yIFVzZXJDbGFzcywgVXNlclBPRA0KI2luY2x1ZGUgPHJ3X2NoYXIuaD4gICAgICAg IC8vIGZvciByd19leHBhbmQgKCkNCiNpbmNsdWRlIDxkcml2ZXIuaD4gICAgICAgICAvLyBm b3IgcndfYXNzZXJ0ICgpDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLy8gZGVmaW5l cyBlbnVtZXJhdGlvbnMgaWRlbnRpZnlpbmcgdGhlIGdlbmVyYWwgdGVtcGxhdGUgYXJndW1l bnRzLA0KLy8gc2V0cyBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywgbWVtYmVyIHR5cGVzIHVz ZWQgaW4gdGhlIGRlY2xhcmF0aW9ucw0KLy8gb2YgdGhlaXIgc2lnbmF0dXJlcywgYW5kIHNw ZWNpZmljIG92ZXJsb2FkcyBvZiBzdWNoIG1lbWJlciBmdW5jdGlvbnMNCnN0cnVjdCBDb250 YWluZXJJZHMgew0KDQogICAgLy8gaWRlbnRpZmllcnMgZm9yIHRoZSBUIHRlbXBsYXRlIGFy Z3VtZW50DQogICAgZW51bSBFbGVtSWQgeyBVc2VyUE9ELCBVc2VyQ2xhc3MgfTsNCg0KICAg IC8vIGlkZW50aWZpZXJzIGZvciB0aGUgQWxsb2NhdG9yIHRlbXBsYXRlIGFyZ3VtZW50DQog ICAgZW51bSBBbGxvY0lkIHsgRGVmYXVsdEFsbG9jLCBVc2VyQWxsb2MgfTsNCg0KICAgIC8v IGlkZW50aWZpZXJzIGZvciB0aGUgSXRlcmF0b3IgdGVtcGxhdGUgYXJndW1lbnQNCiAgICAv LyB1c2VkIHdpdGggbWVtYmVyIHRlbXBsYXRlcw0KICAgIGVudW0gSXRlcmF0b3JJZCB7DQog ICAgICAgIE5vbmUsDQogICAgICAgIElucHV0LCBGb3J3YXJkLCBCaWRpciwgUmFuZG9tLA0K ICAgICAgICBQb2ludGVyLCBDb25zdFBvaW50ZXIsDQogICAgICAgIEl0ZXJhdG9yLCBDb25z dEl0ZXJhdG9yLA0KICAgICAgICBSZXZlcnNlSXRlcmF0b3IsIENvbnN0UmV2ZXJzZUl0ZXJh dG9yDQogICAgfTsNCg0KICAgIGVudW0gQ29udGFpbmVySWQgew0KICAgICAgICBMaXN0LCBW ZWN0b3IsIERlcXVlLCBRdWV1ZSwgU3RhY2sNCiAgICB9Ow0KDQogICAgLy8gaWRlbnRpZmll cyBhIHNldCBvZiBvdmVybG9hZGVkIG1lbWJlciBvciBub24tbWVtYmVyDQogICAgLy8gY29u dGFpbmVyIGZ1bmN0aW9ucw0KICAgIGVudW0gRnVuY0lkIHsNCiAgICAgICAgLy8gNiBiaXRz LCA2NCBmdW5jdGlvbnMgbWF4DQogICAgICAgIC8vIGNvbW1vbg0KICAgICAgICAvKiAgMCAq LyBmaWRfY3RvciwNCiAgICAgICAgLyogIDEgKi8gZmlkX29wX3NldCwNCiAgICAgICAgLyog IDIgKi8gZmlkX2Fzc2lnbiwNCiAgICAgICAgLyogIDMgKi8gZmlkX2dldF9hbGxvY2F0b3Is DQogICAgICAgIC8qICA0ICovIGZpZF9iZWdpbiwNCiAgICAgICAgLyogICAgKi8gZmlkX2Jl Z2luX2NvbnN0ID0gZmlkX2JlZ2luLA0KICAgICAgICAvKiAgNSAqLyBmaWRfZW5kLA0KICAg ICAgICAvKiAgICAqLyBmaWRfZW5kX2NvbnN0ID0gZmlkX2VuZCwNCiAgICAgICAgLyogIDYg Ki8gZmlkX3JiZWdpbiwNCiAgICAgICAgLyogICAgKi8gZmlkX3JiZWdpbl9jb25zdCA9IGZp ZF9yYmVnaW4sDQogICAgICAgIC8qICA3ICovIGZpZF9yZW5kLA0KICAgICAgICAvKiAgICAq LyBmaWRfcmVuZF9jb25zdCA9IGZpZF9yZW5kLA0KICAgICAgICAvKiAgOCAqLyBmaWRfZW1w dHksDQogICAgICAgIC8qICA5ICovIGZpZF9zaXplLA0KICAgICAgICAvKiAxMCAqLyBmaWRf bWF4X3NpemUsDQogICAgICAgIC8qIDExICovIGZpZF9yZXNpemUsDQogICAgICAgIC8qIDEy ICovIGZpZF9pbnNlcnQsDQogICAgICAgIC8qIDEzICovIGZpZF9lcmFzZSwNCiAgICAgICAg LyogMTQgKi8gZmlkX3N3YXAsDQogICAgICAgIC8qIDE1ICovIGZpZF9jbGVhciwNCiAgICAg ICAgLyogMTYgKi8gZmlkX29wX2VxdWFsLA0KICAgICAgICAvKiAxNyAqLyBmaWRfb3BfbGVz cywNCiAgICAgICAgLyogMTggKi8gZmlkX29wX25vdF9lcXVhbCwNCiAgICAgICAgLyogMTkg Ki8gZmlkX29wX2dyZWF0ZXIsDQogICAgICAgIC8qIDIwICovIGZpZF9vcF9ncmVhdGVyX2Vx dWFsLA0KICAgICAgICAvKiAyMSAqLyBmaWRfb3BfbGVzc19lcXVhbCwNCiAgICAgICAgLyog MjIgKi8gZmlkX3B1c2hfYmFjaywNCg0KICAgICAgICAvLyBsaXN0LCBkZXF1ZSwgdmVjdG9y DQogICAgICAgIC8qIDIzICovIGZpZF9mcm9udCwNCiAgICAgICAgLyogICAgKi8gZmlkX2Zy b250X2NvbnN0ID0gZmlkX2Zyb250LA0KICAgICAgICAvKiAyNCAqLyBmaWRfYmFjaywNCiAg ICAgICAgLyogICAgKi8gZmlkX2JhY2tfY29uc3QgPSBmaWRfYmFjaywNCiAgICAgICAgLyog MjUgKi8gZmlkX3BvcF9iYWNrLA0KDQogICAgICAgIC8vIGxpc3QsIGRlcXVlDQogICAgICAg IC8qIDI2ICovIGZpZF9wdXNoX2Zyb250LA0KICAgICAgICAvKiAyNyAqLyBmaWRfcG9wX2Zy b250LA0KDQogICAgICAgIC8vIGxpc3QNCiAgICAgICAgLyogMjggKi8gZmlkX3NwbGljZSwN CiAgICAgICAgLyogMjkgKi8gZmlkX3JlbW92ZSwNCiAgICAgICAgLyogMzAgKi8gZmlkX3Jl bW92ZV9pZiwNCiAgICAgICAgLyogMzEgKi8gZmlkX3VuaXF1ZSwNCiAgICAgICAgLyogMzIg Ki8gZmlkX21lcmdlLA0KICAgICAgICAvKiAzMyAqLyBmaWRfc29ydCwNCiAgICAgICAgLyog MzQgKi8gZmlkX3JldmVyc2UsDQoNCiAgICAgICAgLy8gdmVjdG9yLCBzdHJpbmcsIGRlcXVl DQogICAgICAgIC8qIDM1ICovIGZpZF9vcF9pbmRleCwNCiAgICAgICAgLyogICAgKi8gZmlk X29wX2luZGV4X2NvbnN0ID0gZmlkX29wX2luZGV4LA0KICAgICAgICAvKiAzNiAqLyBmaWRf YXQsDQogICAgICAgIC8qICAgICovIGZpZF9hdF9jb25zdCA9IGZpZF9hdCwNCg0KICAgICAg ICAvLyB2ZWN0b3IsIHN0cmluZw0KICAgICAgICAvKiAzNyAqLyBmaWRfY2FwYWNpdHksDQog ICAgICAgIC8qIDM4ICovIGZpZF9yZXNlcnZlLA0KDQogICAgICAgIC8vIHZlY3Rvcjxib29s Pg0KICAgICAgICAvKiAzOSAqLyBmaWRfZmxpcCwNCg0KICAgICAgICAvKiAtLSAqLyBmaWRf Yml0cyA9IDYsDQogICAgICAgIC8qIC0tICovIGZpZF9tYXNrID0gNjMNCiAgICB9Ow0KDQog ICAgLy8gaWRlbnRpZmllcyB0aGUgdHlwZSBvZiBhIGZ1bmN0aW9uIGFyZ3VtZW50LCBpbmNs dWRpbmcNCiAgICAvLyB0aGUgaW1wbGljaXQgdGhpcw0KICAgIGVudW0gQXJnSWQgew0KICAg ICAgICAvLyA0IGJpdHMsIDE2IHR5cGVzIG1heA0KICAgICAgICAvKiAgMCAqLyBhcmdfdm9p ZCwgICAgLy8gdm9pZA0KICAgICAgICAvKiAgMSAqLyBhcmdfc2l6ZSwgICAgLy8gc2l6ZV90 eXBlDQogICAgICAgIC8qICAyICovIGFyZ192YWwsICAgICAvLyB2YWx1ZV90eXBlDQogICAg ICAgIC8qICAzICovIGFyZ19yZWYsICAgICAvLyByZWZlcmVuY2UNCiAgICAgICAgLyogIDQg Ki8gYXJnX2NyZWYsICAgIC8vIGNvbnN0X3JlZmVyZW5jZQ0KICAgICAgICAvKiAgNSAqLyBh cmdfaXRlciwgICAgLy8gaXRlcmF0b3INCiAgICAgICAgLyogIDYgKi8gYXJnX2NpdGVyLCAg IC8vIGNvbnN0X2l0ZXJhdG9yDQogICAgICAgIC8qICA3ICovIGFyZ19yYW5nZSwgICAvLyBJ dGVyYXRvciwgSXRlcmF0b3INCiAgICAgICAgLyogIDggKi8gYXJnX2NvbnQsICAgIC8vIGNv bnRhaW5lciYgKG9yIHRoaXMgZm9yIG1lbWJlciBmdW5jdGlvbnMpDQogICAgICAgIC8qICA5 ICovIGFyZ19jY29udCwgICAvLyBjb25zdCBjb250YWluZXImIChvciBjb25zdCB0aGlzIGZv ciBtZW1iZXJzKQ0KICAgICAgICAvKiAxMCAqLyBhcmdfYWxsb2MsICAgLy8gY29uc3QgYWxs b2NhdG9yJg0KICAgICAgICAvKiAxMSAqLyBhcmdfcHJlZCwgICAgLy8gUHJlZGljYXRlDQog ICAgICAgIC8qIDEyICovIGFyZ19icHJlZCwgICAvLyBCaW5hcnlQcmVkaWNhdGUNCiAgICAg ICAgLyogMTMgKi8gYXJnX2NvbXAsICAgIC8vIENvbXBhcmUNCiAgICAgICAgLyogLS0gKi8g YXJnX2JpdHMgPSA0LA0KICAgICAgICAvKiAtLSAqLyBhcmdfbWFzayA9IDE1DQogICAgfTsN Cg0KICAgIGVudW0gew0KICAgICAgICAvLyBiaXQgZGVzaWduYXRpbmcgYSBtZW1iZXIgZnVu Y3Rpb24NCiAgICAgICAgYml0X21lbWJlciA9IDEgPDwgKGZpZF9iaXRzICsgNiAqIGFyZ19i aXRzKQ0KICAgIH07DQoNCiAgICBzdGF0aWMgQXJnSWQgYXJnX3R5cGUgKF9SV1NURF9TSVpF X1QgaWQsIGludCBhcmdubykgew0KICAgICAgICByZXR1cm4gQXJnSWQgKCgoaWQgPj4gZmlk X2JpdHMpID4+IGFyZ25vICogYXJnX2JpdHMpICYgYXJnX21hc2spOw0KICAgIH0NCn07DQoN Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8NCg0Kc3RydWN0IENvbnRhaW5lckZ1bmMNCnsNCiAg ICBDb250YWluZXJJZHM6OkVsZW1JZCAgICAgIGVsZW1faWRfOw0KICAgIENvbnRhaW5lcklk czo6QWxsb2NJZCAgICAgYWxsb2NfaWRfOw0KICAgIENvbnRhaW5lcklkczo6SXRlcmF0b3JJ ZCAgaXRlcl9pZF87DQogICAgQ29udGFpbmVySWRzOjpDb250YWluZXJJZCBjb250X2lkXzsN CiAgICBfUldTVERfU0laRV9UICAgICAgICAgICAgIHdoaWNoXzsNCn07DQoNCg0KLy8gZGVz Y3JpYmVzIGEgc2luZ2xlIHRlc3QgY2FzZSBmb3IgYW55IG92ZXJsb2FkIG9mIGFueSBjb250 YWluZXINCi8vIGZ1bmN0aW9uICh0aGUgc2FtZSB0ZXN0IGNhc2UgY2FuIGJlIHVzZWQgdG8g ZXhlcmNpc2UgbW9yZQ0KLy8gdGhhbiBvbmUgb3ZlcmxvYWQgb2YgdGhlIHNhbWUgZnVuY3Rp b24pDQpzdHJ1Y3QgQ29udGFpbmVyVGVzdENhc2UNCnsNCiAgICBpbnQgICAgICAgICAgICBs aW5lOyAgICAgIC8vIHRlc3QgY2FzZSBsaW5lIG51bWJlcg0KDQogICAgaW50ICAgICAgICAg ICAgb2ZmOyAgICAgICAvLyBvZmZzZXQgKHBvc2l0aW9uIGFyZ3VtZW50KQ0KICAgIGludCAg ICAgICAgICAgIHNpemU7ICAgICAgLy8gc2l6ZSAoY291bnQgYXJndW1lbnQpDQoNCiAgICBp bnQgICAgICAgICAgICBvZmYyOyAgICAgIC8vIG9mZnNldCAyIChwb3NpdGlvbiBhcmd1bWVu dCkNCiAgICBpbnQgICAgICAgICAgICBzaXplMjsgICAgIC8vIHNpemUgMiAoY291bnQgYXJn dW1lbnQpDQoNCiAgICBpbnQgICAgICAgICAgICB2YWw7ICAgICAgIC8vIHZhbHVlIChzaW5n bGUgY2hhcmFjdGVyIHRvIGFwcGVuZCkNCg0KICAgIGNvbnN0IGNoYXIqICAgIHN0cjsgICAg ICAgLy8gY29udHJvbGxlZCBzZXF1ZW5jZQ0KICAgIF9SV1NURF9TSVpFX1QgIHN0cl9sZW47 ICAgLy8gbGVuZ3RoIG9mIHNlcXVlbmNlDQoNCiAgICBjb25zdCBjaGFyKiAgICBhcmc7ICAg ICAgIC8vIHNlcXVlbmNlIHRvIGluc2VydA0KICAgIF9SV1NURF9TSVpFX1QgIGFyZ19sZW47 ICAgLy8gbGVuZ3RoIG9mIHNlcXVlbmNlDQoNCiAgICBjb25zdCBjaGFyKiAgICByZXM7ICAg ICAgIC8vIHJlc3VsdGluZyBzZXF1ZW5jZQ0KICAgIF9SV1NURF9TSVpFX1QgIG5yZXM7ICAg ICAgLy8gbGVuZ3RoIG9mIHNlcXVlbmNlIG9yIGV4cGVjdGVkIHJlc3VsdCB2YWx1ZQ0KDQog ICAgaW50ICAgICAgICAgICAgYnRocm93OyAgICAvLyBleGNlcHRpb24gZXhwZWN0ZWQNCn07 DQoNCg0KLy8gZGVzY3JpYmVzIGEgc2V0IG9mIHRlc3QgY2FzZXMgZm9yIGEgc2luZ2xlIG92 ZXJsb2FkIG9mIGEgZnVuY3Rpb24NCnN0cnVjdCBDb250YWluZXJUZXN0DQp7DQogICAgLy8g Y29udGFpbmVyIGZ1bmN0aW9uIG92ZXJsb2FkIHRvIGV4ZXJjaXNlDQogICAgX1JXU1REX1NJ WkVfVCB3aGljaDsNCg0KICAgIC8vIHRlc3QgY2FzZXMgdG8gZXhlcmNpc2Ugb3ZlcmxvYWQg d2l0aA0KICAgIGNvbnN0IENvbnRhaW5lclRlc3RDYXNlICpjYXNlczsNCg0KICAgIC8vIG51 bWJlciBvZiB0ZXN0IGNhc2VzDQogICAgX1JXU1REX1NJWkVfVCBjYXNlX2NvdW50Ow0KfTsN Cg0KDQp0eXBlZGVmIHZvaWQgQ29udGFpbmVyVGVzdEZ1bmMgKGNvbnN0IENvbnRhaW5lckZ1 bmMmLCBjb25zdCBDb250YWluZXJUZXN0Q2FzZSYpOw0KDQpfVEVTVF9FWFBPUlQgaW50DQpy d19ydW5fY29udF90ZXN0IChpbnQsIGNoYXIqKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIq LA0KICAgICAgICAgICAgICAgICAgQ29udGFpbmVySWRzOjpDb250YWluZXJJZCwgQ29udGFp bmVyVGVzdEZ1bmMqLA0KICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyVGVzdCos IF9SV1NURF9TSVpFX1QpOw0KDQp0eXBlZGVmIHZvaWQgVm9pZEZ1bmMgKCk7DQoNCl9URVNU X0VYUE9SVCBpbnQNCnJ3X3J1bl9jb250X3Rlc3QgKGludCwgY2hhcioqLCBjb25zdCBjaGFy KiwgY29uc3QgY2hhciosDQogICAgICAgICAgICAgICAgICBDb250YWluZXJJZHM6OkNvbnRh aW5lcklkLCBWb2lkRnVuYyogY29uc3QqLA0KICAgICAgICAgICAgICAgICAgY29uc3QgQ29u dGFpbmVyVGVzdCosIF9SV1NURF9TSVpFX1QpOw0KDQovKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov DQoNCnRlbXBsYXRlIDxjbGFzcyBUPg0KY2xhc3MgQ29udGFpbmVyVGVzdENhc2VEYXRhDQp7 DQpwcml2YXRlOg0KDQogICAgLy8gbm90IGRlZmluZWQsIG5vdCBjb3B5YWJsZSwgbm90IGFz c2lnbmFibGUNCiAgICBDb250YWluZXJUZXN0Q2FzZURhdGEgKGNvbnN0IENvbnRhaW5lclRl c3RDYXNlRGF0YSYpOw0KICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDb250YWluZXJUZXN0 Q2FzZURhdGEmKTsNCg0KICAgIC8vIGZvciBjb252ZW5pZW5jZQ0KICAgIHR5cGVkZWYgX1JX U1REX1NJWkVfVCBTaXplVHlwZTsNCg0KcHVibGljOg0KDQogICAgU2l6ZVR5cGUgc3RybGVu XzsgICAvLyB0aGUgbGVuZ3RoIG9mIHRoZSBleHBhbmRlZCBzdHJpbmcNCiAgICBTaXplVHlw ZSBhcmdsZW5fOyAgIC8vIHRoZSBsZW5ndGggb2YgdGhlIGV4cGFuZGVkIGFyZ3VtZW50DQog ICAgU2l6ZVR5cGUgcmVzbGVuXzsgICAvLyB0aGUgbGVuZ3RoIG9mIHRoZSBleHBhbmRlZCBy ZXN1bHQNCg0KICAgIC8vIHRoZSBvZmZzZXQgYW5kIGV4dGVudCAodGhlIG51bWJlciBvZiBl bGVtZW50cykgb2YNCiAgICAvLyB0aGUgZmlyc3QgcmFuZ2UgaW50byB0aGUgY29udGFpbmVy IG9iamVjdCBiZWluZyBtb2RpZmllZA0KICAgIFNpemVUeXBlIG9mZjFfOw0KICAgIFNpemVU eXBlIGV4dDFfOw0KDQogICAgLy8gdGhlIG9mZnNldCBhbmQgZXh0ZW50ICh0aGUgbnVtYmVy IG9mIGVsZW1lbnRzKSBvZg0KICAgIC8vIHRoZSBhcmd1bWVudCBvZiB0aGUgZnVuY3Rpb24g Y2FsbA0KICAgIFNpemVUeXBlIG9mZjJfOw0KICAgIFNpemVUeXBlIGV4dDJfOw0KDQogICAg Y29uc3QgVCogc3RyXzsgICAvLyBwb2ludGVyIHRvIHRoZSBleHBhbmRlZCBzdHJpbmcNCiAg ICBjb25zdCBUKiBhcmdfOyAgIC8vIHBvaW50ZXIgdG8gdGhlIGV4cGFuZGVkIGFyZ3VtZW50 DQogICAgY29uc3QgVCogcmVzXzsgICAvLyBwb2ludGVyIHRvIHRoZSBleHBhbmRlZCByZXN1 bHQNCg0KICAgIGNvbnN0IENvbnRhaW5lckZ1bmMgICAgICZmdW5jXzsNCiAgICBjb25zdCBD b250YWluZXJUZXN0Q2FzZSAmdGNhc2VfOw0KDQogICAgLy8gY29udmVydHMgdGhlIG5hcnJv dyAoYW5kIHBvc3NpYmx5KSBjb25kZW5zZWQgc3RyaW5ncyB0byBmdWxseQ0KICAgIC8vIGV4 cGFuZGVkIHdpZGUgY2hhcmFjdGVyIGFycmF5cyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnN0 cnVjdA0KICAgIC8vIGNvbnRhaW5lciBvYmplY3RzDQogICAgQ29udGFpbmVyVGVzdENhc2VE YXRhIChjb25zdCBDb250YWluZXJGdW5jICZmdW5jLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQ29udGFpbmVyVGVzdENhc2UgJnRjYXNlKQ0KICAgICAgICA6IGZ1bmNf IChmdW5jKSwgdGNhc2VfICh0Y2FzZSkgew0KDQogICAgICAgIGNoYXIgYnVmIFsyNTZdOw0K DQogICAgICAgIHN0cmxlbl8gPSBzaXplb2YgKGJ1Zik7DQogICAgICAgIGNoYXIqIHN0ciA9 IHJ3X2V4cGFuZCAoYnVmLCB0Y2FzZS5zdHIsIHRjYXNlLnN0cl9sZW4sICZzdHJsZW5fKTsN CiAgICAgICAgc3RyXyA9IFQ6OmZyb21fY2hhciAoc3RyLCBzdHJsZW5fKTsNCiAgICAgICAg aWYgKHN0ciAhPSBidWYpDQogICAgICAgICAgICBkZWxldGVbXSBzdHI7DQoNCiAgICAgICAg YXJnbGVuXyA9IHNpemVvZiAoYnVmKTsNCiAgICAgICAgc3RyID0gcndfZXhwYW5kIChidWYs IHRjYXNlLmFyZywgdGNhc2UuYXJnX2xlbiwgJmFyZ2xlbl8pOw0KICAgICAgICBhcmdfID0g VDo6ZnJvbV9jaGFyIChzdHIsIGFyZ2xlbl8pOw0KICAgICAgICBpZiAoc3RyICE9IGJ1ZikN CiAgICAgICAgICAgIGRlbGV0ZVtdIHN0cjsNCg0KICAgICAgICByZXNsZW5fID0gc2l6ZW9m IChidWYpOw0KICAgICAgICBzdHIgPSByd19leHBhbmQgKGJ1ZiwgdGNhc2UucmVzLCB0Y2Fz ZS5ucmVzLCAmcmVzbGVuXyk7DQogICAgICAgIHJlc18gPSBUOjpmcm9tX2NoYXIgKHN0ciwg cmVzbGVuXyk7DQogICAgICAgIGlmIChzdHIgIT0gYnVmKQ0KICAgICAgICAgICAgZGVsZXRl W10gc3RyOw0KDQogICAgICAgIC8vIGNvbXB1dGUgdGhlIG9mZnNldCBhbmQgZXh0ZW50IG9m IHRoZSBjb250YWluZXIgb2JqZWN0DQogICAgICAgIC8vIHJlcHJlc2VudGluZyB0aGUgY29u dHJvbGxlZCBzZXF1ZW5jZSBhbmQgdGhlIG9mZnNldA0KICAgICAgICAvLyBhbmQgZXh0ZW50 IG9mIHRoZSBhcmd1bWVudCBvZiB0aGUgZnVuY3Rpb24gY2FsbA0KICAgICAgICBjb25zdCBT aXplVHlwZSBhcmdsID0gdGNhc2VfLmFyZyA/IGFyZ2xlbl8gOiBzdHJsZW5fOw0KDQogICAg ICAgIG9mZjFfID0gU2l6ZVR5cGUgKHRjYXNlXy5vZmYpIDwgc3RybGVuXyA/DQogICAgICAg ICAgICBTaXplVHlwZSAodGNhc2VfLm9mZikgOiBzdHJsZW5fOw0KDQogICAgICAgIGV4dDFf ID0gb2ZmMV8gKyB0Y2FzZV8uc2l6ZSA8IHN0cmxlbl8gPw0KICAgICAgICAgICAgU2l6ZVR5 cGUgKHRjYXNlXy5zaXplKSA6IHN0cmxlbl8gLSBvZmYxXzsNCg0KICAgICAgICBvZmYyXyA9 IFNpemVUeXBlICh0Y2FzZV8ub2ZmMikgPCBhcmdsID8NCiAgICAgICAgICAgIFNpemVUeXBl ICh0Y2FzZV8ub2ZmMikgOiBhcmdsOw0KDQogICAgICAgIGV4dDJfID0gb2ZmMl8gKyB0Y2Fz ZV8uc2l6ZTIgPCBhcmdsID8NCiAgICAgICAgICAgIFNpemVUeXBlICh0Y2FzZV8uc2l6ZTIp IDogYXJnbCAtIG9mZjJfOw0KICAgIH0NCg0KICAgIH5Db250YWluZXJUZXN0Q2FzZURhdGEg KCkgew0KICAgICAgICAvLyBjbGVhbiB1cCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5 DQogICAgICAgIGRlbGV0ZVtdIHN0cl87DQogICAgICAgIGRlbGV0ZVtdIGFyZ187DQogICAg ICAgIGRlbGV0ZVtdIHJlc187DQogICAgfQ0KfTsNCg0KLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Lw0KDQovLyBiYXNlIGNsYXNzLWZ1bmN0b3IgZm9yIHRoZSByYW5nZSB0ZW1wbGF0ZSBvdmVy bG9hZHMgdGVzdGluZw0KdGVtcGxhdGUgPGNsYXNzIENvbnQ+DQpzdHJ1Y3QgQ29udFJhbmdl QmFzZSB7DQoNCiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnQ6OnZhbHVlX3R5cGUgICAgICAg ICAgICAgICAgIENvbnRWYWw7DQogICAgdHlwZWRlZiB0eXBlbmFtZSBDb250OjppdGVyYXRv ciAgICAgICAgICAgICAgICAgICBDb250SXRlcjsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIENv bnQ6OmNvbnN0X2l0ZXJhdG9yICAgICAgICAgICAgIENvbnRDb25zdEl0ZXI7DQogICAgdHlw ZWRlZiB0eXBlbmFtZSBDb250OjpyZXZlcnNlX2l0ZXJhdG9yICAgICAgICAgICBDb250UmV2 SXRlcjsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnQ6OmNvbnN0X3JldmVyc2VfaXRlcmF0 b3IgICAgIENvbnRDb25zdFJldkl0ZXI7DQoNCiAgICBDb250UmFuZ2VCYXNlICgpIHsgfQ0K DQogICAgdmlydHVhbCB+Q29udFJhbmdlQmFzZSAoKSB7IC8qIHNpbGVuY2Ugd2FybmluZ3Mg Ki8gfQ0KDQogICAgc3RhdGljIENvbnRJdGVyDQogICAgYmVnaW4gKENvbnQgJmNvbnQsIENv bnRJdGVyKikgew0KICAgICAgICByZXR1cm4gY29udC5iZWdpbiAoKTsNCiAgICB9DQoNCiAg ICBzdGF0aWMgQ29udENvbnN0SXRlcg0KICAgIGJlZ2luIChjb25zdCBDb250ICZjb250LCBD b250Q29uc3RJdGVyKikgew0KICAgICAgICByZXR1cm4gY29udC5iZWdpbiAoKTsNCiAgICB9 DQoNCiAgICBzdGF0aWMgQ29udFJldkl0ZXINCiAgICBiZWdpbiAoQ29udCAmY29udCwgQ29u dFJldkl0ZXIqKSB7DQogICAgICAgIHJldHVybiBjb250LnJiZWdpbiAoKTsNCiAgICB9DQoN CiAgICBzdGF0aWMgQ29udENvbnN0UmV2SXRlcg0KICAgIGJlZ2luIChjb25zdCBDb250ICZj b250LCBDb250Q29uc3RSZXZJdGVyKikgew0KICAgICAgICByZXR1cm4gY29udC5yYmVnaW4g KCk7DQogICAgfQ0KDQogICAgdmlydHVhbCBDb250Jg0KICAgIG9wZXJhdG9yKCkgKENvbnQg JmNvbnQsIGNvbnN0IENvbnRhaW5lclRlc3RDYXNlRGF0YTxDb250VmFsPiYpIGNvbnN0IHsN CiAgICAgICAgUldfQVNTRVJUICghImxvZ2ljIGVycm9yOiBzaG91bGQgYmUgbmV2ZXIgY2Fs bGVkIik7DQogICAgICAgIHJldHVybiBjb250Ow0KICAgIH0NCn07DQoNCi8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8NCg0KIyAgZGVmaW5lIENPTlRBSU5FUl9URVNUX0RJU1BBVENIKEFsbG9j LCBmbmFtZSwgZnVuYywgdGNhc2UpICAgIFwNCiAgICBpZiAoQ29udGFpbmVySWRzOjpVc2Vy UE9EID09IGZ1bmMuZWxlbV9pZF8pICAgICAgICAgICAgICAgICBcDQogICAgICAgIGZuYW1l IChVc2VyUE9EICgpLCAoQWxsb2M8VXNlclBPRD4qKTAsIGZ1bmMsIHRjYXNlKTsgICAgXA0K ICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwNCiAgICAgICAgZm5hbWUgKFVzZXJDbGFzcyAoKSwgKEFsbG9jPFVzZXJD bGFzcz4qKTAsIGZ1bmMsIHRjYXNlKQ0KDQoNCiNkZWZpbmUgREVGSU5FX0NPTlRBSU5FUl9U RVNUX0RJU1BBVENIKGZuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAg IHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcDQogICAgZm5hbWUgKGNvbnN0IENvbnRhaW5lckZ1bmMgICAg ICZmdW5jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAg Y29uc3QgQ29udGFpbmVyVGVzdENhc2UgJnRjYXNlKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KICAgICAgICBpZiAoQ29udGFpbmVySWRzOjpEZWZhdWx0QWxsb2MgPT0g ZnVuYy5hbGxvY19pZF8pIHsgICAgICAgICAgICAgICBcDQogICAgICAgICAgICBDT05UQUlO RVJfVEVTVF9ESVNQQVRDSCAoc3RkOjphbGxvY2F0b3IsIGZuYW1lLCBmdW5jLCB0Y2FzZSk7 IFwNCiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICBlbHNlIGlmIChDb250YWluZXJJ ZHM6OlVzZXJBbGxvYyA9PSBmdW5jLmFsbG9jX2lkXykgeyAgICAgICAgICAgICBcDQogICAg ICAgICAgICBDT05UQUlORVJfVEVTVF9ESVNQQVRDSCAoVXNlckFsbG9jLCBmbmFtZSwgZnVu YywgdGNhc2UpOyAgICAgIFwNCiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICBlbHNl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcDQogICAgICAgICAgICBSV19BU1NFUlQgKCEibG9naWMgZXJyb3I6IGJhZCBh bGxvY2F0b3IiKTsgICAgICAgICAgICAgICAgICAgIFwNCiAgICB9IHR5cGVkZWYgdm9pZCBy d191bnVzZWRfdHlwZWRlZg0KDQoNCiNkZWZpbmUgQ09OVEFJTkVSX1RGVU5DKFQsIEFsbG9j YXRvcikgICAgICAgICBcDQogICAgdm9pZCAoKikoVCosIEFsbG9jYXRvcjxUPiosICAgICAg ICAgICAgICAgXA0KICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lclRlc3RDYXNlRGF0YTxU PiYpDQoNCiNkZWZpbmUgQ09OVEFJTkVSX1RGVU5DX0FERFIoZm5hbWUsIFQsIEFsbG9jYXRv cikgXA0KICAgIChWb2lkRnVuYyopKENPTlRBSU5FUl9URlVOQyAoVCwgQWxsb2NhdG9yKSkg ICBcDQogICAgICAgICZmbmFtZTxULCBBbGxvY2F0b3I8VD4gPg0KDQojZGVmaW5lIERFRklO RV9DT05UQUlORVJfVEVTVF9GVU5DVElPTlMoZm5hbWUpICAgICAgICAgICAgICAgICBcDQog ICAgc3RhdGljIFZvaWRGdW5jKiBjb25zdCBmbmFtZSAjIyBfZnVuY19hcnJheSBbXSA9IHsg ICAgICAgICBcDQogICAgICBDT05UQUlORVJfVEZVTkNfQUREUiAoZm5hbWUsIFVzZXJQT0Qs IHN0ZDo6YWxsb2NhdG9yKSwgICBcDQogICAgICBDT05UQUlORVJfVEZVTkNfQUREUiAoZm5h bWUsIFVzZXJQT0QsIFVzZXJBbGxvYyksICAgICAgICBcDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICBD T05UQUlORVJfVEZVTkNfQUREUiAoZm5hbWUsIFVzZXJDbGFzcywgc3RkOjphbGxvY2F0b3Ip LCBcDQogICAgICBDT05UQUlORVJfVEZVTkNfQUREUiAoZm5hbWUsIFVzZXJDbGFzcywgVXNl ckFsbG9jKSAgICAgICBcDQogICAgfQ0KDQojZW5kaWYgICAvLyBSV18yM19DT05UQUlORVJT X0hfSU5DTFVERUQNCg== --------------030701090307040209060502 Content-Type: text/plain; name="23.containers.cpp" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="23.containers.cpp" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKg0KKg0KKiAyMy5jb250YWluZXJzLmNwcCAtIGRlZmluaXRp b25zIG9mIGhlbHBlcnMgdXNlZCBpbiBjbGF1c2UgMjMgdGVzdHMNCioNCiogJElkOiAyMy5j b250YWluZXJzLmNwcA0KKg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqDQoqIExpY2Vuc2Vk IHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9y IG1vcmUNCiogY29udHJpYnV0b3IgIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSAgdGhlIE5P VElDRSAgZmlsZSBkaXN0cmlidXRlZA0KKiB3aXRoICB0aGlzICB3b3JrICBmb3IgIGFkZGl0 aW9uYWwgaW5mb3JtYXRpb24gIHJlZ2FyZGluZyAgY29weXJpZ2h0DQoqIG93bmVyc2hpcC4g ICBUaGUgQVNGICBsaWNlbnNlcyB0aGlzICBmaWxlIHRvICB5b3UgdW5kZXIgIHRoZSBBcGFj aGUNCiogTGljZW5zZSwgVmVyc2lvbiAgMi4wICh0aGUgICJMaWNlbnNlIik7IHlvdSBtYXkg IG5vdCB1c2UgIHRoaXMgZmlsZQ0KKiBleGNlcHQgaW4gIGNvbXBsaWFuY2Ugd2l0aCB0aGUg TGljZW5zZS4gICBZb3UgbWF5IG9idGFpbiAgYSBjb3B5IG9mDQoqIHRoZSBMaWNlbnNlIGF0 DQoqDQoqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKg0K KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy aXRpbmcsIHNvZnR3YXJlDQoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBk aXN0cmlidXRlZCBvbiBhbiAgIkFTIElTIiBCQVNJUywNCiogV0lUSE9VVCAgV0FSUkFOVElF UyBPUiBDT05ESVRJT05TICBPRiBBTlkgIEtJTkQsIGVpdGhlciAgZXhwcmVzcyBvcg0KKiBp bXBsaWVkLiAgIFNlZSAgdGhlIExpY2Vuc2UgIGZvciAgdGhlICBzcGVjaWZpYyBsYW5ndWFn ZSAgZ292ZXJuaW5nDQoqIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUg TGljZW5zZS4NCiogDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLy8gZXhwYW5kIF9URVNU X0VYUE9SVCBtYWNyb3MNCiNkZWZpbmUgX1JXU1REX1RFU1RfU1JDDQoNCiNpbmNsdWRlIDxt ZW1vcnk+ICAgICAgICAgICAvLyBmb3IgYWxsb2NhdG9yDQoNCiNpbmNsdWRlIDwyMy5jb250 YWluZXJzLmg+DQoNCiNpbmNsdWRlIDxjbWRvcHQuaD4gICAgICAgICAvLyBmb3IgcndfZW5h YmxlZCgpDQojaW5jbHVkZSA8cndfYWxsb2NhdG9yLmg+ICAgLy8gZm9yIFVzZXJBbGxvYw0K I2luY2x1ZGUgPHJ3X3ByaW50Zi5oPiAgICAgIC8vIGZvciByd19hc25wcmludGYoKQ0KDQoj aW5jbHVkZSA8Y3R5cGUuaD4gICAgICAgICAgLy8gZm9yIGlzZGlnaXQoKQ0KI2luY2x1ZGUg PHN0ZGFyZy5oPiAgICAgICAgIC8vIGZvciB2YV9hcmcsIC4uLg0KI2luY2x1ZGUgPHN0ZGRl Zi5oPiAgICAgICAgIC8vIGZvciBzaXplX3QNCiNpbmNsdWRlIDxzdGRsaWIuaD4gICAgICAg ICAvLyBmb3IgZnJlZSgpDQojaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgLy8gZm9yIHN0 cmNweSgpDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0Kc3RhdGljIGNvbnN0IGNoYXIN Cl9yd190aGlzX2ZpbGVbXSA9IF9fRklMRV9fOw0KDQoNCnN0YXRpYyBjb25zdCBjaGFyKiBj b25zdA0KX3J3X2VsZW1fbmFtZXNbXSA9IHsNCiAgICAiVXNlclBPRCIsICJVc2VyQ2xhc3Mi DQp9Ow0KDQoNCnN0YXRpYyBjb25zdCBjaGFyKiBjb25zdA0KX3J3X2FsbG9jX25hbWVzW10g PSB7DQogICAgImFsbG9jYXRvciIsICJVc2VyQWxsb2MiDQp9Ow0KDQoNCnN0YXRpYyBjb25z dCBjaGFyKiBjb25zdA0KX3J3X2l0ZXJfbmFtZXNbXSA9IHsNCiAgICAiIiwNCiAgICAiSW5w dXRJdGVyYXRvciIsICJGb3J3YXJkSXRlcmF0b3IiLCAiQmlkaXJlY3Rpb25hbEl0ZXJhdG9y IiwNCiAgICAiUmFuZG9tQWNjZXNzSXRlcmF0b3IiLA0KICAgICJwb2ludGVyIiwgImNvbnN0 X3BvaW50ZXIiLA0KICAgICJpdGVyYXRvciIsICJjb25zdF9pdGVyYXRvciIsDQogICAgInJl dmVyc2VfaXRlcmF0b3IiLCAiY29uc3RfcmV2ZXJzZV9pdGVyYXRvciINCn07DQoNCg0Kc3Rh dGljIGNvbnN0IGNoYXIqIGNvbnN0DQpfcndfY29udF9uYW1lc1tdID0gew0KICAgICJsaXN0 IiwgInZlY3RvciIsICJkZXF1ZSIsICJxdWV1ZSIsICJzdGFjayINCn07DQoNCg0KLy8gb3Jk ZXIgb2YgZWxlbWVudHMgZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIENvbnRhaW5lcklkczo6 RnVuY0lkDQpzdGF0aWMgY29uc3QgY2hhciogY29uc3QNCl9yd19mdW5jX25hbWVzW10gPSB7 DQogICAgMCAvKiBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGUgY3RvciAqLywgIm9wZXJhdG9y PSIsICJhc3NpZ24iLA0KICAgICJnZXRfYWxsb2NhdG9yIiwgImJlZ2luIiwgImVuZCIsICJy YmVnaW4iLCAicmVuZCIsICJlbXB0eSIsDQogICAgInNpemUiLCAibWF4X3NpemUiLCAicmVz aXplIiwgImluc2VydCIsICJlcmFzZSIsICJzd2FwIiwNCiAgICAiY2xlYXIiLCAib3BlcmF0 b3I9PSIsICJvcGVyYXRvcjwiLCAib3BlcmF0b3IhPSIsICJvcGVyYXRvcj4iLA0KICAgICJv cGVyYXRvcj49IiwgIm9wZXJhdG9yPD0iLCAicHVzaF9iYWNrIiwgImZyb250IiwgImJhY2si LA0KICAgICJwb3BfYmFjayIsICJwdXNoX2Zyb250IiwgInBvcF9mcm9udCIsICJzcGxpY2Ui LCAicmVtb3ZlIiwNCiAgICAicmVtb3ZlX2lmIiwgInVuaXF1ZSIsICJtZXJnZSIsICJzb3J0 IiwgInJldmVyc2UiLCAib3BlcmF0b3JbXSIsDQogICAgImF0IiwgImNhcGFjaXR5IiwgInJl c2VydmUiLCAiZmxpcCINCn07DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KY29uc3Qg c2l6ZV90IE1BWF9PVkVSTE9BRFMgPSAzMjsNCg0KLy8gZGlzYWJsZWQgKC0xKSBvciBleHBs aWNpdGx5IGVuYWJsZWQgKCsxKSBmb3IgZWFjaCBvdmVybG9hZA0KLy8gb2YgdGhlIGNvbnQg ZnVuY3Rpb24gYmVpbmcgdGVzdGVkDQpzdGF0aWMgaW50DQpfcndfb3B0X2Z1bmMgW01BWF9P VkVSTE9BRFNdOw0KDQovLyBhcnJheSBvZiB0ZXN0cyBlYWNoIGV4ZXJjaXNpbmcgYSBzaW5n bGUgY29udCBmdW5jdGlvbg0Kc3RhdGljIGNvbnN0IENvbnRhaW5lclRlc3QqDQpfcndfY29u dF90ZXN0czsNCg0KLy8gc2l6ZSBvZiB0aGUgYXJyYXkgYWJvdmUNCnN0YXRpYyBzaXplX3QN Cl9yd19jb250X3Rlc3RfY291bnQ7DQoNCnN0YXRpYyBpbnQNCl9yd19vcHRfZWxlbV90eXBl cyBbc2l6ZW9mIF9yd19lbGVtX25hbWVzIC8gc2l6ZW9mICpfcndfZWxlbV9uYW1lc107DQoN CnN0YXRpYyBpbnQNCl9yd19vcHRfYWxsb2NfdHlwZXMgW3NpemVvZiBfcndfYWxsb2NfbmFt ZXMgLyBzaXplb2YgKl9yd19hbGxvY19uYW1lc107DQoNCnN0YXRpYyBpbnQNCl9yd19vcHRf aXRlcl90eXBlcyBbc2l6ZW9mIF9yd19pdGVyX25hbWVzIC8gc2l6ZW9mICpfcndfaXRlcl9u YW1lc107DQoNCnN0YXRpYyBpbnQNCl9yd19vcHRfbm9fZXhjZXB0aW9uczsNCg0Kc3RhdGlj IGludA0KX3J3X29wdF9ub19leGNlcHRpb25fc2FmZXR5Ow0KDQpzdGF0aWMgaW50DQpfcndf b3B0X3NlbGZfcmVmOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCnN0YXRpYyBzaXpl X3QNCl9yd19nZXRfZnVuY19pbnggKHNpemVfdCBmaWQpDQp7DQogICAgc2l6ZV90IGlueCA9 IF9SV1NURF9TSVpFX01BWDsNCg0KICAgIGZvciAoc2l6ZV90IGkgPSAwOyBfcndfY29udF90 ZXN0X2NvdW50OyArK2kpIHsNCiAgICAgICAgaWYgKGZpZCA9PSBfcndfY29udF90ZXN0cyBb aV0ud2hpY2gpIHsNCiAgICAgICAgICAgIGlueCA9IGk7DQogICAgICAgICAgICBicmVhazsN CiAgICAgICAgfQ0KICAgIH0NCg0KICAgIFJXX0FTU0VSVCAoaW54IDwgX1JXU1REX1NJWkVf TUFYKTsNCg0KICAgIHJldHVybiBpbng7DQp9DQoNCi8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8N Cg0Kc3RhdGljIGNvbnN0IGNoYXIqDQpfcndfY2xhc3NfbmFtZSAoY29uc3QgQ29udGFpbmVy RnVuYyAmIGZ1bmMpDQp7DQogICAgcmV0dXJuIF9yd19jb250X25hbWVzIFtmdW5jLmNvbnRf aWRfXTsNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovLyBhcHBlbmRzIHRoZSBz aWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB3aGljaA0KLy8gdG8gdGhl IHByb3ZpZGVkIGJ1ZmZlcjsgd2hlbiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG51bGwsDQov LyBhcHBlbmRzIHRoZSBtbmVtb25pYyByZXByZXNlbnRpbmcgdGhlIHNpZ25hdHVyZSwgaW5j bHVkaW5nDQovLyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24sIGFzIHNwZWNpZmllZCBieSB0 aGUgdGhpcmQgYXJndW1lbnQNCnN0YXRpYyB2b2lkDQpfcndfc2lnY2F0IChjaGFyICoqcGJ1 Ziwgc2l6ZV90ICpwYnVmc2l6ZSwNCiAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lckZ1bmMg KmZ1bmMsDQogICAgICAgICAgICBzaXplX3QgICAgICAgICAgICAgICB3aGljaCA9IDApDQp7 DQogICAgLy8gZm9yIGNvbnZlbmllbmNlDQogICAgdHlwZWRlZiBDb250YWluZXJJZHMgSWRz Ow0KDQogICAgaWYgKGZ1bmMpDQogICAgICAgIHdoaWNoID0gZnVuYy0+d2hpY2hfOw0KDQog ICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGEgbWVtYmVyIGZ1bmN0 aW9uDQogICAgY29uc3QgYm9vbCBpc19tZW1iZXIgPSAwICE9IChJZHM6OmJpdF9tZW1iZXIg JiB3aGljaCk7DQoNCiAgICAvLyBnZXQgdGhlIGJpdG1hcCBkZXNjcmliaW5nIHRoZSBmdW5j dGlvbidzIGFyZ3VtZW50IHR5cGVzDQogICAgaW50IGFyZ21hcCA9ICh3aGljaCAmIH5JZHM6 OmJpdF9tZW1iZXIpID4+IElkczo6ZmlkX2JpdHM7DQoNCiAgICAvLyBkZXRlcm1pbmUgd2hl dGhlciB0aGUgZnVuY3Rpb24gaXMgYSBjb25zdCBtZW1iZXIgZnVuY3Rpb24NCiAgICBib29s IGlzX2NvbnN0X21lbWJlciA9DQogICAgICAgIGlzX21lbWJlciAmJiBJZHM6OmFyZ19jY29u dCA9PSAoYXJnbWFwICYgSWRzOjphcmdfbWFzayk7DQoNCiAgICAvLyByZW1vdmUgdGhlICp0 aGlzIGFyZ3VtZW50IGlmIHRoZSBmdW5jdGlvbiBpcyBhIG1lbWJlcg0KICAgIGlmIChpc19t ZW1iZXIpDQogICAgICAgIGFyZ21hcCA+Pj0gSWRzOjphcmdfYml0czsNCg0KICAgIGNvbnN0 IGNoYXIqIGZ1bmNuYW1lID0gMDsNCg0KICAgIGlmICgwID09IGZ1bmMpIHsNCiAgICAgICAg Y29uc3QgSWRzOjpGdW5jSWQgZmlkID0gSWRzOjpGdW5jSWQgKHdoaWNoICYgQ29udGFpbmVy SWRzOjpmaWRfbWFzayk7DQoNCiAgICAgICAgc3dpdGNoIChmaWQpIHsNCiAgICAgICAgICAg IC8vIHRyYW5zbGF0ZSBuYW1lcyB3aXRoIGZ1bmt5IGNoYXJhY3RlcnMgdG8gbW5lbW9uaWNz DQogICAgICAgIGNhc2UgSWRzOjpmaWRfY3RvcjogICAgICAgICAgZnVuY25hbWUgPSAiY3Rv ciI7IGJyZWFrOw0KICAgICAgICBjYXNlIElkczo6ZmlkX29wX2luZGV4OiAgICAgIGZ1bmNu YW1lID0gIm9wX2luZGV4IjsgYnJlYWs7DQogICAgICAgIGNhc2UgSWRzOjpmaWRfb3Bfc2V0 OiAgICAgICAgZnVuY25hbWUgPSAib3BfYXNzaWduIjsgYnJlYWs7DQogICAgICAgIGNhc2Ug SWRzOjpmaWRfb3BfZXF1YWw6ICAgICAgZnVuY25hbWUgPSAib3BfZXF1YWwiOyBicmVhazsN CiAgICAgICAgY2FzZSBJZHM6OmZpZF9vcF9sZXNzOiAgICAgICBmdW5jbmFtZSA9ICJvcF9s ZXNzIjsgYnJlYWs7DQogICAgICAgIGNhc2UgSWRzOjpmaWRfb3Bfbm90X2VxdWFsOiAgZnVu Y25hbWUgPSAib3Bfbm90X2VxdWFsIjsgYnJlYWs7DQogICAgICAgIGNhc2UgSWRzOjpmaWRf b3BfZ3JlYXRlcjogICAgZnVuY25hbWUgPSAib3BfZ3JlYXRlciI7IGJyZWFrOw0KICAgICAg ICBjYXNlIElkczo6ZmlkX29wX2dyZWF0ZXJfZXF1YWw6IGZ1bmNuYW1lID0gIm9wX2dyZWF0 ZXJfZXF1YWwiOyBicmVhazsNCiAgICAgICAgY2FzZSBJZHM6OmZpZF9vcF9sZXNzX2VxdWFs OiBmdW5jbmFtZSA9ICJvcF9sZXNzX2VxdWFsIjsgYnJlYWs7DQoNCiAgICAgICAgY2FzZSBJ ZHM6OmZpZF9nZXRfYWxsb2NhdG9yOg0KICAgICAgICBjYXNlIElkczo6ZmlkX2VtcHR5Og0K ICAgICAgICBjYXNlIElkczo6ZmlkX3NpemU6DQogICAgICAgIGNhc2UgSWRzOjpmaWRfbWF4 X3NpemU6DQogICAgICAgICAgICAvLyBwcmV2ZW50IGFwcGVuZGluZyB0aGUgIl9jb25zdCIg Yml0IHRvIHRoZSBtbmVtb25pY3MNCiAgICAgICAgICAgIC8vIG9mIG1lbWJlciBmdW5jdGlv bnMgbm90IG92ZXJsb2FkZWQgb24gY29uc3QNCiAgICAgICAgICAgIGlzX2NvbnN0X21lbWJl ciA9IGZhbHNlOw0KDQogICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gNCg0KICAgICAgICBk ZWZhdWx0OiB7DQogICAgICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIGNvbnQgZnVuY3Rpb24g bmFtZSAoZm9yIGJyaWVmIG91dHB1dCkNCiAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuZnVu Y3MgPQ0KICAgICAgICAgICAgICAgIHNpemVvZiBfcndfZnVuY19uYW1lcyAvIHNpemVvZiAq X3J3X2Z1bmNfbmFtZXM7DQoNCiAgICAgICAgICAgIFJXX0FTU0VSVCAoc2l6ZV90IChmaWQp IDwgbmZ1bmNzKTsNCg0KICAgICAgICAgICAgZnVuY25hbWUgPSBfcndfZnVuY19uYW1lcyBb ZmlkXTsNCiAgICAgICAgICAgIFJXX0FTU0VSVCAoMCAhPSBmdW5jbmFtZSk7DQogICAgICAg ICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8gaXRl cmF0b3IgbmFtZSBmb3IgbWVtYmVyIHRlbXBsYXRlcywgZW1wdHkgY29udCBmb3Igb3RoZXIg ZnVuY3Rpb25zDQogICAgY29uc3QgY2hhciogY29uc3QgaW5hbWUgPSBmdW5jID8gX3J3X2l0 ZXJfbmFtZXMgW2Z1bmMtPml0ZXJfaWRfXSA6ICIiOw0KDQogICAgcndfYXNucHJpbnRmIChw YnVmLCBwYnVmc2l6ZSwNCiAgICAgICAgIiV7K30lez99JXMlez99X2NvbnN0JXs7fSV7On0l ez99PCVzPiV7O30oJXs7fSIsDQogICAgICAgIDAgPT0gZnVuYywgZnVuY25hbWUsIGlzX2Nv bnN0X21lbWJlciwgMCAhPSAqaW5hbWUsIGluYW1lKTsNCg0KICAgIGNoYXIgaW5hbWVfYnVm IFs4MF07DQogICAgKmluYW1lX2J1ZiA9ICdcMCc7DQoNCiAgICAvLyBpdGVyYXRlIHRocm91 Z2ggdGhlIG1hcCBvZiBhcmd1bWVudCB0eXBlcyBvbmUgZmllbGQgYXQgYSB0aW1lDQogICAg Ly8gZGV0ZXJtaW5pbmcgYW5kIGZvcm1hdHRpbmcgdGhlIHR5cGUgb2YgZWFjaCBhcmd1bWVu dCB1bnRpbA0KICAgIC8vIHZvaWQgaXMgcmVhY2hlZA0KICAgIGZvciAoc2l6ZV90IGFyZ25v ID0gMDsgYXJnbWFwOyArK2FyZ25vLCBhcmdtYXAgPj49IElkczo6YXJnX2JpdHMpIHsNCg0K ICAgICAgICBjb25zdCBjaGFyKiBwZnggPSAiIjsNCiAgICAgICAgY29uc3QgY2hhciogc2Z4 ID0gIiI7DQoNCiAgICAgICAgY29uc3QgaW50IGFyZ3R5cGUgPSBhcmdtYXAgJiBJZHM6OmFy Z19tYXNrOw0KDQogICAgICAgIGNvbnN0IGNoYXIqIHRuYW1lID0gMDsNCg0KICAgICAgICBp ZiAoZnVuYykgew0KICAgICAgICAgICAgc3dpdGNoIChhcmd0eXBlKSB7DQogICAgICAgICAg ICBjYXNlIElkczo6YXJnX3NpemU6ICB0bmFtZSA9ICJzaXplX3R5cGUiOyBicmVhazsNCiAg ICAgICAgICAgIGNhc2UgSWRzOjphcmdfdmFsOiAgIHRuYW1lID0gInZhbHVlX3R5cGUiOyBi cmVhazsNCiAgICAgICAgICAgIGNhc2UgSWRzOjphcmdfcmVmOiAgIHRuYW1lID0gInJlZmVy ZW5jZSI7IGJyZWFrOw0KICAgICAgICAgICAgY2FzZSBJZHM6OmFyZ19jcmVmOiAgdG5hbWUg PSAiY29uc3RfcmVmZXJlbmNlIjsgYnJlYWs7DQogICAgICAgICAgICBjYXNlIElkczo6YXJn X2l0ZXI6ICB0bmFtZSA9ICJpdGVyYXRvciI7IGJyZWFrOw0KICAgICAgICAgICAgY2FzZSBJ ZHM6OmFyZ19jaXRlcjogdG5hbWUgPSAiY29uc3RfaXRlcmF0b3IiOyBicmVhazsNCiAgICAg ICAgICAgIGNhc2UgSWRzOjphcmdfcmFuZ2U6DQogICAgICAgICAgICAgICAgaWYgKCdcMCcg PT0gKmluYW1lX2J1Zikgew0KICAgICAgICAgICAgICAgICAgICBzdHJjcHkgKGluYW1lX2J1 ZiwgaW5hbWUpOw0KICAgICAgICAgICAgICAgICAgICBzdHJjYXQgKGluYW1lX2J1ZiwgIiwg Iik7DQogICAgICAgICAgICAgICAgICAgIHN0cmNhdCAoaW5hbWVfYnVmLCBpbmFtZSk7DQog ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRuYW1lID0gaW5hbWVfYnVmOw0K ICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBjYXNlIElkczo6YXJnX2Nj b250Og0KICAgICAgICAgICAgICAgIHBmeCAgID0gImNvbnN0ICI7DQogICAgICAgICAgICAg ICAgLy8gZmFsbCB0aHJvdWdoDQogICAgICAgICAgICBjYXNlIElkczo6YXJnX2NvbnQ6DQog ICAgICAgICAgICAgICAgdG5hbWUgPSBfcndfY2xhc3NfbmFtZSAoKmZ1bmMpOw0KICAgICAg ICAgICAgICAgIHNmeCAgID0gIiYiOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAg ICAgICAgICBjYXNlIElkczo6YXJnX2FsbG9jOiB0bmFtZSA9ICJjb25zdCBhbGxvY2F0b3Jf dHlwZSYiOyBicmVhazsNCiAgICAgICAgICAgIGNhc2UgSWRzOjphcmdfcHJlZDogIHRuYW1l ID0gIlByZWRpY2F0ZSI7IGJyZWFrOw0KICAgICAgICAgICAgY2FzZSBJZHM6OmFyZ19icHJl ZDogdG5hbWUgPSAiQmluYXJ5UHJlZGljYXRlIjsgYnJlYWs7DQogICAgICAgICAgICBjYXNl IElkczo6YXJnX2NvbXA6ICB0bmFtZSA9ICJDb21wYXJlIjsgYnJlYWs7DQogICAgICAgICAg ICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBzd2l0Y2ggKGFy Z3R5cGUpIHsNCiAgICAgICAgICAgIGNhc2UgSWRzOjphcmdfc2l6ZTogIHRuYW1lID0gInNp emUiOyBicmVhazsNCiAgICAgICAgICAgIGNhc2UgSWRzOjphcmdfdmFsOiAgIHRuYW1lID0g InZhbCI7IGJyZWFrOw0KICAgICAgICAgICAgY2FzZSBJZHM6OmFyZ19yZWY6ICAgdG5hbWUg PSAicmVmIjsgYnJlYWs7DQogICAgICAgICAgICBjYXNlIElkczo6YXJnX2NyZWY6ICB0bmFt ZSA9ICJjcmVmIjsgYnJlYWs7DQogICAgICAgICAgICBjYXNlIElkczo6YXJnX2l0ZXI6ICB0 bmFtZSA9ICJpdGVyIjsgYnJlYWs7DQogICAgICAgICAgICBjYXNlIElkczo6YXJnX2NpdGVy OiB0bmFtZSA9ICJjaXRlciI7IGJyZWFrOw0KICAgICAgICAgICAgY2FzZSBJZHM6OmFyZ19y YW5nZTogdG5hbWUgPSAicmFuZ2UiOyBicmVhazsNCiAgICAgICAgICAgIGNhc2UgSWRzOjph cmdfY29udDogIHRuYW1lID0gImNvbnQiOyBicmVhazsNCiAgICAgICAgICAgIGNhc2UgSWRz OjphcmdfY2NvbnQ6IHRuYW1lID0gImNjb250IjsgYnJlYWs7DQogICAgICAgICAgICBjYXNl IElkczo6YXJnX2FsbG9jOiB0bmFtZSA9ICJhbGxvYyI7IGJyZWFrOw0KICAgICAgICAgICAg Y2FzZSBJZHM6OmFyZ19wcmVkOiAgdG5hbWUgPSAicHJlZCI7IGJyZWFrOw0KICAgICAgICAg ICAgY2FzZSBJZHM6OmFyZ19icHJlZDogdG5hbWUgPSAiYnByZWQiOyBicmVhazsNCiAgICAg ICAgICAgIGNhc2UgSWRzOjphcmdfY29tcDogIHRuYW1lID0gImNvbXAiOyBicmVhazsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIFJXX0FTU0VSVCAoMCAhPSB0bmFt ZSk7DQoNCiAgICAgICAgaWYgKCAgIDAgPT0gZnVuYyB8fCBpc19tZW1iZXINCiAgICAgICAg ICAgIHx8IElkczo6YXJnX2NvbnQgIT0gYXJndHlwZSAmJiBJZHM6OmFyZ19jY29udCAhPSBh cmd0eXBlKSB7DQogICAgICAgICAgICAgICAgLy8gYXBwZW5kIHRoZSBuYW1lIG9yIG1uZW1v bmljIG9mIHRoZSBhcmd1bWVudCB0eXBlDQogICAgICAgICAgICAgICAgcndfYXNucHJpbnRm IChwYnVmLCBwYnVmc2l6ZSwgIiV7K30lez99XyV7On0lez99LCAlezt9JXs7fSVzJXMlcyIs DQogICAgICAgICAgICAgICAgICAgIDAgPT0gZnVuYywgMCA8IGFyZ25vLCBwZngsIHRuYW1l LCBzZngpOw0KICAgICAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIC8v IGluIG5vbi1tZW1iZXIgZnVuY3Rpb25zIHVzZSAke0NMQVNTfSB0byBmb3JtYXQNCiAgICAg ICAgICAgIC8vIHRoZSBjb250IGFyZ3VtZW50IGluIG9yZGVyIHRvIGV4cGFuZA0KICAgICAg ICAgICAgLy8gaXRzIHRlbXBsYXRlIGFyZ3VtZW50IGNvbnQNCiAgICAgICAgICAgIHJ3X2Fz bnByaW50ZiAocGJ1ZiwgcGJ1ZnNpemUsDQogICAgICAgICAgICAgICAgIiV7K30lez99LCAl ezt9JXs/fWNvbnN0ICV7O30leyRDTEFTU30mIiwNCiAgICAgICAgICAgICAgICAwIDwgYXJn bm8sIElkczo6YXJnX2Njb250ID09IGFyZ3R5cGUpOw0KDQogICAgICAgIH0NCiAgICB9DQoN CiAgICBpZiAoZnVuYykNCiAgICAgICAgcndfYXNucHJpbnRmIChwYnVmLCBwYnVmc2l6ZSwg IiV7K30pJXs/fSBjb25zdCV7O30iLCBpc19jb25zdF9tZW1iZXIpOw0KfQ0KDQovKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovDQoNCi8vIHJldHVybnMgdGhlIHplcm8tYmFzZWQgaW5kZXggb2Yg dGhlIGFyZ3VtZW50IHR5cGUgc3BlY2lmaWVkDQovLyBieSBhcmcgaW4gdGhlIGZ1bmN0aW9u IHNpZ25hdHVyZSBnaXZlbiBieSB3aGljaA0Kc3RhdGljIGludA0KX3J3X2FyZ25vIChzaXpl X3Qgd2hpY2gsIGludCBhcmcpDQp7DQogICAgLy8gZ2V0IHRoZSBiaXRtYXAgZGVzY3JpYmlu ZyB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudCB0eXBlcw0KICAgIGludCBhcmdtYXAgPSAod2hp Y2ggJiB+Q29udGFpbmVySWRzOjpiaXRfbWVtYmVyKSA+PiBDb250YWluZXJJZHM6OmZpZF9i aXRzOw0KDQogICAgaW50IGFyZ25vID0gMDsNCg0KICAgIC8vIGl0ZXJhdGUgb3ZlciBhcmd1 bWVudCB0eXBlcyBsb29raW5nIGZvciB0aGUgZmlyc3Qgb25lDQogICAgLy8gdGhhdCBlcXVh bHMgYXJnDQogICAgZm9yICg7IGFyZ21hcDsgYXJnbWFwID4+PSBDb250YWluZXJJZHM6OmFy Z19iaXRzLCArK2FyZ25vKSB7DQogICAgICAgIGlmICgoYXJnbWFwICYgQ29udGFpbmVySWRz OjphcmdfbWFzaykgPT0gYXJnKSB7DQogICAgICAgICAgICByZXR1cm4gYXJnbm87DQogICAg ICAgIH0NCiAgICB9DQoNCiAgICAvLyByZXR1cm4gLTEgd2hlbiB0aGUgZnVuY3Rpb24gZG9l c24ndCB0YWtlIGFuIGFyZ3VtZW50DQogICAgLy8gb2YgdGhlIHNwZWNpZmllZCB0eXBlDQog ICAgcmV0dXJuIC0xOw0KfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCi8vIHRlbXBv cmFyeSwgc2h1bGQgYmUgZGVmaW5lZCBpbiAyMy5saXN0LmgNCnN0cnVjdCBMaXN0SWRzIDog Q29udGFpbmVySWRzDQp7DQogICAgZW51bSBPdmVybG9hZElkIHt9Ow0KfTsNCg0Kc3RhdGlj IHZvaWQNCl9yd19saXN0X3NpZ2NhdCAoY2hhcioqIHBidWYsIHNpemVfdCAqIHBidWZzaXpl LCBMaXN0SWRzOjpPdmVybG9hZElkIHdoaWNoLA0KICAgICAgICAgICAgICAgICBib29sIHNl bGYsIGNvbnN0IGNoYXIqIHN0ciwgc2l6ZV90IHN0cl9sZW4sDQogICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIqIGFyZywgc2l6ZV90IGFyZ19sZW4sDQogICAgICAgICAgICAgICAgIGNv bnN0IENvbnRhaW5lclRlc3RDYXNlICZ0Y2FzZSkNCnsNCiAgICAvLyB0ZW1wb3JhcnkgZW1w dHkNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovLyB0ZW1wb3JhcnksIHNob3Vs ZCBiZSBkZWZpbmVkIGluIDIzLmRlcXVlLmgNCnN0cnVjdCBWZWN0b3JJZHMgOiBDb250YWlu ZXJJZHMNCnsNCiAgICBlbnVtIE92ZXJsb2FkSWQge307DQp9Ow0KDQpzdGF0aWMgdm9pZA0K X3J3X3ZlY3Rvcl9zaWdjYXQgKGNoYXIqKiBwYnVmLCBzaXplX3QgKiBwYnVmc2l6ZSwgVmVj dG9ySWRzOjpPdmVybG9hZElkIHdoaWNoLA0KICAgICAgICAgICAgICAgICAgIGJvb2wgc2Vs ZiwgY29uc3QgY2hhciogc3RyLCBzaXplX3Qgc3RyX2xlbiwNCiAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyKiBhcmcsIHNpemVfdCBhcmdfbGVuLA0KICAgICAgICAgICAgICAgICAg IGNvbnN0IENvbnRhaW5lclRlc3RDYXNlICZ0Y2FzZSkNCnsNCiAgICAvLyB0ZW1wb3Jhcnkg ZW1wdHkNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovLyB0ZW1wb3JhcnksIHNo b3VsZCBiZSBkZWZpbmVkIGluIDIzLmRlcXVlLmgNCnN0cnVjdCBEZXF1ZUlkcyA6IENvbnRh aW5lcklkcw0Kew0KICAgIGVudW0gT3ZlcmxvYWRJZCB7fTsNCn07DQoNCnN0YXRpYyB2b2lk DQpfcndfZGVxdWVfc2lnY2F0IChjaGFyKiogcGJ1Ziwgc2l6ZV90ICogcGJ1ZnNpemUsIERl cXVlSWRzOjpPdmVybG9hZElkIHdoaWNoLA0KICAgICAgICAgICAgICAgICAgYm9vbCBzZWxm LCBjb25zdCBjaGFyKiBzdHIsIHNpemVfdCBzdHJfbGVuLA0KICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciogYXJnLCBzaXplX3QgYXJnX2xlbiwNCiAgICAgICAgICAgICAgICAgIGNv bnN0IENvbnRhaW5lclRlc3RDYXNlICZ0Y2FzZSkNCnsNCiAgICAvLyB0ZW1wb3JhcnkgZW1w dHkNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovLyB0ZW1wb3JhcnksIHNob3Vs ZCBiZSBkZWZpbmVkIGluIDIzLnF1ZXVlLmgNCnN0cnVjdCBRdWV1ZUlkcyA6IENvbnRhaW5l cklkcw0Kew0KICAgIGVudW0gT3ZlcmxvYWRJZCB7fTsNCn07DQoNCnN0YXRpYyB2b2lkDQpf cndfcXVldWVfc2lnY2F0IChjaGFyKiogcGJ1Ziwgc2l6ZV90ICogcGJ1ZnNpemUsIFF1ZXVl SWRzOjpPdmVybG9hZElkIHdoaWNoLA0KICAgICAgICAgICAgICAgICAgYm9vbCBzZWxmLCBj b25zdCBjaGFyKiBzdHIsIHNpemVfdCBzdHJfbGVuLA0KICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciogYXJnLCBzaXplX3QgYXJnX2xlbiwNCiAgICAgICAgICAgICAgICAgIGNvbnN0 IENvbnRhaW5lclRlc3RDYXNlICZ0Y2FzZSkNCnsNCiAgICAvLyB0ZW1wb3JhcnkgZW1wdHkN Cn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovLyB0ZW1wb3JhcnksIHNob3VsZCBi ZSBkZWZpbmVkIGluIDIzLnN0YWNrLmgNCnN0cnVjdCBTdGFja0lkcyA6IENvbnRhaW5lcklk cw0Kew0KICAgIGVudW0gT3ZlcmxvYWRJZCB7fTsNCn07DQoNCnN0YXRpYyB2b2lkDQpfcndf c3RhY2tfc2lnY2F0IChjaGFyKiogcGJ1Ziwgc2l6ZV90ICogcGJ1ZnNpemUsIFN0YWNrSWRz OjpPdmVybG9hZElkIHdoaWNoLA0KICAgICAgICAgICAgICAgICAgYm9vbCBzZWxmLCBjb25z dCBjaGFyKiBzdHIsIHNpemVfdCBzdHJfbGVuLA0KICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciogYXJnLCBzaXplX3QgYXJnX2xlbiwNCiAgICAgICAgICAgICAgICAgIGNvbnN0IENv bnRhaW5lclRlc3RDYXNlICZ0Y2FzZSkNCnsNCiAgICAvLyB0ZW1wb3JhcnkgZW1wdHkNCn0N Cg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovLyBzZXRzIHRoZSB7Q0xBU1N9LCB7RlVO Q30sIHtGVU5DU0lHfSwgYW5kIG9wdGlvbmFsbHkge0ZVTkNBTEx9DQovLyBlbnZpcm9ubWVu dCB2YXJpYWJsZXMgYXMgZm9sbG93czoNCi8vIENMQVNTOiAgIHRoZSBuYW1lIG9mIGNvbnQg c3BlY2lhbGl6YXRpb24NCi8vIEZVTkM6ICAgIHRoZSBuYW1lIG9mIHRoZSBjb250IGZ1bmN0 aW9uDQovLyBGVU5DU0lHOiB0aGUgbmFtZSBhbmQgc2lnbmF0dXJlIG9mIGEgc3BlY2lmaWMg b3ZlcmxvYWQNCi8vICAgICAgICAgIG9mIHRoZSBjb250IGZ1bmN0aW9uDQovLyBGVU5DQUxM OiBhIGNvbnQgZGVzY3JpYmluZyB0aGUgY2FsbCB0byB0aGUgY29udCBmdW5jdGlvbg0KLy8g ICAgICAgICAgd2l0aCBmdW5jdGlvbiB3aXRoIGZ1bmN0aW9uIGFyZ3VtZW50cyBleHBhbmRl ZCAoYXMgc3BlY2lmaWVkDQovLyAgICAgICAgICBieSB0aGUgVGVzdENhc2UgYXJndW1lbnQp DQpzdGF0aWMgdm9pZA0KX3J3X3NldHZhcnMgKGNvbnN0IENvbnRhaW5lckZ1bmMgICAgICZm dW5jLA0KICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lclRlc3RDYXNlICpwY2FzZSA9IDAp DQp7DQogICAgY2hhciogIGJ1ZiAgICAgPSAwOw0KICAgIHNpemVfdCBidWZzaXplID0gMDsN Cg0KICAgIGNvbnN0IGNoYXIqIGNvbnN0IGNsYXNzX25hbWUgPSBfcndfY2xhc3NfbmFtZSAo ZnVuYyk7DQoNCiAgICBpZiAoMCA9PSBwY2FzZSkgew0KICAgICAgICAvLyBzZXQgdGhlIHtF bGVtfSwge0FsbG9jYXRvcn0sIHtJdGVyYXRvcn0gYW5kIHtDb250YWluZXJ9DQogICAgICAg IC8vIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0 eXBlDQogICAgICAgIC8vIGFuZCB0aGUgQWxsb2NhdG9yIGFuZCBJdGVyYXRvciBhbmQgQ29u dGFpbmVyIHNwZWNpYWxpemF0aW9ucw0KICAgICAgICByd19mcHJpbnRmICgwLCAiJXskRWxl bSE6Kn0iLCBfcndfZWxlbV9uYW1lcyBbZnVuYy5lbGVtX2lkX10pOw0KDQogICAgICAgIHJ3 X2ZwcmludGYgKDAsICIleyRBbGxvY2F0b3IhOip9IiwgX3J3X2FsbG9jX25hbWVzIFtmdW5j LmFsbG9jX2lkX10pOw0KDQogICAgICAgIHJ3X2ZwcmludGYgKDAsICIleyRJdGVyYXRvciE6 Kn0iLCBfcndfaXRlcl9uYW1lcyBbZnVuYy5pdGVyX2lkX10pOw0KDQogICAgICAgIHJ3X2Zw cmludGYgKDAsICIleyRDb250YWluZXIhOip9IiwgY2xhc3NfbmFtZSk7DQoNCiAgICAgICAg Ly8gc2V0IHRoZSB7Q0xBU1N9LCB7RlVOQ30sIGFuZCB7RlVOQ1NJR30gZW52aXJvbm1lbnQg dmFyaWFibGVzDQogICAgICAgIC8vIHRvIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWFsaXphdGlv biBvZiB0aGUgdGVtcGxhdGUsIHRoZSBuYW1lDQogICAgICAgIC8vIG9mIHRoZSBjb250YWlu ZXIgZnVuY3Rpb24sIGFuZCB0aGUgbmFtZSBvZiB0aGUgb3ZlcmxvYWQgb2YgdGhlDQogICAg ICAgIC8vIGNvbnRhaW5lciBmdW5jdGlvbiwgcmVzcGVjdGl2ZWx5LCB3aGVuIG5vIHRlc3Qg Y2FzZSBpcyBnaXZlbg0KDQogICAgICAgIC8vIGZvcm1hdCBjb250YWluZXIgc3BlY2lhbGl6 YXRpb25zLCBsZWF2aW5nIG91dCB0aGUgbmFtZQ0KICAgICAgICAvLyBvZiB0aGUgZGVmYXVs dCBhbGxvY2F0b3IgZm9yIGJyZXZpdHkNCiAgICAgICAgcndfYXNucHJpbnRmICgmYnVmLCAm YnVmc2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAic3RkOjolczwlcyV7P30sICVzPCUy JHM+JXs7fT4iLA0KICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX25hbWUsDQogICAgICAg ICAgICAgICAgICAgICAgX3J3X2VsZW1fbmFtZXMgW2Z1bmMuZWxlbV9pZF9dLA0KICAgICAg ICAgICAgICAgICAgICAgIENvbnRhaW5lcklkczo6RGVmYXVsdEFsbG9jICE9IGZ1bmMuYWxs b2NfaWRfLA0KICAgICAgICAgICAgICAgICAgICAgIF9yd19hbGxvY19uYW1lcyBbZnVuYy5h bGxvY19pZF9dKTsNCg0KICAgICAgICAvLyBzZXQgdGhlIHtDTEFTU30gdmFyaWFibGUgdG8g dGhlIG5hbWUgb2YgdGhlIHNwZWNpYWxpemF0aW9uDQogICAgICAgIC8vIG9mIGNvbnRhaW5l cg0KICAgICAgICByd19mcHJpbnRmICgwLCAiJXskQ0xBU1MhOip9IiwgYnVmKTsNCiAgICAg ICAgZnJlZSAoYnVmKTsNCiAgICAgICAgYnVmICAgICA9IDA7DQogICAgICAgIGJ1ZnNpemUg PSAwOw0KDQogICAgICAgIC8vIGRldGVybWluZSB0aGUgY29udGFpbmVyIGZ1bmN0aW9uIG5h bWUNCiAgICAgICAgY29uc3Qgc2l6ZV90IGZ1bmNpbnggPSBmdW5jLndoaWNoXyAmIENvbnRh aW5lcklkczo6ZmlkX21hc2s7DQogICAgICAgIGNvbnN0IHNpemVfdCBuZnVuY3MgPSAgc2l6 ZW9mIF9yd19mdW5jX25hbWVzIC8gc2l6ZW9mICpfcndfZnVuY19uYW1lczsNCg0KICAgICAg ICBSV19BU1NFUlQgKGZ1bmNpbnggPCBuZnVuY3MpOw0KDQogICAgICAgIC8vIGdldCB0aGUg dW5kZWNvcmF0ZWQgZnVuY3Rpb24gbmFtZTsgY3RvcnMgYXJlIHRyZWF0ZWQNCiAgICAgICAg Ly8gc3BlY2lhbGx5IHNvIHRoYXQgd2UgY2FuIGhhdmUgc3RyaW5nLCB3c3RyaW5nLCBvcg0K ICAgICAgICAvLyBjb250LCBkZXBlbmRpbmcgb24gdGhlIHRlbXBsYXRlIGFyZ3VtZW50cw0K ICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBmdW5jbmFtZSA9IF9yd19mdW5jX25hbWVzIFtm dW5jaW54XSA/DQogICAgICAgICAgICBfcndfZnVuY19uYW1lcyBbZnVuY2lueF0gOiBjbGFz c19uYW1lOw0KDQogICAgICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBp cyBhIG1lbWJlciBmdW5jdGlvbg0KICAgICAgICBjb25zdCBib29sIGlzX21lbWJlciA9IDAg IT0gKGZ1bmMud2hpY2hfICYgQ29udGFpbmVySWRzOjpiaXRfbWVtYmVyKTsNCg0KICAgICAg ICAvLyBzZXQgdGhlIHtGVU5DfSB2YXJpYWJsZSB0byB0aGUgdW5xdWFsaWZpZWQvdW5kZWNv cmF0ZWQNCiAgICAgICAgLy8gbmFtZSBvZiB0aGUgY29udGFpbmVyIGZ1bmN0aW9uIChtZW1i ZXIgb3Igb3RoZXJ3aXNlKQ0KICAgICAgICByd19hc25wcmludGYgKCZidWYsICZidWZzaXpl LCAiJXs/fXN0ZDo6JXs7fSVzIiwNCiAgICAgICAgICAgICFpc19tZW1iZXIsIGZ1bmNuYW1l KTsNCg0KICAgICAgICByd19mcHJpbnRmICgwLCAiJXskRlVOQyE6Kn0iLCBidWYpOw0KDQog ICAgICAgIC8vIGFwcGVuZCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlDQogICAgICAgIF9yd19z aWdjYXQgKCZidWYsICZidWZzaXplLCAmZnVuYyk7DQoNCiAgICAgICAgcndfZnByaW50ZiAo MCwgIiV7JEZVTkNTSUchOip9IiwgYnVmKTsNCiAgICAgICAgZnJlZSAoYnVmKTsNCg0KICAg ICAgICByZXR1cm47DQogICAgfQ0KDQogICAgLy8gZG8gdGhlIGZ1bmN0aW9uIGNhbGwgYXJn dW1lbnRzIHJlZmVyZW5jZSAqdGhpcz8NCiAgICBjb25zdCBib29sIHNlbGYgPSAwID09IHBj YXNlLT5hcmc7DQoNCiAgICBjaGFyIHN0cl9idWYgWzI1Nl07DQogICAgY2hhciBhcmdfYnVm IFsyNTZdOw0KDQogICAgY2hhciAqc3RyOw0KICAgIGNoYXIgKmFyZzsNCg0KICAgIHNpemVf dCBzdHJfbGVuID0gc2l6ZW9mIHN0cl9idWY7DQogICAgc2l6ZV90IGFyZ19sZW4gPSBzaXpl b2YgYXJnX2J1ZjsNCg0KICAgIGlmIChwY2FzZS0+c3RyKQ0KICAgICAgICBzdHIgPSByd19l eHBhbmQgKHN0cl9idWYsIHBjYXNlLT5zdHIsIHBjYXNlLT5zdHJfbGVuLCAmc3RyX2xlbik7 DQogICAgZWxzZQ0KICAgICAgICBzdHIgPSAwOw0KDQogICAgaWYgKHBjYXNlLT5hcmcpDQog ICAgICAgIGFyZyA9IHJ3X2V4cGFuZCAoYXJnX2J1ZiwgcGNhc2UtPmFyZywgcGNhc2UtPmFy Z19sZW4sICZhcmdfbGVuKTsNCiAgICBlbHNlDQogICAgICAgIGFyZyA9IDA7DQoNCiAgICAv LyBkZXRlcm1pbmUgd2hldGhlciB0aGUgZnVuY3Rpb24gaXMgYSBtZW1iZXIgZnVuY3Rpb24N CiAgICBjb25zdCBib29sIGlzX21lbWJlciA9IDAgIT0gKGZ1bmMud2hpY2hfICYgQ29udGFp bmVySWRzOjpiaXRfbWVtYmVyKTsNCg0KICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRoZSBm dW5jdGlvbiBpcyBhIGN0b3INCiAgICBib29sIGlzX2N0b3IgPSBDb250YWluZXJJZHM6OmZp ZF9jdG9yID09IChmdW5jLndoaWNoXyAmIENvbnRhaW5lcklkczo6ZmlkX21hc2spOw0KDQog ICAgaWYgKGlzX2N0b3IpIHsNCiAgICAgICAgLy8gZm9yIGN0b3JzIGFwcGVuZCBqdXN0IHRo ZSBjbGFzcyBuYW1lIGhlcmUNCiAgICAgICAgLy8gdGhlIGNsYXNzIG5hbWUgd2lsbCBpbnNl cnRlZCBiZWxvdyBkdXJpbmcgYXJndW1lbnQNCiAgICAgICAgLy8gZm9ybWF0dGluZw0KICAg ICAgICByd19hc25wcmludGYgKCZidWYsICZidWZzaXplLCAiJXskQ0xBU1N9OjolcyIsIGNs YXNzX25hbWUpOw0KICAgIH0NCiAgICBlbHNlIGlmIChpc19tZW1iZXIpIHsNCiAgICAgICAg Ly8gZm9yIG90aGVyIG1lbWJlcnMgYXBwZW5kIHRoZSBjdG9yIGFyZ3VtZW50KHMpIGZvbGxv d2VkDQogICAgICAgIC8vIGJ5IHRoZSBjb250IG1lbWJlciBmdW5jdGlvbiBuYW1lDQogICAg ICAgIHJ3X2FzbnByaW50ZiAoJmJ1ZiwgJmJ1ZnNpemUsDQogICAgICAgICAgICAgICAgICAg ICAgIiV7JENMQVNTfSAoJXs/fSV7IypzfSV7O30pLiV7JEZVTkN9IiwNCiAgICAgICAgICAg ICAgICAgICAgICBzdHIgIT0gMCwgaW50IChzdHJfbGVuKSwgc3RyKTsNCiAgICB9DQogICAg ZWxzZSB7DQogICAgICAgIC8vIGZvciBub24tbWVtYmVycyBhcHBlbmQganVzdCB0aGUgZnVu Y3Rpb24gbmFtZSBoZXJlDQogICAgICAgIC8vIHRoZSBjbGFzcyBuYW1lIHdpbGwgaW5zZXJ0 ZWQgYmVsb3cgZHVyaW5nIGFyZ3VtZW50DQogICAgICAgIC8vIGZvcm1hdHRpbmcNCiAgICAg ICAgcndfYXNucHJpbnRmICgmYnVmLCAmYnVmc2l6ZSwgIiV7JEZVTkN9Iik7DQogICAgfQ0K DQogICAgLy8gZm9ybWF0IGFuZCBhcHBlbmQgY29udGFpbmVyIGZ1bmN0aW9uIGFyZ3VtZW50 cyBhYmJyZXZpYXRpbmcgY29tcGxleA0KICAgIC8vIGV4cHJlc3Npb25zIGFzIG11Y2ggYXMg cG9zc2libGUgdG8gbWFrZSB0aGVtIGVhc3kgdG8gdW5kZXJzdGFuZA0KICAgIHN3aXRjaCAo ZnVuYy5jb250X2lkXykgew0KDQogICAgY2FzZSBDb250YWluZXJJZHM6Okxpc3Q6DQogICAg ICAgIF9yd19saXN0X3NpZ2NhdCAoJmJ1ZiwgJmJ1ZnNpemUsDQogICAgICAgICAgICBfUldT VERfU1RBVElDX0NBU1QgKExpc3RJZHM6Ok92ZXJsb2FkSWQsIGZ1bmMud2hpY2hfKSwNCiAg ICAgICAgICAgIHNlbGYsIHN0ciwgc3RyX2xlbiwgYXJnLCBhcmdfbGVuLCAqcGNhc2UpOw0K ICAgICAgICBicmVhazsNCg0KICAgIGNhc2UgQ29udGFpbmVySWRzOjpWZWN0b3I6DQogICAg ICAgIF9yd192ZWN0b3Jfc2lnY2F0ICgmYnVmLCAmYnVmc2l6ZSwNCiAgICAgICAgICAgIF9S V1NURF9TVEFUSUNfQ0FTVCAoVmVjdG9ySWRzOjpPdmVybG9hZElkLCBmdW5jLndoaWNoXyks DQogICAgICAgICAgICBzZWxmLCBzdHIsIHN0cl9sZW4sIGFyZywgYXJnX2xlbiwgKnBjYXNl KTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIENvbnRhaW5lcklkczo6RGVxdWU6DQog ICAgICAgIF9yd19kZXF1ZV9zaWdjYXQgKCZidWYsICZidWZzaXplLA0KICAgICAgICAgICAg X1JXU1REX1NUQVRJQ19DQVNUIChEZXF1ZUlkczo6T3ZlcmxvYWRJZCwgZnVuYy53aGljaF8p LA0KICAgICAgICAgICAgc2VsZiwgc3RyLCBzdHJfbGVuLCBhcmcsIGFyZ19sZW4sICpwY2Fz ZSk7DQogICAgICAgIGJyZWFrOw0KDQogICAgY2FzZSBDb250YWluZXJJZHM6OlF1ZXVlOg0K ICAgICAgICBfcndfcXVldWVfc2lnY2F0ICgmYnVmLCAmYnVmc2l6ZSwNCiAgICAgICAgICAg IF9SV1NURF9TVEFUSUNfQ0FTVCAoUXVldWVJZHM6Ok92ZXJsb2FkSWQsIGZ1bmMud2hpY2hf KSwNCiAgICAgICAgICAgIHNlbGYsIHN0ciwgc3RyX2xlbiwgYXJnLCBhcmdfbGVuLCAqcGNh c2UpOw0KICAgICAgICBicmVhazsNCg0KICAgIGNhc2UgQ29udGFpbmVySWRzOjpTdGFjazoN CiAgICAgICAgX3J3X3N0YWNrX3NpZ2NhdCAoJmJ1ZiwgJmJ1ZnNpemUsDQogICAgICAgICAg ICBfUldTVERfU1RBVElDX0NBU1QgKFN0YWNrSWRzOjpPdmVybG9hZElkLCBmdW5jLndoaWNo XyksDQogICAgICAgICAgICBzZWxmLCBzdHIsIHN0cl9sZW4sIGFyZywgYXJnX2xlbiwgKnBj YXNlKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICBkZWZhdWx0Og0KICAgICAgICBSV19BU1NF UlQgKCEidW5rbm93biBjb250YWluZXIgaWQiKTsNCiAgICB9DQoNCiAgICByd19mcHJpbnRm ICgwLCAiJXskRlVOQ0FMTCE6Kn0iLCBidWYpOw0KICAgIGZyZWUgKGJ1Zik7DQoNCiAgICBp ZiAoc3RyICE9IHN0cl9idWYpDQogICAgICAgIGRlbGV0ZVtdIHN0cjsNCg0KICAgIGlmIChh cmcgIT0gYXJnX2J1ZikNCiAgICAgICAgZGVsZXRlW10gYXJnOw0KfQ0KDQovKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovDQoNCi8vIGhlbHBlciBmdW5jdGlvbiB0byByZXZlcnNlIHN1YnN0cmlu ZyBpbiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlDQpfUldTVERfSU5URVJOQUwgQ29udGFpbmVy VGVzdENhc2UNCl9yd19yZXZlcnNlX3Jlc3VsdHMgKGNvbnN0IENvbnRhaW5lclRlc3RDYXNl ICZ0c3JjLA0KICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9mZiwgc2l6ZV90IGV4dCkN CnsNCiAgICAvLyBleHBhbmQgZXhwZWN0ZWQgcmVzdWx0cw0KICAgIHNpemVfdCByZXNfbGVu ID0gMDsNCiAgICBjaGFyKiBjb25zdCBuZXdfcmVzID0gcndfZXhwYW5kICgoY2hhciopMCwg dHNyYy5yZXMsIHRzcmMubnJlcywgJnJlc19sZW4pOw0KDQogICAgLy8gcmV2ZXJzZSB0aGVt DQogICAgY29uc3Qgc2l6ZV90IHJlc19vZmYgPSBvZmY7DQogICAgY29uc3Qgc2l6ZV90IHJl c19leHQgPSAoZXh0IDwgcmVzX2xlbiA/IGV4dCA6IHJlc19sZW4pIC0gMTsNCg0KICAgIGNo YXIqIGJlZyA9IG5ld19yZXMgKyByZXNfb2ZmOw0KICAgIGNoYXIqIGVuZCA9IGJlZyArIHJl c19leHQ7DQoNCiAgICBmb3IgKDsgYmVnIDwgZW5kOyArK2JlZywgLS1lbmQpIHsNCiAgICAg ICAgY29uc3QgY2hhciB0bXAgPSAqYmVnOw0KICAgICAgICAqYmVnID0gKmVuZDsNCiAgICAg ICAgKmVuZCA9IHRtcDsNCiAgICB9DQoNCiAgICAvLyBmb3JtIG5ldyB0ZXN0IGNhc2UNCiAg ICBjb25zdCBDb250YWluZXJUZXN0Q2FzZSBuZXdfY2FzZSA9IHsNCiAgICAgICAgdHNyYy5s aW5lLCB0c3JjLm9mZiwgdHNyYy5zaXplLCB0c3JjLm9mZjIsDQogICAgICAgIHRzcmMuc2l6 ZTIsIHRzcmMudmFsLCB0c3JjLnN0ciwgdHNyYy5zdHJfbGVuLA0KICAgICAgICB0c3JjLmFy ZywgdHNyYy5hcmdfbGVuLCBuZXdfcmVzLCByZXNfbGVuLCB0c3JjLmJ0aHJvdw0KICAgIH07 DQoNCiAgICByZXR1cm4gbmV3X2Nhc2U7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIFQsIGNs YXNzIEFsbG9jYXRvcj4NCnZvaWQNCl9yd19kaXNwYXRjaCAoVCosIEFsbG9jYXRvciosDQog ICAgICAgICAgICAgIFZvaWRGdW5jKiBjb25zdCAgICAqZmFycmF5LA0KICAgICAgICAgICAg ICBjb25zdCBDb250YWluZXJGdW5jICAgICAmZnVuYywNCiAgICAgICAgICAgICAgY29uc3Qg Q29udGFpbmVyVGVzdENhc2UgJnRjYXNlKQ0Kew0KICAgIHR5cGVkZWYgQ29udGFpbmVyVGVz dENhc2VEYXRhPFQ+IERhdGE7DQogICAgdHlwZWRlZiB2b2lkIFRlc3RGdW5jIChUKiwgQWxs b2NhdG9yKiwgY29uc3QgRGF0YSYpOw0KDQogICAgY29uc3Qgc2l6ZV90IGlueCA9IGZ1bmMu ZWxlbV9pZF8gKiAyICsgZnVuYy5hbGxvY19pZF87DQoNCiAgICBUZXN0RnVuYyogY29uc3Qg dGZ1bmMgPSBfUldTVERfUkVJTlRFUlBSRVRfQ0FTVCAoVGVzdEZ1bmMqLCBmYXJyYXkgW2lu eF0pOw0KDQogICAgaWYgKDAgPT0gdGZ1bmMpIHsNCiAgICAgICAgcndfZXJyb3IgKDAsIF9f RklMRV9fLCBfX0xJTkVfXywNCiAgICAgICAgICAgICAgICAgICJsb2dpYyBlcnJvcjogbnVs bCB0ZXN0IGZ1bmN0aW9uIGZvciAleyRGVU5DU0lHfSIpOw0KICAgICAgICByZXR1cm47DQog ICAgfQ0KDQogICAgY29uc3QgYm9vbCByZXZlcnNlX2l0ZXIgPQ0KICAgICAgICAgICBDb250 YWluZXJJZHM6OlJldmVyc2VJdGVyYXRvciAgICAgID09IGZ1bmMuaXRlcl9pZF8gDQogICAg ICAgIHx8IENvbnRhaW5lcklkczo6Q29uc3RSZXZlcnNlSXRlcmF0b3IgPT0gZnVuYy5pdGVy X2lkXzsNCg0KICAgIGNvbnN0IERhdGEgdGRhdGEgKGZ1bmMsIHRjYXNlKTsNCg0KICAgIGlm IChyZXZlcnNlX2l0ZXIpIHsNCiAgICAgICAgLy8gc3BlY2lhbCBwcm9jZXNzaW5nIGZvciBy ZXZlcnNlIGl0ZXJhdG9ycw0KDQogICAgICAgIGNvbnN0IHNpemVfdCBmdW5jX2lkID0gdGRh dGEuZnVuY18ud2hpY2hfICYgQ29udGFpbmVySWRzOjpmaWRfbWFzazsNCg0KICAgICAgICBj b25zdCBib29sIGxpa2VfY3RvciA9DQogICAgICAgICAgICAgICBDb250YWluZXJJZHM6OmZp ZF9jdG9yICAgPT0gZnVuY19pZCANCiAgICAgICAgICAgIHx8IENvbnRhaW5lcklkczo6Zmlk X2Fzc2lnbiA9PSBmdW5jX2lkOw0KDQogICAgICAgIC8vIGN0b3IgYW5kIGFzc2lnbm1lbnQg b3BlcmF0b3IgcmVxdWlyZSB0aGUgZnVsbCBjb250YWluZXIgcmV2ZXJzZQ0KICAgICAgICBj b25zdCBzaXplX3Qgb2ZmID0gbGlrZV9jdG9yID8gMCA6IHRkYXRhLm9mZjFfOw0KICAgICAg ICBjb25zdCBzaXplX3QgZXh0ID0gbGlrZV9jdG9yID8gdGRhdGEucmVzbGVuXyA6IHRkYXRh LmV4dDJfOw0KDQogICAgICAgIGNvbnN0IENvbnRhaW5lclRlc3RDYXNlIHJldl90Y2FzZSA9 DQogICAgICAgICAgICBfcndfcmV2ZXJzZV9yZXN1bHRzICh0Y2FzZSwgb2ZmLCBleHQpOw0K DQogICAgICAgIGNvbnN0IERhdGEgcmV2X3RkYXRhIChmdW5jLCByZXZfdGNhc2UpOw0KDQog ICAgICAgIHRmdW5jICgoVCopMCwgKEFsbG9jYXRvciopMCwgcmV2X3RkYXRhKTsNCg0KICAg ICAgICAvLyBjbGVhbiB1cCBhbGxvY2F0ZWQgbWVtb3J5LCBpZiBhbnkNCiAgICAgICAgZGVs ZXRlW10gcmV2X3RjYXNlLnJlczsNCiAgICB9DQogICAgZWxzZQ0KICAgICAgICB0ZnVuYyAo KFQqKTAsIChBbGxvY2F0b3IqKTAsIHRkYXRhKTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg VD4NCnZvaWQNCl9yd19kaXNwYXRjaCAoVCosDQogICAgICAgICAgICAgIFZvaWRGdW5jKiBj b25zdCAgICAqZmFycmF5LA0KICAgICAgICAgICAgICBjb25zdCBDb250YWluZXJGdW5jICAg ICAmZnVuYywNCiAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyVGVzdENhc2UgJnRjYXNl KQ0Kew0KICAgIGlmIChDb250YWluZXJJZHM6OkRlZmF1bHRBbGxvYyA9PSBmdW5jLmFsbG9j X2lkXykgew0KICAgICAgICB0eXBlZGVmIHN0ZDo6YWxsb2NhdG9yPFQ+IEFsbG9jOw0KICAg ICAgICBfcndfZGlzcGF0Y2ggKChUKikwLCAoQWxsb2MqKTAsIGZhcnJheSwgZnVuYywgdGNh c2UpOw0KICAgIH0NCiAgICBlbHNlIGlmIChDb250YWluZXJJZHM6OlVzZXJBbGxvYyA9PSBm dW5jLmFsbG9jX2lkXykgew0KICAgICAgICB0eXBlZGVmIFVzZXJBbGxvYzxUPiBBbGxvYzsN CiAgICAgICAgX3J3X2Rpc3BhdGNoICgoVCopMCwgKEFsbG9jKikwLCBmYXJyYXksIGZ1bmMs IHRjYXNlKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIFJXX0FTU0VSVCAoISJsb2dp YyBlcnJvcjogdW5rbm93biBBbGxvY2F0b3IgYXJndW1lbnQiKTsNCiAgICB9DQp9DQoNCg0K c3RhdGljIHZvaWQNCl9yd19kaXNwYXRjaCAoVm9pZEZ1bmMqIGNvbnN0ICAgICpmYXJyYXks DQogICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lckZ1bmMgICAgICZmdW5jLA0KICAgICAg ICAgICAgICBjb25zdCBDb250YWluZXJUZXN0Q2FzZSAmdGNhc2UpDQp7DQogICAgaWYgKENv bnRhaW5lcklkczo6VXNlclBPRCA9PSBmdW5jLmVsZW1faWRfKSB7DQogICAgICAgIF9yd19k aXNwYXRjaCAoKFVzZXJQT0QqKTAsIGZhcnJheSwgZnVuYywgdGNhc2UpOw0KICAgIH0NCiAg ICBlbHNlIGlmIChDb250YWluZXJJZHM6OlVzZXJDbGFzcyA9PSBmdW5jLmVsZW1faWRfKSB7 DQogICAgICAgIF9yd19kaXNwYXRjaCAoKFVzZXJDbGFzcyopMCwgZmFycmF5LCBmdW5jLCB0 Y2FzZSk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICBSV19BU1NFUlQgKCEibG9naWMg ZXJyb3I6IHVua25vd24gVCBhcmd1bWVudCIpOw0KICAgIH0NCn0NCg0KLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLw0KDQovLyBleGVyY2lzZSBhIHNpbmdsZSB0ZXN0IGNhc2UgZm9yIHRoZSBn aXZlbiBmdW5jdGlvbg0Kc3RhdGljIHZvaWQNCl9yd190ZXN0X2Nhc2UgKGNvbnN0IENvbnRh aW5lckZ1bmMgICAgICZmdW5jLA0KICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyVGVz dENhc2UgJnRjYXNlLA0KICAgICAgICAgICAgICAgQ29udGFpbmVyVGVzdEZ1bmMgICAgICAg KnRlc3RfY2FsbGJhY2ssDQogICAgICAgICAgICAgICBWb2lkRnVuYyogY29uc3QgICAgICAg ICAqZmFycmF5KQ0Kew0KICAgIC8vIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGFuIGV4Y2Vw dGlvbiBzYWZldHkgdGVzdCBjYXNlDQogICAgLy8gYW5kIGF2b2lkIHJ1bm5pbmcgaXQgd2hl biBleGNlcHRpb24gc2FmZXR5IGhhcyBiZWVuDQogICAgLy8gZGlzYWJsZWQgdmlhIGEgY29t bWFuZCBsaW5lIG9wdGlvbg0KICAgIGlmICgtMSA9PSB0Y2FzZS5idGhyb3cgJiYgX3J3X29w dF9ub19leGNlcHRpb25fc2FmZXR5KSB7DQoNCiAgICAgICAgLy8gaXNzdWUgb25seSB0aGUg Zmlyc3Qgbm90ZQ0KICAgICAgICByd19ub3RlICgxIDwgX3J3X29wdF9ub19leGNlcHRpb25f c2FmZXR5KyssIF9yd190aGlzX2ZpbGUsIF9fTElORV9fLA0KICAgICAgICAgICAgImV4Y2Vw dGlvbiBzYWZldHkgdGVzdHMgZGlzYWJsZWQiKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0N Cg0KICAgIC8vIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgdGVzdCBjYXNlIHRoYXQgaW52 b2x2ZXMgdGhlIHRocm93aW5nDQogICAgLy8gb2YgYW4gZXhjZXB0aW9uIGFuZCBhdm9pZCBy dW5uaW5nIGl0IHdoZW4gZXhjZXB0aW9ucyBoYXZlIGJlZW4NCiAgICAvLyBkaXNhYmxlZA0K ICAgIGlmICh0Y2FzZS5idGhyb3cgJiYgX3J3X29wdF9ub19leGNlcHRpb25zKSB7DQoNCiAg ICAgICAgLy8gaXNzdWUgb25seSB0aGUgZmlyc3Qgbm90ZQ0KICAgICAgICByd19ub3RlICgx IDwgX3J3X29wdF9ub19leGNlcHRpb25zKyssIF9yd190aGlzX2ZpbGUsIF9fTElORV9fLA0K ICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uIHRlc3RzIGRpc2FibGVkIik7DQogICAgICAg IHJldHVybjsNCiAgICB9DQoNCiAgICBjb25zdCBib29sIHNlbGZfcmVmID0gMCA9PSB0Y2Fz ZS5hcmc7DQoNCiAgICAvLyBjaGVjayBmb3IgdGVzdHMgZXhlcmNpc2luZyBzZWxmLXJlZmVy ZW50aWFsIG1vZGlmaWNhdGlvbnMNCiAgICAvLyAoZS5nLiwgaW5zZXJ0KDEsICp0aGlzKSkN CiAgICBpZiAoX3J3X29wdF9zZWxmX3JlZiA8IDAgJiYgc2VsZl9yZWYpIHsNCiAgICAgICAg Ly8gaXNzdWUgb25seSB0aGUgZmlyc3Qgbm90ZQ0KICAgICAgICByd19ub3RlICgwLCBfcndf dGhpc19maWxlLCB0Y2FzZS5saW5lLA0KICAgICAgICAgICAgICAgICAic2VsZi1yZWZlcmVu dGlhbCB0ZXN0IGRpc2FibGVkIik7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgZWxz ZSBpZiAoMCA8IF9yd19vcHRfc2VsZl9yZWYgJiYgIXNlbGZfcmVmKSB7DQogICAgICAgIC8v IGlzc3VlIG9ubHkgdGhlIGZpcnN0IG5vdGUNCiAgICAgICAgcndfbm90ZSAoMCwgX3J3X3Ro aXNfZmlsZSwgdGNhc2UubGluZSwNCiAgICAgICAgICAgICAgICAgIm5vbi1zZWxmLXJlZmVy ZW50aWFsIHRlc3QgZGlzYWJsZWQiKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAg IC8vIGNoZWNrIHRvIHNlZSBpZiB0aGUgdGVzdCBjYXNlIGlzIGVuYWJsZWQNCiAgICBpZiAo cndfZW5hYmxlZCAodGNhc2UubGluZSkpIHsNCg0KICAgICAgICAvLyBzZXQgdGhlIHtGVU5D QUxMfSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBkZXNjcmliZQ0KICAgICAgICAvLyB0aGUg ZnVuY3Rpb24gY2FsbCBzcGVjaWZpZWQgYnkgdGhpcyB0ZXN0IGNhc2UNCiAgICAgICAgX3J3 X3NldHZhcnMgKGZ1bmMsICZ0Y2FzZSk7DQoNCiAgICAgICAgaWYgKHRlc3RfY2FsbGJhY2sp IHsNCiAgICAgICAgICAgIC8vIGludm9rZSB0aGUgdGVzdCBjYWxsYmFjayBmdW5jdGlvbg0K ICAgICAgICAgICAgdGVzdF9jYWxsYmFjayAoZnVuYywgdGNhc2UpOw0KICAgICAgICB9DQog ICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgX3J3X2Rpc3BhdGNoIChmYXJyYXksIGZ1bmMs IHRjYXNlKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgICAgIHJ3X25vdGUg KDAsIF9yd190aGlzX2ZpbGUsIHRjYXNlLmxpbmUsDQogICAgICAgICAgICAgICAgICJ0ZXN0 IG9uIGxpbmUgJWQgZGlzYWJsZWQiLCB0Y2FzZS5saW5lKTsNCn0NCg0KLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLw0KDQpzdGF0aWMgQ29udGFpbmVySWRzOjpDb250YWluZXJJZA0KX3J3X2Nv bnRhaW5lcl9pZDsNCg0Kc3RhdGljIENvbnRhaW5lclRlc3RGdW5jKg0KX3J3X3Rlc3RfY2Fs bGJhY2s7DQoNCg0Kc3RhdGljIFZvaWRGdW5jKiBjb25zdCoNCl9yd19mdW5jX2FycmF5Ow0K DQoNCi8vIGV4ZXJjaXNlIGFsbCB0ZXN0IGNhc2VzIGRlZmluZWQgZm9yIHRoZSBnaXZlbiBm dW5jdGlvbg0Kc3RhdGljIHZvaWQNCl9yd19ydW5fY2FzZXMgKGNvbnN0IENvbnRhaW5lckZ1 bmMgJmZ1bmMsDQogICAgICAgICAgICAgICBjb25zdCBDb250YWluZXJUZXN0ICZ0ZXN0KQ0K ew0KICAgIC8vIHNldCB0aGUge0NMQVNTfSwge0ZVTkN9LCBhbmQge0ZVTkNTSUd9IGVudmly b25tZW50DQogICAgLy8gdmFyaWFibGUgdG8gdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciBz cGVjaWFsaXphdGlvbg0KICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIGZ1bmN0aW9uIGJlaW5n IGV4ZXJjaXNlZA0KICAgIF9yd19zZXR2YXJzIChmdW5jKTsNCg0KICAgIC8vIGRldGVybWlu ZSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBpcyBhIG1lbWJlciBmdW5jdGlvbg0KICAgIGNvbnN0 IGJvb2wgaXNfbWVtYmVyID0gMCAhPSAoQ29udGFpbmVySWRzOjpiaXRfbWVtYmVyICYgdGVz dC53aGljaCk7DQoNCiAgICAvLyBjb21wdXRlIHRoZSBmdW5jdGlvbiBvdmVybG9hZCdzIDAt YmFzZWQgaW5kZXgNCiAgICBjb25zdCBzaXplX3Qgc2lnaW54ID0gX3J3X2dldF9mdW5jX2lu eCAodGVzdC53aGljaCk7DQoNCiAgICAvLyBjaGVjayBpZiB0ZXN0cyBvZiB0aGUgZnVuY3Rp b24gb3ZlcmxvYWQNCiAgICAvLyBoYXZlIGJlZW4gZGlzYWJsZWQNCiAgICBpZiAoMCA9PSBy d19ub3RlICgwIDw9IF9yd19vcHRfZnVuYyBbc2lnaW54XSwgX3J3X3RoaXNfZmlsZSwgX19M SU5FX18sDQogICAgICAgICAgICAgICAgICAgICAgIiV7P30leyRDTEFTU306OiV7O30leyRG VU5DU0lHfSB0ZXN0cyBkaXNhYmxlZCIsDQogICAgICAgICAgICAgICAgICAgICAgaXNfbWVt YmVyKSkNCiAgICAgICAgcmV0dXJuOw0KDQogICAgcndfaW5mbyAoMCwgMCwgMCwgIiV7P30l eyRDTEFTU306OiV7O30leyRGVU5DU0lHfSIsIGlzX21lbWJlcik7DQoNCiAgICBjb25zdCBz aXplX3QgY2FzZV9jb3VudCA9IHRlc3QuY2FzZV9jb3VudDsNCg0KICAgIC8vIGl0ZXJhdGUg b3ZlciBhbGwgdGVzdCBjYXNlcyBmb3IgdGhpcyBmdW5jdGlvbg0KICAgIC8vIG92ZXJsb2Fk IGludm9raW5nIHRoZSB0ZXN0IGNhc2UgaGFuZGxlciBmb3IgZWFjaA0KICAgIC8vIGluIHR1 cm4NCiAgICBmb3IgKHNpemVfdCBuID0gMDsgbiAhPSBjYXNlX2NvdW50OyArK24pIHsNCg0K ICAgICAgICBjb25zdCBDb250YWluZXJUZXN0Q2FzZSYgdGNhc2UgPSB0ZXN0LmNhc2VzIFtu XTsNCg0KICAgICAgICBfcndfdGVzdF9jYXNlIChmdW5jLCB0Y2FzZSwgX3J3X3Rlc3RfY2Fs bGJhY2ssIF9yd19mdW5jX2FycmF5KTsNCiAgICB9DQp9DQoNCi8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8NCg0Kdm9pZA0KX3J3X3RvZ2dsZV9vcHRpb25zIChpbnQgKm9wdHMsIHNpemVfdCBj b3VudCkNCnsNCiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7DQog ICAgICAgIGlmICgwIDwgb3B0cyBbaV0pIHsNCiAgICAgICAgICAgIC8vIGlmIG9uZSBvciBt b3JlIG9wdGlvbnMgaGFzIGJlZW4gZXhwbGljaXRseSBlbmFibGVkDQogICAgICAgICAgICAv LyB0cmVhdCBhbGwgdGhvc2UgdGhhdCBoYXZlbid0IGJlZW4gYXMgaWYgdGhleSBoYWQNCiAg ICAgICAgICAgIC8vIGJlZW4gZGlzYWJsZWQNCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg IT0gY291bnQ7ICsraSkgew0KICAgICAgICAgICAgICAgIGlmICgwID09IG9wdHMgW2ldKQ0K ICAgICAgICAgICAgICAgICAgICBvcHRzIFtpXSA9IC0xOw0KICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCg0Kc3RhdGljIGludA0K X3J3X3J1bl90ZXN0IChpbnQsIGNoYXIqW10pDQp7DQojaWZkZWYgX1JXU1REX05PX0VYQ0VQ VElPTlMNCg0KICAgIHJ3X25vdGUgKDAsIDAsIDAsICJleGNlcHRpb24gdGVzdHMgZGlzYWJs ZWQgKG1hY3JvICINCiAgICAgICAgIl9SV1NURF9OT19FWENFUFRJT05TICNkZWZpbmVkKSIp Ow0KDQogICAgLy8gZGlzYWJsZSBhbGwgZXhjZXB0aW9uIHRlc3RzIGFuZCBhdm9pZCBmdXJ0 aGVyIG5vdGVzDQogICAgX3J3X25vX2V4Y2VwdGlvbnMgICAgICAgPSAyOw0KICAgIF9yd19u b19leGNlcHRpb25fc2FmZXR5ID0gMjsNCg0KI2VuZGlmICAgLy8gX1JXU1REX05PX0VYQ0VQ VElPTlMNCg0KICAgIC8vIHNlZSBpZiBhbnkgb3B0aW9uIGNvbnRyb2xsaW5nIGEgY29udGFp bmVyIGZ1bmN0aW9uIGhhcyBiZWVuDQogICAgLy8gZXhwbGljaXRseSBlbmFibGVkIGFuZCBp ZiBzbyBkaXNhYmxlIGFsbCB0aG9zZSB0aGF0IGhhdmVuJ3QNCiAgICAvLyBiZWVuIChpLmUu LCBzbyB0aGF0IC0tZW5hYmxlLWZvby1zaXplIHdpbGwgaGF2ZSB0aGUgZWZmZWN0DQogICAg Ly8gb2Ygc3BlY2lmeWluZyAtLWRpc2FibGUtZm9vLXZhbCBhbmQgLS1kaXNhYmxlLWZvby1y YW5nZSwNCiAgICAvLyBnaXZlbiB0aGUgdGhyZWUgb3ZlcmxvYWRzIG9mIGZvbykNCiAgICBj b25zdCBzaXplX3Qgbm9wdHMgPSBzaXplb2YgX3J3X29wdF9mdW5jIC8gc2l6ZW9mICpfcndf b3B0X2Z1bmM7DQogICAgX3J3X3RvZ2dsZV9vcHRpb25zIChfcndfb3B0X2Z1bmMsIG5vcHRz KTsNCg0KICAgIHN0YXRpYyBjb25zdCBDb250YWluZXJJZHM6OkVsZW1JZCBlbGVtX3R5cGVz W10gPSB7DQogICAgICAgIENvbnRhaW5lcklkczo6VXNlclBPRCwgQ29udGFpbmVySWRzOjpV c2VyQ2xhc3MNCiAgICB9Ow0KDQogICAgc3RhdGljIGNvbnN0IENvbnRhaW5lcklkczo6QWxs b2NJZCBhbGxvY190eXBlc1tdID0gew0KICAgICAgICBDb250YWluZXJJZHM6OkRlZmF1bHRB bGxvYywgQ29udGFpbmVySWRzOjpVc2VyQWxsb2MNCiAgICB9Ow0KDQogICAgc3RhdGljIGNv bnN0IENvbnRhaW5lcklkczo6SXRlcmF0b3JJZCBpdGVyX3R5cGVzW10gPSB7DQogICAgICAg IENvbnRhaW5lcklkczo6SW5wdXQsIENvbnRhaW5lcklkczo6Rm9yd2FyZCwNCiAgICAgICAg Q29udGFpbmVySWRzOjpCaWRpciwgQ29udGFpbmVySWRzOjpSYW5kb20sDQogICAgICAgIENv bnRhaW5lcklkczo6UG9pbnRlciwgQ29udGFpbmVySWRzOjpDb25zdFBvaW50ZXIsDQogICAg ICAgIENvbnRhaW5lcklkczo6SXRlcmF0b3IsIENvbnRhaW5lcklkczo6Q29uc3RJdGVyYXRv ciwNCiAgICAgICAgQ29udGFpbmVySWRzOjpSZXZlcnNlSXRlcmF0b3IsIENvbnRhaW5lcklk czo6Q29uc3RSZXZlcnNlSXRlcmF0b3INCiAgICB9Ow0KDQogICAgY29uc3Qgc2l6ZV90IG5f ZWxlbV90eXBlcyAgID0gc2l6ZW9mIGVsZW1fdHlwZXMgLyBzaXplb2YgKmVsZW1fdHlwZXM7 DQogICAgY29uc3Qgc2l6ZV90IG5fYWxsb2NfdHlwZXMgID0gc2l6ZW9mIGFsbG9jX3R5cGVz IC8gc2l6ZW9mICphbGxvY190eXBlczsNCiAgICBjb25zdCBzaXplX3Qgbl9pdGVyX3R5cGVz ICAgPSBzaXplb2YgaXRlcl90eXBlcyAvIHNpemVvZiAqaXRlcl90eXBlczsNCg0KICAgIC8v IHNlZSBpZiBhbnkgb3B0aW9uIGNvbnRyb2xsaW5nIHRoZSBjb250YWluZXIgdGVtcGxhdGUg YXJndW1lbnRzDQogICAgLy8gZXhwbGljaXRseSBlbmFibGVkIGFuZCBpZiBzbyBkaXNhYmxl IGFsbCB0aG9zZSB0aGF0IGhhdmVuJ3QgYmVlbg0KICAgIF9yd190b2dnbGVfb3B0aW9ucyAo X3J3X29wdF9lbGVtX3R5cGVzLCBuX2VsZW1fdHlwZXMpOw0KICAgIF9yd190b2dnbGVfb3B0 aW9ucyAoX3J3X29wdF9hbGxvY190eXBlcywgbl9hbGxvY190eXBlcyk7DQogICAgX3J3X3Rv Z2dsZV9vcHRpb25zIChfcndfb3B0X2l0ZXJfdHlwZXMsIG5faXRlcl90eXBlcyk7DQoNCiAg ICAvLyBleGVyY2lzZSBkaWZmZXJlbnQgVCBzcGVjaWFsaXphdGlvbnMgbGFzdA0KICAgIGZv ciAoc2l6ZV90IGkgPSAwOyBpICE9IG5fZWxlbV90eXBlczsgKytpKSB7DQoNCiAgICAgICAg aWYgKF9yd19vcHRfZWxlbV90eXBlcyBbaV0gPCAwKSB7DQogICAgICAgICAgICAvLyBpc3N1 ZSBvbmx5IHRoZSBmaXJzdCBub3RlDQogICAgICAgICAgICByd19ub3RlICgtMSA+IF9yd19v cHRfZWxlbV90eXBlcyBbaV0tLSwNCiAgICAgICAgICAgICAgICAgICAgIF9yd190aGlzX2Zp bGUsIF9fTElORV9fLA0KICAgICAgICAgICAgICAgICAgICAgIiVzIHRlc3RzIGRpc2FibGVk IiwgX3J3X2VsZW1fbmFtZXMgW2ldKTsNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAg ICB9DQoNCiAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgIT0gbl9hbGxvY190eXBlczsg KytrKSB7DQoNCiAgICAgICAgICAgIGlmIChfcndfb3B0X2FsbG9jX3R5cGVzIFtrXSA8IDAp IHsNCiAgICAgICAgICAgICAgICAvLyBpc3N1ZSBvbmx5IHRoZSBmaXJzdCBub3RlDQogICAg ICAgICAgICAgICAgcndfbm90ZSAoLTEgPiBfcndfb3B0X2FsbG9jX3R5cGVzIFtrXS0tLA0K ICAgICAgICAgICAgICAgICAgICAgICAgIF9yd190aGlzX2ZpbGUsIF9fTElORV9fLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICIlcyB0ZXN0cyBkaXNhYmxlZCIsIF9yd19hbGxvY19u YW1lcyBba10pOw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0K DQogICAgICAgICAgICBmb3IgKHNpemVfdCBtID0gMDsgbSAhPSBfcndfY29udF90ZXN0X2Nv dW50OyArK20pIHsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lclRlc3QmIHRl c3QgPSBfcndfY29udF90ZXN0cyBbbV07DQoNCiAgICAgICAgICAgICAgICAvLyBjcmVhdGUg YW4gb2JqZWN0IHVuaXF1ZWx5IGlkZW50aWZ5aW5nIHRoZSBvdmVybG9hZA0KICAgICAgICAg ICAgICAgIC8vIG9mIHRoZSBjb250YWluZXIgZnVuY3Rpb24gZXhlcmNpc2VkIGJ5IHRoZSBz ZXQgb2YgdGVzdA0KICAgICAgICAgICAgICAgIC8vIGNhc2VzIGRlZmluZWQgdG8gZXhlcmNp c2UgaXQNCiAgICAgICAgICAgICAgICBDb250YWluZXJGdW5jIGZ1bmMgPSB7DQogICAgICAg ICAgICAgICAgICAgIGVsZW1fdHlwZXMgW2ldLA0KICAgICAgICAgICAgICAgICAgICBhbGxv Y190eXBlcyBba10sDQogICAgICAgICAgICAgICAgICAgIENvbnRhaW5lcklkczo6Tm9uZSwN CiAgICAgICAgICAgICAgICAgICAgX3J3X2NvbnRhaW5lcl9pZCwNCiAgICAgICAgICAgICAg ICAgICAgdGVzdC53aGljaA0KICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAg ICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGUgZnVuY3Rpb24gaXMgYSB0ZW1wbGF0ZQ0KICAg ICAgICAgICAgICAgIGlmICgtMSA8IF9yd19hcmdubyAodGVzdC53aGljaCwgQ29udGFpbmVy SWRzOjphcmdfcmFuZ2UpKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSBv dmVyIHRoZSBzdGFuZGFyZCBpdGVyYXRvciBjYXRlZ29yaWVzDQogICAgICAgICAgICAgICAg ICAgIC8vIGFuZCBpdGVyYXRvciB0eXBlcyB0aGUgdGVtcGxhdGUgbWlnaHQgcGVyaGFwcw0K ICAgICAgICAgICAgICAgICAgICAvLyBiZSBzcGVjaWFsaXplZCBvbg0KICAgICAgICAgICAg ICAgICAgICBmb3IgKHNpemVfdCBsID0gMDsgbCAhPSBuX2l0ZXJfdHlwZXM7ICsrbCkgew0K DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3J3X29wdF9pdGVyX3R5cGVzIFtsXSA8 IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpc3N1ZSBvbmx5IHRoZSBm aXJzdCBub3RlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcndfbm90ZSAoLTEgPiBf cndfb3B0X2l0ZXJfdHlwZXMgW2xdLS0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX3J3X3RoaXNfZmlsZSwgX19MSU5FX18sDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiVzIHRlc3RzIGRpc2FibGVkIiwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfcndfaXRlcl9uYW1lcyBbbF0pOw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAg fQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBmdW5jLml0ZXJfaWRfID0gaXRlcl90eXBl cyBbbF07DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4ZXJjaXNlIGFsbCB0ZXN0 IGNhc2VzIGRlZmluZWQgZm9yDQogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZnVu Y3Rpb24gdGVtcGxhdGUNCiAgICAgICAgICAgICAgICAgICAgICAgIF9yd19ydW5fY2FzZXMg KGZ1bmMsIHRlc3QpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAvLyBleGVy Y2lzZSBhbGwgdGVzdCBjYXNlcyBkZWZpbmVkIGZvciB0aGUgb3JkaW5hcnkNCiAgICAgICAg ICAgICAgICAgICAgLy8gKGkuZS4sIG5vbi10ZW1wbGF0ZSkgZnVuY3Rpb24NCiAgICAgICAg ICAgICAgICAgICAgX3J3X3J1bl9jYXNlcyAoZnVuYywgdGVzdCk7DQogICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIDA7 DQp9DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLy8gYWRkIGEgYnVuY2ggb2YgdG9n Z2xlLXR5cGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgYmFzZWQgb24gdGhlIG5hbWVzIGFycmF5 DQpzdGF0aWMgdm9pZA0KX3J3X2FkZF90b2dnbGVzIChjaGFyICoqcGJ1Ziwgc2l6ZV90ICpw YnVmc2l6ZSwNCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3QgbmFtZXNbXSwg c2l6ZV90IGNvdW50KQ0Kew0KICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGNvdW50OyAr K2kpIHsNCiAgICAgICAgcndfYXNucHJpbnRmIChwYnVmLCBwYnVmc2l6ZSwgIiV7K318LSVz fiAiLCBuYW1lcyBbaV0pOw0KICAgIH0NCn0NCg0Kc3RhdGljIHZvaWQNCl9yd19hZGRfY29u dGFpbmVyX3RvZ2dsZXMgKGNoYXIgKipwYnVmLCBzaXplX3QgKnBidWZzaXplKQ0Kew0KICAg IF9yd19hZGRfdG9nZ2xlcyAocGJ1ZiwgcGJ1ZnNpemUsIF9yd19hbGxvY19uYW1lcywNCiAg ICAgICAgICAgICAgICAgICAgIHNpemVvZiBfcndfYWxsb2NfbmFtZXMgLyBzaXplb2YgKl9y d19hbGxvY19uYW1lcyk7DQogICAgX3J3X2FkZF90b2dnbGVzIChwYnVmLCBwYnVmc2l6ZSwg X3J3X2l0ZXJfbmFtZXMgKyAxLA0KICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIF9yd19p dGVyX25hbWVzIC8gc2l6ZW9mICpfcndfaXRlcl9uYW1lcyAtIDEpOw0KfQ0KDQoNCnN0YXRp YyBpbnQNCl9yd19ydW5fdGVzdCAgKGludCAgICAgICAgICAgICAgICAgICAgICAgYXJnYywN CiAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAqYXJndiBbXSwNCiAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAqZmlsZSwNCiAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAqY2xhdXNlLA0KICAgICAgICAgICAg ICAgQ29udGFpbmVySWRzOjpDb250YWluZXJJZCBjb250YWluZXIsDQogICAgICAgICAgICAg ICBDb250YWluZXJUZXN0RnVuYyAgICAgICAgKnRlc3RfY2FsbGJhY2ssDQogICAgICAgICAg ICAgICBWb2lkRnVuYyogY29uc3QgICAgICAgICAgKmZ1bmNfYXJyYXksDQogICAgICAgICAg ICAgICBjb25zdCBDb250YWluZXJUZXN0ICAgICAgKnRlc3RzLA0KICAgICAgICAgICAgICAg c2l6ZV90ICAgICAgICAgICAgICAgICAgICB0ZXN0X2NvdW50KQ0Kew0KICAgIC8vIHNldCB0 aGUgZ2xvYmFsIHZhcmlhYmxlcyBhY2Nlc3NlZCBpbiBfcndfcnVuX3Rlc3QNCiAgICBfcndf Y29udGFpbmVyX2lkICAgICAgPSBjb250YWluZXI7DQogICAgX3J3X3Rlc3RfY2FsbGJhY2sg ICAgID0gdGVzdF9jYWxsYmFjazsNCiAgICBfcndfZnVuY19hcnJheSAgICAgICAgPSBmdW5j X2FycmF5LA0KICAgIF9yd19jb250X3Rlc3RzICAgICAgICA9IHRlc3RzOw0KICAgIF9yd19j b250X3Rlc3RfY291bnQgICA9IHRlc3RfY291bnQ7DQoNCiAgICAvLyBwdXQgdG9nZXRoZXIg YSBjb21tYW5kIGxpbmUgb3B0aW9uIHNwZWNpZmljYXRpb24gd2l0aCBvcHRpb25zDQogICAg Ly8gdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRlc3RzIGV4ZXJjaXNpbmcgZnVuY3Rpb25zIGZv ciBhbGwga25vd24NCiAgICAvLyBzcGVjaWFsaXphdGlvbnMgb2YgdGhlIGZ1bmN0aW9ucyBz cGVjaWZpZWQgYnkgdGhlIHRlc3QgYXJyYXkNCiAgICBjaGFyICAgKm9wdGJ1ZiAgICAgPSAw Ow0KICAgIHNpemVfdCAgb3B0YnVmc2l6ZSA9IDA7DQoNCiAgICByd19hc25wcmludGYgKCZv cHRidWYsICZvcHRidWZzaXplLA0KICAgICAgICAgICAgICAgICAgInwtbm8tZXhjZXB0aW9u cyMgIg0KICAgICAgICAgICAgICAgICAgInwtbm8tZXhjZXB0aW9uLXNhZmV0eSMgIg0KICAg ICAgICAgICAgICAgICAgInwtc2VsZi1yZWZ+ICIpOw0KDQogICAgY29uc3Qgc2l6ZV90IG5f ZWxlbXMgID0gc2l6ZW9mIF9yd19lbGVtX25hbWVzIC8gc2l6ZW9mICpfcndfZWxlbV9uYW1l czsNCg0KICAgIC8vIHNlZSBpZiBhbnkgb3B0aW9uIGhhcyBiZWVuIGV4cGxpY2l0bHkgZW5h YmxlZCBhbmQgaWYgc28sDQogICAgLy8gdW5jb25kaXRpb25hbGx5IGRpc2FibGUgYWxsIHRo b3NlIHRoYXQgaGF2ZSBub3QgYmVlbg0KICAgIF9yd19hZGRfdG9nZ2xlcyAoJm9wdGJ1Ziwg Jm9wdGJ1ZnNpemUsIF9yd19lbGVtX25hbWVzLCBuX2VsZW1zKTsNCiAgICBfcndfYWRkX2Nv bnRhaW5lcl90b2dnbGVzICgmb3B0YnVmLCAmb3B0YnVmc2l6ZSk7DQoNCiAgICBmb3IgKHNp emVfdCBpID0gMDsgaSAhPSB0ZXN0X2NvdW50OyArK2kpIHsNCg0KICAgICAgICAvLyBmb3Ig ZWFjaCBmdW5jdGlvbiBhcHBlbmQgYSBjb21tYW5kIGxpbmUgb3B0aW9uIHNwZWNpZmljYXRp b24NCiAgICAgICAgLy8gdG8gYWxsb3cgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXQNCiAgICAg ICAgcndfYXNucHJpbnRmICgmb3B0YnVmLCAmb3B0YnVmc2l6ZSwgIiV7K318LSIpOw0KICAg ICAgICBfcndfc2lnY2F0ICgmb3B0YnVmLCAmb3B0YnVmc2l6ZSwgMCwgdGVzdHMgW2ldLndo aWNoKTsNCiAgICAgICAgcndfYXNucHJpbnRmICgmb3B0YnVmLCAmb3B0YnVmc2l6ZSwgIiV7 K31+ICIpOw0KICAgIH0NCg0KICAgIFJXX0FTU0VSVCAodGVzdF9jb3VudCA8PSAzMik7DQog ICAgUldfQVNTRVJUICh0ZXN0X2NvdW50IDw9IE1BWF9PVkVSTE9BRFMpOw0KDQogICAgLy8g cHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHJ1biB0ZXN0cw0KICAgIGNvbnN0IGlu dCBzdGF0dXMgPQ0KICAgICAgICByd190ZXN0IChhcmdjLCBhcmd2LCBmaWxlLCBjbGF1c2Us DQogICAgICAgIDAsICAgICAgICAgICAgICAvLyBjb21tZW50DQogICAgICAgIF9yd19ydW5f dGVzdCwgICAvLyB0ZXN0IGNhbGxiYWNrDQogICAgICAgIG9wdGJ1ZiwgICAgICAgICAvLyBv cHRpb24gc3BlY2lmaWNhdGlvbg0KDQogICAgICAgIC8vIGhhbmRsZXJzIGNvbnRyb2xsaW5n IGV4Y2VwdGlvbnMNCiAgICAgICAgJl9yd19vcHRfbm9fZXhjZXB0aW9ucywNCiAgICAgICAg Jl9yd19vcHRfbm9fZXhjZXB0aW9uX3NhZmV0eSwNCg0KICAgICAgICAvLyBoYW5kbGVyIGNv bnRyb2xsaW5nIHNlbGYtcmVmZXJlbnRpYWwgbW9kaWZpZXJzDQogICAgICAgICZfcndfb3B0 X3NlbGZfcmVmLA0KDQogICAgICAgIC8vIGhhbmRsZXJzIGNvbnRyb2xsaW5nIHNwZWNpYWxp emF0aW9ucyBvZiB0aGUgdGVtcGxhdGUNCiAgICAgICAgLy8gLi4ub24gdGhlIFQgdGVtcGxh dGUgcGFyYW1ldGVyDQogICAgICAgIF9yd19vcHRfZWxlbV90eXBlcyArIDAsDQogICAgICAg IF9yd19vcHRfZWxlbV90eXBlcyArIDEsDQoNCiAgICAgICAgLy8gLi4ub24gdGhlIEFsbG9j YXRvciB0ZW1wbGF0ZSBwYXJhbWV0ZXINCiAgICAgICAgX3J3X29wdF9hbGxvY190eXBlcyAr IDAsDQogICAgICAgIF9yd19vcHRfYWxsb2NfdHlwZXMgKyAxLA0KDQogICAgICAgIC8vIEZJ WE1FOiBhZGQgaGFuZGxlcnMgKGFuZCBvcHRpb25zKSBvbmx5IGZvciB0ZXN0cw0KICAgICAg ICAvLyB0aGF0IGV4ZXJjaXNlIG1lbWJlciB0ZW1wbGF0ZXMNCg0KICAgICAgICAvLyBoYW5k bGVycyBjb250cm9sbGluZyBzcGVjaWFsaXphdGlvbnMgb2YgdGhlIG1lbWJlcg0KICAgICAg ICAvLyB0ZW1wbGF0ZSAoaWYgdGhpcyBpcyBvbmUpIG9uIHRoZSBJbnB1dEl0ZXJhdG9yDQog ICAgICAgIC8vIHRlbXBsYXRlIHBhcmFtZXRlcg0KICAgICAgICBfcndfb3B0X2l0ZXJfdHlw ZXMgKyAwLA0KICAgICAgICBfcndfb3B0X2l0ZXJfdHlwZXMgKyAxLA0KICAgICAgICBfcndf b3B0X2l0ZXJfdHlwZXMgKyAyLA0KICAgICAgICBfcndfb3B0X2l0ZXJfdHlwZXMgKyAzLA0K ICAgICAgICBfcndfb3B0X2l0ZXJfdHlwZXMgKyA0LA0KICAgICAgICBfcndfb3B0X2l0ZXJf dHlwZXMgKyA1LA0KICAgICAgICBfcndfb3B0X2l0ZXJfdHlwZXMgKyA2LA0KICAgICAgICBf cndfb3B0X2l0ZXJfdHlwZXMgKyA3LA0KICAgICAgICBfcndfb3B0X2l0ZXJfdHlwZXMgKyA4 LA0KICAgICAgICBfcndfb3B0X2l0ZXJfdHlwZXMgKyA5LA0KDQogICAgICAgIC8vIEZJWE1F OiBpbnN0YWxsIGV4YWN0bHkgYXMgbWFueSBoYW5kbGVycyAoYW5kIG9wdGlvbnMpDQogICAg ICAgIC8vIGFzIHRoZXJlIGFyZSBkaXN0aW5jdCBmdW5jdGlvbnMgYmVpbmcgZXhlcmNpc2Vk DQoNCiAgICAgICAgLy8gaGFuZGxlcnMgZm9yIHVwIHRvIDMyIG92ZXJsb2Fkcw0KICAgICAg ICBfcndfb3B0X2Z1bmMgKyAgMCwNCiAgICAgICAgX3J3X29wdF9mdW5jICsgIDEsDQogICAg ICAgIF9yd19vcHRfZnVuYyArICAyLA0KICAgICAgICBfcndfb3B0X2Z1bmMgKyAgMywNCiAg ICAgICAgX3J3X29wdF9mdW5jICsgIDQsDQogICAgICAgIF9yd19vcHRfZnVuYyArICA1LA0K ICAgICAgICBfcndfb3B0X2Z1bmMgKyAgNiwNCiAgICAgICAgX3J3X29wdF9mdW5jICsgIDcs DQogICAgICAgIF9yd19vcHRfZnVuYyArICA4LA0KICAgICAgICBfcndfb3B0X2Z1bmMgKyAg OSwNCiAgICAgICAgX3J3X29wdF9mdW5jICsgMTAsDQogICAgICAgIF9yd19vcHRfZnVuYyAr IDExLA0KICAgICAgICBfcndfb3B0X2Z1bmMgKyAxMiwNCiAgICAgICAgX3J3X29wdF9mdW5j ICsgMTMsDQogICAgICAgIF9yd19vcHRfZnVuYyArIDE0LA0KICAgICAgICBfcndfb3B0X2Z1 bmMgKyAxNSwNCiAgICAgICAgX3J3X29wdF9mdW5jICsgMTYsDQogICAgICAgIF9yd19vcHRf ZnVuYyArIDE3LA0KICAgICAgICBfcndfb3B0X2Z1bmMgKyAxOCwNCiAgICAgICAgX3J3X29w dF9mdW5jICsgMTksDQogICAgICAgIF9yd19vcHRfZnVuYyArIDIwLA0KICAgICAgICBfcndf b3B0X2Z1bmMgKyAyMSwNCiAgICAgICAgX3J3X29wdF9mdW5jICsgMjIsDQogICAgICAgIF9y d19vcHRfZnVuYyArIDIzLA0KICAgICAgICBfcndfb3B0X2Z1bmMgKyAyNCwNCiAgICAgICAg X3J3X29wdF9mdW5jICsgMjUsDQogICAgICAgIF9yd19vcHRfZnVuYyArIDI2LA0KICAgICAg ICBfcndfb3B0X2Z1bmMgKyAyNywNCiAgICAgICAgX3J3X29wdF9mdW5jICsgMjgsDQogICAg ICAgIF9yd19vcHRfZnVuYyArIDI5LA0KICAgICAgICBfcndfb3B0X2Z1bmMgKyAzMCwNCiAg ICAgICAgX3J3X29wdF9mdW5jICsgMzEsDQoNCiAgICAgICAgLy8gc2VudGluZWwNCiAgICAg ICAgKHZvaWQqKTApOw0KDQogICAgLy8gZnJlZSBzdG9yYWdlIGFsbG9jYXRlZCBmb3IgdGhl IG9wdGlvbiBzcGVjaWZpY2F0aW9uDQogICAgZnJlZSAob3B0YnVmKTsNCg0KICAgIHJldHVy biBzdGF0dXM7DQp9ICAgDQoNCg0KDQpfVEVTVF9FWFBPUlQgaW50DQpyd19ydW5fY29udF90 ZXN0IChpbnQgICAgICAgICAgICAgICAgICAgICAgICBhcmdjLA0KICAgICAgICAgICAgICAg ICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAqYXJndiBbXSwNCiAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgKmZpbGUsDQogICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICpjbGF1c2UsDQogICAgICAgICAgICAgICAg ICBDb250YWluZXJJZHM6OkNvbnRhaW5lcklkICBjb250YWluZXIsDQogICAgICAgICAgICAg ICAgICBDb250YWluZXJUZXN0RnVuYyAgICAgICAgICpjYWxsYmFjaywNCiAgICAgICAgICAg ICAgICAgIGNvbnN0IENvbnRhaW5lclRlc3QgICAgICAgKnRlc3RzLA0KICAgICAgICAgICAg ICAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgY291bnQpDQp7DQogICAgcmV0dXJu IF9yd19ydW5fdGVzdCAoYXJnYywgYXJndiwgZmlsZSwgY2xhdXNlLCBjb250YWluZXIsDQog ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssIDAsIHRlc3RzLCBjb3VudCk7DQp9 DQoNCg0KX1RFU1RfRVhQT1JUIGludA0KcndfcnVuX2NvbnRfdGVzdCAoaW50ICAgICAgICAg ICAgICAgICAgICAgICAgYXJnYywNCiAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAg ICAgICAgICAgICAgKmFyZ3YgW10sDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAg ICAgICAgICAgICAgICpmaWxlLA0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAg ICAgICAgICAgICAqY2xhdXNlLA0KICAgICAgICAgICAgICAgICAgQ29udGFpbmVySWRzOjpD b250YWluZXJJZCAgY29udGFpbmVyLA0KICAgICAgICAgICAgICAgICAgVm9pZEZ1bmMqIGNv bnN0ICAgICAgICAgICAqZmFycmF5LA0KICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGFp bmVyVGVzdCAgICAgICAqdGVzdHMsDQogICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAg ICAgICAgICAgICAgICBjb3VudCkNCnsNCiAgICByZXR1cm4gX3J3X3J1bl90ZXN0IChhcmdj LCBhcmd2LCBmaWxlLCBjbGF1c2UsIGNvbnRhaW5lciwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAwLCBmYXJyYXksIHRlc3RzLCBjb3VudCk7DQp9DQo= --------------030701090307040209060502 Content-Type: text/plain; name="21.strings.h.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="21.strings.h.diff" MzFhMzINCj4gI2luY2x1ZGUgPDIzLmNvbnRhaW5lcnMuaD4gIC8vIGZvciBDb250YWluZXJJ ZHMNCjM4YzM5DQo8IHN0cnVjdCBTdHJpbmdJZHMgew0KLS0tDQo+IHN0cnVjdCBTdHJpbmdJ ZHM6IENvbnRhaW5lcklkcyB7DQo0NSw1N2Q0NQ0KPCANCjwgICAgIC8vIGlkZW50aWZpZXJz IGZvciB0aGUgQWxsb2NhdG9yIHRlbXBsYXRlIGFyZ3VtZW50DQo8ICAgICBlbnVtIEFsbG9j SWQgeyBEZWZhdWx0QWxsb2MsIFVzZXJBbGxvYyB9Ow0KPCANCjwgICAgIC8vIGlkZW50aWZp ZXJzIGZvciB0aGUgSXRlcmF0b3IgdGVtcGxhdGUgYXJndW1lbnQNCjwgICAgIC8vIHVzZWQg d2l0aCBtZWJlciB0ZW1wbGF0ZXMNCjwgICAgIGVudW0gSXRlcmF0b3JJZCB7DQo8ICAgICAg ICAgTm9uZSwNCjwgICAgICAgICBJbnB1dCwgRm9yd2FyZCwgQmlkaXIsIFJhbmRvbSwNCjwg ICAgICAgICBQb2ludGVyLCBDb25zdFBvaW50ZXIsDQo8ICAgICAgICAgSXRlcmF0b3IsIENv bnN0SXRlcmF0b3IsDQo8ICAgICAgICAgUmV2ZXJzZUl0ZXJhdG9yLCBDb25zdFJldmVyc2VJ dGVyYXRvcg0KPCAgICAgfTsNCg== --------------030701090307040209060502--