From maintainers-request at octave dot org Sat Apr 15 14:24:45 2006 Subject: gsvd.cc From: "Pascal A. Dupuis" To: maintainers at octave dot org Date: Sat, 15 Apr 2006 14:01:02 -0500 --2fHTh5uZTiUOsy+g Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hello, there was a mistake in the alpha and beta arg. Corrected. Now ther routine seems to compute things the right way. There is still to extract the right info from alpha and beta into C and S. There is a segmentation fault at the routine exit. Could someone check Best regards Pascal Dupuis --2fHTh5uZTiUOsy+g Content-Type: application/x-tar Content-Disposition: attachment; filename="gsvd.tar" Content-Transfer-Encoding: base64 cGF0MQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQA MDAwMDAwMAAwMDAwMDAwADAwMDAwMDAxNDI1ADEwNDE3NDQyMjY1ADAxMDM1MwAgMAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKiogc3JjL01ha2VmaWxlLmluLm9yaWcJMjAw Ni0wNC0xMyAwOToyOTo0MS4wMDAwMDAwMDAgKzAyMDAKLS0tIHNyYy9NYWtlZmlsZS5pbgky MDA2LTA0LTEzIDEyOjQxOjUxLjAwMDAwMDAwMCArMDIwMAoqKioqKioqKioqKioqKioKKioq IDUxLDU3ICoqKioKICAJbHBzb2x2ZS5jYyBsc29kZS5jYyBsdS5jYyBsdWluYy5jYyBtYXRy aXhfdHlwZS5jYyBtaW5tYXguY2MgXAogIAlwaW52LmNjIHFyLmNjIHF1YWQuY2MgcXouY2Mg cmFuZC5jYyBzY2h1ci5jYyBzb3J0LmNjIHNwYXJzZS5jYyBcCiAgCXNwY2hvbC5jYyBzcGRl dC5jYyBzcGtyb24uY2Mgc3BsdS5jYyBzcHBhcm1zLmNjIHNxcnRtLmNjIHN2ZC5jYyBcCiEg CXN5bC5jYyB0aW1lLmNjIGdwbG90LmwgX19nbHBrX18uY2MgX19xcF9fLmNjCiAgCiAgRExE X1NSQyA6PSAkKGFkZHByZWZpeCBETEQtRlVOQ1RJT05TLywgJChETERfWFNSQykpCiAgCi0t LSA1MSw1NyAtLS0tCiAgCWxwc29sdmUuY2MgbHNvZGUuY2MgbHUuY2MgbHVpbmMuY2MgbWF0 cml4X3R5cGUuY2MgbWlubWF4LmNjIFwKICAJcGludi5jYyBxci5jYyBxdWFkLmNjIHF6LmNj IHJhbmQuY2Mgc2NodXIuY2Mgc29ydC5jYyBzcGFyc2UuY2MgXAogIAlzcGNob2wuY2Mgc3Bk ZXQuY2Mgc3Brcm9uLmNjIHNwbHUuY2Mgc3BwYXJtcy5jYyBzcXJ0bS5jYyBzdmQuY2MgXAoh IAlnc3ZkLmNjIHN5bC5jYyB0aW1lLmNjIGdwbG90LmwgX19nbHBrX18uY2MgX19xcF9fLmNj CiAgCiAgRExEX1NSQyA6PSAkKGFkZHByZWZpeCBETEQtRlVOQ1RJT05TLywgJChETERfWFNS QykpCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGF0MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDA1NTY1ADEw NDE3NDQyMjAwADAxMDM1MgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9v dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKiog bGlib2N0YXZlL01ha2VmaWxlLmluLm9yaWcJMjAwNi0wNC0xMyAwOToyNDoxOS4wMDAwMDAw MDAgKzAyMDAKLS0tIGxpYm9jdGF2ZS9NYWtlZmlsZS5pbgkyMDA2LTA0LTEzIDA5OjI2OjQx LjAwMDAwMDAwMCArMDIwMAoqKioqKioqKioqKioqKioKKioqIDMwLDM5ICoqKioKICAJbXgt ZGVmcy5oIG14LWV4dC5oIENDb2xWZWN0b3IuaCBDRGlhZ01hdHJpeC5oIENNYXRyaXguaCBc CiAgCUNOREFycmF5LmggQ1Jvd1ZlY3Rvci5oIENtcGx4QUVQQkFMLmggQ21wbHhDSE9MLmgg XAogIAlDbXBseERFVC5oIENtcGx4SEVTUy5oIENtcGx4TFUuaCBDbXBseFFSLmggQ21wbHhR UlAuaCBcCiEgCUNtcGx4U0NIVVIuaCBDbXBseFNWRC5oIEVJRy5oIGJvb2xNYXRyaXguaCBi b29sTkRBcnJheS5oIFwKICAJY2hNYXRyaXguaCBjaE5EQXJyYXkuaCBkQ29sVmVjdG9yLmgg ZERpYWdNYXRyaXguaCBkTWF0cml4LmggXAogIAlkTkRBcnJheS5oIGRSb3dWZWN0b3IuaCBk YmxlQUVQQkFMLmggZGJsZUNIT0wuaCBkYmxlREVULmggXAohIAlkYmxlSEVTUy5oIGRibGVM VS5oIGRibGVRUi5oIGRibGVRUlAuaCBkYmxlU0NIVVIuaCBkYmxlU1ZELmggXAogIAlib29s U3BhcnNlLmggQ1NwYXJzZS5oIGRTcGFyc2UuaCBNU3BhcnNlLWRlZnMuaCBNU3BhcnNlLmgg XAogIAlTcGFyc2UuaCBzcGFyc2UtYmFzZS1sdS5oIFNwYXJzZUNtcGx4TFUuaCBTcGFyc2Vk YmxlTFUuaCBcCiAgCXNwYXJzZS1iYXNlLWNob2wuaCBTcGFyc2VDbXBseENIT0wuaCBTcGFy c2VkYmxlQ0hPTC5oIFwKLS0tIDMwLDM5IC0tLS0KICAJbXgtZGVmcy5oIG14LWV4dC5oIEND b2xWZWN0b3IuaCBDRGlhZ01hdHJpeC5oIENNYXRyaXguaCBcCiAgCUNOREFycmF5LmggQ1Jv d1ZlY3Rvci5oIENtcGx4QUVQQkFMLmggQ21wbHhDSE9MLmggXAogIAlDbXBseERFVC5oIENt cGx4SEVTUy5oIENtcGx4TFUuaCBDbXBseFFSLmggQ21wbHhRUlAuaCBcCiEgCUNtcGx4U0NI VVIuaCBDbXBseFNWRC5oIENtcGx4R1NWRC5oIEVJRy5oIGJvb2xNYXRyaXguaCBib29sTkRB cnJheS5oIFwKICAJY2hNYXRyaXguaCBjaE5EQXJyYXkuaCBkQ29sVmVjdG9yLmggZERpYWdN YXRyaXguaCBkTWF0cml4LmggXAogIAlkTkRBcnJheS5oIGRSb3dWZWN0b3IuaCBkYmxlQUVQ QkFMLmggZGJsZUNIT0wuaCBkYmxlREVULmggXAohIAlkYmxlSEVTUy5oIGRibGVMVS5oIGRi bGVRUi5oIGRibGVRUlAuaCBkYmxlU0NIVVIuaCBkYmxlU1ZELmggZGJsZUdTVkQuaCBcCiAg CWJvb2xTcGFyc2UuaCBDU3BhcnNlLmggZFNwYXJzZS5oIE1TcGFyc2UtZGVmcy5oIE1TcGFy c2UuaCBcCiAgCVNwYXJzZS5oIHNwYXJzZS1iYXNlLWx1LmggU3BhcnNlQ21wbHhMVS5oIFNw YXJzZWRibGVMVS5oIFwKICAJc3BhcnNlLWJhc2UtY2hvbC5oIFNwYXJzZUNtcGx4Q0hPTC5o IFNwYXJzZWRibGVDSE9MLmggXAoqKioqKioqKioqKioqKioKKioqIDg4LDk5ICoqKioKICBN QVRSSVhfU1JDIDo9IEFycmF5LWZsYWdzLmNjIEFycmF5LXV0aWwuY2MgQ0NvbFZlY3Rvci5j YyBcCiAgCUNEaWFnTWF0cml4LmNjIENNYXRyaXguY2MgQ05EQXJyYXkuY2MgQ1Jvd1ZlY3Rv ci5jYyBcCiAgCUNtcGx4QUVQQkFMLmNjIENtcGx4Q0hPTC5jYyBDbXBseERFVC5jYyBDbXBs eEhFU1MuY2MgXAohIAlDbXBseExVLmNjIENtcGx4UVIuY2MgQ21wbHhRUlAuY2MgQ21wbHhT Q0hVUi5jYyBDbXBseFNWRC5jYyBcCiAgCUVJRy5jYyBib29sTWF0cml4LmNjIGJvb2xOREFy cmF5LmNjIGNoTWF0cml4LmNjIFwKICAJY2hOREFycmF5LmNjIGRDb2xWZWN0b3IuY2MgZERp YWdNYXRyaXguY2MgZE1hdHJpeC5jYyBcCiAgCWROREFycmF5LmNjIGRSb3dWZWN0b3IuY2Mg ZGJsZUFFUEJBTC5jYyBkYmxlQ0hPTC5jYyBcCiAgCWRibGVERVQuY2MgZGJsZUhFU1MuY2Mg ZGJsZUxVLmNjIGRibGVRUi5jYyBkYmxlUVJQLmNjIFwKISAJZGJsZVNDSFVSLmNjIGRibGVT VkQuY2MgYm9vbFNwYXJzZS5jYyBDU3BhcnNlLmNjIGRTcGFyc2UuY2MgXAogIAlNU3BhcnNl LmNjIFNwYXJzZS5jYyBTcGFyc2VDbXBseExVLmNjIFNwYXJzZWRibGVMVS5jYyBcCiAgCVNw YXJzZUNtcGx4Q0hPTC5jYyBTcGFyc2VkYmxlQ0hPTC5jYyBTcGFyc2VUeXBlLmNjIFwKICAJ aW50OE5EQXJyYXkuY2MgdWludDhOREFycmF5LmNjIGludDE2TkRBcnJheS5jYyB1aW50MTZO REFycmF5LmNjIFwKLS0tIDg4LDk5IC0tLS0KICBNQVRSSVhfU1JDIDo9IEFycmF5LWZsYWdz LmNjIEFycmF5LXV0aWwuY2MgQ0NvbFZlY3Rvci5jYyBcCiAgCUNEaWFnTWF0cml4LmNjIENN YXRyaXguY2MgQ05EQXJyYXkuY2MgQ1Jvd1ZlY3Rvci5jYyBcCiAgCUNtcGx4QUVQQkFMLmNj IENtcGx4Q0hPTC5jYyBDbXBseERFVC5jYyBDbXBseEhFU1MuY2MgXAohIAlDbXBseExVLmNj IENtcGx4UVIuY2MgQ21wbHhRUlAuY2MgQ21wbHhTQ0hVUi5jYyBDbXBseFNWRC5jYyBDbXBs eEdTVkQuY2MgXAogIAlFSUcuY2MgYm9vbE1hdHJpeC5jYyBib29sTkRBcnJheS5jYyBjaE1h dHJpeC5jYyBcCiAgCWNoTkRBcnJheS5jYyBkQ29sVmVjdG9yLmNjIGREaWFnTWF0cml4LmNj IGRNYXRyaXguY2MgXAogIAlkTkRBcnJheS5jYyBkUm93VmVjdG9yLmNjIGRibGVBRVBCQUwu Y2MgZGJsZUNIT0wuY2MgXAogIAlkYmxlREVULmNjIGRibGVIRVNTLmNjIGRibGVMVS5jYyBk YmxlUVIuY2MgZGJsZVFSUC5jYyBcCiEgCWRibGVTQ0hVUi5jYyBkYmxlU1ZELmNjIGRibGVH U1ZELmNjIGJvb2xTcGFyc2UuY2MgQ1NwYXJzZS5jYyBkU3BhcnNlLmNjIFwKICAJTVNwYXJz ZS5jYyBTcGFyc2UuY2MgU3BhcnNlQ21wbHhMVS5jYyBTcGFyc2VkYmxlTFUuY2MgXAogIAlT cGFyc2VDbXBseENIT0wuY2MgU3BhcnNlZGJsZUNIT0wuY2MgU3BhcnNlVHlwZS5jYyBcCiAg CWludDhOREFycmF5LmNjIHVpbnQ4TkRBcnJheS5jYyBpbnQxNk5EQXJyYXkuY2MgdWludDE2 TkRBcnJheS5jYyBcCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsaWJvY3RhdmUv ZGJsZUdTVkQuY2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAwMDAwADAw MDAwMDAAMDAwMDAwMTQ1MjcAMTA0MjAyMzY2NTcAMDEzNDQzACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAC8qCgpDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgSm9obiBXLiBF YXRvbgpDb3B5cmlnaHQgKEMpIDIwMDYgUGFzY2FsIER1cHVpcwpUaGlzIGZpbGUgaXMgcGFy dCBvZiBPY3RhdmUuCgpPY3RhdmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAp1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eQpsYXRlciB2ZXJzaW9uLgoKT2N0YXZlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgpGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKZm9yIG1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGgg T2N0YXZlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUKU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQQowMjExMC0xMzAxLCBVU0EuCgoqLwoKI2lmZGVmIEhBVkVf Q09ORklHX0gKI2luY2x1ZGUgPGNvbmZpZy5oPgojZW5kaWYKCiNpbmNsdWRlIDxpb3N0cmVh bT4KCiNpbmNsdWRlICJkYmxlR1NWRC5oIgojaW5jbHVkZSAiZjc3LWZjbi5oIgoKZXh0ZXJu ICJDIgp7CiAgRjc3X1JFVF9UCiAgRjc3X0ZVTkMgKGRnZ3N2ZCwgREdHU1ZEKSAgCiAgICgK ICAgICBGNzdfQ09OU1RfQ0hBUl9BUkdfREVDTCwgCS8vIEpPQlUgICAgKGlucHV0KSBDSEFS QUNURVIqMQogICAgIEY3N19DT05TVF9DSEFSX0FSR19ERUNMLCAJLy8gSk9CViAgICAoaW5w dXQpIENIQVJBQ1RFUioxCiAgICAgRjc3X0NPTlNUX0NIQVJfQVJHX0RFQ0wsIAkvLyBKT0JR ICAgIChpbnB1dCkgQ0hBUkFDVEVSKjEKICAgICBjb25zdCBvY3RhdmVfaWR4X3R5cGUmLAkv LyBNICAgICAgIChpbnB1dCkgSU5URUdFUgogICAgIGNvbnN0IG9jdGF2ZV9pZHhfdHlwZSYs CS8vIE4gICAgICAgKGlucHV0KSBJTlRFR0VSCiAgICAgY29uc3Qgb2N0YXZlX2lkeF90eXBl JiwJLy8gUCAgICAgICAoaW5wdXQpIElOVEVHRVIKICAgICBvY3RhdmVfaWR4X3R5cGUgJiwg CS8vIEsgICAgICAgKG91dHB1dCkgSU5URUdFUgogICAgIG9jdGF2ZV9pZHhfdHlwZSAmLAkJ Ly8gTCAgICAgICAob3V0cHV0KSBJTlRFR0VSCiAgICAgZG91YmxlKiwJCQkvLyBBICAgICAg IChpbnB1dC9vdXRwdXQpIERPVUJMRSBQUkVDSVNJT04gYXJyYXksIGRpbWVuc2lvbiAoTERB LE4pCiAgICAgY29uc3Qgb2N0YXZlX2lkeF90eXBlJiwgCS8vIExEQSAgICAgKGlucHV0KSBJ TlRFR0VSCiAgICAgZG91YmxlKiwgCQkJLy8gQiAgICAgICAoaW5wdXQvb3V0cHV0KSBET1VC TEUgUFJFQ0lTSU9OIGFycmF5LCBkaW1lbnNpb24gKExEQixOKQogICAgIGNvbnN0IG9jdGF2 ZV9pZHhfdHlwZSYsIAkvLyBMREIgICAgIChpbnB1dCkgSU5URUdFUgogICAgIGRvdWJsZSos IAkJCS8vIEFMUEhBICAgKG91dHB1dCkgRE9VQkxFIFBSRUNJU0lPTiBhcnJheSwgZGltZW5z aW9uIChOKQogICAgIGRvdWJsZSosIAkJCS8vIEJFVEEgICAgKG91dHB1dCkgRE9VQkxFIFBS RUNJU0lPTiBhcnJheSwgZGltZW5zaW9uIChOKQogICAgIGRvdWJsZSosCQkJLy8gVSAgICAg ICAob3V0cHV0KSBET1VCTEUgUFJFQ0lTSU9OIGFycmF5LCBkaW1lbnNpb24gKExEVSxNKQog ICAgIGNvbnN0IG9jdGF2ZV9pZHhfdHlwZSYsCS8vIExEVSAgICAgKGlucHV0KSBJTlRFR0VS IAogICAgIGRvdWJsZSosIAkJCS8vIFYgICAgICAgKG91dHB1dCkgRE9VQkxFIFBSRUNJU0lP TiBhcnJheSwgZGltZW5zaW9uIChMRFYsUCkKICAgICBjb25zdCBvY3RhdmVfaWR4X3R5cGUm LAkvLyBMRFYgICAgIChpbnB1dCkgSU5URUdFUgogICAgIGRvdWJsZSosCQkJLy8gUSAgICAg ICAob3V0cHV0KSBET1VCTEUgUFJFQ0lTSU9OIGFycmF5LCBkaW1lbnNpb24gKExEUSxOKSAK ICAgICBjb25zdCBvY3RhdmVfaWR4X3R5cGUmLAkvLyBMRFEgICAgIChpbnB1dCkgSU5URUdF UgogICAgIGRvdWJsZSosIAkJCS8vIFdPUksgICAgKHdvcmtzcGFjZSkgRE9VQkxFIFBSRUNJ U0lPTiBhcnJheQogICAgIGludCosCSAJCS8vIElXT1JLICAgKHdvcmtzcGFjZS9vdXRwdXQp IElOVEVHRVIgYXJyYXksIGRpbWVuc2lvbiAoTikKICAgICBvY3RhdmVfaWR4X3R5cGUmCQkv LyBJTkZPICAgIChvdXRwdXQpSU5URUdFUgogICAgIEY3N19DSEFSX0FSR19MRU5fREVDTAog ICAgIEY3N19DSEFSX0FSR19MRU5fREVDTAogICAgICk7Cn0KCk1hdHJpeApHU1ZEOjpsZWZ0 X3Npbmd1bGFyX21hdHJpeF9BICh2b2lkKSBjb25zdAp7CiAgaWYgKHR5cGVfY29tcHV0ZWQg PT0gR1NWRDo6c2lnbWFfb25seSkKICAgIHsKICAgICAgKCpjdXJyZW50X2xpYm9jdGF2ZV9l cnJvcl9oYW5kbGVyKQoJKCJkYmxlR1NWRDogVSBub3QgY29tcHV0ZWQgYmVjYXVzZSB0eXBl ID09IEdTVkQ6OnNpZ21hX29ubHkiKTsKICAgICAgcmV0dXJuIE1hdHJpeCAoKTsKICAgIH0K ICBlbHNlCiAgICByZXR1cm4gbGVmdF9zbUE7Cn0KCk1hdHJpeApHU1ZEOjpsZWZ0X3Npbmd1 bGFyX21hdHJpeF9CICh2b2lkKSBjb25zdAp7CiAgaWYgKHR5cGVfY29tcHV0ZWQgPT0gR1NW RDo6c2lnbWFfb25seSkKICAgIHsKICAgICAgKCpjdXJyZW50X2xpYm9jdGF2ZV9lcnJvcl9o YW5kbGVyKQoJKCJkYmxlR1NWRDogViBub3QgY29tcHV0ZWQgYmVjYXVzZSB0eXBlID09IEdT VkQ6OnNpZ21hX29ubHkiKTsKICAgICAgcmV0dXJuIE1hdHJpeCAoKTsKICAgIH0KICBlbHNl CiAgICByZXR1cm4gbGVmdF9zbUI7Cn0KCk1hdHJpeApHU1ZEOjpyaWdodF9zaW5ndWxhcl9t YXRyaXggKHZvaWQpIGNvbnN0CnsKICBpZiAodHlwZV9jb21wdXRlZCA9PSBHU1ZEOjpzaWdt YV9vbmx5KQogICAgewogICAgICAoKmN1cnJlbnRfbGlib2N0YXZlX2Vycm9yX2hhbmRsZXIp CgkoImRibGVTVkQ6IFggbm90IGNvbXB1dGVkIGJlY2F1c2UgdHlwZSA9PSBHU1ZEOjpzaWdt YV9vbmx5Iik7CiAgICAgIHJldHVybiBNYXRyaXggKCk7CiAgICB9CiAgZWxzZQogICAgcmV0 dXJuIHJpZ2h0X3NtOwp9CgpvY3RhdmVfaWR4X3R5cGUKR1NWRDo6aW5pdCAoY29uc3QgTWF0 cml4JiBhLCBjb25zdCBNYXRyaXgmIGIsIEdTVkQ6OnR5cGUgZ3N2ZF90eXBlKQp7CiAgb2N0 YXZlX2lkeF90eXBlIGluZm87CgogIG9jdGF2ZV9pZHhfdHlwZSBtID0gYS5yb3dzICgpOwog IG9jdGF2ZV9pZHhfdHlwZSBuID0gYS5jb2xzICgpOwogIG9jdGF2ZV9pZHhfdHlwZSBwID0g Yi5yb3dzICgpOwogIAogIE1hdHJpeCBhdG1wID0gYTsKICBkb3VibGUgKnRtcF9kYXRhQSA9 IGF0bXAuZm9ydHJhbl92ZWMgKCk7CiAgCiAgTWF0cml4IGJ0bXAgPSBiOwogIGRvdWJsZSAq dG1wX2RhdGFCID0gYnRtcC5mb3J0cmFuX3ZlYyAoKTsKCiAgb2N0YXZlX2lkeF90eXBlIG1p bl9tbiA9IG0gPCBuID8gbSA6IG47CgogIGNoYXIgam9idSA9ICdVJzsKICBjaGFyIGpvYnYg PSAnVic7CiAgY2hhciBqb2JxID0gJ1EnOwoKICBvY3RhdmVfaWR4X3R5cGUgbnJvd191ID0g bTsKICBvY3RhdmVfaWR4X3R5cGUgbnJvd192ID0gcDsKICBvY3RhdmVfaWR4X3R5cGUgbnJv d19xID0gbjsKCiAgb2N0YXZlX2lkeF90eXBlIGssIGw7CgogIHN3aXRjaCAoZ3N2ZF90eXBl KQogICAgewoKICAgIGNhc2UgR1NWRDo6c2lnbWFfb25seToKCiAgICAgIC8vIE5vdGU6ICBm b3IgdGhpcyBjYXNlLCBib3RoIGpvYnUgYW5kIGpvYnYgc2hvdWxkIGJlICdOJywgYnV0CiAg ICAgIC8vIHRoZXJlIHNlZW1zIHRvIGJlIGEgYnVnIGluIGRnZXN2ZCBmcm9tIExhcGFjayBW Mi4wLiAgVG8KICAgICAgLy8gZGVtb25zdHJhdGUgdGhlIGJ1Zywgc2V0IGJvdGggam9idSBh bmQgam9idiB0byAnTicgYW5kIGZpbmQKICAgICAgLy8gdGhlIHNpbmd1bGFyIHZhbHVlcyBv ZiBbZXllKDMpLCBleWUoMyldLiAgVGhlIHJlc3VsdCBpcwogICAgICAvLyBbLXNxcnQoMiks IC1zcXJ0KDIpLCAtc3FydCgyKV0uCiAgICAgIC8vCiAgICAgIC8vIEZvciBMYXBhY2sgMy4w LCB0aGlzIHByb2JsZW0gc2VlbXMgdG8gYmUgZml4ZWQuCgogICAgICBqb2J1ID0gJ04nOwog ICAgICBqb2J2ID0gJ04nOwogICAgICBqb2JxID0gJ04nOwogICAgICBucm93X3UgPSBucm93 X3YgPSBucm93X3EgPSAxOwogICAgICBicmVhazsKCiAgICBkZWZhdWx0OgogICAgICBicmVh azsKICAgIH0KCiAgdHlwZV9jb21wdXRlZCA9IGdzdmRfdHlwZTsKCiAgaWYgKCEgKGpvYnUg PT0gJ04nIHx8IGpvYnUgPT0gJ08nKSkgewogICAgbGVmdF9zbUEucmVzaXplIChucm93X3Us IG0pOwogIH0KICAKICBkb3VibGUgKnUgPSBsZWZ0X3NtQS5mb3J0cmFuX3ZlYyAoKTsKCiAg aWYgKCEgKGpvYnYgPT0gJ04nIHx8IGpvYnYgPT0gJ08nKSkgewogICAgbGVmdF9zbUIucmVz aXplIChucm93X3YsIHApOwogIH0KCiAgZG91YmxlICp2ID0gbGVmdF9zbUIuZm9ydHJhbl92 ZWMgKCk7CgogIHNpZ21hQS5yZXNpemUgKG4sIG4pOwogIC8vIGRvdWJsZSAqY192ZWMgID0g c2lnbWFBLmZvcnRyYW5fdmVjICgpOwoKICBzaWdtYUIucmVzaXplIChuLCBuKTsKICAvLyBk b3VibGUgKnNfdmVjICA9IHNpZ21hQi5mb3J0cmFuX3ZlYyAoKTsKCiAgaWYgKCEgKGpvYnEg PT0gJ04nIHx8IGpvYnEgPT0gJ08nKSkgewogICAgcmlnaHRfc20ucmVzaXplIChucm93X3Es IG4pOwogIH0KICBkb3VibGUgKnEgPSByaWdodF9zbS5mb3J0cmFuX3ZlYyAoKTsgIAogIAog IG9jdGF2ZV9pZHhfdHlwZSBsd29yayA9IDMqbjsKICBsd29yayA9IGx3b3JrID4gbSA/IGx3 b3JrIDogbTsKICBsd29yayA9IGx3b3JrID4gcCA/IGx3b3JrIDogcDsKICBBcnJheTxkb3Vi bGU+ICB3b3JrIChsd29yayk7CiAgQXJyYXk8ZG91YmxlPiAgIGFscGhhIChuKTsKICBBcnJh eTxkb3VibGU+ICAgYmV0YSAobik7CiAgQXJyYXk8aW50PiBpd29yayAobik7CgogIEY3N19Y RkNOIChkZ2dzdmQsIERHR1NWRCwgKEY3N19DT05TVF9DSEFSX0FSRzIgKCZqb2J1LCAxKSwK CQkJICAgICBGNzdfQ09OU1RfQ0hBUl9BUkcyICgmam9idiwgMSksCgkJCSAgICAgRjc3X0NP TlNUX0NIQVJfQVJHMiAoJmpvYnEsIDEpLAoJCQkgICAgIG0sIG4sIHAsIGssIGwsIHRtcF9k YXRhQSwgbSwgCgkJCSAgICAgdG1wX2RhdGFCLCBwLCBhbHBoYS5mb3J0cmFuX3ZlYyAoKSwK CQkJICAgICBiZXRhLmZvcnRyYW5fdmVjICgpLCB1LCBucm93X3UsIAoJCQkgICAgIHYsIG5y b3dfdiwgcSwgbnJvd19xLCB3b3JrLmZvcnRyYW5fdmVjICgpLCAKCQkJICAgICBpd29yay5m b3J0cmFuX3ZlYyAoKSwgaW5mbwoJCQkgICAgIEY3N19DSEFSX0FSR19MRU4gKDEpCgkJCSAg ICAgRjc3X0NIQVJfQVJHX0xFTiAoMSkpKTsKICAKICBpZiAoZjc3X2V4Y2VwdGlvbl9lbmNv dW50ZXJlZCkKICAgICgqY3VycmVudF9saWJvY3RhdmVfZXJyb3JfaGFuZGxlcikgKCJ1bnJl Y292ZXJhYmxlIGVycm9yIGluIGRnZ3N2ZCIpOwogCiAgaWYgKGluZm8gPCAwKSB7CiAgICAo KmN1cnJlbnRfbGlib2N0YXZlX2Vycm9yX2hhbmRsZXIpICgiZGdnc3ZkLmY6IGFyZ3VtZW50 ICVkIGlsbGVnYWwiLCAtaW5mbyk7CiAgfSBlbHNlIHsKICAgIGlmIChpbmZvID4gMCkgewog ICAgICAoKmN1cnJlbnRfbGlib2N0YXZlX2Vycm9yX2hhbmRsZXIpICgiZGdnc3ZkLmY6IEph Y29iaS10eXBlIHByb2NlZHVyZSBmYWlsZWQgdG8gY29udmVyZ2UuIik7IAoJCiAgICB9IGVs c2UgewogICAgICAvKiBGSVhNRSAKCSBpZiBtLWstbCA+PSAwLAoJIEMgPSBkaWFnKGFscGhh KGsrMTprK2wpKQoJIFMgPSBiZXRhKGsrMTprK2wpCgkgZWxzZSBpZiBtLWstbCA8IDAsCgkg QyA9IGRpYWcoYWxwaGEoaysxOm0pKQoJIFMgPSBkaWFnKGJldGEoaysxOm0pKQogICAgICAq LwogICAgICBtKys7IG0tLTsKICAgIH0KICB9CiAgcmV0dXJuIGluZm87Cn0KCnN0ZDo6b3N0 cmVhbSYKb3BlcmF0b3IgPDwgKHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEdTVkQmIGEpCnsK ICBvcyA8PCBhLmxlZnRfc2luZ3VsYXJfbWF0cml4X0EgKCkgPDwgIlxuIjsKICBvcyA8PCBh LmxlZnRfc2luZ3VsYXJfbWF0cml4X0IgKCkgPDwgIlxuIjsKICBvcyA8PCBhLnNpbmd1bGFy X3ZhbHVlc19BICgpIDw8ICJcbiI7CiAgb3MgPDwgYS5zaW5ndWxhcl92YWx1ZXNfQiAoKSA8 PCAiXG4iOwogIG9zIDw8IGEucmlnaHRfc2luZ3VsYXJfbWF0cml4ICgpIDw8ICJcbiI7Cgog IHJldHVybiBvczsKfQoKLyoKOzs7IExvY2FsIFZhcmlhYmxlczogKioqCjs7OyBtb2RlOiBD KysgKioqCjs7OyBFbmQ6ICoqKgoqLwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGlib2N0YXZlL2RibGVHU1ZELmgAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDA0 NTI3ADEwNDE3Mzc1NzEyADAxMzMwNgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAvKgoKQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IEpvaG4gVy4gRWF0b24KQ29weXJpZ2h0 IChDKSAyMDA2ICBQYXNjYWwgRHVwdWlzCgpUaGlzIGZpbGUgaXMgcGFydCBvZiBPY3RhdmUu CgpPY3RhdmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAp1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQpsYXRlciB2ZXJz aW9uLgoKT2N0YXZlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgpGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK Zm9yIG1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggT2N0YXZlOyBzZWUg dGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQQowMjExMC0xMzAxLCBVU0EuCgoqLwoKI2lmICFkZWZpbmVkIChvY3RhdmVfR1NW RF9oKQojZGVmaW5lIG9jdGF2ZV9HU1ZEX2ggMQoKI2luY2x1ZGUgPGlvc3RyZWFtPgoKI2lu Y2x1ZGUgImREaWFnTWF0cml4LmgiCiNpbmNsdWRlICJkTWF0cml4LmgiCgpjbGFzcwpHU1ZE CnsKcHVibGljOgoKICBlbnVtIHR5cGUKICAgIHsKICAgICAgZWNvbm9teSwKICAgICAgc2ln bWFfb25seQogICAgfTsKCiAgR1NWRCAodm9pZCkgOiBzaWdtYUEgKCksIHNpZ21hQiAoKSwg bGVmdF9zbUEgKCksIGxlZnRfc21CICgpLCByaWdodF9zbSAoKSB7IH0KICBHU1ZEIChjb25z dCBNYXRyaXgmIGEsIGNvbnN0IE1hdHJpeCYgYiwgdHlwZSBnc3ZkX3R5cGUgPSBHU1ZEOjpl Y29ub215KSB7IGluaXQgKGEsIGIsIGdzdmRfdHlwZSk7IH0KCiAgR1NWRCAoY29uc3QgTWF0 cml4JiBhLCBjb25zdCBNYXRyaXgmIGIsIG9jdGF2ZV9pZHhfdHlwZSYgaW5mbywgdHlwZSBn c3ZkX3R5cGUgPSBHU1ZEOjplY29ub215KQogICAgewogICAgICBpbmZvID0gaW5pdCAoYSwg YiwgZ3N2ZF90eXBlKTsKICAgIH0KCiAgR1NWRCAoY29uc3QgR1NWRCYgYSkKICAgIDogdHlw ZV9jb21wdXRlZCAoYS50eXBlX2NvbXB1dGVkKSwKICAgICAgc2lnbWFBIChhLnNpZ21hQSks IHNpZ21hQiAoYS5zaWdtYUIpLCAKICAgICAgbGVmdF9zbUEgKGEubGVmdF9zbUEpLCBsZWZ0 X3NtQiAoYS5sZWZ0X3NtQiksIHJpZ2h0X3NtIChhLnJpZ2h0X3NtKSB7IH0KCiAgR1NWRCYg b3BlcmF0b3IgPSAoY29uc3QgR1NWRCYgYSkKICAgIHsKICAgICAgaWYgKHRoaXMgIT0gJmEp Cgl7CgkgIHR5cGVfY29tcHV0ZWQgPSBhLnR5cGVfY29tcHV0ZWQ7CgkgIHNpZ21hQSA9IGEu c2lnbWFBOwoJICBzaWdtYUIgPSBhLnNpZ21hQjsKCSAgbGVmdF9zbUEgPSBhLmxlZnRfc21B OwoJICBsZWZ0X3NtQiA9IGEubGVmdF9zbUI7CgkgIHJpZ2h0X3NtID0gYS5yaWdodF9zbTsK CX0KCiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgfkdTVkQgKHZvaWQpIHsgfQoKICBE aWFnTWF0cml4IHNpbmd1bGFyX3ZhbHVlc19BICh2b2lkKSBjb25zdCB7IHJldHVybiBzaWdt YUE7IH0KICBEaWFnTWF0cml4IHNpbmd1bGFyX3ZhbHVlc19CICh2b2lkKSBjb25zdCB7IHJl dHVybiBzaWdtYUI7IH0KCiAgTWF0cml4IGxlZnRfc2luZ3VsYXJfbWF0cml4X0EgKHZvaWQp IGNvbnN0OwogIE1hdHJpeCBsZWZ0X3Npbmd1bGFyX21hdHJpeF9CICh2b2lkKSBjb25zdDsK CiAgTWF0cml4IHJpZ2h0X3Npbmd1bGFyX21hdHJpeCAodm9pZCkgY29uc3Q7CgogIGZyaWVu ZCBzdGQ6Om9zdHJlYW0mICBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtJiBvcywgY29uc3Qg R1NWRCYgYSk7Cgpwcml2YXRlOgoKICBHU1ZEOjp0eXBlIHR5cGVfY29tcHV0ZWQ7CgogIERp YWdNYXRyaXggc2lnbWFBLCBzaWdtYUI7CiAgTWF0cml4IGxlZnRfc21BLCBsZWZ0X3NtQjsK ICBNYXRyaXggcmlnaHRfc207CgogIG9jdGF2ZV9pZHhfdHlwZSBpbml0IChjb25zdCBNYXRy aXgmIGEsIGNvbnN0IE1hdHJpeCYgYiwgdHlwZSBnc3ZkX3R5cGUgPSBlY29ub215KTsKfTsK CiNlbmRpZgoKLyoKOzs7IExvY2FsIFZhcmlhYmxlczogKioqCjs7OyBtb2RlOiBDKysgKioq Cjs7OyBFbmQ6ICoqKgoqLwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGlib2N0YXZlL0NtcGx4R1NWRC5jYwAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDE0NDIyADEw NDIwMjM3MTYzADAxMzYwMwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9v dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKgoK Q29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IEpvaG4gVy4gRWF0b24KQ29weXJpZ2h0IChDKSAy MDA2IFBhc2NhbCBEdXB1aXMKVGhpcyBmaWxlIGlzIHBhcnQgb2YgT2N0YXZlLgoKT2N0YXZl IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkgaXQKdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKbGF0ZXIgdmVyc2lvbi4KCk9j dGF2ZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVApBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmZvciBtb3Jl IGRldGFpbHMuCgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIE9jdGF2ZTsgc2VlIHRoZSBmaWxl IENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlClNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEK MDIxMTAtMTMwMSwgVVNBLgoKKi8KCiNpZmRlZiBIQVZFX0NPTkZJR19ICiNpbmNsdWRlIDxj b25maWcuaD4KI2VuZGlmCgojaW5jbHVkZSA8aW9zdHJlYW0+CgojaW5jbHVkZSAiQ21wbHhH U1ZELmgiCiNpbmNsdWRlICJmNzctZmNuLmgiCiNpbmNsdWRlICJsby1lcnJvci5oIgoKZXh0 ZXJuICJDIgp7CiAgRjc3X1JFVF9UCiAgRjc3X0ZVTkMgKHpnZ3N2ZCwgWkdHU1ZEKSAgCiAg ICgKICAgICBGNzdfQ09OU1RfQ0hBUl9BUkdfREVDTCwgCS8vIEpPQlUgICAgKGlucHV0KSBD SEFSQUNURVIqMQogICAgIEY3N19DT05TVF9DSEFSX0FSR19ERUNMLCAJLy8gSk9CViAgICAo aW5wdXQpIENIQVJBQ1RFUioxCiAgICAgRjc3X0NPTlNUX0NIQVJfQVJHX0RFQ0wsIAkvLyBK T0JRICAgIChpbnB1dCkgQ0hBUkFDVEVSKjEKICAgICBjb25zdCBvY3RhdmVfaWR4X3R5cGUm LAkvLyBNICAgICAgIChpbnB1dCkgSU5URUdFUgogICAgIGNvbnN0IG9jdGF2ZV9pZHhfdHlw ZSYsCS8vIE4gICAgICAgKGlucHV0KSBJTlRFR0VSCiAgICAgY29uc3Qgb2N0YXZlX2lkeF90 eXBlJiwJLy8gUCAgICAgICAoaW5wdXQpIElOVEVHRVIKICAgICBvY3RhdmVfaWR4X3R5cGUg JiwgCS8vIEsgICAgICAgKG91dHB1dCkgSU5URUdFUgogICAgIG9jdGF2ZV9pZHhfdHlwZSAm LAkJLy8gTCAgICAgICAob3V0cHV0KSBJTlRFR0VSCiAgICAgQ29tcGxleCosCQkJLy8gQSAg ICAgICAoaW5wdXQvb3V0cHV0KSBDT01QTEVYKjE2IGFycmF5LCBkaW1lbnNpb24gKExEQSxO KQogICAgIGNvbnN0IG9jdGF2ZV9pZHhfdHlwZSYsIAkvLyBMREEgICAgIChpbnB1dCkgSU5U RUdFUgogICAgIENvbXBsZXgqLCAJCQkvLyBCICAgICAgIChpbnB1dC9vdXRwdXQpIENPTVBM RVgqMTYgYXJyYXksIGRpbWVuc2lvbiAoTERCLE4pCiAgICAgY29uc3Qgb2N0YXZlX2lkeF90 eXBlJiwgCS8vIExEQiAgICAgKGlucHV0KSBJTlRFR0VSCiAgICAgZG91YmxlKiwgCQkJLy8g QUxQSEEgICAob3V0cHV0KSBET1VCTEUgUFJFQ0lTSU9OIGFycmF5LCBkaW1lbnNpb24gKE4p CiAgICAgZG91YmxlKiwgCQkJLy8gQkVUQSAgICAob3V0cHV0KSBET1VCTEUgUFJFQ0lTSU9O IGFycmF5LCBkaW1lbnNpb24gKE4pCiAgICAgQ29tcGxleCosCQkJLy8gVSAgICAgICAob3V0 cHV0KSBDT01QTEVYKjE2IGFycmF5LCBkaW1lbnNpb24gKExEVSxNKQogICAgIGNvbnN0IG9j dGF2ZV9pZHhfdHlwZSYsCS8vIExEVSAgICAgKGlucHV0KSBJTlRFR0VSIAogICAgIENvbXBs ZXgqLCAJCQkvLyBWICAgICAgIChvdXRwdXQpIENPTVBMRVgqMTYgYXJyYXksIGRpbWVuc2lv biAoTERWLFApCiAgICAgY29uc3Qgb2N0YXZlX2lkeF90eXBlJiwJLy8gTERWICAgICAoaW5w dXQpIElOVEVHRVIKICAgICBDb21wbGV4KiwJCQkvLyBRICAgICAgIChvdXRwdXQpIENPTVBM RVgqMTYgYXJyYXksIGRpbWVuc2lvbiAoTERRLE4pIAogICAgIGNvbnN0IG9jdGF2ZV9pZHhf dHlwZSYsCS8vIExEUSAgICAgKGlucHV0KSBJTlRFR0VSCiAgICAgQ29tcGxleCosIAkJCS8v IFdPUksgICAgKHdvcmtzcGFjZSkgQ09NUExFWCoxNiBhcnJheQogICAgIGRvdWJsZSosCQkJ Ly8gUldPUksgICAod29ya3NwYWNlKSBET1VCTEUgUFJFQ0lTSU9OIGFycmF5CiAgICAgaW50 KiwJIAkJLy8gSVdPUksgICAod29ya3NwYWNlL291dHB1dCkgSU5URUdFUiBhcnJheSwgZGlt ZW5zaW9uIChOKQogICAgIG9jdGF2ZV9pZHhfdHlwZSYJCS8vIElORk8gICAgKG91dHB1dClJ TlRFR0VSCiAgICAgRjc3X0NIQVJfQVJHX0xFTl9ERUNMCiAgICAgRjc3X0NIQVJfQVJHX0xF Tl9ERUNMCiAgICAgKTsKfQoKQ29tcGxleE1hdHJpeApDb21wbGV4R1NWRDo6bGVmdF9zaW5n dWxhcl9tYXRyaXhfQSAodm9pZCkgY29uc3QKewogIGlmICh0eXBlX2NvbXB1dGVkID09IEdT VkQ6OnNpZ21hX29ubHkpCiAgICB7CiAgICAgICgqY3VycmVudF9saWJvY3RhdmVfZXJyb3Jf aGFuZGxlcikKCSgiZGJsZUdTVkQ6IFUgbm90IGNvbXB1dGVkIGJlY2F1c2UgdHlwZSA9PSBH U1ZEOjpzaWdtYV9vbmx5Iik7CiAgICAgIHJldHVybiBDb21wbGV4TWF0cml4ICgpOwogICAg fQogIGVsc2UKICAgIHJldHVybiBsZWZ0X3NtQTsKfQoKQ29tcGxleE1hdHJpeApDb21wbGV4 R1NWRDo6bGVmdF9zaW5ndWxhcl9tYXRyaXhfQiAodm9pZCkgY29uc3QKewogIGlmICh0eXBl X2NvbXB1dGVkID09IEdTVkQ6OnNpZ21hX29ubHkpCiAgICB7CiAgICAgICgqY3VycmVudF9s aWJvY3RhdmVfZXJyb3JfaGFuZGxlcikKCSgiZGJsZUdTVkQ6IFYgbm90IGNvbXB1dGVkIGJl Y2F1c2UgdHlwZSA9PSBHU1ZEOjpzaWdtYV9vbmx5Iik7CiAgICAgIHJldHVybiBDb21wbGV4 TWF0cml4ICgpOwogICAgfQogIGVsc2UKICAgIHJldHVybiBsZWZ0X3NtQjsKfQoKQ29tcGxl eE1hdHJpeApDb21wbGV4R1NWRDo6cmlnaHRfc2luZ3VsYXJfbWF0cml4ICh2b2lkKSBjb25z dAp7CiAgaWYgKHR5cGVfY29tcHV0ZWQgPT0gR1NWRDo6c2lnbWFfb25seSkKICAgIHsKICAg ICAgKCpjdXJyZW50X2xpYm9jdGF2ZV9lcnJvcl9oYW5kbGVyKQoJKCJkYmxlU1ZEOiBYIG5v dCBjb21wdXRlZCBiZWNhdXNlIHR5cGUgPT0gR1NWRDo6c2lnbWFfb25seSIpOwogICAgICBy ZXR1cm4gQ29tcGxleE1hdHJpeCAoKTsKICAgIH0KICBlbHNlCiAgICByZXR1cm4gcmlnaHRf c207Cn0KCm9jdGF2ZV9pZHhfdHlwZQpDb21wbGV4R1NWRDo6aW5pdCAoY29uc3QgQ29tcGxl eE1hdHJpeCYgYSwgY29uc3QgQ29tcGxleE1hdHJpeCYgYiwgCgkJICAgR1NWRDo6dHlwZSBn c3ZkX3R5cGUpCnsKICBvY3RhdmVfaWR4X3R5cGUgaW5mbzsKCiAgb2N0YXZlX2lkeF90eXBl IG0gPSBhLnJvd3MgKCk7CiAgb2N0YXZlX2lkeF90eXBlIG4gPSBhLmNvbHMgKCk7CiAgb2N0 YXZlX2lkeF90eXBlIHAgPSBiLnJvd3MgKCk7CiAgCiAgQ29tcGxleE1hdHJpeCBhdG1wID0g YTsKICBDb21wbGV4ICp0bXBfZGF0YUEgPSBhdG1wLmZvcnRyYW5fdmVjICgpOwogIAogIENv bXBsZXhNYXRyaXggYnRtcCA9IGI7CiAgQ29tcGxleCAqdG1wX2RhdGFCID0gYnRtcC5mb3J0 cmFuX3ZlYyAoKTsKCiAgb2N0YXZlX2lkeF90eXBlIG1pbl9tbiA9IG0gPCBuID8gbSA6IG47 CgogIGNoYXIgam9idSA9ICdVJzsKICBjaGFyIGpvYnYgPSAnVic7CiAgY2hhciBqb2JxID0g J1EnOwoKICBvY3RhdmVfaWR4X3R5cGUgbnJvd191ID0gbTsKICBvY3RhdmVfaWR4X3R5cGUg bnJvd192ID0gcDsKICBvY3RhdmVfaWR4X3R5cGUgbnJvd19xID0gbjsKCiAgb2N0YXZlX2lk eF90eXBlIGssIGw7CgogIHN3aXRjaCAoZ3N2ZF90eXBlKQogICAgewoKICAgIGNhc2UgR1NW RDo6c2lnbWFfb25seToKCiAgICAgIC8vIE5vdGU6ICBmb3IgdGhpcyBjYXNlLCBib3RoIGpv YnUgYW5kIGpvYnYgc2hvdWxkIGJlICdOJywgYnV0CiAgICAgIC8vIHRoZXJlIHNlZW1zIHRv IGJlIGEgYnVnIGluIGRnZXN2ZCBmcm9tIExhcGFjayBWMi4wLiAgVG8KICAgICAgLy8gZGVt b25zdHJhdGUgdGhlIGJ1Zywgc2V0IGJvdGggam9idSBhbmQgam9idiB0byAnTicgYW5kIGZp bmQKICAgICAgLy8gdGhlIHNpbmd1bGFyIHZhbHVlcyBvZiBbZXllKDMpLCBleWUoMyldLiAg VGhlIHJlc3VsdCBpcwogICAgICAvLyBbLXNxcnQoMiksIC1zcXJ0KDIpLCAtc3FydCgyKV0u CiAgICAgIC8vCiAgICAgIC8vIEZvciBMYXBhY2sgMy4wLCB0aGlzIHByb2JsZW0gc2VlbXMg dG8gYmUgZml4ZWQuCgogICAgICBqb2J1ID0gJ04nOwogICAgICBqb2J2ID0gJ04nOwogICAg ICBqb2JxID0gJ04nOwogICAgICBucm93X3UgPSBucm93X3YgPSBucm93X3EgPSAxOwogICAg ICBicmVhazsKCiAgICBkZWZhdWx0OgogICAgICBicmVhazsKICAgIH0KCiAgdHlwZV9jb21w dXRlZCA9IGdzdmRfdHlwZTsKCiAgaWYgKCEgKGpvYnUgPT0gJ04nIHx8IGpvYnUgPT0gJ08n KSkgewogICAgbGVmdF9zbUEucmVzaXplIChucm93X3UsIG0pOwogIH0KICAKICBDb21wbGV4 ICp1ID0gbGVmdF9zbUEuZm9ydHJhbl92ZWMgKCk7CgogIGlmICghIChqb2J2ID09ICdOJyB8 fCBqb2J2ID09ICdPJykpIHsKICAgIGxlZnRfc21CLnJlc2l6ZSAobnJvd192LCBwKTsKICB9 CgogIENvbXBsZXggKnYgPSBsZWZ0X3NtQi5mb3J0cmFuX3ZlYyAoKTsKCiAgc2lnbWFBLnJl c2l6ZSAobiwgbik7CiAgZG91YmxlICpjX3ZlYyAgPSBzaWdtYUEuZm9ydHJhbl92ZWMgKCk7 CgogIHNpZ21hQi5yZXNpemUgKG4sIG4pOwogIGRvdWJsZSAqc192ZWMgID0gc2lnbWFCLmZv cnRyYW5fdmVjICgpOwoKICBpZiAoISAoam9icSA9PSAnTicgfHwgam9icSA9PSAnTycpKSB7 CiAgICByaWdodF9zbS5yZXNpemUgKG5yb3dfcSwgbik7CiAgfQogIENvbXBsZXggKnEgPSBy aWdodF9zbS5mb3J0cmFuX3ZlYyAoKTsgIAogIAogIG9jdGF2ZV9pZHhfdHlwZSBsd29yayA9 IDMqbjsKICBsd29yayA9IGx3b3JrID4gbSA/IGx3b3JrIDogbTsKICBsd29yayA9IGx3b3Jr ID4gcCA/IGx3b3JrIDogcDsKICBBcnJheTxDb21wbGV4PiAgd29yayAobHdvcmspOwogIEFy cmF5PGRvdWJsZT4gICBhbHBoYSAobik7CiAgQXJyYXk8ZG91YmxlPiAgIGJldGEgKG4pOwog IEFycmF5PGRvdWJsZT4gICByd29yaygyKm4pOwogIEFycmF5PGludD4gICAgICBpd29yayAo bik7CgogIEY3N19YRkNOICh6Z2dzdmQsIFpHR1NWRCwgKEY3N19DT05TVF9DSEFSX0FSRzIg KCZqb2J1LCAxKSwKCQkJICAgICBGNzdfQ09OU1RfQ0hBUl9BUkcyICgmam9idiwgMSksCgkJ CSAgICAgRjc3X0NPTlNUX0NIQVJfQVJHMiAoJmpvYnEsIDEpLAoJCQkgICAgIG0sIG4sIHAs IGssIGwsIHRtcF9kYXRhQSwgbSwgCgkJCSAgICAgdG1wX2RhdGFCLCBwLCBhbHBoYS5mb3J0 cmFuX3ZlYyAoKSwKCQkJICAgICBiZXRhLmZvcnRyYW5fdmVjICgpLCB1LCBucm93X3UsIAoJ CQkgICAgIHYsIG5yb3dfdiwgcSwgbnJvd19xLCB3b3JrLmZvcnRyYW5fdmVjICgpLCAKCQkJ ICAgICByd29yay5mb3J0cmFuX3ZlYyAoKSwgaXdvcmsuZm9ydHJhbl92ZWMgKCksIAoJCQkg ICAgIGluZm8KCQkJICAgICBGNzdfQ0hBUl9BUkdfTEVOICgxKQoJCQkgICAgIEY3N19DSEFS X0FSR19MRU4gKDEpKSk7CiAgCiAgaWYgKGY3N19leGNlcHRpb25fZW5jb3VudGVyZWQpCiAg ICAoKmN1cnJlbnRfbGlib2N0YXZlX2Vycm9yX2hhbmRsZXIpICgidW5yZWNvdmVyYWJsZSBl cnJvciBpbiB6Z2dzdmQiKTsKCiAgaWYgKGluZm8gPCAwKSB7CiAgICAoKmN1cnJlbnRfbGli b2N0YXZlX2Vycm9yX2hhbmRsZXIpICgiemdnc3ZkLmY6IGFyZ3VtZW50ICVkIGlsbGVnYWwi LCAtaW5mbyk7CiAgfSAgZWxzZSB7IAogICAgaWYgKGluZm8gPiAwKSB7CiAgICAgICgqY3Vy cmVudF9saWJvY3RhdmVfZXJyb3JfaGFuZGxlcikgKCJ6Z2dzdmQuZjogSmFjb2JpLXR5cGUg cHJvY2VkdXJlIGZhaWxlZCB0byBjb252ZXJnZS4iKTsgCiAgICB9IGVsc2UgewogICAgICAv KiBGSVhNRSAKCSBpZiBtLWstbCA+PSAwLAoJIEMgPSBkaWFnKGFscGhhKGsrMTprK2wpKQoJ IFMgPSBiZXRhKGsrMTprK2wpCgkgZWxzZSBpZiBtLWstbCA8IDAsCgkgQyA9IGRpYWcoYWxw aGEoaysxOm0pKQoJIFMgPSBkaWFnKGJldGEoaysxOm0pKQogICAgICAqLwogICAgICBtKys7 IG0tLTsKICAgIH0KICB9CiAgcmV0dXJuIGluZm87Cn0KCi8qCjs7OyBMb2NhbCBWYXJpYWJs ZXM6ICoqKgo7OzsgbW9kZTogQysrICoqKgo7OzsgRW5kOiAqKioKKi8KAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAGxpYm9jdGF2ZS9DbXBseEdTVkQuaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAwMDAwNjQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwNDcyNwAxMDQxNzM3NjAwNQAwMTM0 NjEAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0 YXIgIAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoKCkNvcHlyaWdodCAoQykg MTk5NiwgMTk5NyBKb2huIFcuIEVhdG9uCkNvcHlyaWdodCAoQykgMjAwNiAgUGFzY2FsIER1 cHVpcwoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgT2N0YXZlLgoKT2N0YXZlIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKbGF0ZXIgdmVyc2lvbi4KCk9jdGF2ZSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9V VApBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBN RVJDSEFOVEFCSUxJVFkgb3IKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmZvciBtb3JlIGRldGFpbHMuCgpZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQphbG9uZyB3aXRoIE9jdGF2ZTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJ ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlClNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKMDIxMTAtMTMwMSwg VVNBLgoKKi8KCiNpZiAhZGVmaW5lZCAob2N0YXZlX0NvbXBsZXhHU1ZEX2gpCiNkZWZpbmUg b2N0YXZlX0NvbXBsZXhHU1ZEX2ggMQoKI2luY2x1ZGUgPGlvc3RyZWFtPgoKI2luY2x1ZGUg ImREaWFnTWF0cml4LmgiCiNpbmNsdWRlICJDTWF0cml4LmgiCiNpbmNsdWRlICJkYmxlR1NW RC5oIgoKY2xhc3MKQ29tcGxleEdTVkQKewpwdWJsaWM6CgogIENvbXBsZXhHU1ZEICh2b2lk KSB7IH0KCiAgQ29tcGxleEdTVkQgKGNvbnN0IENvbXBsZXhNYXRyaXgmIGEsIGNvbnN0IENv bXBsZXhNYXRyaXgmIGIsICAKCSAgICAgICBHU1ZEOjp0eXBlIGdzdmRfdHlwZSA9IEdTVkQ6 OmVjb25vbXkpIAogICAgeyAKICAgICAgaW5pdCAoYSwgYiwgZ3N2ZF90eXBlKTsgCiAgICB9 CgogIENvbXBsZXhHU1ZEIChjb25zdCBDb21wbGV4TWF0cml4JiBhLCBjb25zdCBDb21wbGV4 TWF0cml4JiBiLCAKCSAgICAgICBvY3RhdmVfaWR4X3R5cGUmIGluZm8sIEdTVkQ6OnR5cGUg Z3N2ZF90eXBlID0gR1NWRDo6ZWNvbm9teSkKICAgIHsKICAgICAgaW5mbyA9IGluaXQgKGEs IGIsIGdzdmRfdHlwZSk7CiAgICB9CgogIENvbXBsZXhHU1ZEIChjb25zdCBDb21wbGV4R1NW RCYgYSkKICAgIDogdHlwZV9jb21wdXRlZCAoYS50eXBlX2NvbXB1dGVkKSwKICAgICAgc2ln bWFBIChhLnNpZ21hQSksIHNpZ21hQiAoYS5zaWdtYUIpLCAKICAgICAgbGVmdF9zbUEgKGEu bGVmdF9zbUEpLCBsZWZ0X3NtQiAoYS5sZWZ0X3NtQiksIHJpZ2h0X3NtIChhLnJpZ2h0X3Nt KSB7IH0KCiAgQ29tcGxleEdTVkQmIG9wZXJhdG9yID0gKGNvbnN0IENvbXBsZXhHU1ZEJiBh KQogICAgewogICAgICBpZiAodGhpcyAhPSAmYSkKCXsKCSAgdHlwZV9jb21wdXRlZCA9IGEu dHlwZV9jb21wdXRlZDsKCSAgc2lnbWFBID0gYS5zaWdtYUE7CgkgIHNpZ21hQiA9IGEuc2ln bWFCOwoJICBsZWZ0X3NtQSA9IGEubGVmdF9zbUE7CgkgIGxlZnRfc21CID0gYS5sZWZ0X3Nt QjsKCSAgcmlnaHRfc20gPSBhLnJpZ2h0X3NtOwoJfQoKICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKICB+Q29tcGxleEdTVkQgKHZvaWQpIHsgfQoKICBEaWFnTWF0cml4IHNpbmd1bGFy X3ZhbHVlc19BICh2b2lkKSBjb25zdCB7IHJldHVybiBzaWdtYUE7IH0KICBEaWFnTWF0cml4 IHNpbmd1bGFyX3ZhbHVlc19CICh2b2lkKSBjb25zdCB7IHJldHVybiBzaWdtYUI7IH0KCiAg Q29tcGxleE1hdHJpeCBsZWZ0X3Npbmd1bGFyX21hdHJpeF9BICh2b2lkKSBjb25zdDsKICBD b21wbGV4TWF0cml4IGxlZnRfc2luZ3VsYXJfbWF0cml4X0IgKHZvaWQpIGNvbnN0OwoKICBD b21wbGV4TWF0cml4IHJpZ2h0X3Npbmd1bGFyX21hdHJpeCAodm9pZCkgY29uc3Q7CgogIGZy aWVuZCBzdGQ6Om9zdHJlYW0mICBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtJiBvcywgY29u c3QgQ29tcGxleEdTVkQmIGEpOwoKcHJpdmF0ZToKCiAgR1NWRDo6dHlwZSB0eXBlX2NvbXB1 dGVkOwoKICBEaWFnTWF0cml4IHNpZ21hQSwgc2lnbWFCOwogIENvbXBsZXhNYXRyaXggbGVm dF9zbUEsIGxlZnRfc21COwogIENvbXBsZXhNYXRyaXggcmlnaHRfc207CgogIG9jdGF2ZV9p ZHhfdHlwZSBpbml0IChjb25zdCBDb21wbGV4TWF0cml4JiBhLCBjb25zdCBDb21wbGV4TWF0 cml4JiBiLCAKCQkJR1NWRDo6dHlwZSBnc3ZkX3R5cGUgPSBHU1ZEOjplY29ub215KTsKfTsK CiNlbmRpZgoKLyoKOzs7IExvY2FsIFZhcmlhYmxlczogKioqCjs7OyBtb2RlOiBDKysgKioq Cjs7OyBFbmQ6ICoqKgoqLwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHNyYy9ETEQtRlVOQ1RJT05TL2dzdmQuY2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAw NjQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAxMzI2NgAxMDQxNzM3NjY2NwAwMTM2MTcAIDAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABy b290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoKCkNvcHlyaWdodCAoQykgMTk5Niwg MTk5NyBKb2huIFcuIEVhdG9uCkNvcHlyaWdodCAoQykgMjAwNiBQYXNjYWwgRHVwdWlzCgpU aGlzIGZpbGUgaXMgcGFydCBvZiBPY3RhdmUuCgpPY3RhdmUgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAp1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUKRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQg eW91ciBvcHRpb24pIGFueQpsYXRlciB2ZXJzaW9uLgoKT2N0YXZlIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U QUJJTElUWSBvcgpGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZm9yIG1vcmUgZGV0YWlscy4KCllvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCmFsb25nIHdpdGggT2N0YXZlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUKU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQowMjExMC0xMzAxLCBVU0EuCgoq LwoKI2lmZGVmIEhBVkVfQ09ORklHX0gKI2luY2x1ZGUgPGNvbmZpZy5oPgojZW5kaWYKCiNp bmNsdWRlICJDbXBseEdTVkQuaCIKI2luY2x1ZGUgImRibGVHU1ZELmgiCgojaW5jbHVkZSAi ZGVmdW4tZGxkLmgiCiNpbmNsdWRlICJlcnJvci5oIgojaW5jbHVkZSAiZ3JpcGVzLmgiCiNp bmNsdWRlICJvY3Qtb2JqLmgiCiNpbmNsdWRlICJwci1vdXRwdXQuaCIKI2luY2x1ZGUgInV0 aWxzLmgiCgpERUZVTl9ETEQgKGdzdmQsIGFyZ3MsIG5hcmdvdXQsCiAgIi0qLSB0ZXhpbmZv IC0qLVxuXApAZGVmdHlwZWZuIHtMb2FkYWJsZSBGdW5jdGlvbn0ge0B2YXJ7c30gPX0gZ3N2 ZCAoQHZhcnthfSwgQHZhcntifSlcblwKQGRlZnR5cGVmbngge0xvYWRhYmxlIEZ1bmN0aW9u fSB7W0B2YXJ7dX0sIEB2YXJ7dn0sIEB2YXJ7Y30sIEB2YXJ7c30sIEB2YXJ7eH1dID19IGdz dmQgKEB2YXJ7YX0sIEB2YXJ7Yn0pXG5cCkBjaW5kZXggZ2VuZXJhbGlzZWQgc2luZ3VsYXIg dmFsdWUgZGVjb21wb3NpdGlvblxuXApDb21wdXRlIHRoZSBnZW5lcmFsaXNlZCBzaW5ndWxh ciB2YWx1ZSBkZWNvbXBvc2l0aW9uIG9mIChAdmFye2F9LCBAdmFye2F9KVxuXApAaWZ0ZXhc blwKQHRleFxuXAokJFxuXAogQSA9IFUgQyBYXkhcblwKIEIgPSBWIFMgWF5IXG5cCiBDKkMg KyBTKlMgPSBleWUoc2l6ZShCKSlcblwKJCRcblwKQGVuZCB0ZXhcblwKQGVuZCBpZnRleFxu XApAaWZpbmZvXG5cClxuXApAZXhhbXBsZVxuXAphID0gdSAqIGMgKiB4J1xuXApiID0gdiAq IHMgKiB4J1xuXApjICogYyArIHMgKiBzID0gZXllKHNpemUoYikpXG5cCkBlbmQgZXhhbXBs ZVxuXApAZW5kIGlmaW5mb1xuXApcblwKVGhlIGZ1bmN0aW9uIEBjb2Rle2dzdmR9IG5vcm1h bGx5IHJldHVybnMgdGhlIHZlY3RvciBvZiBzaW5ndWxhciB2YWx1ZXMuXG5cCklmIGFza2Vk IGZvciB0aHJlZSByZXR1cm4gdmFsdWVzLCBpdCBjb21wdXRlc1xuXApAaWZ0ZXhcblwKQHRl eFxuXAokVSQsICRTJCwgYW5kICRWJC5cblwKQGVuZCB0ZXhcblwKQGVuZCBpZnRleFxuXApA aWZpbmZvXG5cClUsIFMsIGFuZCBWLlxuXApAZW5kIGlmaW5mb1xuXApGb3IgZXhhbXBsZSxc blwKXG5cCkBleGFtcGxlXG5cCnN2ZCAoaGlsYiAoMykpXG5cCkBlbmQgZXhhbXBsZVxuXApc blwKQG5vaW5kZW50XG5cCnJldHVybnNcblwKXG5cCkBleGFtcGxlXG5cCmFucyA9XG5cClxu XAogIDEuNDA4MzE4OVxuXAogIDAuMTIyMzI3MVxuXAogIDAuMDAyNjg3M1xuXApAZW5kIGV4 YW1wbGVcblwKXG5cCkBub2luZGVudFxuXAphbmRcblwKXG5cCkBleGFtcGxlXG5cClt1LCBz LCB2XSA9IHN2ZCAoaGlsYiAoMykpXG5cCkBlbmQgZXhhbXBsZVxuXApcblwKQG5vaW5kZW50 XG5cCnJldHVybnNcblwKXG5cCkBleGFtcGxlXG5cCnUgPVxuXApcblwKICAtMC44MjcwNCAg IDAuNTQ3NDUgICAwLjEyNzY2XG5cCiAgLTAuNDU5ODYgIC0wLjUyODI5ICAtMC43MTM3NVxu XAogIC0wLjMyMzMwICAtMC42NDkwMSAgIDAuNjg4NjdcblwKXG5cCnMgPVxuXApcblwKICAx LjQwODMyICAwLjAwMDAwICAwLjAwMDAwXG5cCiAgMC4wMDAwMCAgMC4xMjIzMyAgMC4wMDAw MFxuXAogIDAuMDAwMDAgIDAuMDAwMDAgIDAuMDAyNjlcblwKXG5cCnYgPVxuXApcblwKICAt MC44MjcwNCAgIDAuNTQ3NDUgICAwLjEyNzY2XG5cCiAgLTAuNDU5ODYgIC0wLjUyODI5ICAt MC43MTM3NVxuXAogIC0wLjMyMzMwICAtMC42NDkwMSAgIDAuNjg4NjdcblwKQGVuZCBleGFt cGxlXG5cClxuXApJZiBnaXZlbiBhIHNlY29uZCBhcmd1bWVudCwgQGNvZGV7c3ZkfSByZXR1 cm5zIGFuIGVjb25vbXktc2l6ZWRcblwKZGVjb21wb3NpdGlvbiwgZWxpbWluYXRpbmcgdGhl IHVubmVjZXNzYXJ5IHJvd3Mgb3IgY29sdW1ucyBvZiBAdmFye3V9IG9yXG5cCkB2YXJ7dn0u XG5cCkBlbmQgZGVmdHlwZWZuIikKewogIG9jdGF2ZV92YWx1ZV9saXN0IHJldHZhbDsKCiAg aW50IG5hcmdpbiA9IGFyZ3MubGVuZ3RoICgpOwoKICBpZiAobmFyZ2luIDwgMiB8fCBuYXJn aW4gPiAyIHx8IChuYXJnb3V0ID4gMSAmJiAobmFyZ291dCA8IDUgfHwgbmFyZ291dCA+IDUp KSkKICAgIHsKICAgICAgcHJpbnRfdXNhZ2UgKCJnc3ZkIik7CiAgICAgIHJldHVybiByZXR2 YWw7CiAgICB9CgogIG9jdGF2ZV92YWx1ZSBhcmdBID0gYXJncygwKSwgYXJnQiA9IGFyZ3Mo MSk7CgogIG9jdGF2ZV9pZHhfdHlwZSBuciA9IGFyZ0Eucm93cyAoKTsKICBvY3RhdmVfaWR4 X3R5cGUgbmMgPSBhcmdBLmNvbHVtbnMgKCk7CgogIG9jdGF2ZV9pZHhfdHlwZSAgbm4gPSBh cmdCLnJvd3MgKCk7CiAgb2N0YXZlX2lkeF90eXBlICBucCA9IGFyZ0IuY29sdW1ucyAoKTsK ICAKICBpZiAobnIgPT0gMCB8fCBuYyA9PSAwKQogICAgewogICAgICBpZiAobmFyZ291dCA9 PSA1KQoJewoJICByZXR2YWwoNCkgPSBpZGVudGl0eV9tYXRyaXggKG5yLCBucik7CgkgIHJl dHZhbCgzKSA9IGlkZW50aXR5X21hdHJpeCAobnIsIG5yKTsKCSAgcmV0dmFsKDIpID0gTWF0 cml4IChuciwgbmMpOwoJICByZXR2YWwoMSkgPSBpZGVudGl0eV9tYXRyaXggKG5jLCBuYyk7 CgkgIHJldHZhbCgwKSA9IGlkZW50aXR5X21hdHJpeCAobmMsIG5jKTsKCX0KICAgICAgZWxz ZQoJcmV0dmFsKDApID0gTWF0cml4ICgwLCAxKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAg IGlmICgobmMgIT0gbnApIHx8IChubiAhPSBucCkpCgl7CgkgIHByaW50X3VzYWdlICgiZ3N2 ZCIpOwoJICByZXR1cm4gcmV0dmFsOwoJfQoKICAgICAgR1NWRDo6dHlwZSB0eXBlID0gKChu YXJnb3V0ID09IDAgfHwgbmFyZ291dCA9PSAxKQoJCQk/IEdTVkQ6OnNpZ21hX29ubHkKCQkJ OiBHU1ZEOjplY29ub215ICk7CgogICAgICBpZiAoYXJnQS5pc19yZWFsX3R5cGUgKCkgJiYg YXJnQi5pc19yZWFsX3R5cGUgKCkpCgl7CgkgIE1hdHJpeCB0bXBBID0gYXJnQS5tYXRyaXhf dmFsdWUgKCk7CgkgIE1hdHJpeCB0bXBCID0gYXJnQi5tYXRyaXhfdmFsdWUgKCk7CgoJICBp ZiAoISBlcnJvcl9zdGF0ZSkKCSAgICB7CgkgICAgICBpZiAodG1wQS5hbnlfZWxlbWVudF9p c19pbmZfb3JfbmFuICgpKQoJCXsKCQkgIGVycm9yICgiZ3N2ZDogY2Fubm90IHRha2UgR1NW RCBvZiBtYXRyaXggY29udGFpbmluZyBJbmYgb3IgTmFOIHZhbHVlcyIpOyAKCQkgIHJldHVy biByZXR2YWw7CgkJfQoJICAgICAgCgkgICAgICBpZiAodG1wQi5hbnlfZWxlbWVudF9pc19p bmZfb3JfbmFuICgpKQoJCXsKCQkgIGVycm9yICgiZ3N2ZDogY2Fubm90IHRha2UgR1NWRCBv ZiBtYXRyaXggY29udGFpbmluZyBJbmYgb3IgTmFOIHZhbHVlcyIpOyAKCQkgIHJldHVybiBy ZXR2YWw7CgkJfQoJICAgICAgCgoJICAgICAgR1NWRCByZXN1bHQgKHRtcEEsIHRtcEIsIHR5 cGUpOwoKCSAgICAgIC8vIERpYWdNYXRyaXggc2lnbWEgPSByZXN1bHQuc2luZ3VsYXJfdmFs dWVzICgpOwoKCSAgICAgIGlmIChuYXJnb3V0ID09IDAgfHwgbmFyZ291dCA9PSAxKQoJCXsK CQkgIC8vIHJldHZhbCgwKSA9IHNpZ21hQS5kaWFnICgpOwoJCSAgLyogd2FybmluZyA6IHdo YXQgc2hvdWxkIHdlIHJldHVybiA/Pz8gKi8KCQl9CgkgICAgICBlbHNlCgkJewoJCSAgcmV0 dmFsKDQpID0gcmVzdWx0LnJpZ2h0X3Npbmd1bGFyX21hdHJpeCAoKTsKCQkgIHJldHZhbCgz KSA9IHJlc3VsdC5zaW5ndWxhcl92YWx1ZXNfQiAoKTsKCQkgIHJldHZhbCgyKSA9IHJlc3Vs dC5zaW5ndWxhcl92YWx1ZXNfQSAoKTsKCQkgIHJldHZhbCgxKSA9IHJlc3VsdC5sZWZ0X3Np bmd1bGFyX21hdHJpeF9CICgpOwoJCSAgcmV0dmFsKDApID0gcmVzdWx0LmxlZnRfc2luZ3Vs YXJfbWF0cml4X0EgKCk7CgkJfQoJICAgIH0KCX0KICAgICAgZWxzZSBpZiAoYXJnQS5pc19j b21wbGV4X3R5cGUgKCkgfHwgYXJnQi5pc19jb21wbGV4X3R5cGUgKCkpCgl7CgkgIENvbXBs ZXhNYXRyaXggY3RtcEEgPSBhcmdBLmNvbXBsZXhfbWF0cml4X3ZhbHVlICgpOwoJICBDb21w bGV4TWF0cml4IGN0bXBCID0gYXJnQi5jb21wbGV4X21hdHJpeF92YWx1ZSAoKTsKCgkgIGlm ICghIGVycm9yX3N0YXRlKQoJICAgIHsKCSAgICAgIGlmIChjdG1wQS5hbnlfZWxlbWVudF9p c19pbmZfb3JfbmFuICgpKQoJCXsKCQkgIGVycm9yICgiZ3N2ZDogY2Fubm90IHRha2UgR1NW RCBvZiBtYXRyaXggY29udGFpbmluZyBJbmYgb3IgTmFOIHZhbHVlcyIpOyAKCQkgIHJldHVy biByZXR2YWw7CgkJfQoJICAgICAgaWYgKGN0bXBCLmFueV9lbGVtZW50X2lzX2luZl9vcl9u YW4gKCkpCgkJewoJCSAgZXJyb3IgKCJnc3ZkOiBjYW5ub3QgdGFrZSBHU1ZEIG9mIG1hdHJp eCBjb250YWluaW5nIEluZiBvciBOYU4gdmFsdWVzIik7IAoJCSAgcmV0dXJuIHJldHZhbDsK CQl9CgoJICAgICAgQ29tcGxleEdTVkQgcmVzdWx0IChjdG1wQSwgY3RtcEIsIHR5cGUpOwoK CSAgICAgIC8vIERpYWdNYXRyaXggc2lnbWEgPSByZXN1bHQuc2luZ3VsYXJfdmFsdWVzICgp OwoKCSAgICAgIGlmIChuYXJnb3V0ID09IDAgfHwgbmFyZ291dCA9PSAxKQoJCXsKCQkgIC8v IHJldHZhbCgwKSA9IHNpZ21hLmRpYWcgKCk7IAoJCSAgLyogd2FybmluZyA6IHdoYXQgc2hv dWxkIHdlIHJldHVybiA/Pz8gKi8KCQl9CgkgICAgICBlbHNlCgkJewoJCSAgcmV0dmFsKDQp ID0gcmVzdWx0LnJpZ2h0X3Npbmd1bGFyX21hdHJpeCAoKTsKCQkgIHJldHZhbCgzKSA9IHJl c3VsdC5zaW5ndWxhcl92YWx1ZXNfQiAoKTsKCQkgIHJldHZhbCgyKSA9IHJlc3VsdC5zaW5n dWxhcl92YWx1ZXNfQSAoKTsKCQkgIHJldHZhbCgxKSA9IHJlc3VsdC5sZWZ0X3Npbmd1bGFy X21hdHJpeF9CICgpOwoJCSAgcmV0dmFsKDApID0gcmVzdWx0LmxlZnRfc2luZ3VsYXJfbWF0 cml4X0EgKCk7CgkJfQoJICAgIH0KCX0KICAgICAgZWxzZQoJewoJICBncmlwZV93cm9uZ190 eXBlX2FyZyAoImdzdmQiLCBhcmdBKTsKCSAgZ3JpcGVfd3JvbmdfdHlwZV9hcmcgKCJnc3Zk IiwgYXJnQik7CgkgIHJldHVybiByZXR2YWw7Cgl9CiAgICB9CgogIHJldHVybiByZXR2YWw7 Cn0KCi8qCjs7OyBMb2NhbCBWYXJpYWJsZXM6ICoqKgo7OzsgbW9kZTogQysrICoqKgo7Ozsg RW5kOiAqKioKKi8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== --2fHTh5uZTiUOsy+g--