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 1tshaT-004pE3-3d for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Mar 2025 12:22:57 +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 1tshaR-00CJWm-HC for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Mar 2025 12:22:55 +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 1tshaQ-00CJWe-Lj for pgsql-hackers@lists.postgresql.org; Thu, 13 Mar 2025 12:22:55 +0000 Received: from mail-vk1-xa2c.google.com ([2607:f8b0:4864:20::a2c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tshaL-002btZ-0V for pgsql-hackers@lists.postgresql.org; Thu, 13 Mar 2025 12:22:53 +0000 Received: by mail-vk1-xa2c.google.com with SMTP id 71dfb90a1353d-523effaf7ecso452252e0c.3 for ; Thu, 13 Mar 2025 05:22:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741868568; x=1742473368; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9yfULmM4cwFLblPgv6Z6+T0Sc/Q0zidSUoSA6+l6354=; b=ReJN81uGiGPWZLJi9ZN5/rOirNqcsepAwphdZ3R9AppyCKDzOlU94CtAz11NChKuFT V/vsFYBz/KF746LbWnD5UpB/5abKdk3s/WQKV3ju4KO3JBqEMEd8uJkkGxhGVk+wCZ1Q DlLsfBiuQiayR5lWVwi7aAE1u46Pu1ZJnfjL9gc52ATekLJIUcRbgCRewUzPTn1K1/0H 21Pp2Ghn9fgUY+633dwYmH3GQfRRZSRQa3DaPorSxk1ZYlUEklG7CPkaGzR9qTaLnIlk mhEJaJk0oKjYzE0hsfq7+tjhY2Ci4zvd9wyJBxHasou5wBK+PrTDhK21EoWGBPOG6CjZ gsVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741868568; x=1742473368; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9yfULmM4cwFLblPgv6Z6+T0Sc/Q0zidSUoSA6+l6354=; b=Cafgrlvlnw87FwmmMSu05bWda+daJ2t+apotzHsEJFBkj0cVmxamBwwwO4ox5J70f0 p8J6J1SZATEzxaxFEWHWJmy45JBYnb2rZK11/7hELCiZ5oInqFmwpwB5mt+dhiy+p7ZE WRyJO3ejgnkZr59tay/ckKu3qsZAz9UFlcVtQCVynvLlsi/KI03zRn8d/4hPkrwdJNTV 8gijSlZybtetiVWveu9Bl0Szldie/22x1ouBcXeJb4mNSbst4ia/MRbcyRPU0A60KLUA Imotvwv07sWURbPzfCtH6C13WQdDa9a/y5+oeKAQKa+dtmFWn8k5YR4UAXqN7wfgUDOG YBIg== X-Forwarded-Encrypted: i=1; AJvYcCVE4KFmQOUT7GqgFWLtatgSPeS0oFTGR2fU2KizsBY4Ti2CQkSBUoUdx/Kg/PSdAk8YC3G8d41mvfw405uR@lists.postgresql.org X-Gm-Message-State: AOJu0YwCsA7bdLzHswX6krH7fFvNvGMXA3bPYQ/2Pz5T18n1yUnMrE6/ m/RE+x7p7ApMcMJZB+qq1LayMRsUphLSwf7YGAAV3ZYa5P00fCIvoOngaPDgvWnPhnjyOTdDNRK 7tkLbwljjk0brFEShTGgCqTDxWXk= X-Gm-Gg: ASbGncutKYa6ixMxuBCByPokk7mDA5mvK4n5LYeyhE/79yUYL/ZLbI/UCTsgCRvfPkf j38g1CmHqtAOxGCDEduSKABa6xROcByo9NiwgxDwOS+lFhDHh8ieZto3KVVHDEx23kaoQrhArk7 64vw/2lJilt60A81TTw5zHJj3Vx+vaVrvyfYePO1o4HnJuIUKUgnDochhkzsibkINIwCxv X-Google-Smtp-Source: AGHT+IHnf5hFSozstT0YAIdEAWGx+pR+QHBtR8RQtCk6GO52t34dB3+RzBux/3YhqJ05dMQh/nqc9gSMywHUUYm9eB0= X-Received: by 2002:a05:6122:3c8e:b0:518:a261:adca with SMTP id 71dfb90a1353d-523e4266b33mr16950512e0c.8.1741868568269; Thu, 13 Mar 2025 05:22:48 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Thu, 13 Mar 2025 20:22:11 +0800 X-Gm-Features: AQ5f1JrD0kKtXlvXh_nUjffu9X2nFmZBj_fiuBIoR1j30f9FOFxVn9howsmyp7o Message-ID: Subject: Re: support virtual generated column not null constraint To: Xuneng Zhou Cc: Navneet Kumar , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000042976e0630386172" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000042976e0630386172 Content-Type: text/plain; charset="UTF-8" hi. new patch attached. 0001 for virtual generated columns not null. minor change to fix the compiler warning. 0002-0004 is for domain over virtual generated columns. 0002: we need to compute the generation expression for the domain with constraints, thus rename ExecComputeStoredGenerated to ExecComputeGenerated. 0003. preparatory patch for 0004. soft error variant of ExecPrepareExpr, ExecInitExpr. for soft error processing of CoerceToDomain. see below description. 0004. no table rewrite for adding virtual generation column over domain with constraints. (syntax: ALTER TABLE xx ADD COLUMN X domain_type GENERATED ALWAYS AS (expression) VIRTUAL in phase3, ATRewriteTable: we already initialized AlteredTableInfo->newvals via ``ex->exprstate = ExecInitExpr((Expr *) ex->expr, NULL);`` we can easily evaluate it via ExecCheck. if fail, then error out. -------------- reason for the 0003 patch: ALTER DOMAIN ADD CONSTRAINT. since the virtual generated column has no actual storage. so, in validateDomainCheckConstraint we cannot use ``` d = slot_getattr(slot, attnum, &isNull); econtext->domainValue_datum = d; econtext->domainValue_isNull = isNull; conResult = ExecEvalExprSwitchContext(exprstate, econtext, &isNull); ``` to check whether existing generation expression satisfy the newly added domain constraint or not. we also need to evaluate error softly, because ALTER DOMAIN ADD CONSTRAINT need check exists table domain value satisfy the newly constraint or not. if we not do soft error evaluation, the error message would be like: ``value for domain gtestdomain1 violates check constraint "gtestdomain1_check"`` but we want error message like: ERROR: column "b" of table "gtest24" contains values that violate the new constraint -------------- --00000000000042976e0630386172 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0002-rename-ExecComputeStoredGenerated-to-ExecComputeG.patch" Content-Disposition: attachment; filename="v4-0002-rename-ExecComputeStoredGenerated-to-ExecComputeG.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m87bjma62 RnJvbSAzMDQ4NTQxOGU2Y2QyZGQ5OTMwOTRiMzUxYjZhZDEwYjRkODg1ZGEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMTMgTWFyIDIwMjUgMjA6MTU6NDYgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 IDIvNF0gcmVuYW1lIEV4ZWNDb21wdXRlU3RvcmVkR2VuZXJhdGVkIHRvCiBFeGVjQ29tcHV0ZUdl bmVyYXRlZAoKdG8gc3VwcG9ydCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gb3ZlciBkb21haW4g dHlwZSwgd2UgYWN0dWFsbHkKbmVlZCBjb21wdXRlIHRoZSB2aXJ0dWFsIGdlbmVyYXRlZCBleHBy ZXNzaW9uLgp3ZSBkaWQgaXQgYXQgRXhlY0NvbXB1dGVHZW5lcmF0ZWQgZm9yIHN0b3JlZCwgd2Ug Y2FuIHVzZSBpdCBmb3IgdmlydHVhbC4Kc28gZG8gdGhlIHJlbmFtZS4KCmRpc2N1c3Npb246IGh0 dHBzOi8vcG9zdGdyLmVzL20vQ0FDSnVmeEhBclF5c2JEa1dGbXZLK0QxVFBIUVdXVHhXTjE1Y011 VWFUWVgzeGhRWGdnQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29w eWZyb20uYyAgICAgICAgfCAgNCArKy0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGlj YXRpb24uYyB8ICA4ICsrKystLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFi bGUuYyB8IDIwICsrKysrKysrKystLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuaCB8ICA1ICsrLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMo KyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHlmcm9tLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4IGJjZjY2ZjBh ZGY4Li43ZjEwNzhkZmUzOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZy b20uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCkBAIC0xMzQ2LDggKzEz NDYsOCBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJCQkvKiBDb21wdXRlIHN0 b3JlZCBnZW5lcmF0ZWQgY29sdW1ucyAqLwogCQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9SZWxh dGlvbkRlc2MtPnJkX2F0dC0+Y29uc3RyICYmCiAJCQkJCXJlc3VsdFJlbEluZm8tPnJpX1JlbGF0 aW9uRGVzYy0+cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfc3RvcmVkKQotCQkJCQlFeGVj Q29tcHV0ZVN0b3JlZEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIG15c2xvdCwKLQkJ CQkJCQkJCQkJICAgQ01EX0lOU0VSVCk7CisJCQkJCUV4ZWNDb21wdXRlR2VuZXJhdGVkKHJlc3Vs dFJlbEluZm8sIGVzdGF0ZSwgbXlzbG90LAorCQkJCQkJCQkJCSBDTURfSU5TRVJUKTsKIAogCQkJ CS8qCiAJCQkJICogSWYgdGhlIHRhcmdldCBpcyBhIHBsYWluIHRhYmxlLCBjaGVjayB0aGUgY29u c3RyYWludHMgb2YKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNh dGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggMGE5 Yjg4MGQyNTAuLjA1OTMxYmIzMzkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRp b24uYwpAQCAtNTQ5LDggKzU0OSw4IEBAIEV4ZWNTaW1wbGVSZWxhdGlvbkluc2VydChSZXN1bHRS ZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkvKiBDb21wdXRlIHN0b3JlZCBnZW5lcmF0ZWQgY29s dW1ucyAqLwogCQlpZiAocmVsLT5yZF9hdHQtPmNvbnN0ciAmJgogCQkJcmVsLT5yZF9hdHQtPmNv bnN0ci0+aGFzX2dlbmVyYXRlZF9zdG9yZWQpCi0JCQlFeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRl ZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIHNsb3QsCi0JCQkJCQkJCQkgICBDTURfSU5TRVJUKTsK KwkJCUV4ZWNDb21wdXRlR2VuZXJhdGVkKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSwgc2xvdCwKKwkJ CQkJCQkJIENNRF9JTlNFUlQpOwogCiAJCS8qIENoZWNrIHRoZSBjb25zdHJhaW50cyBvZiB0aGUg dHVwbGUgKi8KIAkJaWYgKHJlbC0+cmRfYXR0LT5jb25zdHIpCkBAIC02NDYsOCArNjQ2LDggQEAg RXhlY1NpbXBsZVJlbGF0aW9uVXBkYXRlKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJ CS8qIENvbXB1dGUgc3RvcmVkIGdlbmVyYXRlZCBjb2x1bW5zICovCiAJCWlmIChyZWwtPnJkX2F0 dC0+Y29uc3RyICYmCiAJCQlyZWwtPnJkX2F0dC0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3N0b3Jl ZCkKLQkJCUV4ZWNDb21wdXRlU3RvcmVkR2VuZXJhdGVkKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSwg c2xvdCwKLQkJCQkJCQkJCSAgIENNRF9VUERBVEUpOworCQkJRXhlY0NvbXB1dGVHZW5lcmF0ZWQo cmVzdWx0UmVsSW5mbywgZXN0YXRlLCBzbG90LAorCQkJCQkJCQkgQ01EX1VQREFURSk7CiAKIAkJ LyogQ2hlY2sgdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSB0dXBsZSAqLwogCQlpZiAocmVsLT5yZF9h dHQtPmNvbnN0cikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlU YWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXggYjBm ZTUwMDc1YWQuLjUzNzU1Y2NkYmFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFi bGUuYwpAQCAtNTE3LDEyICs1MTcsMTIgQEAgRXhlY0luaXRHZW5lcmF0ZWQoUmVzdWx0UmVsSW5m byAqcmVzdWx0UmVsSW5mbywKIH0KIAogLyoKLSAqIENvbXB1dGUgc3RvcmVkIGdlbmVyYXRlZCBj b2x1bW5zIGZvciBhIHR1cGxlCisgKiBDb21wdXRlIGdlbmVyYXRlZCBjb2x1bW5zIGZvciBhIHR1 cGxlLgorICogd2UgbWlnaHQgc3VwcG9ydCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gaW4gZnV0 dXJlLCBjdXJyZW50bHkgbm90LgogICovCiB2b2lkCi1FeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRl ZChSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAotCQkJCQkJICAgRVN0YXRlICplc3RhdGUs IFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJICAgQ21kVHlwZSBjbWR0eXBlKQorRXhlY0Nv bXB1dGVHZW5lcmF0ZWQoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywgRVN0YXRlICplc3Rh dGUsCisJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgQ21kVHlwZSBjbWR0eXBlKQogewogCVJl bGF0aW9uCXJlbCA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKIAlUdXBsZURlc2MJ dHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKQEAgLTkxMSw4ICs5MTEsOCBAQCBFeGVj SW5zZXJ0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkJICovCiAJCWlmIChyZXN1bHRS ZWxhdGlvbkRlc2MtPnJkX2F0dC0+Y29uc3RyICYmCiAJCQlyZXN1bHRSZWxhdGlvbkRlc2MtPnJk X2F0dC0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3N0b3JlZCkKLQkJCUV4ZWNDb21wdXRlU3RvcmVk R2VuZXJhdGVkKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSwgc2xvdCwKLQkJCQkJCQkJCSAgIENNRF9J TlNFUlQpOworCQkJRXhlY0NvbXB1dGVHZW5lcmF0ZWQocmVzdWx0UmVsSW5mbywgZXN0YXRlLCBz bG90LAorCQkJCQkJCQkgQ01EX0lOU0VSVCk7CiAKIAkJLyoKIAkJICogSWYgdGhlIEZEVyBzdXBw b3J0cyBiYXRjaGluZywgYW5kIGJhdGNoaW5nIGlzIHJlcXVlc3RlZCwgYWNjdW11bGF0ZQpAQCAt MTAzOCw4ICsxMDM4LDggQEAgRXhlY0luc2VydChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQs CiAJCSAqLwogCQlpZiAocmVzdWx0UmVsYXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0ciAmJgogCQkJ cmVzdWx0UmVsYXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0ci0+aGFzX2dlbmVyYXRlZF9zdG9yZWQp Ci0JCQlFeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIHNs b3QsCi0JCQkJCQkJCQkgICBDTURfSU5TRVJUKTsKKwkJCUV4ZWNDb21wdXRlR2VuZXJhdGVkKHJl c3VsdFJlbEluZm8sIGVzdGF0ZSwgc2xvdCwKKwkJCQkJCQkJIENNRF9JTlNFUlQpOwogCiAJCS8q CiAJCSAqIENoZWNrIGFueSBSTFMgV0lUSCBDSEVDSyBwb2xpY2llcy4KQEAgLTIxMjYsOCArMjEy Niw4IEBAIEV4ZWNVcGRhdGVQcmVwYXJlU2xvdChSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZv LAogCSAqLwogCWlmIChyZXN1bHRSZWxhdGlvbkRlc2MtPnJkX2F0dC0+Y29uc3RyICYmCiAJCXJl c3VsdFJlbGF0aW9uRGVzYy0+cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfc3RvcmVkKQot CQlFeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIHNsb3Qs Ci0JCQkJCQkJCSAgIENNRF9VUERBVEUpOworCQlFeGVjQ29tcHV0ZUdlbmVyYXRlZChyZXN1bHRS ZWxJbmZvLCBlc3RhdGUsIHNsb3QsCisJCQkJCQkJIENNRF9VUERBVEUpOwogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuaAppbmRleCBiZjNiNTkyZTI4Zi4uZGUzNzRj NDZkM2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5o CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5oCkBAIC0xOSw5ICsx OSw4IEBAIGV4dGVybiB2b2lkIEV4ZWNJbml0R2VuZXJhdGVkKFJlc3VsdFJlbEluZm8gKnJlc3Vs dFJlbEluZm8sCiAJCQkJCQkJICBFU3RhdGUgKmVzdGF0ZSwKIAkJCQkJCQkgIENtZFR5cGUgY21k dHlwZSk7CiAKLWV4dGVybiB2b2lkIEV4ZWNDb21wdXRlU3RvcmVkR2VuZXJhdGVkKFJlc3VsdFJl bEluZm8gKnJlc3VsdFJlbEluZm8sCi0JCQkJCQkJCQkgICBFU3RhdGUgKmVzdGF0ZSwgVHVwbGVU YWJsZVNsb3QgKnNsb3QsCi0JCQkJCQkJCQkgICBDbWRUeXBlIGNtZHR5cGUpOworZXh0ZXJuIHZv aWQgRXhlY0NvbXB1dGVHZW5lcmF0ZWQoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywgRVN0 YXRlICplc3RhdGUsCisJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCxDbWRUeXBlIGNtZHR5 cGUpOwogCiBleHRlcm4gTW9kaWZ5VGFibGVTdGF0ZSAqRXhlY0luaXRNb2RpZnlUYWJsZShNb2Rp ZnlUYWJsZSAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQg RXhlY0VuZE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUpOwotLSAKMi4zNC4xCgo= --00000000000042976e0630386172 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0004-domain-over-virtual-generated-column.patch" Content-Disposition: attachment; filename="v4-0004-domain-over-virtual-generated-column.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m87bjm9v0 RnJvbSA5ZTliNGNiZjMyYmI1NTk5YTM0ODAzYjdkMTJiYWQxZGNiMWFkMDNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMTMgTWFyIDIwMjUgMjA6MTg6MzIgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 IDQvNF0gZG9tYWluIG92ZXIgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uLgoKZG9tYWlucyB0aGF0 IGRvbid0IGhhdmUgY29uc3RyYWludHMgd29yayBqdXN0IGZpbmUuCmRvbWFpbiBjb25zdHJhaW50 cyBjaGVjayBoYXBwZW4gd2l0aGluIEV4ZWNDb21wdXRlR2VuZXJhdGVkLgp3ZSBjb21wdXRlIHRo ZSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gaW4gRXhlY0NvbXB1dGVHZW5lcmF0ZWQgYW5kIGRp c2NhcmRlZCB0aGUgdmFsdWUuCgpkb21haW5fd2l0aF9jb25zdGFpbnQgY2FuIGJlIGVsZW1lbnQg dHlwZSBvZiByYW5nZSwgbXVsdGlyYW5nZSwgYXJyYXksIGNvbXBvc2l0ZS4KdG8gYmUgYnVsbGV0 cHJvb2YsIGlmIHRoaXMgY29sdW1uIHR5cGUgaXMgbm90IHR5cGUgb2YgVFlQVFlQRV9CQVNFIG9y IGl0J3MgYW4gYXJyYXkgdHlwZSwKdGhlbiB3ZSBkbyBhY3R1YWxseSBjb21wdXRlIHRoZSBnZW5l cmF0ZWQgZXhwcmVzc2lvbi4KVGhpcyBjYW4gYmUgaGF2ZSBuZWdhdGl2ZSBwZXJmb3JtYW5jZSBm b3IgSU5TRVJUcwoKVGhlIGZvbGxvd2luZyB0d28gcXVlcnkgc2hvd3MgaW4gcGdfY2F0YWxvZywg bW9zdCBvZiB0aGUgc3lzdGVtIHR5cGUgaXMgVFlQVFlQRV9CQVNFLgpTbyBJIGd1ZXNzIHRoaXMg Y29tcHJvbWlzZSBpcyBmaW5lLgoKc2VsZWN0IGNvdW50KCopLHR5cHR5cGUgZnJvbSBwZ190eXBl IHdoZXJlIHR5cG5hbWVzcGFjZSA9IDExIGdyb3VwIGJ5IDI7CnNlbGVjdCB0eXBuYW1lLCB0eXBy ZWxpZCwgcGMucmVsdHlwZSwgcGMub2lkLCBwdC5vaWQKZnJvbSBwZ190eXBlIHB0IGpvaW4gcGdf Y2xhc3MgcGMgb24gcGMub2lkID0gcHQudHlwcmVsaWQKd2hlcmUgcHQudHlwbmFtZXNwYWNlID0g MTEgYW5kIHB0LnR5cHR5cGUgPSAnYycgYW5kIHBjLnJlbHR5cGUgPSAwOwoKQUxURVIgRE9NQUlO IEFERCBDT05TVFJBSU5UIHZhcmlhbnQgaXMgc3VwcG9ydGVkLgpET01BSU4gd2l0aCBkZWZhdWx0 IHZhbHVlcyBhcmUgc3VwcG9ydGVkLiBidXQgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIGFscmVh ZHkgaGF2ZQpnZW5lcmF0ZWQgZXhwcmVzc2lvbiwgc28gZG9tYWluIGRlZmF1bHQgZXhwcmVzc2lv biBkb2Vzbid0IG1hdHRlci4KCkFMVEVSIFRBQkxFIEFERCBWSVJUVUFMIEdFTkVSQVRFRCBDT0xV TU4uCm5lZWQgdGFibGUgc2NhbiB0byB2ZXJpZnkgbmV3IGNvbHVtbiBnZW5lcmF0aW9uIGV4cHJl c3Npb24gdmFsdWUKc2F0aXNmaWVkIHRoZSBkb21haW4gY29uc3RyYWludHMuCmJ1dCBubyBuZWVk IHRhYmxlIHJld3JpdGUhCgpkaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBQ0p1ZnhI QXJReXNiRGtXRm12SytEMVRQSFFXV1R4V04xNWNNdVVhVFlYM3hoUVhnZ0BtYWlsLmdtYWlsLmNv bQotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5jICAgICAgICAgICAgICAgICAgICB8ICAx MSAtCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jICAgICAgICAgICAgICAgfCAgIDUg Ky0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICA0MSAr KystCiBzcmMvYmFja2VuZC9jb21tYW5kcy90eXBlY21kcy5jICAgICAgICAgICAgICAgfCAxOTcg KysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUu YyAgICAgICAgfCAgOTAgKysrKysrLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZmFzdF9k ZWZhdWx0Lm91dCAgICB8ICAgNCArCiAuLi4vcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmly dHVhbC5vdXQgICAgfCAgNjUgKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9mYXN0X2RlZmF1 bHQuc3FsICAgICAgICAgfCAgIDQgKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3Zp cnR1YWwuc3FsICAgIHwgIDQ3ICsrKystCiA5IGZpbGVzIGNoYW5nZWQsIDM4MiBpbnNlcnRpb25z KCspLCA4MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2hl YXAuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5jCmluZGV4IGI4MDdhYjY2NjY4Li4zOWUy YWMzODE0MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMKQEAgLTU4MywxNyArNTgzLDYgQEAgQ2hlY2tBdHRyaWJ1 dGVUeXBlKGNvbnN0IGNoYXIgKmF0dG5hbWUsCiAJfQogCWVsc2UgaWYgKGF0dF90eXB0eXBlID09 IFRZUFRZUEVfRE9NQUlOKQogCXsKLQkJLyoKLQkJICogUHJldmVudCB2aXJ0dWFsIGdlbmVyYXRl ZCBjb2x1bW5zIGZyb20gaGF2aW5nIGEgZG9tYWluIHR5cGUuICBXZQotCQkgKiB3b3VsZCBoYXZl IHRvIGVuZm9yY2UgZG9tYWluIGNvbnN0cmFpbnRzIHdoZW4gY29sdW1ucyB1bmRlcmx5aW5nCi0J CSAqIHRoZSBnZW5lcmF0ZWQgY29sdW1uIGNoYW5nZS4gIFRoaXMgY291bGQgcG9zc2libHkgYmUg aW1wbGVtZW50ZWQsCi0JCSAqIGJ1dCBpdCdzIG5vdC4KLQkJICovCi0JCWlmIChmbGFncyAmIENI S0FUWVBFX0lTX1ZJUlRVQUwpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQllcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJZXJybXNnKCJ2aXJ0dWFsIGdlbmVyYXRl ZCBjb2x1bW4gXCIlc1wiIGNhbm5vdCBoYXZlIGEgZG9tYWluIHR5cGUiLCBhdHRuYW1lKSk7Ci0K IAkJLyoKIAkJICogSWYgaXQncyBhIGRvbWFpbiwgcmVjdXJzZSB0byBjaGVjayBpdHMgYmFzZSB0 eXBlLgogCQkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4IDdmMTA3OGRmZTM5Li5iOGM5 ODRlMWVjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCkBAIC0xMzQzLDkgKzEzNDMsMTAgQEAg Q29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJ LyogQ29tcHV0ZSBzdG9yZWQgZ2VuZXJhdGVkIGNvbHVtbnMgKi8KKwkJCQkvKiBDb21wdXRlIGdl bmVyYXRlZCBjb2x1bW5zICovCiAJCQkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVz Yy0+cmRfYXR0LT5jb25zdHIgJiYKLQkJCQkJcmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNj LT5yZF9hdHQtPmNvbnN0ci0+aGFzX2dlbmVyYXRlZF9zdG9yZWQpCisJCQkJCShyZXN1bHRSZWxJ bmZvLT5yaV9SZWxhdGlvbkRlc2MtPnJkX2F0dC0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3N0b3Jl ZCB8fAorCQkJCQkgcmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0 ci0+aGFzX2dlbmVyYXRlZF92aXJ0dWFsKSkKIAkJCQkJRXhlY0NvbXB1dGVHZW5lcmF0ZWQocmVz dWx0UmVsSW5mbywgZXN0YXRlLCBteXNsb3QsCiAJCQkJCQkJCQkJIENNRF9JTlNFUlQpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IGI4ZDgyYmEyODA5Li41ZmU2ZjA5ZTI0OCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTU5ODAsNyArNTk4MCw3IEBAIEFUUmV3cml0ZVRh YmxlcyhBbHRlclRhYmxlU3RtdCAqcGFyc2V0cmVlLCBMaXN0ICoqd3F1ZXVlLCBMT0NLTU9ERSBs b2NrbW9kZSwKIAkJCSAqIHJlYnVpbGQgZGF0YS4KIAkJCSAqLwogCQkJaWYgKHRhYi0+Y29uc3Ry YWludHMgIT0gTklMIHx8IHRhYi0+dmVyaWZ5X25ld19ub3RudWxsIHx8Ci0JCQkJdGFiLT5wYXJ0 aXRpb25fY29uc3RyYWludCAhPSBOVUxMKQorCQkJCXRhYi0+bmV3dmFscyB8fCB0YWItPnBhcnRp dGlvbl9jb25zdHJhaW50ICE9IE5VTEwpCiAJCQkJQVRSZXdyaXRlVGFibGUodGFiLCBJbnZhbGlk T2lkKTsKIAogCQkJLyoKQEAgLTYxMDAsNiArNjEwMCw3IEBAIEFUUmV3cml0ZVRhYmxlKEFsdGVy ZWRUYWJsZUluZm8gKnRhYiwgT2lkIE9JRE5ld0hlYXApCiAJQnVsa0luc2VydFN0YXRlIGJpc3Rh dGU7CiAJaW50CQkJdGlfb3B0aW9uczsKIAlFeHByU3RhdGUgICpwYXJ0cXVhbHN0YXRlID0gTlVM TDsKKwlMaXN0CQkqdmlydHVhbF9jaGVjayA9IE5JTDsKIAogCS8qCiAJICogT3BlbiB0aGUgcmVs YXRpb24ocykuICBXZSBoYXZlIHN1cmVseSBhbHJlYWR5IGxvY2tlZCB0aGUgZXhpc3RpbmcKQEAg LTYxNzUsNiArNjE3NiwxNiBAQCBBVFJld3JpdGVUYWJsZShBbHRlcmVkVGFibGVJbmZvICp0YWIs IE9pZCBPSUROZXdIZWFwKQogCiAJCS8qIGV4cHIgYWxyZWFkeSBwbGFubmVkICovCiAJCWV4LT5l eHByc3RhdGUgPSBFeGVjSW5pdEV4cHIoKEV4cHIgKikgZXgtPmV4cHIsIE5VTEwpOworCQlpZiAo dGFiLT5yZXdyaXRlID09IDAgJiYgZXgtPmlzX2dlbmVyYXRlZCkKKwkJeworCQkJRm9ybV9wZ19h dHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIobmV3VHVwRGVzYywgZXgtPmF0dG51bSAtIDEp OworCQkJaWYgKGF0dHItPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRV QUwgJiYKKwkJCQlEb21haW5IYXNDb25zdHJhaW50cyhhdHRyLT5hdHR0eXBpZCkpCisJCQl7CisJ CQkJQXNzZXJ0KCFhdHRyLT5hdHRpc2Ryb3BwZWQpOworCQkJCXZpcnR1YWxfY2hlY2sgPSBsYXBw ZW5kX2ludCh2aXJ0dWFsX2NoZWNrLCBhdHRyLT5hdHRudW0pOworCQkJfQorCQl9CiAJfQogCiAJ bm90bnVsbF9hdHRycyA9IE5JTDsKQEAgLTYyMDYsNiArNjIxNywxMyBAQCBBVFJld3JpdGVUYWJs ZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIE9pZCBPSUROZXdIZWFwKQogCQkJYWxsX3ZpcnR1YWxf bm5zID0gbGFwcGVuZF9pbnQoYWxsX3ZpcnR1YWxfbm5zLCBhdHRyLT5hdHRudW0pOwogCX0KIAor CS8qCisJICogV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBkb21haW4gY29uc3RyYWludHMgb24gdGhl IHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbgorCSAqIGFyZSBzYXRpc2ZpZWQsIHdoaWNoIHJlcXVp cmVzIHRhYmxlIHNjYW4uCisJKi8KKwlpZiAodmlydHVhbF9jaGVjayAhPSBOSUwpCisJCW5lZWRz Y2FuID0gdHJ1ZTsKKwogCWlmIChuZXdyZWwgfHwgbmVlZHNjYW4pCiAJewogCQlFeHByQ29udGV4 dCAqZWNvbnRleHQ7CkBAIC02NDY5LDYgKzY0ODcsMjcgQEAgQVRSZXdyaXRlVGFibGUoQWx0ZXJl ZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lETmV3SGVhcCkKIAkJCQl9CiAJCQl9CiAKKwkJCWlmICh2 aXJ0dWFsX2NoZWNrICE9IE5JTCkKKwkJCXsKKwkJCQlmb3JlYWNoKGwsIHRhYi0+bmV3dmFscykK KwkJCQl7CisJCQkJCU5ld0NvbHVtblZhbHVlICpleCA9IGxmaXJzdChsKTsKKworCQkJCQlpZiAo IWV4LT5pc19nZW5lcmF0ZWQpCisJCQkJCQljb250aW51ZTsKKworCQkJCQlpZihsaXN0X21lbWJl cl9pbnQodmlydHVhbF9jaGVjaywgZXgtPmF0dG51bSkgJiYKKwkJCQkJICAgIUV4ZWNDaGVjayhl eC0+ZXhwcnN0YXRlLCBlY29udGV4dCkpCisJCQkJCXsKKwkJCQkJCUZvcm1fcGdfYXR0cmlidXRl IGF0dHIgPSBUdXBsZURlc2NBdHRyKG5ld1R1cERlc2MsIGV4LT5hdHRudW0gLSAxKTsKKwkJCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCWVycmNvZGUoRVJSQ09ERV9DSEVDS19WSU9MQVRJT04p LAorCQkJCQkJCQllcnJtc2coInZhbHVlIGZvciBkb21haW4gJXMgaXMgdmlvbGF0ZWQgYnkgc29t ZSByb3ciLAorCQkJCQkJCQlmb3JtYXRfdHlwZV9iZShhdHRyLT5hdHR0eXBpZCkpKTsKKwkJCQkJ fQorCQkJCX0KKwkJCX0KKwogCQkJaWYgKHBhcnRxdWFsc3RhdGUgJiYgIUV4ZWNDaGVjayhwYXJ0 cXVhbHN0YXRlLCBlY29udGV4dCkpCiAJCQl7CiAJCQkJaWYgKHRhYi0+dmFsaWRhdGVfZGVmYXVs dCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3R5cGVjbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90eXBlY21kcy5jCmluZGV4IDNjYjNjYTFjY2ExLi44ZjI4ODhmZTBlMSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHlwZWNtZHMuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90eXBlY21kcy5jCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAicGFy c2VyL3BhcnNlX2V4cHIuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZnVuYy5oIgogI2luY2x1 ZGUgInBhcnNlci9wYXJzZV90eXBlLmgiCisjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxl ci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9p ZHMuaCIKICNpbmNsdWRlICJ1dGlscy9pbnZhbC5oIgpAQCAtMjc3Miw2ICsyNzczLDggQEAgQWx0 ZXJEb21haW5Ob3ROdWxsKExpc3QgKm5hbWVzLCBib29sIG5vdE51bGwpCiAJCQkJCQkJCSAgIHR5 cFR1cC0+dHlwYmFzZXR5cGUsIHR5cFR1cC0+dHlwdHlwbW9kLAogCQkJCQkJCQkgICBjb25zdHIs IE5hbWVTdHIodHlwVHVwLT50eXBuYW1lKSwgTlVMTCk7CiAKKwkJQ29tbWFuZENvdW50ZXJJbmNy ZW1lbnQoKTsKKwogCQl2YWxpZGF0ZURvbWFpbk5vdE51bGxDb25zdHJhaW50KGRvbWFpbm9pZCk7 CiAJfQogCWVsc2UKQEAgLTI5NzQsNyArMjk3NywxNSBAQCBBbHRlckRvbWFpbkFkZENvbnN0cmFp bnQoTGlzdCAqbmFtZXMsIE5vZGUgKm5ld0NvbnN0cmFpbnQsCiAJCSAqIHRvLgogCQkgKi8KIAkJ aWYgKCFjb25zdHItPnNraXBfdmFsaWRhdGlvbikKKwkJeworCQkJLyoKKwkJCSAqIHZhbGlkYXRl IHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiBvdmVyIGRvbWFpbiBjaGVjayBjb25zdHJhaW50CisJ CQkgKiBuZWVkIHNlZSBwZ19jb25zdHJhaW50IHJvdworCQkJICovCisJCQlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOworCiAJCQl2YWxpZGF0ZURvbWFpbkNoZWNrQ29uc3RyYWludChkb21haW5v aWQsIGNjYmluKTsKKwkJfQogCiAJCS8qCiAJCSAqIFdlIG11c3Qgc2VuZCBvdXQgYW4gc2ludmFs IG1lc3NhZ2UgZm9yIHRoZSBkb21haW4sIHRvIGVuc3VyZSB0aGF0CkBAIC0zMTIxLDYgKzMxMzIs MTUgQEAgdmFsaWRhdGVEb21haW5Ob3ROdWxsQ29uc3RyYWludChPaWQgZG9tYWlub2lkKQogCUxp c3QJICAgKnJlbHM7CiAJTGlzdENlbGwgICAqcnQ7CiAKKwkvKgorCSAqIEVTdGF0ZSBpcyBmb3Ig ZG9tYWluIG5vdCBudWxsIGNvbnN0cmFpbnQgb3ZlciB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4u CisJICogaXQgbWF5YmUgbmVlZGVkIGluIGJlbG93LgorCSovCisJRVN0YXRlCSAgICplc3RhdGU7 CisJRXhwckNvbnRleHQgKmVjb250ZXh0OworCWVzdGF0ZSA9IENyZWF0ZUV4ZWN1dG9yU3RhdGUo KTsKKwllY29udGV4dCA9IEdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0YXRlKTsKKwogCS8qIEZl dGNoIHJlbGF0aW9uIGxpc3Qgd2l0aCBhdHRyaWJ1dGVzIGJhc2VkIG9uIHRoaXMgZG9tYWluICov CiAJLyogU2hhcmVMb2NrIGlzIHN1ZmZpY2llbnQgdG8gcHJldmVudCBjb25jdXJyZW50IGRhdGEg Y2hhbmdlcyAqLwogCkBAIC0zMTM0LDYgKzMxNTQsNDQgQEAgdmFsaWRhdGVEb21haW5Ob3ROdWxs Q29uc3RyYWludChPaWQgZG9tYWlub2lkKQogCQlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIAkJVGFi bGVTY2FuRGVzYyBzY2FuOwogCQlTbmFwc2hvdAlzbmFwc2hvdDsKKwkJRm9ybV9wZ19hdHRyaWJ1 dGUgYXR0cjsKKwkJRXhwclN0YXRlICoqcmlfR2VuZXJhdGVkRXhwcnMgPSBOVUxMOworCQlpbnQJ CQlhdHRudW07CisJCWludAkJCWF0dHJfdmlydHVhbF9nZW5lcmF0ZWQgPSAwOworCisJCS8qIGNh Y2FoZSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGhhbmRsaW5nICovCisJCWlmICh0dXBkZXNj LT5jb25zdHIgJiYgdHVwZGVzYy0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3ZpcnR1YWwpCisJCXsK KwkJCXJpX0dlbmVyYXRlZEV4cHJzID0gKEV4cHJTdGF0ZSAqKikgcGFsbG9jMCh0dXBkZXNjLT5u YXR0cyAqIHNpemVvZihFeHByU3RhdGUgKikpOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IHJ0 Yy0+bmF0dHM7IGkrKykKKwkJCXsKKwkJCQlhdHRudW0gPSBydGMtPmF0dHNbaV07CisJCQkJYXR0 ciA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgYXR0bnVtIC0gMSk7CisKKwkJCQlpZiAoYXR0ci0+ YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCkKKwkJCQl7CisJCQkJ CU51bGxUZXN0ICAgKm5udWxsdGVzdDsKKwkJCQkJRXhwcgkgICAqZXhwcjsKKworCQkJCQlubnVs bHRlc3QgPSBtYWtlTm9kZShOdWxsVGVzdCk7CisJCQkJCW5udWxsdGVzdC0+YXJnID0gKEV4cHIg KikgYnVpbGRfY29sdW1uX2RlZmF1bHQodGVzdHJlbCwgYXR0bnVtKTsKKwkJCQkJbm51bGx0ZXN0 LT5udWxsdGVzdHR5cGUgPSBJU19OT1RfTlVMTDsKKwkJCQkJbm51bGx0ZXN0LT5hcmdpc3JvdyA9 IGZhbHNlOworCQkJCQlubnVsbHRlc3QtPmxvY2F0aW9uID0gLTE7CisKKwkJCQkJZXhwciA9IChF eHByICopIG5udWxsdGVzdDsKKwkJCQkJcmlfR2VuZXJhdGVkRXhwcnNbYXR0bnVtIC0gMV0gPSBF eGVjUHJlcGFyZUV4cHIoZXhwciwgZXN0YXRlKTsKKwkJCQkJYXR0cl92aXJ0dWFsX2dlbmVyYXRl ZCsrOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoYXR0cl92aXJ0dWFsX2dlbmVyYXRlZCA9PSAw ICYmIHJpX0dlbmVyYXRlZEV4cHJzICE9IE5VTEwpCisJCXsKKwkJCXBmcmVlKHJpX0dlbmVyYXRl ZEV4cHJzKTsKKwkJCXJpX0dlbmVyYXRlZEV4cHJzID0gTlVMTDsKKwkJfQorCiAKIAkJLyogU2Nh biBhbGwgdHVwbGVzIGluIHRoaXMgcmVsYXRpb24gKi8KIAkJc25hcHNob3QgPSBSZWdpc3RlclNu YXBzaG90KEdldExhdGVzdFNuYXBzaG90KCkpOwpAQCAtMzE0Niw4ICszMjA0LDggQEAgdmFsaWRh dGVEb21haW5Ob3ROdWxsQ29uc3RyYWludChPaWQgZG9tYWlub2lkKQogCQkJLyogVGVzdCBhdHRy aWJ1dGVzIHRoYXQgYXJlIG9mIHRoZSBkb21haW4gKi8KIAkJCWZvciAoaSA9IDA7IGkgPCBydGMt Pm5hdHRzOyBpKyspCiAJCQl7Ci0JCQkJaW50CQkJYXR0bnVtID0gcnRjLT5hdHRzW2ldOwotCQkJ CUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGF0dG51bSAt IDEpOworCQkJCWF0dG51bSA9IHJ0Yy0+YXR0c1tpXTsKKwkJCQlhdHRyID0gVHVwbGVEZXNjQXR0 cih0dXBkZXNjLCBhdHRudW0gLSAxKTsKIAogCQkJCWlmIChzbG90X2F0dGlzbnVsbChzbG90LCBh dHRudW0pKQogCQkJCXsKQEAgLTMxNTgsMTQgKzMyMTYsMzAgQEAgdmFsaWRhdGVEb21haW5Ob3RO dWxsQ29uc3RyYWludChPaWQgZG9tYWlub2lkKQogCQkJCQkgKiBvbmx5IGV4ZWN1dGVzIGluIGFu IEFMVEVSIERPTUFJTiBjb21tYW5kLCB0aGUgY2xpZW50CiAJCQkJCSAqIHNob3VsZCBhbHJlYWR5 IGtub3cgd2hpY2ggZG9tYWluIGlzIGluIHF1ZXN0aW9uLgogCQkJCQkgKi8KLQkJCQkJZXJlcG9y dChFUlJPUiwKLQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX05PVF9OVUxMX1ZJT0xBVElPTiksCi0J CQkJCQkJIGVycm1zZygiY29sdW1uIFwiJXNcIiBvZiB0YWJsZSBcIiVzXCIgY29udGFpbnMgbnVs bCB2YWx1ZXMiLAotCQkJCQkJCQkJTmFtZVN0cihhdHRyLT5hdHRuYW1lKSwKLQkJCQkJCQkJCVJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHRlc3RyZWwpKSwKLQkJCQkJCQkgZXJydGFibGVjb2wodGVz dHJlbCwgYXR0bnVtKSkpOworCQkJCQlpZiAoYXR0ci0+YXR0Z2VuZXJhdGVkICE9IEFUVFJJQlVU RV9HRU5FUkFURURfVklSVFVBTCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfTk9UX05VTExfVklPTEFUSU9OKSwKKwkJCQkJCQkJZXJybXNnKCJjb2x1bW4g XCIlc1wiIG9mIHRhYmxlIFwiJXNcIiBjb250YWlucyBudWxsIHZhbHVlcyIsCisJCQkJCQkJCQkJ TmFtZVN0cihhdHRyLT5hdHRuYW1lKSwKKwkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZSh0ZXN0cmVsKSksCisJCQkJCQkJCWVycnRhYmxlY29sKHRlc3RyZWwsIGF0dG51bSkpKTsKKwkJ CQkJZWxzZQorCQkJCQl7CisJCQkJCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzbG90Owor CQkJCQkJQXNzZXJ0KHJpX0dlbmVyYXRlZEV4cHJzW2F0dG51bSAtIDFdICE9IE5VTEwpOworCisJ CQkJCQlpZiAoIUV4ZWNDaGVjayhyaV9HZW5lcmF0ZWRFeHByc1thdHRudW0gLSAxXSAsIGVjb250 ZXh0KSkKKwkJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkJZXJyY29kZShFUlJDT0RFX05P VF9OVUxMX1ZJT0xBVElPTiksCisJCQkJCQkJCQllcnJtc2coImNvbHVtbiBcIiVzXCIgb2YgdGFi bGUgXCIlc1wiIGNvbnRhaW5zIG51bGwgdmFsdWVzIiwKKwkJCQkJCQkJCQkJTmFtZVN0cihhdHRy LT5hdHRuYW1lKSwKKwkJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGVzdHJlbCkp LAorCQkJCQkJCQkJZXJydGFibGVjb2wodGVzdHJlbCwgYXR0bnVtKSk7CisJCQkJCX0KIAkJCQl9 CiAJCQl9CisKKwkJCVJlc2V0RXhwckNvbnRleHQoZWNvbnRleHQpOwogCQl9CiAJCUV4ZWNEcm9w U2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CiAJCXRhYmxlX2VuZHNjYW4oc2Nhbik7CkBAIC0z MTc0LDYgKzMyNDgsOCBAQCB2YWxpZGF0ZURvbWFpbk5vdE51bGxDb25zdHJhaW50KE9pZCBkb21h aW5vaWQpCiAJCS8qIENsb3NlIGVhY2ggcmVsIGFmdGVyIHByb2Nlc3NpbmcsIGJ1dCBrZWVwIGxv Y2sgKi8KIAkJdGFibGVfY2xvc2UodGVzdHJlbCwgTm9Mb2NrKTsKIAl9CisKKwlGcmVlRXhlY3V0 b3JTdGF0ZShlc3RhdGUpOwogfQogCiAvKgpAQCAtMzIxMCw2ICszMjg2LDM5IEBAIHZhbGlkYXRl RG9tYWluQ2hlY2tDb25zdHJhaW50KE9pZCBkb21haW5vaWQsIGNvbnN0IGNoYXIgKmNjYmluKQog CQlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIAkJVGFibGVTY2FuRGVzYyBzY2FuOwogCQlTbmFwc2hv dAlzbmFwc2hvdDsKKwkJRXhwclN0YXRlICoqcmlfR2VuZXJhdGVkRXhwcnMgPSBOVUxMOworCQlG b3JtX3BnX2F0dHJpYnV0ZSBhdHRyOworCQlpbnQJCQlhdHRudW07CisJCWludAkJCWF0dHJfdmly dHVhbF9nZW5lcmF0ZWQgPSAwOworCisJCS8qIGNhY2FoZSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1 bW5zIGhhbmRsaW5nICovCisJCWlmICh0dXBkZXNjLT5jb25zdHIgJiYgdHVwZGVzYy0+Y29uc3Ry LT5oYXNfZ2VuZXJhdGVkX3ZpcnR1YWwpCisJCXsKKwkJCXJpX0dlbmVyYXRlZEV4cHJzID0gKEV4 cHJTdGF0ZSAqKikgcGFsbG9jMCh0dXBkZXNjLT5uYXR0cyAqIHNpemVvZihFeHByU3RhdGUgKikp OworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBydGMtPm5hdHRzOyBpKyspCisJCQl7CisJCQkJRXhw cgkgICAqZ2VuX2RlZmV4cHI7CisKKwkJCQlhdHRudW0gPSBydGMtPmF0dHNbaV07CisJCQkJYXR0 ciA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgYXR0bnVtIC0gMSk7CisJCQkJaWYgKGF0dHItPmF0 dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwpCisJCQkJeworCQkJCQln ZW5fZGVmZXhwciA9IChFeHByICopIGJ1aWxkX2NvbHVtbl9kZWZhdWx0KHRlc3RyZWwsIGF0dG51 bSk7CisJCQkJCWlmIChnZW5fZGVmZXhwciA9PSBOVUxMKQorCQkJCQkJZWxvZyhFUlJPUiwgIm5v IGdlbmVyYXRpb24gZXhwcmVzc2lvbiBmb3VuZCBmb3IgY29sdW1uIG51bWJlciAlZCBvZiB0YWJs ZSBcIiVzXCIiLAorCQkJCQkJCWF0dG51bSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGVzdHJl bCkpOworCisJCQkJCXJpX0dlbmVyYXRlZEV4cHJzW2F0dG51bSAtIDFdID0gRXhlY1ByZXBhcmVF eHByU2FmZShnZW5fZGVmZXhwciwgZXN0YXRlKTsKKwkJCQkJYXR0cl92aXJ0dWFsX2dlbmVyYXRl ZCsrOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoYXR0cl92aXJ0dWFsX2dlbmVyYXRlZCA9PSAw ICYmIHJpX0dlbmVyYXRlZEV4cHJzICE9IE5VTEwpCisJCXsKKwkJCXBmcmVlKHJpX0dlbmVyYXRl ZEV4cHJzKTsKKwkJCXJpX0dlbmVyYXRlZEV4cHJzID0gTlVMTDsKKwkJfQorCiAKIAkJLyogU2Nh biBhbGwgdHVwbGVzIGluIHRoaXMgcmVsYXRpb24gKi8KIAkJc25hcHNob3QgPSBSZWdpc3RlclNu YXBzaG90KEdldExhdGVzdFNuYXBzaG90KCkpOwpAQCAtMzIyMiwzNyArMzMzMSw2MyBAQCB2YWxp ZGF0ZURvbWFpbkNoZWNrQ29uc3RyYWludChPaWQgZG9tYWlub2lkLCBjb25zdCBjaGFyICpjY2Jp bikKIAkJCS8qIFRlc3QgYXR0cmlidXRlcyB0aGF0IGFyZSBvZiB0aGUgZG9tYWluICovCiAJCQlm b3IgKGkgPSAwOyBpIDwgcnRjLT5uYXR0czsgaSsrKQogCQkJewotCQkJCWludAkJCWF0dG51bSA9 IHJ0Yy0+YXR0c1tpXTsKIAkJCQlEYXR1bQkJZDsKIAkJCQlib29sCQlpc051bGw7CiAJCQkJRGF0 dW0JCWNvblJlc3VsdDsKLQkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0 cih0dXBkZXNjLCBhdHRudW0gLSAxKTsKIAotCQkJCWQgPSBzbG90X2dldGF0dHIoc2xvdCwgYXR0 bnVtLCAmaXNOdWxsKTsKKwkJCQlhdHRudW0gPSBydGMtPmF0dHNbaV07CisJCQkJYXR0ciA9IFR1 cGxlRGVzY0F0dHIodHVwZGVzYywgYXR0bnVtIC0gMSk7CiAKLQkJCQllY29udGV4dC0+ZG9tYWlu VmFsdWVfZGF0dW0gPSBkOwotCQkJCWVjb250ZXh0LT5kb21haW5WYWx1ZV9pc051bGwgPSBpc051 bGw7CisJCQkJaWYgKGF0dHItPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJ UlRVQUwpCisJCQkJeworCQkJCQllY29udGV4dCA9IEdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0 YXRlKTsKKwkJCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gc2xvdDsKIAotCQkJCWNvblJl c3VsdCA9IEV4ZWNFdmFsRXhwclN3aXRjaENvbnRleHQoZXhwcnN0YXRlLAotCQkJCQkJCQkJCQkJ CSAgZWNvbnRleHQsCi0JCQkJCQkJCQkJCQkJICAmaXNOdWxsKTsKKwkJCQkJQXNzZXJ0KHJpX0dl bmVyYXRlZEV4cHJzW2F0dG51bSAtIDFdLT5lc2NvbnRleHQgIT0gTlVMTCk7CisJCQkJCUFzc2Vy dChyaV9HZW5lcmF0ZWRFeHBycyAhPSBOVUxMKTsKIAotCQkJCWlmICghaXNOdWxsICYmICFEYXR1 bUdldEJvb2woY29uUmVzdWx0KSkKKwkJCQkJY29uUmVzdWx0ID0gRXhlY0V2YWxFeHByU3dpdGNo Q29udGV4dChyaV9HZW5lcmF0ZWRFeHByc1thdHRudW0gLSAxXSwKKwkJCQkJCQkJCQkJCQkJICBl Y29udGV4dCwKKwkJCQkJCQkJCQkJCQkJICAmaXNOdWxsKTsKKwkJCQkJaWYgKFNPRlRfRVJST1Jf T0NDVVJSRUQocmlfR2VuZXJhdGVkRXhwcnNbYXR0bnVtIC0gMV0tPmVzY29udGV4dCkpCisJCQkJ CXsKKwkJCQkJCWlzTnVsbCA9IHRydWU7CisJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQll cnJjb2RlKEVSUkNPREVfQ0hFQ0tfVklPTEFUSU9OKSwKKwkJCQkJCQkJZXJybXNnKCJjb2x1bW4g XCIlc1wiIG9mIHRhYmxlIFwiJXNcIiBjb250YWlucyB2YWx1ZXMgdGhhdCB2aW9sYXRlIHRoZSBu ZXcgY29uc3RyYWludCIsCisJCQkJCQkJCQkJTmFtZVN0cihhdHRyLT5hdHRuYW1lKSwKKwkJCQkJ CQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0ZXN0cmVsKSksCisJCQkJCQkJCWVycnRhYmxl Y29sKHRlc3RyZWwsIGF0dG51bSkpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKIAkJCQl7Ci0J CQkJCS8qCi0JCQkJCSAqIEluIHByaW5jaXBsZSB0aGUgYXV4aWxpYXJ5IGluZm9ybWF0aW9uIGZv ciB0aGlzIGVycm9yCi0JCQkJCSAqIHNob3VsZCBiZSBlcnJkb21haW5jb25zdHJhaW50KCksIGJ1 dCBlcnJ0YWJsZWNvbCgpCi0JCQkJCSAqIHNlZW1zIGNvbnNpZGVyYWJseSBtb3JlIHVzZWZ1bCBp biBwcmFjdGljZS4gIFNpbmNlIHRoaXMKLQkJCQkJICogY29kZSBvbmx5IGV4ZWN1dGVzIGluIGFu IEFMVEVSIERPTUFJTiBjb21tYW5kLCB0aGUKLQkJCQkJICogY2xpZW50IHNob3VsZCBhbHJlYWR5 IGtub3cgd2hpY2ggZG9tYWluIGlzIGluIHF1ZXN0aW9uLAotCQkJCQkgKiBhbmQgd2hpY2ggY29u c3RyYWludCB0b28uCi0JCQkJCSAqLwotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfQ0hFQ0tfVklPTEFUSU9OKSwKLQkJCQkJCQkgZXJybXNnKCJjb2x1bW4gXCIl c1wiIG9mIHRhYmxlIFwiJXNcIiBjb250YWlucyB2YWx1ZXMgdGhhdCB2aW9sYXRlIHRoZSBuZXcg Y29uc3RyYWludCIsCi0JCQkJCQkJCQlOYW1lU3RyKGF0dHItPmF0dG5hbWUpLAotCQkJCQkJCQkJ UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGVzdHJlbCkpLAotCQkJCQkJCSBlcnJ0YWJsZWNvbCh0 ZXN0cmVsLCBhdHRudW0pKSk7CisJCQkJCWQgPSBzbG90X2dldGF0dHIoc2xvdCwgYXR0bnVtLCAm aXNOdWxsKTsKKworCQkJCQllY29udGV4dC0+ZG9tYWluVmFsdWVfZGF0dW0gPSBkOworCQkJCQll Y29udGV4dC0+ZG9tYWluVmFsdWVfaXNOdWxsID0gaXNOdWxsOworCisJCQkJCWNvblJlc3VsdCA9 IEV4ZWNFdmFsRXhwclN3aXRjaENvbnRleHQoZXhwcnN0YXRlLAorCQkJCQkJCQkJCQkJCQkgIGVj b250ZXh0LAorCQkJCQkJCQkJCQkJCQkgICZpc051bGwpOworCisJCQkJCWlmICghaXNOdWxsICYm ICFEYXR1bUdldEJvb2woY29uUmVzdWx0KSkKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSogSW4g cHJpbmNpcGxlIHRoZSBhdXhpbGlhcnkgaW5mb3JtYXRpb24gZm9yIHRoaXMgZXJyb3IKKwkJCQkJ CSogc2hvdWxkIGJlIGVycmRvbWFpbmNvbnN0cmFpbnQoKSwgYnV0IGVycnRhYmxlY29sKCkKKwkJ CQkJCSogc2VlbXMgY29uc2lkZXJhYmx5IG1vcmUgdXNlZnVsIGluIHByYWN0aWNlLiAgU2luY2Ug dGhpcworCQkJCQkJKiBjb2RlIG9ubHkgZXhlY3V0ZXMgaW4gYW4gQUxURVIgRE9NQUlOIGNvbW1h bmQsIHRoZQorCQkJCQkJKiBjbGllbnQgc2hvdWxkIGFscmVhZHkga25vdyB3aGljaCBkb21haW4g aXMgaW4gcXVlc3Rpb24sCisJCQkJCQkqIGFuZCB3aGljaCBjb25zdHJhaW50IHRvby4KKwkJCQkJ CSovCisJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NIRUNL X1ZJT0xBVElPTiksCisJCQkJCQkJCWVycm1zZygiY29sdW1uIFwiJXNcIiBvZiB0YWJsZSBcIiVz XCIgY29udGFpbnMgdmFsdWVzIHRoYXQgdmlvbGF0ZSB0aGUgbmV3IGNvbnN0cmFpbnQiLAorCQkJ CQkJCQkJCU5hbWVTdHIoYXR0ci0+YXR0bmFtZSksCisJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUodGVzdHJlbCkpLAorCQkJCQkJCQllcnJ0YWJsZWNvbCh0ZXN0cmVsLCBhdHRudW0p KSk7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRh YmxlLmMKaW5kZXggNTM3NTVjY2RiYWQuLjE1MmUyZDdlMzU3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uv bG1nci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0 dW0uaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwu aCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAKQEAgLTM5NSw3ICszOTYsNyBAQCBFeGVj Q2hlY2tUSURWaXNpYmxlKEVTdGF0ZSAqZXN0YXRlLAogICoKICAqIFRoaXMgZmlsbHMgdGhlIHJl c3VsdFJlbEluZm8ncyByaV9HZW5lcmF0ZWRFeHByc0kvcmlfTnVtR2VuZXJhdGVkTmVlZGVkSSBv cgogICogcmlfR2VuZXJhdGVkRXhwcnNVL3JpX051bUdlbmVyYXRlZE5lZWRlZFUgZmllbGRzLCBk ZXBlbmRpbmcgb24gY21kdHlwZS4KLSAqIFRoaXMgaXMgdXNlZCBvbmx5IGZvciBzdG9yZWQgZ2Vu ZXJhdGVkIGNvbHVtbnMuCisgKiBUaGlzIGlzIHVzZWQgZm9yIHN0b3JlZCBhbmQgdmlydHVhbCBn ZW5lcmF0ZWQgY29sdW1ucy4KICAqCiAgKiBJZiBjbWRUeXBlID09IENNRF9VUERBVEUsIHRoZSBy aV9leHRyYVVwZGF0ZWRDb2xzIGZpZWxkIGlzIGZpbGxlZCB0b28uCiAgKiBUaGlzIGlzIHVzZWQg YnkgYm90aCBzdG9yZWQgYW5kIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMuCkBAIC00NzcsNiAr NDc4LDMzIEBAIEV4ZWNJbml0R2VuZXJhdGVkKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8s CiAJCQkJcmlfR2VuZXJhdGVkRXhwcnNbaV0gPSBFeGVjUHJlcGFyZUV4cHIoZXhwciwgZXN0YXRl KTsKIAkJCQlyaV9OdW1HZW5lcmF0ZWROZWVkZWQrKzsKIAkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJ CQkvKgorCQkJCSogVmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBvbmx5IG5lZWQgdG8gYmUgY29t cHV0ZWQgd2hlbiB0aGUKKwkJCQkqIHR5cGUgaXMgZG9tYWluX3dpdGhfY29uc3RyYWludC4gIEhv d2V2ZXIsCisJCQkJKiBkb21haW5fd2l0aF9jb25zdHJhaW50IGNhbiBiZSB0aGUgZWxlbWVudCB0 eXBlIG9mIGEgcmFuZ2UsIHRoZQorCQkJCSogZWxlbWVudCB0eXBlIG9mIGEgY29tcG9zaXRlLCBv ciB0aGUgZWxlbWVudCB0eXBlIG9mIGFuIGFycmF5LgorCQkJCSoKKwkJCQkqIFRvIGRldGVybWlu ZSB3aGV0aGVyIHRoZSB0cnVlIGJhc2UgZWxlbWVudCB0eXBlIGlzCisJCQkJKiBkb21haW5fd2l0 aF9jb25zdHJhaW50LCBtdWx0aXBsZSBsb29rdXBfdHlwZV9jYWNoZSBjYWxscyBzZWVtcworCQkJ CSogZG9hYmxlLiBIb3dldmVyLCB0aGlzIHdvdWxkIGFkZCBhIGxvdCBvZiBjb2RlLgorCQkJCSog U28sIHNpbXBsaWZpZWQgaXQ6IG9ubHkgaWYgdGhlIHR5cGUgaXMgVFlQVFlQRV9CQVNFIGFuZCBp dCdzCisJCQkJKiBub3QgYW4gYXJyYXkgdHlwZSwgY29tcHV0YXRpb24gaXMgbm90IG5lZWRlZC4K KwkJCQkqLworCQkJCU9pZAkJdHlwZWxlbQk9IEludmFsaWRPaWQ7CisJCQkJT2lkCQlhdHR0eXBp ZCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSktPmF0dHR5cGlkOworCQkJCWNoYXIJYXR0X3R5 cHR5cGUgPSBnZXRfdHlwdHlwZShhdHR0eXBpZCk7CisKKwkJCQlpZiAoYXR0X3R5cHR5cGUgPT0g VFlQVFlQRV9CQVNFKQorCQkJCQl0eXBlbGVtID0gZ2V0X2VsZW1lbnRfdHlwZShhdHR0eXBpZCk7 CisKKwkJCQlpZiAoYXR0X3R5cHR5cGUgIT0gVFlQVFlQRV9CQVNFIHx8IE9pZElzVmFsaWQodHlw ZWxlbSkpCisJCQkJeworCQkJCQlyaV9HZW5lcmF0ZWRFeHByc1tpXSA9IEV4ZWNQcmVwYXJlRXhw cihleHByLCBlc3RhdGUpOworCQkJCQlyaV9OdW1HZW5lcmF0ZWROZWVkZWQrKzsKKwkJCQl9CisJ CQl9CiAKIAkJCS8qIElmIFVQREFURSwgbWFyayBjb2x1bW4gaW4gcmVzdWx0UmVsSW5mby0+cmlf ZXh0cmFVcGRhdGVkQ29scyAqLwogCQkJaWYgKGNtZHR5cGUgPT0gQ01EX1VQREFURSkKQEAgLTUx OCw3ICs1NDYsOSBAQCBFeGVjSW5pdEdlbmVyYXRlZChSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJ bmZvLAogCiAvKgogICogQ29tcHV0ZSBnZW5lcmF0ZWQgY29sdW1ucyBmb3IgYSB0dXBsZS4KLSAq IHdlIG1pZ2h0IHN1cHBvcnQgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIGluIGZ1dHVyZSwgY3Vy cmVudGx5IG5vdC4KKyAqIEdlbmVyYWxseSwgd2UgZG9uJ3QgbmVlZCBjb21wdXRlIHZpcnR1YWwg Z2VuZXJhdGVkIGNvbHVtbiwgZXhjZXB0IGZvciBjb2x1bW4KKyAqIHR5cGUgaXMgZG9tYWluIHdp dGggY29uc3RyYWludC4gU2luY2UgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIGRvbid0IGhhdmUK KyAqIHN0b3JhZ2UsIHdlIGRvbid0IG5lZWQgc3RvcmVkIHRoZSBjb21wdXRlZCB2YWx1ZS4KICAq Lwogdm9pZAogRXhlY0NvbXB1dGVHZW5lcmF0ZWQoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5m bywgRVN0YXRlICplc3RhdGUsCkBAIC01MzQsNyArNTY0LDggQEAgRXhlY0NvbXB1dGVHZW5lcmF0 ZWQoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywgRVN0YXRlICplc3RhdGUsCiAJYm9vbAkg ICAqbnVsbHM7CiAKIAkvKiBXZSBzaG91bGQgbm90IGJlIGNhbGxlZCB1bmxlc3MgdGhpcyBpcyB0 cnVlICovCi0JQXNzZXJ0KHR1cGRlc2MtPmNvbnN0ciAmJiB0dXBkZXNjLT5jb25zdHItPmhhc19n ZW5lcmF0ZWRfc3RvcmVkKTsKKwlBc3NlcnQodHVwZGVzYy0+Y29uc3RyKTsKKwlBc3NlcnQodHVw ZGVzYy0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3N0b3JlZCB8fCB0dXBkZXNjLT5jb25zdHItPmhh c19nZW5lcmF0ZWRfdmlydHVhbCk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIGV4cHJlc3Np b25zIGlmIHdlIGRpZG4ndCBhbHJlYWR5LCBhbmQgY2hlY2sgd2hldGhlciB3ZQpAQCAtNTUwLDEz ICs1ODEsMjAgQEAgRXhlY0NvbXB1dGVHZW5lcmF0ZWQoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVs SW5mbywgRVN0YXRlICplc3RhdGUsCiAJfQogCWVsc2UKIAl7CisJCS8qCisJCSAqIHdlIGNhbiBl eGl0IGVhcmxpZXIgaWYgdGhlIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiBkYXRhIHR5cGUgaXMg bm90CisJCSAqIGRvYW1pbiB3aXRoIGNvbnN0cmFpbnRzLgorCQkgKi8KIAkJaWYgKHJlc3VsdFJl bEluZm8tPnJpX0dlbmVyYXRlZEV4cHJzSSA9PSBOVUxMKQogCQkJRXhlY0luaXRHZW5lcmF0ZWQo cmVzdWx0UmVsSW5mbywgZXN0YXRlLCBjbWR0eXBlKTsKLQkJLyogRWFybHkgZXhpdCBpcyBpbXBv c3NpYmxlIGdpdmVuIHRoZSBwcmlvciBBc3NlcnQgKi8KLQkJQXNzZXJ0KHJlc3VsdFJlbEluZm8t PnJpX051bUdlbmVyYXRlZE5lZWRlZEkgPiAwKTsKKwkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX051 bUdlbmVyYXRlZE5lZWRlZEkgPT0gMCkKKwkJCXJldHVybjsKIAkJcmlfR2VuZXJhdGVkRXhwcnMg PSByZXN1bHRSZWxJbmZvLT5yaV9HZW5lcmF0ZWRFeHByc0k7CiAJfQogCisJaWYgKHJpX0dlbmVy YXRlZEV4cHJzICE9IE5VTEwpCisJCUFzc2VydChyZXN1bHRSZWxJbmZvLT5yaV9OdW1HZW5lcmF0 ZWROZWVkZWRVID4gMCB8fCByZXN1bHRSZWxJbmZvLT5yaV9OdW1HZW5lcmF0ZWROZWVkZWRJID4g MCk7CisKIAlvbGRDb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEdldFBlclR1cGxlTWVt b3J5Q29udGV4dChlc3RhdGUpKTsKIAogCXZhbHVlcyA9IHBhbGxvYyhzaXplb2YoKnZhbHVlcykg KiBuYXR0cyk7CkBAIC01NzQsMjEgKzYxMiwyOCBAQCBFeGVjQ29tcHV0ZUdlbmVyYXRlZChSZXN1 bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBFU3RhdGUgKmVzdGF0ZSwKIAkJCURhdHVtCQl2YWw7 CiAJCQlib29sCQlpc251bGw7CiAKLQkJCUFzc2VydChUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkp LT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9TVE9SRUQpOwotCiAJCQllY29u dGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzbG90OwogCiAJCQl2YWwgPSBFeGVjRXZhbEV4cHIocmlf R2VuZXJhdGVkRXhwcnNbaV0sIGVjb250ZXh0LCAmaXNudWxsKTsKIAotCQkJLyoKLQkJCSAqIFdl IG11c3QgbWFrZSBhIGNvcHkgb2YgdmFsIGFzIHdlIGhhdmUgbm8gZ3VhcmFudGVlcyBhYm91dCB3 aGVyZQotCQkJICogbWVtb3J5IGZvciBhIHBhc3MtYnktcmVmZXJlbmNlIERhdHVtIGlzIGxvY2F0 ZWQuCi0JCQkgKi8KLQkJCWlmICghaXNudWxsKQotCQkJCXZhbCA9IGRhdHVtQ29weSh2YWwsIGF0 dHItPmF0dGJ5dmFsLCBhdHRyLT5hdHRsZW4pOworCQkJaWYgKFR1cGxlRGVzY0F0dHIodHVwZGVz YywgaSktPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJCXsK KwkJCQkvKgorCQkJCSAqIFdlIG11c3QgbWFrZSBhIGNvcHkgb2YgdmFsIGFzIHdlIGhhdmUgbm8g Z3VhcmFudGVlcyBhYm91dCB3aGVyZQorCQkJCSAqIG1lbW9yeSBmb3IgYSBwYXNzLWJ5LXJlZmVy ZW5jZSBEYXR1bSBpcyBsb2NhdGVkLgorCQkJCSovCisJCQkJaWYgKCFpc251bGwpCisJCQkJCXZh bCA9IGRhdHVtQ29weSh2YWwsIGF0dHItPmF0dGJ5dmFsLCBhdHRyLT5hdHRsZW4pOwogCi0JCQl2 YWx1ZXNbaV0gPSB2YWw7Ci0JCQludWxsc1tpXSA9IGlzbnVsbDsKKwkJCQl2YWx1ZXNbaV0gPSB2 YWw7CisJCQkJbnVsbHNbaV0gPSBpc251bGw7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJQXNz ZXJ0KFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSktPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVf R0VORVJBVEVEX1ZJUlRVQUwpOworCQkJCXZhbHVlc1tpXSA9IChEYXR1bSkgMDsKKwkJCQludWxs c1tpXSA9IHRydWU7CisJCQl9CiAJCX0KIAkJZWxzZQogCQl7CkBAIC05MDcsMTAgKzk1MiwxMSBA QCBFeGVjSW5zZXJ0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkJc2xvdC0+dHRzX3Rh YmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2Mp OwogCiAJCS8qCi0JCSAqIENvbXB1dGUgc3RvcmVkIGdlbmVyYXRlZCBjb2x1bW5zCisJCSAqIENv bXB1dGUgZ2VuZXJhdGVkIGNvbHVtbnMKIAkJICovCiAJCWlmIChyZXN1bHRSZWxhdGlvbkRlc2Mt PnJkX2F0dC0+Y29uc3RyICYmCi0JCQlyZXN1bHRSZWxhdGlvbkRlc2MtPnJkX2F0dC0+Y29uc3Ry LT5oYXNfZ2VuZXJhdGVkX3N0b3JlZCkKKwkJCShyZXN1bHRSZWxhdGlvbkRlc2MtPnJkX2F0dC0+ Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3N0b3JlZCB8fAorCQkJIHJlc3VsdFJlbGF0aW9uRGVzYy0+ cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfdmlydHVhbCkpCiAJCQlFeGVjQ29tcHV0ZUdl bmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIHNsb3QsCiAJCQkJCQkJCSBDTURfSU5TRVJU KTsKIApAQCAtMTAzNCwxMCArMTA4MCwxMSBAQCBFeGVjSW5zZXJ0KE1vZGlmeVRhYmxlQ29udGV4 dCAqY29udGV4dCwKIAkJc2xvdC0+dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZXN1 bHRSZWxhdGlvbkRlc2MpOwogCiAJCS8qCi0JCSAqIENvbXB1dGUgc3RvcmVkIGdlbmVyYXRlZCBj b2x1bW5zCisJCSAqIENvbXB1dGUgZ2VuZXJhdGVkIGNvbHVtbnMKIAkJICovCiAJCWlmIChyZXN1 bHRSZWxhdGlvbkRlc2MtPnJkX2F0dC0+Y29uc3RyICYmCi0JCQlyZXN1bHRSZWxhdGlvbkRlc2Mt PnJkX2F0dC0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3N0b3JlZCkKKwkJCShyZXN1bHRSZWxhdGlv bkRlc2MtPnJkX2F0dC0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3N0b3JlZCB8fAorCQkJIHJlc3Vs dFJlbGF0aW9uRGVzYy0+cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfdmlydHVhbCkpCiAJ CQlFeGVjQ29tcHV0ZUdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIHNsb3QsCiAJCQkJ CQkJCSBDTURfSU5TRVJUKTsKIApAQCAtMjEyMiwxMCArMjE2OSwxMSBAQCBFeGVjVXBkYXRlUHJl cGFyZVNsb3QoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAlzbG90LT50dHNfdGFibGVP aWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlc3VsdFJlbGF0aW9uRGVzYyk7CiAKIAkvKgotCSAqIENv bXB1dGUgc3RvcmVkIGdlbmVyYXRlZCBjb2x1bW5zCisJICogQ29tcHV0ZSBnZW5lcmF0ZWQgY29s dW1ucwogCSAqLwogCWlmIChyZXN1bHRSZWxhdGlvbkRlc2MtPnJkX2F0dC0+Y29uc3RyICYmCi0J CXJlc3VsdFJlbGF0aW9uRGVzYy0+cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfc3RvcmVk KQorCQkocmVzdWx0UmVsYXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0ci0+aGFzX2dlbmVyYXRlZF9z dG9yZWQgfHwKKwkJIHJlc3VsdFJlbGF0aW9uRGVzYy0+cmRfYXR0LT5jb25zdHItPmhhc19nZW5l cmF0ZWRfdmlydHVhbCkpCiAJCUV4ZWNDb21wdXRlR2VuZXJhdGVkKHJlc3VsdFJlbEluZm8sIGVz dGF0ZSwgc2xvdCwKIAkJCQkJCQkgQ01EX1VQREFURSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2Zhc3RfZGVmYXVsdC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2Zhc3RfZGVmYXVsdC5vdXQKaW5kZXggY2NiY2RmODQwM2YuLmUxMzUzNTYwYWJhIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zhc3RfZGVmYXVsdC5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mYXN0X2RlZmF1bHQub3V0CkBAIC03MCw2ICs3 MCw5IEBAIE5PVElDRTogIHJld3JpdGluZyB0YWJsZSBoYXNfdm9sYXRpbGUgZm9yIHJlYXNvbiA0 CiAtLSBzdG9yZWQgZ2VuZXJhdGVkIGNvbHVtbnMgbmVlZCBhIHJld3JpdGUKIEFMVEVSIFRBQkxF IGhhc192b2xhdGlsZSBBREQgY29sNyBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoNTUpIHN0b3Jl ZDsKIE5PVElDRTogIHJld3JpdGluZyB0YWJsZSBoYXNfdm9sYXRpbGUgZm9yIHJlYXNvbiAyCist LSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIG92ZXIgdm9sYXRpbGUgZG9tYWluIGNvbnN0cmFp bnQgZG9uJ3QgbmVlZCBhIHJld3JpdGUKK0NSRUFURSBET01BSU4gZDEgYXMgSU5UIENIRUNLKHZh bHVlIDwgcmFuZG9tKG1pbj0+MTI6OmludCwgbWF4PT4yMSkpOworQUxURVIgVEFCTEUgaGFzX3Zv bGF0aWxlIEFERCBjb2w4IGludCBHRU5FUkFURUQgQUxXQVlTIEFTICgxICsgaWQpIFZJUlRVQUw7 CiAtLSBUZXN0IGEgbGFyZ2Ugc2FtcGxlIG9mIGRpZmZlcmVudCBkYXRhdHlwZXMKIENSRUFURSBU QUJMRSBUKHBrIElOVCBOT1QgTlVMTCBQUklNQVJZIEtFWSwgY19pbnQgSU5UIERFRkFVTFQgMSk7 CiBTRUxFQ1Qgc2V0KCd0Jyk7CkBAIC05MjIsNiArOTI1LDcgQEAgRFJPUCBGVU5DVElPTiBzZXQo bmFtZSk7CiBEUk9QIEZVTkNUSU9OIGNvbXAoKTsKIERST1AgVEFCTEUgbTsKIERST1AgVEFCTEUg aGFzX3ZvbGF0aWxlOworRFJPUCBET01BSU4gZDE7CiBEUk9QIEVWRU5UIFRSSUdHRVIgaGFzX3Zv bGF0aWxlX3Jld3JpdGU7CiBEUk9QIEZVTkNUSU9OIGxvZ19yZXdyaXRlOwogRFJPUCBTQ0hFTUEg ZmFzdF9kZWZhdWx0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5l cmF0ZWRfdmlydHVhbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92 aXJ0dWFsLm91dAppbmRleCAzYjU3MjM1OTlmMS4uM2RkY2QxYWJhNzIgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0CkBAIC03ODUsMTYgKzc4 NSw2MyBAQCBFUlJPUjogIHJlbGF0aW9uICJndGVzdDIzcCIgZG9lcyBub3QgZXhpc3QKIC0tSU5T RVJUIElOVE8gZ3Rlc3QyM3EgVkFMVUVTICgxLCAyKTsgIC0tIG9rCiAtLUlOU0VSVCBJTlRPIGd0 ZXN0MjNxIFZBTFVFUyAoMiwgNSk7ICAtLSBlcnJvcgogLS0gZG9tYWlucwotQ1JFQVRFIERPTUFJ TiBndGVzdGRvbWFpbjEgQVMgaW50IENIRUNLIChWQUxVRSA8IDEwKTsKLUNSRUFURSBUQUJMRSBn dGVzdDI0IChhIGludCBQUklNQVJZIEtFWSwgYiBndGVzdGRvbWFpbjEgR0VORVJBVEVEIEFMV0FZ UyBBUyAoYSAqIDIpIFZJUlRVQUwpOwotRVJST1I6ICB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4g ImIiIGNhbm5vdCBoYXZlIGEgZG9tYWluIHR5cGUKLS0tSU5TRVJUIElOVE8gZ3Rlc3QyNCAoYSkg VkFMVUVTICg0KTsgIC0tIG9rCi0tLUlOU0VSVCBJTlRPIGd0ZXN0MjQgKGEpIFZBTFVFUyAoNik7 ICAtLSBlcnJvcgorQ1JFQVRFIERPTUFJTiBndGVzdGRvbWFpbjEgQVMgaW50IENIRUNLIChWQUxV RSA8IDEwKSBERUZBVUxUIDEyOworQ1JFQVRFIFRBQkxFIGd0ZXN0MjQgKGEgaW50IFVOSVFVRSwg YiBndGVzdGRvbWFpbjEgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSAqIDIpIFZJUlRVQUwpOworSU5T RVJUIElOVE8gZ3Rlc3QyNCAoYSwgYikgVkFMVUVTICg0LCBkZWZhdWx0KTsgIC0tIG9rCitJTlNF UlQgSU5UTyBndGVzdDI0IChhKSBWQUxVRVMgKDMpLCAoTlVMTCk7ICAtLSBvaworSU5TRVJUIElO VE8gZ3Rlc3QyNCAoYSkgVkFMVUVTICg2KTsgIC0tIGVycm9yCitFUlJPUjogIHZhbHVlIGZvciBk b21haW4gZ3Rlc3Rkb21haW4xIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgImd0ZXN0ZG9tYWlu MV9jaGVjayIKK1VQREFURSBndGVzdDI0IFNFVCBhID0gNjsgICAgICAgICAgICAtLSBlcnJvcgor RVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIGd0ZXN0ZG9tYWluMSB2aW9sYXRlcyBjaGVjayBjb25z dHJhaW50ICJndGVzdGRvbWFpbjFfY2hlY2siCitDT1BZIGd0ZXN0MjQgRlJPTSBzdGRpbjsgIC0t ZXJyb3IKK0VSUk9SOiAgdmFsdWUgZm9yIGRvbWFpbiBndGVzdGRvbWFpbjEgdmlvbGF0ZXMgY2hl Y2sgY29uc3RyYWludCAiZ3Rlc3Rkb21haW4xX2NoZWNrIgorQ09OVEVYVDogIENPUFkgZ3Rlc3Qy NCwgbGluZSAxOiAiNiIKK1NFTEVDVCAqIEZST00gZ3Rlc3QyNDsKKyBhIHwgYiAKKy0tLSstLS0K KyA0IHwgOAorIDMgfCA2CisgICB8ICAKKygzIHJvd3MpCisKKy0tQUxURVIgVEFCTEUgQUREIENP TFVNIHZhcmlhbnQuCitBTFRFUiBUQUJMRSBndGVzdDI0IEFERCBDT0xVTU4gYyBndGVzdGRvbWFp bjEgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSAqIDIpIHZpcnR1YWwgbm90IG51bGw7IC0tZXJyb3IK K0VSUk9SOiAgY29sdW1uICJjIiBvZiByZWxhdGlvbiAiZ3Rlc3QyNCIgY29udGFpbnMgbnVsbCB2 YWx1ZXMKK0FMVEVSIFRBQkxFIGd0ZXN0MjQgQUREIENPTFVNTiBjIGd0ZXN0ZG9tYWluMSBHRU5F UkFURUQgQUxXQVlTIEFTIChhICogMykgdmlydHVhbCBjaGVjayAoYyA8IDEwKTsgLS1lcnJvcgor RVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIGd0ZXN0ZG9tYWluMSB2aW9sYXRlcyBjaGVjayBjb25z dHJhaW50ICJndGVzdGRvbWFpbjFfY2hlY2siCitBTFRFUiBUQUJMRSBndGVzdDI0IEFERCBDT0xV TU4gYyBndGVzdGRvbWFpbjEgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSAqIDQpIHZpcnR1YWw7IC0t dGFibGUgcmV3cml0ZSB0aGVuIGVycm9yLgorRVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIGd0ZXN0 ZG9tYWluMSB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJndGVzdGRvbWFpbjFfY2hlY2siCitB TFRFUiBUQUJMRSBndGVzdDI0IEFERCBDT0xVTU4gYyBndGVzdGRvbWFpbjEgR0VORVJBVEVEIEFM V0FZUyBBUyAoYSAqIDIpIHZpcnR1YWw7IC0tb2sKKy0tYWx0ZXIgZG9tYWluIGFkZCBjb25zdHJh aW50IHZhcmlhbnQuCitBTFRFUiBET01BSU4gZ3Rlc3Rkb21haW4xIEFERCBDSEVDSyAodmFsdWUg SVMgTlVMTCk7ICAtLWVycm9yCitFUlJPUjogIGNvbHVtbiAiYiIgb2YgdGFibGUgImd0ZXN0MjQi IGNvbnRhaW5zIHZhbHVlcyB0aGF0IHZpb2xhdGUgdGhlIG5ldyBjb25zdHJhaW50CitBTFRFUiBE T01BSU4gZ3Rlc3Rkb21haW4xIEFERCBDSEVDSyAodmFsdWUgSVMgTk9UIE5VTEwpOyAtLWVycm9y CitFUlJPUjogIGNvbHVtbiAiYiIgb2YgdGFibGUgImd0ZXN0MjQiIGNvbnRhaW5zIHZhbHVlcyB0 aGF0IHZpb2xhdGUgdGhlIG5ldyBjb25zdHJhaW50CitBTFRFUiBET01BSU4gZ3Rlc3Rkb21haW4x IEFERCBOT1QgTlVMTDsgLS1lcnJvcgorRVJST1I6ICBjb2x1bW4gImIiIG9mIHRhYmxlICJndGVz dDI0IiBjb250YWlucyBudWxsIHZhbHVlcworREVMRVRFIEZST00gZ3Rlc3QyNCBXSEVSRSBhIGlz IE5VTEw7CitBTFRFUiBET01BSU4gZ3Rlc3Rkb21haW4xIEFERCBOT1QgTlVMTDsgLS1vaworQUxU RVIgRE9NQUlOIGd0ZXN0ZG9tYWluMSBBREQgQ0hFQ0sgKHZhbHVlIElTIE5PVCBOVUxMKTsgIC0t b2sKK0FMVEVSIERPTUFJTiBndGVzdGRvbWFpbjEgQUREIENIRUNLIChWQUxVRSA8IDcpOyAtLWVy cm9yCitFUlJPUjogIGNvbHVtbiAiYiIgb2YgdGFibGUgImd0ZXN0MjQiIGNvbnRhaW5zIHZhbHVl cyB0aGF0IHZpb2xhdGUgdGhlIG5ldyBjb25zdHJhaW50CitBTFRFUiBET01BSU4gZ3Rlc3Rkb21h aW4xIEFERCBDSEVDSyAoVkFMVUUgPCA5KTsgLS1vawogQ1JFQVRFIFRZUEUgZ3Rlc3Rkb21haW4x cmFuZ2UgQVMgcmFuZ2UgKHN1YnR5cGUgPSBndGVzdGRvbWFpbjEpOwotQ1JFQVRFIFRBQkxFIGd0 ZXN0MjRyIChhIGludCBQUklNQVJZIEtFWSwgYiBndGVzdGRvbWFpbjFyYW5nZSBHRU5FUkFURUQg QUxXQVlTIEFTIChndGVzdGRvbWFpbjFyYW5nZShhLCBhICsgNSkpIFZJUlRVQUwpOwotRVJST1I6 ICB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gImIiIGNhbm5vdCBoYXZlIGEgZG9tYWluIHR5cGUK LS0tSU5TRVJUIElOVE8gZ3Rlc3QyNHIgKGEpIFZBTFVFUyAoNCk7ICAtLSBvawotLS1JTlNFUlQg SU5UTyBndGVzdDI0ciAoYSkgVkFMVUVTICg2KTsgIC0tIGVycm9yCitDUkVBVEUgVEFCTEUgZ3Rl c3QyNHIgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGd0ZXN0ZG9tYWluMXJhbmdlIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGd0ZXN0ZG9tYWluMXJhbmdlKGEsIGEgKyA0KSkgVklSVFVBTCk7CitJTlNFUlQg SU5UTyBndGVzdDI0ciAoYSkgVkFMVUVTICg0KTsgIC0tIG9rCitJTlNFUlQgSU5UTyBndGVzdDI0 ciAoYSkgVkFMVUVTICg2KTsgIC0tIGVycm9yCitFUlJPUjogIHZhbHVlIGZvciBkb21haW4gZ3Rl c3Rkb21haW4xIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgImd0ZXN0ZG9tYWluMV9jaGVjayIK K0lOU0VSVCBJTlRPIGd0ZXN0MjRyIChhKSBWQUxVRVMgKDUpOyAgLS0gZXJyb3IKK0VSUk9SOiAg dmFsdWUgZm9yIGRvbWFpbiBndGVzdGRvbWFpbjEgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAi Z3Rlc3Rkb21haW4xX2NoZWNrMiIKK0NSRUFURSBUQUJMRSBndGVzdDI0diAoCisgIGEganNvbmIs CisgIGIgZ3Rlc3Rkb21haW4xW10gR0VORVJBVEVEIEFMV0FZUyBBUyAoSlNPTl9RVUVSWShhLCAn JC5hJyByZXR1cm5pbmcgZ3Rlc3Rkb21haW4xW10gZXJyb3Igb24gZXJyb3IpKSBWSVJUVUFMLAor ICBjIGd0ZXN0ZG9tYWluMVtdIEdFTkVSQVRFRCBBTFdBWVMgQVMgKEpTT05fUVVFUlkoYSwgJyQu YicgcmV0dXJuaW5nIGd0ZXN0ZG9tYWluMVtdKSkgVklSVFVBTCBub3QgbnVsbCk7CitpbnNlcnQg aW50byBndGVzdDI0diBzZWxlY3QganNvbmIgJ3siYSI6WzYsMTBdLCAiYiI6WzYsMl19JzsgLS1l cnJvcgorRVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIGd0ZXN0ZG9tYWluMSB2aW9sYXRlcyBjaGVj ayBjb25zdHJhaW50ICJndGVzdGRvbWFpbjFfY2hlY2siCitpbnNlcnQgaW50byBndGVzdDI0diBz ZWxlY3QganNvbmIgJ3siYSI6WzYsLTFdLCAiYiI6WzYsMTBdfSc7IC0tZXJyb3IKK0VSUk9SOiAg bnVsbCB2YWx1ZSBpbiBjb2x1bW4gImMiIG9mIHJlbGF0aW9uICJndGVzdDI0diIgdmlvbGF0ZXMg bm90LW51bGwgY29uc3RyYWludAorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKHsiYSI6 IFs2LCAtMV0sICJiIjogWzYsIDEwXX0sIHZpcnR1YWwsIHZpcnR1YWwpLgoraW5zZXJ0IGludG8g Z3Rlc3QyNHYgc2VsZWN0IGpzb25iICd7ImEiOls2LC0xXSwgImIiOls2LDJdfSc7IC0tb2sKIC0t IHR5cGVkIHRhYmxlcyAoY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQpCiBDUkVBVEUgVFlQRSBndGVz dF90eXBlIEFTIChmMSBpbnRlZ2VyLCBmMiB0ZXh0LCBmMyBiaWdpbnQpOwogQ1JFQVRFIFRBQkxF IGd0ZXN0MjggT0YgZ3Rlc3RfdHlwZSAoZjEgV0lUSCBPUFRJT05TIEdFTkVSQVRFRCBBTFdBWVMg QVMgKGYyICoyKSBWSVJUVUFMKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zh c3RfZGVmYXVsdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mYXN0X2RlZmF1bHQuc3FsCmlu ZGV4IDA2OGRkMGJjOGFhLi5mZmVjMWUxMTAxMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZmFzdF9kZWZhdWx0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mYXN0X2Rl ZmF1bHQuc3FsCkBAIC03Nyw2ICs3Nyw5IEBAIEFMVEVSIFRBQkxFIGhhc192b2xhdGlsZSBBTFRF UiBDT0xVTU4gY29sMSBTRVQgREFUQSBUWVBFIGZsb2F0OCwKIC0tIHN0b3JlZCBnZW5lcmF0ZWQg Y29sdW1ucyBuZWVkIGEgcmV3cml0ZQogQUxURVIgVEFCTEUgaGFzX3ZvbGF0aWxlIEFERCBjb2w3 IGludCBHRU5FUkFURUQgQUxXQVlTIEFTICg1NSkgc3RvcmVkOwogCistLSB2aXJ0dWFsIGdlbmVy YXRlZCBjb2x1bW5zIG92ZXIgdm9sYXRpbGUgZG9tYWluIGNvbnN0cmFpbnQgZG9uJ3QgbmVlZCBh IHJld3JpdGUKK0NSRUFURSBET01BSU4gZDEgYXMgSU5UIENIRUNLKHZhbHVlIDwgcmFuZG9tKG1p bj0+MTI6OmludCwgbWF4PT4yMSkpOworQUxURVIgVEFCTEUgaGFzX3ZvbGF0aWxlIEFERCBjb2w4 IGludCBHRU5FUkFURUQgQUxXQVlTIEFTICgxICsgaWQpIFZJUlRVQUw7CiAKIAogLS0gVGVzdCBh IGxhcmdlIHNhbXBsZSBvZiBkaWZmZXJlbnQgZGF0YXR5cGVzCkBAIC02MTYsNiArNjE5LDcgQEAg RFJPUCBGVU5DVElPTiBzZXQobmFtZSk7CiBEUk9QIEZVTkNUSU9OIGNvbXAoKTsKIERST1AgVEFC TEUgbTsKIERST1AgVEFCTEUgaGFzX3ZvbGF0aWxlOworRFJPUCBET01BSU4gZDE7CiBEUk9QIEVW RU5UIFRSSUdHRVIgaGFzX3ZvbGF0aWxlX3Jld3JpdGU7CiBEUk9QIEZVTkNUSU9OIGxvZ19yZXdy aXRlOwogRFJPUCBTQ0hFTUEgZmFzdF9kZWZhdWx0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2Vu ZXJhdGVkX3ZpcnR1YWwuc3FsCmluZGV4IDQ4NWUyYTMxN2ZlLi43M2U1MDdhZThlNiAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbApAQCAtNDM5LDE0ICs0Mzks NDcgQEAgQ1JFQVRFIFRBQkxFIGd0ZXN0MjNxIChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQgUkVG RVJFTkNFUyBndGVzdDIzcCAoeSkpOwogLS1JTlNFUlQgSU5UTyBndGVzdDIzcSBWQUxVRVMgKDIs IDUpOyAgLS0gZXJyb3IKIAogLS0gZG9tYWlucwotQ1JFQVRFIERPTUFJTiBndGVzdGRvbWFpbjEg QVMgaW50IENIRUNLIChWQUxVRSA8IDEwKTsKLUNSRUFURSBUQUJMRSBndGVzdDI0IChhIGludCBQ UklNQVJZIEtFWSwgYiBndGVzdGRvbWFpbjEgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSAqIDIpIFZJ UlRVQUwpOwotLS1JTlNFUlQgSU5UTyBndGVzdDI0IChhKSBWQUxVRVMgKDQpOyAgLS0gb2sKLS0t SU5TRVJUIElOVE8gZ3Rlc3QyNCAoYSkgVkFMVUVTICg2KTsgIC0tIGVycm9yCitDUkVBVEUgRE9N QUlOIGd0ZXN0ZG9tYWluMSBBUyBpbnQgQ0hFQ0sgKFZBTFVFIDwgMTApIERFRkFVTFQgMTI7CitD UkVBVEUgVEFCTEUgZ3Rlc3QyNCAoYSBpbnQgVU5JUVVFLCBiIGd0ZXN0ZG9tYWluMSBHRU5FUkFU RUQgQUxXQVlTIEFTIChhICogMikgVklSVFVBTCk7CitJTlNFUlQgSU5UTyBndGVzdDI0IChhLCBi KSBWQUxVRVMgKDQsIGRlZmF1bHQpOyAgLS0gb2sKK0lOU0VSVCBJTlRPIGd0ZXN0MjQgKGEpIFZB TFVFUyAoMyksIChOVUxMKTsgIC0tIG9rCitJTlNFUlQgSU5UTyBndGVzdDI0IChhKSBWQUxVRVMg KDYpOyAgLS0gZXJyb3IKK1VQREFURSBndGVzdDI0IFNFVCBhID0gNjsgICAgICAgICAgICAtLSBl cnJvcgorQ09QWSBndGVzdDI0IEZST00gc3RkaW47ICAtLWVycm9yCis2CitcLgorCitTRUxFQ1Qg KiBGUk9NIGd0ZXN0MjQ7CisKKy0tQUxURVIgVEFCTEUgQUREIENPTFVNIHZhcmlhbnQuCitBTFRF UiBUQUJMRSBndGVzdDI0IEFERCBDT0xVTU4gYyBndGVzdGRvbWFpbjEgR0VORVJBVEVEIEFMV0FZ UyBBUyAoYSAqIDIpIHZpcnR1YWwgbm90IG51bGw7IC0tZXJyb3IKK0FMVEVSIFRBQkxFIGd0ZXN0 MjQgQUREIENPTFVNTiBjIGd0ZXN0ZG9tYWluMSBHRU5FUkFURUQgQUxXQVlTIEFTIChhICogMykg dmlydHVhbCBjaGVjayAoYyA8IDEwKTsgLS1lcnJvcgorQUxURVIgVEFCTEUgZ3Rlc3QyNCBBREQg Q09MVU1OIGMgZ3Rlc3Rkb21haW4xIEdFTkVSQVRFRCBBTFdBWVMgQVMgKGEgKiA0KSB2aXJ0dWFs OyAtLXRhYmxlIHJld3JpdGUgdGhlbiBlcnJvci4KK0FMVEVSIFRBQkxFIGd0ZXN0MjQgQUREIENP TFVNTiBjIGd0ZXN0ZG9tYWluMSBHRU5FUkFURUQgQUxXQVlTIEFTIChhICogMikgdmlydHVhbDsg LS1vaworCistLWFsdGVyIGRvbWFpbiBhZGQgY29uc3RyYWludCB2YXJpYW50LgorQUxURVIgRE9N QUlOIGd0ZXN0ZG9tYWluMSBBREQgQ0hFQ0sgKHZhbHVlIElTIE5VTEwpOyAgLS1lcnJvcgorQUxU RVIgRE9NQUlOIGd0ZXN0ZG9tYWluMSBBREQgQ0hFQ0sgKHZhbHVlIElTIE5PVCBOVUxMKTsgLS1l cnJvcgorQUxURVIgRE9NQUlOIGd0ZXN0ZG9tYWluMSBBREQgTk9UIE5VTEw7IC0tZXJyb3IKK0RF TEVURSBGUk9NIGd0ZXN0MjQgV0hFUkUgYSBpcyBOVUxMOworQUxURVIgRE9NQUlOIGd0ZXN0ZG9t YWluMSBBREQgTk9UIE5VTEw7IC0tb2sKK0FMVEVSIERPTUFJTiBndGVzdGRvbWFpbjEgQUREIENI RUNLICh2YWx1ZSBJUyBOT1QgTlVMTCk7ICAtLW9rCitBTFRFUiBET01BSU4gZ3Rlc3Rkb21haW4x IEFERCBDSEVDSyAoVkFMVUUgPCA3KTsgLS1lcnJvcgorQUxURVIgRE9NQUlOIGd0ZXN0ZG9tYWlu MSBBREQgQ0hFQ0sgKFZBTFVFIDwgOSk7IC0tb2sKKwogQ1JFQVRFIFRZUEUgZ3Rlc3Rkb21haW4x cmFuZ2UgQVMgcmFuZ2UgKHN1YnR5cGUgPSBndGVzdGRvbWFpbjEpOwotQ1JFQVRFIFRBQkxFIGd0 ZXN0MjRyIChhIGludCBQUklNQVJZIEtFWSwgYiBndGVzdGRvbWFpbjFyYW5nZSBHRU5FUkFURUQg QUxXQVlTIEFTIChndGVzdGRvbWFpbjFyYW5nZShhLCBhICsgNSkpIFZJUlRVQUwpOwotLS1JTlNF UlQgSU5UTyBndGVzdDI0ciAoYSkgVkFMVUVTICg0KTsgIC0tIG9rCi0tLUlOU0VSVCBJTlRPIGd0 ZXN0MjRyIChhKSBWQUxVRVMgKDYpOyAgLS0gZXJyb3IKK0NSRUFURSBUQUJMRSBndGVzdDI0ciAo YSBpbnQgUFJJTUFSWSBLRVksIGIgZ3Rlc3Rkb21haW4xcmFuZ2UgR0VORVJBVEVEIEFMV0FZUyBB UyAoZ3Rlc3Rkb21haW4xcmFuZ2UoYSwgYSArIDQpKSBWSVJUVUFMKTsKK0lOU0VSVCBJTlRPIGd0 ZXN0MjRyIChhKSBWQUxVRVMgKDQpOyAgLS0gb2sKK0lOU0VSVCBJTlRPIGd0ZXN0MjRyIChhKSBW QUxVRVMgKDYpOyAgLS0gZXJyb3IKK0lOU0VSVCBJTlRPIGd0ZXN0MjRyIChhKSBWQUxVRVMgKDUp OyAgLS0gZXJyb3IKKworQ1JFQVRFIFRBQkxFIGd0ZXN0MjR2ICgKKyAgYSBqc29uYiwKKyAgYiBn dGVzdGRvbWFpbjFbXSBHRU5FUkFURUQgQUxXQVlTIEFTIChKU09OX1FVRVJZKGEsICckLmEnIHJl dHVybmluZyBndGVzdGRvbWFpbjFbXSBlcnJvciBvbiBlcnJvcikpIFZJUlRVQUwsCisgIGMgZ3Rl c3Rkb21haW4xW10gR0VORVJBVEVEIEFMV0FZUyBBUyAoSlNPTl9RVUVSWShhLCAnJC5iJyByZXR1 cm5pbmcgZ3Rlc3Rkb21haW4xW10pKSBWSVJUVUFMIG5vdCBudWxsKTsKK2luc2VydCBpbnRvIGd0 ZXN0MjR2IHNlbGVjdCBqc29uYiAneyJhIjpbNiwxMF0sICJiIjpbNiwyXX0nOyAtLWVycm9yCitp bnNlcnQgaW50byBndGVzdDI0diBzZWxlY3QganNvbmIgJ3siYSI6WzYsLTFdLCAiYiI6WzYsMTBd fSc7IC0tZXJyb3IKK2luc2VydCBpbnRvIGd0ZXN0MjR2IHNlbGVjdCBqc29uYiAneyJhIjpbNiwt MV0sICJiIjpbNiwyXX0nOyAtLW9rCiAKIC0tIHR5cGVkIHRhYmxlcyAoY3VycmVudGx5IG5vdCBz dXBwb3J0ZWQpCiBDUkVBVEUgVFlQRSBndGVzdF90eXBlIEFTIChmMSBpbnRlZ2VyLCBmMiB0ZXh0 LCBmMyBiaWdpbnQpOwotLSAKMi4zNC4xCgo= --00000000000042976e0630386172 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0003-soft-error-variant-of-ExecPrepareExpr-ExecInitExp.patch" Content-Disposition: attachment; filename="v4-0003-soft-error-variant-of-ExecPrepareExpr-ExecInitExp.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m87bjma51 RnJvbSAwNzk1MjZmMjAxMTM2YzMyYmU0Mjc3NGI4ZWVjNWM4MjlhYjcyOGIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMTMgTWFyIDIwMjUgMTU6MDU6NDEgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 IDMvNF0gc29mdCBlcnJvciB2YXJpYW50IG9mIEV4ZWNQcmVwYXJlRXhwciwgRXhlY0luaXRFeHBy CgpFeGVjUHJlcGFyZUV4cHJTYWZlIGFuZCBFeGVjSW5pdEV4cHJTYWZlLgpFeGVjUHJlcGFyZUV4 cHJTYWZlIGluaXRpYWxpemUgZm9yIGV4cHJlc3Npb24gZXhlY3V0aW9uIHdpdGggc29mdCBlcnJv ciBzdXBwb3J0Lgpub3QgYWxsIGV4cHJlc3Npb24gbm9kZSBzdXBwb3J0IGl0LiBzb21lIGxpa2Ug Q29lcmNlVG9Eb21haW4gZG8gc3VwcG9ydCBpdC4KClhYWCBtb3JlIGNvbW1lbnRzLgoKZGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUNKdWZ4RV8raVpCUjFpNDlrX0FIaWdwcFB3TFRK aTZrbThOT3NDN0ZXdktkRW1tWGdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9leGVj dXRvci9leGVjRXhwci5jIHwgNjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBz cmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIHwgIDIgKysKIDIgZmlsZXMgY2hhbmdlZCwg NjUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNF eHByLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCmluZGV4IGYxNTY5ODc5YjUy Li5iOGY1ZjY0NzI4MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCkBAIC0xNzAsNiArMTcwLDQ2 IEBAIEV4ZWNJbml0RXhwcihFeHByICpub2RlLCBQbGFuU3RhdGUgKnBhcmVudCkKIAlyZXR1cm4g c3RhdGU7CiB9CiAKKy8qCisgKiBFeGVjSW5pdEV4cHI6IHNvZnQgZXJyb3IgdmFyaWFudCBvZiBF eGVjSW5pdEV4cHIuCisgKiB1c2UgaXQgb25seSBmb3IgZXhwcmVzc2lvbiBub2RlcyBzdXBwb3J0 IHNvZnQgZXJyb3JzLCBub3QgYWxsIGV4cHJlc3Npb24KKyAqIG5vZGVzIHN1cHBvcnQgaXQuCisq LworRXhwclN0YXRlICoKK0V4ZWNJbml0RXhwclNhZmUoRXhwciAqbm9kZSwgUGxhblN0YXRlICpw YXJlbnQpCit7CisJRXhwclN0YXRlICAqc3RhdGU7CisJRXhwckV2YWxTdGVwIHNjcmF0Y2ggPSB7 MH07CisKKwkvKiBTcGVjaWFsIGNhc2U6IE5VTEwgZXhwcmVzc2lvbiBwcm9kdWNlcyBhIE5VTEwg RXhwclN0YXRlIHBvaW50ZXIgKi8KKwlpZiAobm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsK KworCS8qIEluaXRpYWxpemUgRXhwclN0YXRlIHdpdGggZW1wdHkgc3RlcCBsaXN0ICovCisJc3Rh dGUgPSBtYWtlTm9kZShFeHByU3RhdGUpOworCXN0YXRlLT5leHByID0gbm9kZTsKKwlzdGF0ZS0+ cGFyZW50ID0gcGFyZW50OworCXN0YXRlLT5leHRfcGFyYW1zID0gTlVMTDsKKwlzdGF0ZS0+ZXNj b250ZXh0ID0gbWFrZU5vZGUoRXJyb3JTYXZlQ29udGV4dCk7CisJc3RhdGUtPmVzY29udGV4dC0+ dHlwZSA9IFRfRXJyb3JTYXZlQ29udGV4dDsKKwlzdGF0ZS0+ZXNjb250ZXh0LT5lcnJvcl9vY2N1 cnJlZCA9IGZhbHNlOworCXN0YXRlLT5lc2NvbnRleHQtPmRldGFpbHNfd2FudGVkID0gdHJ1ZTsK KworCS8qIEluc2VydCBzZXR1cCBzdGVwcyBhcyBuZWVkZWQgKi8KKwlFeGVjQ3JlYXRlRXhwclNl dHVwU3RlcHMoc3RhdGUsIChOb2RlICopIG5vZGUpOworCisJLyogQ29tcGlsZSB0aGUgZXhwcmVz c2lvbiBwcm9wZXIgKi8KKwlFeGVjSW5pdEV4cHJSZWMobm9kZSwgc3RhdGUsICZzdGF0ZS0+cmVz dmFsdWUsICZzdGF0ZS0+cmVzbnVsbCk7CisKKwkvKiBGaW5hbGx5LCBhcHBlbmQgYSBET05FIHN0 ZXAgKi8KKwlzY3JhdGNoLm9wY29kZSA9IEVFT1BfRE9ORV9SRVRVUk47CisJRXhwckV2YWxQdXNo U3RlcChzdGF0ZSwgJnNjcmF0Y2gpOworCisJRXhlY1JlYWR5RXhwcihzdGF0ZSk7CisKKwlyZXR1 cm4gc3RhdGU7Cit9CisKIC8qCiAgKiBFeGVjSW5pdEV4cHJXaXRoUGFyYW1zOiBwcmVwYXJlIGEg c3RhbmRhbG9uZSBleHByZXNzaW9uIHRyZWUgZm9yIGV4ZWN1dGlvbgogICoKQEAgLTc3OCw2ICs4 MTgsMjkgQEAgRXhlY1ByZXBhcmVFeHByKEV4cHIgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlKQogCXJl dHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBFeGVjUHJlcGFyZUV4cHJTYWZlOiBzb2Z0IGVycm9y IHZhcmlhbnQgb2YgRXhlY1ByZXBhcmVFeHByLgorICoKKyAqIHVzZSBpdCB3aGVuIGV4cHJlc3Np b24gbm9kZSAqc3VwcG9ydCogc29mdCBlcnJvciBleHByZXNzaW9uIGV4ZWN1dGlvbi4KKyAqIEV4 ZWNQcmVwYXJlRXhwciBjb21tZW50cyBhcHBseSB0byBoZXJlIHRvby4KKyAqLworRXhwclN0YXRl ICoKK0V4ZWNQcmVwYXJlRXhwclNhZmUoRXhwciAqbm9kZSwgRVN0YXRlICplc3RhdGUpCit7CisJ RXhwclN0YXRlICAqcmVzdWx0OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCW9sZGNv bnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0YXRlLT5lc19xdWVyeV9jeHQpOworCisJ bm9kZSA9IGV4cHJlc3Npb25fcGxhbm5lcihub2RlKTsKKworCXJlc3VsdCA9IEV4ZWNJbml0RXhw clNhZmUobm9kZSwgTlVMTCk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiAvKgogICogRXhlY1ByZXBhcmVRdWFsIC0tLSBpbml0 aWFsaXplIGZvciBxdWFsIGV4ZWN1dGlvbiBvdXRzaWRlIGEgbm9ybWFsCiAgKiBQbGFuIHRyZWUg Y29udGV4dC4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9z cmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IDQwNjNlZDY4ZjVmLi4yOGU3ZGY0 ZjMzNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAorKysgYi9z cmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC0zMDksNiArMzA5LDcgQEAgRXhlY1By b2NOb2RlKFBsYW5TdGF0ZSAqbm9kZSkKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlvbnMgaW4g ZXhlY0V4cHIuYwogICovCiBleHRlcm4gRXhwclN0YXRlICpFeGVjSW5pdEV4cHIoRXhwciAqbm9k ZSwgUGxhblN0YXRlICpwYXJlbnQpOworZXh0ZXJuIEV4cHJTdGF0ZSAqRXhlY0luaXRFeHByU2Fm ZShFeHByICpub2RlLCBQbGFuU3RhdGUgKnBhcmVudCk7CiBleHRlcm4gRXhwclN0YXRlICpFeGVj SW5pdEV4cHJXaXRoUGFyYW1zKEV4cHIgKm5vZGUsIFBhcmFtTGlzdEluZm8gZXh0X3BhcmFtcyk7 CiBleHRlcm4gRXhwclN0YXRlICpFeGVjSW5pdFF1YWwoTGlzdCAqcXVhbCwgUGxhblN0YXRlICpw YXJlbnQpOwogZXh0ZXJuIEV4cHJTdGF0ZSAqRXhlY0luaXRDaGVjayhMaXN0ICpxdWFsLCBQbGFu U3RhdGUgKnBhcmVudCk7CkBAIC0zNTcsNiArMzU4LDcgQEAgZXh0ZXJuIFByb2plY3Rpb25JbmZv ICpFeGVjQnVpbGRVcGRhdGVQcm9qZWN0aW9uKExpc3QgKnRhcmdldExpc3QsCiAJCQkJCQkJCQkJ CQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkJCQkgUGxhblN0YXRlICpwYXJlbnQp OwogZXh0ZXJuIEV4cHJTdGF0ZSAqRXhlY1ByZXBhcmVFeHByKEV4cHIgKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlKTsKK2V4dGVybiBFeHByU3RhdGUgKkV4ZWNQcmVwYXJlRXhwclNhZmUoRXhwciAqbm9k ZSwgRVN0YXRlICplc3RhdGUpOwogZXh0ZXJuIEV4cHJTdGF0ZSAqRXhlY1ByZXBhcmVRdWFsKExp c3QgKnF1YWwsIEVTdGF0ZSAqZXN0YXRlKTsKIGV4dGVybiBFeHByU3RhdGUgKkV4ZWNQcmVwYXJl Q2hlY2soTGlzdCAqcXVhbCwgRVN0YXRlICplc3RhdGUpOwogZXh0ZXJuIExpc3QgKkV4ZWNQcmVw YXJlRXhwckxpc3QoTGlzdCAqbm9kZXMsIEVTdGF0ZSAqZXN0YXRlKTsKLS0gCjIuMzQuMQoK --00000000000042976e0630386172 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-not-null-for-virtual-generated-column.patch" Content-Disposition: attachment; filename="v4-0001-not-null-for-virtual-generated-column.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m87bjma83 RnJvbSAzNTQxNzExZTE4NzE3ZGQ1ZDJjOTNjN2UyNTIxMjQ5YjAxZDZkYjdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTIgTWFyIDIwMjUgMjI6MDc6NTcgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 IDEvNF0gbm90IG51bGwgZm9yIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbgoKbm93IHdlIGNhbiBh ZGQgbm90IG51bGwgY29uc3RyYWludCBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4uCm5vdCBu dWxsIGNvbnN0cmFpbnQgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIG1ha2Ugc3VyZSBldmF1 bGF0aW9uIG9mIHRoZQpleHBhbmRlZCBnZW5lcmF0ZWQgZXhwcmVzc2lvbiBkb2VzIG5vdCB5aWVs ZCBudWxsLgp0aGUgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBkb2VzIG5vdCBzdG9yZSAgdmFs dWUsIHRoZSBzdG9yYWdlIGlzIG51bGwuCgp3ZSBkbyBzdXBwb3J0IEFMVEVSIENPTFVNTiBTRVQg RVhQUkVTU0lPTiBvdmVyIG5vdCBudWxsIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbi4KCmRpc2N1 c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FDSnVmeEhBclF5c2JEa1dGbXZLK0QxVFBIUVdX VHhXTjE1Y011VWFUWVgzeGhRWGdnQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvY2F0 YWxvZy9oZWFwLmMgICAgICAgICAgICAgICAgICAgIHwgIDEwIC0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2luZGV4Y21kcy5jICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgIDY4ICsrKysrLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgIHwgMjIwICsrKysrKysrKysrKystLS0tLQog c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyAgICAgICAgICAgIHwgIDE0IC0tCiBz cmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICAgICAgICAgICAgfCAgIDQgKwogc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICAyICsKIC4uLi9y ZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dCAgICB8ICA4OSArKysrKy0tCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwgICAgfCAgNTAgKysrLQog OSBmaWxlcyBjaGFuZ2VkLCAzNDggaW5zZXJ0aW9ucygrKSwgMTE5IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9oZWFwLmMKaW5kZXggYmQzNTU0YzBiZmQuLmI4MDdhYjY2NjY4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jYXRhbG9nL2hlYXAuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYwpA QCAtMjYxNSwxMSArMjYxNSw2IEBAIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWludHMoUmVsYXRpb24g cmVsLAogCQkJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJ CQllcnJtc2coImNhbm5vdCBhZGQgbm90LW51bGwgY29uc3RyYWludCBvbiBzeXN0ZW0gY29sdW1u IFwiJXNcIiIsCiAJCQkJCQkJICAgc3RyVmFsKGxpbml0aWFsKGNkZWYtPmtleXMpKSkpOwotCQkJ LyogVE9ETzogc2VlIHRyYW5zZm9ybUNvbHVtbkRlZmluaXRpb24oKSAqLwotCQkJaWYgKGdldF9h dHRnZW5lcmF0ZWQoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBjb2xudW0pID09IEFUVFJJQlVURV9H RU5FUkFURURfVklSVFVBTCkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCQllcnJtc2coIm5vdC1udWxsIGNvbnN0 cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMiKSk7 CiAKIAkJCS8qCiAJCQkgKiBJZiB0aGUgY29sdW1uIGFscmVhZHkgaGFzIGEgbm90LW51bGwgY29u c3RyYWludCwgd2UgZG9uJ3Qgd2FudApAQCAtMjkzNSwxMSArMjkzMCw2IEBAIEFkZFJlbGF0aW9u Tm90TnVsbENvbnN0cmFpbnRzKFJlbGF0aW9uIHJlbCwgTGlzdCAqY29uc3RyYWludHMsCiAJCQkJ CWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQllcnJtc2coImNh bm5vdCBhZGQgbm90LW51bGwgY29uc3RyYWludCBvbiBzeXN0ZW0gY29sdW1uIFwiJXNcIiIsCiAJ CQkJCQkgICBzdHJWYWwobGluaXRpYWwoY29uc3RyLT5rZXlzKSkpKTsKLQkJLyogVE9ETzogc2Vl IHRyYW5zZm9ybUNvbHVtbkRlZmluaXRpb24oKSAqLwotCQlpZiAoZ2V0X2F0dGdlbmVyYXRlZChS ZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSkgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJU VUFMKQotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksCi0JCQkJCWVycm1zZygibm90LW51bGwgY29uc3RyYWludHMgYXJlIG5vdCBz dXBwb3J0ZWQgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyIpKTsKIAogCQkvKgogCQkgKiBB IGNvbHVtbiBjYW4gb25seSBoYXZlIG9uZSBub3QtbnVsbCBjb25zdHJhaW50LCBzbyBkaXNjYXJk IGFueQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRleCAzMmZmM2NhOWEyOC4uZTY5MDQ4N2Vi M2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC0xMTI2LDEwICsxMTI2LDEyIEBAIERl ZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCiAJCWlmIChUdXBsZURlc2NBdHRyKFJlbGF0aW9uR2V0 RGVzY3IocmVsKSwgYXR0bm8gLSAxKS0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFU RURfVklSVFVBTCkKIAkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIHN0bXQtPmlzY29uc3RyYWludCA/Ci0JCQkJCSBl cnJtc2coInVuaXF1ZSBjb25zdHJhaW50cyBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGFy ZSBub3Qgc3VwcG9ydGVkIikgOgotCQkJCQkgZXJybXNnKCJpbmRleGVzIG9uIHZpcnR1YWwgZ2Vu ZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKSkpOworCQkJCQllcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJc3RtdC0+cHJpbWFyeSA/CisJCQkJCWVy cm1zZygicHJpbWFyeSBrZXkgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1 cHBvcnRlZCIpIDoKKwkJCQkJc3RtdC0+aXNjb25zdHJhaW50ID8KKwkJCQkJZXJybXNnKCJ1bmlx dWUgY29uc3RyYWludHMgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBv cnRlZCIpIDoKKwkJCQkJZXJybXNnKCJpbmRleGVzIG9uIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVt bnMgYXJlIG5vdCBzdXBwb3J0ZWQiKSk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMKaW5kZXggMThmZjg5NTY1NzcuLmI4ZDgyYmEyODA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYwpAQCAtNjA5Miw2ICs2MDkyLDcgQEAgQVRSZXdyaXRlVGFibGUoQWx0ZXJlZFRhYmxlSW5m byAqdGFiLCBPaWQgT0lETmV3SGVhcCkKIAlUdXBsZURlc2MJbmV3VHVwRGVzYzsKIAlib29sCQlu ZWVkc2NhbiA9IGZhbHNlOwogCUxpc3QJICAgKm5vdG51bGxfYXR0cnM7CisJTGlzdAkgICAqYWxs X3ZpcnR1YWxfbm5zID0gTklMOwogCWludAkJCWk7CiAJTGlzdENlbGwgICAqbDsKIAlFU3RhdGUJ ICAgKmVzdGF0ZTsKQEAgLTYxOTUsNiArNjE5NiwxNiBAQCBBVFJld3JpdGVUYWJsZShBbHRlcmVk VGFibGVJbmZvICp0YWIsIE9pZCBPSUROZXdIZWFwKQogCQkJbmVlZHNjYW4gPSB0cnVlOwogCX0K IAorCWZvcmVhY2hfaW50KGF0dG4sIG5vdG51bGxfYXR0cnMpCisJeworCQlGb3JtX3BnX2F0dHJp YnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0cihuZXdUdXBEZXNjLCBhdHRuKTsKKworCQlBc3NlcnQo YXR0ci0+YXR0bm90bnVsbCk7CisJCUFzc2VydCghYXR0ci0+YXR0aXNkcm9wcGVkKTsKKwkJaWYg KGF0dHItPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwpCisJCQlh bGxfdmlydHVhbF9ubnMgPSBsYXBwZW5kX2ludChhbGxfdmlydHVhbF9ubnMsIGF0dHItPmF0dG51 bSk7CisJfQorCiAJaWYgKG5ld3JlbCB8fCBuZWVkc2NhbikKIAl7CiAJCUV4cHJDb250ZXh0ICpl Y29udGV4dDsKQEAgLTYyMDUsNiArNjIxNiwyMiBAQCBBVFJld3JpdGVUYWJsZShBbHRlcmVkVGFi bGVJbmZvICp0YWIsIE9pZCBPSUROZXdIZWFwKQogCQlMaXN0CSAgICpkcm9wcGVkX2F0dHJzID0g TklMOwogCQlMaXN0Q2VsbCAgICpsYzsKIAkJU25hcHNob3QJc25hcHNob3Q7CisJCVJlc3VsdFJl bEluZm8gKnJJbmZvCT0gTlVMTDsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJCWlm IChsaXN0X2xlbmd0aChhbGxfdmlydHVhbF9ubnMpID4gMCkKKwkJeworCQkJQXNzZXJ0KG5ld1R1 cERlc2MtPmNvbnN0ci0+aGFzX2dlbmVyYXRlZF92aXJ0dWFsKTsKKwkJCUFzc2VydChuZXdUdXBE ZXNjLT5jb25zdHItPmhhc19ub3RfbnVsbCk7CisJCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKGVzdGF0ZS0+ZXNfcXVlcnlfY3h0KTsKKwkJCXJJbmZvID0gbWFrZU5vZGUoUmVz dWx0UmVsSW5mbyk7CisJCQlJbml0UmVzdWx0UmVsSW5mbyhySW5mbywKKwkJCQkJCQkgIG9sZHJl bCwKKwkJCQkJCQkgIDAsCQkvKiBkdW1teSByYW5nZXRhYmxlIGluZGV4ICovCisJCQkJCQkJICBO VUxMLAorCQkJCQkJCSAgZXN0YXRlLT5lc19pbnN0cnVtZW50KTsKKwkJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJfQogCiAJCWlmIChuZXdyZWwpCiAJCQllcmVwb3J0KERF QlVHMSwKQEAgLTYyODcsNiArNjMxNCw3IEBAIEFUUmV3cml0ZVRhYmxlKEFsdGVyZWRUYWJsZUlu Zm8gKnRhYiwgT2lkIE9JRE5ld0hlYXApCiAJCXdoaWxlICh0YWJsZV9zY2FuX2dldG5leHRzbG90 KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvbGRzbG90KSkKIAkJewogCQkJVHVwbGVUYWJs ZVNsb3QgKmluc2VydHNsb3Q7CisJCQlib29sCXZpcnR1YWxfbm90bnVsbF9jaGVjayA9IGZhbHNl OwogCiAJCQlpZiAodGFiLT5yZXdyaXRlID4gMCkKIAkJCXsKQEAgLTYzNzgsNiArNjQwNiwxNCBA QCBBVFJld3JpdGVUYWJsZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIE9pZCBPSUROZXdIZWFwKQog CQkJCXsKIAkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIobmV3VHVw RGVzYywgYXR0bik7CiAKKwkJCQkJLyogdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIG5vdCBudWxs IGNvbnN0cmFpbnQgaGFuZGxlZCBiZWxvdyAqLworCisJCQkJCWlmIChhdHRyLT5hdHRnZW5lcmF0 ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKQorCQkJCQl7CisJCQkJCQlpZiAoIXZp cnR1YWxfbm90bnVsbF9jaGVjaykKKwkJCQkJCQl2aXJ0dWFsX25vdG51bGxfY2hlY2sgPSB0cnVl OworCQkJCQkJY29udGludWU7CisJCQkJCX0KIAkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQko ZXJyY29kZShFUlJDT0RFX05PVF9OVUxMX1ZJT0xBVElPTiksCiAJCQkJCQkJIGVycm1zZygiY29s dW1uIFwiJXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgY29udGFpbnMgbnVsbCB2YWx1ZXMiLApAQCAt NjM4Nyw2ICs2NDIzLDI3IEBAIEFUUmV3cml0ZVRhYmxlKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwg T2lkIE9JRE5ld0hlYXApCiAJCQkJfQogCQkJfQogCisJCQlpZiAodmlydHVhbF9ub3RudWxsX2No ZWNrKQorCQkJeworCQkJCWludAkJYXR0bnVtID0gLTE7CisJCQkJQXNzZXJ0KGxpc3RfbGVuZ3Ro KGFsbF92aXJ0dWFsX25ucykgPiAwKTsKKworCQkJCWF0dG51bSA9IEV4ZWNSZWxDaGVja0dlblZp cnR1YWxOb3ROdWxsKHJJbmZvLCBpbnNlcnRzbG90LAorCQkJCQkJCQkJCQkJCSAgIGVzdGF0ZSwK KwkJCQkJCQkJCQkJCQkgICBhbGxfdmlydHVhbF9ubnMpOworCQkJCWlmIChhdHRudW0gPiAwKQor CQkJCXsKKwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIobmV3VHVw RGVzYywgYXR0bnVtIC0gMSk7CisKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQllcnJjb2Rl KEVSUkNPREVfTk9UX05VTExfVklPTEFUSU9OKSwKKwkJCQkJCQllcnJtc2coImNvbHVtbiBcIiVz XCIgb2YgcmVsYXRpb24gXCIlc1wiIGNvbnRhaW5zIG51bGwgdmFsdWVzIiwKKwkJCQkJCQkJCU5h bWVTdHIoYXR0ci0+YXR0bmFtZSksCisJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShv bGRyZWwpKSwKKwkJCQkJCQllcnJ0YWJsZWNvbChvbGRyZWwsIGF0dG51bSkpOworCQkJCX0KKwkJ CX0KKwogCQkJZm9yZWFjaChsLCB0YWItPmNvbnN0cmFpbnRzKQogCQkJewogCQkJCU5ld0NvbnN0 cmFpbnQgKmNvbiA9IGxmaXJzdChsKTsKQEAgLTc4MzYsMTQgKzc4OTMsNiBAQCBBVEV4ZWNTZXRO b3ROdWxsKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY2hhciAqY29uTmFtZSwgY2hhciAq Y29sTmFtZSwKIAkJCQkgZXJybXNnKCJjYW5ub3QgYWx0ZXIgc3lzdGVtIGNvbHVtbiBcIiVzXCIi LAogCQkJCQkJY29sTmFtZSkpKTsKIAotCS8qIFRPRE86IHNlZSB0cmFuc2Zvcm1Db2x1bW5EZWZp bml0aW9uKCkgKi8KLQlpZiAoVHVwbGVEZXNjQXR0cihSZWxhdGlvbkdldERlc2NyKHJlbCksIGF0 dG51bSAtIDEpLT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKQot CQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKLQkJCQkgZXJybXNnKCJub3QtbnVsbCBjb25zdHJhaW50cyBhcmUgbm90IHN1cHBvcnRl ZCBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIiksCi0JCQkJIGVycmRldGFpbCgiQ29sdW1u IFwiJXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgaXMgYSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4u IiwKLQkJCQkJCSAgIGNvbE5hbWUsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7Ci0K IAkvKiBTZWUgaWYgdGhlcmUncyBhbHJlYWR5IGEgY29uc3RyYWludCAqLwogCXR1cGxlID0gZmlu ZE5vdE51bGxDb25zdHJhaW50QXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtKTsK IAlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCkBAIC04NTEyLDYgKzg1NjEsOSBAQCBBVEV4 ZWNTZXRFeHByZXNzaW9uKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLCBjb25z dCBjaGFyICpjb2xOYW1lLAogCQkJCSBlcnJkZXRhaWwoIkNvbHVtbiBcIiVzXCIgb2YgcmVsYXRp b24gXCIlc1wiIGlzIGEgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uLiIsCiAJCQkJCQkgICBjb2xO YW1lLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOwogCisJaWYgKGF0dGdlbmVyYXRl ZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwgJiYgYXR0VHVwLT5hdHRub3RudWxsKQor CQl0YWItPnZlcmlmeV9uZXdfbm90bnVsbCA9IHRydWU7CisKIAkvKgogCSAqIFdlIG5lZWQgdG8g cHJldmVudCB0aGlzIGJlY2F1c2UgYSBjaGFuZ2Ugb2YgZXhwcmVzc2lvbiBjb3VsZCBhZmZlY3Qg YQogCSAqIHJvdyBmaWx0ZXIgYW5kIGluamVjdCBleHByZXNzaW9ucyB0aGF0IGFyZSBub3QgcGVy bWl0dGVkIGluIGEgcm93CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFp bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwppbmRleCAwNDkzYjdkNTM2NS4u NTFmZThlZmM1NTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwpAQCAtNTEsNiArNTEsNyBAQAog I2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNs dWRlICJub2Rlcy9xdWVyeWp1bWJsZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlv bi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgpAQCAtMTM3Miw2ICsxMzczLDcgQEAgSW5pdFJlc3Vs dFJlbEluZm8oUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAlyZXN1bHRSZWxJbmZvLT5y aV9GZHdTdGF0ZSA9IE5VTEw7CiAJcmVzdWx0UmVsSW5mby0+cmlfdXNlc0Zkd0RpcmVjdE1vZGlm eSA9IGZhbHNlOwogCXJlc3VsdFJlbEluZm8tPnJpX0NvbnN0cmFpbnRFeHBycyA9IE5VTEw7CisJ cmVzdWx0UmVsSW5mby0+cmlfR2VuZXJhdGVkTm90TnVsbEV4cHJzID0gTlVMTDsKIAlyZXN1bHRS ZWxJbmZvLT5yaV9HZW5lcmF0ZWRFeHByc0kgPSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX0dl bmVyYXRlZEV4cHJzVSA9IE5VTEw7CiAJcmVzdWx0UmVsSW5mby0+cmlfcHJvamVjdFJldHVybmlu ZyA9IE5VTEw7CkBAIC0xODQxLDYgKzE4NDMsNzAgQEAgRXhlY3V0ZVBsYW4oUXVlcnlEZXNjICpx dWVyeURlc2MsCiB9CiAKIAorLyoKKyAqIHdlIHdhcnAgInZpcnR1YWxfZ2VuZXJhdGVkIGNvbCBJ UyBOT1QgTlVMTCIgdG8gYSBOdWxsVGVzdCBub2RlLgorICogTnVsbFRlc3QtPmFyZyBpcyB0aGUg dmlydHVhbCBnZW5lcmF0ZWQgZXhwcmVzc2lvbi4gIHJldHVybiB2YWx1ZSBvZiAtMSBtZWFucwor ICogb2suICByZXR1cm4gdmFsdWUgPiAwIG1lYW5zIG5vdCBudWxsIHZpb2xhdGlvbiBoYXBwZW5k ZWQgZm9yIHRoYXQgYXR0cmlidXRlCisgKiBudW1iZXIuCisgKiBhbGxfdmlydHVhbF9ubnMgaXMg KmFsbCogdGhlIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiBub3QtbnVsbCBhdHRyaWJ1dGUgbnVt YmVycy4KKyAqCisqLworaW50CitFeGVjUmVsQ2hlY2tHZW5WaXJ0dWFsTm90TnVsbChSZXN1bHRS ZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkgIEVT dGF0ZSAqZXN0YXRlLCBMaXN0ICphbGxfdmlydHVhbF9ubnMpCit7CisJUmVsYXRpb24JcmVsID0g cmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjOworCUV4cHJDb250ZXh0ICplY29udGV4dDsK KwlNZW1vcnlDb250ZXh0IG9sZENvbnRleHQ7CisJaW50CQkJaSA9IDA7CisJaW50CQkJY250ID0g bGlzdF9sZW5ndGgoYWxsX3ZpcnR1YWxfbm5zKTsKKworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9H ZW5lcmF0ZWROb3ROdWxsRXhwcnMgPT0gTlVMTCkKKwl7CisJCW9sZENvbnRleHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oZXN0YXRlLT5lc19xdWVyeV9jeHQpOworCQlyZXN1bHRSZWxJbmZvLT5y aV9HZW5lcmF0ZWROb3ROdWxsRXhwcnMgPQorCQkJKEV4cHJTdGF0ZSAqKikgcGFsbG9jMChjbnQg KiBzaXplb2YoRXhwclN0YXRlICopKTsKKworCQlmb3JlYWNoX2ludChhdHRpZHgsIGFsbF92aXJ0 dWFsX25ucykKKwkJeworCQkJRXhwcgkgICAqZXhwcjsKKwkJCU51bGxUZXN0ICAgKm5udWxsdGVz dDsKKworCQkJbm51bGx0ZXN0ID0gbWFrZU5vZGUoTnVsbFRlc3QpOworCQkJbm51bGx0ZXN0LT5h cmcgPSAoRXhwciAqKSBidWlsZF9nZW5lcmF0aW9uX2V4cHJlc3Npb24ocmVsLCBhdHRpZHgpOwor CQkJbm51bGx0ZXN0LT5udWxsdGVzdHR5cGUgPSBJU19OT1RfTlVMTDsKKwkJCW5udWxsdGVzdC0+ YXJnaXNyb3cgPSBmYWxzZTsKKwkJCW5udWxsdGVzdC0+bG9jYXRpb24gPSAtMTsKKworCQkJZXhw ciA9IChFeHByICopIG5udWxsdGVzdDsKKwkJCXJlc3VsdFJlbEluZm8tPnJpX0dlbmVyYXRlZE5v dE51bGxFeHByc1tpKytdID0gRXhlY1ByZXBhcmVFeHByKGV4cHIsIGVzdGF0ZSk7CisJCX0KKwkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOworCX0KKworCS8qCisJICogV2Ugd2ls bCB1c2UgdGhlIEVTdGF0ZSdzIHBlci10dXBsZSBjb250ZXh0IGZvciBldmFsdWF0aW5nIHZpcnR1 YWwKKwkgKiBnZW5lcmF0ZWQgY29sdW1uIG5vdCBudWxsIGNvbnN0cmFpbnQgZXhwcmVzc2lvbnMg KGNyZWF0aW5nIGl0IGlmIGl0J3Mgbm90CisJICogYWxyZWFkeSB0aGVyZSkuCisJICovCisJZWNv bnRleHQgPSBHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVzdGF0ZSk7CisKKwkvKiBBcnJhbmdlIGZv ciBlY29udGV4dCdzIHNjYW4gdHVwbGUgdG8gYmUgdGhlIHR1cGxlIHVuZGVyIHRlc3QgKi8KKwll Y29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzbG90OworCisJLyogQW5kIGV2YWx1YXRlIHRoZSBj aGVjayBjb25zdHJhaW50cyBmb3IgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uICovCisJaSA9IDA7 CisJZm9yZWFjaF9pbnQoYXR0bnVtLCBhbGxfdmlydHVhbF9ubnMpCisJeworCQlFeHByU3RhdGUg ICpleHByc3RhdGUgPSByZXN1bHRSZWxJbmZvLT5yaV9HZW5lcmF0ZWROb3ROdWxsRXhwcnNbaSsr XTsKKwkJaWYgKGV4cHJzdGF0ZSAmJiAhRXhlY0NoZWNrKGV4cHJzdGF0ZSwgZWNvbnRleHQpKQor CQkJcmV0dXJuIGF0dG51bTsKKwl9CisKKwkvKiAtMSByZXN1bHQgbWVhbnMgbm8gZXJyb3IgKi8K KwlyZXR1cm4gLTE7Cit9CisKIC8qCiAgKiBFeGVjUmVsQ2hlY2sgLS0tIGNoZWNrIHRoYXQgdHVw bGUgbWVldHMgY29uc3RyYWludHMgZm9yIHJlc3VsdCByZWxhdGlvbgogICoKQEAgLTIwMzksNiAr MjEwNSw3MCBAQCBFeGVjUGFydGl0aW9uQ2hlY2tFbWl0RXJyb3IoUmVzdWx0UmVsSW5mbyAqcmVz dWx0UmVsSW5mbywKIAkJCSBlcnJ0YWJsZShyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2Mp KSk7CiB9CiAKKy8qIG5vdCBudWxsIGNvbnN0cmFpbnQgdmlvbGF0aW9uIGhhcHBlbmVkLCBub3cg Zm9ybWF0IHRoZSBlcnJvciBtZXNzYWdlICovCitzdGF0aWMgdm9pZAorTm90TnVsbFZpb2xhdGlv bkVycm9yUmVwb3J0KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sIFR1cGxlVGFibGVTbG90 ICpzbG90LAorCQkJCQkJCUVTdGF0ZSAqZXN0YXRlLCBpbnQgYXR0ckNoaykKK3sKKwlCaXRtYXBz ZXQgICptb2RpZmllZENvbHM7CisJY2hhcgkgICAqdmFsX2Rlc2M7CisKKwlSZWxhdGlvbglyZWwg PSByZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2M7CisJUmVsYXRpb24Jb3JpZ19yZWwgPSBy ZWw7CisKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlUdXBs ZURlc2MJb3JpZ190dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCUZvcm1fcGdfYXR0 cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgYXR0ckNoayAtIDEpOworCisJQXNz ZXJ0KGF0dHJDaGsgPiAwKTsKKworCS8qCisJICogSWYgdGhlIHR1cGxlIGhhcyBiZWVuIHJvdXRl ZCwgaXQncyBiZWVuIGNvbnZlcnRlZCB0byB0aGUKKwkgKiBwYXJ0aXRpb24ncyByb3d0eXBlLCB3 aGljaCBtaWdodCBkaWZmZXIgZnJvbSB0aGUgcm9vdAorCSAqIHRhYmxlJ3MuICBXZSBtdXN0IGNv bnZlcnQgaXQgYmFjayB0byB0aGUgcm9vdCB0YWJsZSdzCisJICogcm93dHlwZSBzbyB0aGF0IHZh bF9kZXNjIHNob3duIGVycm9yIG1lc3NhZ2UgbWF0Y2hlcyB0aGUKKwkgKiBpbnB1dCB0dXBsZS4K KwkqLworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9Sb290UmVzdWx0UmVsSW5mbykKKwl7CisJCVJl c3VsdFJlbEluZm8gKnJvb3RyZWwgPSByZXN1bHRSZWxJbmZvLT5yaV9Sb290UmVzdWx0UmVsSW5m bzsKKwkJQXR0ck1hcCAgICAqbWFwOworCisJCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJv b3RyZWwtPnJpX1JlbGF0aW9uRGVzYyk7CisJCS8qIGEgcmV2ZXJzZSBtYXAgKi8KKwkJbWFwID0g YnVpbGRfYXR0cm1hcF9ieV9uYW1lX2lmX3JlcShvcmlnX3R1cGRlc2MsCisJCQkJCQkJCQkJICAg dHVwZGVzYywKKwkJCQkJCQkJCQkgICBmYWxzZSk7CisKKwkJLyoKKwkJICogUGFydGl0aW9uLXNw ZWNpZmljIHNsb3QncyB0dXBkZXNjIGNhbid0IGJlIGNoYW5nZWQsIHNvCisJCSAqIGFsbG9jYXRl IGEgbmV3IG9uZS4KKwkJKi8KKwkJaWYgKG1hcCAhPSBOVUxMKQorCQkJc2xvdCA9IGV4ZWN1dGVf YXR0cl9tYXBfc2xvdChtYXAsIHNsb3QsCisJCQkJCQkJCQkJIE1ha2VUdXBsZVRhYmxlU2xvdCh0 dXBkZXNjLCAmVFRTT3BzVmlydHVhbCkpOworCQltb2RpZmllZENvbHMgPSBibXNfdW5pb24oRXhl Y0dldEluc2VydGVkQ29scyhyb290cmVsLCBlc3RhdGUpLAorCQkJCQkJCQkgRXhlY0dldFVwZGF0 ZWRDb2xzKHJvb3RyZWwsIGVzdGF0ZSkpOworCQlyZWwgPSByb290cmVsLT5yaV9SZWxhdGlvbkRl c2M7CisJfQorCWVsc2UKKwkJbW9kaWZpZWRDb2xzID0gYm1zX3VuaW9uKEV4ZWNHZXRJbnNlcnRl ZENvbHMocmVzdWx0UmVsSW5mbywgZXN0YXRlKSwKKwkJCQkJCQkJIEV4ZWNHZXRVcGRhdGVkQ29s cyhyZXN1bHRSZWxJbmZvLCBlc3RhdGUpKTsKKworCXZhbF9kZXNjID0gRXhlY0J1aWxkU2xvdFZh bHVlRGVzY3JpcHRpb24oUmVsYXRpb25HZXRSZWxpZChyZWwpLAorCQkJCQkJCQkJCQkgc2xvdCwK KwkJCQkJCQkJCQkJIHR1cGRlc2MsCisJCQkJCQkJCQkJCSBtb2RpZmllZENvbHMsCisJCQkJCQkJ CQkJCSA2NCk7CisJZXJlcG9ydChFUlJPUiwKKwkJCWVycmNvZGUoRVJSQ09ERV9OT1RfTlVMTF9W SU9MQVRJT04pLAorCQkJZXJybXNnKCJudWxsIHZhbHVlIGluIGNvbHVtbiBcIiVzXCIgb2YgcmVs YXRpb24gXCIlc1wiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQiLAorCQkJCQlOYW1lU3Ry KGF0dC0+YXR0bmFtZSksCisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG9yaWdfcmVsKSks CisJCQkJCXZhbF9kZXNjID8gZXJyZGV0YWlsKCJGYWlsaW5nIHJvdyBjb250YWlucyAlcy4iLCB2 YWxfZGVzYykgOiAwLAorCQkJCQllcnJ0YWJsZWNvbChvcmlnX3JlbCwgYXR0ckNoaykpOworfQor CiAvKgogICogRXhlY0NvbnN0cmFpbnRzIC0gY2hlY2sgY29uc3RyYWludHMgb2YgdGhlIHR1cGxl IGluICdzbG90JwogICoKQEAgLTIwNTgsNzMgKzIxODgsNTcgQEAgRXhlY0NvbnN0cmFpbnRzKFJl c3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlv bkdldERlc2NyKHJlbCk7CiAJVHVwbGVDb25zdHIgKmNvbnN0ciA9IHR1cGRlc2MtPmNvbnN0cjsK IAlCaXRtYXBzZXQgICptb2RpZmllZENvbHM7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0OworCWlu dAkJCW5hdHRzOworCWludAkJCWF0dG51bTsKKwlMaXN0IAkJKmFsbF92aXJ0dWFsX25ucyA9IE5J TDsKKwlib29sCQl2aXJ0dWFsX25vdG51bGxfY2hlY2sgPSBmYWxzZTsKIAogCUFzc2VydChjb25z dHIpOwkJCQkvKiB3ZSBzaG91bGQgbm90IGJlIGNhbGxlZCBvdGhlcndpc2UgKi8KKwluYXR0cwk9 IHR1cGRlc2MtPm5hdHRzOwogCiAJaWYgKGNvbnN0ci0+aGFzX25vdF9udWxsKQogCXsKLQkJaW50 CQkJbmF0dHMgPSB0dXBkZXNjLT5uYXR0czsKLQkJaW50CQkJYXR0ckNoazsKLQotCQlmb3IgKGF0 dHJDaGsgPSAxOyBhdHRyQ2hrIDw9IG5hdHRzOyBhdHRyQ2hrKyspCisJCWZvciAoYXR0bnVtID0g MTsgYXR0bnVtIDw9IG5hdHRzOyBhdHRudW0rKykKIAkJewotCQkJRm9ybV9wZ19hdHRyaWJ1dGUg YXR0ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBhdHRyQ2hrIC0gMSk7CisJCQlhdHQgPSBUdXBs ZURlc2NBdHRyKHR1cGRlc2MsIGF0dG51bSAtIDEpOwogCi0JCQlpZiAoYXR0LT5hdHRub3RudWxs ICYmIHNsb3RfYXR0aXNudWxsKHNsb3QsIGF0dHJDaGspKQorCQkJaWYgKGF0dC0+YXR0bm90bnVs bCAmJiBhdHQtPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwpCisJ CQkJYWxsX3ZpcnR1YWxfbm5zID0gbGFwcGVuZF9pbnQoYWxsX3ZpcnR1YWxfbm5zLCBhdHQtPmF0 dG51bSk7CisKKwkJCWlmIChhdHQtPmF0dG5vdG51bGwgJiYgc2xvdF9hdHRpc251bGwoc2xvdCwg YXR0bnVtKSkKIAkJCXsKLQkJCQljaGFyCSAgICp2YWxfZGVzYzsKLQkJCQlSZWxhdGlvbglvcmln X3JlbCA9IHJlbDsKLQkJCQlUdXBsZURlc2MJb3JpZ190dXBkZXNjID0gUmVsYXRpb25HZXREZXNj cihyZWwpOwotCi0JCQkJLyoKLQkJCQkgKiBJZiB0aGUgdHVwbGUgaGFzIGJlZW4gcm91dGVkLCBp dCdzIGJlZW4gY29udmVydGVkIHRvIHRoZQotCQkJCSAqIHBhcnRpdGlvbidzIHJvd3R5cGUsIHdo aWNoIG1pZ2h0IGRpZmZlciBmcm9tIHRoZSByb290Ci0JCQkJICogdGFibGUncy4gIFdlIG11c3Qg Y29udmVydCBpdCBiYWNrIHRvIHRoZSByb290IHRhYmxlJ3MKLQkJCQkgKiByb3d0eXBlIHNvIHRo YXQgdmFsX2Rlc2Mgc2hvd24gZXJyb3IgbWVzc2FnZSBtYXRjaGVzIHRoZQotCQkJCSAqIGlucHV0 IHR1cGxlLgotCQkJCSAqLwotCQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9Sb290UmVzdWx0UmVs SW5mbykKKwkJCQlpZiAoYXR0LT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9W SVJUVUFMKQogCQkJCXsKLQkJCQkJUmVzdWx0UmVsSW5mbyAqcm9vdHJlbCA9IHJlc3VsdFJlbElu Zm8tPnJpX1Jvb3RSZXN1bHRSZWxJbmZvOwotCQkJCQlBdHRyTWFwICAgICptYXA7Ci0KLQkJCQkJ dHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3Iocm9vdHJlbC0+cmlfUmVsYXRpb25EZXNjKTsKLQkJ CQkJLyogYSByZXZlcnNlIG1hcCAqLwotCQkJCQltYXAgPSBidWlsZF9hdHRybWFwX2J5X25hbWVf aWZfcmVxKG9yaWdfdHVwZGVzYywKLQkJCQkJCQkJCQkJCQkgICB0dXBkZXNjLAotCQkJCQkJCQkJ CQkJCSAgIGZhbHNlKTsKLQotCQkJCQkvKgotCQkJCQkgKiBQYXJ0aXRpb24tc3BlY2lmaWMgc2xv dCdzIHR1cGRlc2MgY2FuJ3QgYmUgY2hhbmdlZCwgc28KLQkJCQkJICogYWxsb2NhdGUgYSBuZXcg b25lLgotCQkJCQkgKi8KLQkJCQkJaWYgKG1hcCAhPSBOVUxMKQotCQkJCQkJc2xvdCA9IGV4ZWN1 dGVfYXR0cl9tYXBfc2xvdChtYXAsIHNsb3QsCi0JCQkJCQkJCQkJCQkJIE1ha2VUdXBsZVRhYmxl U2xvdCh0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCkpOwotCQkJCQltb2RpZmllZENvbHMgPSBibXNf dW5pb24oRXhlY0dldEluc2VydGVkQ29scyhyb290cmVsLCBlc3RhdGUpLAotCQkJCQkJCQkJCQkg RXhlY0dldFVwZGF0ZWRDb2xzKHJvb3RyZWwsIGVzdGF0ZSkpOwotCQkJCQlyZWwgPSByb290cmVs LT5yaV9SZWxhdGlvbkRlc2M7CisJCQkJCWlmICghdmlydHVhbF9ub3RudWxsX2NoZWNrKQorCQkJ CQkJdmlydHVhbF9ub3RudWxsX2NoZWNrID0gdHJ1ZTsKKwkJCQkJY29udGludWU7CiAJCQkJfQot CQkJCWVsc2UKLQkJCQkJbW9kaWZpZWRDb2xzID0gYm1zX3VuaW9uKEV4ZWNHZXRJbnNlcnRlZENv bHMocmVzdWx0UmVsSW5mbywgZXN0YXRlKSwKLQkJCQkJCQkJCQkJIEV4ZWNHZXRVcGRhdGVkQ29s cyhyZXN1bHRSZWxJbmZvLCBlc3RhdGUpKTsKLQkJCQl2YWxfZGVzYyA9IEV4ZWNCdWlsZFNsb3RW YWx1ZURlc2NyaXB0aW9uKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwKLQkJCQkJCQkJCQkJCQkJIHNs b3QsCi0JCQkJCQkJCQkJCQkJCSB0dXBkZXNjLAotCQkJCQkJCQkJCQkJCQkgbW9kaWZpZWRDb2xz LAotCQkJCQkJCQkJCQkJCQkgNjQpOwotCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJj b2RlKEVSUkNPREVfTk9UX05VTExfVklPTEFUSU9OKSwKLQkJCQkJCSBlcnJtc2coIm51bGwgdmFs dWUgaW4gY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgdmlvbGF0ZXMgbm90LW51bGwg Y29uc3RyYWludCIsCi0JCQkJCQkJCU5hbWVTdHIoYXR0LT5hdHRuYW1lKSwKLQkJCQkJCQkJUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUob3JpZ19yZWwpKSwKLQkJCQkJCSB2YWxfZGVzYyA/IGVycmRl dGFpbCgiRmFpbGluZyByb3cgY29udGFpbnMgJXMuIiwgdmFsX2Rlc2MpIDogMCwKLQkJCQkJCSBl cnJ0YWJsZWNvbChvcmlnX3JlbCwgYXR0ckNoaykpKTsKKwkJCQlOb3ROdWxsVmlvbGF0aW9uRXJy b3JSZXBvcnQocmVzdWx0UmVsSW5mbywgc2xvdCwgZXN0YXRlLCBhdHRudW0pOwogCQkJfQogCQl9 CiAJfQogCisJLyogY2hlY2sgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIG5vdCBudWxsIGNvbnN0 cmFpbnQgKi8KKwlpZiAodmlydHVhbF9ub3RudWxsX2NoZWNrKQorCXsKKwkJQXNzZXJ0KGNvbnN0 ci0+aGFzX25vdF9udWxsKTsKKwkJQXNzZXJ0KGNvbnN0ci0+aGFzX2dlbmVyYXRlZF92aXJ0dWFs KTsKKwkJQXNzZXJ0KGxpc3RfbGVuZ3RoKGFsbF92aXJ0dWFsX25ucykgPiAwKTsKKworCQlhdHRu dW0gPSAtMTsKKwkJYXR0bnVtID0gRXhlY1JlbENoZWNrR2VuVmlydHVhbE5vdE51bGwocmVzdWx0 UmVsSW5mbywgc2xvdCwgZXN0YXRlLCBhbGxfdmlydHVhbF9ubnMpOworCisJCS8qIGNvbnN0cmFp bnQgZXZhdWxhdGlvbiByZXR1cm4gZmFsc2VtIGRvIGVycm9yIHJlcG9ydCwgYWxzbyBtYWtlIGFu IEFzc2VydCAqLworCQlpZiAoYXR0bnVtID4gMCkKKwkJeworCQkJYXR0ID0gVHVwbGVEZXNjQXR0 cih0dXBkZXNjLCBhdHRudW0gLSAxKTsKKwkJCUFzc2VydChhdHQtPmF0dGdlbmVyYXRlZCA9PSBB VFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwpOworCisJCQlOb3ROdWxsVmlvbGF0aW9uRXJyb3JS ZXBvcnQocmVzdWx0UmVsSW5mbywgc2xvdCwgZXN0YXRlLCBhdHQtPmF0dG51bSk7CisJCX0KKwl9 CisKIAlpZiAocmVsLT5yZF9yZWwtPnJlbGNoZWNrcyA+IDApCiAJewogCQljb25zdCBjaGFyICpm YWlsZWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jIGIv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwppbmRleCBhYmJlMWJiNDVhMy4uN2U5 YTVmNzQxMWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMK KysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwpAQCAtOTg4LDIwICs5ODgs NiBAQCB0cmFuc2Zvcm1Db2x1bW5EZWZpbml0aW9uKENyZWF0ZVN0bXRDb250ZXh0ICpjeHQsIENv bHVtbkRlZiAqY29sdW1uKQogCQkJCQkJCWNvbHVtbi0+Y29sbmFtZSwgY3h0LT5yZWxhdGlvbi0+ cmVsbmFtZSksCiAJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24oY3h0LT5wc3RhdGUsCiAJCQkJCQkJ CQkJY29uc3RyYWludC0+bG9jYXRpb24pKSk7Ci0KLQkJLyoKLQkJICogVE9ETzogU3RyYWlnaHRm b3J3YXJkIG5vdC1udWxsIGNvbnN0cmFpbnRzIHdvbid0IHdvcmsgb24gdmlydHVhbAotCQkgKiBn ZW5lcmF0ZWQgY29sdW1ucywgYmVjYXVzZSB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBleHBhbmRp bmcgdGhlCi0JCSAqIGNvbHVtbiB3aGVuIHRoZSBjb25zdHJhaW50IGlzIGNoZWNrZWQuICBNYXli ZSB3ZSBjb3VsZCBjb252ZXJ0IHRoZQotCQkgKiBub3QtbnVsbCBjb25zdHJhaW50IGludG8gYSBm dWxsIGNoZWNrIGNvbnN0cmFpbnQsIHNvIHRoYXQgdGhlCi0JCSAqIGdlbmVyYXRpb24gZXhwcmVz c2lvbiBjYW4gYmUgZXhwYW5kZWQgYXQgY2hlY2sgdGltZS4KLQkJICovCi0JCWlmIChjb2x1bW4t PmlzX25vdF9udWxsICYmIGNvbHVtbi0+Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURf VklSVFVBTCkKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIGVycm1zZygibm90LW51bGwgY29uc3RyYWludHMgYXJl IG5vdCBzdXBwb3J0ZWQgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyIpLAotCQkJCQkgcGFy c2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLAotCQkJCQkJCQkJCWNvbnN0cmFpbnQtPmxvY2F0 aW9uKSkpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVj dXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCAwZDJmZmFiZGE2 OC4uNDA2M2VkNjhmNWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtMjIwLDYgKzIyMCwx MCBAQCBleHRlcm4gUmVzdWx0UmVsSW5mbyAqRXhlY0dldFRyaWdnZXJSZXN1bHRSZWwoRVN0YXRl ICplc3RhdGUsIE9pZCByZWxpZCwKIGV4dGVybiBMaXN0ICpFeGVjR2V0QW5jZXN0b3JSZXN1bHRS ZWxzKEVTdGF0ZSAqZXN0YXRlLCBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvKTsKIGV4dGVy biB2b2lkIEV4ZWNDb25zdHJhaW50cyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJ CQkJCVR1cGxlVGFibGVTbG90ICpzbG90LCBFU3RhdGUgKmVzdGF0ZSk7CitleHRlcm4gaW50IEV4 ZWNSZWxDaGVja0dlblZpcnR1YWxOb3ROdWxsKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8s CisJCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJCSBFU3RhdGUgKmVz dGF0ZSwKKwkJCQkJCQkJCQkgTGlzdCAqYWxsX3ZpcnR1YWxfbm5zKTsKIGV4dGVybiBib29sIEV4 ZWNQYXJ0aXRpb25DaGVjayhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCQkJCSAg IFR1cGxlVGFibGVTbG90ICpzbG90LCBFU3RhdGUgKmVzdGF0ZSwgYm9vbCBlbWl0RXJyb3IpOwog ZXh0ZXJuIHZvaWQgRXhlY1BhcnRpdGlvbkNoZWNrRW1pdEVycm9yKFJlc3VsdFJlbEluZm8gKnJl c3VsdFJlbEluZm8sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDU3NWIwYjFiZDI0Li4zNmI0YjQ5 N2EyZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTU0OSw2ICs1NDksOCBAQCB0eXBlZGVmIHN0 cnVjdCBSZXN1bHRSZWxJbmZvCiAJLyogYXJyYXkgb2YgY29uc3RyYWludC1jaGVja2luZyBleHBy IHN0YXRlcyAqLwogCUV4cHJTdGF0ZSAqKnJpX0NvbnN0cmFpbnRFeHByczsKIAorCS8qIGFycmF5 IG9mIHZpcnR1YWwgZ2VuZXJhdGVkIG5vdCBudWxsIGNvbnN0cmFpbnQtY2hlY2tpbmcgZXhwciBz dGF0ZXMgKi8KKwlFeHByU3RhdGUgKipyaV9HZW5lcmF0ZWROb3ROdWxsRXhwcnM7CiAJLyoKIAkg KiBBcnJheXMgb2Ygc3RvcmVkIGdlbmVyYXRlZCBjb2x1bW5zIEV4cHJTdGF0ZXMgZm9yIElOU0VS VC9VUERBVEUvTUVSR0UuCiAJICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2Vu ZXJhdGVkX3ZpcnR1YWwub3V0CmluZGV4IGRjMDljODU5MzhlLi4zYjU3MjM1OTlmMSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQKQEAgLTY2 NCwyOCArNjY0LDY4IEBAIElOU0VSVCBJTlRPIGd0ZXN0MjBjIFZBTFVFUyAoMSk7ICAtLSBvawog SU5TRVJUIElOVE8gZ3Rlc3QyMGMgVkFMVUVTIChOVUxMKTsgIC0tIGZhaWxzCiBFUlJPUjogIG5l dyByb3cgZm9yIHJlbGF0aW9uICJndGVzdDIwYyIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAi d2hvbGVfcm93X2NoZWNrIgogREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKG51bGwsIHZp cnR1YWwpLgotLS0gbm90LW51bGwgY29uc3RyYWludHMgKGN1cnJlbnRseSBub3Qgc3VwcG9ydGVk KQogQ1JFQVRFIFRBQkxFIGd0ZXN0MjFhIChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQgR0VORVJB VEVEIEFMV0FZUyBBUyAobnVsbGlmKGEsIDApKSBWSVJUVUFMIE5PVCBOVUxMKTsKLUVSUk9SOiAg bm90LW51bGwgY29uc3RyYWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdmlydHVhbCBnZW5lcmF0 ZWQgY29sdW1ucwotTElORSAxOiAuLi4gYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAobnVsbGlm KGEsIDApKSBWSVJUVUFMIE5PVCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0tLUlOU0VSVCBJTlRPIGd0ZXN0MjFh IChhKSBWQUxVRVMgKDEpOyAgLS0gb2sKLS0tSU5TRVJUIElOVE8gZ3Rlc3QyMWEgKGEpIFZBTFVF UyAoMCk7ICAtLSB2aW9sYXRlcyBjb25zdHJhaW50CitJTlNFUlQgSU5UTyBndGVzdDIxYSAoYSkg VkFMVUVTICgxKTsgIC0tIG9rCitJTlNFUlQgSU5UTyBndGVzdDIxYSAoYSkgVkFMVUVTICgwKTsg IC0tIHZpb2xhdGVzIGNvbnN0cmFpbnQKK0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gImIi IG9mIHJlbGF0aW9uICJndGVzdDIxYSIgdmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludAorREVU QUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKDAsIHZpcnR1YWwpLgogLS0gYWxzbyBjaGVjayB3 aXRoIHRhYmxlIGNvbnN0cmFpbnQgc3ludGF4Ci1DUkVBVEUgVEFCTEUgZ3Rlc3QyMWF4IChhIGlu dCBQUklNQVJZIEtFWSwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAobnVsbGlmKGEsIDApKSBW SVJUVUFMLCBDT05TVFJBSU5UIGNjIE5PVCBOVUxMIGIpOyAgLS0gZXJyb3IKLUVSUk9SOiAgbm90 LW51bGwgY29uc3RyYWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdmlydHVhbCBnZW5lcmF0ZWQg Y29sdW1ucworQ1JFQVRFIFRBQkxFIGd0ZXN0MjFheCAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50 IEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51bGxpZihhLCAwKSkgVklSVFVBTCwgQ09OU1RSQUlOVCBj YyBOT1QgTlVMTCBiKTsKK0lOU0VSVCBJTlRPIGd0ZXN0MjFheCAoYSkgVkFMVUVTICgwKTsgIC0t IHZpb2xhdGVzIGNvbnN0cmFpbnQKK0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gImIiIG9m IHJlbGF0aW9uICJndGVzdDIxYXgiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQKK0RFVEFJ TDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgwLCB2aXJ0dWFsKS4KK0lOU0VSVCBJTlRPIGd0ZXN0 MjFheCAoYSkgVkFMVUVTICgxKTsgIC0tb2sKKy0tIFNFVCBFWFBSRVNTSU9OIHN1cHBvcnQgbm90 IG51bGwgY29uc3RyYWludAorQUxURVIgVEFCTEUgZ3Rlc3QyMWF4IEFMVEVSIENPTFVNTiBiIFNF VCBFWFBSRVNTSU9OIEFTIChudWxsaWYoYSwgMSkpOyAtLWVycm9yCitFUlJPUjogIGNvbHVtbiAi YiIgb2YgcmVsYXRpb24gImd0ZXN0MjFheCIgY29udGFpbnMgbnVsbCB2YWx1ZXMKK0RST1AgVEFC TEUgZ3Rlc3QyMWF4OwogQ1JFQVRFIFRBQkxFIGd0ZXN0MjFheCAoYSBpbnQgUFJJTUFSWSBLRVks IGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51bGxpZihhLCAwKSkgVklSVFVBTCk7Ci1BTFRF UiBUQUJMRSBndGVzdDIxYXggQUREIENPTlNUUkFJTlQgY2MgTk9UIE5VTEwgYjsgIC0tIGVycm9y Ci1FUlJPUjogIG5vdC1udWxsIGNvbnN0cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHZpcnR1 YWwgZ2VuZXJhdGVkIGNvbHVtbnMKK0FMVEVSIFRBQkxFIGd0ZXN0MjFheCBBREQgQ09OU1RSQUlO VCBjYyBOT1QgTlVMTCBiOworSU5TRVJUIElOVE8gZ3Rlc3QyMWF4IChhKSBWQUxVRVMgKDApOyAg LS0gdmlvbGF0ZXMgY29uc3RyYWludAorRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiAiYiIg b2YgcmVsYXRpb24gImd0ZXN0MjFheCIgdmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludAorREVU QUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKDAsIHZpcnR1YWwpLgogRFJPUCBUQUJMRSBndGVz dDIxYXg7Ci1DUkVBVEUgVEFCTEUgZ3Rlc3QyMWIgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCBH RU5FUkFURUQgQUxXQVlTIEFTIChudWxsaWYoYSwgMCkpIFZJUlRVQUwpOworQ1JFQVRFIFRBQkxF IGd0ZXN0MjFiIChhIGludCwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAobnVsbGlmKGEsIDAp KSBWSVJUVUFMKTsKIEFMVEVSIFRBQkxFIGd0ZXN0MjFiIEFMVEVSIENPTFVNTiBiIFNFVCBOT1Qg TlVMTDsKLUVSUk9SOiAgbm90LW51bGwgY29uc3RyYWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24g dmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucwotREVUQUlMOiAgQ29sdW1uICJiIiBvZiByZWxhdGlv biAiZ3Rlc3QyMWIiIGlzIGEgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uLgotLS1JTlNFUlQgSU5U TyBndGVzdDIxYiAoYSkgVkFMVUVTICgxKTsgIC0tIG9rCi0tLUlOU0VSVCBJTlRPIGd0ZXN0MjFi IChhKSBWQUxVRVMgKDApOyAgLS0gdmlvbGF0ZXMgY29uc3RyYWludAorSU5TRVJUIElOVE8gZ3Rl c3QyMWIgKGEpIFZBTFVFUyAoMSk7ICAtLSBvaworSU5TRVJUIElOVE8gZ3Rlc3QyMWIgKGEpIFZB TFVFUyAoMiksICgwKTsgIC0tIHZpb2xhdGVzIGNvbnN0cmFpbnQKK0VSUk9SOiAgbnVsbCB2YWx1 ZSBpbiBjb2x1bW4gImIiIG9mIHJlbGF0aW9uICJndGVzdDIxYiIgdmlvbGF0ZXMgbm90LW51bGwg Y29uc3RyYWludAorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKDAsIHZpcnR1YWwpLgor SU5TRVJUIElOVE8gZ3Rlc3QyMWIgKGEpIFZBTFVFUyAoTlVMTCk7ICAtLSBlcnJvcgorRVJST1I6 ICBudWxsIHZhbHVlIGluIGNvbHVtbiAiYiIgb2YgcmVsYXRpb24gImd0ZXN0MjFiIiB2aW9sYXRl cyBub3QtbnVsbCBjb25zdHJhaW50CitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAobnVs bCwgdmlydHVhbCkuCiBBTFRFUiBUQUJMRSBndGVzdDIxYiBBTFRFUiBDT0xVTU4gYiBEUk9QIE5P VCBOVUxMOwotLS1JTlNFUlQgSU5UTyBndGVzdDIxYiAoYSkgVkFMVUVTICgwKTsgIC0tIG9rIG5v dworSU5TRVJUIElOVE8gZ3Rlc3QyMWIgKGEpIFZBTFVFUyAoMCk7ICAtLSBvayBub3cKKy0tbm90 IG51bGwgY29uc3RyYWludCB3aXRoIHBhcnRpdGlvbmVkIHRhYmxlIGNhc2UuCitDUkVBVEUgVEFC TEUgZ3Rlc3Rubl9wYXJlbnQoZjEgaW50LCBmMiBiaWdpbnQsIGYzIGJpZ2ludCBHRU5FUkFURUQg QUxXQVlTIEFTIChudWxsaWYoZjEsIDEpICsgbnVsbGlmKGYyLCAxMCkpIFZJUlRVQUwgbm90IG51 bGwpIFBBUlRJVElPTiBCWSBSQU5HRSAoZjEpOworQ1JFQVRFIFRBQkxFIGd0ZXN0bm5fY2hpbGQg UEFSVElUSU9OIE9GIGd0ZXN0bm5fcGFyZW50IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDUpOwor Q1JFQVRFIFRBQkxFIGd0ZXN0bm5fY2hpbGRkZWYgUEFSVElUSU9OIE9GIGd0ZXN0bm5fcGFyZW50 IGRlZmF1bHQ7CistLWNoZWNrIHRoZSBlcnJvciBtZXNzYWdlLgorSU5TRVJUIElOVE8gZ3Rlc3Ru bl9wYXJlbnQgVkFMVUVTICgyLCAyLCBkZWZhdWx0KSwgKDMsIDUsIGRlZmF1bHQpLCAoMTQsIDEy LCBkZWZhdWx0KTsKK0lOU0VSVCBJTlRPIGd0ZXN0bm5fcGFyZW50IFZBTFVFUyAoMSwgMiwgZGVm YXVsdCk7IC0tZXJyb3IKK0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gImYzIiBvZiByZWxh dGlvbiAiZ3Rlc3Rubl9jaGlsZCIgdmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludAorREVUQUlM OiAgRmFpbGluZyByb3cgY29udGFpbnMgKDEsIDIsIHZpcnR1YWwpLgorSU5TRVJUIElOVE8gZ3Rl c3Rubl9wYXJlbnQgVkFMVUVTICgyLCAxMCwgZGVmYXVsdCk7IC0tZXJyb3IKK0VSUk9SOiAgbnVs bCB2YWx1ZSBpbiBjb2x1bW4gImYzIiBvZiByZWxhdGlvbiAiZ3Rlc3Rubl9jaGlsZCIgdmlvbGF0 ZXMgbm90LW51bGwgY29uc3RyYWludAorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKDIs IDEwLCB2aXJ0dWFsKS4KK0FMVEVSIFRBQkxFIGd0ZXN0bm5fcGFyZW50IEFMVEVSIENPTFVNTiBm MyBTRVQgRVhQUkVTU0lPTiBBUyAobnVsbGlmKGYxLCAyKSArIG51bGxpZihmMiwgMTEpKTsgLS1l cnJvcgorRVJST1I6ICBjb2x1bW4gImYzIiBvZiByZWxhdGlvbiAiZ3Rlc3Rubl9jaGlsZCIgY29u dGFpbnMgbnVsbCB2YWx1ZXMKK0lOU0VSVCBJTlRPIGd0ZXN0bm5fcGFyZW50IFZBTFVFUyAoMTAs IDExLCBkZWZhdWx0KTsgLS1lcnJvcgorc2VsZWN0ICogZnJvbSBndGVzdG5uX3BhcmVudDsKKyBm MSB8IGYyIHwgZjMgCistLS0tKy0tLS0rLS0tLQorICAyIHwgIDIgfCAgNAorICAzIHwgIDUgfCAg OAorIDE0IHwgMTIgfCAyNgorIDEwIHwgMTEgfCAyMQorKDQgcm93cykKKworLS10ZXN0IEFMVEVS IFRBQkxFIEFERCBDT0xVTU4uCitBTFRFUiBUQUJMRSBndGVzdG5uX3BhcmVudCBBREQgQ09MVU1O IGMgaW50IE5PVCBOVUxMIEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51bGxpZihmMSwgMTQpICsgbnVs bGlmKGYyLCAxMCkpIFZJUlRVQUw7IC0tZXJyb3IKK0VSUk9SOiAgY29sdW1uICJjIiBvZiByZWxh dGlvbiAiZ3Rlc3Rubl9jaGlsZGRlZiIgY29udGFpbnMgbnVsbCB2YWx1ZXMKK0FMVEVSIFRBQkxF IGd0ZXN0bm5fcGFyZW50IEFERCBDT0xVTU4gYyBpbnQgTk9UIE5VTEwgR0VORVJBVEVEIEFMV0FZ UyBBUyAobnVsbGlmKGYxLCAxMykgKyBudWxsaWYoZjIsIDUpKSBWSVJUVUFMOyAtLWVycm9yCitF UlJPUjogIGNvbHVtbiAiYyIgb2YgcmVsYXRpb24gImd0ZXN0bm5fY2hpbGQiIGNvbnRhaW5zIG51 bGwgdmFsdWVzCitBTFRFUiBUQUJMRSBndGVzdG5uX3BhcmVudCBBREQgQ09MVU1OIGMgaW50IE5P VCBOVUxMIEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51bGxpZihmMSwgNCkgKyBudWxsaWYoZjIsIDYp KSBWSVJUVUFMOyAtLW9rCiAtLSBpbmRleCBjb25zdHJhaW50cwogQ1JFQVRFIFRBQkxFIGd0ZXN0 MjJhIChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSAvIDIp IFZJUlRVQUwgVU5JUVVFKTsKIEVSUk9SOiAgdW5pcXVlIGNvbnN0cmFpbnRzIG9uIHZpcnR1YWwg Z2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQKQEAgLTY5Myw3ICs3MzMsNyBAQCBF UlJPUjogIHVuaXF1ZSBjb25zdHJhaW50cyBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGFy ZSBub3Qgc3VwcG9ydGVkCiAtLUlOU0VSVCBJTlRPIGd0ZXN0MjJhIFZBTFVFUyAoMyk7CiAtLUlO U0VSVCBJTlRPIGd0ZXN0MjJhIFZBTFVFUyAoNCk7CiBDUkVBVEUgVEFCTEUgZ3Rlc3QyMmIgKGEg aW50LCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChhIC8gMikgVklSVFVBTCwgUFJJTUFSWSBL RVkgKGEsIGIpKTsKLUVSUk9SOiAgbm90LW51bGwgY29uc3RyYWludHMgYXJlIG5vdCBzdXBwb3J0 ZWQgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucworRVJST1I6ICBwcmltYXJ5IGtleSBvbiB2 aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkCiAtLUlOU0VSVCBJTlRP IGd0ZXN0MjJiIFZBTFVFUyAoMik7CiAtLUlOU0VSVCBJTlRPIGd0ZXN0MjJiIFZBTFVFUyAoMik7 CiAtLSBpbmRleGVzCkBAIC03MzgsNyArNzc4LDcgQEAgRVJST1I6ICBmb3JlaWduIGtleSBjb25z dHJhaW50cyBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkCiAt LURST1AgVEFCTEUgZ3Rlc3QyM2I7CiAtLURST1AgVEFCTEUgZ3Rlc3QyM2E7CiBDUkVBVEUgVEFC TEUgZ3Rlc3QyM3AgKHggaW50LCB5IGludCBHRU5FUkFURUQgQUxXQVlTIEFTICh4ICogMikgVklS VFVBTCwgUFJJTUFSWSBLRVkgKHkpKTsKLUVSUk9SOiAgbm90LW51bGwgY29uc3RyYWludHMgYXJl IG5vdCBzdXBwb3J0ZWQgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucworRVJST1I6ICBwcmlt YXJ5IGtleSBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkCiAt LUlOU0VSVCBJTlRPIGd0ZXN0MjNwIFZBTFVFUyAoMSksICgyKSwgKDMpOwogQ1JFQVRFIFRBQkxF IGd0ZXN0MjNxIChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQgUkVGRVJFTkNFUyBndGVzdDIzcCAo eSkpOwogRVJST1I6ICByZWxhdGlvbiAiZ3Rlc3QyM3AiIGRvZXMgbm90IGV4aXN0CkBAIC0xMDI5 LDcgKzEwNjksNyBAQCBDUkVBVEUgVEFCTEUgZ3Rlc3QyNyAoCiAgICAgYiBpbnQsCiAgICAgeCBp bnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoKGEgKyBiKSAqIDIpIFZJUlRVQUwKICk7Ci1JTlNFUlQg SU5UTyBndGVzdDI3IChhLCBiKSBWQUxVRVMgKDMsIDcpLCAoNCwgMTEpOworSU5TRVJUIElOVE8g Z3Rlc3QyNyAoYSwgYikgVkFMVUVTICgzLCA3KSwgKDQsIDExKSwgKE5VTEwsIE5VTEwpOwogQUxU RVIgVEFCTEUgZ3Rlc3QyNyBBTFRFUiBDT0xVTU4gYSBUWVBFIHRleHQ7ICAtLSBlcnJvcgogRVJS T1I6ICBjYW5ub3QgYWx0ZXIgdHlwZSBvZiBhIGNvbHVtbiB1c2VkIGJ5IGEgZ2VuZXJhdGVkIGNv bHVtbgogREVUQUlMOiAgQ29sdW1uICJhIiBpcyB1c2VkIGJ5IGdlbmVyYXRlZCBjb2x1bW4gIngi LgpAQCAtMTA0Nyw3ICsxMDg3LDggQEAgU0VMRUNUICogRlJPTSBndGVzdDI3OwogLS0tKy0tLS0r LS0tLQogIDMgfCAgNyB8IDIwCiAgNCB8IDExIHwgMzAKLSgyIHJvd3MpCisgICB8ICAgIHwgICAK KygzIHJvd3MpCiAKIEFMVEVSIFRBQkxFIGd0ZXN0MjcgQUxURVIgQ09MVU1OIHggVFlQRSBib29s ZWFuIFVTSU5HIHggPD4gMDsgIC0tIGVycm9yCiBFUlJPUjogIGNhbm5vdCBzcGVjaWZ5IFVTSU5H IHdoZW4gYWx0ZXJpbmcgdHlwZSBvZiBnZW5lcmF0ZWQgY29sdW1uCkBAIC0xMDU2LDYgKzEwOTcs MTQgQEAgTElORSAxOiBBTFRFUiBUQUJMRSBndGVzdDI3IEFMVEVSIENPTFVNTiB4IFRZUEUgYm9v bGVhbiBVU0lORyB4IDw+IDAuLi4KIERFVEFJTDogIENvbHVtbiAieCIgaXMgYSBnZW5lcmF0ZWQg Y29sdW1uLgogQUxURVIgVEFCTEUgZ3Rlc3QyNyBBTFRFUiBDT0xVTU4geCBEUk9QIERFRkFVTFQ7 ICAtLSBlcnJvcgogRVJST1I6ICBjb2x1bW4gIngiIG9mIHJlbGF0aW9uICJndGVzdDI3IiBpcyBh IGdlbmVyYXRlZCBjb2x1bW4KKy0tbm90IG51bGwgZXJyb3IgdmlvbGF0aW9uCitBTFRFUiBUQUJM RSBndGVzdDI3CisgIERST1AgQ09MVU1OIHgsCisgIEFMVEVSIENPTFVNTiBhIFRZUEUgYmlnaW50 LAorICBBTFRFUiBDT0xVTU4gYiBUWVBFIGJpZ2ludCwKKyAgQUREIENPTFVNTiB4IGJpZ2ludCBH RU5FUkFURUQgQUxXQVlTIEFTICgoYSArIGIpICogMikgVklSVFVBTCBOT1QgTlVMTDsKK0VSUk9S OiAgY29sdW1uICJ4IiBvZiByZWxhdGlvbiAiZ3Rlc3QyNyIgY29udGFpbnMgbnVsbCB2YWx1ZXMK K0RFTEVURSBGUk9NIGd0ZXN0MjcgV0hFUkUgYSBJUyBOVUxMIEFORCBiIElTIE5VTEw7CiAtLSBJ dCdzIHBvc3NpYmxlIHRvIGFsdGVyIHRoZSBjb2x1bW4gdHlwZXMgdGhpcyB3YXk6CiBBTFRFUiBU QUJMRSBndGVzdDI3CiAgIERST1AgQ09MVU1OIHgsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5l cmF0ZWRfdmlydHVhbC5zcWwKaW5kZXggZGFiOGM5MmVmOTkuLjQ4NWUyYTMxN2ZlIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsCkBAIC0zMzUsMjMgKzMzNSw0 NiBAQCBBTFRFUiBUQUJMRSBndGVzdDIwYyBBREQgQ09OU1RSQUlOVCB3aG9sZV9yb3dfY2hlY2sg Q0hFQ0sgKGd0ZXN0MjBjIElTIE5PVCBOVUxMKQogSU5TRVJUIElOVE8gZ3Rlc3QyMGMgVkFMVUVT ICgxKTsgIC0tIG9rCiBJTlNFUlQgSU5UTyBndGVzdDIwYyBWQUxVRVMgKE5VTEwpOyAgLS0gZmFp bHMKIAotLS0gbm90LW51bGwgY29uc3RyYWludHMgKGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkKQog Q1JFQVRFIFRBQkxFIGd0ZXN0MjFhIChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQgR0VORVJBVEVE IEFMV0FZUyBBUyAobnVsbGlmKGEsIDApKSBWSVJUVUFMIE5PVCBOVUxMKTsKLS0tSU5TRVJUIElO VE8gZ3Rlc3QyMWEgKGEpIFZBTFVFUyAoMSk7ICAtLSBvawotLS1JTlNFUlQgSU5UTyBndGVzdDIx YSAoYSkgVkFMVUVTICgwKTsgIC0tIHZpb2xhdGVzIGNvbnN0cmFpbnQKK0lOU0VSVCBJTlRPIGd0 ZXN0MjFhIChhKSBWQUxVRVMgKDEpOyAgLS0gb2sKK0lOU0VSVCBJTlRPIGd0ZXN0MjFhIChhKSBW QUxVRVMgKDApOyAgLS0gdmlvbGF0ZXMgY29uc3RyYWludAogCiAtLSBhbHNvIGNoZWNrIHdpdGgg dGFibGUgY29uc3RyYWludCBzeW50YXgKLUNSRUFURSBUQUJMRSBndGVzdDIxYXggKGEgaW50IFBS SU1BUlkgS0VZLCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChudWxsaWYoYSwgMCkpIFZJUlRV QUwsIENPTlNUUkFJTlQgY2MgTk9UIE5VTEwgYik7ICAtLSBlcnJvcgorQ1JFQVRFIFRBQkxFIGd0 ZXN0MjFheCAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51 bGxpZihhLCAwKSkgVklSVFVBTCwgQ09OU1RSQUlOVCBjYyBOT1QgTlVMTCBiKTsKK0lOU0VSVCBJ TlRPIGd0ZXN0MjFheCAoYSkgVkFMVUVTICgwKTsgIC0tIHZpb2xhdGVzIGNvbnN0cmFpbnQKK0lO U0VSVCBJTlRPIGd0ZXN0MjFheCAoYSkgVkFMVUVTICgxKTsgIC0tb2sKKy0tIFNFVCBFWFBSRVNT SU9OIHN1cHBvcnQgbm90IG51bGwgY29uc3RyYWludAorQUxURVIgVEFCTEUgZ3Rlc3QyMWF4IEFM VEVSIENPTFVNTiBiIFNFVCBFWFBSRVNTSU9OIEFTIChudWxsaWYoYSwgMSkpOyAtLWVycm9yCitE Uk9QIFRBQkxFIGd0ZXN0MjFheDsKKwogQ1JFQVRFIFRBQkxFIGd0ZXN0MjFheCAoYSBpbnQgUFJJ TUFSWSBLRVksIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51bGxpZihhLCAwKSkgVklSVFVB TCk7Ci1BTFRFUiBUQUJMRSBndGVzdDIxYXggQUREIENPTlNUUkFJTlQgY2MgTk9UIE5VTEwgYjsg IC0tIGVycm9yCitBTFRFUiBUQUJMRSBndGVzdDIxYXggQUREIENPTlNUUkFJTlQgY2MgTk9UIE5V TEwgYjsKK0lOU0VSVCBJTlRPIGd0ZXN0MjFheCAoYSkgVkFMVUVTICgwKTsgIC0tIHZpb2xhdGVz IGNvbnN0cmFpbnQKIERST1AgVEFCTEUgZ3Rlc3QyMWF4OwogCi1DUkVBVEUgVEFCTEUgZ3Rlc3Qy MWIgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChudWxsaWYo YSwgMCkpIFZJUlRVQUwpOworQ1JFQVRFIFRBQkxFIGd0ZXN0MjFiIChhIGludCwgYiBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyAobnVsbGlmKGEsIDApKSBWSVJUVUFMKTsKIEFMVEVSIFRBQkxFIGd0 ZXN0MjFiIEFMVEVSIENPTFVNTiBiIFNFVCBOT1QgTlVMTDsKLS0tSU5TRVJUIElOVE8gZ3Rlc3Qy MWIgKGEpIFZBTFVFUyAoMSk7ICAtLSBvawotLS1JTlNFUlQgSU5UTyBndGVzdDIxYiAoYSkgVkFM VUVTICgwKTsgIC0tIHZpb2xhdGVzIGNvbnN0cmFpbnQKK0lOU0VSVCBJTlRPIGd0ZXN0MjFiIChh KSBWQUxVRVMgKDEpOyAgLS0gb2sKK0lOU0VSVCBJTlRPIGd0ZXN0MjFiIChhKSBWQUxVRVMgKDIp LCAoMCk7ICAtLSB2aW9sYXRlcyBjb25zdHJhaW50CitJTlNFUlQgSU5UTyBndGVzdDIxYiAoYSkg VkFMVUVTIChOVUxMKTsgIC0tIGVycm9yCiBBTFRFUiBUQUJMRSBndGVzdDIxYiBBTFRFUiBDT0xV TU4gYiBEUk9QIE5PVCBOVUxMOwotLS1JTlNFUlQgSU5UTyBndGVzdDIxYiAoYSkgVkFMVUVTICgw KTsgIC0tIG9rIG5vdworSU5TRVJUIElOVE8gZ3Rlc3QyMWIgKGEpIFZBTFVFUyAoMCk7ICAtLSBv ayBub3cKKworLS1ub3QgbnVsbCBjb25zdHJhaW50IHdpdGggcGFydGl0aW9uZWQgdGFibGUgY2Fz ZS4KK0NSRUFURSBUQUJMRSBndGVzdG5uX3BhcmVudChmMSBpbnQsIGYyIGJpZ2ludCwgZjMgYmln aW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51bGxpZihmMSwgMSkgKyBudWxsaWYoZjIsIDEwKSkg VklSVFVBTCBub3QgbnVsbCkgUEFSVElUSU9OIEJZIFJBTkdFIChmMSk7CitDUkVBVEUgVEFCTEUg Z3Rlc3Rubl9jaGlsZCBQQVJUSVRJT04gT0YgZ3Rlc3Rubl9wYXJlbnQgRk9SIFZBTFVFUyBGUk9N ICgxKSBUTyAoNSk7CitDUkVBVEUgVEFCTEUgZ3Rlc3Rubl9jaGlsZGRlZiBQQVJUSVRJT04gT0Yg Z3Rlc3Rubl9wYXJlbnQgZGVmYXVsdDsKKy0tY2hlY2sgdGhlIGVycm9yIG1lc3NhZ2UuCitJTlNF UlQgSU5UTyBndGVzdG5uX3BhcmVudCBWQUxVRVMgKDIsIDIsIGRlZmF1bHQpLCAoMywgNSwgZGVm YXVsdCksICgxNCwgMTIsIGRlZmF1bHQpOworSU5TRVJUIElOVE8gZ3Rlc3Rubl9wYXJlbnQgVkFM VUVTICgxLCAyLCBkZWZhdWx0KTsgLS1lcnJvcgorSU5TRVJUIElOVE8gZ3Rlc3Rubl9wYXJlbnQg VkFMVUVTICgyLCAxMCwgZGVmYXVsdCk7IC0tZXJyb3IKK0FMVEVSIFRBQkxFIGd0ZXN0bm5fcGFy ZW50IEFMVEVSIENPTFVNTiBmMyBTRVQgRVhQUkVTU0lPTiBBUyAobnVsbGlmKGYxLCAyKSArIG51 bGxpZihmMiwgMTEpKTsgLS1lcnJvcgorSU5TRVJUIElOVE8gZ3Rlc3Rubl9wYXJlbnQgVkFMVUVT ICgxMCwgMTEsIGRlZmF1bHQpOyAtLWVycm9yCitzZWxlY3QgKiBmcm9tIGd0ZXN0bm5fcGFyZW50 OworLS10ZXN0IEFMVEVSIFRBQkxFIEFERCBDT0xVTU4uCitBTFRFUiBUQUJMRSBndGVzdG5uX3Bh cmVudCBBREQgQ09MVU1OIGMgaW50IE5PVCBOVUxMIEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51bGxp ZihmMSwgMTQpICsgbnVsbGlmKGYyLCAxMCkpIFZJUlRVQUw7IC0tZXJyb3IKK0FMVEVSIFRBQkxF IGd0ZXN0bm5fcGFyZW50IEFERCBDT0xVTU4gYyBpbnQgTk9UIE5VTEwgR0VORVJBVEVEIEFMV0FZ UyBBUyAobnVsbGlmKGYxLCAxMykgKyBudWxsaWYoZjIsIDUpKSBWSVJUVUFMOyAtLWVycm9yCitB TFRFUiBUQUJMRSBndGVzdG5uX3BhcmVudCBBREQgQ09MVU1OIGMgaW50IE5PVCBOVUxMIEdFTkVS QVRFRCBBTFdBWVMgQVMgKG51bGxpZihmMSwgNCkgKyBudWxsaWYoZjIsIDYpKSBWSVJUVUFMOyAt LW9rCiAKIC0tIGluZGV4IGNvbnN0cmFpbnRzCiBDUkVBVEUgVEFCTEUgZ3Rlc3QyMmEgKGEgaW50 IFBSSU1BUlkgS0VZLCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChhIC8gMikgVklSVFVBTCBV TklRVUUpOwpAQCAtNTI0LDEzICs1NDcsMjAgQEAgQ1JFQVRFIFRBQkxFIGd0ZXN0MjcgKAogICAg IGIgaW50LAogICAgIHggaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKChhICsgYikgKiAyKSBWSVJU VUFMCiApOwotSU5TRVJUIElOVE8gZ3Rlc3QyNyAoYSwgYikgVkFMVUVTICgzLCA3KSwgKDQsIDEx KTsKK0lOU0VSVCBJTlRPIGd0ZXN0MjcgKGEsIGIpIFZBTFVFUyAoMywgNyksICg0LCAxMSksIChO VUxMLCBOVUxMKTsKIEFMVEVSIFRBQkxFIGd0ZXN0MjcgQUxURVIgQ09MVU1OIGEgVFlQRSB0ZXh0 OyAgLS0gZXJyb3IKIEFMVEVSIFRBQkxFIGd0ZXN0MjcgQUxURVIgQ09MVU1OIHggVFlQRSBudW1l cmljOwogXGQgZ3Rlc3QyNwogU0VMRUNUICogRlJPTSBndGVzdDI3OwogQUxURVIgVEFCTEUgZ3Rl c3QyNyBBTFRFUiBDT0xVTU4geCBUWVBFIGJvb2xlYW4gVVNJTkcgeCA8PiAwOyAgLS0gZXJyb3IK IEFMVEVSIFRBQkxFIGd0ZXN0MjcgQUxURVIgQ09MVU1OIHggRFJPUCBERUZBVUxUOyAgLS0gZXJy b3IKKy0tbm90IG51bGwgZXJyb3IgdmlvbGF0aW9uCitBTFRFUiBUQUJMRSBndGVzdDI3CisgIERS T1AgQ09MVU1OIHgsCisgIEFMVEVSIENPTFVNTiBhIFRZUEUgYmlnaW50LAorICBBTFRFUiBDT0xV TU4gYiBUWVBFIGJpZ2ludCwKKyAgQUREIENPTFVNTiB4IGJpZ2ludCBHRU5FUkFURUQgQUxXQVlT IEFTICgoYSArIGIpICogMikgVklSVFVBTCBOT1QgTlVMTDsKK0RFTEVURSBGUk9NIGd0ZXN0Mjcg V0hFUkUgYSBJUyBOVUxMIEFORCBiIElTIE5VTEw7CiAtLSBJdCdzIHBvc3NpYmxlIHRvIGFsdGVy IHRoZSBjb2x1bW4gdHlwZXMgdGhpcyB3YXk6CiBBTFRFUiBUQUJMRSBndGVzdDI3CiAgIERST1Ag Q09MVU1OIHgsCi0tIAoyLjM0LjEKCg== --00000000000042976e0630386172--