Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r3zxT-006wuK-HI for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Nov 2023 14:36:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r3zxS-00EPlp-08 for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Nov 2023 14:36:34 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r3zxR-00EPlG-8z for pgsql-hackers@lists.postgresql.org; Fri, 17 Nov 2023 14:36:33 +0000 Received: from mail-ej1-x630.google.com ([2a00:1450:4864:20::630]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1r3zxN-0061iK-4j for pgsql-hackers@lists.postgresql.org; Fri, 17 Nov 2023 14:36:31 +0000 Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-9ae2cc4d17eso290044266b.1 for ; Fri, 17 Nov 2023 06:36:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1700231787; x=1700836587; darn=lists.postgresql.org; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=5S34LoEaIXRg8a8g4PGLtLjXhDe4vVHa0Z3qm7VDgec=; b=c1m7ZhERF7jgqqQOK/22rshD35aap8Y+AQL4oYRdway+vpC0HGboI9skoPdZSITRic gklX4OpHKfRPS5LwHboNW2LnIm37MnjuK1Gg2AK5wAbBh5bkSHqRdifuDUZGlY1jK6D/ TPvnfDxytX8IU2lnKrEQMdHWWCnPB2CgaPwS4eoi1a2pVopcvBDQf1YFlCtIRP27iRa0 GD0WhFRHgz7KcVspuWo6kwph6w9BB0gNN+tSG602z+Kjzx77dU8DR/ssZdFeC3CNorw7 nANI/JC0PuhEUP5afOBZmEakYvVtcxrswDALOODJpdApsNQZxCLz1aGRtcYvb3XDI2BC kzaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700231787; x=1700836587; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=5S34LoEaIXRg8a8g4PGLtLjXhDe4vVHa0Z3qm7VDgec=; b=UAOYw8RbUKkwI/W4IlBJ+NeIP7mMK24AE+UGqEqg+qCfL7s+fRTQ1gPWQ3+YsVxe5W k8BA+txlc/1XgWKDG+LCq/W8ORlPwun+kMG4zmNo++HTaXvkEKU7erpa2VmvkXgqsnVM E4Rx/8OzVqU/SqOtqs/6AewlaKDWcJQtDYARIwricjjpLbi7rI9oWYiAJkSws+lSovd1 a62sVcqKsmXkLdMedSci5VENOjoLj3QVfTNAeZXU32jizjFDgSi0rFe5YLZ9mHcbKR7W otqHze3JO21vP8sH8VyQEBHp8IeLzC07Vi/N808n9F1AI69d97UPr5jWYkWXF8DclEyh YI/w== X-Gm-Message-State: AOJu0Ywnk94hSvSOo0Epit7Bp+SWKi+0uvFoqnRyidX0XyMKZpOnHX/U ETzNSG/8x3BuZ3EoA1jC/T2u29oEvxMhic5edUNy8riwalBVkPqdOafwtTC7cNxlqh4b4IFYveb nxVot8oDw9HDlacbExHiuVMyVyvCF7IbnhGGwQ6oBZvExLYsVWJFWPOvxJfXNv+DYTgPhbHgz5Q jp2jJrAvl9SsmFNakZjP8HbjML6aeP X-Google-Smtp-Source: AGHT+IEYv3jAfQOqsyaSk2qL6yqxjOox3ObBkSFYibSdTlILhShk4Y/WcRm2P2nC/rmwch9YxFBFIQ== X-Received: by 2002:a17:906:f6d4:b0:9be:30c2:b8fd with SMTP id jo20-20020a170906f6d400b009be30c2b8fdmr14369269ejb.66.1700231786820; Fri, 17 Nov 2023 06:36:26 -0800 (PST) Received: from [10.137.0.17] (srv1.mobissw.com. [89.235.0.226]) by smtp.gmail.com with ESMTPSA id fy11-20020a170906b7cb00b009adce1c97ccsm847751ejb.53.2023.11.17.06.36.26 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 17 Nov 2023 06:36:26 -0800 (PST) Content-Type: multipart/mixed; boundary="------------rM3n01J04L00Ol8DmnNyiuA7" Message-ID: Date: Fri, 17 Nov 2023 15:36:25 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Content-Language: en-US To: PostgreSQL Hackers From: Tomas Vondra Subject: long-standing data loss bug in initial sync of logical replication List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------rM3n01J04L00Ol8DmnNyiuA7 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, It seems there's a long-standing data loss issue related to the initial sync of tables in the built-in logical replication (publications etc.). I can reproduce it fairly reliably, but I haven't figured out all the details yet and I'm a bit out of ideas, so I'm sharing what I know with the hope someone takes a look and either spots the issue or has some other insight ... On the pgsql-bugs, Depesz reported reported [1] cases where tables are added to a publication but end up missing rows on the subscriber. I didn't know what might be the issue, but given his experience I decided to take a do some blind attempts to reproduce the issue. I'm not going to repeat all the details from the pgsql-bugs thread, but I ended up writing a script that does randomized stress test tablesync under concurrent load. Attached are two scripts, where crash-test.sh does the main work, while run.sh drives the test - executes crash-test.sh in a loop and generates random parameters for it. The run.sh generates number of tables, refresh interval (after how many tables we refresh subscription) and how long to sleep between steps (to allow pgbench to do more work). The crash-test.sh then does this: 1) initializes two clusters (expects $PATH to have pg_ctl etc.) 2) configures them for logical replication (wal_level, ...) 3) creates publication and subscription on the nodes 4) creates some a bunch of tables 5) starts a pgbench that inserts data into the tables 6) adds the tables to the publication one by one, occasionally refreshing the subscription 7) waits for tablesync of all the tables to complete (so that the tables get into the 'r' state, thus replicating normally) 8) stops the pgbench 9) waits for the subscriber to fully catch up 10) compares that the tables on publisher/subscriber nodes To run this, just make sure PATH includes pg, and do e.g. ./run.sh 10 which does 10 runs of crash-test.sh with random parameters. Each run can take a couple minutes, depending on the parameters, hardware etc. Obviously, we expect the tables to match on the two nodes, but the script regularly detects cases where the subscriber is missing some of the rows. The script dumps those tables, and the rows contain timestamps and LSNs to allow "rough correlation" (imperfect thanks to concurrency). Depesz reported "gaps" in the data, i.e. missing a chunk of data, but then following rows seemingly replicated. I did see such cases too, but most of the time I see a missing chunk of rows at the end (but maybe if the test continued a bit longer, it'd replicate some rows). The report talks about replication between pg12->pg14, but I don't think the cross-version part is necessary - I'm able to reproduce the issue on individual versions (e.g. 12->12) since 12 (I haven't tried 11, but I'd be surprised if it wasn't affected too). The rows include `pg_current_wal_lsn()` to roughly track the LSN where the row is inserted, and the "gap" of missing rows for each table seems to match pg_subscription_rel.srsublsn, i.e. the LSN up to which tablesync copied data, and the table should be replicated as usual. Another interesting observation is that the issue only happens for "bulk insert" transactions, i.e. BEGIN; ... INSERT into all tables ... COMMIT; but not when each insert is a separate transaction. A bit strange. After quite a bit of debugging, I came to the conclusion this happens because we fail to invalidate caches on the publisher, so it does not realize it should start sending rows for that table. In particular, we initially build RelationSyncEntry when the table is not yet included in the publication, so we end up with pubinsert=false, thus not replicating the inserts. Which makes sense, but we then seems to fail to invalidate the entry after it's added to the publication. The other problem is that even if we happen to invalidate the entry, we call GetRelationPublications(). But even if it happens long after the table gets added to the publication (both in time and LSN terms), it still returns NIL as if the table had no publications. And we end up with pubinsert=false, skipping the inserts again. Attached are three patches against master. 0001 adds some debug logging that I found useful when investigating the issue. 0002 illustrates the issue by forcefully invalidating the entry for each change, and implementing a non-syscache variant of the GetRelationPublication(). This makes the code unbearably slow, but with both changes in place I can no longer reproduce the issue. Undoing either of the two changes makes it reproducible again. (I'll talk about 0003 later.) I suppose timing matters, so it's possible it gets "fixed" simply because of that, but I find that unlikely given the number of runs I did without observing any failure. Overall, this looks, walks and quacks like a cache invalidation issue, likely a missing invalidation somewhere in the ALTER PUBLICATION code. If we fail to invalidate the pg_publication_rel syscache somewhere, that obviously explain why GetRelationPublications() returns stale data, but it would also explain why the RelationSyncEntry is not invalidated, as that happens in a syscache callback. But I tried to do various crazy things in the ALTER PUBLICATION code, and none of that worked, so I'm a bit confused/lost. However, while randomly poking at different things, I realized that if I change the lock obtained on the relation in OpenTableList() from ShareUpdateExclusiveLock to ShareRowExclusiveLock, the issue goes away. I don't know why it works, and I don't even recall what exactly led me to the idea of changing it. This is what 0003 does - it reverts 0002 and changes the lock level. AFAIK the logical decoding code doesn't actually acquire locks on the decoded tables, so why would this change matter? The only place that does lock the relation is the tablesync, which gets RowExclusiveLock on it. And it's interesting that RowExclusiveLock does not conflict with ShareUpdateExclusiveLock, but does with ShareRowExclusiveLock. But why would this even matter, when the tablesync can only touch the table after it gets added to the publication? regards [1] https://www.postgresql.org/message-id/ZTu8GTDajCkZVjMs@depesz.com -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------rM3n01J04L00Ol8DmnNyiuA7 Content-Type: text/x-patch; charset=UTF-8; name="0001-debug-logging.patch" Content-Disposition: attachment; filename="0001-debug-logging.patch" Content-Transfer-Encoding: base64 RnJvbSA0MjUzYzM2NDgzOGRhZjI2YzA1NmM1NmQ2OTNiYzAwYjFlM2U4ZjczIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAxNiBOb3YgMjAyMyAxNzo0NjoxNCArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMS8zXSBkZWJ1ZyBsb2dnaW5nCgotLS0KIHNyYy9iYWNrZW5kL2NhdGFs b2cvcGdfc3Vic2NyaXB0aW9uLmMgICAgICAgfCAgOCArKysrKysKIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgfCAxMSArKysrKysrKwogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyB8IDI5ICsrKysrKysrKysrKysr KysrKysrLQogMyBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24u YyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMKaW5kZXggZDZhOTc4 ZjEzNjIuLjBhMmE2NDRjMjkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X3N1YnNjcmlwdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0 aW9uLmMKQEAgLTIzOCw2ICsyMzgsOCBAQCBBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZShPaWQg c3ViaWQsIE9pZCByZWxpZCwgY2hhciBzdGF0ZSwKIAlib29sCQludWxsc1tOYXR0c19wZ19z dWJzY3JpcHRpb25fcmVsXTsKIAlEYXR1bQkJdmFsdWVzW05hdHRzX3BnX3N1YnNjcmlwdGlv bl9yZWxdOwogCisJZWxvZyhMT0csICJBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZSByZWxpZCAl ZCBzdGF0ZSAlYyBMU04gJVgvJVgiLCByZWxpZCwgc3RhdGUsIExTTl9GT1JNQVRfQVJHUyhz dWJsc24pKTsKKwogCUxvY2tTaGFyZWRPYmplY3QoU3Vic2NyaXB0aW9uUmVsYXRpb25JZCwg c3ViaWQsIDAsIEFjY2Vzc1NoYXJlTG9jayk7CiAKIAlyZWwgPSB0YWJsZV9vcGVuKFN1YnNj cmlwdGlvblJlbFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwpAQCAtMjg1LDYgKzI4 Nyw4IEBAIFVwZGF0ZVN1YnNjcmlwdGlvblJlbFN0YXRlKE9pZCBzdWJpZCwgT2lkIHJlbGlk LCBjaGFyIHN0YXRlLAogCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfc3Vic2NyaXB0aW9uX3Jl bF07CiAJYm9vbAkJcmVwbGFjZXNbTmF0dHNfcGdfc3Vic2NyaXB0aW9uX3JlbF07CiAKKwll bG9nKExPRywgIlVwZGF0ZVN1YnNjcmlwdGlvblJlbFN0YXRlIHJlbGlkICVkIHN0YXRlICVj IExTTiAlWC8lWCIsIHJlbGlkLCBzdGF0ZSwgTFNOX0ZPUk1BVF9BUkdTKHN1YmxzbikpOwor CiAJTG9ja1NoYXJlZE9iamVjdChTdWJzY3JpcHRpb25SZWxhdGlvbklkLCBzdWJpZCwgMCwg QWNjZXNzU2hhcmVMb2NrKTsKIAogCXJlbCA9IHRhYmxlX29wZW4oU3Vic2NyaXB0aW9uUmVs UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CkBAIC0zNjksNiArMzczLDggQEAgR2V0 U3Vic2NyaXB0aW9uUmVsU3RhdGUoT2lkIHN1YmlkLCBPaWQgcmVsaWQsIFhMb2dSZWNQdHIg KnN1YmxzbikKIAogCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKIAorCWVs b2coTE9HLCAiR2V0U3Vic2NyaXB0aW9uUmVsU3RhdGUgcmVsaWQgJWQgc3RhdGUgJWMgTFNO ICVYLyVYIiwgcmVsaWQsIHN1YnN0YXRlLCBMU05fRk9STUFUX0FSR1MoKnN1YmxzbikpOwor CiAJcmV0dXJuIHN1YnN0YXRlOwogfQogCkBAIC01MzEsNiArNTM3LDggQEAgR2V0U3Vic2Ny aXB0aW9uUmVsYXRpb25zKE9pZCBzdWJpZCwgYm9vbCBub3RfcmVhZHkpCiAJCWVsc2UKIAkJ CXJlbHN0YXRlLT5sc24gPSBEYXR1bUdldExTTihkKTsKIAorCQllbG9nKExPRywgIkdldFN1 YnNjcmlwdGlvblJlbGF0aW9ucyByZWxpZCAlZCBzdGF0ZSAlYyBMU04gJVgvJVgiLCByZWxz dGF0ZS0+cmVsaWQsIHJlbHN0YXRlLT5zdGF0ZSwgTFNOX0ZPUk1BVF9BUkdTKHJlbHN0YXRl LT5sc24pKTsKKwogCQlyZXMgPSBsYXBwZW5kKHJlcywgcmVsc3RhdGUpOwogCX0KIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggNTJhOWYxMzZh YjkuLjQyZTU0MjMxNzJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv d29ya2VyLmMKQEAgLTUwMyw2ICs1MDMsMTAgQEAgc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9y X3JlbChMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbCkKIAkJCXJldHVybiByZWwtPnN0YXRl ID09IFNVQlJFTF9TVEFURV9SRUFEWTsKIAogCQljYXNlIFdPUktFUlRZUEVfQVBQTFk6CisJ CQllbG9nKExPRywgInNob3VsZF9hcHBseV9jaGFuZ2VzX2Zvcl9yZWwgcmVsaWQgJWQgcmV0 dXJuICVkIiwgUmVsYXRpb25HZXRSZWxpZChyZWwtPmxvY2FscmVsKSwgKHJlbC0+c3RhdGUg PT0gU1VCUkVMX1NUQVRFX1JFQURZIHx8CisJCQkJCShyZWwtPnN0YXRlID09IFNVQlJFTF9T VEFURV9TWU5DRE9ORSAmJgorCQkJCQkgcmVsLT5zdGF0ZWxzbiA8PSByZW1vdGVfZmluYWxf bHNuKSkpOworCiAJCQlyZXR1cm4gKHJlbC0+c3RhdGUgPT0gU1VCUkVMX1NUQVRFX1JFQURZ IHx8CiAJCQkJCShyZWwtPnN0YXRlID09IFNVQlJFTF9TVEFURV9TWU5DRE9ORSAmJgogCQkJ CQkgcmVsLT5zdGF0ZWxzbiA8PSByZW1vdGVfZmluYWxfbHNuKSk7CkBAIC0yMzk4LDIwICsy NDAyLDI3IEBAIGFwcGx5X2hhbmRsZV9pbnNlcnQoU3RyaW5nSW5mbyBzKQogCU1lbW9yeUNv bnRleHQgb2xkY3R4OwogCWJvb2wJCXJ1bl9hc19vd25lcjsKIAorCWVsb2coTE9HLCAiYXBw bHlfaGFuZGxlX2luc2VydCIpOworCiAJLyoKIAkgKiBRdWljayByZXR1cm4gaWYgd2UgYXJl IHNraXBwaW5nIGRhdGEgbW9kaWZpY2F0aW9uIGNoYW5nZXMgb3IgaGFuZGxpbmcKIAkgKiBz dHJlYW1lZCB0cmFuc2FjdGlvbnMuCiAJICovCiAJaWYgKGlzX3NraXBwaW5nX2NoYW5nZXMo KSB8fAogCQloYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTE9HSUNBTF9SRVBfTVNHX0lO U0VSVCwgcykpCisJeworCQllbG9nKExPRywgImFwcGx5X2hhbmRsZV9pbnNlcnQgLyBza2lw cGluZyBjaGFuZ2VzIG9yIHN0cmVhbWluZyIpOwogCQlyZXR1cm47CisJfQogCiAJYmVnaW5f cmVwbGljYXRpb25fc3RlcCgpOwogCiAJcmVsaWQgPSBsb2dpY2FscmVwX3JlYWRfaW5zZXJ0 KHMsICZuZXd0dXApOwogCXJlbCA9IGxvZ2ljYWxyZXBfcmVsX29wZW4ocmVsaWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCWVsb2coTE9HLCAiYXBwbHlfaGFuZGxlX2luc2VydCByZWxpZCAl ZCBzdGF0ZSAlYyBsc24gJVgvJVggZmluYWwgJVgvJVgiLCBSZWxhdGlvbkdldFJlbGlkKHJl bC0+bG9jYWxyZWwpLCByZWwtPnN0YXRlLCBMU05fRk9STUFUX0FSR1MocmVsLT5zdGF0ZWxz biksIExTTl9GT1JNQVRfQVJHUyhyZW1vdGVfZmluYWxfbHNuKSk7CiAJaWYgKCFzaG91bGRf YXBwbHlfY2hhbmdlc19mb3JfcmVsKHJlbCkpCiAJeworCQllbG9nKExPRywgImFwcGx5X2hh bmRsZV9pbnNlcnQgcmVsaWQgJWQgc2tpcHBpbmciLCBSZWxhdGlvbkdldFJlbGlkKHJlbC0+ bG9jYWxyZWwpKTsKIAkJLyoKIAkJICogVGhlIHJlbGF0aW9uIGNhbid0IGJlY29tZSBpbnRl cmVzdGluZyBpbiB0aGUgbWlkZGxlIG9mIHRoZQogCQkgKiB0cmFuc2FjdGlvbiBzbyBpdCdz IHNhZmUgdG8gdW5sb2NrIGl0LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0L3Bnb3V0cHV0LmMKaW5kZXggZThhZGQ1ZWU1ZDkuLjA5ZjUzYmVhMGEwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTE0MDks OSArMTQwOSwxMiBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUg YWN0aW9uID0gY2hhbmdlLT5hY3Rpb247CiAJVHVwbGVUYWJsZVNsb3QgKm9sZF9zbG90ID0g TlVMTDsKIAlUdXBsZVRhYmxlU2xvdCAqbmV3X3Nsb3QgPSBOVUxMOwotCitlbG9nKExPRywg InBnb3V0cHV0X2NoYW5nZSByZWxpZCAlZCBMU04gJVgvJVgiLCBSZWxhdGlvbkdldFJlbGlk KHJlbGF0aW9uKSwgTFNOX0ZPUk1BVF9BUkdTKGNoYW5nZS0+bHNuKSk7CiAJaWYgKCFpc19w dWJsaXNoYWJsZV9yZWxhdGlvbihyZWxhdGlvbikpCisJeworCQllbG9nKExPRywgInBnb3V0 cHV0X2NoYW5nZSByZWxpZCAlZCBMU04gJVgvJVggbm90IHB1Ymxpc2hhYmxlIiwgUmVsYXRp b25HZXRSZWxpZChyZWxhdGlvbiksIExTTl9GT1JNQVRfQVJHUyhjaGFuZ2UtPmxzbikpOwog CQlyZXR1cm47CisJfQogCiAJLyoKIAkgKiBSZW1lbWJlciB0aGUgeGlkIGZvciB0aGUgY2hh bmdlIGluIHN0cmVhbWluZyBtb2RlLiBXZSBuZWVkIHRvIHNlbmQgeGlkCkBAIC0xNDI5LDcg KzE0MzIsMTAgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCXsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9D SEFOR0VfSU5TRVJUOgogCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQp CisJCQl7CisJCQkJZWxvZyhMT0csICJwZ291dHB1dF9jaGFuZ2UgcmVsaWQgJWQgTFNOICVY LyVYIHB1Ymluc2VydD1mYWxzZSIsIFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pLCBMU05f Rk9STUFUX0FSR1MoY2hhbmdlLT5sc24pKTsKIAkJCQlyZXR1cm47CisJCQl9CiAJCQlicmVh azsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgogCQkJaWYgKCFyZWxl bnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUpCkBAIC0xNTAyLDcgKzE1MDgsMTAgQEAgcGdv dXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAogCSAqIG9mIHRoZSByb3cgZmlsdGVyIGZvciBvbGQgYW5kIG5ldyB0dXBs ZS4KIAkgKi8KIAlpZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBvbGRfc2xv dCwgJm5ld19zbG90LCByZWxlbnRyeSwgJmFjdGlvbikpCisJeworCQllbG9nKExPRywgInBn b3V0cHV0X2NoYW5nZSByZWxpZCAlZCBMU04gJVgvJVggcGdvdXRwdXRfcm93X2ZpbHRlciIs IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pLCBMU05fRk9STUFUX0FSR1MoY2hhbmdlLT5s c24pKTsKIAkJZ290byBjbGVhbnVwOworCX0KIAogCS8qCiAJICogU2VuZCBCRUdJTiBpZiB3 ZSBoYXZlbid0IHlldC4KQEAgLTE1MjIsMTAgKzE1MzEsMTMgQEAgcGdvdXRwdXRfY2hhbmdl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CiAJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7CiAKKwllbG9nKExPRywg InBnb3V0cHV0X2NoYW5nZSByZWxpZCAlZCBMU04gJVgvJVggc2VuZGluZyBkYXRhIiwgUmVs YXRpb25HZXRSZWxpZChyZWxhdGlvbiksIExTTl9GT1JNQVRfQVJHUyhjaGFuZ2UtPmxzbikp OworCiAJLyogU2VuZCB0aGUgZGF0YSAqLwogCXN3aXRjaCAoYWN0aW9uKQogCXsKIAkJY2Fz ZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5TRVJUOgorCQkJZWxvZyhMT0csICJwZ291dHB1 dF9jaGFuZ2UgcmVsaWQgJWQgTFNOICVYLyVYIHdyaXRlIGluc2VydCBtZXNzYWdlIiwgUmVs YXRpb25HZXRSZWxpZChyZWxhdGlvbiksIExTTl9GT1JNQVRfQVJHUyhjaGFuZ2UtPmxzbikp OwogCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVs LCBuZXdfc2xvdCwKIAkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMp OwogCQkJYnJlYWs7CkBAIC0xOTc0LDYgKzE5ODYsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnko UEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkvKiBpbml0aWFsaXpl IGVudHJ5LCBpZiBpdCdzIG5ldyAqLwogCWlmICghZm91bmQpCiAJeworCQllbG9nKExPRywg ImdldF9yZWxfc3luY19lbnRyeSByZWxhdGlvbiAlZCBub3QgZm91bmQiLCBSZWxhdGlvbkdl dFJlbGlkKHJlbGF0aW9uKSk7CiAJCWVudHJ5LT5yZXBsaWNhdGVfdmFsaWQgPSBmYWxzZTsK IAkJZW50cnktPnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWVudHJ5LT5zdHJlYW1lZF90eG5z ID0gTklMOwpAQCAtMTk4OCw2ICsyMDAxLDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0 cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5hdHRybWFwID0g TlVMTDsKIAl9CiAKKwllbG9nKExPRywgImdldF9yZWxfc3luY19lbnRyeSByZWxhdGlvbiAl ZCByZXBsaWNhdGVfdmFsaWQgJWQiLCBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSwgZW50 cnktPnJlcGxpY2F0ZV92YWxpZCk7CisKIAkvKiBWYWxpZGF0ZSB0aGUgZW50cnkgKi8KIAlp ZiAoIWVudHJ5LT5yZXBsaWNhdGVfdmFsaWQpCiAJewpAQCAtMjAwNyw2ICsyMDIyLDggQEAg Z2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRp b24pCiAJCWNoYXIJCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQocmVsaWQpOwogCQlMaXN0 CSAgICpyZWxfcHVibGljYXRpb25zID0gTklMOwogCisJCWVsb2coTE9HLCAiR2V0UmVsYXRp b25QdWJsaWNhdGlvbnMgcmVsYXRpb24gJWQgcHVibGljYXRpb25zICVwICVkIiwgcmVsaWQs IHB1YmlkcywgbGlzdF9sZW5ndGgocHViaWRzKSk7CisKIAkJLyogUmVsb2FkIHB1YmxpY2F0 aW9ucyBpZiBuZWVkZWQgYmVmb3JlIHVzZS4gKi8KIAkJaWYgKCFwdWJsaWNhdGlvbnNfdmFs aWQpCiAJCXsKQEAgLTIwMjEsNiArMjAzOCw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091 dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJcHVibGljYXRpb25zX3Zh bGlkID0gdHJ1ZTsKIAkJfQogCisJCWVsb2coTE9HLCAiZ2V0X3JlbF9zeW5jX2VudHJ5IHJl bGF0aW9uICVkIHB1YmxpY2F0aW9ucyAlZCIsIFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24p LCBsaXN0X2xlbmd0aChkYXRhLT5wdWJsaWNhdGlvbnMpKTsKKwogCQkvKgogCQkgKiBSZXNl dCBzY2hlbWFfc2VudCBzdGF0dXMgYXMgdGhlIHJlbGF0aW9uIGRlZmluaXRpb24gbWF5IGhh dmUKIAkJICogY2hhbmdlZC4gIEFsc28gcmVzZXQgcHViYWN0aW9ucyB0byBlbXB0eSBpbiBj YXNlIHJlbCB3YXMgZHJvcHBlZApAQCAtMjA5Nyw2ICsyMTE2LDggQEAgZ2V0X3JlbF9zeW5j X2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJfQog CQkJfQogCisJCQllbG9nKExPRywgImdldF9yZWxfc3luY19lbnRyeSByZWxhdGlvbiAlZCBw dWJsaXNoICVkIChBKSIsIFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pLCBwdWJsaXNoKTsK KwogCQkJaWYgKCFwdWJsaXNoKQogCQkJewogCQkJCWJvb2wJCWFuY2VzdG9yX3B1Ymxpc2hl ZCA9IGZhbHNlOwpAQCAtMjEyOCwxMiArMjE0OSwxNiBAQCBnZXRfcmVsX3N5bmNfZW50cnko UEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQkJfQogCQkJCX0K IAorCQkJCWVsb2coTE9HLCAiZ2V0X3JlbF9zeW5jX2VudHJ5IHJlbGF0aW9uICVkIHJlbGF0 aW9uIHB1YnMgJWQgc3Vic2NyaXB0aW9uIHB1YiAlZCIsIFJlbGF0aW9uR2V0UmVsaWQocmVs YXRpb24pLCBsaXN0X2xlbmd0aChwdWJpZHMpLCBwdWItPm9pZCk7CisKIAkJCQlpZiAobGlz dF9tZW1iZXJfb2lkKHB1YmlkcywgcHViLT5vaWQpIHx8CiAJCQkJCWxpc3RfbWVtYmVyX29p ZChzY2hlbWFQdWJpZHMsIHB1Yi0+b2lkKSB8fAogCQkJCQlhbmNlc3Rvcl9wdWJsaXNoZWQp CiAJCQkJCXB1Ymxpc2ggPSB0cnVlOwogCQkJfQogCisJCQllbG9nKExPRywgImdldF9yZWxf c3luY19lbnRyeSByZWxhdGlvbiAlZCBwdWJsaXNoICVkIChCKSIsIFJlbGF0aW9uR2V0UmVs aWQocmVsYXRpb24pLCBwdWJsaXNoKTsKKwogCQkJLyoKIAkJCSAqIElmIHRoZSByZWxhdGlv biBpcyB0byBiZSBwdWJsaXNoZWQsIGRldGVybWluZSBhY3Rpb25zIHRvCiAJCQkgKiBwdWJs aXNoLCBhbmQgbGlzdCBvZiBjb2x1bW5zLCBpZiBhcHByb3ByaWF0ZS4KQEAgLTIyMTAsNiAr MjIzNSw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0 aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+cmVwbGljYXRlX3ZhbGlkID0gdHJ1ZTsKIAl9CiAK KwllbG9nKExPRywgImdldF9yZWxfc3luY19lbnRyeSByZWxhdGlvbiAlZCBwdWJpbnNlcnQg JWQiLCBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSwgZW50cnktPnB1YmFjdGlvbnMucHVi aW5zZXJ0KTsKKwogCXJldHVybiBlbnRyeTsKIH0KIAotLSAKMi40MS4wCgo= --------------rM3n01J04L00Ol8DmnNyiuA7 Content-Type: text/x-patch; charset=UTF-8; name="0002-experimental-fix.patch" Content-Disposition: attachment; filename="0002-experimental-fix.patch" Content-Transfer-Encoding: base64 RnJvbSBiYzQwMGU3YzljOGFkMmFjNGEwYzQzMWRmYWI5ZWMyZjc4YmQ1ODcwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAxNiBOb3YgMjAyMyAxOTo1NzozMyArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMi8zXSBleHBlcmltZW50YWwgZml4CgotLS0KIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgfCA1NCArKysrKysrKysrKysrKysrKysr Ky0KIDEgZmlsZSBjaGFuZ2VkLCA1MyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXgg MDlmNTNiZWEwYTAuLmFkY2Q1Njg4MDQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTEyLDYgKzEyLDggQEAKICAqLwogI2luY2x1 ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKKyNpbmNsdWRl ICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdHVwY29udmVydC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGFydGl0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5oIgpAQCAtMjksNiArMzEsNyBAQAogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29y aWdpbi5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Bnb3V0cHV0LmgiCiAjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgogI2luY2x1 ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTE5NTgsNiArMTk2MSw1MSBAQCBzZXRfc2No ZW1hX3NlbnRfaW5fc3RyZWFtZWRfdHhuKFJlbGF0aW9uU3luY0VudHJ5ICplbnRyeSwgVHJh bnNhY3Rpb25JZCB4aWQpCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CiB9CiAK K3N0YXRpYyBMaXN0KgorR2V0UmVsYXRpb25QdWJsaWNhdGlvbnNSYXcoT2lkIHJlbGlkKQor eworCUxpc3QgKnJlc3VsdCA9IE5JTDsKKwlTeXNTY2FuRGVzYyBzY2FuZGVzYzsKKwlSZWxh dGlvbiByZWxhdGlvbjsKKwlTY2FuS2V5RGF0YSBrZXlbMV07CisJSGVhcFR1cGxlCXR1cDsK KworCWVsb2coTE9HLCAiR2V0UmVsYXRpb25QdWJsaWNhdGlvbnNSYXcgcmVsaWQgJWQgLyBz dGFydCIsIHJlbGlkKTsKKworCXJlbGF0aW9uID0gdGFibGVfb3BlbihQdWJsaWNhdGlvblJl bFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBd LAorCQkJCUFudW1fcGdfcHVibGljYXRpb25fcmVsX3BycmVsaWQsCisJCQkJQlRFcXVhbFN0 cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsK KworCXNjYW5kZXNjID0gc3lzdGFibGVfYmVnaW5zY2FuKHJlbGF0aW9uLAorCQkJCQkJCQkg IFB1YmxpY2F0aW9uUmVsUHJyZWxpZFBycHViaWRJbmRleElkLAorCQkJCQkJCQkgIHRydWUs CisJCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkJICAxLAorCQkJCQkJCQkgIGtleSk7CisKKwl3 aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW5kZXNj KSkpCisJeworCQlGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCBmb3JtOworCisJCWZvcm0gPSAo Rm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApOworCisJCWVsb2coTE9H LCAiR2V0UmVsYXRpb25QdWJsaWNhdGlvbnNSYXcgcmVsaWQgJWQgLyB0dXBsZSBwdWIgJWQi LCByZWxpZCwgZm9ybS0+cHJwdWJpZCk7CisKKwkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVz dWx0LCBmb3JtLT5wcnB1YmlkKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW5kZXNj KTsKKworCXRhYmxlX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJZWxv ZyhMT0csICJHZXRSZWxhdGlvblB1YmxpY2F0aW9uc1JhdyByZWxpZCAlZCAvIGVuZCIsIHJl bGlkKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKIC8qCiAgKiBGaW5kIG9yIGNyZWF0ZSBl bnRyeSBpbiB0aGUgcmVsYXRpb24gc2NoZW1hIGNhY2hlLgogICoKQEAgLTIwMDMsMTEgKzIw NTEsMTUgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRp b24gcmVsYXRpb24pCiAKIAllbG9nKExPRywgImdldF9yZWxfc3luY19lbnRyeSByZWxhdGlv biAlZCByZXBsaWNhdGVfdmFsaWQgJWQiLCBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSwg ZW50cnktPnJlcGxpY2F0ZV92YWxpZCk7CiAKKwkvKiBmb3JjZSByZWZyZXNoIG9mIHRoZSBl bnRyeSBmb3IgZWFjaCBjaGFuZ2UgKi8KKwllbnRyeS0+cmVwbGljYXRlX3ZhbGlkID0gZmFs c2U7CisKIAkvKiBWYWxpZGF0ZSB0aGUgZW50cnkgKi8KIAlpZiAoIWVudHJ5LT5yZXBsaWNh dGVfdmFsaWQpCiAJewogCQlPaWQJCQlzY2hlbWFJZCA9IGdldF9yZWxfbmFtZXNwYWNlKHJl bGlkKTsKLQkJTGlzdAkgICAqcHViaWRzID0gR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocmVs aWQpOworCQlMaXN0CSAgICpwdWJpZHMgPSBHZXRSZWxhdGlvblB1YmxpY2F0aW9uc1Jhdyhy ZWxpZCk7CisJCS8vIExpc3QJICAgKnB1YmlkcyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25z KHJlbGlkKTsKIAogCQkvKgogCQkgKiBXZSBkb24ndCBhY3F1aXJlIGEgbG9jayBvbiB0aGUg bmFtZXNwYWNlIHN5c3RlbSB0YWJsZSBhcyB3ZSBidWlsZAotLSAKMi40MS4wCgo= --------------rM3n01J04L00Ol8DmnNyiuA7 Content-Type: text/x-patch; charset=UTF-8; name="0003-alternative-experimental-fix-lock.patch" Content-Disposition: attachment; filename="0003-alternative-experimental-fix-lock.patch" Content-Transfer-Encoding: base64 RnJvbSBhOTViNWZlMWQ4MjQzZTE2ZmRmNWUyZGI1YTc3MzQ5NWY0NjQxODI5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAxNyBOb3YgMjAyMyAxMToyMDo1MCArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMy8zXSBhbHRlcm5hdGl2ZSBleHBlcmltZW50YWwgZml4IC0gbG9jawoK LS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgIHwgIDIg Ky0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgfCA1NCAr LS0tLS0tLS0tLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCsp LCA1NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9w dWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jCmluZGV4IGY0YmE1NzI2OTdhLi43YTRjMzE1MTgzYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTE1NzUsNyArMTU3NSw3IEBAIE9wZW5UYWJs ZUxpc3QoTGlzdCAqdGFibGVzKQogCQkvKiBBbGxvdyBxdWVyeSBjYW5jZWwgaW4gY2FzZSB0 aGlzIHRha2VzIGEgbG9uZyB0aW1lICovCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAK LQkJcmVsID0gdGFibGVfb3BlbnJ2KHQtPnJlbGF0aW9uLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2 ZUxvY2spOworCQlyZWwgPSB0YWJsZV9vcGVucnYodC0+cmVsYXRpb24sIFNoYXJlUm93RXhj bHVzaXZlTG9jayk7CiAJCW15cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CiAKIAkJ LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0 cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmlu ZGV4IGFkY2Q1Njg4MDQ1Li4wOWY1M2JlYTBhMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0xMiw4ICsxMiw2IEBACiAgKi8KICNp bmNsdWRlICJwb3N0Z3Jlcy5oIgogCi0jaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCi0jaW5j bHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R1cGNvbnZlcnQuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf cHVibGljYXRpb24uaCIKQEAgLTMxLDcgKzI5LDYgQEAKICNpbmNsdWRlICJyZXBsaWNhdGlv bi9vcmlnaW4uaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9wZ291dHB1dC5oIgogI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCi0jaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNp bmNsdWRlICJ1dGlscy9pbnZhbC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgog I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC0xOTYxLDUxICsxOTU4LDYgQEAgc2V0 X3NjaGVtYV9zZW50X2luX3N0cmVhbWVkX3R4bihSZWxhdGlvblN5bmNFbnRyeSAqZW50cnks IFRyYW5zYWN0aW9uSWQgeGlkKQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwog fQogCi1zdGF0aWMgTGlzdCoKLUdldFJlbGF0aW9uUHVibGljYXRpb25zUmF3KE9pZCByZWxp ZCkKLXsKLQlMaXN0ICpyZXN1bHQgPSBOSUw7Ci0JU3lzU2NhbkRlc2Mgc2NhbmRlc2M7Ci0J UmVsYXRpb24gcmVsYXRpb247Ci0JU2NhbktleURhdGEga2V5WzFdOwotCUhlYXBUdXBsZQl0 dXA7Ci0KLQllbG9nKExPRywgIkdldFJlbGF0aW9uUHVibGljYXRpb25zUmF3IHJlbGlkICVk IC8gc3RhcnQiLCByZWxpZCk7Ci0KLQlyZWxhdGlvbiA9IHRhYmxlX29wZW4oUHVibGljYXRp b25SZWxSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwotCi0JU2NhbktleUluaXQoJmtl eVswXSwKLQkJCQlBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcnJlbGlkLAotCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKLQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGlk KSk7Ci0KLQlzY2FuZGVzYyA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWxhdGlvbiwKLQkJCQkJ CQkJICBQdWJsaWNhdGlvblJlbFBycmVsaWRQcnB1YmlkSW5kZXhJZCwKLQkJCQkJCQkJICB0 cnVlLAotCQkJCQkJCQkgIE5VTEwsCi0JCQkJCQkJCSAgMSwKLQkJCQkJCQkJICBrZXkpOwot Ci0Jd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2Fu ZGVzYykpKQotCXsKLQkJRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwgZm9ybTsKLQotCQlmb3Jt ID0gKEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsKLQotCQllbG9n KExPRywgIkdldFJlbGF0aW9uUHVibGljYXRpb25zUmF3IHJlbGlkICVkIC8gdHVwbGUgcHVi ICVkIiwgcmVsaWQsIGZvcm0tPnBycHViaWQpOwotCi0JCXJlc3VsdCA9IGxhcHBlbmRfb2lk KHJlc3VsdCwgZm9ybS0+cHJwdWJpZCk7Ci0JfQotCi0Jc3lzdGFibGVfZW5kc2NhbihzY2Fu ZGVzYyk7Ci0KLQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKLQot CWVsb2coTE9HLCAiR2V0UmVsYXRpb25QdWJsaWNhdGlvbnNSYXcgcmVsaWQgJWQgLyBlbmQi LCByZWxpZCk7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCiAvKgogICogRmluZCBvciBjcmVh dGUgZW50cnkgaW4gdGhlIHJlbGF0aW9uIHNjaGVtYSBjYWNoZS4KICAqCkBAIC0yMDUxLDE1 ICsyMDAzLDExIEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJl bGF0aW9uIHJlbGF0aW9uKQogCiAJZWxvZyhMT0csICJnZXRfcmVsX3N5bmNfZW50cnkgcmVs YXRpb24gJWQgcmVwbGljYXRlX3ZhbGlkICVkIiwgUmVsYXRpb25HZXRSZWxpZChyZWxhdGlv biksIGVudHJ5LT5yZXBsaWNhdGVfdmFsaWQpOwogCi0JLyogZm9yY2UgcmVmcmVzaCBvZiB0 aGUgZW50cnkgZm9yIGVhY2ggY2hhbmdlICovCi0JZW50cnktPnJlcGxpY2F0ZV92YWxpZCA9 IGZhbHNlOwotCiAJLyogVmFsaWRhdGUgdGhlIGVudHJ5ICovCiAJaWYgKCFlbnRyeS0+cmVw bGljYXRlX3ZhbGlkKQogCXsKIAkJT2lkCQkJc2NoZW1hSWQgPSBnZXRfcmVsX25hbWVzcGFj ZShyZWxpZCk7Ci0JCUxpc3QJICAgKnB1YmlkcyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25z UmF3KHJlbGlkKTsKLQkJLy8gTGlzdAkgICAqcHViaWRzID0gR2V0UmVsYXRpb25QdWJsaWNh dGlvbnMocmVsaWQpOworCQlMaXN0CSAgICpwdWJpZHMgPSBHZXRSZWxhdGlvblB1YmxpY2F0 aW9ucyhyZWxpZCk7CiAKIAkJLyoKIAkJICogV2UgZG9uJ3QgYWNxdWlyZSBhIGxvY2sgb24g dGhlIG5hbWVzcGFjZSBzeXN0ZW0gdGFibGUgYXMgd2UgYnVpbGQKLS0gCjIuNDEuMAoK --------------rM3n01J04L00Ol8DmnNyiuA7 Content-Type: application/x-shellscript; name="crash-test.sh" Content-Disposition: attachment; filename="crash-test.sh" Content-Transfer-Encoding: base64 IyEvdXNyL2Jpbi9iYXNoCiMKIyAuL2NyYXNoLXRlc3Quc2ggT1VUUFVUX0RJUkVDVE9SWSBO VU1CRVJfT0ZfVEFCTEVTIFJFRlJFU0hfSU5URVJWQUwgU0xFRVBfU0VDT05EUwojCiMgT1VU UFVUX0RJUkVDVE9SWSAtIGRpcmVjdG9yeSB3aGVyZSBhbGwgdGhlIGRhdGEgZGlyZWN0b3Jp ZXMgLyBsb2dzIHdpbGwgYmUKIyBOVU1CRVJfT0ZfVEFCTEVTIC0gbnVtYmVyIG9mIHRhYmxl cyB0byBjcmVhdGUsIGFkZCB0byBwdWJsaWNhdGlvbiwgLi4uCiMgUkVGUkVTSF9JTlRFUlZB TCAtIGNhbGwgUkVGUkVTSCBQVUJMSUNBVElPTiBhZnRlciBhZGRpbmcgdGhpcyBtYW55IHRh YmxlcwojIFNMRUVQX1NFQ09ORFMgICAgLSBudW1iZXIgb2Ygc2Vjb25kcyB0byBzbGVlcCBi ZXR3ZWVuIHN0ZXBzCiMgCiMKIyBXaGF0IHRoaXMgZG9lcyAoYnJpZWZseSkKIwojIC0gaW5p dGlhbGl6ZSBhbmQgc3RhcnQgdHdvIGNsdXN0ZXJzIC0gcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyCiMgLSBjcmVhdGUgcHVibGljYXRpb24vc3Vic2NyaXB0aW9uIGJldHdlZW4gdGhlbQoj IC0gc3RhcnQgcGdiZW5jaCBpbiB0aGUgYmFja2dyb3VuZCwgdG8gZ2VuZXJhdGUgY2hhbmdl cwojIC0gY3JlYXRlIGdpdmVuIG51bWJlciBvZiB0YWJsZXMsIGFkZCB0aGVtIHRvIHRoZSBw dWJsaWNhdGlvbgojIC0gb25jZSBpbiBhIHdoaWxlIHJlZnJlc2ggdGhlIHN1YnNjcmlwdGlv biB0byBzeW5jIHRhYmxlcwojIC0gc3RvcCB0aGUgcGdiZW5jaAojIC0gd2FpdCBmb3IgdGhl IHN1YnNjcmliZXIgdG8gZnVsbHkgY2F0Y2ggdXAKIyAtIGNvbXBhcmUgZGF0YSBvbiBwdWJs aXNoZXIvc3Vic2NyaWJlciAoc2ltcGxlIGNyb3NzLWNoZWNrKQojIC0gaWYgZXZlcnl0aGlu ZyB3ZW50IE9LLCByZW1vdmUgdGhlIGRhdGEgZGlyZWN0b3JpZXMgZXRjLgojIC0gaWYgdGhl cmUgd2FzIGVycm9yLCBrZWVwIHRoZSBkYXRhIChidXQgY29tcHJlc3MsIHRvIHNhdmUgc3Bh Y2UpCiMKCk9VVERJUj0kMQpOVU1UQUJMRVM9JDIKUkVGUkVTSD0kMwpTTEVFUD0kNAoKU1RB UlRfVElNRVNUQU1QPWBkYXRlICslc2AKCmVjaG8gW2BkYXRlYF0gW2BkYXRlICslc2BdICJO VU1UQUJMRVM9JE5VTVRBQkxFUyAgU0xFRVA9JFNMRUVQICBSRUZSRVNIPSRSRUZSRVNIIgoK IyBjb25maWcKUFVCX1BPUlQ9NTAwMQpQVUJfREFUQT0kT1VURElSL2RhdGEtcHViCgpTVUJf UE9SVD01MDAyClNVQl9EQVRBPSRPVVRESVIvZGF0YS1zdWIKCiMgaW5pdGlhbGl6ZSBjbHVz dGVycwpwZ19jdGwgLUQgJFBVQl9EQVRBIGluaXQKcGdfY3RsIC1EICRTVUJfREFUQSBpbml0 CgplY2hvICd3YWxfbGV2ZWwgPSBsb2dpY2FsJyA+PiAkUFVCX0RBVEEvcG9zdGdyZXNxbC5j b25mCmVjaG8gInBvcnQgPSAkUFVCX1BPUlQiID4+ICRQVUJfREFUQS9wb3N0Z3Jlc3FsLmNv bmYKZWNobyAibG9nX2xpbmVfcHJlZml4ID0gJyVuICVtIFslcF0gWyViXSBbJWFdIFsldi8l eF0gJyIgPj4gJFBVQl9EQVRBL3Bvc3RncmVzcWwuY29uZgoKZWNobyAicG9ydCA9ICRTVUJf UE9SVCIgPj4gJFNVQl9EQVRBL3Bvc3RncmVzcWwuY29uZgplY2hvICJsb2dfbGluZV9wcmVm aXggPSAnJW4gJW0gWyVwXSBbJWJdIFslYV0gWyV2LyV4XSAnIiA+PiAkU1VCX0RBVEEvcG9z dGdyZXNxbC5jb25mCgpwZ19jdGwgLUQgJFBVQl9EQVRBIC13IC1sICRPVVRESVIvcGctcHVi LmxvZyBzdGFydApwZ19jdGwgLUQgJFNVQl9EQVRBIC13IC1sICRPVVRESVIvcGctc3ViLmxv ZyBzdGFydAoKY3JlYXRlZGIgLXAgJFBVQl9QT1JUIHRlc3QgPiAkT1VURElSL2luaXQtcHVi LmxvZyAyPiYxCmNyZWF0ZWRiIC1wICRTVUJfUE9SVCB0ZXN0ID4gJE9VVERJUi9pbml0LXN1 Yi5sb2cgMj4mMQoKIyBjcmVhdGUgdGFibGUgb24gYm90aCBlbmRzCmZvciB0IGluIGBzZXEg MSAkTlVNVEFCTEVTYDsgZG8KCXBzcWwgLXAgJFBVQl9QT1JUIHRlc3QgLWMgIkNSRUFURSBU QUJMRSB0ZXN0XyR7dH0gKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgdHMgdGltZXN0YW1wdHos IGxzbiBwZ19sc24sIHZhbCBURVhUKSIKCXBzcWwgLXAgJFNVQl9QT1JUIHRlc3QgLWMgIkNS RUFURSBUQUJMRSB0ZXN0XyR7dH0gKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgdHMgdGltZXN0 YW1wdHosIGxzbiBwZ19sc24sIHZhbCBURVhUKSIKZG9uZQoKIyBnZW5lcmF0ZSBpbnNlcnQg c2NyaXB0IGZvciBwZ2JlbmNoCmVjaG8gPiBpbnNlcnQuc3FsCmZvciB0IGluIGBzZXEgMSAk TlVNVEFCTEVTYDsgZG8KCWVjaG8gIklOU0VSVCBJTlRPIHRlc3RfJHt0fSAodHMsIGxzbiwg dmFsKSBWQUxVRVMgKGNsb2NrX3RpbWVzdGFtcCgpLCBwZ19jdXJyZW50X3dhbF9pbnNlcnRf bHNuKCksIG1kNShyYW5kb20oKTo6dGV4dCkpOyIgPj4gaW5zZXJ0LnNxbApkb25lCgpzb3J0 IC1SIGluc2VydC5zcWwgPiBpbnNlcnQudG1wICYmIG12IGluc2VydC50bXAgaW5zZXJ0LnNx bAoKZWNobyAiQkVHSU47IiA+IGluc2VydC50bXAKY2F0IGluc2VydC5zcWwgPj4gaW5zZXJ0 LnRtcAplY2hvICJDT01NSVQ7IiA+PiBpbnNlcnQudG1wCm12IGluc2VydC50bXAgaW5zZXJ0 LnNxbAoKbXYgaW5zZXJ0LnNxbCAkT1VURElSLwoKIyBydW4gcGdiZW5jaCBvbiB0aGUgc291 cmNlIGluIHRoZSBiYWNrZ3JvdW5kICg1bSBpcyBvdmVya2lsbCwgd2Ugd2lsbCB0ZXJtaW5h dGUpCnBnYmVuY2ggLW4gLWMgOCAtZiAkT1VURElSL2luc2VydC5zcWwgLXAgJFBVQl9QT1JU IC1UIDM2MDAgdGVzdCA+ICRPVVRESVIvcGdiZW5jaC5sb2cgMj4mMSAmCgojIGNyZWF0ZSBw dWJsaWNhdGlvbiBvbiAxMiBhbmQgYWRkIHRoZSB0YWJsZSB0byBpdAplY2hvIFtgZGF0ZWBd IFtgZGF0ZSArJXNgXSAiY3JlYXRpbmcgcHVibGljYXRpb24iCnBzcWwgLXAgJFBVQl9QT1JU IHRlc3QgLWMgIkNSRUFURSBQVUJMSUNBVElPTiBwIgoKIyBzbGVlcCBmb3IgYSBmZXcgc2Vj b25kcwplY2hvIFtgZGF0ZWBdIFtgZGF0ZSArJXNgXSAic2xlZXBpbmciCnNsZWVwICRTTEVF UAoKIyBhZGQgY3JlYXRlIHN1YnNjcmlwdGlvbiBvbiAxNAplY2hvIFtgZGF0ZWBdIFtgZGF0 ZSArJXNgXSAiY3JlYXRpbmcgc3Vic2NyaXB0aW9uIgpwc3FsIC1wICRTVUJfUE9SVCB0ZXN0 IC1jICJDUkVBVEUgU1VCU0NSSVBUSU9OIHMgQ09OTkVDVElPTiAnYXBwbGljYXRpb25fbmFt ZT10ZXN0IGhvc3Q9bG9jYWxob3N0IHVzZXI9dXNlciBkYm5hbWU9dGVzdCBwb3J0PSRQVUJf UE9SVCcgUFVCTElDQVRJT04gcCIKCiMgc2xlZXAgZm9yIGEgZmV3IHNlY29uZHMKZWNobyBb YGRhdGVgXSBbYGRhdGUgKyVzYF0gInNsZWVwaW5nIgpzbGVlcCAkU0xFRVAKCmZvciB0IGlu IGBzZXEgMSAkTlVNVEFCTEVTYDsgZG8KCglsc249YHBzcWwgLXAgJFBVQl9QT1JUIHRlc3Qg LXQgLUEgLWMgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSJgCgllY2hvIFtgZGF0ZWBd IFtgZGF0ZSArJXNgXSAiYWRkaW5nIHRhYmxlICR0IHRvIHB1YmxpY2F0aW9uIFskbHNuXSIK Cglwc3FsIC1wICRQVUJfUE9SVCB0ZXN0IC1jICJBTFRFUiBQVUJMSUNBVElPTiBwIEFERCBU QUJMRSB0ZXN0XyR7dH0iCgoJbT0kKCh0ICUgUkVGUkVTSCkpCgoJaWYgWyAiJG0iID09ICIw IiBdOyB0aGVuCgoJCWxzbj1gcHNxbCAtcCAkUFVCX1BPUlQgdGVzdCAtdCAtQSAtYyAiU0VM RUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpImAKCQllY2hvIFtgZGF0ZWBdIFtgZGF0ZSArJXNg XSAicmVmcmVzaGluZyBwdWJsaWNhdGlvbiBbJGxzbl0iCgoJCXBzcWwgLXAgJFNVQl9QT1JU IHRlc3QgLWMgIkFMVEVSIFNVQlNDUklQVElPTiBzIFJFRlJFU0ggUFVCTElDQVRJT04iCgkJ cHNxbCAtcCAkUFVCX1BPUlQgdGVzdCAtYyAiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigp IEFTIHdhbF9sc24sIHBnX2N1cnJlbnRfd2FsX2luc2VydF9sc24oKSBBUyBpbnNlcnRfbHNu LCAoU0VMRUNUIHJlbG5hbWUgRlJPTSBwZ19jbGFzcyBBUyBjIFdIRVJFIGMub2lkID0gcC5w cnJlbGlkKSBBUyByZWxuYW1lLCAqIEZST00gcGdfcHVibGljYXRpb25fcmVsIHAgT1JERVIg QlkgcHJyZWxpZCIgPj4gJE9VVERJUi9wZ19wdWJsaWNhdGlvbl9yZWwubG9nIDI+JjEKCWZp Cgpkb25lCgpsc249YHBzcWwgLXAgJFBVQl9QT1JUIHRlc3QgLXQgLUEgLWMgIlNFTEVDVCBw Z19jdXJyZW50X3dhbF9sc24oKSJgCmVjaG8gW2BkYXRlYF0gW2BkYXRlICslc2BdICJyZWZy ZXNoaW5nIHB1YmxpY2F0aW9uIFskbHNuXSIKCnBzcWwgLXAgJFNVQl9QT1JUIHRlc3QgLWMg IkFMVEVSIFNVQlNDUklQVElPTiBzIFJFRlJFU0ggUFVCTElDQVRJT04iCgpwc3FsIC1wICRQ VUJfUE9SVCB0ZXN0IC1jICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkgQVMgd2FsX2xz biwgcGdfY3VycmVudF93YWxfaW5zZXJ0X2xzbigpIEFTIGluc2VydF9sc24sIChTRUxFQ1Qg cmVsbmFtZSBGUk9NIHBnX2NsYXNzIEFTIGMgV0hFUkUgYy5vaWQgPSBwLnBycmVsaWQpIEFT IHJlbG5hbWUsICogRlJPTSBwZ19wdWJsaWNhdGlvbl9yZWwgcCBPUkRFUiBCWSBwcnJlbGlk IiA+PiAkT1VURElSL3BnX3B1YmxpY2F0aW9uX3JlbC5sb2cgMj4mMQoKIyB3YWl0IGZvciBh bGwgdGFibGVzIHRvIGdldCBpbiBzeW5jIChlc3NlbnRpYWxseSB3aGF0IHdhaXRfZm9yX3N1 YnNjcmlwdGlvbl9zeW5jIGRvZXMpCndoaWxlIC9iaW4vdHJ1ZTsgZG8KCWVjaG8gW2BkYXRl YF0gW2BkYXRlICslc2BdICJ3YWl0aW5nIGZvciBzdWJzY3JpcHRpb24iCgljPWBwc3FsIC1w ICRTVUJfUE9SVCB0ZXN0IC10IC1BIC1jICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19zdWJz Y3JpcHRpb25fcmVsIFdIRVJFIHNyc3Vic3RhdGUgPSAnciciYAoJaWYgWyAiJGMiID09ICIk TlVNVEFCTEVTIiBdOyB0aGVuCgkJYnJlYWsKCWZpCgllY2hvIFtgZGF0ZWBdIFtgZGF0ZSAr JXNgXSAic3luY2VkICRjIHRhYmxlcyBvdXQgb2YgJE5VTVRBQkxFUyIKCXNsZWVwIDEKZG9u ZQoKIyBzbGVlcCBmb3IgYSBmZXcgbW9yZSBzZWNvbmRzLCB0byBnZW5lcmF0ZSBtb3JlIHBn YmVuY2ggY2hhbmdlcwplY2hvIFtgZGF0ZWBdIFtgZGF0ZSArJXNgXSAic2xlZXBpbmciCnNs ZWVwICRTTEVFUAoKIyBraWxsIHRoZSBwZ2JlbmNoLCBhbmQgd2FpdCBmb3IgYWxsIHRoZSBh c3NvY2lhdGVkIGJhY2tlbmRzIHRvIHRlcm1pbmF0ZQpraWxsYWxsIHBnYmVuY2gKCndoaWxl IC9iaW4vdHJ1ZTsgZG8KCWVjaG8gW2BkYXRlYF0gW2BkYXRlICslc2BdICJ3YWl0aW5nIGZv ciBwZ2JlbmNoIGJhY2tlbmRzIHRvIGRpZSIKCXI9YHBzcWwgLXAgJFBVQl9QT1JUIHRlc3Qg LXQgLUEgLWMgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUg YXBwbGljYXRpb25fbmFtZSA9ICdwZ2JlbmNoJyJgCglpZiBbICIkciIgPT0gIjAiIF07IHRo ZW4KCQlicmVhawoJZmkKCXNsZWVwIDEKZG9uZQoKIyBnZXQgY3VycmVudCBMU04gb24gcHVi bGlzaGVyIGFuZCB3YWl0IGZvciBzdWJzY3JpYmVyIHRvIGZ1bGx5IGNhdGNodXAgKHNhbWUg YXMgd2FpdF9mb3JfY2F0Y2h1cCkKbHNuPWBwc3FsIC1wICRQVUJfUE9SVCB0ZXN0IC10IC1B IC1jICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiYAoKZWNobyBbYGRhdGVgXSBbYGRh dGUgKyVzYF0gIndhaXRpbmcgZm9yIHJlcGxheSBvZiBMU04gJGxzbiIKCnN0YXJ0X2xzbj1g cHNxbCAtcCAkUFVCX1BPUlQgdGVzdCAtdCAtQSAtYyAiU0VMRUNUIHJlcGxheV9sc24gRlJP TSBwZ19jYXRhbG9nLnBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFt ZSA9ICd0ZXN0JyJgCnN0YXJ0X3RpbWU9YGRhdGUgKyVzYAoKd2hpbGUgL2Jpbi90cnVlOyBk bwoJZWNobyBbYGRhdGVgXSBbYGRhdGUgKyVzYF0gIndhaXRpbmcgZm9yIGNhdGNodXAgJGxz biIKCXJlcGxheV9sc249YHBzcWwgLXAgJFBVQl9QT1JUIHRlc3QgLXQgLUEgLWMgIlNFTEVD VCByZXBsYXlfbHNuIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJF IGFwcGxpY2F0aW9uX25hbWUgPSAndGVzdCciYAoJcmVtYWluaW5nX3dhbD1gcHNxbCAtcCAk UFVCX1BPUlQgdGVzdCAtdCAtQSAtYyAiU0VMRUNUICgnJGxzbicgLSByZXBsYXlfbHNuKSBG Uk9NIHBnX2NhdGFsb2cucGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9u YW1lID0gJ3Rlc3QnImAKCXJlbWFpbmluZ19rYj0kKChyZW1haW5pbmdfd2FsLzEwMjQpKQoK CWN1cnJlbnRfdGltZT1gZGF0ZSArJXNgCglkZWx0YV90aW1lPSQoKGN1cnJlbnRfdGltZSAt IHN0YXJ0X3RpbWUgKyAxKSkKCWRlbHRhX3dhbD1gcHNxbCAtcCAkUFVCX1BPUlQgdGVzdCAt dCAtQSAtYyAiU0VMRUNUIChyZXBsYXlfbHNuIC0gJyRzdGFydF9sc24nKSBGUk9NIHBnX2Nh dGFsb2cucGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJ3Rl c3QnImAKCXRvdGFsX3dhbD1gcHNxbCAtcCAkUFVCX1BPUlQgdGVzdCAtdCAtQSAtYyAiU0VM RUNUICgnJGxzbic6OnBnX2xzbiAtICckc3RhcnRfbHNuJzo6cGdfbHNuKSBGUk9NIHBnX2Nh dGFsb2cucGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJ3Rl c3QnImAKCXNwZWVkPSQoKGRlbHRhX3dhbCAvIGRlbHRhX3RpbWUpKQoKCWlmIFsgIiRzcGVl ZCIgIT0gIjAiIF07IHRoZW4KCQlyZW1haW5pbmdfc2VjPSQoKHJlbWFpbmluZ193YWwgLyBz cGVlZCkpCgllbHNlCgkJcmVtYWluaW5nX3NlYz0nPz8/JwoJZmkKCglyPWBwc3FsIC1wICRQ VUJfUE9SVCB0ZXN0IC10IC1BIC1jICJTRUxFQ1QgcmVwbGF5X2xzbiA+PSAnJGxzbicgQU5E IHN0YXRlID0gJ3N0cmVhbWluZycgRlJPTSBwZ19jYXRhbG9nLnBnX3N0YXRfcmVwbGljYXRp b24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICd0ZXN0JyJgCglpZiBbICIkciIgPT0gInQi IF07IHRoZW4KCQlicmVhawoJZmkKCWVjaG8gW2BkYXRlYF0gW2BkYXRlICslc2BdICJyZXBs YXkgTFNOICRyZXBsYXlfbHNuLCByZW1haW5pbmcgJHJlbWFpbmluZ19rYiBrQiAvICRyZW1h aW5pbmdfc2VjIHNlY29uZHMiCglzbGVlcCAxCmRvbmUKCiMgZHVtcCBiYXNpYyBpbmZvIGFi b3V0IHN1YnNjcmlwdGlvbiBhbmQgc3Vic2NyaWJlcgoKcHNxbCAtcCAkU1VCX1BPUlQgdGVz dCAtYyAiU0VMRUNUIG9pZCwgcmVsbmFtZSBGUk9NIHBnX2NsYXNzIEFTIGMgV0hFUkUgcmVs bmFtZSBsaWtlICd0ZXN0XyUnIE9SREVSIEJZIHJlbG5hbWUiID4gJE9VVERJUi9wZ19jbGFz cy5sb2cgMj4mMQoKcHNxbCAtcCAkU1VCX1BPUlQgdGVzdCAtYyAiU0VMRUNUIChTRUxFQ1Qg cmVsbmFtZSBGUk9NIHBnX2NsYXNzIEFTIGMgV0hFUkUgYy5vaWQgPSByLnNycmVsaWQpIEFT IHJlbG5hbWUsICogRlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIEFTIHIgT1JERVIgQlkgMSIg PiAkT1VURElSL3BnX3N1YnNjcmlwdGlvbl9yZWwubG9nIDI+JjEKCnBzcWwgLXAgJFBVQl9Q T1JUIHRlc3QgLWMgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSBBUyB3YWxfbHNuLCBw Z19jdXJyZW50X3dhbF9pbnNlcnRfbHNuKCkgQVMgaW5zZXJ0X2xzbiwgKiBGUk9NIHBnX3N0 YXRfcmVwbGljYXRpb24iID4gJE9VVERJUi9wZ19zdGF0X3JlcGxpY2F0aW9uLmxvZyAyPiYx CgojIGNoZWNrIGNvbnNpc3RlbmN5IC0gY29tcGFyZSBudW1iZXIgb2YgcmVjb3Jkcywgc3Vt LCAuLi4gY291bGQgYmUgbWFkZSBtb3JlIHRob3JvdWdoLCBidXQgZ29vZCBlbm91Z2gKZWNo byBbYGRhdGVgXSBbYGRhdGUgKyVzYF0gImNhdWdodCB1cCwgY2hlY2sgY29uc2lzdGVuY3ki CnI9Ik9LIgpjPTAKZm9yIHQgaW4gYHNlcSAxICROVU1UQUJMRVNgOyBkbwoJYT1gcHNxbCAt cCAkUFVCX1BPUlQgdGVzdCAtdCAtQSAtYyAiU0VMRUNUIGNvdW50KCopLCBzdW0oaWQpIEZS T00gdGVzdF8ke3R9ImAKCWI9YHBzcWwgLXAgJFNVQl9QT1JUIHRlc3QgLXQgLUEgLWMgIlNF TEVDVCBjb3VudCgqKSwgc3VtKGlkKSBGUk9NIHRlc3RfJHt0fSJgCglpZiBbICIkYSIgPT0g IiRiIiBdOyB0aGVuCgkJZWNobyBbYGRhdGVgXSBbYGRhdGUgKyVzYF0gIiR0IE9LICgkYSAk YikiCgllbHNlCgkJZWNobyBbYGRhdGVgXSBbYGRhdGUgKyVzYF0gIiR0IEVSUk9SICgkYSAk YikiCgkJcj0iRVJST1IiCgkJYz0xCglmaQpkb25lCgojIGNsZWFudXAgdGFibGVzIG9uIGJv dGggZW5kcwpmb3IgdCBpbiBgc2VxIDEgJE5VTVRBQkxFU2A7IGRvCglwc3FsIC1wICRQVUJf UE9SVCB0ZXN0IC1jICJTRUxFQ1QgKiBGUk9NIHRlc3RfJHt0fSBPUkRFUiBCWSBpZCIgPiAk T1VURElSL3Rlc3RfJHt0fV9wdWIuZGF0YQoJcHNxbCAtcCAkU1VCX1BPUlQgdGVzdCAtYyAi U0VMRUNUICogRlJPTSB0ZXN0XyR7dH0gT1JERVIgQlkgaWQiID4gJE9VVERJUi90ZXN0XyR7 dH1fc3ViLmRhdGEKZG9uZQoKcGdfY3RsIC1EICRQVUJfREFUQSAtdyAtbSBpbW1lZGlhdGUg c3RvcApwZ19jdGwgLUQgJFNVQl9EQVRBIC13IC1tIGltbWVkaWF0ZSBzdG9wCgojIGlmIHdl bnQgT0ssIHJlbW92ZSB0aGUgZGF0YSBkaXJlY3RvcmllcwppZiBbICIkciIgPT0gIk9LIiBd OyB0aGVuCglybSAtUmYgJFBVQl9EQVRBCglybSAtUmYgJFNVQl9EQVRBCgkjIHJlbW92ZSB0 aGUgbG9nIGZpbGVzIHRvbywgbWF5IGJlIHByZXR0eSBsYXJnZSBkdWUgdG8gZGVidWdnaW5n CglybSAkT1VURElSL3BnLXB1Yi5sb2cgJE9VVERJUi9wZy1zdWIubG9nCmVsc2UKCSMgZm9y IGVycm9yLCBjb21wcmVzcyB0aGUgZGF0YSBkaXJlY3RvcmllcwoJdGFyIC1jICRQVUJfREFU QSB8IGd6aXAgLS1mYXN0ID4gJFBVQl9EQVRBLnRnegoJdGFyIC1jICRTVUJfREFUQSB8IGd6 aXAgLS1mYXN0ID4gJFNVQl9EQVRBLnRnegoJIyBhbmQgYWxzbyB0aGUgZGF0YSBkaXJlY3Rv cmllcwoJcGlneiAtLWZhc3QgJE9VVERJUi9wZy1wdWIubG9nICRPVVRESVIvcGctc3ViLmxv ZwpmaQoKZGF0ZQoKRU5EX1RJTUVTVEFNUD1gZGF0ZSArJXNgCgplY2hvIFtgZGF0ZWBdIFtg ZGF0ZSArJXNgXSAiUlVOVElNRTogIiAkKChFTkRfVElNRVNUQU1QIC0gU1RBUlRfVElNRVNU QU1QKSkKZWNobyBbYGRhdGVgXSBbYGRhdGUgKyVzYF0gIlJFU1VMVDogJHIiCgpleGl0ICRj Cg== --------------rM3n01J04L00Ol8DmnNyiuA7 Content-Type: application/x-shellscript; name="run.sh" Content-Disposition: attachment; filename="run.sh" Content-Transfer-Encoding: base64 IyEvdXNyL2Jpbi9iYXNoCiMKIyBSdW5zIGNyYXNoLXRlc3Quc2ggd2l0aCByYW5kb21pemVk IHBhcmFtZXRlcnMgaW4gYSBsb29wLCBhbmQgZW5zdXJlcwojIGVhY2ggcnVuIGNvbXBsZXRl cyB3aXRoaW4gMTUgbWludXRlcyAodG8gcHJldmVudCBpbmZpbml0ZSBsb2NrdXBzKS4KIwoj IFRoZSByYW5kb21pemVkIHBhcmFtZXRlcnMgYXJlCiMKIyBudW1iZXIgb2YgdGFibGVzIC0g MTAgdG8gMTEwCiMgcmVmcmVzaCBpbnRlcnZhbCAtIDEwIHRvIDExMCB0YWJsZXMKIyBzbGVl cCBsZW5ndGggICAgIC0gMSB0byAxMSBzZWNvbmRzCiMKIyBFYWNoIHJ1biBzdG9yZXMgZGF0 YSBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeSwgZGVyaXZlZCBmcm9tIHRpbWVzdGFtcC4KIwoK UlVOUz0kMQpUSU1FT1VUPTkwMAoKI2ZvciB2IGluIDEyIDE0IDE2IG1hc3RlcjsgZG8KZm9y IHYgaW4gbWFzdGVyOyBkbwoKCVBVQl9WRVJTSU9OPSR2CglTVUJfVkVSU0lPTj0kdgoKCWZv ciByIGluIGBzZXEgMSAkUlVOU2A7IGRvCgoJCXQ9JCgoMTAgKyBSQU5ET00gJSAxMDApKQkj IG51bWJlciBvZiB0YWJsZXMKCQltPSQoKDEwICsgUkFORE9NICUgMTAwKSkJIyBwdWJsaWNh dGlvbiByZWZyZXNoIGludGVydmFsCgkJcz0kKCgxICsgUkFORE9NICUgMTApKQkJIyBzbGVl cCBiZXR3ZWVuIHN0ZXBzIChzZWNvbmRzKQoKCQlPVVRESVI9YGRhdGUgKyVZJW0lZC0lSCVN JVNgCgoJCWlmIFsgLWQgIiRPVVRESVIiIF07IHRoZW4KCQkJZWNobyAiZGlyZWN0b3J5ICRP VVRESVIgYWxyZWFkeSBleGlzdHMiCgkJCWV4aXQKCQlmaQoKCQlta2RpciAkT1VURElSCgoJ CSMgbWFrZSBzdXJlIHRoZSB0ZXN0IGlzIHRlcm1pbmF0ZWQgYWZ0ZXIgMWggKG9yIGNoYW5n ZSAKCQlzbGVlcCAkVElNRU9VVCAmJiBraWxsIGBwZ3JlcCBjcmFzaC10ZXN0LnNoYCAmCgkJ cGlkPSQhCgoJCSMgcnVuIHRoZSB0ZXN0IHdpdGggcmFuZG9tIHBhcmFtZXRlcnMKCQkuL2Ny YXNoLXRlc3Quc2ggJE9VVERJUiAkdCAkbSAgJHMgPiAkT1VURElSL3J1bi5sb2cgMj4mMQoJ CXI9JD8KCgkJa2lsbCAkcGlkCgoJCSMgbWFrZSBzdXJlIGl0J3MgZGVhZAoJCWtpbGxhbGwg LTkgLXEgcG9zdGdyZXMKCgkJaWYgWyAiJHIiID09ICIwIiBdOyB0aGVuCgkJCWVjaG8gJE9V VERJUiAkdCAkbSAkcyA6IE9LCgkJZWxzZQoJCQllY2hvICRPVVRESVIgJHQgJG0gJHMgOiBF UlJPUgoJCWZpCgoJZG9uZQoKZG9uZQo= --------------rM3n01J04L00Ol8DmnNyiuA7--