From 002f91bfbcc5eb6b9ff6fcc5727998e43ea28f89 Mon Sep 17 00:00:00 2001 From: Tristan Menzel Date: Wed, 19 Feb 2025 21:16:37 -0800 Subject: [PATCH] refactor: Defer evaulation of function bodies until after contract metadata has been gathered --- package.json | 3 +- .../ast-visitors/constructor-visitor.ts | 41 +- .../ast-visitors/contract-method-visitor.ts | 48 +- .../ast-visitors/contract-visitor.ts | 90 +- .../ast-visitors/decorator-visitor.ts | 8 +- .../ast-visitors/function-visitor.ts | 14 +- .../ast-visitors/logic-sig-program-visitor.ts | 22 +- .../ast-visitors/logic-sig-visitor.ts | 49 +- .../ast-visitors/source-file-visitor.ts | 43 +- src/awst_build/ast-visitors/struct-visitor.ts | 10 +- .../ast-visitors/subroutine-visitor.ts | 24 +- src/awst_build/ast-visitors/util.ts | 12 + src/awst_build/context/awst-build-context.ts | 10 +- src/awst_build/eb/arc4/util.ts | 9 +- src/awst_build/eb/contract-builder.ts | 6 - src/awst_build/index.ts | 12 +- src/awst_build/lib/index.ts | 12 +- src/awst_build/models/contract-class-model.ts | 16 +- src/errors.ts | 8 - src/logger/index.ts | 21 +- src/visitor/visitor.ts | 11 +- tests/approvals/arc4-method-selector.algo.ts | 22 + tests/approvals/inheritance-b.algo.ts | 3 +- .../AbiDecorators.approval.0.ssa.ir | 5 + .../ContractOne.approval.teal | 55 + .../ContractOne.arc32.json | 63 + .../ContractOne.arc56.json | 120 + .../ContractOne.clear.teal | 7 + .../ContractOne.approval.0.ssa.ir | 71 + .../ContractOne.approval.1.ssa.array.ir | 40 + .../ContractOne.approval.2.ssa.slot.ir | 40 + .../ContractOne.ir/ContractOne.clear.0.ssa.ir | 3 + .../ContractOne.clear.1.ssa.array.ir | 3 + .../ContractOne.clear.2.ssa.slot.ir | 3 + .../ContractTwo.approval.teal | 53 + .../ContractTwo.arc32.json | 63 + .../ContractTwo.arc56.json | 120 + .../ContractTwo.clear.teal | 7 + .../ContractTwo.approval.0.ssa.ir | 68 + .../ContractTwo.approval.1.ssa.array.ir | 39 + .../ContractTwo.approval.2.ssa.slot.ir | 39 + .../ContractTwo.ir/ContractTwo.clear.0.ssa.ir | 3 + .../ContractTwo.clear.1.ssa.array.ir | 3 + .../ContractTwo.clear.2.ssa.slot.ir | 3 + .../TestContract.approval.0.ssa.ir | 5 + .../ConcreteArc4Contract.approval.teal | 24 +- .../ConcreteArc4Contract.arc32.json | 8 +- .../ConcreteArc4Contract.arc56.json | 21 +- .../ConcreteArc4Contract.approval.0.ssa.ir | 20 +- ...ncreteArc4Contract.approval.1.ssa.array.ir | 36 +- ...oncreteArc4Contract.approval.2.ssa.slot.ir | 36 +- .../ItxnDemoContract.approval.0.ssa.ir | 9 +- .../BaseOne.ir/BaseOne.approval.0.ssa.ir | 21 +- .../BaseTwo.ir/BaseTwo.approval.0.ssa.ir | 17 +- .../CommonBase.approval.0.ssa.ir | 9 +- .../MultiBases.approval.0.ssa.ir | 51 +- .../Hello.ir/Hello.approval.0.ssa.ir | 5 + .../HelloTemplate.approval.0.ssa.ir | 17 +- ...elloTemplateCustomPrefix.approval.0.ssa.ir | 17 +- .../BaseWithState.approval.0.ssa.ir | 9 +- .../ExtendsSubWithTotals.approval.0.ssa.ir | 9 +- ...bClassWithExplicitTotals.approval.0.ssa.ir | 9 +- .../SubClassWithState.approval.0.ssa.ir | 9 +- .../SubContract.approval.0.ssa.ir | 5 + .../SubSubContract.approval.0.ssa.ir | 5 + .../SubSubSubContract.approval.0.ssa.ir | 5 + .../SuperContract.approval.0.ssa.ir | 5 + .../AbiDecorators.approval.0.ssa.ir | 5 + .../ContractOne.approval.teal | 55 + .../ContractOne.arc32.json | 63 + .../ContractOne.arc56.json | 120 + .../ContractOne.clear.teal | 7 + .../ContractOne.approval.0.ssa.ir | 71 + .../ContractOne.approval.1.ssa.array.ir | 40 + .../ContractOne.approval.2.ssa.slot.ir | 40 + .../ContractOne.ir/ContractOne.clear.0.ssa.ir | 3 + .../ContractOne.clear.1.ssa.array.ir | 3 + .../ContractOne.clear.2.ssa.slot.ir | 3 + .../ContractTwo.approval.teal | 53 + .../ContractTwo.arc32.json | 63 + .../ContractTwo.arc56.json | 120 + .../ContractTwo.clear.teal | 7 + .../ContractTwo.approval.0.ssa.ir | 68 + .../ContractTwo.approval.1.ssa.array.ir | 39 + .../ContractTwo.approval.2.ssa.slot.ir | 39 + .../ContractTwo.ir/ContractTwo.clear.0.ssa.ir | 3 + .../ContractTwo.clear.1.ssa.array.ir | 3 + .../ContractTwo.clear.2.ssa.slot.ir | 3 + .../TestContract.approval.0.ssa.ir | 5 + .../ConcreteArc4Contract.approval.teal | 24 +- .../ConcreteArc4Contract.arc32.json | 8 +- .../ConcreteArc4Contract.arc56.json | 21 +- .../ConcreteArc4Contract.approval.0.ssa.ir | 20 +- ...ncreteArc4Contract.approval.1.ssa.array.ir | 36 +- ...oncreteArc4Contract.approval.2.ssa.slot.ir | 36 +- .../ItxnDemoContract.approval.0.ssa.ir | 9 +- .../BaseOne.ir/BaseOne.approval.0.ssa.ir | 21 +- .../BaseTwo.ir/BaseTwo.approval.0.ssa.ir | 17 +- .../CommonBase.approval.0.ssa.ir | 9 +- .../MultiBases.approval.0.ssa.ir | 51 +- .../Hello.ir/Hello.approval.0.ssa.ir | 5 + .../HelloTemplate.approval.0.ssa.ir | 17 +- ...elloTemplateCustomPrefix.approval.0.ssa.ir | 17 +- .../BaseWithState.approval.0.ssa.ir | 9 +- .../ExtendsSubWithTotals.approval.0.ssa.ir | 9 +- ...bClassWithExplicitTotals.approval.0.ssa.ir | 9 +- .../SubClassWithState.approval.0.ssa.ir | 9 +- .../SubContract.approval.0.ssa.ir | 5 + .../SubSubContract.approval.0.ssa.ir | 5 + .../SubSubSubContract.approval.0.ssa.ir | 5 + .../SuperContract.approval.0.ssa.ir | 5 + .../AbiDecorators.approval.teal | 4 + .../abi-decorators/AbiDecorators.arc32.json | 2 +- .../abi-decorators/AbiDecorators.arc56.json | 2 +- .../AbiDecorators.approval.0.ssa.ir | 5 + .../AbiDecorators.approval.1.ssa.array.ir | 4 + .../AbiDecorators.approval.2.ssa.slot.ir | 4 + .../abi-decorators/abi-decorators.awst | 6 +- .../abi-decorators/abi-decorators.awst.json | 52 +- .../ContractOne.approval.teal | 128 + .../ContractOne.arc32.json | 63 + .../ContractOne.arc56.json | 120 + .../ContractOne.clear.teal | 7 + .../ContractOne.approval.0.ssa.ir | 71 + .../ContractOne.approval.1.ssa.array.ir | 75 + .../ContractOne.approval.2.ssa.slot.ir | 75 + .../ContractOne.ir/ContractOne.clear.0.ssa.ir | 3 + .../ContractOne.clear.1.ssa.array.ir | 3 + .../ContractOne.clear.2.ssa.slot.ir | 3 + .../ContractTwo.approval.teal | 117 + .../ContractTwo.arc32.json | 63 + .../ContractTwo.arc56.json | 120 + .../ContractTwo.clear.teal | 7 + .../ContractTwo.approval.0.ssa.ir | 68 + .../ContractTwo.approval.1.ssa.array.ir | 72 + .../ContractTwo.approval.2.ssa.slot.ir | 72 + .../ContractTwo.ir/ContractTwo.clear.0.ssa.ir | 3 + .../ContractTwo.clear.1.ssa.array.ir | 3 + .../ContractTwo.clear.2.ssa.slot.ir | 3 + .../arc4-method-selector.awst | 53 + .../arc4-method-selector.awst.json | 778 ++++++ .../global-state/TestContract.approval.teal | 4 + .../TestContract.approval.0.ssa.ir | 5 + .../TestContract.approval.1.ssa.array.ir | 4 + .../TestContract.approval.2.ssa.slot.ir | 4 + .../global-state/global-state.awst | 6 +- .../global-state/global-state.awst.json | 52 +- .../ConcreteArc4Contract.approval.teal | 63 +- .../ConcreteArc4Contract.arc32.json | 8 +- .../ConcreteArc4Contract.arc56.json | 21 +- .../ConcreteArc4Contract.approval.0.ssa.ir | 20 +- ...ncreteArc4Contract.approval.1.ssa.array.ir | 65 +- ...oncreteArc4Contract.approval.2.ssa.slot.ir | 65 +- .../inheritance-b/inheritance-b.awst | 14 + .../inheritance-b/inheritance-b.awst.json | 381 ++- .../itxn/ItxnDemoContract.approval.teal | 14 +- .../itxn/ItxnDemoContract.arc32.json | 2 +- .../itxn/ItxnDemoContract.arc56.json | 4 +- .../ItxnDemoContract.approval.0.ssa.ir | 9 +- .../ItxnDemoContract.approval.1.ssa.array.ir | 10 +- .../ItxnDemoContract.approval.2.ssa.slot.ir | 10 +- .../approvals/out/unoptimized/itxn/itxn.awst | 8 +- .../out/unoptimized/itxn/itxn.awst.json | 104 +- .../multi-inheritance/BaseOne.approval.teal | 40 +- .../multi-inheritance/BaseOne.arc32.json | 2 +- .../multi-inheritance/BaseOne.arc56.json | 4 +- .../BaseOne.ir/BaseOne.approval.0.ssa.ir | 21 +- .../BaseOne.approval.1.ssa.array.ir | 24 +- .../BaseOne.ir/BaseOne.approval.2.ssa.slot.ir | 24 +- .../multi-inheritance/BaseTwo.approval.teal | 30 +- .../multi-inheritance/BaseTwo.arc32.json | 2 +- .../multi-inheritance/BaseTwo.arc56.json | 4 +- .../BaseTwo.ir/BaseTwo.approval.0.ssa.ir | 17 +- .../BaseTwo.approval.1.ssa.array.ir | 20 +- .../BaseTwo.ir/BaseTwo.approval.2.ssa.slot.ir | 20 +- .../CommonBase.approval.teal | 14 +- .../multi-inheritance/CommonBase.arc32.json | 2 +- .../multi-inheritance/CommonBase.arc56.json | 4 +- .../CommonBase.approval.0.ssa.ir | 9 +- .../CommonBase.approval.1.ssa.array.ir | 10 +- .../CommonBase.approval.2.ssa.slot.ir | 10 +- .../MultiBases.approval.teal | 94 +- .../multi-inheritance/MultiBases.arc32.json | 2 +- .../multi-inheritance/MultiBases.arc56.json | 4 +- .../MultiBases.approval.0.ssa.ir | 51 +- .../MultiBases.approval.1.ssa.array.ir | 52 +- .../MultiBases.approval.2.ssa.slot.ir | 52 +- .../multi-inheritance/multi-inheritance.awst | 102 +- .../multi-inheritance.awst.json | 2154 +++++++++-------- .../precompiled-apps/Hello.approval.teal | 4 + .../precompiled-apps/Hello.arc32.json | 2 +- .../precompiled-apps/Hello.arc56.json | 2 +- .../Hello.ir/Hello.approval.0.ssa.ir | 5 + .../Hello.ir/Hello.approval.1.ssa.array.ir | 4 + .../Hello.ir/Hello.approval.2.ssa.slot.ir | 4 + .../HelloTemplate.approval.teal | 34 +- .../precompiled-apps/HelloTemplate.arc32.json | 2 +- .../precompiled-apps/HelloTemplate.arc56.json | 6 +- .../HelloTemplate.approval.0.ssa.ir | 17 +- .../HelloTemplate.approval.1.ssa.array.ir | 16 +- .../HelloTemplate.approval.2.ssa.slot.ir | 16 +- .../HelloTemplateCustomPrefix.approval.teal | 34 +- .../HelloTemplateCustomPrefix.arc32.json | 2 +- .../HelloTemplateCustomPrefix.arc56.json | 6 +- ...elloTemplateCustomPrefix.approval.0.ssa.ir | 17 +- ...mplateCustomPrefix.approval.1.ssa.array.ir | 16 +- ...emplateCustomPrefix.approval.2.ssa.slot.ir | 16 +- .../precompiled-apps/precompiled-apps.awst | 42 +- .../precompiled-apps.awst.json | 882 ++++--- .../HelloFactory.approval.teal | 4 +- .../HelloFactory.arc32.json | 2 +- .../HelloFactory.arc56.json | 4 +- .../HelloFactory.approval.1.ssa.array.ir | 4 +- .../HelloFactory.approval.2.ssa.slot.ir | 4 +- .../state-totals/BaseWithState.approval.teal | 14 +- .../state-totals/BaseWithState.arc32.json | 2 +- .../state-totals/BaseWithState.arc56.json | 4 +- .../BaseWithState.approval.0.ssa.ir | 9 +- .../BaseWithState.approval.1.ssa.array.ir | 10 +- .../BaseWithState.approval.2.ssa.slot.ir | 10 +- .../ExtendsSubWithTotals.approval.teal | 14 +- .../ExtendsSubWithTotals.arc32.json | 2 +- .../ExtendsSubWithTotals.arc56.json | 4 +- .../ExtendsSubWithTotals.approval.0.ssa.ir | 9 +- ...tendsSubWithTotals.approval.1.ssa.array.ir | 12 +- ...xtendsSubWithTotals.approval.2.ssa.slot.ir | 12 +- .../SubClassWithExplicitTotals.approval.teal | 14 +- .../SubClassWithExplicitTotals.arc32.json | 2 +- .../SubClassWithExplicitTotals.arc56.json | 4 +- ...bClassWithExplicitTotals.approval.0.ssa.ir | 9 +- ...WithExplicitTotals.approval.1.ssa.array.ir | 12 +- ...sWithExplicitTotals.approval.2.ssa.slot.ir | 12 +- .../SubClassWithState.approval.teal | 14 +- .../state-totals/SubClassWithState.arc32.json | 2 +- .../state-totals/SubClassWithState.arc56.json | 4 +- .../SubClassWithState.approval.0.ssa.ir | 9 +- .../SubClassWithState.approval.1.ssa.array.ir | 12 +- .../SubClassWithState.approval.2.ssa.slot.ir | 12 +- .../state-totals/state-totals.awst | 32 +- .../state-totals/state-totals.awst.json | 416 +++- .../super-calls/SubContract.approval.teal | 4 + .../SubContract.approval.0.ssa.ir | 5 + .../SubContract.approval.1.ssa.array.ir | 4 + .../SubContract.approval.2.ssa.slot.ir | 4 + .../super-calls/SubSubContract.approval.teal | 4 + .../SubSubContract.approval.0.ssa.ir | 5 + .../SubSubContract.approval.1.ssa.array.ir | 4 + .../SubSubContract.approval.2.ssa.slot.ir | 4 + .../SubSubSubContract.approval.teal | 4 + .../SubSubSubContract.approval.0.ssa.ir | 5 + .../SubSubSubContract.approval.1.ssa.array.ir | 4 + .../SubSubSubContract.approval.2.ssa.slot.ir | 4 + .../super-calls/SuperContract.approval.teal | 4 + .../SuperContract.approval.0.ssa.ir | 5 + .../SuperContract.approval.1.ssa.array.ir | 4 + .../SuperContract.approval.2.ssa.slot.ir | 4 + .../unoptimized/super-calls/super-calls.awst | 72 +- .../super-calls/super-calls.awst.json | 1510 +++++++----- .../arc4-method-selector.algo.ts | 27 + 259 files changed, 8734 insertions(+), 3185 deletions(-) create mode 100644 tests/approvals/arc4-method-selector.algo.ts create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractOne.approval.teal create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractOne.arc32.json create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractOne.arc56.json create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractOne.clear.teal create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractTwo.approval.teal create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractTwo.arc32.json create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractTwo.arc56.json create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractTwo.clear.teal create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir create mode 100644 tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractOne.approval.teal create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractOne.arc32.json create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractOne.arc56.json create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractOne.clear.teal create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractTwo.approval.teal create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractTwo.arc32.json create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractTwo.arc56.json create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractTwo.clear.teal create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir create mode 100644 tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.approval.teal create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.arc32.json create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.arc56.json create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.clear.teal create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.approval.teal create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.arc32.json create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.arc56.json create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.clear.teal create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/arc4-method-selector.awst create mode 100644 tests/approvals/out/unoptimized/arc4-method-selector/arc4-method-selector.awst.json create mode 100644 tests/expected-output/arc4-method-selector.algo.ts diff --git a/package.json b/package.json index 8b3f0417a..7eb1ff07a 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "dev:examples": "tsx src/cli.ts build examples --output-awst --output-awst-json", "dev:approvals": "tsx src/cli.ts build tests/approvals --dry-run", "dev:expected-output": "tsx src/cli.ts build tests/expected-output --dry-run", - "dev:testing": "tsx src/cli.ts build tests/approvals/native-arrays.algo.ts tests/approvals/mutable-arrays.algo.ts --output-awst --output-awst-json --output-ssa-ir --log-level=info --out-dir out/unoptimized/[name] --optimization-level=1", + "dev:testing": "tsx src/cli.ts build tests/approvals/arc4-method-selector.algo.ts --output-awst --output-awst-json --output-ssa-ir --log-level=info --out-dir out/unoptimized/[name] --optimization-level=1", + "dev:testing2": "tsx src/cli.ts build tests/expected-output/null-values.algo.ts --output-awst --output-awst-json --output-ssa-ir --log-level=info --out-dir out/unoptimized/[name] --optimization-level=1", "audit": "better-npm-audit audit", "format": "prettier --write .", "lint": "eslint \"src/**/*.ts\"", diff --git a/src/awst_build/ast-visitors/constructor-visitor.ts b/src/awst_build/ast-visitors/constructor-visitor.ts index 38c6a76ad..cabf0a676 100644 --- a/src/awst_build/ast-visitors/constructor-visitor.ts +++ b/src/awst_build/ast-visitors/constructor-visitor.ts @@ -2,12 +2,12 @@ import ts from 'typescript' import type { ContractReference } from '../../awst/models' import { nodeFactory } from '../../awst/node-factory' import * as awst from '../../awst/nodes' -import { AwstBuildFailureError } from '../../errors' +import { logger } from '../../logger' import { codeInvariant, invariant } from '../../util' -import { AwstBuildContext } from '../context/awst-build-context' import type { ContractClassPType } from '../ptypes' import { voidPType } from '../ptypes' import { ContractMethodBaseVisitor } from './contract-method-visitor' +import { visitInChildContext } from './util' export interface ConstructorInfo { propertyInitializerStatements: awst.Statement[] @@ -15,43 +15,37 @@ export interface ConstructorInfo { } export class ConstructorVisitor extends ContractMethodBaseVisitor { - private readonly _result: awst.ContractMethod private _foundSuperCall = false - private readonly _propertyInitializerStatements: awst.Statement[] - constructor(node: ts.ConstructorDeclaration, contractType: ContractClassPType, contractInfo: ConstructorInfo) { + constructor( + node: ts.ConstructorDeclaration, + contractType: ContractClassPType, + private readonly contractInfo: ConstructorInfo, + ) { super(node, contractType) - this._propertyInitializerStatements = contractInfo.propertyInitializerStatements - const sourceLocation = this.sourceLocation(node) - - const { args, body, documentation } = this.buildFunctionAwst(node) + } - this._result = new awst.ContractMethod({ + get result() { + const sourceLocation = this.sourceLocation(this.node) + const { args, body, documentation } = this.buildFunctionAwst() + return new awst.ContractMethod({ arc4MethodConfig: null, memberName: this._functionType.name, sourceLocation, args, returnType: voidPType.wtype, body, - cref: contractInfo.cref, + cref: this.contractInfo.cref, documentation, inline: null, }) } - get result() { - return this._result - } - public static buildConstructor( node: ts.ConstructorDeclaration, contractType: ContractClassPType, constructorMethodInfo: ConstructorInfo, ) { - return AwstBuildContext.current.runInChildContext(() => { - const result = new ConstructorVisitor(node, contractType, constructorMethodInfo).result - invariant(result instanceof awst.ContractMethod, "result must be ContractMethod'") - return result - }) + return visitInChildContext(this, node, contractType, constructorMethodInfo) } visitBlock(node: ts.Block): awst.Block { @@ -71,13 +65,14 @@ export class ConstructorVisitor extends ContractMethodBaseVisitor { sourceLocation: this.sourceLocation(s), }, ...(Array.isArray(statement) ? statement : [statement]), - ...this._propertyInitializerStatements, + ...this.contractInfo.propertyInitializerStatements, ) } return statement } catch (e) { - if (e instanceof AwstBuildFailureError) return [] - throw e + invariant(e instanceof Error, 'Only errors should be thrown') + logger.error(e) + return [] } }), ) diff --git a/src/awst_build/ast-visitors/contract-method-visitor.ts b/src/awst_build/ast-visitors/contract-method-visitor.ts index ec5e5f818..4b5dfa335 100644 --- a/src/awst_build/ast-visitors/contract-method-visitor.ts +++ b/src/awst_build/ast-visitors/contract-method-visitor.ts @@ -1,7 +1,7 @@ import type ts from 'typescript' import { ContractReference, OnCompletionAction } from '../../awst/models' import { nodeFactory } from '../../awst/node-factory' -import type { ABIMethodArgConstantDefault, ABIMethodArgMemberDefault } from '../../awst/nodes' +import type { ABIMethodArgConstantDefault, ABIMethodArgMemberDefault, ARC4MethodConfig } from '../../awst/nodes' import * as awst from '../../awst/nodes' import { ARC4ABIMethodConfig, ARC4BareMethodConfig, ARC4CreateOption } from '../../awst/nodes' import type { SourceLocation } from '../../awst/source-location' @@ -9,7 +9,6 @@ import { Constants } from '../../constants' import { CodeError } from '../../errors' import { logger } from '../../logger' import { codeInvariant, invariant, isIn } from '../../util' -import { AwstBuildContext } from '../context/awst-build-context' import type { NodeBuilder } from '../eb' import { ContractSuperBuilder, ContractThisBuilder } from '../eb/contract-builder' import { requireExpressionOfType } from '../eb/util' @@ -18,6 +17,7 @@ import type { ContractClassPType, FunctionPType } from '../ptypes' import { GlobalStateType, LocalStateType } from '../ptypes' import { DecoratorVisitor } from './decorator-visitor' import { FunctionVisitor } from './function-visitor' +import { visitInChildContext } from './util' export class ContractMethodBaseVisitor extends FunctionVisitor { protected readonly _contractType: ContractClassPType @@ -41,15 +41,18 @@ export class ContractMethodBaseVisitor extends FunctionVisitor { } export class ContractMethodVisitor extends ContractMethodBaseVisitor { - private readonly _result: awst.ContractMethod + private readonly metaData: { + cref: ContractReference + arc4MethodConfig: ARC4MethodConfig | null + sourceLocation: SourceLocation + } constructor(node: ts.MethodDeclaration, contractType: ContractClassPType) { super(node, contractType) const sourceLocation = this.sourceLocation(node) - const { args, body, documentation } = this.buildFunctionAwst(node) - const cref = ContractReference.fromPType(this._contractType) const decorator = DecoratorVisitor.buildContractMethodData(node) + const cref = ContractReference.fromPType(this._contractType) const modifiers = this.parseMemberModifiers(node) @@ -60,25 +63,38 @@ export class ContractMethodVisitor extends ContractMethodBaseVisitor { methodLocation: sourceLocation, }) - this._result = new awst.ContractMethod({ - arc4MethodConfig: arc4MethodConfig ?? null, - memberName: this._functionType.name, + if (arc4MethodConfig) + this.context.addArc4Config({ + contractReference: cref, + sourceLocation, + arc4MethodConfig, + memberName: this._functionType.name, + }) + this.metaData = { + arc4MethodConfig, + cref, sourceLocation, + } + } + + get result() { + const { args, body, documentation } = this.buildFunctionAwst() + + return new awst.ContractMethod({ + arc4MethodConfig: this.metaData.arc4MethodConfig, + memberName: this._functionType.name, + sourceLocation: this.metaData.sourceLocation, args, returnType: this._functionType.returnType.wtypeOrThrow, body, - cref, + cref: this.metaData.cref, documentation, inline: null, }) } - get result() { - return this._result - } - - public static buildContractMethod(node: ts.MethodDeclaration, contractType: ContractClassPType): awst.ContractMethod { - return AwstBuildContext.current.runInChildContext(() => new ContractMethodVisitor(node, contractType).result) + public static buildContractMethod(node: ts.MethodDeclaration, contractType: ContractClassPType): () => awst.ContractMethod { + return visitInChildContext(this, node, contractType) } private buildArc4Config({ @@ -91,7 +107,7 @@ export class ContractMethodVisitor extends ContractMethodBaseVisitor { decorator: DecoratorData | undefined modifiers: { isPublic: boolean; isStatic: boolean } methodLocation: SourceLocation - }): awst.ContractMethod['arc4MethodConfig'] | null { + }): awst.ARC4MethodConfig | null { const isProgramMethod = isIn(functionType.name, [Constants.approvalProgramMethodName, Constants.clearStateProgramMethodName]) if (decorator && isIn(decorator.type, [Constants.arc4BareDecoratorName, Constants.arc4AbiDecoratorName])) { diff --git a/src/awst_build/ast-visitors/contract-visitor.ts b/src/awst_build/ast-visitors/contract-visitor.ts index 68c5f803e..fb675c665 100644 --- a/src/awst_build/ast-visitors/contract-visitor.ts +++ b/src/awst_build/ast-visitors/contract-visitor.ts @@ -6,7 +6,6 @@ import type { ContractMethod } from '../../awst/nodes' import type { SourceLocation } from '../../awst/source-location' import { wtypes } from '../../awst/wtypes' import { Constants } from '../../constants' -import { AwstBuildFailureError } from '../../errors' import { logger } from '../../logger' import { codeInvariant, invariant } from '../../util' import type { ClassElements } from '../../visitor/syntax-names' @@ -18,21 +17,28 @@ import { GlobalStateFunctionResultBuilder } from '../eb/storage/global-state' import { LocalStateFunctionResultBuilder } from '../eb/storage/local-state' import { requireInstanceBuilder } from '../eb/util' import { ContractClassModel } from '../models/contract-class-model' +import type { ContractOptionsDecoratorData } from '../models/decorator-data' import type { ContractClassPType } from '../ptypes' import { BaseVisitor } from './base-visitor' import { ConstructorVisitor } from './constructor-visitor' import { ContractMethodVisitor } from './contract-method-visitor' import { DecoratorVisitor } from './decorator-visitor' +import { visitInChildContext } from './util' export class ContractVisitor extends BaseVisitor implements Visitor { - private _ctor?: ContractMethod - private _methods: ContractMethod[] = [] - private _approvalProgram: ContractMethod | null = null - private _clearStateProgram: ContractMethod | null = null + private _ctor?: () => ContractMethod + private _methods: Array<() => ContractMethod> = [] private readonly _contractPType: ContractClassPType private readonly _propertyInitialization: awst.Statement[] = [] public accept = (node: TNode) => accept(this, node) + private readonly metaData: { + isAbstract: boolean + contractOptions: ContractOptionsDecoratorData | undefined + sourceLocation: SourceLocation + description: string | null + } + constructor(classDec: ts.ClassDeclaration, ptype: ContractClassPType) { super() const sourceLocation = this.context.getSourceLocation(classDec) @@ -56,23 +62,50 @@ export class ContractVisitor extends BaseVisitor implements Visitor new DecoratorVisitor(modifier).result) } catch (e) { - if (e instanceof AwstBuildFailureError) { - return [] - } - throw e + invariant(e instanceof Error, 'Only errors should be thrown') + logger.error(e) + return [] } }) ?? [] ) diff --git a/src/awst_build/ast-visitors/function-visitor.ts b/src/awst_build/ast-visitors/function-visitor.ts index c9c98f895..499de7ebb 100644 --- a/src/awst_build/ast-visitors/function-visitor.ts +++ b/src/awst_build/ast-visitors/function-visitor.ts @@ -4,7 +4,7 @@ import type * as awst from '../../awst/nodes' import type { Block } from '../../awst/nodes' import { AssignmentExpression, Goto, ReturnStatement } from '../../awst/nodes' import type { SourceLocation } from '../../awst/source-location' -import { AwstBuildFailureError, CodeError, InternalError, NotSupported } from '../../errors' +import { CodeError, InternalError, NotSupported } from '../../errors' import { logger } from '../../logger' import { codeInvariant, enumerate, instanceOfAny, invariant } from '../../util' import type { Statements } from '../../visitor/syntax-names' @@ -26,7 +26,7 @@ import { BaseVisitor } from './base-visitor' import { maybeNodes } from './util' // noinspection JSUnusedGlobalSymbols -export class FunctionVisitor +export abstract class FunctionVisitor extends BaseVisitor implements Visitor, @@ -37,18 +37,19 @@ export class FunctionVisitor protected readonly _functionType: FunctionPType - constructor(node: ts.MethodDeclaration | ts.FunctionDeclaration | ts.ConstructorDeclaration) { + constructor(protected readonly node: ts.MethodDeclaration | ts.FunctionDeclaration | ts.ConstructorDeclaration) { super() const type = this.context.getPTypeForNode(node) invariant(type instanceof FunctionPType, 'type of function must be FunctionPType') this._functionType = type } - protected buildFunctionAwst(node: ts.MethodDeclaration | ts.FunctionDeclaration | ts.ConstructorDeclaration): { + protected buildFunctionAwst(): { args: awst.SubroutineArgument[] documentation: awst.MethodDocumentation body: awst.Block } { + const node = this.node const sourceLocation = this.sourceLocation(node) const args = node.parameters.map((p) => this.accept(p)) @@ -441,8 +442,9 @@ export class FunctionVisitor try { return this.accept(s) } catch (e) { - if (e instanceof AwstBuildFailureError) return [] - throw e + invariant(e instanceof Error, 'Only errors should be thrown') + logger.error(e) + return [] } }), ) diff --git a/src/awst_build/ast-visitors/logic-sig-program-visitor.ts b/src/awst_build/ast-visitors/logic-sig-program-visitor.ts index 0f15f1338..4cacee335 100644 --- a/src/awst_build/ast-visitors/logic-sig-program-visitor.ts +++ b/src/awst_build/ast-visitors/logic-sig-program-visitor.ts @@ -1,17 +1,17 @@ import type ts from 'typescript' import * as awst from '../../awst/nodes' -import { invariant } from '../../util' import { FunctionVisitor } from './function-visitor' +import { visitInChildContext } from './util' export class LogicSigProgramVisitor extends FunctionVisitor { - private readonly _result: awst.Subroutine - constructor(node: ts.MethodDeclaration) { super(node) - const sourceLocation = this.sourceLocation(node) - const { args, body, documentation } = this.buildFunctionAwst(node) + } - this._result = new awst.Subroutine({ + get result() { + const sourceLocation = this.sourceLocation(this.node) + const { args, body, documentation } = this.buildFunctionAwst() + return new awst.Subroutine({ id: this._functionType.fullName, name: this._functionType.name, sourceLocation, @@ -23,13 +23,7 @@ export class LogicSigProgramVisitor extends FunctionVisitor { }) } - get result() { - return this._result - } - - public static buildLogicSigProgram(node: ts.MethodDeclaration): awst.Subroutine { - const result = new LogicSigProgramVisitor(node).result - invariant(result instanceof awst.Subroutine, "result must be Subroutine'") - return result + public static buildLogicSigProgram(node: ts.MethodDeclaration) { + return visitInChildContext(LogicSigProgramVisitor, node) } } diff --git a/src/awst_build/ast-visitors/logic-sig-visitor.ts b/src/awst_build/ast-visitors/logic-sig-visitor.ts index 79cbc526c..780b0a8c1 100644 --- a/src/awst_build/ast-visitors/logic-sig-visitor.ts +++ b/src/awst_build/ast-visitors/logic-sig-visitor.ts @@ -1,15 +1,14 @@ import type ts from 'typescript' -import { LogicSigReference } from '../../awst/models' -import type * as awst from '../../awst/nodes' import type { Subroutine } from '../../awst/nodes' +import type { SourceLocation } from '../../awst/source-location' import { Constants } from '../../constants' -import { AwstBuildFailureError, CodeError } from '../../errors' +import { CodeError } from '../../errors' import { logger } from '../../logger' -import { invariant } from '../../util' +import { codeInvariant, invariant } from '../../util' import type { ClassElements } from '../../visitor/syntax-names' import type { Visitor } from '../../visitor/visitor' import { accept } from '../../visitor/visitor' -import { AwstBuildContext } from '../context/awst-build-context' +import type { LogicSigOptionsDecoratorData } from '../models/decorator-data' import { LogicSigClassModel } from '../models/logic-sig-class-model' import type { LogicSigPType } from '../ptypes' import { boolPType, FunctionPType, uint64PType } from '../ptypes' @@ -17,20 +16,21 @@ import { ptypeIn } from '../ptypes/util' import { BaseVisitor } from './base-visitor' import { DecoratorVisitor } from './decorator-visitor' import { LogicSigProgramVisitor } from './logic-sig-program-visitor' +import { visitInChildContext } from './util' export class LogicSigVisitor extends BaseVisitor implements Visitor { public accept = (node: TNode) => accept(this, node) - private getLogicSig(): [] | [awst.LogicSignature] { - const logicSigClass = this.context.compilationSet.getLogicSig(LogicSigReference.fromPType(this._logicSigPType)) - return [logicSigClass.buildLogicSignature()] - } - static buildLogicSig(classDec: ts.ClassDeclaration, ptype: LogicSigPType) { - return new LogicSigVisitor(classDec, ptype).getLogicSig() + return visitInChildContext(this, classDec, ptype) } - private program: Subroutine | null = null + private program?: () => Subroutine + private readonly metaData: { + description: string | null + options: LogicSigOptionsDecoratorData | undefined + sourceLocation: SourceLocation + } constructor( classDec: ts.ClassDeclaration, @@ -45,27 +45,34 @@ export class LogicSigVisitor extends BaseVisitor implements Visitor LogicSigProgramVisitor.buildLogicSigProgram(node)) + this.program = LogicSigProgramVisitor.buildLogicSigProgram(node) } visitPropertyDeclaration(node: ts.PropertyDeclaration) { this.throwLogicSigNotSupported(node, 'Property declarations') diff --git a/src/awst_build/ast-visitors/source-file-visitor.ts b/src/awst_build/ast-visitors/source-file-visitor.ts index 629fcffb5..aee53f7d5 100644 --- a/src/awst_build/ast-visitors/source-file-visitor.ts +++ b/src/awst_build/ast-visitors/source-file-visitor.ts @@ -1,7 +1,7 @@ import ts from 'typescript' import type * as awst from '../../awst/nodes' -import { AwstBuildFailureError, CodeError } from '../../errors' -import { logger, logPuyaExceptions } from '../../logger' +import { CodeError } from '../../errors' +import { logger, patchErrorLocation } from '../../logger' import { expandMaybeArray, invariant } from '../../util' import type { ModuleStatements } from '../../visitor/syntax-names' import type { Visitor } from '../../visitor/visitor' @@ -28,10 +28,8 @@ export class SourceFileVisitor extends BaseVisitor implements Visitor - logPuyaExceptions(() => this.context.runInChildContext(() => SubroutineVisitor.buildSubroutine(node)), this.sourceLocation(node)) + const sourceLocation = this.sourceLocation(node) + return this.context.runInChildContext(() => patchErrorLocation(SubroutineVisitor.buildSubroutine(node), sourceLocation)) } buildModule(): awst.AWST[] { @@ -68,10 +66,8 @@ export class SourceFileVisitor extends BaseVisitor implements Visitor { - if (ptype instanceof ContractClassPType) { - return () => logPuyaExceptions(() => ContractVisitor.buildContract(node, ptype), sourceLocation) - } else if (ptype instanceof ARC4StructType) { - return () => logPuyaExceptions(() => StructVisitor.buildStructDef(node, ptype), sourceLocation) - } else if (ptype instanceof LogicSigPType) { - return () => logPuyaExceptions(() => LogicSigVisitor.buildLogicSig(node, ptype), sourceLocation) - } else { - logger.warn(sourceLocation, `Ignoring class declaration ${ptype.fullName}`) - return [] - } - }) + + if (ptype instanceof ContractClassPType) { + return patchErrorLocation(ContractVisitor.buildContract(node, ptype), sourceLocation) + } else if (ptype instanceof ARC4StructType) { + return patchErrorLocation(() => StructVisitor.buildStructDef(node, ptype), sourceLocation)() + } else if (ptype instanceof LogicSigPType) { + return patchErrorLocation(LogicSigVisitor.buildLogicSig(node, ptype), sourceLocation) + } else { + logger.warn(sourceLocation, `Ignoring class declaration ${ptype.fullName}`) + return [] + } } } diff --git a/src/awst_build/ast-visitors/struct-visitor.ts b/src/awst_build/ast-visitors/struct-visitor.ts index 968afc748..5bae9fc1d 100644 --- a/src/awst_build/ast-visitors/struct-visitor.ts +++ b/src/awst_build/ast-visitors/struct-visitor.ts @@ -1,5 +1,7 @@ import type ts from 'typescript' -import { AwstBuildFailureError, CodeError } from '../../errors' +import { CodeError } from '../../errors' +import { logger } from '../../logger' +import { invariant } from '../../util' import type { ClassElements } from '../../visitor/syntax-names' import type { Visitor } from '../../visitor/visitor' import { accept } from '../../visitor/visitor' @@ -21,10 +23,8 @@ export class StructVisitor extends BaseVisitor implements Visitor(condition: boolean, ...nodes: T[]): T[] { return condition ? nodes : [] } + +export function visitInChildContext( + Visitor: { new (...args: TVisitorArgs): { result: TVisitorResult } }, + ...args: TVisitorArgs +) { + return AwstBuildContext.current.runInChildContext((deferred) => { + const visitor = new Visitor(...args) + return deferred(() => visitor.result) + }) +} diff --git a/src/awst_build/context/awst-build-context.ts b/src/awst_build/context/awst-build-context.ts index 3025a2130..922531de6 100644 --- a/src/awst_build/context/awst-build-context.ts +++ b/src/awst_build/context/awst-build-context.ts @@ -14,6 +14,7 @@ import type { ContractClassModel } from '../models/contract-class-model' import { CompilationSet } from '../models/contract-class-model' import type { LogicSigClassModel } from '../models/logic-sig-class-model' import type { ContractClassPType, PType } from '../ptypes' +import { arc4BaseContractType, baseContractType } from '../ptypes' import { typeRegistry } from '../type-registry' import { TypeResolver } from '../type-resolver' import { EvaluationContext } from './evaluation-context' @@ -117,13 +118,17 @@ export abstract class AwstBuildContext { return AwstBuildContext.asyncStore.run(ctx, cb) } - runInChildContext(cb: () => R) { + runInChildContext(cb: (deferred: RunDeferred) => R) { const childCtx = this.createChildContext() - return AwstBuildContext.asyncStore.run(childCtx, cb) + const runDeferred: RunDeferred = (action) => () => AwstBuildContext.asyncStore.run(childCtx, action) + + return AwstBuildContext.asyncStore.run(childCtx, () => cb(runDeferred)) } } +type RunDeferred = (action: () => T) => () => T + class AwstBuildContextImpl extends AwstBuildContext { readonly evaluationCtx = new EvaluationContext() readonly switchLoopCtx = new SwitchLoopContext() @@ -168,6 +173,7 @@ class AwstBuildContextImpl extends AwstBuildContext { getArc4Config(contractType: ContractClassPType, memberName: string): ARC4MethodConfig | undefined { for (const ct of [contractType, ...contractType.allBases()]) { + if (ct.equals(baseContractType) || ct.equals(arc4BaseContractType)) continue const contractMethods = this.arc4MethodConfig.get(ct.fullName) invariant(contractMethods, `${ct} has not been visited`) if (contractMethods.has(memberName)) { diff --git a/src/awst_build/eb/arc4/util.ts b/src/awst_build/eb/arc4/util.ts index e22316e68..3f064df9e 100644 --- a/src/awst_build/eb/arc4/util.ts +++ b/src/awst_build/eb/arc4/util.ts @@ -18,7 +18,7 @@ import { methodSelectorFunction, } from '../../ptypes/arc4-types' import { instanceEb } from '../../type-registry' -import { ContractMethodExpressionBuilder } from '../free-subroutine-expression-builder' +import { ContractMethodExpressionBuilder, SubroutineExpressionBuilder } from '../free-subroutine-expression-builder' import type { InstanceBuilder, NodeBuilder } from '../index' import { FunctionBuilder } from '../index' import { requireStringConstant } from '../util' @@ -185,7 +185,12 @@ export class MethodSelectorFunctionBuilder extends FunctionBuilder { let signature: string - if (methodSignature instanceof ContractMethodExpressionBuilder) { + if (methodSignature instanceof SubroutineExpressionBuilder) { + codeInvariant( + methodSignature instanceof ContractMethodExpressionBuilder, + `Expected contract instance method, found ${methodSignature.typeDescription}`, + ) + const methodTarget = methodSignature.target const arc4Config = AwstBuildContext.current.getArc4Config(methodSignature.contractType, methodTarget.memberName) codeInvariant( diff --git a/src/awst_build/eb/contract-builder.ts b/src/awst_build/eb/contract-builder.ts index 05733e33a..c8f2761be 100644 --- a/src/awst_build/eb/contract-builder.ts +++ b/src/awst_build/eb/contract-builder.ts @@ -10,8 +10,6 @@ import { AwstBuildContext } from '../context/awst-build-context' import type { ContractOptionsDecoratorData } from '../models/decorator-data' import type { PType } from '../ptypes' import { - arc4BaseContractType, - baseContractType, ClusteredContractClassType, ContractClassPType, contractOptionsDecorator, @@ -76,10 +74,6 @@ export class ContractSuperBuilder extends ContractThisBuilder { } call(args: ReadonlyArray, typeArgs: ReadonlyArray, sourceLocation: SourceLocation): NodeBuilder { - if (this.ptype.equals(baseContractType) || this.ptype.equals(arc4BaseContractType)) { - // Contract base types have no code to execute so we can just return void - return new VoidExpressionBuilder(nodeFactory.voidConstant({ sourceLocation })) - } codeInvariant(args.length === 0, 'Constructor arguments are not supported', sourceLocation) codeInvariant(typeArgs.length === 0, 'Super calls cannot be generic', sourceLocation) return new VoidExpressionBuilder( diff --git a/src/awst_build/index.ts b/src/awst_build/index.ts index d6af24dc5..3e8384117 100644 --- a/src/awst_build/index.ts +++ b/src/awst_build/index.ts @@ -1,11 +1,10 @@ import { jsonSerializeAwst } from '../awst/json-serialize-awst' import type { AWST } from '../awst/nodes' -import { SourceLocation } from '../awst/source-location' import { ToCodeVisitor } from '../awst/to-code-visitor' import type { AlgoFile, PuyaTsCompileOptions } from '../compile-options' -import { AwstBuildFailureError } from '../errors' import { logger } from '../logger' import type { CreateProgramResult } from '../parser' +import { invariant } from '../util' import { ArtifactKind, writeArtifact } from '../write-artifact' import { SourceFileVisitor } from './ast-visitors/source-file-visitor' import { AwstBuildContext } from './context/awst-build-context' @@ -54,13 +53,8 @@ export function buildAwst({ program, sourceFiles }: CreateProgramResult, options moduleAwst.push(...module) }) } catch (e) { - if (e instanceof AwstBuildFailureError) { - logger.error(SourceLocation.fromFile(sourceFile, program.getCurrentDirectory()), e.message) - } else if (e instanceof Error) { - logger.error(e) - } else { - logger.error(undefined, `Unknown error: ${e}`) - } + invariant(e instanceof Error, 'Only errors should be thrown') + logger.error(e) } } return [moduleAwst, AwstBuildContext.current.compilationSet] diff --git a/src/awst_build/lib/index.ts b/src/awst_build/lib/index.ts index 9206290f1..03706db48 100644 --- a/src/awst_build/lib/index.ts +++ b/src/awst_build/lib/index.ts @@ -15,7 +15,17 @@ export function buildLibAwst() { type: baseContractType, isAbstract: true, propertyInitialization: [], - ctor: null, + ctor: nodeFactory.contractMethod({ + memberName: Constants.constructorMethodName, + cref: baseContractCref, + args: [], + arc4MethodConfig: null, + sourceLocation: SourceLocation.None, + returnType: wtypes.voidWType, + documentation: nodeFactory.methodDocumentation(), + body: nodeFactory.block({ sourceLocation: SourceLocation.None }), + inline: true, + }), methods: [], appState: [], options: undefined, diff --git a/src/awst_build/models/contract-class-model.ts b/src/awst_build/models/contract-class-model.ts index e416a699f..365a25d98 100644 --- a/src/awst_build/models/contract-class-model.ts +++ b/src/awst_build/models/contract-class-model.ts @@ -57,7 +57,7 @@ export class ContractClassModel { let approvalProgram: ContractMethod | null = this.approvalProgram let clearProgram: ContractMethod | null = this.clearProgram const methods: ContractMethod[] = [...this.methods] - if (this.ctor) methods.push(this.ctor) + const ctors: ContractMethod[] = this.ctor ? [this.ctor] : [] const methodResolutionOrder: ContractReference[] = [] let firstBaseWithStateTotals: ContractClassModel | undefined = undefined let reservedScratchSpace = new Set() @@ -86,7 +86,7 @@ export class ContractClassModel { // Maybe need validation?? methods.push(method) } - if (baseClass.ctor) methods.push(baseClass.ctor) + if (baseClass.ctor) ctors.push(baseClass.ctor) } if (this.type.isARC4) { const hasCreate = methods.some((m) => isIn(m.arc4MethodConfig?.create, [ARC4CreateOption.allow, ARC4CreateOption.require])) @@ -130,14 +130,16 @@ export class ContractClassModel { reservedScratchSpace = reservedScratchSpace.union(this.options.scratchSlots) } + const hasSignificantConstructor = ctors.length > 1 + return nodeFactory.contract({ name: this.options?.name ?? this.name, id: this.id, description: this.description, - approvalProgram: ContractClassModel.patchApprovalToCallCtor(approvalProgram, methods), + approvalProgram: hasSignificantConstructor ? ContractClassModel.patchApprovalToCallCtor(approvalProgram, methods) : approvalProgram, clearProgram, methodResolutionOrder, - methods, + methods: [...methods, ...(hasSignificantConstructor ? ctors : [])], appState: this.appState, stateTotals, reservedScratchSpace: reservedScratchSpace, @@ -155,8 +157,6 @@ export class ContractClassModel { } private buildClusteredMetaClass(compilationSet: CompilationSet, clusteredType: ClusteredContractClassType): ContractClassModel { - // Need to inject a constructor in here which calls all extended super constructors - const ctor = nodeFactory.contractMethod({ memberName: Constants.constructorMethodName, cref: ContractReference.fromPType(clusteredType), @@ -211,10 +211,6 @@ export class ContractClassModel { } private static patchApprovalToCallCtor(approval: ContractMethod, methods: ContractMethod[]): ContractMethod { - // Only need to call ctor if there is at least 1 constructor in the inheritance chain - if (methods.every((m) => m.memberName !== Constants.constructorMethodName)) { - return approval - } const callCtorIfNew = nodeFactory.ifElse({ condition: nodeFactory.not({ expr: nodeFactory.reinterpretCast({ diff --git a/src/errors.ts b/src/errors.ts index f6b8ac3a2..72bba9ee1 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -6,14 +6,6 @@ type PuyaErrorOptions = { sourceLocation?: SourceLocation } -/** - * Thrown when the awst visitor cannot return a meaningful value - */ -export class AwstBuildFailureError extends Error { - constructor() { - super('AWST build failure. See previous errors') - } -} export class PuyaError extends Error { readonly sourceLocation: SourceLocation | undefined constructor(message?: string, options?: PuyaErrorOptions) { diff --git a/src/logger/index.ts b/src/logger/index.ts index b1dbdd43d..836464718 100644 --- a/src/logger/index.ts +++ b/src/logger/index.ts @@ -1,6 +1,6 @@ import { AsyncLocalStorage } from 'node:async_hooks' import { SourceLocation } from '../awst/source-location' -import { AwstBuildFailureError, PuyaError, UserError } from '../errors' +import { PuyaError, UserError } from '../errors' import type { LogSink } from './sinks' type NodeOrSourceLocation = SourceLocation | { sourceLocation: SourceLocation } @@ -89,16 +89,19 @@ const tryGetSourceLocationFromError = (error: unknown): SourceLocation | undefin export const logger = new PuyaLogger() -export const logPuyaExceptions = (action: () => T, sourceLocation: SourceLocation): T => { - try { - return action() - } catch (e) { - if (e instanceof PuyaError) { - logger.error(e.sourceLocation ?? sourceLocation, e.message) - } else { +export const patchErrorLocation = ( + action: (...args: TArgs) => TReturn, + sourceLocation: SourceLocation, +) => { + return (...args: TArgs) => { + try { + return action(...args) + } catch (e) { + if (e instanceof PuyaError && !e.sourceLocation) { + Object.assign(e, { sourceLocation }) + } throw e } - throw new AwstBuildFailureError() } } diff --git a/src/visitor/visitor.ts b/src/visitor/visitor.ts index 0f2c0ed49..459095979 100644 --- a/src/visitor/visitor.ts +++ b/src/visitor/visitor.ts @@ -1,7 +1,7 @@ import type ts from 'typescript' import type { AwstBuildContext } from '../awst_build/context/awst-build-context' -import { AwstBuildFailureError } from '../errors' -import { logger, logPuyaExceptions } from '../logger' +import { CodeError } from '../errors' +import { patchErrorLocation } from '../logger' import type { DeliberateAny } from '../typescript-helpers' import type { MapBaseType, SyntaxKindNameType } from './syntax-names' import { getNodeName, SyntaxKindName } from './syntax-names' @@ -43,12 +43,11 @@ export const accept = Object.getPrototypeOf(visitor)[visitFunction].call(visitor, node), sourceLocation) + return patchErrorLocation(() => Object.getPrototypeOf(visitor)[visitFunction].call(visitor, node), sourceLocation)() } else { - logger.error(sourceLocation, `Unsupported syntax visitor ${nodeName}`) + throw new CodeError(`Unsupported syntax visitor ${nodeName}`, { sourceLocation }) } } else { - logger.error(sourceLocation, `Unknown syntax kind ${node.kind}`) + throw new CodeError(`Unknown syntax kind ${node.kind}`, { sourceLocation }) } - throw new AwstBuildFailureError() } diff --git a/tests/approvals/arc4-method-selector.algo.ts b/tests/approvals/arc4-method-selector.algo.ts new file mode 100644 index 000000000..f50042268 --- /dev/null +++ b/tests/approvals/arc4-method-selector.algo.ts @@ -0,0 +1,22 @@ +import { abimethod, Contract, Uint64 } from '@algorandfoundation/algorand-typescript' +import { methodSelector } from '@algorandfoundation/algorand-typescript/arc4' + +class ContractOne extends Contract { + test() { + return methodSelector(ContractTwo.prototype.someMethod) + } + someMethod() { + return someConst + } +} + +class ContractTwo extends Contract { + @abimethod({ name: 'renamedSomeMethod' }) + someMethod() {} + + test() { + return methodSelector(ContractOne.prototype.someMethod) + } +} + +const someConst = Uint64(123) diff --git a/tests/approvals/inheritance-b.algo.ts b/tests/approvals/inheritance-b.algo.ts index 464b28390..43ebd7a5a 100644 --- a/tests/approvals/inheritance-b.algo.ts +++ b/tests/approvals/inheritance-b.algo.ts @@ -1,5 +1,5 @@ import type { uint64 } from '@algorandfoundation/algorand-typescript' -import { log, op, Txn } from '@algorandfoundation/algorand-typescript' +import { GlobalState, log, op, Txn } from '@algorandfoundation/algorand-typescript' import { Arc4Contract, SimpleContract, VERY_IMPORTANT_VALUE } from './inheritance-a.algo' export class ConcreteSimpleContract extends SimpleContract { @@ -12,6 +12,7 @@ export class ConcreteSimpleContract extends SimpleContract { } export class ConcreteArc4Contract extends Arc4Contract { + concreteState = GlobalState({ initialValue: 'testing' }) public getVeryImportantValue() { return VERY_IMPORTANT_VALUE } diff --git a/tests/approvals/out/o1/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir b/tests/approvals/out/o1/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir index 8f6a49274..b02ee5cea 100644 --- a/tests/approvals/out/o1/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir +++ b/tests/approvals/out/o1/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir @@ -104,5 +104,10 @@ subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.methodWithDefau subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "globalValue" 123u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractOne.approval.teal b/tests/approvals/out/o1/arc4-method-selector/ContractOne.approval.teal new file mode 100644 index 000000000..676c8f376 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractOne.approval.teal @@ -0,0 +1,55 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + // tests/approvals/arc4-method-selector.algo.ts:4 + // class ContractOne extends Contract { + txn NumAppArgs + bz main_bare_routing@7 + pushbytess 0x2ad746ef 0xc2e9596e // method "test()byte[]", method "someMethod()uint64" + txna ApplicationArgs 0 + match main_test_route@3 main_someMethod_route@4 + +main_after_if_else@11: + // tests/approvals/arc4-method-selector.algo.ts:4 + // class ContractOne extends Contract { + pushint 0 // 0 + return + +main_someMethod_route@4: + // tests/approvals/arc4-method-selector.algo.ts:8 + // someMethod() { + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + pushbytes 0x151f7c75000000000000007b + log + pushint 1 // 1 + return + +main_test_route@3: + // tests/approvals/arc4-method-selector.algo.ts:5 + // test() { + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + pushbytes 0x151f7c750004438c64f3 + log + pushint 1 // 1 + return + +main_bare_routing@7: + // tests/approvals/arc4-method-selector.algo.ts:4 + // class ContractOne extends Contract { + txn OnCompletion + bnz main_after_if_else@11 + txn ApplicationID + ! + assert // can only call when creating + pushint 1 // 1 + return diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractOne.arc32.json b/tests/approvals/out/o1/arc4-method-selector/ContractOne.arc32.json new file mode 100644 index 000000000..11c3f527b --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractOne.arc32.json @@ -0,0 +1,63 @@ +{ + "hints": { + "test()byte[]": { + "call_config": { + "no_op": "CALL" + } + }, + "someMethod()uint64": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo0CiAgICAvLyBjbGFzcyBDb250cmFjdE9uZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4MmFkNzQ2ZWYgMHhjMmU5NTk2ZSAvLyBtZXRob2QgInRlc3QoKWJ5dGVbXSIsIG1ldGhvZCAic29tZU1ldGhvZCgpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl90ZXN0X3JvdXRlQDMgbWFpbl9zb21lTWV0aG9kX3JvdXRlQDQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjQKICAgIC8vIGNsYXNzIENvbnRyYWN0T25lIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9zb21lTWV0aG9kX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo4CiAgICAvLyBzb21lTWV0aG9kKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDAwN2IKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl90ZXN0X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo1CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDQ0MzhjNjRmMwogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6NAogICAgLy8gY2xhc3MgQ29udHJhY3RPbmUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": {}, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "ContractOne", + "methods": [ + { + "name": "test", + "args": [], + "readonly": false, + "returns": { + "type": "byte[]" + } + }, + { + "name": "someMethod", + "args": [], + "readonly": false, + "returns": { + "type": "uint64" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractOne.arc56.json b/tests/approvals/out/o1/arc4-method-selector/ContractOne.arc56.json new file mode 100644 index 000000000..dffa83aa5 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractOne.arc56.json @@ -0,0 +1,120 @@ +{ + "name": "ContractOne", + "structs": {}, + "methods": [ + { + "name": "test", + "args": [], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "someMethod", + "args": [], + "returns": { + "type": "uint64" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 0, + "bytes": 0 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": {}, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 33, + 58 + ], + "errorMessage": "OnCompletion is not NoOp" + }, + { + "pc": [ + 86 + ], + "errorMessage": "can only call when creating" + }, + { + "pc": [ + 36, + 61 + ], + "errorMessage": "can only call when not creating" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo0CiAgICAvLyBjbGFzcyBDb250cmFjdE9uZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4MmFkNzQ2ZWYgMHhjMmU5NTk2ZSAvLyBtZXRob2QgInRlc3QoKWJ5dGVbXSIsIG1ldGhvZCAic29tZU1ldGhvZCgpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl90ZXN0X3JvdXRlQDMgbWFpbl9zb21lTWV0aG9kX3JvdXRlQDQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjQKICAgIC8vIGNsYXNzIENvbnRyYWN0T25lIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9zb21lTWV0aG9kX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo4CiAgICAvLyBzb21lTWV0aG9kKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDAwN2IKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl90ZXN0X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo1CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDQ0MzhjNjRmMwogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6NAogICAgLy8gY2xhc3MgQ29udHJhY3RPbmUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CjEbQQBIggIEKtdG7wTC6VluNhoAjgIAHAADgQBDMRkURDEYRIAMFR98dQAAAAAAAAB7sIEBQzEZFEQxGESAChUffHUABEOMZPOwgQFDMRlA/8gxGBREgQFD", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 4, + "patch": 0 + } + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractOne.clear.teal b/tests/approvals/out/o1/arc4-method-selector/ContractOne.clear.teal new file mode 100644 index 000000000..a4d580477 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractOne.clear.teal @@ -0,0 +1,7 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir new file mode 100644 index 000000000..cfdd13065 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir @@ -0,0 +1,71 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test()byte[]" => block@2, method "someMethod()uint64" => block@3, * => block@4} + block@2: // test_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/arc4-method-selector.algo.ts::ContractOne.test() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes[8] = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%7#0) + return 1u + block@3: // someMethod_route_L8 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (== tmp%8#0 NoOp) + (assert tmp%9#0) // OnCompletion is not NoOp + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (!= tmp%10#0 0u) + (assert tmp%11#0) // can only call when not creating + let to_encode%1#0: uint64 = tests/approvals/arc4-method-selector.algo.ts::ContractOne.someMethod() + let val_as_bytes%0#0: bytes[8] = (itob to_encode%1#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) + return 1u + block@4: // switch_case_default_L4 + goto block@5 + block@5: // switch_case_next_L4 + goto block@10 + block@6: // bare_routing_L4 + let tmp%13#0: uint64 = (txn OnCompletion) + switch tmp%13#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L4 + let tmp%14#0: uint64 = (txn ApplicationID) + let tmp%15#0: bool = (== tmp%14#0 0u) + (assert tmp%15#0) // can only call when creating + tests/approvals/arc4-method-selector.algo.ts::ContractOne.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L4 + goto block@9 + block@9: // switch_case_next_L4 + goto block@10 + block@10: // after_if_else_L4 + return 0u + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.test() -> bytes: + block@0: // L5 + return method "renamedSomeMethod()void" + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.someMethod() -> uint64: + block@0: // L8 + return 123u + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.__algots__.defaultCreate() -> void: + block@0: // L4 + return \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir new file mode 100644 index 000000000..09258a560 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir @@ -0,0 +1,40 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#1: uint64 = (txn NumAppArgs) + goto tmp%0#1 ? block@2 : block@7 + block@2: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test()byte[]" => block@3, method "someMethod()uint64" => block@4, * => block@11} + block@3: // test_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // can only call when not creating + (log 0x151f7c750004438c64f3) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // someMethod_route_L8 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // OnCompletion is not NoOp + let tmp%10#0: uint64 = (txn ApplicationID) + (assert tmp%10#0) // can only call when not creating + (log 0x151f7c75000000000000007b) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@7: // bare_routing_L4 + let tmp%13#0: uint64 = (txn OnCompletion) + goto tmp%13#0 ? block@11 : block@8 + block@8: // __algots__.defaultCreate_L4 + let tmp%14#0: uint64 = (txn ApplicationID) + let tmp%15#0: bool = (! tmp%14#0) + (assert tmp%15#0) // can only call when creating + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@11: // after_if_else_L4 + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir new file mode 100644 index 000000000..09258a560 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir @@ -0,0 +1,40 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#1: uint64 = (txn NumAppArgs) + goto tmp%0#1 ? block@2 : block@7 + block@2: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test()byte[]" => block@3, method "someMethod()uint64" => block@4, * => block@11} + block@3: // test_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // can only call when not creating + (log 0x151f7c750004438c64f3) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // someMethod_route_L8 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // OnCompletion is not NoOp + let tmp%10#0: uint64 = (txn ApplicationID) + (assert tmp%10#0) // can only call when not creating + (log 0x151f7c75000000000000007b) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@7: // bare_routing_L4 + let tmp%13#0: uint64 = (txn OnCompletion) + goto tmp%13#0 ? block@11 : block@8 + block@8: // __algots__.defaultCreate_L4 + let tmp%14#0: uint64 = (txn ApplicationID) + let tmp%15#0: bool = (! tmp%14#0) + (assert tmp%15#0) // can only call when creating + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@11: // after_if_else_L4 + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractTwo.approval.teal b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.approval.teal new file mode 100644 index 000000000..63fe63878 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.approval.teal @@ -0,0 +1,53 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + // tests/approvals/arc4-method-selector.algo.ts:13 + // class ContractTwo extends Contract { + txn NumAppArgs + bz main_bare_routing@7 + pushbytess 0x438c64f3 0x2ad746ef // method "renamedSomeMethod()void", method "test()byte[]" + txna ApplicationArgs 0 + match main_renamedSomeMethod_route@3 main_test_route@4 + +main_after_if_else@11: + // tests/approvals/arc4-method-selector.algo.ts:13 + // class ContractTwo extends Contract { + pushint 0 // 0 + return + +main_test_route@4: + // tests/approvals/arc4-method-selector.algo.ts:17 + // test() { + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + pushbytes 0x151f7c750004c2e9596e + log + pushint 1 // 1 + return + +main_renamedSomeMethod_route@3: + // tests/approvals/arc4-method-selector.algo.ts:14 + // @abimethod({ name: 'renamedSomeMethod' }) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + pushint 1 // 1 + return + +main_bare_routing@7: + // tests/approvals/arc4-method-selector.algo.ts:13 + // class ContractTwo extends Contract { + txn OnCompletion + bnz main_after_if_else@11 + txn ApplicationID + ! + assert // can only call when creating + pushint 1 // 1 + return diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractTwo.arc32.json b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.arc32.json new file mode 100644 index 000000000..18516f192 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.arc32.json @@ -0,0 +1,63 @@ +{ + "hints": { + "renamedSomeMethod()void": { + "call_config": { + "no_op": "CALL" + } + }, + "test()byte[]": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwogICAgcHVzaGJ5dGVzcyAweDQzOGM2NGYzIDB4MmFkNzQ2ZWYgLy8gbWV0aG9kICJyZW5hbWVkU29tZU1ldGhvZCgpdm9pZCIsIG1ldGhvZCAidGVzdCgpYnl0ZVtdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9yZW5hbWVkU29tZU1ldGhvZF9yb3V0ZUAzIG1haW5fdGVzdF9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX3Rlc3Rfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjE3CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDRjMmU5NTk2ZQogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3JlbmFtZWRTb21lTWV0aG9kX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxNAogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdyZW5hbWVkU29tZU1ldGhvZCcgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBDb250cmFjdFR3byBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": {}, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "ContractTwo", + "methods": [ + { + "name": "renamedSomeMethod", + "args": [], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "test", + "args": [], + "readonly": false, + "returns": { + "type": "byte[]" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractTwo.arc56.json b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.arc56.json new file mode 100644 index 000000000..f76ea1b71 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.arc56.json @@ -0,0 +1,120 @@ +{ + "name": "ContractTwo", + "structs": {}, + "methods": [ + { + "name": "renamedSomeMethod", + "args": [], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "test", + "args": [], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 0, + "bytes": 0 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": {}, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 33, + 56 + ], + "errorMessage": "OnCompletion is not NoOp" + }, + { + "pc": [ + 71 + ], + "errorMessage": "can only call when creating" + }, + { + "pc": [ + 36, + 59 + ], + "errorMessage": "can only call when not creating" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwogICAgcHVzaGJ5dGVzcyAweDQzOGM2NGYzIDB4MmFkNzQ2ZWYgLy8gbWV0aG9kICJyZW5hbWVkU29tZU1ldGhvZCgpdm9pZCIsIG1ldGhvZCAidGVzdCgpYnl0ZVtdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9yZW5hbWVkU29tZU1ldGhvZF9yb3V0ZUAzIG1haW5fdGVzdF9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX3Rlc3Rfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjE3CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDRjMmU5NTk2ZQogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3JlbmFtZWRTb21lTWV0aG9kX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxNAogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdyZW5hbWVkU29tZU1ldGhvZCcgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBDb250cmFjdFR3byBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CjEbQQA5ggIEQ4xk8wQq10bvNhoAjgIAGgADgQBDMRkURDEYRIAKFR98dQAEwulZbrCBAUMxGRREMRhEgQFDMRlA/9cxGBREgQFD", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 4, + "patch": 0 + } + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractTwo.clear.teal b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.clear.teal new file mode 100644 index 000000000..a4d580477 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.clear.teal @@ -0,0 +1,7 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir new file mode 100644 index 000000000..65632698f --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir @@ -0,0 +1,68 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__() -> bool: + block@0: // L13 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L13 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "renamedSomeMethod()void" => block@2, method "test()byte[]" => block@3, * => block@4} + block@2: // renamedSomeMethod_route_L14 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + tests/approvals/arc4-method-selector.algo.ts::ContractTwo.someMethod() + return 1u + block@3: // test_route_L17 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (== tmp%7#0 NoOp) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (!= tmp%9#0 0u) + (assert tmp%10#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/arc4-method-selector.algo.ts::ContractTwo.test() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes[8] = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%11#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%11#0) + return 1u + block@4: // switch_case_default_L13 + goto block@5 + block@5: // switch_case_next_L13 + goto block@10 + block@6: // bare_routing_L13 + let tmp%12#0: uint64 = (txn OnCompletion) + switch tmp%12#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L13 + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (== tmp%13#0 0u) + (assert tmp%14#0) // can only call when creating + tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L13 + goto block@9 + block@9: // switch_case_next_L13 + goto block@10 + block@10: // after_if_else_L13 + return 0u + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.someMethod() -> void: + block@0: // L14 + return + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.test() -> bytes: + block@0: // L17 + return method "someMethod()uint64" + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__algots__.defaultCreate() -> void: + block@0: // L13 + return \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir new file mode 100644 index 000000000..059121853 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir @@ -0,0 +1,39 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#1: uint64 = (txn NumAppArgs) + goto tmp%0#1 ? block@2 : block@7 + block@2: // abi_routing_L13 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "renamedSomeMethod()void" => block@3, method "test()byte[]" => block@4, * => block@11} + block@3: // renamedSomeMethod_route_L14 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // can only call when not creating + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // test_route_L17 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (! tmp%7#0) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + (assert tmp%9#0) // can only call when not creating + (log 0x151f7c750004c2e9596e) + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@7: // bare_routing_L13 + let tmp%12#0: uint64 = (txn OnCompletion) + goto tmp%12#0 ? block@11 : block@8 + block@8: // __algots__.defaultCreate_L13 + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (! tmp%13#0) + (assert tmp%14#0) // can only call when creating + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@11: // after_if_else_L13 + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir new file mode 100644 index 000000000..059121853 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir @@ -0,0 +1,39 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#1: uint64 = (txn NumAppArgs) + goto tmp%0#1 ? block@2 : block@7 + block@2: // abi_routing_L13 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "renamedSomeMethod()void" => block@3, method "test()byte[]" => block@4, * => block@11} + block@3: // renamedSomeMethod_route_L14 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // can only call when not creating + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // test_route_L17 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (! tmp%7#0) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + (assert tmp%9#0) // can only call when not creating + (log 0x151f7c750004c2e9596e) + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@7: // bare_routing_L13 + let tmp%12#0: uint64 = (txn OnCompletion) + goto tmp%12#0 ? block@11 : block@8 + block@8: // __algots__.defaultCreate_L13 + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (! tmp%13#0) + (assert tmp%14#0) // can only call when creating + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@11: // after_if_else_L13 + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o1/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o1/global-state/TestContract.ir/TestContract.approval.0.ssa.ir b/tests/approvals/out/o1/global-state/TestContract.ir/TestContract.approval.0.ssa.ir index 00b2b4ddc..606a17b09 100644 --- a/tests/approvals/out/o1/global-state/TestContract.ir/TestContract.approval.0.ssa.ir +++ b/tests/approvals/out/o1/global-state/TestContract.ir/TestContract.approval.0.ssa.ir @@ -36,5 +36,10 @@ subroutine tests/approvals/global-state.algo.ts::TestContract.constructor() -> v subroutine tests/approvals/global-state.algo.ts::BaseTestContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "baseTestState" "testing 123") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.approval.teal b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.approval.teal index 081d279e0..1ed42f185 100644 --- a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.approval.teal +++ b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.approval.teal @@ -3,21 +3,29 @@ // @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: main: + txn ApplicationID + bnz main_after_if_else@2 + // tests/approvals/inheritance-b.algo.ts:15 + // concreteState = GlobalState({ initialValue: 'testing' }) + pushbytess "concreteState" "testing" // "concreteState", "testing" + app_global_put + +main_after_if_else@2: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { txn NumAppArgs - bz main_bare_routing@7 + bz main_bare_routing@9 pushbytess 0xc73da9b9 0xf161dc37 // method "getVeryImportantValue()string", method "simpleAbiMethod(uint64,uint64)uint64" txna ApplicationArgs 0 - match main_getVeryImportantValue_route@3 main_simpleAbiMethod_route@4 + match main_getVeryImportantValue_route@5 main_simpleAbiMethod_route@6 -main_after_if_else@11: +main_after_if_else@13: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { pushint 0 // 0 return -main_simpleAbiMethod_route@4: +main_simpleAbiMethod_route@6: // tests/approvals/inheritance-a.algo.ts:17 // public simpleAbiMethod(a: uint64, b: uint64): uint64 { txn OnCompletion @@ -42,8 +50,8 @@ main_simpleAbiMethod_route@4: pushint 1 // 1 return -main_getVeryImportantValue_route@3: - // tests/approvals/inheritance-b.algo.ts:15 +main_getVeryImportantValue_route@5: + // tests/approvals/inheritance-b.algo.ts:16 // public getVeryImportantValue() { txn OnCompletion ! @@ -55,11 +63,11 @@ main_getVeryImportantValue_route@3: pushint 1 // 1 return -main_bare_routing@7: +main_bare_routing@9: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { txn OnCompletion - bnz main_after_if_else@11 + bnz main_after_if_else@13 txn ApplicationID ! assert // can only call when creating diff --git a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.arc32.json b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.arc32.json index dbcbce5ef..9bf36049a 100644 --- a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.arc32.json +++ b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.arc32.json @@ -12,12 +12,12 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHhjNzNkYTliOSAweGYxNjFkYzM3IC8vIG1ldGhvZCAiZ2V0VmVyeUltcG9ydGFudFZhbHVlKClzdHJpbmciLCBtZXRob2QgInNpbXBsZUFiaU1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDMgbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgY2FsbHN1YiBzaW1wbGVBYmlNZXRob2QKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRWZXJ5SW1wb3J0YW50VmFsdWVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMjM0MzIKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6OkFyYzRDb250cmFjdC5zaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKc2ltcGxlQWJpTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBjb25jcmV0ZVN0YXRlID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICd0ZXN0aW5nJyB9KQogICAgcHVzaGJ5dGVzcyAiY29uY3JldGVTdGF0ZSIgInRlc3RpbmciIC8vICJjb25jcmV0ZVN0YXRlIiwgInRlc3RpbmciCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKICAgIHB1c2hieXRlc3MgMHhjNzNkYTliOSAweGYxNjFkYzM3IC8vIG1ldGhvZCAiZ2V0VmVyeUltcG9ydGFudFZhbHVlKClzdHJpbmciLCBtZXRob2QgInNpbXBsZUFiaU1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDUgbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgY2FsbHN1YiBzaW1wbGVBYmlNZXRob2QKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRWZXJ5SW1wb3J0YW50VmFsdWVfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyBnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMjM0MzIKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEzCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6OkFyYzRDb250cmFjdC5zaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKc2ltcGxlQWJpTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { - "num_byte_slices": 0, + "num_byte_slices": 1, "num_uints": 1 }, "local": { @@ -28,6 +28,10 @@ "schema": { "global": { "declared": { + "concreteState": { + "type": "bytes", + "key": "concreteState" + }, "someState": { "type": "uint64", "key": "someState" diff --git a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.arc56.json b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.arc56.json index 414628829..d0670cef5 100644 --- a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.arc56.json +++ b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.arc56.json @@ -53,7 +53,7 @@ "schema": { "global": { "ints": 1, - "bytes": 0 + "bytes": 1 }, "local": { "ints": 0, @@ -62,6 +62,11 @@ }, "keys": { "global": { + "concreteState": { + "keyType": "AVMString", + "valueType": "AVMString", + "key": "Y29uY3JldGVTdGF0ZQ==" + }, "someState": { "keyType": "AVMString", "valueType": "AVMUint64", @@ -88,21 +93,21 @@ "sourceInfo": [ { "pc": [ - 33, - 64 + 63, + 94 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 90 + 120 ], "errorMessage": "can only call when creating" }, { "pc": [ - 36, - 67 + 66, + 97 ], "errorMessage": "can only call when not creating" } @@ -115,11 +120,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHhjNzNkYTliOSAweGYxNjFkYzM3IC8vIG1ldGhvZCAiZ2V0VmVyeUltcG9ydGFudFZhbHVlKClzdHJpbmciLCBtZXRob2QgInNpbXBsZUFiaU1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDMgbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgY2FsbHN1YiBzaW1wbGVBYmlNZXRob2QKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRWZXJ5SW1wb3J0YW50VmFsdWVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMjM0MzIKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6OkFyYzRDb250cmFjdC5zaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKc2ltcGxlQWJpTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBjb25jcmV0ZVN0YXRlID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICd0ZXN0aW5nJyB9KQogICAgcHVzaGJ5dGVzcyAiY29uY3JldGVTdGF0ZSIgInRlc3RpbmciIC8vICJjb25jcmV0ZVN0YXRlIiwgInRlc3RpbmciCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKICAgIHB1c2hieXRlc3MgMHhjNzNkYTliOSAweGYxNjFkYzM3IC8vIG1ldGhvZCAiZ2V0VmVyeUltcG9ydGFudFZhbHVlKClzdHJpbmciLCBtZXRob2QgInNpbXBsZUFiaU1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDUgbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgY2FsbHN1YiBzaW1wbGVBYmlNZXRob2QKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRWZXJ5SW1wb3J0YW50VmFsdWVfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyBnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMjM0MzIKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEzCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6OkFyYzRDb250cmFjdC5zaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKc2ltcGxlQWJpTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CjEbQQBMggIExz2puQTxYdw3NhoAjgIAIgADgQBDMRkURDEYRDYaARc2GgIXiAAuFoAEFR98dUxQsIEBQzEZFEQxGESACBUffHUAAjQysIEBQzEZQP/EMRgURIEBQ4oCAYv+i/8IiQ==", + "approval": "CjEYQAAZggINY29uY3JldGVTdGF0ZQd0ZXN0aW5nZzEbQQBMggIExz2puQTxYdw3NhoAjgIAIgADgQBDMRkURDEYRDYaARc2GgIXiAAuFoAEFR98dUxQsIEBQzEZFEQxGESACBUffHUAAjQysIEBQzEZQP/EMRgURIEBQ4oCAYv+i/8IiQ==", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir index 5222179f4..e5054028d 100644 --- a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir +++ b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir @@ -1,5 +1,11 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.constructor() + goto block@2 + block@2: // after_if_else_L1 let tmp%0#0: bool = tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__() return tmp%0#0 @@ -11,7 +17,7 @@ subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_ar block@1: // abi_routing_L14 let tmp%2#0: bytes = (txna ApplicationArgs 0) switch tmp%2#0 {method "getVeryImportantValue()string" => block@2, method "simpleAbiMethod(uint64,uint64)uint64" => block@3, * => block@4} - block@2: // getVeryImportantValue_route_L15 + block@2: // getVeryImportantValue_route_L16 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (== tmp%3#0 NoOp) (assert tmp%4#0) // OnCompletion is not NoOp @@ -63,7 +69,7 @@ subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_ar return 0u subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.getVeryImportantValue() -> bytes: - block@0: // L15 + block@0: // L16 return "42" subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a: uint64, b: uint64) -> uint64: @@ -73,4 +79,14 @@ subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() -> void: block@0: // L14 + return + +subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.constructor() -> void: + block@0: // L14 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() + (app_global_put "concreteState" "testing") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir index b0d279806..58d4ee9b0 100644 --- a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir +++ b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir @@ -1,11 +1,17 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + (app_global_put "concreteState" "testing") + goto block@2 + block@2: // after_if_else_L1 let tmp%0#1: uint64 = (txn NumAppArgs) - goto tmp%0#1 ? block@2 : block@7 - block@2: // abi_routing_L14 + goto tmp%0#1 ? block@4 : block@9 + block@4: // abi_routing_L14 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getVeryImportantValue()string" => block@3, method "simpleAbiMethod(uint64,uint64)uint64" => block@4, * => block@11} - block@3: // getVeryImportantValue_route_L15 + switch tmp%2#0 {method "getVeryImportantValue()string" => block@5, method "simpleAbiMethod(uint64,uint64)uint64" => block@6, * => block@13} + block@5: // getVeryImportantValue_route_L16 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (! tmp%3#0) (assert tmp%4#0) // OnCompletion is not NoOp @@ -13,8 +19,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP (assert tmp%5#0) // can only call when not creating (log 0x151f7c7500023432) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0: bool = 1u - goto block@12 - block@4: // simpleAbiMethod_route_L17 + goto block@14 + block@6: // simpleAbiMethod_route_L17 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is not NoOp @@ -29,21 +35,21 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%14#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%14#0) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1: bool = 1u - goto block@12 - block@7: // bare_routing_L14 + goto block@14 + block@9: // bare_routing_L14 let tmp%15#0: uint64 = (txn OnCompletion) - goto tmp%15#0 ? block@11 : block@8 - block@8: // __algots__.defaultCreate_L14 + goto tmp%15#0 ? block@13 : block@10 + block@10: // __algots__.defaultCreate_L14 let tmp%16#0: uint64 = (txn ApplicationID) let tmp%17#0: bool = (! tmp%16#0) (assert tmp%17#0) // can only call when creating let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2: bool = 1u - goto block@12 - block@11: // after_if_else_L14 + goto block@14 + block@13: // after_if_else_L14 let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3: bool = 0u - goto block@12 - block@12: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@8, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@11) + goto block@14 + block@14: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@5, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@6, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@10, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@13) return tmp%0#0 subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a: uint64, b: uint64) -> uint64: diff --git a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir index b0d279806..58d4ee9b0 100644 --- a/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/o1/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir @@ -1,11 +1,17 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + (app_global_put "concreteState" "testing") + goto block@2 + block@2: // after_if_else_L1 let tmp%0#1: uint64 = (txn NumAppArgs) - goto tmp%0#1 ? block@2 : block@7 - block@2: // abi_routing_L14 + goto tmp%0#1 ? block@4 : block@9 + block@4: // abi_routing_L14 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getVeryImportantValue()string" => block@3, method "simpleAbiMethod(uint64,uint64)uint64" => block@4, * => block@11} - block@3: // getVeryImportantValue_route_L15 + switch tmp%2#0 {method "getVeryImportantValue()string" => block@5, method "simpleAbiMethod(uint64,uint64)uint64" => block@6, * => block@13} + block@5: // getVeryImportantValue_route_L16 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (! tmp%3#0) (assert tmp%4#0) // OnCompletion is not NoOp @@ -13,8 +19,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP (assert tmp%5#0) // can only call when not creating (log 0x151f7c7500023432) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0: bool = 1u - goto block@12 - block@4: // simpleAbiMethod_route_L17 + goto block@14 + block@6: // simpleAbiMethod_route_L17 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is not NoOp @@ -29,21 +35,21 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%14#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%14#0) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1: bool = 1u - goto block@12 - block@7: // bare_routing_L14 + goto block@14 + block@9: // bare_routing_L14 let tmp%15#0: uint64 = (txn OnCompletion) - goto tmp%15#0 ? block@11 : block@8 - block@8: // __algots__.defaultCreate_L14 + goto tmp%15#0 ? block@13 : block@10 + block@10: // __algots__.defaultCreate_L14 let tmp%16#0: uint64 = (txn ApplicationID) let tmp%17#0: bool = (! tmp%16#0) (assert tmp%17#0) // can only call when creating let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2: bool = 1u - goto block@12 - block@11: // after_if_else_L14 + goto block@14 + block@13: // after_if_else_L14 let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3: bool = 0u - goto block@12 - block@12: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@8, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@11) + goto block@14 + block@14: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@5, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@6, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@10, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@13) return tmp%0#0 subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a: uint64, b: uint64) -> uint64: diff --git a/tests/approvals/out/o1/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir b/tests/approvals/out/o1/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir index 13b2f6198..9f74e17a2 100644 --- a/tests/approvals/out/o1/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir +++ b/tests/approvals/out/o1/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir @@ -3274,11 +3274,16 @@ subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.test4() -> void: (assert tmp%14#0) // expected clear state page return +subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: + block@0: // L7 + return + subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() -> void: block@0: // L7 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "name" 0x) return -subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: - block@0: // L7 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir b/tests/approvals/out/o1/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir index d19441684..b76f21412 100644 --- a/tests/approvals/out/o1/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir +++ b/tests/approvals/out/o1/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir @@ -86,12 +86,6 @@ subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.methodOne() -> byt block@0: // L19 return "base-one" -subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: - block@0: // L17 - tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() - (app_global_put "stateOne" 45u) - return - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: block@0: // L8 return "common" @@ -100,11 +94,22 @@ subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride( block@0: // L12 return "common" +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: + block@0: // L17 + return + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: + block@0: // L17 + tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() + (app_global_put "stateOne" 45u) + return + subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: - block@0: // L17 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir b/tests/approvals/out/o1/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir index 77b35fa13..dadd2cfc3 100644 --- a/tests/approvals/out/o1/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir +++ b/tests/approvals/out/o1/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir @@ -90,21 +90,26 @@ subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() - block@0: // L35 return "base-two" +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: + block@0: // L8 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: + block@0: // L24 + return + subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: block@0: // L24 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateTwo" "Hello") return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: - block@0: // L8 - return "common" - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: - block@0: // L24 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir b/tests/approvals/out/o1/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir index d217ab841..9cfbfedfb 100644 --- a/tests/approvals/out/o1/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir +++ b/tests/approvals/out/o1/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir @@ -75,11 +75,16 @@ subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride( block@0: // L12 return "common" +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: + block@0: // L5 + return + subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: - block@0: // L5 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir b/tests/approvals/out/o1/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir index 68539cb46..5bb6d99be 100644 --- a/tests/approvals/out/o1/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir +++ b/tests/approvals/out/o1/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir @@ -176,6 +176,30 @@ subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.callB2Common() let tmp%0#0: bytes = tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() return tmp%0#0 +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.methodOne() -> bytes: + block@0: // L19 + return "base-one" + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: + block@0: // L8 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: + block@0: // L12 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: + block@0: // L26 + return "base-two" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: + block@0: // L35 + return "base-two" + +subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: + block@0: // L40 + return + subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.constructor() -> void: block@0: // L40 polytype/lib/polytype-module.d.ts::ClusteredContract.constructor() @@ -188,43 +212,24 @@ subroutine polytype/lib/polytype-module.d.ts::ClusteredContract bytes: - block@0: // L19 - return "base-one" - subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: block@0: // L17 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateOne" 45u) return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: - block@0: // L8 - return "common" - -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: - block@0: // L12 - return "common" - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: - block@0: // L26 - return "base-two" - -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: - block@0: // L35 - return "base-two" +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 + return subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: block@0: // L24 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateTwo" "Hello") - return - -subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: - block@0: // L40 return \ No newline at end of file diff --git a/tests/approvals/out/o1/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir b/tests/approvals/out/o1/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir index 182087125..1566b6282 100644 --- a/tests/approvals/out/o1/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir +++ b/tests/approvals/out/o1/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir @@ -96,5 +96,10 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "greeting" "") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir b/tests/approvals/out/o1/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir index f9129c0aa..608e586a7 100644 --- a/tests/approvals/out/o1/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir +++ b/tests/approvals/out/o1/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir @@ -74,12 +74,6 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.create() -> v block@0: // L30 return -subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: - block@0: // L25 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) - return - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: block@0: // L6 return @@ -97,7 +91,18 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes let tmp%2#0: bytes = (concat tmp%1#0 name#0) return tmp%2#0 +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: + block@0: // L25 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) + return + subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "greeting" "") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir b/tests/approvals/out/o1/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir index 63d0f269b..e448d3e02 100644 --- a/tests/approvals/out/o1/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir +++ b/tests/approvals/out/o1/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir @@ -74,12 +74,6 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.c block@0: // L40 return -subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: - block@0: // L35 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) - return - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: block@0: // L6 return @@ -97,7 +91,18 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes let tmp%2#0: bytes = (concat tmp%1#0 name#0) return tmp%2#0 +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: + block@0: // L35 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) + return + subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "greeting" "") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir b/tests/approvals/out/o1/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir index 8486b5b8d..a0777844d 100644 --- a/tests/approvals/out/o1/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir +++ b/tests/approvals/out/o1/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir @@ -54,11 +54,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: + block@0: // L4 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: - block@0: // L4 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir b/tests/approvals/out/o1/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir index 4c4df7e59..47ab50b8e 100644 --- a/tests/approvals/out/o1/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir +++ b/tests/approvals/out/o1/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir @@ -61,11 +61,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: + block@0: // L27 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: - block@0: // L27 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir b/tests/approvals/out/o1/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir index cd5bdac35..37a285cdc 100644 --- a/tests/approvals/out/o1/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir +++ b/tests/approvals/out/o1/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir @@ -54,11 +54,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: + block@0: // L24 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: - block@0: // L24 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir b/tests/approvals/out/o1/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir index bb5a730b5..e9b585d28 100644 --- a/tests/approvals/out/o1/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir +++ b/tests/approvals/out/o1/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir @@ -60,11 +60,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: + block@0: // L15 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: - block@0: // L15 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir b/tests/approvals/out/o1/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir index f09712fcc..728f439b6 100644 --- a/tests/approvals/out/o1/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir +++ b/tests/approvals/out/o1/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir @@ -24,5 +24,10 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir b/tests/approvals/out/o1/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir index 6e4e09298..5543184c2 100644 --- a/tests/approvals/out/o1/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir +++ b/tests/approvals/out/o1/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir @@ -24,5 +24,10 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir b/tests/approvals/out/o1/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir index c1abca70e..d9e0dba34 100644 --- a/tests/approvals/out/o1/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir +++ b/tests/approvals/out/o1/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir @@ -34,5 +34,10 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o1/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir b/tests/approvals/out/o1/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir index c916dc08c..3f7b45db0 100644 --- a/tests/approvals/out/o1/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir +++ b/tests/approvals/out/o1/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir @@ -14,5 +14,10 @@ main tests/approvals/super-calls.algo.ts::SuperContract.approvalProgram: subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir b/tests/approvals/out/o2/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir index 8f6a49274..b02ee5cea 100644 --- a/tests/approvals/out/o2/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir +++ b/tests/approvals/out/o2/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir @@ -104,5 +104,10 @@ subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.methodWithDefau subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "globalValue" 123u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractOne.approval.teal b/tests/approvals/out/o2/arc4-method-selector/ContractOne.approval.teal new file mode 100644 index 000000000..676c8f376 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractOne.approval.teal @@ -0,0 +1,55 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + // tests/approvals/arc4-method-selector.algo.ts:4 + // class ContractOne extends Contract { + txn NumAppArgs + bz main_bare_routing@7 + pushbytess 0x2ad746ef 0xc2e9596e // method "test()byte[]", method "someMethod()uint64" + txna ApplicationArgs 0 + match main_test_route@3 main_someMethod_route@4 + +main_after_if_else@11: + // tests/approvals/arc4-method-selector.algo.ts:4 + // class ContractOne extends Contract { + pushint 0 // 0 + return + +main_someMethod_route@4: + // tests/approvals/arc4-method-selector.algo.ts:8 + // someMethod() { + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + pushbytes 0x151f7c75000000000000007b + log + pushint 1 // 1 + return + +main_test_route@3: + // tests/approvals/arc4-method-selector.algo.ts:5 + // test() { + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + pushbytes 0x151f7c750004438c64f3 + log + pushint 1 // 1 + return + +main_bare_routing@7: + // tests/approvals/arc4-method-selector.algo.ts:4 + // class ContractOne extends Contract { + txn OnCompletion + bnz main_after_if_else@11 + txn ApplicationID + ! + assert // can only call when creating + pushint 1 // 1 + return diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractOne.arc32.json b/tests/approvals/out/o2/arc4-method-selector/ContractOne.arc32.json new file mode 100644 index 000000000..11c3f527b --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractOne.arc32.json @@ -0,0 +1,63 @@ +{ + "hints": { + "test()byte[]": { + "call_config": { + "no_op": "CALL" + } + }, + "someMethod()uint64": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo0CiAgICAvLyBjbGFzcyBDb250cmFjdE9uZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4MmFkNzQ2ZWYgMHhjMmU5NTk2ZSAvLyBtZXRob2QgInRlc3QoKWJ5dGVbXSIsIG1ldGhvZCAic29tZU1ldGhvZCgpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl90ZXN0X3JvdXRlQDMgbWFpbl9zb21lTWV0aG9kX3JvdXRlQDQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjQKICAgIC8vIGNsYXNzIENvbnRyYWN0T25lIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9zb21lTWV0aG9kX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo4CiAgICAvLyBzb21lTWV0aG9kKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDAwN2IKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl90ZXN0X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo1CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDQ0MzhjNjRmMwogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6NAogICAgLy8gY2xhc3MgQ29udHJhY3RPbmUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": {}, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "ContractOne", + "methods": [ + { + "name": "test", + "args": [], + "readonly": false, + "returns": { + "type": "byte[]" + } + }, + { + "name": "someMethod", + "args": [], + "readonly": false, + "returns": { + "type": "uint64" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractOne.arc56.json b/tests/approvals/out/o2/arc4-method-selector/ContractOne.arc56.json new file mode 100644 index 000000000..dffa83aa5 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractOne.arc56.json @@ -0,0 +1,120 @@ +{ + "name": "ContractOne", + "structs": {}, + "methods": [ + { + "name": "test", + "args": [], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "someMethod", + "args": [], + "returns": { + "type": "uint64" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 0, + "bytes": 0 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": {}, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 33, + 58 + ], + "errorMessage": "OnCompletion is not NoOp" + }, + { + "pc": [ + 86 + ], + "errorMessage": "can only call when creating" + }, + { + "pc": [ + 36, + 61 + ], + "errorMessage": "can only call when not creating" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo0CiAgICAvLyBjbGFzcyBDb250cmFjdE9uZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4MmFkNzQ2ZWYgMHhjMmU5NTk2ZSAvLyBtZXRob2QgInRlc3QoKWJ5dGVbXSIsIG1ldGhvZCAic29tZU1ldGhvZCgpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl90ZXN0X3JvdXRlQDMgbWFpbl9zb21lTWV0aG9kX3JvdXRlQDQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjQKICAgIC8vIGNsYXNzIENvbnRyYWN0T25lIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9zb21lTWV0aG9kX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo4CiAgICAvLyBzb21lTWV0aG9kKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDAwN2IKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl90ZXN0X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo1CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDQ0MzhjNjRmMwogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6NAogICAgLy8gY2xhc3MgQ29udHJhY3RPbmUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CjEbQQBIggIEKtdG7wTC6VluNhoAjgIAHAADgQBDMRkURDEYRIAMFR98dQAAAAAAAAB7sIEBQzEZFEQxGESAChUffHUABEOMZPOwgQFDMRlA/8gxGBREgQFD", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 4, + "patch": 0 + } + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractOne.clear.teal b/tests/approvals/out/o2/arc4-method-selector/ContractOne.clear.teal new file mode 100644 index 000000000..a4d580477 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractOne.clear.teal @@ -0,0 +1,7 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir new file mode 100644 index 000000000..cfdd13065 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir @@ -0,0 +1,71 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test()byte[]" => block@2, method "someMethod()uint64" => block@3, * => block@4} + block@2: // test_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/arc4-method-selector.algo.ts::ContractOne.test() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes[8] = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%7#0) + return 1u + block@3: // someMethod_route_L8 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (== tmp%8#0 NoOp) + (assert tmp%9#0) // OnCompletion is not NoOp + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (!= tmp%10#0 0u) + (assert tmp%11#0) // can only call when not creating + let to_encode%1#0: uint64 = tests/approvals/arc4-method-selector.algo.ts::ContractOne.someMethod() + let val_as_bytes%0#0: bytes[8] = (itob to_encode%1#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) + return 1u + block@4: // switch_case_default_L4 + goto block@5 + block@5: // switch_case_next_L4 + goto block@10 + block@6: // bare_routing_L4 + let tmp%13#0: uint64 = (txn OnCompletion) + switch tmp%13#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L4 + let tmp%14#0: uint64 = (txn ApplicationID) + let tmp%15#0: bool = (== tmp%14#0 0u) + (assert tmp%15#0) // can only call when creating + tests/approvals/arc4-method-selector.algo.ts::ContractOne.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L4 + goto block@9 + block@9: // switch_case_next_L4 + goto block@10 + block@10: // after_if_else_L4 + return 0u + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.test() -> bytes: + block@0: // L5 + return method "renamedSomeMethod()void" + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.someMethod() -> uint64: + block@0: // L8 + return 123u + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.__algots__.defaultCreate() -> void: + block@0: // L4 + return \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir new file mode 100644 index 000000000..09258a560 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir @@ -0,0 +1,40 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#1: uint64 = (txn NumAppArgs) + goto tmp%0#1 ? block@2 : block@7 + block@2: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test()byte[]" => block@3, method "someMethod()uint64" => block@4, * => block@11} + block@3: // test_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // can only call when not creating + (log 0x151f7c750004438c64f3) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // someMethod_route_L8 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // OnCompletion is not NoOp + let tmp%10#0: uint64 = (txn ApplicationID) + (assert tmp%10#0) // can only call when not creating + (log 0x151f7c75000000000000007b) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@7: // bare_routing_L4 + let tmp%13#0: uint64 = (txn OnCompletion) + goto tmp%13#0 ? block@11 : block@8 + block@8: // __algots__.defaultCreate_L4 + let tmp%14#0: uint64 = (txn ApplicationID) + let tmp%15#0: bool = (! tmp%14#0) + (assert tmp%15#0) // can only call when creating + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@11: // after_if_else_L4 + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir new file mode 100644 index 000000000..09258a560 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir @@ -0,0 +1,40 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#1: uint64 = (txn NumAppArgs) + goto tmp%0#1 ? block@2 : block@7 + block@2: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test()byte[]" => block@3, method "someMethod()uint64" => block@4, * => block@11} + block@3: // test_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // can only call when not creating + (log 0x151f7c750004438c64f3) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // someMethod_route_L8 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // OnCompletion is not NoOp + let tmp%10#0: uint64 = (txn ApplicationID) + (assert tmp%10#0) // can only call when not creating + (log 0x151f7c75000000000000007b) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@7: // bare_routing_L4 + let tmp%13#0: uint64 = (txn OnCompletion) + goto tmp%13#0 ? block@11 : block@8 + block@8: // __algots__.defaultCreate_L4 + let tmp%14#0: uint64 = (txn ApplicationID) + let tmp%15#0: bool = (! tmp%14#0) + (assert tmp%15#0) // can only call when creating + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@11: // after_if_else_L4 + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractTwo.approval.teal b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.approval.teal new file mode 100644 index 000000000..63fe63878 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.approval.teal @@ -0,0 +1,53 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + // tests/approvals/arc4-method-selector.algo.ts:13 + // class ContractTwo extends Contract { + txn NumAppArgs + bz main_bare_routing@7 + pushbytess 0x438c64f3 0x2ad746ef // method "renamedSomeMethod()void", method "test()byte[]" + txna ApplicationArgs 0 + match main_renamedSomeMethod_route@3 main_test_route@4 + +main_after_if_else@11: + // tests/approvals/arc4-method-selector.algo.ts:13 + // class ContractTwo extends Contract { + pushint 0 // 0 + return + +main_test_route@4: + // tests/approvals/arc4-method-selector.algo.ts:17 + // test() { + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + pushbytes 0x151f7c750004c2e9596e + log + pushint 1 // 1 + return + +main_renamedSomeMethod_route@3: + // tests/approvals/arc4-method-selector.algo.ts:14 + // @abimethod({ name: 'renamedSomeMethod' }) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + pushint 1 // 1 + return + +main_bare_routing@7: + // tests/approvals/arc4-method-selector.algo.ts:13 + // class ContractTwo extends Contract { + txn OnCompletion + bnz main_after_if_else@11 + txn ApplicationID + ! + assert // can only call when creating + pushint 1 // 1 + return diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractTwo.arc32.json b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.arc32.json new file mode 100644 index 000000000..18516f192 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.arc32.json @@ -0,0 +1,63 @@ +{ + "hints": { + "renamedSomeMethod()void": { + "call_config": { + "no_op": "CALL" + } + }, + "test()byte[]": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwogICAgcHVzaGJ5dGVzcyAweDQzOGM2NGYzIDB4MmFkNzQ2ZWYgLy8gbWV0aG9kICJyZW5hbWVkU29tZU1ldGhvZCgpdm9pZCIsIG1ldGhvZCAidGVzdCgpYnl0ZVtdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9yZW5hbWVkU29tZU1ldGhvZF9yb3V0ZUAzIG1haW5fdGVzdF9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX3Rlc3Rfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjE3CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDRjMmU5NTk2ZQogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3JlbmFtZWRTb21lTWV0aG9kX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxNAogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdyZW5hbWVkU29tZU1ldGhvZCcgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBDb250cmFjdFR3byBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": {}, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "ContractTwo", + "methods": [ + { + "name": "renamedSomeMethod", + "args": [], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "test", + "args": [], + "readonly": false, + "returns": { + "type": "byte[]" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractTwo.arc56.json b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.arc56.json new file mode 100644 index 000000000..f76ea1b71 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.arc56.json @@ -0,0 +1,120 @@ +{ + "name": "ContractTwo", + "structs": {}, + "methods": [ + { + "name": "renamedSomeMethod", + "args": [], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "test", + "args": [], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 0, + "bytes": 0 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": {}, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 33, + 56 + ], + "errorMessage": "OnCompletion is not NoOp" + }, + { + "pc": [ + 71 + ], + "errorMessage": "can only call when creating" + }, + { + "pc": [ + 36, + 59 + ], + "errorMessage": "can only call when not creating" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwogICAgcHVzaGJ5dGVzcyAweDQzOGM2NGYzIDB4MmFkNzQ2ZWYgLy8gbWV0aG9kICJyZW5hbWVkU29tZU1ldGhvZCgpdm9pZCIsIG1ldGhvZCAidGVzdCgpYnl0ZVtdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9yZW5hbWVkU29tZU1ldGhvZF9yb3V0ZUAzIG1haW5fdGVzdF9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX3Rlc3Rfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjE3CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDRjMmU5NTk2ZQogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3JlbmFtZWRTb21lTWV0aG9kX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxNAogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdyZW5hbWVkU29tZU1ldGhvZCcgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBDb250cmFjdFR3byBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CjEbQQA5ggIEQ4xk8wQq10bvNhoAjgIAGgADgQBDMRkURDEYRIAKFR98dQAEwulZbrCBAUMxGRREMRhEgQFDMRlA/9cxGBREgQFD", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 4, + "patch": 0 + } + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractTwo.clear.teal b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.clear.teal new file mode 100644 index 000000000..a4d580477 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.clear.teal @@ -0,0 +1,7 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir new file mode 100644 index 000000000..65632698f --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir @@ -0,0 +1,68 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__() -> bool: + block@0: // L13 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L13 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "renamedSomeMethod()void" => block@2, method "test()byte[]" => block@3, * => block@4} + block@2: // renamedSomeMethod_route_L14 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + tests/approvals/arc4-method-selector.algo.ts::ContractTwo.someMethod() + return 1u + block@3: // test_route_L17 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (== tmp%7#0 NoOp) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (!= tmp%9#0 0u) + (assert tmp%10#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/arc4-method-selector.algo.ts::ContractTwo.test() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes[8] = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%11#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%11#0) + return 1u + block@4: // switch_case_default_L13 + goto block@5 + block@5: // switch_case_next_L13 + goto block@10 + block@6: // bare_routing_L13 + let tmp%12#0: uint64 = (txn OnCompletion) + switch tmp%12#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L13 + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (== tmp%13#0 0u) + (assert tmp%14#0) // can only call when creating + tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L13 + goto block@9 + block@9: // switch_case_next_L13 + goto block@10 + block@10: // after_if_else_L13 + return 0u + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.someMethod() -> void: + block@0: // L14 + return + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.test() -> bytes: + block@0: // L17 + return method "someMethod()uint64" + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__algots__.defaultCreate() -> void: + block@0: // L13 + return \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir new file mode 100644 index 000000000..059121853 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir @@ -0,0 +1,39 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#1: uint64 = (txn NumAppArgs) + goto tmp%0#1 ? block@2 : block@7 + block@2: // abi_routing_L13 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "renamedSomeMethod()void" => block@3, method "test()byte[]" => block@4, * => block@11} + block@3: // renamedSomeMethod_route_L14 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // can only call when not creating + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // test_route_L17 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (! tmp%7#0) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + (assert tmp%9#0) // can only call when not creating + (log 0x151f7c750004c2e9596e) + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@7: // bare_routing_L13 + let tmp%12#0: uint64 = (txn OnCompletion) + goto tmp%12#0 ? block@11 : block@8 + block@8: // __algots__.defaultCreate_L13 + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (! tmp%13#0) + (assert tmp%14#0) // can only call when creating + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@11: // after_if_else_L13 + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir new file mode 100644 index 000000000..059121853 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir @@ -0,0 +1,39 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#1: uint64 = (txn NumAppArgs) + goto tmp%0#1 ? block@2 : block@7 + block@2: // abi_routing_L13 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "renamedSomeMethod()void" => block@3, method "test()byte[]" => block@4, * => block@11} + block@3: // renamedSomeMethod_route_L14 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // can only call when not creating + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // test_route_L17 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (! tmp%7#0) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + (assert tmp%9#0) // can only call when not creating + (log 0x151f7c750004c2e9596e) + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@7: // bare_routing_L13 + let tmp%12#0: uint64 = (txn OnCompletion) + goto tmp%12#0 ? block@11 : block@8 + block@8: // __algots__.defaultCreate_L13 + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (! tmp%13#0) + (assert tmp%14#0) // can only call when creating + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@11: // after_if_else_L13 + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/o2/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/o2/global-state/TestContract.ir/TestContract.approval.0.ssa.ir b/tests/approvals/out/o2/global-state/TestContract.ir/TestContract.approval.0.ssa.ir index 00b2b4ddc..606a17b09 100644 --- a/tests/approvals/out/o2/global-state/TestContract.ir/TestContract.approval.0.ssa.ir +++ b/tests/approvals/out/o2/global-state/TestContract.ir/TestContract.approval.0.ssa.ir @@ -36,5 +36,10 @@ subroutine tests/approvals/global-state.algo.ts::TestContract.constructor() -> v subroutine tests/approvals/global-state.algo.ts::BaseTestContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "baseTestState" "testing 123") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.approval.teal b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.approval.teal index aa963e4fa..2c8d68e24 100644 --- a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.approval.teal +++ b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.approval.teal @@ -3,21 +3,29 @@ // @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: main: + txn ApplicationID + bnz main_after_if_else@2 + // tests/approvals/inheritance-b.algo.ts:15 + // concreteState = GlobalState({ initialValue: 'testing' }) + pushbytess "concreteState" "testing" // "concreteState", "testing" + app_global_put + +main_after_if_else@2: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { txn NumAppArgs - bz main_bare_routing@7 + bz main_bare_routing@9 pushbytess 0xc73da9b9 0xf161dc37 // method "getVeryImportantValue()string", method "simpleAbiMethod(uint64,uint64)uint64" txna ApplicationArgs 0 - match main_getVeryImportantValue_route@3 main_simpleAbiMethod_route@4 + match main_getVeryImportantValue_route@5 main_simpleAbiMethod_route@6 -main_after_if_else@11: +main_after_if_else@13: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { pushint 0 // 0 return -main_simpleAbiMethod_route@4: +main_simpleAbiMethod_route@6: // tests/approvals/inheritance-a.algo.ts:17 // public simpleAbiMethod(a: uint64, b: uint64): uint64 { txn OnCompletion @@ -44,8 +52,8 @@ main_simpleAbiMethod_route@4: pushint 1 // 1 return -main_getVeryImportantValue_route@3: - // tests/approvals/inheritance-b.algo.ts:15 +main_getVeryImportantValue_route@5: + // tests/approvals/inheritance-b.algo.ts:16 // public getVeryImportantValue() { txn OnCompletion ! @@ -57,11 +65,11 @@ main_getVeryImportantValue_route@3: pushint 1 // 1 return -main_bare_routing@7: +main_bare_routing@9: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { txn OnCompletion - bnz main_after_if_else@11 + bnz main_after_if_else@13 txn ApplicationID ! assert // can only call when creating diff --git a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.arc32.json b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.arc32.json index eced8c23b..49bf33b30 100644 --- a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.arc32.json +++ b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.arc32.json @@ -12,12 +12,12 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHhjNzNkYTliOSAweGYxNjFkYzM3IC8vIG1ldGhvZCAiZ2V0VmVyeUltcG9ydGFudFZhbHVlKClzdHJpbmciLCBtZXRob2QgInNpbXBsZUFiaU1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDMgbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgKwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBwdWJsaWMgZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDIzNDMyCiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBjb25jcmV0ZVN0YXRlID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICd0ZXN0aW5nJyB9KQogICAgcHVzaGJ5dGVzcyAiY29uY3JldGVTdGF0ZSIgInRlc3RpbmciIC8vICJjb25jcmV0ZVN0YXRlIiwgInRlc3RpbmciCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKICAgIHB1c2hieXRlc3MgMHhjNzNkYTliOSAweGYxNjFkYzM3IC8vIG1ldGhvZCAiZ2V0VmVyeUltcG9ydGFudFZhbHVlKClzdHJpbmciLCBtZXRob2QgInNpbXBsZUFiaU1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDUgbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgKwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE2CiAgICAvLyBwdWJsaWMgZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDIzNDMyCiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { - "num_byte_slices": 0, + "num_byte_slices": 1, "num_uints": 1 }, "local": { @@ -28,6 +28,10 @@ "schema": { "global": { "declared": { + "concreteState": { + "type": "bytes", + "key": "concreteState" + }, "someState": { "type": "uint64", "key": "someState" diff --git a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.arc56.json b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.arc56.json index bceb7a194..42e5d6a0d 100644 --- a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.arc56.json +++ b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.arc56.json @@ -53,7 +53,7 @@ "schema": { "global": { "ints": 1, - "bytes": 0 + "bytes": 1 }, "local": { "ints": 0, @@ -62,6 +62,11 @@ }, "keys": { "global": { + "concreteState": { + "keyType": "AVMString", + "valueType": "AVMString", + "key": "Y29uY3JldGVTdGF0ZQ==" + }, "someState": { "keyType": "AVMString", "valueType": "AVMUint64", @@ -88,21 +93,21 @@ "sourceInfo": [ { "pc": [ - 33, - 62 + 63, + 92 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 88 + 118 ], "errorMessage": "can only call when creating" }, { "pc": [ - 36, - 65 + 66, + 95 ], "errorMessage": "can only call when not creating" } @@ -115,11 +120,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHhjNzNkYTliOSAweGYxNjFkYzM3IC8vIG1ldGhvZCAiZ2V0VmVyeUltcG9ydGFudFZhbHVlKClzdHJpbmciLCBtZXRob2QgInNpbXBsZUFiaU1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDMgbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgKwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBwdWJsaWMgZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDIzNDMyCiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBjb25jcmV0ZVN0YXRlID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICd0ZXN0aW5nJyB9KQogICAgcHVzaGJ5dGVzcyAiY29uY3JldGVTdGF0ZSIgInRlc3RpbmciIC8vICJjb25jcmV0ZVN0YXRlIiwgInRlc3RpbmciCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKICAgIHB1c2hieXRlc3MgMHhjNzNkYTliOSAweGYxNjFkYzM3IC8vIG1ldGhvZCAiZ2V0VmVyeUltcG9ydGFudFZhbHVlKClzdHJpbmciLCBtZXRob2QgInNpbXBsZUFiaU1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDUgbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgKwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE2CiAgICAvLyBwdWJsaWMgZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDIzNDMyCiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CjEbQQBKggIExz2puQTxYdw3NhoAjgIAIAADgQBDMRkURDEYRDYaARc2GgIXCBaABBUffHVMULCBAUMxGRREMRhEgAgVH3x1AAI0MrCBAUMxGUD/xjEYFESBAUM=", + "approval": "CjEYQAAZggINY29uY3JldGVTdGF0ZQd0ZXN0aW5nZzEbQQBKggIExz2puQTxYdw3NhoAjgIAIAADgQBDMRkURDEYRDYaARc2GgIXCBaABBUffHVMULCBAUMxGRREMRhEgAgVH3x1AAI0MrCBAUMxGUD/xjEYFESBAUM=", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir index 5222179f4..e5054028d 100644 --- a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir +++ b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir @@ -1,5 +1,11 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.constructor() + goto block@2 + block@2: // after_if_else_L1 let tmp%0#0: bool = tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__() return tmp%0#0 @@ -11,7 +17,7 @@ subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_ar block@1: // abi_routing_L14 let tmp%2#0: bytes = (txna ApplicationArgs 0) switch tmp%2#0 {method "getVeryImportantValue()string" => block@2, method "simpleAbiMethod(uint64,uint64)uint64" => block@3, * => block@4} - block@2: // getVeryImportantValue_route_L15 + block@2: // getVeryImportantValue_route_L16 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (== tmp%3#0 NoOp) (assert tmp%4#0) // OnCompletion is not NoOp @@ -63,7 +69,7 @@ subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_ar return 0u subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.getVeryImportantValue() -> bytes: - block@0: // L15 + block@0: // L16 return "42" subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a: uint64, b: uint64) -> uint64: @@ -73,4 +79,14 @@ subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() -> void: block@0: // L14 + return + +subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.constructor() -> void: + block@0: // L14 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() + (app_global_put "concreteState" "testing") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir index cef0a3766..4ddc1bcd8 100644 --- a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir +++ b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir @@ -1,11 +1,17 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + (app_global_put "concreteState" "testing") + goto block@2 + block@2: // after_if_else_L1 let tmp%0#1: uint64 = (txn NumAppArgs) - goto tmp%0#1 ? block@2 : block@7 - block@2: // abi_routing_L14 + goto tmp%0#1 ? block@4 : block@9 + block@4: // abi_routing_L14 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getVeryImportantValue()string" => block@3, method "simpleAbiMethod(uint64,uint64)uint64" => block@4, * => block@11} - block@3: // getVeryImportantValue_route_L15 + switch tmp%2#0 {method "getVeryImportantValue()string" => block@5, method "simpleAbiMethod(uint64,uint64)uint64" => block@6, * => block@13} + block@5: // getVeryImportantValue_route_L16 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (! tmp%3#0) (assert tmp%4#0) // OnCompletion is not NoOp @@ -13,8 +19,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP (assert tmp%5#0) // can only call when not creating (log 0x151f7c7500023432) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0: bool = 1u - goto block@12 - block@4: // simpleAbiMethod_route_L17 + goto block@14 + block@6: // simpleAbiMethod_route_L17 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is not NoOp @@ -29,19 +35,19 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%14#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%14#0) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1: bool = 1u - goto block@12 - block@7: // bare_routing_L14 + goto block@14 + block@9: // bare_routing_L14 let tmp%15#0: uint64 = (txn OnCompletion) - goto tmp%15#0 ? block@11 : block@8 - block@8: // __algots__.defaultCreate_L14 + goto tmp%15#0 ? block@13 : block@10 + block@10: // __algots__.defaultCreate_L14 let tmp%16#0: uint64 = (txn ApplicationID) let tmp%17#0: bool = (! tmp%16#0) (assert tmp%17#0) // can only call when creating let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2: bool = 1u - goto block@12 - block@11: // after_if_else_L14 + goto block@14 + block@13: // after_if_else_L14 let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3: bool = 0u - goto block@12 - block@12: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@8, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@11) + goto block@14 + block@14: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@5, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@6, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@10, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@13) return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir index cef0a3766..4ddc1bcd8 100644 --- a/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/o2/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir @@ -1,11 +1,17 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + (app_global_put "concreteState" "testing") + goto block@2 + block@2: // after_if_else_L1 let tmp%0#1: uint64 = (txn NumAppArgs) - goto tmp%0#1 ? block@2 : block@7 - block@2: // abi_routing_L14 + goto tmp%0#1 ? block@4 : block@9 + block@4: // abi_routing_L14 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getVeryImportantValue()string" => block@3, method "simpleAbiMethod(uint64,uint64)uint64" => block@4, * => block@11} - block@3: // getVeryImportantValue_route_L15 + switch tmp%2#0 {method "getVeryImportantValue()string" => block@5, method "simpleAbiMethod(uint64,uint64)uint64" => block@6, * => block@13} + block@5: // getVeryImportantValue_route_L16 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (! tmp%3#0) (assert tmp%4#0) // OnCompletion is not NoOp @@ -13,8 +19,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP (assert tmp%5#0) // can only call when not creating (log 0x151f7c7500023432) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0: bool = 1u - goto block@12 - block@4: // simpleAbiMethod_route_L17 + goto block@14 + block@6: // simpleAbiMethod_route_L17 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is not NoOp @@ -29,19 +35,19 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%14#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%14#0) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1: bool = 1u - goto block@12 - block@7: // bare_routing_L14 + goto block@14 + block@9: // bare_routing_L14 let tmp%15#0: uint64 = (txn OnCompletion) - goto tmp%15#0 ? block@11 : block@8 - block@8: // __algots__.defaultCreate_L14 + goto tmp%15#0 ? block@13 : block@10 + block@10: // __algots__.defaultCreate_L14 let tmp%16#0: uint64 = (txn ApplicationID) let tmp%17#0: bool = (! tmp%16#0) (assert tmp%17#0) // can only call when creating let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2: bool = 1u - goto block@12 - block@11: // after_if_else_L14 + goto block@14 + block@13: // after_if_else_L14 let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3: bool = 0u - goto block@12 - block@12: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@8, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@11) + goto block@14 + block@14: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@5, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@6, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@10, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@13) return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o2/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir b/tests/approvals/out/o2/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir index 13b2f6198..9f74e17a2 100644 --- a/tests/approvals/out/o2/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir +++ b/tests/approvals/out/o2/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir @@ -3274,11 +3274,16 @@ subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.test4() -> void: (assert tmp%14#0) // expected clear state page return +subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: + block@0: // L7 + return + subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() -> void: block@0: // L7 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "name" 0x) return -subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: - block@0: // L7 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir b/tests/approvals/out/o2/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir index d19441684..b76f21412 100644 --- a/tests/approvals/out/o2/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir +++ b/tests/approvals/out/o2/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir @@ -86,12 +86,6 @@ subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.methodOne() -> byt block@0: // L19 return "base-one" -subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: - block@0: // L17 - tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() - (app_global_put "stateOne" 45u) - return - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: block@0: // L8 return "common" @@ -100,11 +94,22 @@ subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride( block@0: // L12 return "common" +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: + block@0: // L17 + return + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: + block@0: // L17 + tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() + (app_global_put "stateOne" 45u) + return + subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: - block@0: // L17 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir b/tests/approvals/out/o2/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir index 77b35fa13..dadd2cfc3 100644 --- a/tests/approvals/out/o2/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir +++ b/tests/approvals/out/o2/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir @@ -90,21 +90,26 @@ subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() - block@0: // L35 return "base-two" +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: + block@0: // L8 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: + block@0: // L24 + return + subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: block@0: // L24 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateTwo" "Hello") return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: - block@0: // L8 - return "common" - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: - block@0: // L24 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir b/tests/approvals/out/o2/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir index d217ab841..9cfbfedfb 100644 --- a/tests/approvals/out/o2/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir +++ b/tests/approvals/out/o2/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir @@ -75,11 +75,16 @@ subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride( block@0: // L12 return "common" +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: + block@0: // L5 + return + subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: - block@0: // L5 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir b/tests/approvals/out/o2/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir index 68539cb46..5bb6d99be 100644 --- a/tests/approvals/out/o2/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir +++ b/tests/approvals/out/o2/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir @@ -176,6 +176,30 @@ subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.callB2Common() let tmp%0#0: bytes = tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() return tmp%0#0 +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.methodOne() -> bytes: + block@0: // L19 + return "base-one" + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: + block@0: // L8 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: + block@0: // L12 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: + block@0: // L26 + return "base-two" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: + block@0: // L35 + return "base-two" + +subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: + block@0: // L40 + return + subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.constructor() -> void: block@0: // L40 polytype/lib/polytype-module.d.ts::ClusteredContract.constructor() @@ -188,43 +212,24 @@ subroutine polytype/lib/polytype-module.d.ts::ClusteredContract bytes: - block@0: // L19 - return "base-one" - subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: block@0: // L17 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateOne" 45u) return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: - block@0: // L8 - return "common" - -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: - block@0: // L12 - return "common" - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: - block@0: // L26 - return "base-two" - -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: - block@0: // L35 - return "base-two" +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 + return subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: block@0: // L24 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateTwo" "Hello") - return - -subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: - block@0: // L40 return \ No newline at end of file diff --git a/tests/approvals/out/o2/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir b/tests/approvals/out/o2/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir index 182087125..1566b6282 100644 --- a/tests/approvals/out/o2/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir +++ b/tests/approvals/out/o2/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir @@ -96,5 +96,10 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "greeting" "") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir b/tests/approvals/out/o2/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir index f9129c0aa..608e586a7 100644 --- a/tests/approvals/out/o2/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir +++ b/tests/approvals/out/o2/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir @@ -74,12 +74,6 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.create() -> v block@0: // L30 return -subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: - block@0: // L25 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) - return - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: block@0: // L6 return @@ -97,7 +91,18 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes let tmp%2#0: bytes = (concat tmp%1#0 name#0) return tmp%2#0 +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: + block@0: // L25 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) + return + subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "greeting" "") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir b/tests/approvals/out/o2/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir index 63d0f269b..e448d3e02 100644 --- a/tests/approvals/out/o2/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir +++ b/tests/approvals/out/o2/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir @@ -74,12 +74,6 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.c block@0: // L40 return -subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: - block@0: // L35 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) - return - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: block@0: // L6 return @@ -97,7 +91,18 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes let tmp%2#0: bytes = (concat tmp%1#0 name#0) return tmp%2#0 +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: + block@0: // L35 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) + return + subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "greeting" "") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir b/tests/approvals/out/o2/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir index 8486b5b8d..a0777844d 100644 --- a/tests/approvals/out/o2/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir +++ b/tests/approvals/out/o2/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir @@ -54,11 +54,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: + block@0: // L4 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: - block@0: // L4 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir b/tests/approvals/out/o2/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir index 4c4df7e59..47ab50b8e 100644 --- a/tests/approvals/out/o2/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir +++ b/tests/approvals/out/o2/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir @@ -61,11 +61,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: + block@0: // L27 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: - block@0: // L27 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir b/tests/approvals/out/o2/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir index cd5bdac35..37a285cdc 100644 --- a/tests/approvals/out/o2/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir +++ b/tests/approvals/out/o2/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir @@ -54,11 +54,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: + block@0: // L24 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: - block@0: // L24 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir b/tests/approvals/out/o2/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir index bb5a730b5..e9b585d28 100644 --- a/tests/approvals/out/o2/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir +++ b/tests/approvals/out/o2/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir @@ -60,11 +60,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: + block@0: // L15 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: - block@0: // L15 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir b/tests/approvals/out/o2/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir index f09712fcc..728f439b6 100644 --- a/tests/approvals/out/o2/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir +++ b/tests/approvals/out/o2/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir @@ -24,5 +24,10 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir b/tests/approvals/out/o2/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir index 6e4e09298..5543184c2 100644 --- a/tests/approvals/out/o2/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir +++ b/tests/approvals/out/o2/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir @@ -24,5 +24,10 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir b/tests/approvals/out/o2/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir index c1abca70e..d9e0dba34 100644 --- a/tests/approvals/out/o2/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir +++ b/tests/approvals/out/o2/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir @@ -34,5 +34,10 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/o2/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir b/tests/approvals/out/o2/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir index c916dc08c..3f7b45db0 100644 --- a/tests/approvals/out/o2/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir +++ b/tests/approvals/out/o2/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir @@ -14,5 +14,10 @@ main tests/approvals/super-calls.algo.ts::SuperContract.approvalProgram: subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.approval.teal b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.approval.teal index dfd2280c4..fcbbc0199 100644 --- a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.approval.teal +++ b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.approval.teal @@ -184,6 +184,10 @@ methodWithDefaults: // tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() -> void: constructor: + +constructor_block@1: + +constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/abi-decorators.algo.ts:16 // globalValue = GlobalState({ initialValue: Uint64(123) }) pushbytes "globalValue" diff --git a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.arc32.json b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.arc32.json index 9bd79d455..5817764d3 100644 --- a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.arc32.json +++ b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.arc32.json @@ -53,7 +53,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTIKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhmOTAyMGQ1YSAvLyBtZXRob2QgImp1c3ROb29wKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTE3OWY5ZDQgLy8gbWV0aG9kICJjcmVhdGVNZXRob2QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg2M2MyN2FiYSAvLyBtZXRob2QgImFsbEFjdGlvbnMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgxNGQxYjZlYSAvLyBtZXRob2QgIm92ZXJyaWRlUmVhZG9ubHlOYW1lKCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHhjMTM2NzM3NCAvLyBtZXRob2QgIm1ldGhvZFdpdGhEZWZhdWx0cyh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDUKICAgIG1hdGNoIG1haW5fanVzdE5vb3Bfcm91dGVANSBtYWluX2NyZWF0ZU1ldGhvZF9yb3V0ZUA2IG1haW5fYWxsQWN0aW9uc19yb3V0ZUA3IG1haW5fb3ZlcnJpZGVSZWFkb25seU5hbWVfcm91dGVAOCBtYWluX21ldGhvZFdpdGhEZWZhdWx0c19yb3V0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNDoKICAgIHJldHVybgoKbWFpbl9tZXRob2RXaXRoRGVmYXVsdHNfcm91dGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBhOiB7IGZyb206ICdnbG9iYWxWYWx1ZScgfSwgYjogeyBmcm9tOiAncmVhZG9ubHknIH0sIGM6IHsgY29uc3RhbnQ6IDE0NSB9IH0gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYTogeyBmcm9tOiAnZ2xvYmFsVmFsdWUnIH0sIGI6IHsgZnJvbTogJ3JlYWRvbmx5JyB9LCBjOiB7IGNvbnN0YW50OiAxNDUgfSB9IH0pCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICBjYWxsc3ViIG1ldGhvZFdpdGhEZWZhdWx0cwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX292ZXJyaWRlUmVhZG9ubHlOYW1lX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBuYW1lOiAnb3ZlcnJpZGVSZWFkb25seU5hbWUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJlYWRvbmx5CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYWxsQWN0aW9uc19yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJywgJ0Nsb3NlT3V0JywgJ0RlbGV0ZUFwcGxpY2F0aW9uJywgJ1VwZGF0ZUFwcGxpY2F0aW9uJ10gfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFsbEFjdGlvbnMKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9jcmVhdGVNZXRob2Rfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjcKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlTWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fanVzdE5vb3Bfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBqdXN0Tm9vcAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2JhcmVfcm91dGluZ0AxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuanVzdE5vb3AoKSAtPiB2b2lkOgpqdXN0Tm9vcDoKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmNyZWF0ZU1ldGhvZCgpIC0+IHZvaWQ6CmNyZWF0ZU1ldGhvZDoKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmFsbEFjdGlvbnMoKSAtPiB2b2lkOgphbGxBY3Rpb25zOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMucmVhZG9ubHkoKSAtPiB1aW50NjQ6CnJlYWRvbmx5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiA1CiAgICBwdXNoaW50IDUgLy8gNQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMubWV0aG9kV2l0aERlZmF1bHRzKGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQpIC0+IHVpbnQ2NDoKbWV0aG9kV2l0aERlZmF1bHRzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTgtMTkKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGE6IHsgZnJvbTogJ2dsb2JhbFZhbHVlJyB9LCBiOiB7IGZyb206ICdyZWFkb25seScgfSwgYzogeyBjb25zdGFudDogMTQ1IH0gfSB9KQogICAgLy8gcHVibGljIG1ldGhvZFdpdGhEZWZhdWx0cyhhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBhICogYiArIGMKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICAqCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxNgogICAgLy8gZ2xvYmFsVmFsdWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEyMykgfSkKICAgIHB1c2hieXRlcyAiZ2xvYmFsVmFsdWUiCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTIKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhmOTAyMGQ1YSAvLyBtZXRob2QgImp1c3ROb29wKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTE3OWY5ZDQgLy8gbWV0aG9kICJjcmVhdGVNZXRob2QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg2M2MyN2FiYSAvLyBtZXRob2QgImFsbEFjdGlvbnMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgxNGQxYjZlYSAvLyBtZXRob2QgIm92ZXJyaWRlUmVhZG9ubHlOYW1lKCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHhjMTM2NzM3NCAvLyBtZXRob2QgIm1ldGhvZFdpdGhEZWZhdWx0cyh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDUKICAgIG1hdGNoIG1haW5fanVzdE5vb3Bfcm91dGVANSBtYWluX2NyZWF0ZU1ldGhvZF9yb3V0ZUA2IG1haW5fYWxsQWN0aW9uc19yb3V0ZUA3IG1haW5fb3ZlcnJpZGVSZWFkb25seU5hbWVfcm91dGVAOCBtYWluX21ldGhvZFdpdGhEZWZhdWx0c19yb3V0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNDoKICAgIHJldHVybgoKbWFpbl9tZXRob2RXaXRoRGVmYXVsdHNfcm91dGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBhOiB7IGZyb206ICdnbG9iYWxWYWx1ZScgfSwgYjogeyBmcm9tOiAncmVhZG9ubHknIH0sIGM6IHsgY29uc3RhbnQ6IDE0NSB9IH0gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYTogeyBmcm9tOiAnZ2xvYmFsVmFsdWUnIH0sIGI6IHsgZnJvbTogJ3JlYWRvbmx5JyB9LCBjOiB7IGNvbnN0YW50OiAxNDUgfSB9IH0pCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICBjYWxsc3ViIG1ldGhvZFdpdGhEZWZhdWx0cwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX292ZXJyaWRlUmVhZG9ubHlOYW1lX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBuYW1lOiAnb3ZlcnJpZGVSZWFkb25seU5hbWUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJlYWRvbmx5CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYWxsQWN0aW9uc19yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJywgJ0Nsb3NlT3V0JywgJ0RlbGV0ZUFwcGxpY2F0aW9uJywgJ1VwZGF0ZUFwcGxpY2F0aW9uJ10gfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFsbEFjdGlvbnMKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9jcmVhdGVNZXRob2Rfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjcKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlTWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fanVzdE5vb3Bfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBqdXN0Tm9vcAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2JhcmVfcm91dGluZ0AxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuanVzdE5vb3AoKSAtPiB2b2lkOgpqdXN0Tm9vcDoKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmNyZWF0ZU1ldGhvZCgpIC0+IHZvaWQ6CmNyZWF0ZU1ldGhvZDoKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmFsbEFjdGlvbnMoKSAtPiB2b2lkOgphbGxBY3Rpb25zOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMucmVhZG9ubHkoKSAtPiB1aW50NjQ6CnJlYWRvbmx5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiA1CiAgICBwdXNoaW50IDUgLy8gNQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMubWV0aG9kV2l0aERlZmF1bHRzKGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQpIC0+IHVpbnQ2NDoKbWV0aG9kV2l0aERlZmF1bHRzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTgtMTkKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGE6IHsgZnJvbTogJ2dsb2JhbFZhbHVlJyB9LCBiOiB7IGZyb206ICdyZWFkb25seScgfSwgYzogeyBjb25zdGFudDogMTQ1IH0gfSB9KQogICAgLy8gcHVibGljIG1ldGhvZFdpdGhEZWZhdWx0cyhhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBhICogYiArIGMKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICAqCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6Cgpjb25zdHJ1Y3Rvcl9ibG9ja0AxOgoKY29uc3RydWN0b3JfYWZ0ZXJfaW5saW5lZF9AYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY29uc3RydWN0b3JAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE2CiAgICAvLyBnbG9iYWxWYWx1ZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMTIzKSB9KQogICAgcHVzaGJ5dGVzICJnbG9iYWxWYWx1ZSIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.arc56.json b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.arc56.json index 4f5afce29..121dc37f3 100644 --- a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.arc56.json +++ b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.arc56.json @@ -187,7 +187,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTIKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhmOTAyMGQ1YSAvLyBtZXRob2QgImp1c3ROb29wKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTE3OWY5ZDQgLy8gbWV0aG9kICJjcmVhdGVNZXRob2QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg2M2MyN2FiYSAvLyBtZXRob2QgImFsbEFjdGlvbnMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgxNGQxYjZlYSAvLyBtZXRob2QgIm92ZXJyaWRlUmVhZG9ubHlOYW1lKCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHhjMTM2NzM3NCAvLyBtZXRob2QgIm1ldGhvZFdpdGhEZWZhdWx0cyh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDUKICAgIG1hdGNoIG1haW5fanVzdE5vb3Bfcm91dGVANSBtYWluX2NyZWF0ZU1ldGhvZF9yb3V0ZUA2IG1haW5fYWxsQWN0aW9uc19yb3V0ZUA3IG1haW5fb3ZlcnJpZGVSZWFkb25seU5hbWVfcm91dGVAOCBtYWluX21ldGhvZFdpdGhEZWZhdWx0c19yb3V0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNDoKICAgIHJldHVybgoKbWFpbl9tZXRob2RXaXRoRGVmYXVsdHNfcm91dGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBhOiB7IGZyb206ICdnbG9iYWxWYWx1ZScgfSwgYjogeyBmcm9tOiAncmVhZG9ubHknIH0sIGM6IHsgY29uc3RhbnQ6IDE0NSB9IH0gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYTogeyBmcm9tOiAnZ2xvYmFsVmFsdWUnIH0sIGI6IHsgZnJvbTogJ3JlYWRvbmx5JyB9LCBjOiB7IGNvbnN0YW50OiAxNDUgfSB9IH0pCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICBjYWxsc3ViIG1ldGhvZFdpdGhEZWZhdWx0cwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX292ZXJyaWRlUmVhZG9ubHlOYW1lX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBuYW1lOiAnb3ZlcnJpZGVSZWFkb25seU5hbWUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJlYWRvbmx5CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYWxsQWN0aW9uc19yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJywgJ0Nsb3NlT3V0JywgJ0RlbGV0ZUFwcGxpY2F0aW9uJywgJ1VwZGF0ZUFwcGxpY2F0aW9uJ10gfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFsbEFjdGlvbnMKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9jcmVhdGVNZXRob2Rfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjcKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlTWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fanVzdE5vb3Bfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBqdXN0Tm9vcAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2JhcmVfcm91dGluZ0AxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuanVzdE5vb3AoKSAtPiB2b2lkOgpqdXN0Tm9vcDoKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmNyZWF0ZU1ldGhvZCgpIC0+IHZvaWQ6CmNyZWF0ZU1ldGhvZDoKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmFsbEFjdGlvbnMoKSAtPiB2b2lkOgphbGxBY3Rpb25zOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMucmVhZG9ubHkoKSAtPiB1aW50NjQ6CnJlYWRvbmx5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiA1CiAgICBwdXNoaW50IDUgLy8gNQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMubWV0aG9kV2l0aERlZmF1bHRzKGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQpIC0+IHVpbnQ2NDoKbWV0aG9kV2l0aERlZmF1bHRzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTgtMTkKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGE6IHsgZnJvbTogJ2dsb2JhbFZhbHVlJyB9LCBiOiB7IGZyb206ICdyZWFkb25seScgfSwgYzogeyBjb25zdGFudDogMTQ1IH0gfSB9KQogICAgLy8gcHVibGljIG1ldGhvZFdpdGhEZWZhdWx0cyhhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBhICogYiArIGMKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICAqCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxNgogICAgLy8gZ2xvYmFsVmFsdWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEyMykgfSkKICAgIHB1c2hieXRlcyAiZ2xvYmFsVmFsdWUiCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTIKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhmOTAyMGQ1YSAvLyBtZXRob2QgImp1c3ROb29wKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTE3OWY5ZDQgLy8gbWV0aG9kICJjcmVhdGVNZXRob2QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg2M2MyN2FiYSAvLyBtZXRob2QgImFsbEFjdGlvbnMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgxNGQxYjZlYSAvLyBtZXRob2QgIm92ZXJyaWRlUmVhZG9ubHlOYW1lKCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHhjMTM2NzM3NCAvLyBtZXRob2QgIm1ldGhvZFdpdGhEZWZhdWx0cyh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDUKICAgIG1hdGNoIG1haW5fanVzdE5vb3Bfcm91dGVANSBtYWluX2NyZWF0ZU1ldGhvZF9yb3V0ZUA2IG1haW5fYWxsQWN0aW9uc19yb3V0ZUA3IG1haW5fb3ZlcnJpZGVSZWFkb25seU5hbWVfcm91dGVAOCBtYWluX21ldGhvZFdpdGhEZWZhdWx0c19yb3V0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNDoKICAgIHJldHVybgoKbWFpbl9tZXRob2RXaXRoRGVmYXVsdHNfcm91dGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBhOiB7IGZyb206ICdnbG9iYWxWYWx1ZScgfSwgYjogeyBmcm9tOiAncmVhZG9ubHknIH0sIGM6IHsgY29uc3RhbnQ6IDE0NSB9IH0gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYTogeyBmcm9tOiAnZ2xvYmFsVmFsdWUnIH0sIGI6IHsgZnJvbTogJ3JlYWRvbmx5JyB9LCBjOiB7IGNvbnN0YW50OiAxNDUgfSB9IH0pCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICBjYWxsc3ViIG1ldGhvZFdpdGhEZWZhdWx0cwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX292ZXJyaWRlUmVhZG9ubHlOYW1lX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBuYW1lOiAnb3ZlcnJpZGVSZWFkb25seU5hbWUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJlYWRvbmx5CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYWxsQWN0aW9uc19yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJywgJ0Nsb3NlT3V0JywgJ0RlbGV0ZUFwcGxpY2F0aW9uJywgJ1VwZGF0ZUFwcGxpY2F0aW9uJ10gfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFsbEFjdGlvbnMKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9jcmVhdGVNZXRob2Rfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjcKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlTWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fanVzdE5vb3Bfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBqdXN0Tm9vcAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2JhcmVfcm91dGluZ0AxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuanVzdE5vb3AoKSAtPiB2b2lkOgpqdXN0Tm9vcDoKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmNyZWF0ZU1ldGhvZCgpIC0+IHZvaWQ6CmNyZWF0ZU1ldGhvZDoKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmFsbEFjdGlvbnMoKSAtPiB2b2lkOgphbGxBY3Rpb25zOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMucmVhZG9ubHkoKSAtPiB1aW50NjQ6CnJlYWRvbmx5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiA1CiAgICBwdXNoaW50IDUgLy8gNQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMubWV0aG9kV2l0aERlZmF1bHRzKGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQpIC0+IHVpbnQ2NDoKbWV0aG9kV2l0aERlZmF1bHRzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTgtMTkKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGE6IHsgZnJvbTogJ2dsb2JhbFZhbHVlJyB9LCBiOiB7IGZyb206ICdyZWFkb25seScgfSwgYzogeyBjb25zdGFudDogMTQ1IH0gfSB9KQogICAgLy8gcHVibGljIG1ldGhvZFdpdGhEZWZhdWx0cyhhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBhICogYiArIGMKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICAqCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6Cgpjb25zdHJ1Y3Rvcl9ibG9ja0AxOgoKY29uc3RydWN0b3JfYWZ0ZXJfaW5saW5lZF9AYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY29uc3RydWN0b3JAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE2CiAgICAvLyBnbG9iYWxWYWx1ZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMTIzKSB9KQogICAgcHVzaGJ5dGVzICJnbG9iYWxWYWx1ZSIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { diff --git a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir index 8f6a49274..b02ee5cea 100644 --- a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir @@ -104,5 +104,10 @@ subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.methodWithDefau subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "globalValue" 123u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.1.ssa.array.ir index 4307c6c9e..513dd3dde 100644 --- a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.1.ssa.array.ir @@ -110,5 +110,9 @@ subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.methodWithDefau subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "globalValue" 123u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.2.ssa.slot.ir index 4307c6c9e..513dd3dde 100644 --- a/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.2.ssa.slot.ir @@ -110,5 +110,9 @@ subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.methodWithDefau subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "globalValue" 123u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/abi-decorators/abi-decorators.awst b/tests/approvals/out/unoptimized/abi-decorators/abi-decorators.awst index 1fdf2ff0b..991e7c3ec 100644 --- a/tests/approvals/out/unoptimized/abi-decorators/abi-decorators.awst +++ b/tests/approvals/out/unoptimized/abi-decorators/abi-decorators.awst @@ -40,10 +40,14 @@ contract AbiDecorators constructor(): void { - void + super.constructor() GlobalState["globalValue"]: uint64 = 123 } + BaseContract::constructor(): void + { + } + } contract OverloadedMethods { diff --git a/tests/approvals/out/unoptimized/abi-decorators/abi-decorators.awst.json b/tests/approvals/out/unoptimized/abi-decorators/abi-decorators.awst.json index 9ea0499bf..9f09d9eed 100644 --- a/tests/approvals/out/unoptimized/abi-decorators/abi-decorators.awst.json +++ b/tests/approvals/out/unoptimized/abi-decorators/abi-decorators.awst.json @@ -841,7 +841,7 @@ "end_column": 53 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/abi-decorators.algo.ts", "line": 4, @@ -855,7 +855,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -938,6 +943,49 @@ "cref": "tests/approvals/abi-decorators.algo.ts::AbiDecorators", "member_name": "constructor", "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.approval.teal b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.approval.teal new file mode 100644 index 000000000..082c3e09a --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.approval.teal @@ -0,0 +1,128 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + intcblock 0 1 + bytecblock 0x151f7c75 + +main_block@1: + // tests/approvals/arc4-method-selector.algo.ts:4 + // class ContractOne extends Contract { + txn NumAppArgs + intc_0 // 0 + != + bz main_bare_routing@7 + +main_abi_routing@2: + // tests/approvals/arc4-method-selector.algo.ts:4 + // class ContractOne extends Contract { + txna ApplicationArgs 0 + pushbytes 0x2ad746ef // method "test()byte[]" + pushbytes 0xc2e9596e // method "someMethod()uint64" + uncover 2 + match main_test_route@3 main_someMethod_route@4 + +main_switch_case_default@5: + +main_switch_case_next@6: + +main_after_if_else@11: + // tests/approvals/arc4-method-selector.algo.ts:4 + // class ContractOne extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__@12: + return + +main_someMethod_route@4: + // tests/approvals/arc4-method-selector.algo.ts:8 + // someMethod() { + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub someMethod + itob + bytec_0 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + b main_after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__@12 + +main_test_route@3: + // tests/approvals/arc4-method-selector.algo.ts:5 + // test() { + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub test + dup + len + itob + extract 6 2 + swap + concat + bytec_0 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + b main_after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__@12 + +main_bare_routing@7: + // tests/approvals/arc4-method-selector.algo.ts:4 + // class ContractOne extends Contract { + txn OnCompletion + intc_0 // 0 + swap + match main___algots__.defaultCreate@8 + +main_switch_case_default@9: + +main_switch_case_next@10: + b main_after_if_else@11 + +main___algots__.defaultCreate@8: + // tests/approvals/arc4-method-selector.algo.ts:4 + // class ContractOne extends Contract { + txn ApplicationID + intc_0 // 0 + == + assert // can only call when creating + callsub __algots__.defaultCreate + intc_1 // 1 + b main_after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__@12 + + +// tests/approvals/arc4-method-selector.algo.ts::ContractOne.test() -> bytes: +test: + // tests/approvals/arc4-method-selector.algo.ts:6 + // return methodSelector(ContractTwo.prototype.someMethod) + pushbytes 0x438c64f3 // method "renamedSomeMethod()void" + retsub + + +// tests/approvals/arc4-method-selector.algo.ts::ContractOne.someMethod() -> uint64: +someMethod: + // tests/approvals/arc4-method-selector.algo.ts:22 + // const someConst = Uint64(123) + pushint 123 // 123 + // tests/approvals/arc4-method-selector.algo.ts:9 + // return someConst + retsub + + +// tests/approvals/arc4-method-selector.algo.ts::ContractOne.__algots__.defaultCreate() -> void: +__algots__.defaultCreate: + retsub diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.arc32.json b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.arc32.json new file mode 100644 index 000000000..d481757d6 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.arc32.json @@ -0,0 +1,63 @@ +{ + "hints": { + "test()byte[]": { + "call_config": { + "no_op": "CALL" + } + }, + "someMethod()uint64": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjQKICAgIC8vIGNsYXNzIENvbnRyYWN0T25lIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6NAogICAgLy8gY2xhc3MgQ29udHJhY3RPbmUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyYWQ3NDZlZiAvLyBtZXRob2QgInRlc3QoKWJ5dGVbXSIKICAgIHB1c2hieXRlcyAweGMyZTk1OTZlIC8vIG1ldGhvZCAic29tZU1ldGhvZCgpdWludDY0IgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX3Rlc3Rfcm91dGVAMyBtYWluX3NvbWVNZXRob2Rfcm91dGVANAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDU6CgptYWluX3N3aXRjaF9jYXNlX25leHRANjoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjQKICAgIC8vIGNsYXNzIENvbnRyYWN0T25lIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RPbmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTI6CiAgICByZXR1cm4KCm1haW5fc29tZU1ldGhvZF9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OAogICAgLy8gc29tZU1ldGhvZCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc29tZU1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjpDb250cmFjdE9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl90ZXN0X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo1CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjpDb250cmFjdE9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjQKICAgIC8vIGNsYXNzIENvbnRyYWN0T25lIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo0CiAgICAvLyBjbGFzcyBDb250cmFjdE9uZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OkNvbnRyYWN0T25lLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OkNvbnRyYWN0T25lLnRlc3QoKSAtPiBieXRlczoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjYKICAgIC8vIHJldHVybiBtZXRob2RTZWxlY3RvcihDb250cmFjdFR3by5wcm90b3R5cGUuc29tZU1ldGhvZCkKICAgIHB1c2hieXRlcyAweDQzOGM2NGYzIC8vIG1ldGhvZCAicmVuYW1lZFNvbWVNZXRob2QoKXZvaWQiCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RPbmUuc29tZU1ldGhvZCgpIC0+IHVpbnQ2NDoKc29tZU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjIyCiAgICAvLyBjb25zdCBzb21lQ29uc3QgPSBVaW50NjQoMTIzKQogICAgcHVzaGludCAxMjMgLy8gMTIzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo5CiAgICAvLyByZXR1cm4gc29tZUNvbnN0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RPbmUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": {}, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "ContractOne", + "methods": [ + { + "name": "test", + "args": [], + "readonly": false, + "returns": { + "type": "byte[]" + } + }, + { + "name": "someMethod", + "args": [], + "readonly": false, + "returns": { + "type": "uint64" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.arc56.json b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.arc56.json new file mode 100644 index 000000000..14846057b --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.arc56.json @@ -0,0 +1,120 @@ +{ + "name": "ContractOne", + "structs": {}, + "methods": [ + { + "name": "test", + "args": [], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "someMethod", + "args": [], + "returns": { + "type": "uint64" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 0, + "bytes": 0 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": {}, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 48, + 70 + ], + "errorMessage": "OnCompletion is not NoOp" + }, + { + "pc": [ + 110 + ], + "errorMessage": "can only call when creating" + }, + { + "pc": [ + 53, + 75 + ], + "errorMessage": "can only call when not creating" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjQKICAgIC8vIGNsYXNzIENvbnRyYWN0T25lIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6NAogICAgLy8gY2xhc3MgQ29udHJhY3RPbmUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyYWQ3NDZlZiAvLyBtZXRob2QgInRlc3QoKWJ5dGVbXSIKICAgIHB1c2hieXRlcyAweGMyZTk1OTZlIC8vIG1ldGhvZCAic29tZU1ldGhvZCgpdWludDY0IgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX3Rlc3Rfcm91dGVAMyBtYWluX3NvbWVNZXRob2Rfcm91dGVANAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDU6CgptYWluX3N3aXRjaF9jYXNlX25leHRANjoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjQKICAgIC8vIGNsYXNzIENvbnRyYWN0T25lIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RPbmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTI6CiAgICByZXR1cm4KCm1haW5fc29tZU1ldGhvZF9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OAogICAgLy8gc29tZU1ldGhvZCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc29tZU1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjpDb250cmFjdE9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl90ZXN0X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo1CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjpDb250cmFjdE9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjQKICAgIC8vIGNsYXNzIENvbnRyYWN0T25lIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo0CiAgICAvLyBjbGFzcyBDb250cmFjdE9uZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OkNvbnRyYWN0T25lLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OkNvbnRyYWN0T25lLnRlc3QoKSAtPiBieXRlczoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjYKICAgIC8vIHJldHVybiBtZXRob2RTZWxlY3RvcihDb250cmFjdFR3by5wcm90b3R5cGUuc29tZU1ldGhvZCkKICAgIHB1c2hieXRlcyAweDQzOGM2NGYzIC8vIG1ldGhvZCAicmVuYW1lZFNvbWVNZXRob2QoKXZvaWQiCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RPbmUuc29tZU1ldGhvZCgpIC0+IHVpbnQ2NDoKc29tZU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjIyCiAgICAvLyBjb25zdCBzb21lQ29uc3QgPSBVaW50NjQoMTIzKQogICAgcHVzaGludCAxMjMgLy8gMTIzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo5CiAgICAvLyByZXR1cm4gc29tZUNvbnN0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RPbmUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAQQVH3x1MRsiE0EATDYaAIAEKtdG74AEwulZbk8CjgIAGAACIkMxGSISRDEYIhNEiABEFihMULAjQv/pMRkiEkQxGCITRIgAJ0kVFlcGAkxQKExQsCNC/8wxGSJMjgEAA0L/wDEYIhJEiAAOI0L/tYAEQ4xk84mBe4mJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 4, + "patch": 0 + } + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.clear.teal b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.clear.teal new file mode 100644 index 000000000..a4d580477 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.clear.teal @@ -0,0 +1,7 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir new file mode 100644 index 000000000..cfdd13065 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.0.ssa.ir @@ -0,0 +1,71 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test()byte[]" => block@2, method "someMethod()uint64" => block@3, * => block@4} + block@2: // test_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/arc4-method-selector.algo.ts::ContractOne.test() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes[8] = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%7#0) + return 1u + block@3: // someMethod_route_L8 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (== tmp%8#0 NoOp) + (assert tmp%9#0) // OnCompletion is not NoOp + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (!= tmp%10#0 0u) + (assert tmp%11#0) // can only call when not creating + let to_encode%1#0: uint64 = tests/approvals/arc4-method-selector.algo.ts::ContractOne.someMethod() + let val_as_bytes%0#0: bytes[8] = (itob to_encode%1#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) + return 1u + block@4: // switch_case_default_L4 + goto block@5 + block@5: // switch_case_next_L4 + goto block@10 + block@6: // bare_routing_L4 + let tmp%13#0: uint64 = (txn OnCompletion) + switch tmp%13#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L4 + let tmp%14#0: uint64 = (txn ApplicationID) + let tmp%15#0: bool = (== tmp%14#0 0u) + (assert tmp%15#0) // can only call when creating + tests/approvals/arc4-method-selector.algo.ts::ContractOne.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L4 + goto block@9 + block@9: // switch_case_next_L4 + goto block@10 + block@10: // after_if_else_L4 + return 0u + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.test() -> bytes: + block@0: // L5 + return method "renamedSomeMethod()void" + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.someMethod() -> uint64: + block@0: // L8 + return 123u + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.__algots__.defaultCreate() -> void: + block@0: // L4 + return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir new file mode 100644 index 000000000..e03870a56 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.1.ssa.array.ir @@ -0,0 +1,75 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + goto block@1 + block@1: // L4 + let tmp%0#1: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#1 0u) + goto tmp%1#0 ? block@2 : block@7 + block@2: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test()byte[]" => block@3, method "someMethod()uint64" => block@4, * => block@5} + block@3: // test_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/arc4-method-selector.algo.ts::ContractOne.test() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes[8] = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%7#0) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // someMethod_route_L8 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (== tmp%8#0 NoOp) + (assert tmp%9#0) // OnCompletion is not NoOp + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (!= tmp%10#0 0u) + (assert tmp%11#0) // can only call when not creating + let to_encode%1#0: uint64 = tests/approvals/arc4-method-selector.algo.ts::ContractOne.someMethod() + let val_as_bytes%0#0: bytes[8] = (itob to_encode%1#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@5: // switch_case_default_L4 + goto block@6 + block@6: // switch_case_next_L4 + goto block@11 + block@7: // bare_routing_L4 + let tmp%13#0: uint64 = (txn OnCompletion) + switch tmp%13#0 {0u => block@8, * => block@9} + block@8: // __algots__.defaultCreate_L4 + let tmp%14#0: uint64 = (txn ApplicationID) + let tmp%15#0: bool = (== tmp%14#0 0u) + (assert tmp%15#0) // can only call when creating + tests/approvals/arc4-method-selector.algo.ts::ContractOne.__algots__.defaultCreate() + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@9: // switch_case_default_L4 + goto block@10 + block@10: // switch_case_next_L4 + goto block@11 + block@11: // after_if_else_L4 + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.test() -> bytes: + block@0: // L5 + return method "renamedSomeMethod()void" + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.someMethod() -> uint64: + block@0: // L8 + return 123u + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.__algots__.defaultCreate() -> void: + block@0: // L4 + return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir new file mode 100644 index 000000000..e03870a56 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.approval.2.ssa.slot.ir @@ -0,0 +1,75 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + goto block@1 + block@1: // L4 + let tmp%0#1: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#1 0u) + goto tmp%1#0 ? block@2 : block@7 + block@2: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test()byte[]" => block@3, method "someMethod()uint64" => block@4, * => block@5} + block@3: // test_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/arc4-method-selector.algo.ts::ContractOne.test() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes[8] = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%7#0) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // someMethod_route_L8 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (== tmp%8#0 NoOp) + (assert tmp%9#0) // OnCompletion is not NoOp + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (!= tmp%10#0 0u) + (assert tmp%11#0) // can only call when not creating + let to_encode%1#0: uint64 = tests/approvals/arc4-method-selector.algo.ts::ContractOne.someMethod() + let val_as_bytes%0#0: bytes[8] = (itob to_encode%1#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@5: // switch_case_default_L4 + goto block@6 + block@6: // switch_case_next_L4 + goto block@11 + block@7: // bare_routing_L4 + let tmp%13#0: uint64 = (txn OnCompletion) + switch tmp%13#0 {0u => block@8, * => block@9} + block@8: // __algots__.defaultCreate_L4 + let tmp%14#0: uint64 = (txn ApplicationID) + let tmp%15#0: bool = (== tmp%14#0 0u) + (assert tmp%15#0) // can only call when creating + tests/approvals/arc4-method-selector.algo.ts::ContractOne.__algots__.defaultCreate() + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@9: // switch_case_default_L4 + goto block@10 + block@10: // switch_case_next_L4 + goto block@11 + block@11: // after_if_else_L4 + let tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractOne.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.test() -> bytes: + block@0: // L5 + return method "renamedSomeMethod()void" + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.someMethod() -> uint64: + block@0: // L8 + return 123u + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractOne.__algots__.defaultCreate() -> void: + block@0: // L4 + return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.1.ssa.array.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractOne.ir/ContractOne.clear.2.ssa.slot.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.approval.teal b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.approval.teal new file mode 100644 index 000000000..78e5f8ebd --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.approval.teal @@ -0,0 +1,117 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + intcblock 0 1 + +main_block@1: + // tests/approvals/arc4-method-selector.algo.ts:13 + // class ContractTwo extends Contract { + txn NumAppArgs + intc_0 // 0 + != + bz main_bare_routing@7 + +main_abi_routing@2: + // tests/approvals/arc4-method-selector.algo.ts:13 + // class ContractTwo extends Contract { + txna ApplicationArgs 0 + pushbytes 0x438c64f3 // method "renamedSomeMethod()void" + pushbytes 0x2ad746ef // method "test()byte[]" + uncover 2 + match main_renamedSomeMethod_route@3 main_test_route@4 + +main_switch_case_default@5: + +main_switch_case_next@6: + +main_after_if_else@11: + // tests/approvals/arc4-method-selector.algo.ts:13 + // class ContractTwo extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__@12: + return + +main_test_route@4: + // tests/approvals/arc4-method-selector.algo.ts:17 + // test() { + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub test + dup + len + itob + extract 6 2 + swap + concat + pushbytes 0x151f7c75 + swap + concat + log + intc_1 // 1 + b main_after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__@12 + +main_renamedSomeMethod_route@3: + // tests/approvals/arc4-method-selector.algo.ts:14 + // @abimethod({ name: 'renamedSomeMethod' }) + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub someMethod + intc_1 // 1 + b main_after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__@12 + +main_bare_routing@7: + // tests/approvals/arc4-method-selector.algo.ts:13 + // class ContractTwo extends Contract { + txn OnCompletion + intc_0 // 0 + swap + match main___algots__.defaultCreate@8 + +main_switch_case_default@9: + +main_switch_case_next@10: + b main_after_if_else@11 + +main___algots__.defaultCreate@8: + // tests/approvals/arc4-method-selector.algo.ts:13 + // class ContractTwo extends Contract { + txn ApplicationID + intc_0 // 0 + == + assert // can only call when creating + callsub __algots__.defaultCreate + intc_1 // 1 + b main_after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__@12 + + +// tests/approvals/arc4-method-selector.algo.ts::ContractTwo.someMethod() -> void: +someMethod: + retsub + + +// tests/approvals/arc4-method-selector.algo.ts::ContractTwo.test() -> bytes: +test: + // tests/approvals/arc4-method-selector.algo.ts:18 + // return methodSelector(ContractOne.prototype.someMethod) + pushbytes 0xc2e9596e // method "someMethod()uint64" + retsub + + +// tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__algots__.defaultCreate() -> void: +__algots__.defaultCreate: + retsub diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.arc32.json b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.arc32.json new file mode 100644 index 000000000..148872359 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.arc32.json @@ -0,0 +1,63 @@ +{ + "hints": { + "renamedSomeMethod()void": { + "call_config": { + "no_op": "CALL" + } + }, + "test()byte[]": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0MzhjNjRmMyAvLyBtZXRob2QgInJlbmFtZWRTb21lTWV0aG9kKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4MmFkNzQ2ZWYgLy8gbWV0aG9kICJ0ZXN0KClieXRlW10iCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIG1haW5fcmVuYW1lZFNvbWVNZXRob2Rfcm91dGVAMyBtYWluX3Rlc3Rfcm91dGVANAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDU6CgptYWluX3N3aXRjaF9jYXNlX25leHRANjoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBDb250cmFjdFR3byBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OkNvbnRyYWN0VHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyOgogICAgcmV0dXJuCgptYWluX3Rlc3Rfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjE3CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OkNvbnRyYWN0VHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX3JlbmFtZWRTb21lTWV0aG9kX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxNAogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdyZW5hbWVkU29tZU1ldGhvZCcgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc29tZU1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjpDb250cmFjdFR3by5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBDb250cmFjdFR3byBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIENvbnRyYWN0VHdvIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RUd28uX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RUd28uc29tZU1ldGhvZCgpIC0+IHZvaWQ6CnNvbWVNZXRob2Q6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RUd28udGVzdCgpIC0+IGJ5dGVzOgp0ZXN0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBtZXRob2RTZWxlY3RvcihDb250cmFjdE9uZS5wcm90b3R5cGUuc29tZU1ldGhvZCkKICAgIHB1c2hieXRlcyAweGMyZTk1OTZlIC8vIG1ldGhvZCAic29tZU1ldGhvZCgpdWludDY0IgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OkNvbnRyYWN0VHdvLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": {}, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "ContractTwo", + "methods": [ + { + "name": "renamedSomeMethod", + "args": [], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "test", + "args": [], + "readonly": false, + "returns": { + "type": "byte[]" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.arc56.json b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.arc56.json new file mode 100644 index 000000000..b8d5ef207 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.arc56.json @@ -0,0 +1,120 @@ +{ + "name": "ContractTwo", + "structs": {}, + "methods": [ + { + "name": "renamedSomeMethod", + "args": [], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "test", + "args": [], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 0, + "bytes": 0 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": {}, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 41, + 75 + ], + "errorMessage": "OnCompletion is not NoOp" + }, + { + "pc": [ + 103 + ], + "errorMessage": "can only call when creating" + }, + { + "pc": [ + 46, + 80 + ], + "errorMessage": "can only call when not creating" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxMwogICAgLy8gY2xhc3MgQ29udHJhY3RUd28gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0MzhjNjRmMyAvLyBtZXRob2QgInJlbmFtZWRTb21lTWV0aG9kKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4MmFkNzQ2ZWYgLy8gbWV0aG9kICJ0ZXN0KClieXRlW10iCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIG1haW5fcmVuYW1lZFNvbWVNZXRob2Rfcm91dGVAMyBtYWluX3Rlc3Rfcm91dGVANAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDU6CgptYWluX3N3aXRjaF9jYXNlX25leHRANjoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBDb250cmFjdFR3byBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OkNvbnRyYWN0VHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyOgogICAgcmV0dXJuCgptYWluX3Rlc3Rfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjE3CiAgICAvLyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OkNvbnRyYWN0VHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX3JlbmFtZWRTb21lTWV0aG9kX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czoxNAogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdyZW5hbWVkU29tZU1ldGhvZCcgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc29tZU1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjpDb250cmFjdFR3by5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LW1ldGhvZC1zZWxlY3Rvci5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBDb250cmFjdFR3byBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIENvbnRyYWN0VHdvIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RUd28uX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RUd28uc29tZU1ldGhvZCgpIC0+IHZvaWQ6CnNvbWVNZXRob2Q6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1tZXRob2Qtc2VsZWN0b3IuYWxnby50czo6Q29udHJhY3RUd28udGVzdCgpIC0+IGJ5dGVzOgp0ZXN0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBtZXRob2RTZWxlY3RvcihDb250cmFjdE9uZS5wcm90b3R5cGUuc29tZU1ldGhvZCkKICAgIHB1c2hieXRlcyAweGMyZTk1OTZlIC8vIG1ldGhvZCAic29tZU1ldGhvZCgpdWludDY0IgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtbWV0aG9kLXNlbGVjdG9yLmFsZ28udHM6OkNvbnRyYWN0VHdvLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAExGyITQQBMNhoAgARDjGTzgAQq10bvTwKOAgAkAAIiQzEZIhJEMRgiE0SIAD5JFRZXBgJMUIAEFR98dUxQsCNC/90xGSISRDEYIhNEiAAbI0L/zDEZIkyOAQADQv/AMRgiEkSIAAwjQv+1iYAEwulZbomJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 4, + "patch": 0 + } + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.clear.teal b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.clear.teal new file mode 100644 index 000000000..a4d580477 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.clear.teal @@ -0,0 +1,7 @@ +#pragma version 10 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir new file mode 100644 index 000000000..65632698f --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.0.ssa.ir @@ -0,0 +1,68 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__() -> bool: + block@0: // L13 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L13 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "renamedSomeMethod()void" => block@2, method "test()byte[]" => block@3, * => block@4} + block@2: // renamedSomeMethod_route_L14 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + tests/approvals/arc4-method-selector.algo.ts::ContractTwo.someMethod() + return 1u + block@3: // test_route_L17 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (== tmp%7#0 NoOp) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (!= tmp%9#0 0u) + (assert tmp%10#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/arc4-method-selector.algo.ts::ContractTwo.test() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes[8] = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%11#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%11#0) + return 1u + block@4: // switch_case_default_L13 + goto block@5 + block@5: // switch_case_next_L13 + goto block@10 + block@6: // bare_routing_L13 + let tmp%12#0: uint64 = (txn OnCompletion) + switch tmp%12#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L13 + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (== tmp%13#0 0u) + (assert tmp%14#0) // can only call when creating + tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L13 + goto block@9 + block@9: // switch_case_next_L13 + goto block@10 + block@10: // after_if_else_L13 + return 0u + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.someMethod() -> void: + block@0: // L14 + return + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.test() -> bytes: + block@0: // L17 + return method "someMethod()uint64" + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__algots__.defaultCreate() -> void: + block@0: // L13 + return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir new file mode 100644 index 000000000..6a9f6e732 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.1.ssa.array.ir @@ -0,0 +1,72 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + goto block@1 + block@1: // L13 + let tmp%0#1: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#1 0u) + goto tmp%1#0 ? block@2 : block@7 + block@2: // abi_routing_L13 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "renamedSomeMethod()void" => block@3, method "test()byte[]" => block@4, * => block@5} + block@3: // renamedSomeMethod_route_L14 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + tests/approvals/arc4-method-selector.algo.ts::ContractTwo.someMethod() + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // test_route_L17 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (== tmp%7#0 NoOp) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (!= tmp%9#0 0u) + (assert tmp%10#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/arc4-method-selector.algo.ts::ContractTwo.test() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes[8] = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%11#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%11#0) + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@5: // switch_case_default_L13 + goto block@6 + block@6: // switch_case_next_L13 + goto block@11 + block@7: // bare_routing_L13 + let tmp%12#0: uint64 = (txn OnCompletion) + switch tmp%12#0 {0u => block@8, * => block@9} + block@8: // __algots__.defaultCreate_L13 + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (== tmp%13#0 0u) + (assert tmp%14#0) // can only call when creating + tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__algots__.defaultCreate() + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@9: // switch_case_default_L13 + goto block@10 + block@10: // switch_case_next_L13 + goto block@11 + block@11: // after_if_else_L13 + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.someMethod() -> void: + block@0: // L14 + return + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.test() -> bytes: + block@0: // L17 + return method "someMethod()uint64" + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__algots__.defaultCreate() -> void: + block@0: // L13 + return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir new file mode 100644 index 000000000..6a9f6e732 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.approval.2.ssa.slot.ir @@ -0,0 +1,72 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + goto block@1 + block@1: // L13 + let tmp%0#1: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#1 0u) + goto tmp%1#0 ? block@2 : block@7 + block@2: // abi_routing_L13 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "renamedSomeMethod()void" => block@3, method "test()byte[]" => block@4, * => block@5} + block@3: // renamedSomeMethod_route_L14 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + tests/approvals/arc4-method-selector.algo.ts::ContractTwo.someMethod() + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0: bool = 1u + goto block@12 + block@4: // test_route_L17 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (== tmp%7#0 NoOp) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (!= tmp%9#0 0u) + (assert tmp%10#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/arc4-method-selector.algo.ts::ContractTwo.test() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes[8] = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%11#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%11#0) + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1: bool = 1u + goto block@12 + block@5: // switch_case_default_L13 + goto block@6 + block@6: // switch_case_next_L13 + goto block@11 + block@7: // bare_routing_L13 + let tmp%12#0: uint64 = (txn OnCompletion) + switch tmp%12#0 {0u => block@8, * => block@9} + block@8: // __algots__.defaultCreate_L13 + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (== tmp%13#0 0u) + (assert tmp%14#0) // can only call when creating + tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__algots__.defaultCreate() + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2: bool = 1u + goto block@12 + block@9: // switch_case_default_L13 + goto block@10 + block@10: // switch_case_next_L13 + goto block@11 + block@11: // after_if_else_L13 + let tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3: bool = 0u + goto block@12 + block@12: // after_inlined_tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#0 <- block@3, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#1 <- block@4, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#2 <- block@8, tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__puya_arc4_router__%0#3 <- block@11) + return tmp%0#0 + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.someMethod() -> void: + block@0: // L14 + return + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.test() -> bytes: + block@0: // L17 + return method "someMethod()uint64" + +subroutine tests/approvals/arc4-method-selector.algo.ts::ContractTwo.__algots__.defaultCreate() -> void: + block@0: // L13 + return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.1.ssa.array.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir new file mode 100644 index 000000000..1253eaad9 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/ContractTwo.ir/ContractTwo.clear.2.ssa.slot.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/arc4-method-selector.awst b/tests/approvals/out/unoptimized/arc4-method-selector/arc4-method-selector.awst new file mode 100644 index 000000000..36d6c00a6 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/arc4-method-selector.awst @@ -0,0 +1,53 @@ +contract ContractOne +{ + approvalProgram(): bool + { + return arc4Router() + } + + clearProgram(): bool + { + return True + } + + test(): bytes + { + return Method("renamedSomeMethod()void") + } + + someMethod(): uint64 + { + return 123 + } + + __algots__.defaultCreate(): void + { + } + +} +contract ContractTwo +{ + approvalProgram(): bool + { + return arc4Router() + } + + clearProgram(): bool + { + return True + } + + someMethod(): void + { + } + + test(): bytes + { + return Method("someMethod()uint64") + } + + __algots__.defaultCreate(): void + { + } + +} \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/arc4-method-selector/arc4-method-selector.awst.json b/tests/approvals/out/unoptimized/arc4-method-selector/arc4-method-selector.awst.json new file mode 100644 index 000000000..bc5a0ac62 --- /dev/null +++ b/tests/approvals/out/unoptimized/arc4-method-selector/arc4-method-selector.awst.json @@ -0,0 +1,778 @@ +[ + { + "_type": "Contract", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 4, + "end_line": 4, + "column": 0, + "end_column": 36 + }, + "id": "tests/approvals/arc4-method-selector.algo.ts::ContractOne", + "name": "ContractOne", + "description": null, + "method_resolution_order": [ + "@algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract", + "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract" + ], + "approval_program": { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "bool", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "value": { + "_type": "ARC4Router", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "wtype": { + "_type": "WType", + "name": "bool", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + } + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "@algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract", + "member_name": "approvalProgram", + "arc4_method_config": null + }, + "clear_program": { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "bool", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "value": { + "_type": "BoolConstant", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "wtype": { + "_type": "WType", + "name": "bool", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "value": true + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "clearStateProgram", + "arc4_method_config": null + }, + "methods": [ + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 5, + "end_line": 5, + "column": 2, + "end_column": 8 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "bytes", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 5, + "end_line": 7, + "column": 9, + "end_column": 3 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 6, + "end_line": 6, + "column": 4, + "end_column": 59 + }, + "value": { + "_type": "MethodConstant", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 6, + "end_line": 6, + "column": 11, + "end_column": 59 + }, + "wtype": { + "_type": "WType", + "name": "bytes", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "renamedSomeMethod()void" + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/arc4-method-selector.algo.ts::ContractOne", + "member_name": "test", + "arc4_method_config": { + "_type": "ARC4ABIMethodConfig", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 5, + "end_line": 5, + "column": 2, + "end_column": 8 + }, + "allowed_completion_types": [ + 0 + ], + "create": 3, + "name": "test", + "readonly": false, + "default_args": {} + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 8, + "end_line": 8, + "column": 2, + "end_column": 14 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 8, + "end_line": 10, + "column": 15, + "end_column": 3 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 9, + "end_line": 9, + "column": 4, + "end_column": 20 + }, + "value": { + "_type": "IntegerConstant", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 22, + "end_line": 22, + "column": 25, + "end_column": 28 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "value": "123", + "teal_alias": null + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/arc4-method-selector.algo.ts::ContractOne", + "member_name": "someMethod", + "arc4_method_config": { + "_type": "ARC4ABIMethodConfig", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 8, + "end_line": 8, + "column": 2, + "end_column": 14 + }, + "allowed_completion_types": [ + 0 + ], + "create": 3, + "name": "someMethod", + "readonly": false, + "default_args": {} + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 4, + "end_line": 4, + "column": 0, + "end_column": 36 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 4, + "end_line": 4, + "column": 0, + "end_column": 36 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": "Implicitly generated create method", + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/arc4-method-selector.algo.ts::ContractOne", + "member_name": "__algots__.defaultCreate", + "arc4_method_config": { + "_type": "ARC4BareMethodConfig", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 4, + "end_line": 4, + "column": 0, + "end_column": 36 + }, + "allowed_completion_types": [ + 0 + ], + "create": 2 + } + } + ], + "app_state": [], + "state_totals": { + "_type": "StateTotals", + "global_uints": null, + "local_uints": null, + "global_bytes": null, + "local_bytes": null + }, + "reserved_scratch_space": [], + "avm_version": null + }, + { + "_type": "Contract", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 13, + "end_line": 13, + "column": 0, + "end_column": 36 + }, + "id": "tests/approvals/arc4-method-selector.algo.ts::ContractTwo", + "name": "ContractTwo", + "description": null, + "method_resolution_order": [ + "@algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract", + "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract" + ], + "approval_program": { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "bool", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "value": { + "_type": "ARC4Router", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "wtype": { + "_type": "WType", + "name": "bool", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + } + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "@algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract", + "member_name": "approvalProgram", + "arc4_method_config": null + }, + "clear_program": { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "bool", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "value": { + "_type": "BoolConstant", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "wtype": { + "_type": "WType", + "name": "bool", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "value": true + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "clearStateProgram", + "arc4_method_config": null + }, + "methods": [ + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 14, + "end_line": 15, + "column": 2, + "end_column": 14 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 15, + "end_line": 15, + "column": 15, + "end_column": 17 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/arc4-method-selector.algo.ts::ContractTwo", + "member_name": "someMethod", + "arc4_method_config": { + "_type": "ARC4ABIMethodConfig", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 14, + "end_line": 14, + "column": 3, + "end_column": 43 + }, + "allowed_completion_types": [ + 0 + ], + "create": 3, + "name": "renamedSomeMethod", + "readonly": false, + "default_args": {} + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 17, + "end_line": 17, + "column": 2, + "end_column": 8 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "bytes", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 17, + "end_line": 19, + "column": 9, + "end_column": 3 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 18, + "end_line": 18, + "column": 4, + "end_column": 59 + }, + "value": { + "_type": "MethodConstant", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 18, + "end_line": 18, + "column": 11, + "end_column": 59 + }, + "wtype": { + "_type": "WType", + "name": "bytes", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "someMethod()uint64" + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/arc4-method-selector.algo.ts::ContractTwo", + "member_name": "test", + "arc4_method_config": { + "_type": "ARC4ABIMethodConfig", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 17, + "end_line": 17, + "column": 2, + "end_column": 8 + }, + "allowed_completion_types": [ + 0 + ], + "create": 3, + "name": "test", + "readonly": false, + "default_args": {} + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 13, + "end_line": 13, + "column": 0, + "end_column": 36 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 13, + "end_line": 13, + "column": 0, + "end_column": 36 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": "Implicitly generated create method", + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/arc4-method-selector.algo.ts::ContractTwo", + "member_name": "__algots__.defaultCreate", + "arc4_method_config": { + "_type": "ARC4BareMethodConfig", + "source_location": { + "file": "tests/approvals/arc4-method-selector.algo.ts", + "line": 13, + "end_line": 13, + "column": 0, + "end_column": 36 + }, + "allowed_completion_types": [ + 0 + ], + "create": 2 + } + } + ], + "app_state": [], + "state_totals": { + "_type": "StateTotals", + "global_uints": null, + "local_uints": null, + "global_bytes": null, + "local_bytes": null + }, + "reserved_scratch_space": [], + "avm_version": null + } +] \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/global-state/TestContract.approval.teal b/tests/approvals/out/unoptimized/global-state/TestContract.approval.teal index 76d04c070..d8692660a 100644 --- a/tests/approvals/out/unoptimized/global-state/TestContract.approval.teal +++ b/tests/approvals/out/unoptimized/global-state/TestContract.approval.teal @@ -107,6 +107,10 @@ constructor: // tests/approvals/global-state.algo.ts::BaseTestContract.constructor() -> void: tests/approvals/global-state.algo.ts::BaseTestContract.constructor: + +tests/approvals/global-state.algo.ts::BaseTestContract.constructor_block@1: + +tests/approvals/global-state.algo.ts::BaseTestContract.constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/global-state.algo.ts:5 // baseTestState = GlobalState({ initialValue: 'testing 123' }) bytec_1 // "baseTestState" diff --git a/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.0.ssa.ir b/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.0.ssa.ir index 00b2b4ddc..606a17b09 100644 --- a/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.0.ssa.ir @@ -36,5 +36,10 @@ subroutine tests/approvals/global-state.algo.ts::TestContract.constructor() -> v subroutine tests/approvals/global-state.algo.ts::BaseTestContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "baseTestState" "testing 123") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.1.ssa.array.ir index 30f266c5b..a85faef69 100644 --- a/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.1.ssa.array.ir @@ -35,5 +35,9 @@ subroutine tests/approvals/global-state.algo.ts::TestContract.constructor() -> v subroutine tests/approvals/global-state.algo.ts::BaseTestContract.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "baseTestState" "testing 123") return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.2.ssa.slot.ir index 30f266c5b..a85faef69 100644 --- a/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/global-state/TestContract.ir/TestContract.approval.2.ssa.slot.ir @@ -35,5 +35,9 @@ subroutine tests/approvals/global-state.algo.ts::TestContract.constructor() -> v subroutine tests/approvals/global-state.algo.ts::BaseTestContract.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "baseTestState" "testing 123") return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/global-state/global-state.awst b/tests/approvals/out/unoptimized/global-state/global-state.awst index d5064b0bb..a8d96918b 100644 --- a/tests/approvals/out/unoptimized/global-state/global-state.awst +++ b/tests/approvals/out/unoptimized/global-state/global-state.awst @@ -36,10 +36,14 @@ contract TestContract BaseTestContract::constructor(): void { - void + super.constructor() GlobalState["baseTestState"]: string = "testing 123" } + BaseContract::constructor(): void + { + } + } contract TestArc4 { diff --git a/tests/approvals/out/unoptimized/global-state/global-state.awst.json b/tests/approvals/out/unoptimized/global-state/global-state.awst.json index ff5e05389..59cd77f70 100644 --- a/tests/approvals/out/unoptimized/global-state/global-state.awst.json +++ b/tests/approvals/out/unoptimized/global-state/global-state.awst.json @@ -1180,7 +1180,7 @@ "end_column": 61 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/global-state.algo.ts", "line": 4, @@ -1194,7 +1194,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -1276,6 +1281,49 @@ "cref": "tests/approvals/global-state.algo.ts::BaseTestContract", "member_name": "constructor", "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ diff --git a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.approval.teal b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.approval.teal index 3d718ef65..305851d7f 100644 --- a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.approval.teal +++ b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.approval.teal @@ -5,37 +5,44 @@ main: intcblock 0 1 bytecblock 0x151f7c75 + txn ApplicationID + bnz main_after_if_else@2 + +main_if_body@1: + callsub constructor + +main_after_if_else@2: -main_block@1: +main_block@3: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { txn NumAppArgs intc_0 // 0 != - bz main_bare_routing@7 + bz main_bare_routing@9 -main_abi_routing@2: +main_abi_routing@4: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { txna ApplicationArgs 0 pushbytes 0xc73da9b9 // method "getVeryImportantValue()string" pushbytes 0xf161dc37 // method "simpleAbiMethod(uint64,uint64)uint64" uncover 2 - match main_getVeryImportantValue_route@3 main_simpleAbiMethod_route@4 + match main_getVeryImportantValue_route@5 main_simpleAbiMethod_route@6 -main_switch_case_default@5: +main_switch_case_default@7: -main_switch_case_next@6: +main_switch_case_next@8: -main_after_if_else@11: +main_after_if_else@13: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { intc_0 // 0 -main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@12: +main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@14: return -main_simpleAbiMethod_route@4: +main_simpleAbiMethod_route@6: // tests/approvals/inheritance-a.algo.ts:17 // public simpleAbiMethod(a: uint64, b: uint64): uint64 { txn OnCompletion @@ -61,10 +68,10 @@ main_simpleAbiMethod_route@4: concat log intc_1 // 1 - b main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@12 + b main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@14 -main_getVeryImportantValue_route@3: - // tests/approvals/inheritance-b.algo.ts:15 +main_getVeryImportantValue_route@5: + // tests/approvals/inheritance-b.algo.ts:16 // public getVeryImportantValue() { txn OnCompletion intc_0 // NoOp @@ -86,22 +93,22 @@ main_getVeryImportantValue_route@3: concat log intc_1 // 1 - b main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@12 + b main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@14 -main_bare_routing@7: +main_bare_routing@9: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { txn OnCompletion intc_0 // 0 swap - match main___algots__.defaultCreate@8 + match main___algots__.defaultCreate@10 -main_switch_case_default@9: +main_switch_case_default@11: -main_switch_case_next@10: - b main_after_if_else@11 +main_switch_case_next@12: + b main_after_if_else@13 -main___algots__.defaultCreate@8: +main___algots__.defaultCreate@10: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { txn ApplicationID @@ -110,7 +117,7 @@ main___algots__.defaultCreate@8: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - b main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@12 + b main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@14 // tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.getVeryImportantValue() -> bytes: @@ -118,7 +125,7 @@ getVeryImportantValue: // tests/approvals/inheritance-a.algo.ts:22 // export const VERY_IMPORTANT_VALUE = '42' pushbytes "42" - // tests/approvals/inheritance-b.algo.ts:16 + // tests/approvals/inheritance-b.algo.ts:17 // return VERY_IMPORTANT_VALUE retsub @@ -139,3 +146,17 @@ simpleAbiMethod: // tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() -> void: __algots__.defaultCreate: retsub + + +// tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.constructor() -> void: +constructor: + +constructor_block@1: + +constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: + // tests/approvals/inheritance-b.algo.ts:15 + // concreteState = GlobalState({ initialValue: 'testing' }) + pushbytes "concreteState" + pushbytes "testing" + app_global_put + retsub diff --git a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.arc32.json b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.arc32.json index 0d895372c..a997fc8c8 100644 --- a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.arc32.json +++ b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.arc32.json @@ -12,12 +12,12 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4YzczZGE5YjkgLy8gbWV0aG9kICJnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGYxNjFkYzM3IC8vIG1ldGhvZCAic2ltcGxlQWJpTWV0aG9kKHVpbnQ2NCx1aW50NjQpdWludDY0IgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2dldFZlcnlJbXBvcnRhbnRWYWx1ZV9yb3V0ZUAzIG1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgY2FsbHN1YiBzaW1wbGVBYmlNZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9nZXRWZXJ5SW1wb3J0YW50VmFsdWVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFZlcnlJbXBvcnRhbnRWYWx1ZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czo6Q29uY3JldGVBcmM0Q29udHJhY3QuZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgLT4gYnl0ZXM6CmdldFZlcnlJbXBvcnRhbnRWYWx1ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MjIKICAgIC8vIGV4cG9ydCBjb25zdCBWRVJZX0lNUE9SVEFOVF9WQUxVRSA9ICc0MicKICAgIHB1c2hieXRlcyAiNDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE2CiAgICAvLyByZXR1cm4gVkVSWV9JTVBPUlRBTlRfVkFMVUUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6OkFyYzRDb250cmFjdC5zaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKc2ltcGxlQWJpTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOQoKbWFpbl9hYmlfcm91dGluZ0A0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGM3M2RhOWI5IC8vIG1ldGhvZCAiZ2V0VmVyeUltcG9ydGFudFZhbHVlKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHhmMTYxZGMzNyAvLyBtZXRob2QgInNpbXBsZUFiaU1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKICAgIHVuY292ZXIgMgogICAgbWF0Y2ggbWFpbl9nZXRWZXJ5SW1wb3J0YW50VmFsdWVfcm91dGVANSBtYWluX3NpbXBsZUFiaU1ldGhvZF9yb3V0ZUA2CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA4OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czo6Q29uY3JldGVBcmM0Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIGNhbGxzdWIgc2ltcGxlQWJpTWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czo6Q29uY3JldGVBcmM0Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE2CiAgICAvLyBwdWJsaWMgZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRWZXJ5SW1wb3J0YW50VmFsdWUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czo6Q29uY3JldGVBcmM0Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYmFyZV9yb3V0aW5nQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTE6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTI6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0LmdldFZlcnlJbXBvcnRhbnRWYWx1ZSgpIC0+IGJ5dGVzOgpnZXRWZXJ5SW1wb3J0YW50VmFsdWU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjIyCiAgICAvLyBleHBvcnQgY29uc3QgVkVSWV9JTVBPUlRBTlRfVkFMVUUgPSAnNDInCiAgICBwdXNoYnl0ZXMgIjQyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNwogICAgLy8gcmV0dXJuIFZFUllfSU1QT1JUQU5UX1ZBTFVFCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjpBcmM0Q29udHJhY3Quc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnNpbXBsZUFiaU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE4CiAgICAvLyByZXR1cm4gYSArIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CmNvbnN0cnVjdG9yOgoKY29uc3RydWN0b3JfYmxvY2tAMToKCmNvbnN0cnVjdG9yX2FmdGVyX2lubGluZWRfQGFsZ29yYW5kZm91bmRhdGlvbi9hbGdvcmFuZC10eXBlc2NyaXB0L2Jhc2UtY29udHJhY3QuZC50czo6QmFzZUNvbnRyYWN0LmNvbnN0cnVjdG9yQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBjb25jcmV0ZVN0YXRlID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICd0ZXN0aW5nJyB9KQogICAgcHVzaGJ5dGVzICJjb25jcmV0ZVN0YXRlIgogICAgcHVzaGJ5dGVzICJ0ZXN0aW5nIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { - "num_byte_slices": 0, + "num_byte_slices": 1, "num_uints": 1 }, "local": { @@ -28,6 +28,10 @@ "schema": { "global": { "declared": { + "concreteState": { + "type": "bytes", + "key": "concreteState" + }, "someState": { "type": "uint64", "key": "someState" diff --git a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.arc56.json b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.arc56.json index 51dbb9f84..d76a25199 100644 --- a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.arc56.json +++ b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.arc56.json @@ -53,7 +53,7 @@ "schema": { "global": { "ints": 1, - "bytes": 0 + "bytes": 1 }, "local": { "ints": 0, @@ -62,6 +62,11 @@ }, "keys": { "global": { + "concreteState": { + "keyType": "AVMString", + "valueType": "AVMString", + "key": "Y29uY3JldGVTdGF0ZQ==" + }, "someState": { "keyType": "AVMString", "valueType": "AVMUint64", @@ -88,21 +93,21 @@ "sourceInfo": [ { "pc": [ - 48, - 78 + 56, + 86 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 118 + 126 ], "errorMessage": "can only call when creating" }, { "pc": [ - 53, - 83 + 61, + 91 ], "errorMessage": "can only call when not creating" } @@ -115,11 +120,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4YzczZGE5YjkgLy8gbWV0aG9kICJnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGYxNjFkYzM3IC8vIG1ldGhvZCAic2ltcGxlQWJpTWV0aG9kKHVpbnQ2NCx1aW50NjQpdWludDY0IgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2dldFZlcnlJbXBvcnRhbnRWYWx1ZV9yb3V0ZUAzIG1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgY2FsbHN1YiBzaW1wbGVBYmlNZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9nZXRWZXJ5SW1wb3J0YW50VmFsdWVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFZlcnlJbXBvcnRhbnRWYWx1ZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czo6Q29uY3JldGVBcmM0Q29udHJhY3QuZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgLT4gYnl0ZXM6CmdldFZlcnlJbXBvcnRhbnRWYWx1ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MjIKICAgIC8vIGV4cG9ydCBjb25zdCBWRVJZX0lNUE9SVEFOVF9WQUxVRSA9ICc0MicKICAgIHB1c2hieXRlcyAiNDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE2CiAgICAvLyByZXR1cm4gVkVSWV9JTVBPUlRBTlRfVkFMVUUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6OkFyYzRDb250cmFjdC5zaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKc2ltcGxlQWJpTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOQoKbWFpbl9hYmlfcm91dGluZ0A0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGM3M2RhOWI5IC8vIG1ldGhvZCAiZ2V0VmVyeUltcG9ydGFudFZhbHVlKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHhmMTYxZGMzNyAvLyBtZXRob2QgInNpbXBsZUFiaU1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKICAgIHVuY292ZXIgMgogICAgbWF0Y2ggbWFpbl9nZXRWZXJ5SW1wb3J0YW50VmFsdWVfcm91dGVANSBtYWluX3NpbXBsZUFiaU1ldGhvZF9yb3V0ZUA2CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA4OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czo6Q29uY3JldGVBcmM0Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIGNhbGxzdWIgc2ltcGxlQWJpTWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czo6Q29uY3JldGVBcmM0Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE2CiAgICAvLyBwdWJsaWMgZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRWZXJ5SW1wb3J0YW50VmFsdWUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czo6Q29uY3JldGVBcmM0Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYmFyZV9yb3V0aW5nQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTE6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTI6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0LmdldFZlcnlJbXBvcnRhbnRWYWx1ZSgpIC0+IGJ5dGVzOgpnZXRWZXJ5SW1wb3J0YW50VmFsdWU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjIyCiAgICAvLyBleHBvcnQgY29uc3QgVkVSWV9JTVBPUlRBTlRfVkFMVUUgPSAnNDInCiAgICBwdXNoYnl0ZXMgIjQyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNwogICAgLy8gcmV0dXJuIFZFUllfSU1QT1JUQU5UX1ZBTFVFCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjpBcmM0Q29udHJhY3Quc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnNpbXBsZUFiaU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE4CiAgICAvLyByZXR1cm4gYSArIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CmNvbnN0cnVjdG9yOgoKY29uc3RydWN0b3JfYmxvY2tAMToKCmNvbnN0cnVjdG9yX2FmdGVyX2lubGluZWRfQGFsZ29yYW5kZm91bmRhdGlvbi9hbGdvcmFuZC10eXBlc2NyaXB0L2Jhc2UtY29udHJhY3QuZC50czo6QmFzZUNvbnRyYWN0LmNvbnN0cnVjdG9yQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBjb25jcmV0ZVN0YXRlID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICd0ZXN0aW5nJyB9KQogICAgcHVzaGJ5dGVzICJjb25jcmV0ZVN0YXRlIgogICAgcHVzaGJ5dGVzICJ0ZXN0aW5nIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmAQQVH3x1MRsiE0EAVDYaAIAExz2puYAE8WHcN08CjgIAIAACIkMxGSISRDEYIhNENhoBFzYaAheIAEIWKExQsCNC/+ExGSISRDEYIhNEiAAnSRUWVwYCTFAoTFCwI0L/xDEZIkyOAQADQv+4MRgiEkSIABIjQv+tgAI0MomKAgGL/ov/CImJ", + "approval": "CiACAAEmAQQVH3x1MRhAAAOIAIExGyITQQBUNhoAgATHPam5gATxYdw3TwKOAgAgAAIiQzEZIhJEMRgiE0Q2GgEXNhoCF4gAQhYoTFCwI0L/4TEZIhJEMRgiE0SIACdJFRZXBgJMUChMULAjQv/EMRkiTI4BAANC/7gxGCISRIgAEiNC/62AAjQyiYoCAYv+i/8IiYmADWNvbmNyZXRlU3RhdGWAB3Rlc3RpbmdniQ==", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir index 5222179f4..e5054028d 100644 --- a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir @@ -1,5 +1,11 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.constructor() + goto block@2 + block@2: // after_if_else_L1 let tmp%0#0: bool = tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__() return tmp%0#0 @@ -11,7 +17,7 @@ subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_ar block@1: // abi_routing_L14 let tmp%2#0: bytes = (txna ApplicationArgs 0) switch tmp%2#0 {method "getVeryImportantValue()string" => block@2, method "simpleAbiMethod(uint64,uint64)uint64" => block@3, * => block@4} - block@2: // getVeryImportantValue_route_L15 + block@2: // getVeryImportantValue_route_L16 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (== tmp%3#0 NoOp) (assert tmp%4#0) // OnCompletion is not NoOp @@ -63,7 +69,7 @@ subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_ar return 0u subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.getVeryImportantValue() -> bytes: - block@0: // L15 + block@0: // L16 return "42" subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a: uint64, b: uint64) -> uint64: @@ -73,4 +79,14 @@ subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() -> void: block@0: // L14 + return + +subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.constructor() -> void: + block@0: // L14 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() + (app_global_put "concreteState" "testing") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir index c4e222ee4..ae70abb28 100644 --- a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.1.ssa.array.ir @@ -1,14 +1,20 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 - goto block@1 - block@1: // L14 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.constructor() + goto block@2 + block@2: // after_if_else_L1 + goto block@3 + block@3: // L14 let tmp%0#1: uint64 = (txn NumAppArgs) let tmp%1#0: bool = (!= tmp%0#1 0u) - goto tmp%1#0 ? block@2 : block@7 - block@2: // abi_routing_L14 + goto tmp%1#0 ? block@4 : block@9 + block@4: // abi_routing_L14 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getVeryImportantValue()string" => block@3, method "simpleAbiMethod(uint64,uint64)uint64" => block@4, * => block@5} - block@3: // getVeryImportantValue_route_L15 + switch tmp%2#0 {method "getVeryImportantValue()string" => block@5, method "simpleAbiMethod(uint64,uint64)uint64" => block@6, * => block@7} + block@5: // getVeryImportantValue_route_L16 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (== tmp%3#0 NoOp) (assert tmp%4#0) // OnCompletion is not NoOp @@ -23,8 +29,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) (log tmp%7#0) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0: bool = 1u - goto block@12 - block@4: // simpleAbiMethod_route_L17 + goto block@14 + block@6: // simpleAbiMethod_route_L17 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (== tmp%8#0 NoOp) (assert tmp%9#0) // OnCompletion is not NoOp @@ -40,34 +46,34 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%14#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%14#0) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1: bool = 1u - goto block@12 - block@5: // switch_case_default_L14 - goto block@6 - block@6: // switch_case_next_L14 - goto block@11 - block@7: // bare_routing_L14 + goto block@14 + block@7: // switch_case_default_L14 + goto block@8 + block@8: // switch_case_next_L14 + goto block@13 + block@9: // bare_routing_L14 let tmp%15#0: uint64 = (txn OnCompletion) - switch tmp%15#0 {0u => block@8, * => block@9} - block@8: // __algots__.defaultCreate_L14 + switch tmp%15#0 {0u => block@10, * => block@11} + block@10: // __algots__.defaultCreate_L14 let tmp%16#0: uint64 = (txn ApplicationID) let tmp%17#0: bool = (== tmp%16#0 0u) (assert tmp%17#0) // can only call when creating tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2: bool = 1u + goto block@14 + block@11: // switch_case_default_L14 goto block@12 - block@9: // switch_case_default_L14 - goto block@10 - block@10: // switch_case_next_L14 - goto block@11 - block@11: // after_if_else_L14 + block@12: // switch_case_next_L14 + goto block@13 + block@13: // after_if_else_L14 let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3: bool = 0u - goto block@12 - block@12: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@8, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@11) + goto block@14 + block@14: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@5, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@6, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@10, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@13) return tmp%0#0 subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.getVeryImportantValue() -> bytes: - block@0: // L15 + block@0: // L16 return "42" subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a: uint64, b: uint64) -> uint64: @@ -77,4 +83,13 @@ subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() -> void: block@0: // L14 + return + +subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.constructor() -> void: + block@0: // L14 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L14 + (app_global_put "concreteState" "testing") return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir index c4e222ee4..ae70abb28 100644 --- a/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.2.ssa.slot.ir @@ -1,14 +1,20 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 - goto block@1 - block@1: // L14 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.constructor() + goto block@2 + block@2: // after_if_else_L1 + goto block@3 + block@3: // L14 let tmp%0#1: uint64 = (txn NumAppArgs) let tmp%1#0: bool = (!= tmp%0#1 0u) - goto tmp%1#0 ? block@2 : block@7 - block@2: // abi_routing_L14 + goto tmp%1#0 ? block@4 : block@9 + block@4: // abi_routing_L14 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getVeryImportantValue()string" => block@3, method "simpleAbiMethod(uint64,uint64)uint64" => block@4, * => block@5} - block@3: // getVeryImportantValue_route_L15 + switch tmp%2#0 {method "getVeryImportantValue()string" => block@5, method "simpleAbiMethod(uint64,uint64)uint64" => block@6, * => block@7} + block@5: // getVeryImportantValue_route_L16 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (== tmp%3#0 NoOp) (assert tmp%4#0) // OnCompletion is not NoOp @@ -23,8 +29,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) (log tmp%7#0) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0: bool = 1u - goto block@12 - block@4: // simpleAbiMethod_route_L17 + goto block@14 + block@6: // simpleAbiMethod_route_L17 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (== tmp%8#0 NoOp) (assert tmp%9#0) // OnCompletion is not NoOp @@ -40,34 +46,34 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%14#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%14#0) let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1: bool = 1u - goto block@12 - block@5: // switch_case_default_L14 - goto block@6 - block@6: // switch_case_next_L14 - goto block@11 - block@7: // bare_routing_L14 + goto block@14 + block@7: // switch_case_default_L14 + goto block@8 + block@8: // switch_case_next_L14 + goto block@13 + block@9: // bare_routing_L14 let tmp%15#0: uint64 = (txn OnCompletion) - switch tmp%15#0 {0u => block@8, * => block@9} - block@8: // __algots__.defaultCreate_L14 + switch tmp%15#0 {0u => block@10, * => block@11} + block@10: // __algots__.defaultCreate_L14 let tmp%16#0: uint64 = (txn ApplicationID) let tmp%17#0: bool = (== tmp%16#0 0u) (assert tmp%17#0) // can only call when creating tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2: bool = 1u + goto block@14 + block@11: // switch_case_default_L14 goto block@12 - block@9: // switch_case_default_L14 - goto block@10 - block@10: // switch_case_next_L14 - goto block@11 - block@11: // after_if_else_L14 + block@12: // switch_case_next_L14 + goto block@13 + block@13: // after_if_else_L14 let tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3: bool = 0u - goto block@12 - block@12: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@8, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@11) + goto block@14 + block@14: // after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#0 <- block@5, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#1 <- block@6, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#2 <- block@10, tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__%0#3 <- block@13) return tmp%0#0 subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.getVeryImportantValue() -> bytes: - block@0: // L15 + block@0: // L16 return "42" subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a: uint64, b: uint64) -> uint64: @@ -77,4 +83,13 @@ subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() -> void: block@0: // L14 + return + +subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.constructor() -> void: + block@0: // L14 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L14 + (app_global_put "concreteState" "testing") return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/inheritance-b/inheritance-b.awst b/tests/approvals/out/unoptimized/inheritance-b/inheritance-b.awst index 354a6fd2c..d4edee3ef 100644 --- a/tests/approvals/out/unoptimized/inheritance-b/inheritance-b.awst +++ b/tests/approvals/out/unoptimized/inheritance-b/inheritance-b.awst @@ -25,10 +25,14 @@ contract ConcreteSimpleContract contract ConcreteArc4Contract { globals { + ["concreteState"]: string ["someState"]: uint64 } approvalProgram(): bool { + if (!Boolean(txn())) { + this.constructor() + } return arc4Router() } @@ -56,4 +60,14 @@ contract ConcreteArc4Contract { } + constructor(): void + { + super.constructor() + GlobalState["concreteState"]: string = "testing" + } + + BaseContract::constructor(): void + { + } + } \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/inheritance-b/inheritance-b.awst.json b/tests/approvals/out/unoptimized/inheritance-b/inheritance-b.awst.json index b87a1b8f9..b446514bb 100644 --- a/tests/approvals/out/unoptimized/inheritance-b/inheritance-b.awst.json +++ b/tests/approvals/out/unoptimized/inheritance-b/inheritance-b.awst.json @@ -706,7 +706,7 @@ }, "body": [ { - "_type": "ReturnStatement", + "_type": "IfElse", "source_location": { "_type": "SourceLocation", "file": null, @@ -715,8 +715,8 @@ "column": 0, "end_column": 1 }, - "value": { - "_type": "ARC4Router", + "condition": { + "_type": "Not", "source_location": { "_type": "SourceLocation", "file": null, @@ -731,8 +731,143 @@ "immutable": true, "ephemeral": false, "scalar_type": 2 + }, + "expr": { + "_type": "ReinterpretCast", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "wtype": { + "_type": "WType", + "name": "bool", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "expr": { + "_type": "IntrinsicCall", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "op_code": "txn", + "immediates": [ + "ApplicationID" + ], + "stack_args": [] + } } - } + }, + "if_branch": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "expr": { + "_type": "SubroutineCallExpression", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "target": { + "_type": "InstanceMethodTarget", + "member_name": "constructor" + }, + "args": [] + } + } + ], + "label": null, + "comment": null + }, + "else_branch": null + }, + { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "value": { + "_type": "ARC4Router", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "wtype": { + "_type": "WType", + "name": "bool", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + } + } + } + ], + "label": null, + "comment": null } ], "label": null, @@ -828,8 +963,8 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/inheritance-b.algo.ts", - "line": 15, - "end_line": 15, + "line": 16, + "end_line": 16, "column": 2, "end_column": 32 }, @@ -845,8 +980,8 @@ "_type": "Block", "source_location": { "file": "tests/approvals/inheritance-b.algo.ts", - "line": 15, - "end_line": 17, + "line": 16, + "end_line": 18, "column": 33, "end_column": 3 }, @@ -855,8 +990,8 @@ "_type": "ReturnStatement", "source_location": { "file": "tests/approvals/inheritance-b.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 4, "end_column": 31 }, @@ -896,8 +1031,8 @@ "_type": "ARC4ABIMethodConfig", "source_location": { "file": "tests/approvals/inheritance-b.algo.ts", - "line": 15, - "end_line": 15, + "line": 16, + "end_line": 16, "column": 2, "end_column": 32 }, @@ -1265,9 +1400,231 @@ ], "create": 2 } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/inheritance-b.algo.ts", + "line": 14, + "end_line": 14, + "column": 0, + "end_column": 56 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/inheritance-b.algo.ts", + "line": 14, + "end_line": 14, + "column": 0, + "end_column": 56 + }, + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "file": "tests/approvals/inheritance-b.algo.ts", + "line": 14, + "end_line": 14, + "column": 0, + "end_column": 56 + }, + "expr": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/inheritance-b.algo.ts", + "line": 14, + "end_line": 14, + "column": 0, + "end_column": 56 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] + } + }, + { + "_type": "AssignmentStatement", + "source_location": { + "file": "tests/approvals/inheritance-b.algo.ts", + "line": 15, + "end_line": 15, + "column": 2, + "end_column": 58 + }, + "target": { + "_type": "AppStateExpression", + "source_location": { + "file": "tests/approvals/inheritance-b.algo.ts", + "line": 15, + "end_line": 15, + "column": 2, + "end_column": 15 + }, + "wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "key": { + "_type": "BytesConstant", + "source_location": { + "file": "tests/approvals/inheritance-b.algo.ts", + "line": 15, + "end_line": 15, + "column": 2, + "end_column": 15 + }, + "wtype": { + "_type": "WType", + "name": "state_key", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "V{dL_a%FU7Q*>c;Wd", + "encoding": "utf8" + }, + "exists_assertion_message": null + }, + "value": { + "_type": "StringConstant", + "source_location": { + "file": "tests/approvals/inheritance-b.algo.ts", + "line": 15, + "end_line": 15, + "column": 46, + "end_column": 55 + }, + "wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "testing" + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract", + "member_name": "constructor", + "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ + { + "_type": "AppStorageDefinition", + "source_location": { + "file": "tests/approvals/inheritance-b.algo.ts", + "line": 15, + "end_line": 15, + "column": 2, + "end_column": 15 + }, + "member_name": "concreteState", + "kind": 1, + "storage_wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "key_wtype": null, + "key": { + "_type": "BytesConstant", + "source_location": { + "file": "tests/approvals/inheritance-b.algo.ts", + "line": 15, + "end_line": 15, + "column": 2, + "end_column": 15 + }, + "wtype": { + "_type": "WType", + "name": "state_key", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "V{dL_a%FU7Q*>c;Wd", + "encoding": "utf8" + }, + "description": null + }, { "_type": "AppStorageDefinition", "source_location": { diff --git a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.approval.teal b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.approval.teal index 7403ec609..dbf277634 100644 --- a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.approval.teal +++ b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.approval.teal @@ -1494,16 +1494,20 @@ test4_next_txn@1: retsub +// tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: +__algots__.defaultCreate: + retsub + + // tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() -> void: constructor: + +constructor_block@1: + +constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/itxn.algo.ts:8 // name = GlobalState({ initialValue: Bytes() }) bytec_2 // "name" pushbytes 0x app_global_put retsub - - -// tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: -__algots__.defaultCreate: - retsub diff --git a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.arc32.json b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.arc32.json index 6fc0d6e4f..0eafb4d29 100644 --- a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.arc32.json +++ b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.arc32.json @@ -22,7 +22,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA2IDUgMyAxMDAwCiAgICBieXRlY2Jsb2NrIDB4MDk4MTAxIDB4MDkzNjFhMDBiMDgxMDEgIm5hbWUiICIxIiAidW5pdCIgIjIiICJBU1QxIiAiQVNUMiIgIkFTVDMiICIzIiAiNCIgIjUiICIzcmQiICJ3aXRoIGFyZ3MgcGFyYW0gc2V0IiAiNDIiICIxMCIgIjExIiAiMTIiICIxMyIgIjE0IiAiMTUiICIxNiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBJdHhuRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyMDI1NGY5MSAvLyBtZXRob2QgInRlc3QxKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZjE5MDg1MjQgLy8gbWV0aG9kICJ0ZXN0Migpdm9pZCIKICAgIHB1c2hieXRlcyAweGRmOTIwZjM3IC8vIG1ldGhvZCAidGVzdDMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgzZDQ2MzQ1YyAvLyBtZXRob2QgInRlc3Q0KCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3QxX3JvdXRlQDUgbWFpbl90ZXN0Ml9yb3V0ZUA2IG1haW5fdGVzdDNfcm91dGVANyBtYWluX3Rlc3Q0X3JvdXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgSXR4bkRlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNjoKICAgIHJldHVybgoKbWFpbl90ZXN0NF9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzEKICAgIC8vIHB1YmxpYyB0ZXN0NCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdDQKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE2CgptYWluX3Rlc3QzX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk1CiAgICAvLyBwdWJsaWMgdGVzdDMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3QzCiAgICBwdXNoaW50IDEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNgoKbWFpbl90ZXN0Ml9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1OAogICAgLy8gcHVibGljIHRlc3QyKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0MgogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTYKCm1haW5fdGVzdDFfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTAKICAgIC8vIHB1YmxpYyB0ZXN0MSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdDEKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE2CgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTIKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE1CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTYKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0LnRlc3QxKCkgLT4gdm9pZDoKdGVzdDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEwCiAgICAvLyBwdWJsaWMgdGVzdDEoKSB7CiAgICBwcm90byAwIDAKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgKICAgIC8vIG5hbWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogQnl0ZXMoKSB9KQogICAgYnl0ZWNfMiAvLyAibmFtZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTEKICAgIC8vIHRoaXMubmFtZS52YWx1ZSA9IEJ5dGVzKCdBU1QxJykKICAgIGJ5dGVjIDYgLy8gIkFTVDEiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4CiAgICAvLyBuYW1lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCkgfSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJuYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgKICAgIC8vIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxOQogICAgLy8gcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgKICAgIC8vIG5hbWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogQnl0ZXMoKSB9KQogICAgYnl0ZWNfMiAvLyAibmFtZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjIKICAgIC8vIHRoaXMubmFtZS52YWx1ZSA9IEJ5dGVzKCdBU1QyJykKICAgIGJ5dGVjIDcgLy8gIkFTVDIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyMwogICAgLy8gY29uc3QgYXNzZXQxX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTcKICAgIC8vIGRlY2ltYWxzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNgogICAgLy8gdW5pdE5hbWU6ICd1bml0JywKICAgIGJ5dGVjIDQgLy8gInVuaXQiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbDogMTAwMCwKICAgIGludGMgNCAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMtMjAKICAgIC8vIGNvbnN0IGFzc2V0UGFyYW1zID0gaXR4bi5hc3NldENvbmZpZyh7CiAgICAvLyAgIHRvdGFsOiAxMDAwLAogICAgLy8gICBhc3NldE5hbWU6IHRoaXMubmFtZS52YWx1ZSwKICAgIC8vICAgdW5pdE5hbWU6ICd1bml0JywKICAgIC8vICAgZGVjaW1hbHM6IDMsCiAgICAvLyAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIH0pCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkAxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyMwogICAgLy8gY29uc3QgYXNzZXQxX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDb25maWdBc3NldE5hbWUKICAgIGZyYW1lX2J1cnkgMAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4CiAgICAvLyBuYW1lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCkgfSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJuYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IGFzc2V0Ml90eG4gPSBhc3NldFBhcmFtcy5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBmcmFtZV9kaWcgMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTcKICAgIC8vIGRlY2ltYWxzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNgogICAgLy8gdW5pdE5hbWU6ICd1bml0JywKICAgIGJ5dGVjIDQgLy8gInVuaXQiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbDogMTAwMCwKICAgIGludGMgNCAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMtMjAKICAgIC8vIGNvbnN0IGFzc2V0UGFyYW1zID0gaXR4bi5hc3NldENvbmZpZyh7CiAgICAvLyAgIHRvdGFsOiAxMDAwLAogICAgLy8gICBhc3NldE5hbWU6IHRoaXMubmFtZS52YWx1ZSwKICAgIC8vICAgdW5pdE5hbWU6ICd1bml0JywKICAgIC8vICAgZGVjaW1hbHM6IDMsCiAgICAvLyAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIH0pCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyNwogICAgLy8gY29uc3QgYXNzZXQyX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDb25maWdBc3NldE5hbWUKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjkKICAgIC8vIGFzc2VydChhc3NldDFfdHhuLmFzc2V0TmFtZSA9PT0gQnl0ZXMoJ0FTVDEnKSwgJ2Fzc2V0MV90eG4gaXMgY29ycmVjdCcpCiAgICBmcmFtZV9kaWcgMAogICAgYnl0ZWMgNiAvLyAiQVNUMSIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQxX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjMwCiAgICAvLyBhc3NlcnQoYXNzZXQyX3R4bi5hc3NldE5hbWUgPT09IEJ5dGVzKCdBU1QyJyksICdhc3NldDJfdHhuIGlzIGNvcnJlY3QnKQogICAgYnl0ZWMgNyAvLyAiQVNUMiIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQyX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQoYXNzZXQxX3R4bi5jcmVhdGVkQXNzZXQubmFtZSA9PT0gQnl0ZXMoJ0FTVDEnKSwgJ2NyZWF0ZWQgYXNzZXQgMSBpcyBjb3JyZWN0JykKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBieXRlYyA2IC8vICJBU1QxIgogICAgPT0KICAgIGFzc2VydCAvLyBjcmVhdGVkIGFzc2V0IDEgaXMgY29ycmVjdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozMgogICAgLy8gYXNzZXJ0KGFzc2V0Ml90eG4uY3JlYXRlZEFzc2V0Lm5hbWUgPT09IEJ5dGVzKCdBU1QyJyksICdjcmVhdGVkIGFzc2V0IDIgaXMgY29ycmVjdCcpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgYnl0ZWMgNyAvLyAiQVNUMiIKICAgID09CiAgICBhc3NlcnQgLy8gY3JlYXRlZCBhc3NldCAyIGlzIGNvcnJlY3QKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NDQKICAgIC8vIGNvbnN0IFthcHBDcmVhdGVUeG4sIGFzc2V0M190eG5dID0gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozNC0zOAogICAgLy8gY29uc3QgYXBwQ3JlYXRlUGFyYW1zID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBmZWU6IDAsCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MzcKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDFfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NDQKICAgIC8vIGNvbnN0IFthcHBDcmVhdGVUeG4sIGFzc2V0M190eG5dID0gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9uZXh0CiAgICBmcmFtZV9kaWcgMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGZyYW1lX2RpZyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNwogICAgLy8gZGVjaW1hbHM6IDMsCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2CiAgICAvLyB1bml0TmFtZTogJ3VuaXQnLAogICAgYnl0ZWMgNCAvLyAidW5pdCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0MQogICAgLy8gYXNzZXROYW1lOiAnQVNUMycsCiAgICBieXRlYyA4IC8vICJBU1QzIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsOiAxMDAwLAogICAgaW50YyA0IC8vIDEwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMy0yMAogICAgLy8gY29uc3QgYXNzZXRQYXJhbXMgPSBpdHhuLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgdG90YWw6IDEwMDAsCiAgICAvLyAgIGFzc2V0TmFtZTogdGhpcy5uYW1lLnZhbHVlLAogICAgLy8gICB1bml0TmFtZTogJ3VuaXQnLAogICAgLy8gICBkZWNpbWFsczogMywKICAgIC8vICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gfSkKICAgIGludGNfMyAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QxX25leHRfdHhuQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQ0CiAgICAvLyBjb25zdCBbYXBwQ3JlYXRlVHhuLCBhc3NldDNfdHhuXSA9IGl0eG4uc3VibWl0R3JvdXAoYXBwQ3JlYXRlUGFyYW1zLCBhc3NldFBhcmFtcykKICAgIGl0eG5fc3VibWl0CiAgICBnaXR4biAwIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICBpdHhuIENvbmZpZ0Fzc2V0TmFtZQogICAgc3dhcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0NgogICAgLy8gYXNzZXJ0KGFwcENyZWF0ZVR4bi5jcmVhdGVkQXBwLCAnYXBwIGlzIGNyZWF0ZWQnKQogICAgYXNzZXJ0IC8vIGFwcCBpcyBjcmVhdGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQ3CiAgICAvLyBhc3NlcnQoYXNzZXQzX3R4bi5hc3NldE5hbWUgPT09IEJ5dGVzKCdBU1QzJyksICdhc3NldDNfdHhuIGlzIGNvcnJlY3QnKQogICAgYnl0ZWMgOCAvLyAiQVNUMyIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQzX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUwCiAgICAvLyBub3RlOiAnM3JkJywKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBkdXAKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBieiB0ZXN0MV9uZXh0X2ZpZWxkQDYKCnRlc3QxX3NldF9Ob3RlXzBfdG9fMEA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1MAogICAgLy8gbm90ZTogJzNyZCcsCiAgICBieXRlYyAxMiAvLyAiM3JkIgogICAgaXR4bl9maWVsZCBOb3RlCgp0ZXN0MV9uZXh0X2ZpZWxkQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjM0LTM4CiAgICAvLyBjb25zdCBhcHBDcmVhdGVQYXJhbXMgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGZlZTogMCwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozNwogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1NQogICAgLy8gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUzCiAgICAvLyBub3RlOiAnM3JkJywKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBkdXAKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBieiB0ZXN0MV9uZXh0X2ZpZWxkQDkKCnRlc3QxX3NldF9Ob3RlXzBfdG9fMEA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1MwogICAgLy8gbm90ZTogJzNyZCcsCiAgICBieXRlYyAxMiAvLyAiM3JkIgogICAgaXR4bl9maWVsZCBOb3RlCgp0ZXN0MV9uZXh0X2ZpZWxkQDk6CiAgICBmcmFtZV9kaWcgMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGZyYW1lX2RpZyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNwogICAgLy8gZGVjaW1hbHM6IDMsCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2CiAgICAvLyB1bml0TmFtZTogJ3VuaXQnLAogICAgYnl0ZWMgNCAvLyAidW5pdCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0MQogICAgLy8gYXNzZXROYW1lOiAnQVNUMycsCiAgICBieXRlYyA4IC8vICJBU1QzIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsOiAxMDAwLAogICAgaW50YyA0IC8vIDEwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMy0yMAogICAgLy8gY29uc3QgYXNzZXRQYXJhbXMgPSBpdHhuLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgdG90YWw6IDEwMDAsCiAgICAvLyAgIGFzc2V0TmFtZTogdGhpcy5uYW1lLnZhbHVlLAogICAgLy8gICB1bml0TmFtZTogJ3VuaXQnLAogICAgLy8gICBkZWNpbWFsczogMywKICAgIC8vICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gfSkKICAgIGludGNfMyAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QxX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1NQogICAgLy8gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QudGVzdDIoKSAtPiB2b2lkOgp0ZXN0MjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NTgKICAgIC8vIHB1YmxpYyB0ZXN0MigpIHsKICAgIHByb3RvIDAgMAogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NjAKICAgIC8vIGlmIChUeG4ubnVtQXBwQXJncykgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IHRlc3QyX2Vsc2VfYm9keUAyCgp0ZXN0Ml9pZl9ib2R5QDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCBhcmdzID0gW0J5dGVzKCcxJyksIEJ5dGVzKCcyJyldIGFzIGNvbnN0CiAgICBieXRlY18zIC8vICIxIgogICAgZnJhbWVfYnVyeSAwCiAgICBieXRlYyA1IC8vICIyIgogICAgZnJhbWVfYnVyeSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjY1CiAgICAvLyBhcHBBcmdzOiBhcmdzLAogICAgcHVzaGludCAyIC8vIDIKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo2NgogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLk5vT3AsCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA2CiAgICBwdXNoaW50IDEgLy8gMQogICAgZnJhbWVfYnVyeSA0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjY3CiAgICAvLyBub3RlOiAnd2l0aCBhcmdzIHBhcmFtIHNldCcsCiAgICBieXRlYyAxMyAvLyAid2l0aCBhcmdzIHBhcmFtIHNldCIKCnRlc3QyX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NzcKICAgIC8vIGNvbnN0IGNyZWF0ZUFwcFR4biA9IGNyZWF0ZUFwcFBhcmFtcy5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBOb3RlCiAgICBmcmFtZV9kaWcgNAogICAgcHVzaGludCAxIC8vIDEKICAgID49CiAgICBieiB0ZXN0Ml9uZXh0X2ZpZWxkQDUKCnRlc3QyX3NldF9PbkNvbXBsZXRpb25fMF90b18wQDQ6CiAgICBmcmFtZV9kaWcgNgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCnRlc3QyX25leHRfZmllbGRANToKICAgIGZyYW1lX2RpZyAwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18zIC8vIDMKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjc3CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4gPSBjcmVhdGVBcHBQYXJhbXMuc3VibWl0KCkKICAgIGJ6IHRlc3QyX25leHRfZmllbGRANwoKdGVzdDJfc2V0X0FwcGxpY2F0aW9uQXJnc18yX3RvXzJANjoKICAgIGZyYW1lX2RpZyA1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKdGVzdDJfbmV4dF9maWVsZEA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo2Mi02OAogICAgLy8gY3JlYXRlQXBwUGFyYW1zID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBhcHBBcmdzOiBhcmdzLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uTm9PcCwKICAgIC8vICAgbm90ZTogJ3dpdGggYXJncyBwYXJhbSBzZXQnLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QyX25leHRfdHhuQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjc3CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4gPSBjcmVhdGVBcHBQYXJhbXMuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIE5vdGUKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3OAogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5hcHBBcmdzKDApID09PSBCeXRlcygnMScpLCAnY29ycmVjdCBhcmdzIHVzZWQgMScpCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWNfMyAvLyAiMSIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3OQogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5hcHBBcmdzKDEpID09PSBCeXRlcygnMicpLCAnY29ycmVjdCBhcmdzIHVzZWQgMicpCiAgICBwdXNoaW50IDEgLy8gMQogICAgaXR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgNSAvLyAiMiIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4MQogICAgLy8gaWYgKFR4bi5udW1BcHBBcmdzID4gMSkgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIHB1c2hpbnQgMSAvLyAxCiAgICA+CiAgICBieiB0ZXN0Ml9hZnRlcl9pZl9lbHNlQDExCgp0ZXN0Ml9pZl9ib2R5QDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgyLTg5CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4yID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICAgIGFwcEFyZ3M6IFtCeXRlcygnNDInKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4NwogICAgLy8gYXBwQXJnczogW0J5dGVzKCc0MicpXSwKICAgIGJ5dGVjIDE0IC8vICI0MiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjg2CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6ODItODgKICAgIC8vIGNvbnN0IGNyZWF0ZUFwcFR4bjIgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgICAgYXBwQXJnczogW0J5dGVzKCc0MicpXSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QyX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4Mi04OQogICAgLy8gY29uc3QgY3JlYXRlQXBwVHhuMiA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgICBhcHBBcmdzOiBbQnl0ZXMoJzQyJyldLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjkwCiAgICAvLyBhc3NlcnQoY3JlYXRlQXBwVHhuMi5hcHBBcmdzKDApID09PSBCeXRlcygnNDInKSwgJ2NvcnJlY3QgYXJncyB1c2VkIDInKQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDE0IC8vICI0MiIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5MQogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5ub3RlID09PSBCeXRlcygnd2l0aCBhcmdzIHBhcmFtIHNldCcpKQogICAgZnJhbWVfZGlnIDIKICAgIGJ5dGVjIDEzIC8vICJ3aXRoIGFyZ3MgcGFyYW0gc2V0IgogICAgPT0KICAgIGFzc2VydAoKdGVzdDJfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIHJldHN1YgoKdGVzdDJfZWxzZV9ib2R5QDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjczCiAgICAvLyBhcHBBcmdzOiBbQnl0ZXMoJzMnKSwgJzQnLCBCeXRlcygnNScpXSwKICAgIGJ5dGVjIDkgLy8gIjMiCiAgICBmcmFtZV9idXJ5IDAKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgZnJhbWVfYnVyeSAxCiAgICBieXRlYyAxMSAvLyAiNSIKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18zIC8vIDMKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3NAogICAgLy8gbm90ZTogJ25vIGFyZ3MgcGFyYW0gc2V0JywKICAgIHB1c2hieXRlcyAibm8gYXJncyBwYXJhbSBzZXQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjcwCiAgICAvLyBjcmVhdGVBcHBQYXJhbXMgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA0CiAgICBiIHRlc3QyX2FmdGVyX2lmX2Vsc2VAMwoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QudGVzdDMoKSAtPiB2b2lkOgp0ZXN0MzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTM0LTE1MQogICAgLy8gY29uc3QgW2FwcDEsIGFwcDIsIGFwcDMsIGFwcDQsIGFwcDUsIGFwcDYsIGFwcDcsIGFwcDgsIGFwcDksIGFwcDEwLCBhcHAxMSwgYXBwMTIsIGFwcDEzLCBhcHAxNCwgYXBwMTUsIGFwcDE2XSA9IGl0eG4uc3VibWl0R3JvdXAoCiAgICAvLyAgIGFwcFR4bjEsCiAgICAvLyAgIGFwcFR4bjIsCiAgICAvLyAgIGFwcFR4bjMsCiAgICAvLyAgIGFwcFR4bjQsCiAgICAvLyAgIGFwcFR4bjUsCiAgICAvLyAgIGFwcFR4bjYsCiAgICAvLyAgIGFwcFR4bjcsCiAgICAvLyAgIGFwcFR4bjgsCiAgICAvLyAgIGFwcFR4bjksCiAgICAvLyAgIGFwcFR4bjEwLAogICAgLy8gICBhcHBUeG4xMSwKICAgIC8vICAgYXBwVHhuMTIsCiAgICAvLyAgIGFwcFR4bjEzLAogICAgLy8gICBhcHBUeG4xNCwKICAgIC8vICAgYXBwVHhuMTUsCiAgICAvLyAgIGFwcFR4bjE2LAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMDAKICAgIC8vIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIGJ5dGVjXzMgLy8gIjEiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEzNgogICAgLy8gYXBwVHhuMiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMDQKICAgIC8vIGFwcFR4bjIuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcyJyldIH0pCiAgICBieXRlYyA1IC8vICIyIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzcKICAgIC8vIGFwcFR4bjMsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTA2CiAgICAvLyBhcHBUeG4zLnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMycpXSB9KQogICAgYnl0ZWMgOSAvLyAiMyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTM4CiAgICAvLyBhcHBUeG40LAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEwOAogICAgLy8gYXBwVHhuNC5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzQnKV0gfSkKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzkKICAgIC8vIGFwcFR4bjUsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTEwCiAgICAvLyBhcHBUeG41LnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnNScpXSB9KQogICAgYnl0ZWMgMTEgLy8gIjUiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MAogICAgLy8gYXBwVHhuNiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTIKICAgIC8vIGFwcFR4bjYuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc2JyldIH0pCiAgICBwdXNoYnl0ZXMgIjYiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MQogICAgLy8gYXBwVHhuNywKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTQKICAgIC8vIGFwcFR4bjcuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc3JyldIH0pCiAgICBwdXNoYnl0ZXMgIjciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MgogICAgLy8gYXBwVHhuOCwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTYKICAgIC8vIGFwcFR4bjguc2V0KHsgYXBwQXJnczogW0J5dGVzKCc4JyldIH0pCiAgICBwdXNoYnl0ZXMgIjgiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MwogICAgLy8gYXBwVHhuOSwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTgKICAgIC8vIGFwcFR4bjkuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc5JyldIH0pCiAgICBwdXNoYnl0ZXMgIjkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0NAogICAgLy8gYXBwVHhuMTAsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTIwCiAgICAvLyBhcHBUeG4xMC5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzEwJyldIH0pCiAgICBieXRlYyAxNSAvLyAiMTAiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNDUKICAgIC8vIGFwcFR4bjExLAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEyMgogICAgLy8gYXBwVHhuMTEuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcxMScpXSB9KQogICAgYnl0ZWMgMTYgLy8gIjExIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQ2CiAgICAvLyBhcHBUeG4xMiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMjQKICAgIC8vIGFwcFR4bjEyLnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMTInKV0gfSkKICAgIGJ5dGVjIDE3IC8vICIxMiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0NwogICAgLy8gYXBwVHhuMTMsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTI2CiAgICAvLyBhcHBUeG4xMy5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzEzJyldIH0pCiAgICBieXRlYyAxOCAvLyAiMTMiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNDgKICAgIC8vIGFwcFR4bjE0LAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEyOAogICAgLy8gYXBwVHhuMTQuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcxNCcpXSB9KQogICAgYnl0ZWMgMTkgLy8gIjE0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAxNDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQ5CiAgICAvLyBhcHBUeG4xNSwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzAKICAgIC8vIGFwcFR4bjE1LnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMTUnKV0gfSkKICAgIGJ5dGVjIDIwIC8vICIxNSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMTU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE1MAogICAgLy8gYXBwVHhuMTYsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMyCiAgICAvLyBhcHBUeG4xNi5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzE2JyldIH0pCiAgICBieXRlYyAyMSAvLyAiMTYiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDE2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzQtMTUxCiAgICAvLyBjb25zdCBbYXBwMSwgYXBwMiwgYXBwMywgYXBwNCwgYXBwNSwgYXBwNiwgYXBwNywgYXBwOCwgYXBwOSwgYXBwMTAsIGFwcDExLCBhcHAxMiwgYXBwMTMsIGFwcDE0LCBhcHAxNSwgYXBwMTZdID0gaXR4bi5zdWJtaXRHcm91cCgKICAgIC8vICAgYXBwVHhuMSwKICAgIC8vICAgYXBwVHhuMiwKICAgIC8vICAgYXBwVHhuMywKICAgIC8vICAgYXBwVHhuNCwKICAgIC8vICAgYXBwVHhuNSwKICAgIC8vICAgYXBwVHhuNiwKICAgIC8vICAgYXBwVHhuNywKICAgIC8vICAgYXBwVHhuOCwKICAgIC8vICAgYXBwVHhuOSwKICAgIC8vICAgYXBwVHhuMTAsCiAgICAvLyAgIGFwcFR4bjExLAogICAgLy8gICBhcHBUeG4xMiwKICAgIC8vICAgYXBwVHhuMTMsCiAgICAvLyAgIGFwcFR4bjE0LAogICAgLy8gICBhcHBUeG4xNSwKICAgIC8vICAgYXBwVHhuMTYsCiAgICAvLyApCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTMKICAgIC8vIGFzc2VydChhcHAxLmxvZ3MoMCkgPT09IEJ5dGVzKCcxJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAwIExvZ3MKICAgIGJ5dGVjXzMgLy8gIjEiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE1NAogICAgLy8gYXNzZXJ0KGFwcDIubG9ncygwKSA9PT0gQnl0ZXMoJzInKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDEgTG9ncwogICAgYnl0ZWMgNSAvLyAiMiIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTU1CiAgICAvLyBhc3NlcnQoYXBwMy5sb2dzKDApID09PSBCeXRlcygnMycpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMiBMb2dzCiAgICBieXRlYyA5IC8vICIzIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTYKICAgIC8vIGFzc2VydChhcHA0LmxvZ3MoMCkgPT09IEJ5dGVzKCc0JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAzIExvZ3MKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTcKICAgIC8vIGFzc2VydChhcHA1LmxvZ3MoMCkgPT09IEJ5dGVzKCc1JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA0IExvZ3MKICAgIGJ5dGVjIDExIC8vICI1IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTgKICAgIC8vIGFzc2VydChhcHA2LmxvZ3MoMCkgPT09IEJ5dGVzKCc2JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA1IExvZ3MKICAgIHB1c2hieXRlcyAiNiIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTU5CiAgICAvLyBhc3NlcnQoYXBwNy5sb2dzKDApID09PSBCeXRlcygnNycpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgNiBMb2dzCiAgICBwdXNoYnl0ZXMgIjciCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2MAogICAgLy8gYXNzZXJ0KGFwcDgubG9ncygwKSA9PT0gQnl0ZXMoJzgnKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDcgTG9ncwogICAgcHVzaGJ5dGVzICI4IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjEKICAgIC8vIGFzc2VydChhcHA5LmxvZ3MoMCkgPT09IEJ5dGVzKCc5JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA4IExvZ3MKICAgIHB1c2hieXRlcyAiOSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTYyCiAgICAvLyBhc3NlcnQoYXBwMTAubG9ncygwKSA9PT0gQnl0ZXMoJzEwJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA5IExvZ3MKICAgIGJ5dGVjIDE1IC8vICIxMCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTYzCiAgICAvLyBhc3NlcnQoYXBwMTEubG9ncygwKSA9PT0gQnl0ZXMoJzExJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAxMCBMb2dzCiAgICBieXRlYyAxNiAvLyAiMTEiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2NAogICAgLy8gYXNzZXJ0KGFwcDEyLmxvZ3MoMCkgPT09IEJ5dGVzKCcxMicpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMTEgTG9ncwogICAgYnl0ZWMgMTcgLy8gIjEyIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjUKICAgIC8vIGFzc2VydChhcHAxMy5sb2dzKDApID09PSBCeXRlcygnMTMnKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDEyIExvZ3MKICAgIGJ5dGVjIDE4IC8vICIxMyIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYXBwMTQubG9ncygwKSA9PT0gQnl0ZXMoJzE0JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAxMyBMb2dzCiAgICBieXRlYyAxOSAvLyAiMTQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2NwogICAgLy8gYXNzZXJ0KGFwcDE1LmxvZ3MoMCkgPT09IEJ5dGVzKCcxNScpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMTQgTG9ncwogICAgYnl0ZWMgMjAgLy8gIjE1IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjgKICAgIC8vIGFzc2VydChhcHAxNi5sb2dzKDApID09PSBCeXRlcygnMTYnKSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuYXMgTG9ncwogICAgYnl0ZWMgMjEgLy8gIjE2IgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC50ZXN0NCgpIC0+IHZvaWQ6CnRlc3Q0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzIKICAgIC8vIGNvbnN0IGxvdHNPZkJ5dGVzID0gb3AuYnplcm8oMjA0NCkKICAgIHB1c2hpbnQgMjA0NCAvLyAyMDQ0CiAgICBiemVybwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQKICAgIC8vIGNvbnN0IGFwcHJvdmFsMiA9IEJ5dGVzLmZyb21IZXgoJzgwJyArICdGQzBmJykKICAgIHB1c2hieXRlcyAweDgwZmMwZgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQtMTc1CiAgICAvLyBjb25zdCBhcHByb3ZhbDIgPSBCeXRlcy5mcm9tSGV4KCc4MCcgKyAnRkMwZicpCiAgICAvLyAgIC5jb25jYXQobG90c09mQnl0ZXMpCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTc2CiAgICAvLyAuY29uY2F0KEJ5dGVzLmZyb21IZXgoJzQ4JykpCiAgICBwdXNoYnl0ZXMgMHg0OAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQtMTc2CiAgICAvLyBjb25zdCBhcHByb3ZhbDIgPSBCeXRlcy5mcm9tSGV4KCc4MCcgKyAnRkMwZicpCiAgICAvLyAgIC5jb25jYXQobG90c09mQnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoQnl0ZXMuZnJvbUhleCgnNDgnKSkKICAgIGNvbmNhdAogICAgZHVwbiAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE3OQogICAgLy8gYXBwcm92YWxQcm9ncmFtOiBbYXBwcm92YWwxLCBhcHByb3ZhbDIsIGFwcHJvdmFsMiwgYXBwcm92YWwyXSwKICAgIGNvdmVyIDIKICAgIGNvdmVyIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTg1CiAgICAvLyBjb25zdCBhcHAxID0gYXBwVHhuMS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxODMKICAgIC8vIGV4dHJhUHJvZ3JhbVBhZ2VzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgyCiAgICAvLyBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICBieXRlY18zIC8vICIxIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgxCiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTc4LTE4NAogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBbYXBwcm92YWwxLCBhcHByb3ZhbDIsIGFwcHJvdmFsMiwgYXBwcm92YWwyXSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gICBleHRyYVByb2dyYW1QYWdlczogMywKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0NF9uZXh0X3R4bkAxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxODUKICAgIC8vIGNvbnN0IGFwcDEgPSBhcHBUeG4xLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBFeHRyYVByb2dyYW1QYWdlcwogICAgaXR4biBOdW1BcHByb3ZhbFByb2dyYW1QYWdlcwogICAgc3dhcAogICAgaXR4biBOdW1DbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBjb3ZlciAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXJ0KGFwcDEuZXh0cmFQcm9ncmFtUGFnZXMgPT09IDMsICdleHRyYSBwYWdlcyA9IDMnKQogICAgaW50Y18zIC8vIDMKICAgID09CiAgICBhc3NlcnQgLy8gZXh0cmEgcGFnZXMgPSAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4NwogICAgLy8gYXNzZXJ0KGFwcDEubnVtQXBwcm92YWxQcm9ncmFtUGFnZXMgPT09IDIsICdhcHByb3ZhbCBwYWdlcyA9IDInKQogICAgcHVzaGludCAyIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gYXBwcm92YWwgcGFnZXMgPSAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4OAogICAgLy8gYXNzZXJ0KGFwcDEuYXBwcm92YWxQcm9ncmFtUGFnZXMoMCkgPT09IGFwcHJvdmFsMS5jb25jYXQoYXBwcm92YWwyKS5jb25jYXQoYXBwcm92YWwyLnNsaWNlKDAsIC0zKSksICdleHBlY3RlZCBhcHByb3ZhbCBwYWdlIDAnKQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5hcyBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTg4CiAgICAvLyBhc3NlcnQoYXBwMS5hcHByb3ZhbFByb2dyYW1QYWdlcygwKSA9PT0gYXBwcm92YWwxLmNvbmNhdChhcHByb3ZhbDIpLmNvbmNhdChhcHByb3ZhbDIuc2xpY2UoMCwgLTMpKSwgJ2V4cGVjdGVkIGFwcHJvdmFsIHBhZ2UgMCcpCiAgICB1bmNvdmVyIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDAKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18wIC8vIDAKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3dhcAogICAgaW50Y18zIC8vIDMKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18zIC8vIDMKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLQogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgc3dhcAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYXBwcm92YWwgcGFnZSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KGFwcDEuYXBwcm92YWxQcm9ncmFtUGFnZXMoMSkgPT09IGFwcHJvdmFsMi5zbGljZSgtMykuY29uY2F0KGFwcHJvdmFsMiksICdleHBlY3RlZCBhcHByb3ZhbCBwYWdlIDEnKQogICAgcHVzaGludCAxIC8vIDEKICAgIGl0eG5hcyBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgc3dhcAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMyAvLyAzCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAxCiAgICBzd2FwCiAgICAtCiAgICBkaWcgMgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBzd2FwCiAgICBjb25jYXQKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYXBwcm92YWwgcGFnZSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE5MAogICAgLy8gYXNzZXJ0KGFwcDEubnVtQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcyA9PT0gMSwgJ2NsZWFyIHN0YXRlIHBhZ2VzID0gMScpCiAgICBwdXNoaW50IDEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBjbGVhciBzdGF0ZSBwYWdlcyA9IDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTkxCiAgICAvLyBhc3NlcnQoYXBwMS5jbGVhclN0YXRlUHJvZ3JhbVBhZ2VzKDApID09PSBBUFBST1ZFLCAnZXhwZWN0ZWQgY2xlYXIgc3RhdGUgcGFnZScpCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bmFzIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE5MQogICAgLy8gYXNzZXJ0KGFwcDEuY2xlYXJTdGF0ZVByb2dyYW1QYWdlcygwKSA9PT0gQVBQUk9WRSwgJ2V4cGVjdGVkIGNsZWFyIHN0YXRlIHBhZ2UnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBjbGVhciBzdGF0ZSBwYWdlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0LmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgKICAgIC8vIG5hbWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogQnl0ZXMoKSB9KQogICAgYnl0ZWNfMiAvLyAibmFtZSIKICAgIHB1c2hieXRlcyAweAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA2IDUgMyAxMDAwCiAgICBieXRlY2Jsb2NrIDB4MDk4MTAxIDB4MDkzNjFhMDBiMDgxMDEgIm5hbWUiICIxIiAidW5pdCIgIjIiICJBU1QxIiAiQVNUMiIgIkFTVDMiICIzIiAiNCIgIjUiICIzcmQiICJ3aXRoIGFyZ3MgcGFyYW0gc2V0IiAiNDIiICIxMCIgIjExIiAiMTIiICIxMyIgIjE0IiAiMTUiICIxNiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBJdHhuRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyMDI1NGY5MSAvLyBtZXRob2QgInRlc3QxKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZjE5MDg1MjQgLy8gbWV0aG9kICJ0ZXN0Migpdm9pZCIKICAgIHB1c2hieXRlcyAweGRmOTIwZjM3IC8vIG1ldGhvZCAidGVzdDMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgzZDQ2MzQ1YyAvLyBtZXRob2QgInRlc3Q0KCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3QxX3JvdXRlQDUgbWFpbl90ZXN0Ml9yb3V0ZUA2IG1haW5fdGVzdDNfcm91dGVANyBtYWluX3Rlc3Q0X3JvdXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgSXR4bkRlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNjoKICAgIHJldHVybgoKbWFpbl90ZXN0NF9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzEKICAgIC8vIHB1YmxpYyB0ZXN0NCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdDQKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE2CgptYWluX3Rlc3QzX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk1CiAgICAvLyBwdWJsaWMgdGVzdDMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3QzCiAgICBwdXNoaW50IDEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNgoKbWFpbl90ZXN0Ml9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1OAogICAgLy8gcHVibGljIHRlc3QyKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0MgogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTYKCm1haW5fdGVzdDFfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTAKICAgIC8vIHB1YmxpYyB0ZXN0MSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdDEKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE2CgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTIKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE1CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTYKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0LnRlc3QxKCkgLT4gdm9pZDoKdGVzdDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEwCiAgICAvLyBwdWJsaWMgdGVzdDEoKSB7CiAgICBwcm90byAwIDAKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgKICAgIC8vIG5hbWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogQnl0ZXMoKSB9KQogICAgYnl0ZWNfMiAvLyAibmFtZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTEKICAgIC8vIHRoaXMubmFtZS52YWx1ZSA9IEJ5dGVzKCdBU1QxJykKICAgIGJ5dGVjIDYgLy8gIkFTVDEiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4CiAgICAvLyBuYW1lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCkgfSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJuYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgKICAgIC8vIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxOQogICAgLy8gcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgKICAgIC8vIG5hbWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogQnl0ZXMoKSB9KQogICAgYnl0ZWNfMiAvLyAibmFtZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjIKICAgIC8vIHRoaXMubmFtZS52YWx1ZSA9IEJ5dGVzKCdBU1QyJykKICAgIGJ5dGVjIDcgLy8gIkFTVDIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyMwogICAgLy8gY29uc3QgYXNzZXQxX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTcKICAgIC8vIGRlY2ltYWxzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNgogICAgLy8gdW5pdE5hbWU6ICd1bml0JywKICAgIGJ5dGVjIDQgLy8gInVuaXQiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbDogMTAwMCwKICAgIGludGMgNCAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMtMjAKICAgIC8vIGNvbnN0IGFzc2V0UGFyYW1zID0gaXR4bi5hc3NldENvbmZpZyh7CiAgICAvLyAgIHRvdGFsOiAxMDAwLAogICAgLy8gICBhc3NldE5hbWU6IHRoaXMubmFtZS52YWx1ZSwKICAgIC8vICAgdW5pdE5hbWU6ICd1bml0JywKICAgIC8vICAgZGVjaW1hbHM6IDMsCiAgICAvLyAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIH0pCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkAxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyMwogICAgLy8gY29uc3QgYXNzZXQxX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDb25maWdBc3NldE5hbWUKICAgIGZyYW1lX2J1cnkgMAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4CiAgICAvLyBuYW1lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCkgfSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJuYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IGFzc2V0Ml90eG4gPSBhc3NldFBhcmFtcy5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBmcmFtZV9kaWcgMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTcKICAgIC8vIGRlY2ltYWxzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNgogICAgLy8gdW5pdE5hbWU6ICd1bml0JywKICAgIGJ5dGVjIDQgLy8gInVuaXQiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbDogMTAwMCwKICAgIGludGMgNCAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMtMjAKICAgIC8vIGNvbnN0IGFzc2V0UGFyYW1zID0gaXR4bi5hc3NldENvbmZpZyh7CiAgICAvLyAgIHRvdGFsOiAxMDAwLAogICAgLy8gICBhc3NldE5hbWU6IHRoaXMubmFtZS52YWx1ZSwKICAgIC8vICAgdW5pdE5hbWU6ICd1bml0JywKICAgIC8vICAgZGVjaW1hbHM6IDMsCiAgICAvLyAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIH0pCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyNwogICAgLy8gY29uc3QgYXNzZXQyX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDb25maWdBc3NldE5hbWUKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjkKICAgIC8vIGFzc2VydChhc3NldDFfdHhuLmFzc2V0TmFtZSA9PT0gQnl0ZXMoJ0FTVDEnKSwgJ2Fzc2V0MV90eG4gaXMgY29ycmVjdCcpCiAgICBmcmFtZV9kaWcgMAogICAgYnl0ZWMgNiAvLyAiQVNUMSIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQxX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjMwCiAgICAvLyBhc3NlcnQoYXNzZXQyX3R4bi5hc3NldE5hbWUgPT09IEJ5dGVzKCdBU1QyJyksICdhc3NldDJfdHhuIGlzIGNvcnJlY3QnKQogICAgYnl0ZWMgNyAvLyAiQVNUMiIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQyX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQoYXNzZXQxX3R4bi5jcmVhdGVkQXNzZXQubmFtZSA9PT0gQnl0ZXMoJ0FTVDEnKSwgJ2NyZWF0ZWQgYXNzZXQgMSBpcyBjb3JyZWN0JykKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBieXRlYyA2IC8vICJBU1QxIgogICAgPT0KICAgIGFzc2VydCAvLyBjcmVhdGVkIGFzc2V0IDEgaXMgY29ycmVjdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozMgogICAgLy8gYXNzZXJ0KGFzc2V0Ml90eG4uY3JlYXRlZEFzc2V0Lm5hbWUgPT09IEJ5dGVzKCdBU1QyJyksICdjcmVhdGVkIGFzc2V0IDIgaXMgY29ycmVjdCcpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgYnl0ZWMgNyAvLyAiQVNUMiIKICAgID09CiAgICBhc3NlcnQgLy8gY3JlYXRlZCBhc3NldCAyIGlzIGNvcnJlY3QKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NDQKICAgIC8vIGNvbnN0IFthcHBDcmVhdGVUeG4sIGFzc2V0M190eG5dID0gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozNC0zOAogICAgLy8gY29uc3QgYXBwQ3JlYXRlUGFyYW1zID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBmZWU6IDAsCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MzcKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDFfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NDQKICAgIC8vIGNvbnN0IFthcHBDcmVhdGVUeG4sIGFzc2V0M190eG5dID0gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9uZXh0CiAgICBmcmFtZV9kaWcgMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGZyYW1lX2RpZyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNwogICAgLy8gZGVjaW1hbHM6IDMsCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2CiAgICAvLyB1bml0TmFtZTogJ3VuaXQnLAogICAgYnl0ZWMgNCAvLyAidW5pdCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0MQogICAgLy8gYXNzZXROYW1lOiAnQVNUMycsCiAgICBieXRlYyA4IC8vICJBU1QzIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsOiAxMDAwLAogICAgaW50YyA0IC8vIDEwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMy0yMAogICAgLy8gY29uc3QgYXNzZXRQYXJhbXMgPSBpdHhuLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgdG90YWw6IDEwMDAsCiAgICAvLyAgIGFzc2V0TmFtZTogdGhpcy5uYW1lLnZhbHVlLAogICAgLy8gICB1bml0TmFtZTogJ3VuaXQnLAogICAgLy8gICBkZWNpbWFsczogMywKICAgIC8vICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gfSkKICAgIGludGNfMyAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QxX25leHRfdHhuQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQ0CiAgICAvLyBjb25zdCBbYXBwQ3JlYXRlVHhuLCBhc3NldDNfdHhuXSA9IGl0eG4uc3VibWl0R3JvdXAoYXBwQ3JlYXRlUGFyYW1zLCBhc3NldFBhcmFtcykKICAgIGl0eG5fc3VibWl0CiAgICBnaXR4biAwIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICBpdHhuIENvbmZpZ0Fzc2V0TmFtZQogICAgc3dhcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0NgogICAgLy8gYXNzZXJ0KGFwcENyZWF0ZVR4bi5jcmVhdGVkQXBwLCAnYXBwIGlzIGNyZWF0ZWQnKQogICAgYXNzZXJ0IC8vIGFwcCBpcyBjcmVhdGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQ3CiAgICAvLyBhc3NlcnQoYXNzZXQzX3R4bi5hc3NldE5hbWUgPT09IEJ5dGVzKCdBU1QzJyksICdhc3NldDNfdHhuIGlzIGNvcnJlY3QnKQogICAgYnl0ZWMgOCAvLyAiQVNUMyIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQzX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUwCiAgICAvLyBub3RlOiAnM3JkJywKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBkdXAKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBieiB0ZXN0MV9uZXh0X2ZpZWxkQDYKCnRlc3QxX3NldF9Ob3RlXzBfdG9fMEA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1MAogICAgLy8gbm90ZTogJzNyZCcsCiAgICBieXRlYyAxMiAvLyAiM3JkIgogICAgaXR4bl9maWVsZCBOb3RlCgp0ZXN0MV9uZXh0X2ZpZWxkQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjM0LTM4CiAgICAvLyBjb25zdCBhcHBDcmVhdGVQYXJhbXMgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGZlZTogMCwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozNwogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1NQogICAgLy8gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUzCiAgICAvLyBub3RlOiAnM3JkJywKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBkdXAKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBieiB0ZXN0MV9uZXh0X2ZpZWxkQDkKCnRlc3QxX3NldF9Ob3RlXzBfdG9fMEA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1MwogICAgLy8gbm90ZTogJzNyZCcsCiAgICBieXRlYyAxMiAvLyAiM3JkIgogICAgaXR4bl9maWVsZCBOb3RlCgp0ZXN0MV9uZXh0X2ZpZWxkQDk6CiAgICBmcmFtZV9kaWcgMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGZyYW1lX2RpZyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNwogICAgLy8gZGVjaW1hbHM6IDMsCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2CiAgICAvLyB1bml0TmFtZTogJ3VuaXQnLAogICAgYnl0ZWMgNCAvLyAidW5pdCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0MQogICAgLy8gYXNzZXROYW1lOiAnQVNUMycsCiAgICBieXRlYyA4IC8vICJBU1QzIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsOiAxMDAwLAogICAgaW50YyA0IC8vIDEwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMy0yMAogICAgLy8gY29uc3QgYXNzZXRQYXJhbXMgPSBpdHhuLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgdG90YWw6IDEwMDAsCiAgICAvLyAgIGFzc2V0TmFtZTogdGhpcy5uYW1lLnZhbHVlLAogICAgLy8gICB1bml0TmFtZTogJ3VuaXQnLAogICAgLy8gICBkZWNpbWFsczogMywKICAgIC8vICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gfSkKICAgIGludGNfMyAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QxX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1NQogICAgLy8gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QudGVzdDIoKSAtPiB2b2lkOgp0ZXN0MjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NTgKICAgIC8vIHB1YmxpYyB0ZXN0MigpIHsKICAgIHByb3RvIDAgMAogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NjAKICAgIC8vIGlmIChUeG4ubnVtQXBwQXJncykgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IHRlc3QyX2Vsc2VfYm9keUAyCgp0ZXN0Ml9pZl9ib2R5QDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCBhcmdzID0gW0J5dGVzKCcxJyksIEJ5dGVzKCcyJyldIGFzIGNvbnN0CiAgICBieXRlY18zIC8vICIxIgogICAgZnJhbWVfYnVyeSAwCiAgICBieXRlYyA1IC8vICIyIgogICAgZnJhbWVfYnVyeSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjY1CiAgICAvLyBhcHBBcmdzOiBhcmdzLAogICAgcHVzaGludCAyIC8vIDIKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo2NgogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLk5vT3AsCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA2CiAgICBwdXNoaW50IDEgLy8gMQogICAgZnJhbWVfYnVyeSA0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjY3CiAgICAvLyBub3RlOiAnd2l0aCBhcmdzIHBhcmFtIHNldCcsCiAgICBieXRlYyAxMyAvLyAid2l0aCBhcmdzIHBhcmFtIHNldCIKCnRlc3QyX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NzcKICAgIC8vIGNvbnN0IGNyZWF0ZUFwcFR4biA9IGNyZWF0ZUFwcFBhcmFtcy5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBOb3RlCiAgICBmcmFtZV9kaWcgNAogICAgcHVzaGludCAxIC8vIDEKICAgID49CiAgICBieiB0ZXN0Ml9uZXh0X2ZpZWxkQDUKCnRlc3QyX3NldF9PbkNvbXBsZXRpb25fMF90b18wQDQ6CiAgICBmcmFtZV9kaWcgNgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCnRlc3QyX25leHRfZmllbGRANToKICAgIGZyYW1lX2RpZyAwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18zIC8vIDMKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjc3CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4gPSBjcmVhdGVBcHBQYXJhbXMuc3VibWl0KCkKICAgIGJ6IHRlc3QyX25leHRfZmllbGRANwoKdGVzdDJfc2V0X0FwcGxpY2F0aW9uQXJnc18yX3RvXzJANjoKICAgIGZyYW1lX2RpZyA1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKdGVzdDJfbmV4dF9maWVsZEA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo2Mi02OAogICAgLy8gY3JlYXRlQXBwUGFyYW1zID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBhcHBBcmdzOiBhcmdzLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uTm9PcCwKICAgIC8vICAgbm90ZTogJ3dpdGggYXJncyBwYXJhbSBzZXQnLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QyX25leHRfdHhuQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjc3CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4gPSBjcmVhdGVBcHBQYXJhbXMuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIE5vdGUKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3OAogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5hcHBBcmdzKDApID09PSBCeXRlcygnMScpLCAnY29ycmVjdCBhcmdzIHVzZWQgMScpCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWNfMyAvLyAiMSIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3OQogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5hcHBBcmdzKDEpID09PSBCeXRlcygnMicpLCAnY29ycmVjdCBhcmdzIHVzZWQgMicpCiAgICBwdXNoaW50IDEgLy8gMQogICAgaXR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgNSAvLyAiMiIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4MQogICAgLy8gaWYgKFR4bi5udW1BcHBBcmdzID4gMSkgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIHB1c2hpbnQgMSAvLyAxCiAgICA+CiAgICBieiB0ZXN0Ml9hZnRlcl9pZl9lbHNlQDExCgp0ZXN0Ml9pZl9ib2R5QDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgyLTg5CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4yID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICAgIGFwcEFyZ3M6IFtCeXRlcygnNDInKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4NwogICAgLy8gYXBwQXJnczogW0J5dGVzKCc0MicpXSwKICAgIGJ5dGVjIDE0IC8vICI0MiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjg2CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6ODItODgKICAgIC8vIGNvbnN0IGNyZWF0ZUFwcFR4bjIgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgICAgYXBwQXJnczogW0J5dGVzKCc0MicpXSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QyX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4Mi04OQogICAgLy8gY29uc3QgY3JlYXRlQXBwVHhuMiA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgICBhcHBBcmdzOiBbQnl0ZXMoJzQyJyldLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjkwCiAgICAvLyBhc3NlcnQoY3JlYXRlQXBwVHhuMi5hcHBBcmdzKDApID09PSBCeXRlcygnNDInKSwgJ2NvcnJlY3QgYXJncyB1c2VkIDInKQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDE0IC8vICI0MiIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5MQogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5ub3RlID09PSBCeXRlcygnd2l0aCBhcmdzIHBhcmFtIHNldCcpKQogICAgZnJhbWVfZGlnIDIKICAgIGJ5dGVjIDEzIC8vICJ3aXRoIGFyZ3MgcGFyYW0gc2V0IgogICAgPT0KICAgIGFzc2VydAoKdGVzdDJfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIHJldHN1YgoKdGVzdDJfZWxzZV9ib2R5QDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjczCiAgICAvLyBhcHBBcmdzOiBbQnl0ZXMoJzMnKSwgJzQnLCBCeXRlcygnNScpXSwKICAgIGJ5dGVjIDkgLy8gIjMiCiAgICBmcmFtZV9idXJ5IDAKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgZnJhbWVfYnVyeSAxCiAgICBieXRlYyAxMSAvLyAiNSIKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18zIC8vIDMKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3NAogICAgLy8gbm90ZTogJ25vIGFyZ3MgcGFyYW0gc2V0JywKICAgIHB1c2hieXRlcyAibm8gYXJncyBwYXJhbSBzZXQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjcwCiAgICAvLyBjcmVhdGVBcHBQYXJhbXMgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA0CiAgICBiIHRlc3QyX2FmdGVyX2lmX2Vsc2VAMwoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QudGVzdDMoKSAtPiB2b2lkOgp0ZXN0MzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTM0LTE1MQogICAgLy8gY29uc3QgW2FwcDEsIGFwcDIsIGFwcDMsIGFwcDQsIGFwcDUsIGFwcDYsIGFwcDcsIGFwcDgsIGFwcDksIGFwcDEwLCBhcHAxMSwgYXBwMTIsIGFwcDEzLCBhcHAxNCwgYXBwMTUsIGFwcDE2XSA9IGl0eG4uc3VibWl0R3JvdXAoCiAgICAvLyAgIGFwcFR4bjEsCiAgICAvLyAgIGFwcFR4bjIsCiAgICAvLyAgIGFwcFR4bjMsCiAgICAvLyAgIGFwcFR4bjQsCiAgICAvLyAgIGFwcFR4bjUsCiAgICAvLyAgIGFwcFR4bjYsCiAgICAvLyAgIGFwcFR4bjcsCiAgICAvLyAgIGFwcFR4bjgsCiAgICAvLyAgIGFwcFR4bjksCiAgICAvLyAgIGFwcFR4bjEwLAogICAgLy8gICBhcHBUeG4xMSwKICAgIC8vICAgYXBwVHhuMTIsCiAgICAvLyAgIGFwcFR4bjEzLAogICAgLy8gICBhcHBUeG4xNCwKICAgIC8vICAgYXBwVHhuMTUsCiAgICAvLyAgIGFwcFR4bjE2LAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMDAKICAgIC8vIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIGJ5dGVjXzMgLy8gIjEiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEzNgogICAgLy8gYXBwVHhuMiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMDQKICAgIC8vIGFwcFR4bjIuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcyJyldIH0pCiAgICBieXRlYyA1IC8vICIyIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzcKICAgIC8vIGFwcFR4bjMsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTA2CiAgICAvLyBhcHBUeG4zLnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMycpXSB9KQogICAgYnl0ZWMgOSAvLyAiMyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTM4CiAgICAvLyBhcHBUeG40LAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEwOAogICAgLy8gYXBwVHhuNC5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzQnKV0gfSkKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzkKICAgIC8vIGFwcFR4bjUsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTEwCiAgICAvLyBhcHBUeG41LnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnNScpXSB9KQogICAgYnl0ZWMgMTEgLy8gIjUiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MAogICAgLy8gYXBwVHhuNiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTIKICAgIC8vIGFwcFR4bjYuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc2JyldIH0pCiAgICBwdXNoYnl0ZXMgIjYiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MQogICAgLy8gYXBwVHhuNywKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTQKICAgIC8vIGFwcFR4bjcuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc3JyldIH0pCiAgICBwdXNoYnl0ZXMgIjciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MgogICAgLy8gYXBwVHhuOCwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTYKICAgIC8vIGFwcFR4bjguc2V0KHsgYXBwQXJnczogW0J5dGVzKCc4JyldIH0pCiAgICBwdXNoYnl0ZXMgIjgiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MwogICAgLy8gYXBwVHhuOSwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTgKICAgIC8vIGFwcFR4bjkuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc5JyldIH0pCiAgICBwdXNoYnl0ZXMgIjkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0NAogICAgLy8gYXBwVHhuMTAsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTIwCiAgICAvLyBhcHBUeG4xMC5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzEwJyldIH0pCiAgICBieXRlYyAxNSAvLyAiMTAiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNDUKICAgIC8vIGFwcFR4bjExLAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEyMgogICAgLy8gYXBwVHhuMTEuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcxMScpXSB9KQogICAgYnl0ZWMgMTYgLy8gIjExIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQ2CiAgICAvLyBhcHBUeG4xMiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMjQKICAgIC8vIGFwcFR4bjEyLnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMTInKV0gfSkKICAgIGJ5dGVjIDE3IC8vICIxMiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0NwogICAgLy8gYXBwVHhuMTMsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTI2CiAgICAvLyBhcHBUeG4xMy5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzEzJyldIH0pCiAgICBieXRlYyAxOCAvLyAiMTMiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNDgKICAgIC8vIGFwcFR4bjE0LAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEyOAogICAgLy8gYXBwVHhuMTQuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcxNCcpXSB9KQogICAgYnl0ZWMgMTkgLy8gIjE0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAxNDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQ5CiAgICAvLyBhcHBUeG4xNSwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzAKICAgIC8vIGFwcFR4bjE1LnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMTUnKV0gfSkKICAgIGJ5dGVjIDIwIC8vICIxNSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMTU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE1MAogICAgLy8gYXBwVHhuMTYsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMyCiAgICAvLyBhcHBUeG4xNi5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzE2JyldIH0pCiAgICBieXRlYyAyMSAvLyAiMTYiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDE2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzQtMTUxCiAgICAvLyBjb25zdCBbYXBwMSwgYXBwMiwgYXBwMywgYXBwNCwgYXBwNSwgYXBwNiwgYXBwNywgYXBwOCwgYXBwOSwgYXBwMTAsIGFwcDExLCBhcHAxMiwgYXBwMTMsIGFwcDE0LCBhcHAxNSwgYXBwMTZdID0gaXR4bi5zdWJtaXRHcm91cCgKICAgIC8vICAgYXBwVHhuMSwKICAgIC8vICAgYXBwVHhuMiwKICAgIC8vICAgYXBwVHhuMywKICAgIC8vICAgYXBwVHhuNCwKICAgIC8vICAgYXBwVHhuNSwKICAgIC8vICAgYXBwVHhuNiwKICAgIC8vICAgYXBwVHhuNywKICAgIC8vICAgYXBwVHhuOCwKICAgIC8vICAgYXBwVHhuOSwKICAgIC8vICAgYXBwVHhuMTAsCiAgICAvLyAgIGFwcFR4bjExLAogICAgLy8gICBhcHBUeG4xMiwKICAgIC8vICAgYXBwVHhuMTMsCiAgICAvLyAgIGFwcFR4bjE0LAogICAgLy8gICBhcHBUeG4xNSwKICAgIC8vICAgYXBwVHhuMTYsCiAgICAvLyApCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTMKICAgIC8vIGFzc2VydChhcHAxLmxvZ3MoMCkgPT09IEJ5dGVzKCcxJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAwIExvZ3MKICAgIGJ5dGVjXzMgLy8gIjEiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE1NAogICAgLy8gYXNzZXJ0KGFwcDIubG9ncygwKSA9PT0gQnl0ZXMoJzInKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDEgTG9ncwogICAgYnl0ZWMgNSAvLyAiMiIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTU1CiAgICAvLyBhc3NlcnQoYXBwMy5sb2dzKDApID09PSBCeXRlcygnMycpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMiBMb2dzCiAgICBieXRlYyA5IC8vICIzIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTYKICAgIC8vIGFzc2VydChhcHA0LmxvZ3MoMCkgPT09IEJ5dGVzKCc0JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAzIExvZ3MKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTcKICAgIC8vIGFzc2VydChhcHA1LmxvZ3MoMCkgPT09IEJ5dGVzKCc1JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA0IExvZ3MKICAgIGJ5dGVjIDExIC8vICI1IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTgKICAgIC8vIGFzc2VydChhcHA2LmxvZ3MoMCkgPT09IEJ5dGVzKCc2JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA1IExvZ3MKICAgIHB1c2hieXRlcyAiNiIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTU5CiAgICAvLyBhc3NlcnQoYXBwNy5sb2dzKDApID09PSBCeXRlcygnNycpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgNiBMb2dzCiAgICBwdXNoYnl0ZXMgIjciCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2MAogICAgLy8gYXNzZXJ0KGFwcDgubG9ncygwKSA9PT0gQnl0ZXMoJzgnKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDcgTG9ncwogICAgcHVzaGJ5dGVzICI4IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjEKICAgIC8vIGFzc2VydChhcHA5LmxvZ3MoMCkgPT09IEJ5dGVzKCc5JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA4IExvZ3MKICAgIHB1c2hieXRlcyAiOSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTYyCiAgICAvLyBhc3NlcnQoYXBwMTAubG9ncygwKSA9PT0gQnl0ZXMoJzEwJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA5IExvZ3MKICAgIGJ5dGVjIDE1IC8vICIxMCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTYzCiAgICAvLyBhc3NlcnQoYXBwMTEubG9ncygwKSA9PT0gQnl0ZXMoJzExJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAxMCBMb2dzCiAgICBieXRlYyAxNiAvLyAiMTEiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2NAogICAgLy8gYXNzZXJ0KGFwcDEyLmxvZ3MoMCkgPT09IEJ5dGVzKCcxMicpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMTEgTG9ncwogICAgYnl0ZWMgMTcgLy8gIjEyIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjUKICAgIC8vIGFzc2VydChhcHAxMy5sb2dzKDApID09PSBCeXRlcygnMTMnKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDEyIExvZ3MKICAgIGJ5dGVjIDE4IC8vICIxMyIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYXBwMTQubG9ncygwKSA9PT0gQnl0ZXMoJzE0JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAxMyBMb2dzCiAgICBieXRlYyAxOSAvLyAiMTQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2NwogICAgLy8gYXNzZXJ0KGFwcDE1LmxvZ3MoMCkgPT09IEJ5dGVzKCcxNScpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMTQgTG9ncwogICAgYnl0ZWMgMjAgLy8gIjE1IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjgKICAgIC8vIGFzc2VydChhcHAxNi5sb2dzKDApID09PSBCeXRlcygnMTYnKSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuYXMgTG9ncwogICAgYnl0ZWMgMjEgLy8gIjE2IgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC50ZXN0NCgpIC0+IHZvaWQ6CnRlc3Q0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzIKICAgIC8vIGNvbnN0IGxvdHNPZkJ5dGVzID0gb3AuYnplcm8oMjA0NCkKICAgIHB1c2hpbnQgMjA0NCAvLyAyMDQ0CiAgICBiemVybwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQKICAgIC8vIGNvbnN0IGFwcHJvdmFsMiA9IEJ5dGVzLmZyb21IZXgoJzgwJyArICdGQzBmJykKICAgIHB1c2hieXRlcyAweDgwZmMwZgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQtMTc1CiAgICAvLyBjb25zdCBhcHByb3ZhbDIgPSBCeXRlcy5mcm9tSGV4KCc4MCcgKyAnRkMwZicpCiAgICAvLyAgIC5jb25jYXQobG90c09mQnl0ZXMpCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTc2CiAgICAvLyAuY29uY2F0KEJ5dGVzLmZyb21IZXgoJzQ4JykpCiAgICBwdXNoYnl0ZXMgMHg0OAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQtMTc2CiAgICAvLyBjb25zdCBhcHByb3ZhbDIgPSBCeXRlcy5mcm9tSGV4KCc4MCcgKyAnRkMwZicpCiAgICAvLyAgIC5jb25jYXQobG90c09mQnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoQnl0ZXMuZnJvbUhleCgnNDgnKSkKICAgIGNvbmNhdAogICAgZHVwbiAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE3OQogICAgLy8gYXBwcm92YWxQcm9ncmFtOiBbYXBwcm92YWwxLCBhcHByb3ZhbDIsIGFwcHJvdmFsMiwgYXBwcm92YWwyXSwKICAgIGNvdmVyIDIKICAgIGNvdmVyIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTg1CiAgICAvLyBjb25zdCBhcHAxID0gYXBwVHhuMS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxODMKICAgIC8vIGV4dHJhUHJvZ3JhbVBhZ2VzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgyCiAgICAvLyBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICBieXRlY18zIC8vICIxIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgxCiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTc4LTE4NAogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBbYXBwcm92YWwxLCBhcHByb3ZhbDIsIGFwcHJvdmFsMiwgYXBwcm92YWwyXSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gICBleHRyYVByb2dyYW1QYWdlczogMywKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0NF9uZXh0X3R4bkAxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxODUKICAgIC8vIGNvbnN0IGFwcDEgPSBhcHBUeG4xLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBFeHRyYVByb2dyYW1QYWdlcwogICAgaXR4biBOdW1BcHByb3ZhbFByb2dyYW1QYWdlcwogICAgc3dhcAogICAgaXR4biBOdW1DbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBjb3ZlciAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXJ0KGFwcDEuZXh0cmFQcm9ncmFtUGFnZXMgPT09IDMsICdleHRyYSBwYWdlcyA9IDMnKQogICAgaW50Y18zIC8vIDMKICAgID09CiAgICBhc3NlcnQgLy8gZXh0cmEgcGFnZXMgPSAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4NwogICAgLy8gYXNzZXJ0KGFwcDEubnVtQXBwcm92YWxQcm9ncmFtUGFnZXMgPT09IDIsICdhcHByb3ZhbCBwYWdlcyA9IDInKQogICAgcHVzaGludCAyIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gYXBwcm92YWwgcGFnZXMgPSAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4OAogICAgLy8gYXNzZXJ0KGFwcDEuYXBwcm92YWxQcm9ncmFtUGFnZXMoMCkgPT09IGFwcHJvdmFsMS5jb25jYXQoYXBwcm92YWwyKS5jb25jYXQoYXBwcm92YWwyLnNsaWNlKDAsIC0zKSksICdleHBlY3RlZCBhcHByb3ZhbCBwYWdlIDAnKQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5hcyBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTg4CiAgICAvLyBhc3NlcnQoYXBwMS5hcHByb3ZhbFByb2dyYW1QYWdlcygwKSA9PT0gYXBwcm92YWwxLmNvbmNhdChhcHByb3ZhbDIpLmNvbmNhdChhcHByb3ZhbDIuc2xpY2UoMCwgLTMpKSwgJ2V4cGVjdGVkIGFwcHJvdmFsIHBhZ2UgMCcpCiAgICB1bmNvdmVyIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDAKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18wIC8vIDAKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3dhcAogICAgaW50Y18zIC8vIDMKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18zIC8vIDMKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLQogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgc3dhcAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYXBwcm92YWwgcGFnZSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KGFwcDEuYXBwcm92YWxQcm9ncmFtUGFnZXMoMSkgPT09IGFwcHJvdmFsMi5zbGljZSgtMykuY29uY2F0KGFwcHJvdmFsMiksICdleHBlY3RlZCBhcHByb3ZhbCBwYWdlIDEnKQogICAgcHVzaGludCAxIC8vIDEKICAgIGl0eG5hcyBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgc3dhcAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMyAvLyAzCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAxCiAgICBzd2FwCiAgICAtCiAgICBkaWcgMgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBzd2FwCiAgICBjb25jYXQKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYXBwcm92YWwgcGFnZSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE5MAogICAgLy8gYXNzZXJ0KGFwcDEubnVtQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcyA9PT0gMSwgJ2NsZWFyIHN0YXRlIHBhZ2VzID0gMScpCiAgICBwdXNoaW50IDEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBjbGVhciBzdGF0ZSBwYWdlcyA9IDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTkxCiAgICAvLyBhc3NlcnQoYXBwMS5jbGVhclN0YXRlUHJvZ3JhbVBhZ2VzKDApID09PSBBUFBST1ZFLCAnZXhwZWN0ZWQgY2xlYXIgc3RhdGUgcGFnZScpCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bmFzIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE5MQogICAgLy8gYXNzZXJ0KGFwcDEuY2xlYXJTdGF0ZVByb2dyYW1QYWdlcygwKSA9PT0gQVBQUk9WRSwgJ2V4cGVjdGVkIGNsZWFyIHN0YXRlIHBhZ2UnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBjbGVhciBzdGF0ZSBwYWdlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKCmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgpjb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4CiAgICAvLyBuYW1lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCkgfSkKICAgIGJ5dGVjXzIgLy8gIm5hbWUiCiAgICBwdXNoYnl0ZXMgMHgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.arc56.json b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.arc56.json index 830b17b4a..10f630e10 100644 --- a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.arc56.json +++ b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.arc56.json @@ -241,11 +241,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA2IDUgMyAxMDAwCiAgICBieXRlY2Jsb2NrIDB4MDk4MTAxIDB4MDkzNjFhMDBiMDgxMDEgIm5hbWUiICIxIiAidW5pdCIgIjIiICJBU1QxIiAiQVNUMiIgIkFTVDMiICIzIiAiNCIgIjUiICIzcmQiICJ3aXRoIGFyZ3MgcGFyYW0gc2V0IiAiNDIiICIxMCIgIjExIiAiMTIiICIxMyIgIjE0IiAiMTUiICIxNiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBJdHhuRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyMDI1NGY5MSAvLyBtZXRob2QgInRlc3QxKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZjE5MDg1MjQgLy8gbWV0aG9kICJ0ZXN0Migpdm9pZCIKICAgIHB1c2hieXRlcyAweGRmOTIwZjM3IC8vIG1ldGhvZCAidGVzdDMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgzZDQ2MzQ1YyAvLyBtZXRob2QgInRlc3Q0KCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3QxX3JvdXRlQDUgbWFpbl90ZXN0Ml9yb3V0ZUA2IG1haW5fdGVzdDNfcm91dGVANyBtYWluX3Rlc3Q0X3JvdXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgSXR4bkRlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNjoKICAgIHJldHVybgoKbWFpbl90ZXN0NF9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzEKICAgIC8vIHB1YmxpYyB0ZXN0NCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdDQKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE2CgptYWluX3Rlc3QzX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk1CiAgICAvLyBwdWJsaWMgdGVzdDMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3QzCiAgICBwdXNoaW50IDEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNgoKbWFpbl90ZXN0Ml9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1OAogICAgLy8gcHVibGljIHRlc3QyKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0MgogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTYKCm1haW5fdGVzdDFfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTAKICAgIC8vIHB1YmxpYyB0ZXN0MSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdDEKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE2CgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTIKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE1CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTYKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0LnRlc3QxKCkgLT4gdm9pZDoKdGVzdDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEwCiAgICAvLyBwdWJsaWMgdGVzdDEoKSB7CiAgICBwcm90byAwIDAKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgKICAgIC8vIG5hbWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogQnl0ZXMoKSB9KQogICAgYnl0ZWNfMiAvLyAibmFtZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTEKICAgIC8vIHRoaXMubmFtZS52YWx1ZSA9IEJ5dGVzKCdBU1QxJykKICAgIGJ5dGVjIDYgLy8gIkFTVDEiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4CiAgICAvLyBuYW1lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCkgfSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJuYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgKICAgIC8vIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxOQogICAgLy8gcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgKICAgIC8vIG5hbWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogQnl0ZXMoKSB9KQogICAgYnl0ZWNfMiAvLyAibmFtZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjIKICAgIC8vIHRoaXMubmFtZS52YWx1ZSA9IEJ5dGVzKCdBU1QyJykKICAgIGJ5dGVjIDcgLy8gIkFTVDIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyMwogICAgLy8gY29uc3QgYXNzZXQxX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTcKICAgIC8vIGRlY2ltYWxzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNgogICAgLy8gdW5pdE5hbWU6ICd1bml0JywKICAgIGJ5dGVjIDQgLy8gInVuaXQiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbDogMTAwMCwKICAgIGludGMgNCAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMtMjAKICAgIC8vIGNvbnN0IGFzc2V0UGFyYW1zID0gaXR4bi5hc3NldENvbmZpZyh7CiAgICAvLyAgIHRvdGFsOiAxMDAwLAogICAgLy8gICBhc3NldE5hbWU6IHRoaXMubmFtZS52YWx1ZSwKICAgIC8vICAgdW5pdE5hbWU6ICd1bml0JywKICAgIC8vICAgZGVjaW1hbHM6IDMsCiAgICAvLyAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIH0pCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkAxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyMwogICAgLy8gY29uc3QgYXNzZXQxX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDb25maWdBc3NldE5hbWUKICAgIGZyYW1lX2J1cnkgMAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4CiAgICAvLyBuYW1lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCkgfSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJuYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IGFzc2V0Ml90eG4gPSBhc3NldFBhcmFtcy5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBmcmFtZV9kaWcgMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTcKICAgIC8vIGRlY2ltYWxzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNgogICAgLy8gdW5pdE5hbWU6ICd1bml0JywKICAgIGJ5dGVjIDQgLy8gInVuaXQiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbDogMTAwMCwKICAgIGludGMgNCAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMtMjAKICAgIC8vIGNvbnN0IGFzc2V0UGFyYW1zID0gaXR4bi5hc3NldENvbmZpZyh7CiAgICAvLyAgIHRvdGFsOiAxMDAwLAogICAgLy8gICBhc3NldE5hbWU6IHRoaXMubmFtZS52YWx1ZSwKICAgIC8vICAgdW5pdE5hbWU6ICd1bml0JywKICAgIC8vICAgZGVjaW1hbHM6IDMsCiAgICAvLyAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIH0pCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyNwogICAgLy8gY29uc3QgYXNzZXQyX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDb25maWdBc3NldE5hbWUKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjkKICAgIC8vIGFzc2VydChhc3NldDFfdHhuLmFzc2V0TmFtZSA9PT0gQnl0ZXMoJ0FTVDEnKSwgJ2Fzc2V0MV90eG4gaXMgY29ycmVjdCcpCiAgICBmcmFtZV9kaWcgMAogICAgYnl0ZWMgNiAvLyAiQVNUMSIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQxX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjMwCiAgICAvLyBhc3NlcnQoYXNzZXQyX3R4bi5hc3NldE5hbWUgPT09IEJ5dGVzKCdBU1QyJyksICdhc3NldDJfdHhuIGlzIGNvcnJlY3QnKQogICAgYnl0ZWMgNyAvLyAiQVNUMiIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQyX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQoYXNzZXQxX3R4bi5jcmVhdGVkQXNzZXQubmFtZSA9PT0gQnl0ZXMoJ0FTVDEnKSwgJ2NyZWF0ZWQgYXNzZXQgMSBpcyBjb3JyZWN0JykKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBieXRlYyA2IC8vICJBU1QxIgogICAgPT0KICAgIGFzc2VydCAvLyBjcmVhdGVkIGFzc2V0IDEgaXMgY29ycmVjdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozMgogICAgLy8gYXNzZXJ0KGFzc2V0Ml90eG4uY3JlYXRlZEFzc2V0Lm5hbWUgPT09IEJ5dGVzKCdBU1QyJyksICdjcmVhdGVkIGFzc2V0IDIgaXMgY29ycmVjdCcpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgYnl0ZWMgNyAvLyAiQVNUMiIKICAgID09CiAgICBhc3NlcnQgLy8gY3JlYXRlZCBhc3NldCAyIGlzIGNvcnJlY3QKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NDQKICAgIC8vIGNvbnN0IFthcHBDcmVhdGVUeG4sIGFzc2V0M190eG5dID0gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozNC0zOAogICAgLy8gY29uc3QgYXBwQ3JlYXRlUGFyYW1zID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBmZWU6IDAsCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MzcKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDFfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NDQKICAgIC8vIGNvbnN0IFthcHBDcmVhdGVUeG4sIGFzc2V0M190eG5dID0gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9uZXh0CiAgICBmcmFtZV9kaWcgMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGZyYW1lX2RpZyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNwogICAgLy8gZGVjaW1hbHM6IDMsCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2CiAgICAvLyB1bml0TmFtZTogJ3VuaXQnLAogICAgYnl0ZWMgNCAvLyAidW5pdCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0MQogICAgLy8gYXNzZXROYW1lOiAnQVNUMycsCiAgICBieXRlYyA4IC8vICJBU1QzIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsOiAxMDAwLAogICAgaW50YyA0IC8vIDEwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMy0yMAogICAgLy8gY29uc3QgYXNzZXRQYXJhbXMgPSBpdHhuLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgdG90YWw6IDEwMDAsCiAgICAvLyAgIGFzc2V0TmFtZTogdGhpcy5uYW1lLnZhbHVlLAogICAgLy8gICB1bml0TmFtZTogJ3VuaXQnLAogICAgLy8gICBkZWNpbWFsczogMywKICAgIC8vICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gfSkKICAgIGludGNfMyAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QxX25leHRfdHhuQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQ0CiAgICAvLyBjb25zdCBbYXBwQ3JlYXRlVHhuLCBhc3NldDNfdHhuXSA9IGl0eG4uc3VibWl0R3JvdXAoYXBwQ3JlYXRlUGFyYW1zLCBhc3NldFBhcmFtcykKICAgIGl0eG5fc3VibWl0CiAgICBnaXR4biAwIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICBpdHhuIENvbmZpZ0Fzc2V0TmFtZQogICAgc3dhcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0NgogICAgLy8gYXNzZXJ0KGFwcENyZWF0ZVR4bi5jcmVhdGVkQXBwLCAnYXBwIGlzIGNyZWF0ZWQnKQogICAgYXNzZXJ0IC8vIGFwcCBpcyBjcmVhdGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQ3CiAgICAvLyBhc3NlcnQoYXNzZXQzX3R4bi5hc3NldE5hbWUgPT09IEJ5dGVzKCdBU1QzJyksICdhc3NldDNfdHhuIGlzIGNvcnJlY3QnKQogICAgYnl0ZWMgOCAvLyAiQVNUMyIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQzX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUwCiAgICAvLyBub3RlOiAnM3JkJywKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBkdXAKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBieiB0ZXN0MV9uZXh0X2ZpZWxkQDYKCnRlc3QxX3NldF9Ob3RlXzBfdG9fMEA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1MAogICAgLy8gbm90ZTogJzNyZCcsCiAgICBieXRlYyAxMiAvLyAiM3JkIgogICAgaXR4bl9maWVsZCBOb3RlCgp0ZXN0MV9uZXh0X2ZpZWxkQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjM0LTM4CiAgICAvLyBjb25zdCBhcHBDcmVhdGVQYXJhbXMgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGZlZTogMCwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozNwogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1NQogICAgLy8gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUzCiAgICAvLyBub3RlOiAnM3JkJywKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBkdXAKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBieiB0ZXN0MV9uZXh0X2ZpZWxkQDkKCnRlc3QxX3NldF9Ob3RlXzBfdG9fMEA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1MwogICAgLy8gbm90ZTogJzNyZCcsCiAgICBieXRlYyAxMiAvLyAiM3JkIgogICAgaXR4bl9maWVsZCBOb3RlCgp0ZXN0MV9uZXh0X2ZpZWxkQDk6CiAgICBmcmFtZV9kaWcgMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGZyYW1lX2RpZyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNwogICAgLy8gZGVjaW1hbHM6IDMsCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2CiAgICAvLyB1bml0TmFtZTogJ3VuaXQnLAogICAgYnl0ZWMgNCAvLyAidW5pdCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0MQogICAgLy8gYXNzZXROYW1lOiAnQVNUMycsCiAgICBieXRlYyA4IC8vICJBU1QzIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsOiAxMDAwLAogICAgaW50YyA0IC8vIDEwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMy0yMAogICAgLy8gY29uc3QgYXNzZXRQYXJhbXMgPSBpdHhuLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgdG90YWw6IDEwMDAsCiAgICAvLyAgIGFzc2V0TmFtZTogdGhpcy5uYW1lLnZhbHVlLAogICAgLy8gICB1bml0TmFtZTogJ3VuaXQnLAogICAgLy8gICBkZWNpbWFsczogMywKICAgIC8vICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gfSkKICAgIGludGNfMyAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QxX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1NQogICAgLy8gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QudGVzdDIoKSAtPiB2b2lkOgp0ZXN0MjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NTgKICAgIC8vIHB1YmxpYyB0ZXN0MigpIHsKICAgIHByb3RvIDAgMAogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NjAKICAgIC8vIGlmIChUeG4ubnVtQXBwQXJncykgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IHRlc3QyX2Vsc2VfYm9keUAyCgp0ZXN0Ml9pZl9ib2R5QDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCBhcmdzID0gW0J5dGVzKCcxJyksIEJ5dGVzKCcyJyldIGFzIGNvbnN0CiAgICBieXRlY18zIC8vICIxIgogICAgZnJhbWVfYnVyeSAwCiAgICBieXRlYyA1IC8vICIyIgogICAgZnJhbWVfYnVyeSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjY1CiAgICAvLyBhcHBBcmdzOiBhcmdzLAogICAgcHVzaGludCAyIC8vIDIKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo2NgogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLk5vT3AsCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA2CiAgICBwdXNoaW50IDEgLy8gMQogICAgZnJhbWVfYnVyeSA0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjY3CiAgICAvLyBub3RlOiAnd2l0aCBhcmdzIHBhcmFtIHNldCcsCiAgICBieXRlYyAxMyAvLyAid2l0aCBhcmdzIHBhcmFtIHNldCIKCnRlc3QyX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NzcKICAgIC8vIGNvbnN0IGNyZWF0ZUFwcFR4biA9IGNyZWF0ZUFwcFBhcmFtcy5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBOb3RlCiAgICBmcmFtZV9kaWcgNAogICAgcHVzaGludCAxIC8vIDEKICAgID49CiAgICBieiB0ZXN0Ml9uZXh0X2ZpZWxkQDUKCnRlc3QyX3NldF9PbkNvbXBsZXRpb25fMF90b18wQDQ6CiAgICBmcmFtZV9kaWcgNgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCnRlc3QyX25leHRfZmllbGRANToKICAgIGZyYW1lX2RpZyAwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18zIC8vIDMKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjc3CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4gPSBjcmVhdGVBcHBQYXJhbXMuc3VibWl0KCkKICAgIGJ6IHRlc3QyX25leHRfZmllbGRANwoKdGVzdDJfc2V0X0FwcGxpY2F0aW9uQXJnc18yX3RvXzJANjoKICAgIGZyYW1lX2RpZyA1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKdGVzdDJfbmV4dF9maWVsZEA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo2Mi02OAogICAgLy8gY3JlYXRlQXBwUGFyYW1zID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBhcHBBcmdzOiBhcmdzLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uTm9PcCwKICAgIC8vICAgbm90ZTogJ3dpdGggYXJncyBwYXJhbSBzZXQnLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QyX25leHRfdHhuQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjc3CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4gPSBjcmVhdGVBcHBQYXJhbXMuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIE5vdGUKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3OAogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5hcHBBcmdzKDApID09PSBCeXRlcygnMScpLCAnY29ycmVjdCBhcmdzIHVzZWQgMScpCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWNfMyAvLyAiMSIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3OQogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5hcHBBcmdzKDEpID09PSBCeXRlcygnMicpLCAnY29ycmVjdCBhcmdzIHVzZWQgMicpCiAgICBwdXNoaW50IDEgLy8gMQogICAgaXR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgNSAvLyAiMiIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4MQogICAgLy8gaWYgKFR4bi5udW1BcHBBcmdzID4gMSkgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIHB1c2hpbnQgMSAvLyAxCiAgICA+CiAgICBieiB0ZXN0Ml9hZnRlcl9pZl9lbHNlQDExCgp0ZXN0Ml9pZl9ib2R5QDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgyLTg5CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4yID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICAgIGFwcEFyZ3M6IFtCeXRlcygnNDInKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4NwogICAgLy8gYXBwQXJnczogW0J5dGVzKCc0MicpXSwKICAgIGJ5dGVjIDE0IC8vICI0MiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjg2CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6ODItODgKICAgIC8vIGNvbnN0IGNyZWF0ZUFwcFR4bjIgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgICAgYXBwQXJnczogW0J5dGVzKCc0MicpXSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QyX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4Mi04OQogICAgLy8gY29uc3QgY3JlYXRlQXBwVHhuMiA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgICBhcHBBcmdzOiBbQnl0ZXMoJzQyJyldLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjkwCiAgICAvLyBhc3NlcnQoY3JlYXRlQXBwVHhuMi5hcHBBcmdzKDApID09PSBCeXRlcygnNDInKSwgJ2NvcnJlY3QgYXJncyB1c2VkIDInKQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDE0IC8vICI0MiIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5MQogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5ub3RlID09PSBCeXRlcygnd2l0aCBhcmdzIHBhcmFtIHNldCcpKQogICAgZnJhbWVfZGlnIDIKICAgIGJ5dGVjIDEzIC8vICJ3aXRoIGFyZ3MgcGFyYW0gc2V0IgogICAgPT0KICAgIGFzc2VydAoKdGVzdDJfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIHJldHN1YgoKdGVzdDJfZWxzZV9ib2R5QDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjczCiAgICAvLyBhcHBBcmdzOiBbQnl0ZXMoJzMnKSwgJzQnLCBCeXRlcygnNScpXSwKICAgIGJ5dGVjIDkgLy8gIjMiCiAgICBmcmFtZV9idXJ5IDAKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgZnJhbWVfYnVyeSAxCiAgICBieXRlYyAxMSAvLyAiNSIKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18zIC8vIDMKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3NAogICAgLy8gbm90ZTogJ25vIGFyZ3MgcGFyYW0gc2V0JywKICAgIHB1c2hieXRlcyAibm8gYXJncyBwYXJhbSBzZXQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjcwCiAgICAvLyBjcmVhdGVBcHBQYXJhbXMgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA0CiAgICBiIHRlc3QyX2FmdGVyX2lmX2Vsc2VAMwoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QudGVzdDMoKSAtPiB2b2lkOgp0ZXN0MzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTM0LTE1MQogICAgLy8gY29uc3QgW2FwcDEsIGFwcDIsIGFwcDMsIGFwcDQsIGFwcDUsIGFwcDYsIGFwcDcsIGFwcDgsIGFwcDksIGFwcDEwLCBhcHAxMSwgYXBwMTIsIGFwcDEzLCBhcHAxNCwgYXBwMTUsIGFwcDE2XSA9IGl0eG4uc3VibWl0R3JvdXAoCiAgICAvLyAgIGFwcFR4bjEsCiAgICAvLyAgIGFwcFR4bjIsCiAgICAvLyAgIGFwcFR4bjMsCiAgICAvLyAgIGFwcFR4bjQsCiAgICAvLyAgIGFwcFR4bjUsCiAgICAvLyAgIGFwcFR4bjYsCiAgICAvLyAgIGFwcFR4bjcsCiAgICAvLyAgIGFwcFR4bjgsCiAgICAvLyAgIGFwcFR4bjksCiAgICAvLyAgIGFwcFR4bjEwLAogICAgLy8gICBhcHBUeG4xMSwKICAgIC8vICAgYXBwVHhuMTIsCiAgICAvLyAgIGFwcFR4bjEzLAogICAgLy8gICBhcHBUeG4xNCwKICAgIC8vICAgYXBwVHhuMTUsCiAgICAvLyAgIGFwcFR4bjE2LAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMDAKICAgIC8vIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIGJ5dGVjXzMgLy8gIjEiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEzNgogICAgLy8gYXBwVHhuMiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMDQKICAgIC8vIGFwcFR4bjIuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcyJyldIH0pCiAgICBieXRlYyA1IC8vICIyIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzcKICAgIC8vIGFwcFR4bjMsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTA2CiAgICAvLyBhcHBUeG4zLnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMycpXSB9KQogICAgYnl0ZWMgOSAvLyAiMyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTM4CiAgICAvLyBhcHBUeG40LAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEwOAogICAgLy8gYXBwVHhuNC5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzQnKV0gfSkKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzkKICAgIC8vIGFwcFR4bjUsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTEwCiAgICAvLyBhcHBUeG41LnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnNScpXSB9KQogICAgYnl0ZWMgMTEgLy8gIjUiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MAogICAgLy8gYXBwVHhuNiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTIKICAgIC8vIGFwcFR4bjYuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc2JyldIH0pCiAgICBwdXNoYnl0ZXMgIjYiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MQogICAgLy8gYXBwVHhuNywKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTQKICAgIC8vIGFwcFR4bjcuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc3JyldIH0pCiAgICBwdXNoYnl0ZXMgIjciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MgogICAgLy8gYXBwVHhuOCwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTYKICAgIC8vIGFwcFR4bjguc2V0KHsgYXBwQXJnczogW0J5dGVzKCc4JyldIH0pCiAgICBwdXNoYnl0ZXMgIjgiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MwogICAgLy8gYXBwVHhuOSwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTgKICAgIC8vIGFwcFR4bjkuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc5JyldIH0pCiAgICBwdXNoYnl0ZXMgIjkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0NAogICAgLy8gYXBwVHhuMTAsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTIwCiAgICAvLyBhcHBUeG4xMC5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzEwJyldIH0pCiAgICBieXRlYyAxNSAvLyAiMTAiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNDUKICAgIC8vIGFwcFR4bjExLAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEyMgogICAgLy8gYXBwVHhuMTEuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcxMScpXSB9KQogICAgYnl0ZWMgMTYgLy8gIjExIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQ2CiAgICAvLyBhcHBUeG4xMiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMjQKICAgIC8vIGFwcFR4bjEyLnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMTInKV0gfSkKICAgIGJ5dGVjIDE3IC8vICIxMiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0NwogICAgLy8gYXBwVHhuMTMsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTI2CiAgICAvLyBhcHBUeG4xMy5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzEzJyldIH0pCiAgICBieXRlYyAxOCAvLyAiMTMiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNDgKICAgIC8vIGFwcFR4bjE0LAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEyOAogICAgLy8gYXBwVHhuMTQuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcxNCcpXSB9KQogICAgYnl0ZWMgMTkgLy8gIjE0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAxNDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQ5CiAgICAvLyBhcHBUeG4xNSwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzAKICAgIC8vIGFwcFR4bjE1LnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMTUnKV0gfSkKICAgIGJ5dGVjIDIwIC8vICIxNSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMTU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE1MAogICAgLy8gYXBwVHhuMTYsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMyCiAgICAvLyBhcHBUeG4xNi5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzE2JyldIH0pCiAgICBieXRlYyAyMSAvLyAiMTYiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDE2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzQtMTUxCiAgICAvLyBjb25zdCBbYXBwMSwgYXBwMiwgYXBwMywgYXBwNCwgYXBwNSwgYXBwNiwgYXBwNywgYXBwOCwgYXBwOSwgYXBwMTAsIGFwcDExLCBhcHAxMiwgYXBwMTMsIGFwcDE0LCBhcHAxNSwgYXBwMTZdID0gaXR4bi5zdWJtaXRHcm91cCgKICAgIC8vICAgYXBwVHhuMSwKICAgIC8vICAgYXBwVHhuMiwKICAgIC8vICAgYXBwVHhuMywKICAgIC8vICAgYXBwVHhuNCwKICAgIC8vICAgYXBwVHhuNSwKICAgIC8vICAgYXBwVHhuNiwKICAgIC8vICAgYXBwVHhuNywKICAgIC8vICAgYXBwVHhuOCwKICAgIC8vICAgYXBwVHhuOSwKICAgIC8vICAgYXBwVHhuMTAsCiAgICAvLyAgIGFwcFR4bjExLAogICAgLy8gICBhcHBUeG4xMiwKICAgIC8vICAgYXBwVHhuMTMsCiAgICAvLyAgIGFwcFR4bjE0LAogICAgLy8gICBhcHBUeG4xNSwKICAgIC8vICAgYXBwVHhuMTYsCiAgICAvLyApCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTMKICAgIC8vIGFzc2VydChhcHAxLmxvZ3MoMCkgPT09IEJ5dGVzKCcxJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAwIExvZ3MKICAgIGJ5dGVjXzMgLy8gIjEiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE1NAogICAgLy8gYXNzZXJ0KGFwcDIubG9ncygwKSA9PT0gQnl0ZXMoJzInKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDEgTG9ncwogICAgYnl0ZWMgNSAvLyAiMiIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTU1CiAgICAvLyBhc3NlcnQoYXBwMy5sb2dzKDApID09PSBCeXRlcygnMycpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMiBMb2dzCiAgICBieXRlYyA5IC8vICIzIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTYKICAgIC8vIGFzc2VydChhcHA0LmxvZ3MoMCkgPT09IEJ5dGVzKCc0JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAzIExvZ3MKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTcKICAgIC8vIGFzc2VydChhcHA1LmxvZ3MoMCkgPT09IEJ5dGVzKCc1JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA0IExvZ3MKICAgIGJ5dGVjIDExIC8vICI1IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTgKICAgIC8vIGFzc2VydChhcHA2LmxvZ3MoMCkgPT09IEJ5dGVzKCc2JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA1IExvZ3MKICAgIHB1c2hieXRlcyAiNiIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTU5CiAgICAvLyBhc3NlcnQoYXBwNy5sb2dzKDApID09PSBCeXRlcygnNycpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgNiBMb2dzCiAgICBwdXNoYnl0ZXMgIjciCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2MAogICAgLy8gYXNzZXJ0KGFwcDgubG9ncygwKSA9PT0gQnl0ZXMoJzgnKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDcgTG9ncwogICAgcHVzaGJ5dGVzICI4IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjEKICAgIC8vIGFzc2VydChhcHA5LmxvZ3MoMCkgPT09IEJ5dGVzKCc5JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA4IExvZ3MKICAgIHB1c2hieXRlcyAiOSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTYyCiAgICAvLyBhc3NlcnQoYXBwMTAubG9ncygwKSA9PT0gQnl0ZXMoJzEwJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA5IExvZ3MKICAgIGJ5dGVjIDE1IC8vICIxMCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTYzCiAgICAvLyBhc3NlcnQoYXBwMTEubG9ncygwKSA9PT0gQnl0ZXMoJzExJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAxMCBMb2dzCiAgICBieXRlYyAxNiAvLyAiMTEiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2NAogICAgLy8gYXNzZXJ0KGFwcDEyLmxvZ3MoMCkgPT09IEJ5dGVzKCcxMicpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMTEgTG9ncwogICAgYnl0ZWMgMTcgLy8gIjEyIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjUKICAgIC8vIGFzc2VydChhcHAxMy5sb2dzKDApID09PSBCeXRlcygnMTMnKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDEyIExvZ3MKICAgIGJ5dGVjIDE4IC8vICIxMyIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYXBwMTQubG9ncygwKSA9PT0gQnl0ZXMoJzE0JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAxMyBMb2dzCiAgICBieXRlYyAxOSAvLyAiMTQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2NwogICAgLy8gYXNzZXJ0KGFwcDE1LmxvZ3MoMCkgPT09IEJ5dGVzKCcxNScpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMTQgTG9ncwogICAgYnl0ZWMgMjAgLy8gIjE1IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjgKICAgIC8vIGFzc2VydChhcHAxNi5sb2dzKDApID09PSBCeXRlcygnMTYnKSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuYXMgTG9ncwogICAgYnl0ZWMgMjEgLy8gIjE2IgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC50ZXN0NCgpIC0+IHZvaWQ6CnRlc3Q0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzIKICAgIC8vIGNvbnN0IGxvdHNPZkJ5dGVzID0gb3AuYnplcm8oMjA0NCkKICAgIHB1c2hpbnQgMjA0NCAvLyAyMDQ0CiAgICBiemVybwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQKICAgIC8vIGNvbnN0IGFwcHJvdmFsMiA9IEJ5dGVzLmZyb21IZXgoJzgwJyArICdGQzBmJykKICAgIHB1c2hieXRlcyAweDgwZmMwZgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQtMTc1CiAgICAvLyBjb25zdCBhcHByb3ZhbDIgPSBCeXRlcy5mcm9tSGV4KCc4MCcgKyAnRkMwZicpCiAgICAvLyAgIC5jb25jYXQobG90c09mQnl0ZXMpCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTc2CiAgICAvLyAuY29uY2F0KEJ5dGVzLmZyb21IZXgoJzQ4JykpCiAgICBwdXNoYnl0ZXMgMHg0OAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQtMTc2CiAgICAvLyBjb25zdCBhcHByb3ZhbDIgPSBCeXRlcy5mcm9tSGV4KCc4MCcgKyAnRkMwZicpCiAgICAvLyAgIC5jb25jYXQobG90c09mQnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoQnl0ZXMuZnJvbUhleCgnNDgnKSkKICAgIGNvbmNhdAogICAgZHVwbiAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE3OQogICAgLy8gYXBwcm92YWxQcm9ncmFtOiBbYXBwcm92YWwxLCBhcHByb3ZhbDIsIGFwcHJvdmFsMiwgYXBwcm92YWwyXSwKICAgIGNvdmVyIDIKICAgIGNvdmVyIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTg1CiAgICAvLyBjb25zdCBhcHAxID0gYXBwVHhuMS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxODMKICAgIC8vIGV4dHJhUHJvZ3JhbVBhZ2VzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgyCiAgICAvLyBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICBieXRlY18zIC8vICIxIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgxCiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTc4LTE4NAogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBbYXBwcm92YWwxLCBhcHByb3ZhbDIsIGFwcHJvdmFsMiwgYXBwcm92YWwyXSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gICBleHRyYVByb2dyYW1QYWdlczogMywKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0NF9uZXh0X3R4bkAxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxODUKICAgIC8vIGNvbnN0IGFwcDEgPSBhcHBUeG4xLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBFeHRyYVByb2dyYW1QYWdlcwogICAgaXR4biBOdW1BcHByb3ZhbFByb2dyYW1QYWdlcwogICAgc3dhcAogICAgaXR4biBOdW1DbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBjb3ZlciAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXJ0KGFwcDEuZXh0cmFQcm9ncmFtUGFnZXMgPT09IDMsICdleHRyYSBwYWdlcyA9IDMnKQogICAgaW50Y18zIC8vIDMKICAgID09CiAgICBhc3NlcnQgLy8gZXh0cmEgcGFnZXMgPSAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4NwogICAgLy8gYXNzZXJ0KGFwcDEubnVtQXBwcm92YWxQcm9ncmFtUGFnZXMgPT09IDIsICdhcHByb3ZhbCBwYWdlcyA9IDInKQogICAgcHVzaGludCAyIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gYXBwcm92YWwgcGFnZXMgPSAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4OAogICAgLy8gYXNzZXJ0KGFwcDEuYXBwcm92YWxQcm9ncmFtUGFnZXMoMCkgPT09IGFwcHJvdmFsMS5jb25jYXQoYXBwcm92YWwyKS5jb25jYXQoYXBwcm92YWwyLnNsaWNlKDAsIC0zKSksICdleHBlY3RlZCBhcHByb3ZhbCBwYWdlIDAnKQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5hcyBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTg4CiAgICAvLyBhc3NlcnQoYXBwMS5hcHByb3ZhbFByb2dyYW1QYWdlcygwKSA9PT0gYXBwcm92YWwxLmNvbmNhdChhcHByb3ZhbDIpLmNvbmNhdChhcHByb3ZhbDIuc2xpY2UoMCwgLTMpKSwgJ2V4cGVjdGVkIGFwcHJvdmFsIHBhZ2UgMCcpCiAgICB1bmNvdmVyIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDAKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18wIC8vIDAKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3dhcAogICAgaW50Y18zIC8vIDMKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18zIC8vIDMKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLQogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgc3dhcAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYXBwcm92YWwgcGFnZSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KGFwcDEuYXBwcm92YWxQcm9ncmFtUGFnZXMoMSkgPT09IGFwcHJvdmFsMi5zbGljZSgtMykuY29uY2F0KGFwcHJvdmFsMiksICdleHBlY3RlZCBhcHByb3ZhbCBwYWdlIDEnKQogICAgcHVzaGludCAxIC8vIDEKICAgIGl0eG5hcyBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgc3dhcAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMyAvLyAzCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAxCiAgICBzd2FwCiAgICAtCiAgICBkaWcgMgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBzd2FwCiAgICBjb25jYXQKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYXBwcm92YWwgcGFnZSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE5MAogICAgLy8gYXNzZXJ0KGFwcDEubnVtQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcyA9PT0gMSwgJ2NsZWFyIHN0YXRlIHBhZ2VzID0gMScpCiAgICBwdXNoaW50IDEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBjbGVhciBzdGF0ZSBwYWdlcyA9IDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTkxCiAgICAvLyBhc3NlcnQoYXBwMS5jbGVhclN0YXRlUHJvZ3JhbVBhZ2VzKDApID09PSBBUFBST1ZFLCAnZXhwZWN0ZWQgY2xlYXIgc3RhdGUgcGFnZScpCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bmFzIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE5MQogICAgLy8gYXNzZXJ0KGFwcDEuY2xlYXJTdGF0ZVByb2dyYW1QYWdlcygwKSA9PT0gQVBQUk9WRSwgJ2V4cGVjdGVkIGNsZWFyIHN0YXRlIHBhZ2UnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBjbGVhciBzdGF0ZSBwYWdlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0LmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgKICAgIC8vIG5hbWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogQnl0ZXMoKSB9KQogICAgYnl0ZWNfMiAvLyAibmFtZSIKICAgIHB1c2hieXRlcyAweAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA2IDUgMyAxMDAwCiAgICBieXRlY2Jsb2NrIDB4MDk4MTAxIDB4MDkzNjFhMDBiMDgxMDEgIm5hbWUiICIxIiAidW5pdCIgIjIiICJBU1QxIiAiQVNUMiIgIkFTVDMiICIzIiAiNCIgIjUiICIzcmQiICJ3aXRoIGFyZ3MgcGFyYW0gc2V0IiAiNDIiICIxMCIgIjExIiAiMTIiICIxMyIgIjE0IiAiMTUiICIxNiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBJdHhuRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyMDI1NGY5MSAvLyBtZXRob2QgInRlc3QxKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZjE5MDg1MjQgLy8gbWV0aG9kICJ0ZXN0Migpdm9pZCIKICAgIHB1c2hieXRlcyAweGRmOTIwZjM3IC8vIG1ldGhvZCAidGVzdDMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgzZDQ2MzQ1YyAvLyBtZXRob2QgInRlc3Q0KCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3QxX3JvdXRlQDUgbWFpbl90ZXN0Ml9yb3V0ZUA2IG1haW5fdGVzdDNfcm91dGVANyBtYWluX3Rlc3Q0X3JvdXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgSXR4bkRlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNjoKICAgIHJldHVybgoKbWFpbl90ZXN0NF9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzEKICAgIC8vIHB1YmxpYyB0ZXN0NCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdDQKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE2CgptYWluX3Rlc3QzX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk1CiAgICAvLyBwdWJsaWMgdGVzdDMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3QzCiAgICBwdXNoaW50IDEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNgoKbWFpbl90ZXN0Ml9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1OAogICAgLy8gcHVibGljIHRlc3QyKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0MgogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTYKCm1haW5fdGVzdDFfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTAKICAgIC8vIHB1YmxpYyB0ZXN0MSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdDEKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE2CgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTIKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE1CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEl0eG5EZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTYKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0LnRlc3QxKCkgLT4gdm9pZDoKdGVzdDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEwCiAgICAvLyBwdWJsaWMgdGVzdDEoKSB7CiAgICBwcm90byAwIDAKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgKICAgIC8vIG5hbWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogQnl0ZXMoKSB9KQogICAgYnl0ZWNfMiAvLyAibmFtZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTEKICAgIC8vIHRoaXMubmFtZS52YWx1ZSA9IEJ5dGVzKCdBU1QxJykKICAgIGJ5dGVjIDYgLy8gIkFTVDEiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4CiAgICAvLyBuYW1lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCkgfSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJuYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgKICAgIC8vIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxOQogICAgLy8gcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgKICAgIC8vIG5hbWUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogQnl0ZXMoKSB9KQogICAgYnl0ZWNfMiAvLyAibmFtZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjIKICAgIC8vIHRoaXMubmFtZS52YWx1ZSA9IEJ5dGVzKCdBU1QyJykKICAgIGJ5dGVjIDcgLy8gIkFTVDIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyMwogICAgLy8gY29uc3QgYXNzZXQxX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTcKICAgIC8vIGRlY2ltYWxzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNgogICAgLy8gdW5pdE5hbWU6ICd1bml0JywKICAgIGJ5dGVjIDQgLy8gInVuaXQiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbDogMTAwMCwKICAgIGludGMgNCAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMtMjAKICAgIC8vIGNvbnN0IGFzc2V0UGFyYW1zID0gaXR4bi5hc3NldENvbmZpZyh7CiAgICAvLyAgIHRvdGFsOiAxMDAwLAogICAgLy8gICBhc3NldE5hbWU6IHRoaXMubmFtZS52YWx1ZSwKICAgIC8vICAgdW5pdE5hbWU6ICd1bml0JywKICAgIC8vICAgZGVjaW1hbHM6IDMsCiAgICAvLyAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIH0pCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkAxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyMwogICAgLy8gY29uc3QgYXNzZXQxX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDb25maWdBc3NldE5hbWUKICAgIGZyYW1lX2J1cnkgMAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4CiAgICAvLyBuYW1lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCkgfSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJuYW1lIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IGFzc2V0Ml90eG4gPSBhc3NldFBhcmFtcy5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBmcmFtZV9kaWcgMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTcKICAgIC8vIGRlY2ltYWxzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNgogICAgLy8gdW5pdE5hbWU6ICd1bml0JywKICAgIGJ5dGVjIDQgLy8gInVuaXQiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbDogMTAwMCwKICAgIGludGMgNCAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMtMjAKICAgIC8vIGNvbnN0IGFzc2V0UGFyYW1zID0gaXR4bi5hc3NldENvbmZpZyh7CiAgICAvLyAgIHRvdGFsOiAxMDAwLAogICAgLy8gICBhc3NldE5hbWU6IHRoaXMubmFtZS52YWx1ZSwKICAgIC8vICAgdW5pdE5hbWU6ICd1bml0JywKICAgIC8vICAgZGVjaW1hbHM6IDMsCiAgICAvLyAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIH0pCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoyNwogICAgLy8gY29uc3QgYXNzZXQyX3R4biA9IGFzc2V0UGFyYW1zLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDb25maWdBc3NldE5hbWUKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MjkKICAgIC8vIGFzc2VydChhc3NldDFfdHhuLmFzc2V0TmFtZSA9PT0gQnl0ZXMoJ0FTVDEnKSwgJ2Fzc2V0MV90eG4gaXMgY29ycmVjdCcpCiAgICBmcmFtZV9kaWcgMAogICAgYnl0ZWMgNiAvLyAiQVNUMSIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQxX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjMwCiAgICAvLyBhc3NlcnQoYXNzZXQyX3R4bi5hc3NldE5hbWUgPT09IEJ5dGVzKCdBU1QyJyksICdhc3NldDJfdHhuIGlzIGNvcnJlY3QnKQogICAgYnl0ZWMgNyAvLyAiQVNUMiIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQyX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQoYXNzZXQxX3R4bi5jcmVhdGVkQXNzZXQubmFtZSA9PT0gQnl0ZXMoJ0FTVDEnKSwgJ2NyZWF0ZWQgYXNzZXQgMSBpcyBjb3JyZWN0JykKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBieXRlYyA2IC8vICJBU1QxIgogICAgPT0KICAgIGFzc2VydCAvLyBjcmVhdGVkIGFzc2V0IDEgaXMgY29ycmVjdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozMgogICAgLy8gYXNzZXJ0KGFzc2V0Ml90eG4uY3JlYXRlZEFzc2V0Lm5hbWUgPT09IEJ5dGVzKCdBU1QyJyksICdjcmVhdGVkIGFzc2V0IDIgaXMgY29ycmVjdCcpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgYnl0ZWMgNyAvLyAiQVNUMiIKICAgID09CiAgICBhc3NlcnQgLy8gY3JlYXRlZCBhc3NldCAyIGlzIGNvcnJlY3QKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NDQKICAgIC8vIGNvbnN0IFthcHBDcmVhdGVUeG4sIGFzc2V0M190eG5dID0gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozNC0zOAogICAgLy8gY29uc3QgYXBwQ3JlYXRlUGFyYW1zID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBmZWU6IDAsCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MzcKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDFfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NDQKICAgIC8vIGNvbnN0IFthcHBDcmVhdGVUeG4sIGFzc2V0M190eG5dID0gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9uZXh0CiAgICBmcmFtZV9kaWcgMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGZyYW1lX2RpZyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNwogICAgLy8gZGVjaW1hbHM6IDMsCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2CiAgICAvLyB1bml0TmFtZTogJ3VuaXQnLAogICAgYnl0ZWMgNCAvLyAidW5pdCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0MQogICAgLy8gYXNzZXROYW1lOiAnQVNUMycsCiAgICBieXRlYyA4IC8vICJBU1QzIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsOiAxMDAwLAogICAgaW50YyA0IC8vIDEwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMy0yMAogICAgLy8gY29uc3QgYXNzZXRQYXJhbXMgPSBpdHhuLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgdG90YWw6IDEwMDAsCiAgICAvLyAgIGFzc2V0TmFtZTogdGhpcy5uYW1lLnZhbHVlLAogICAgLy8gICB1bml0TmFtZTogJ3VuaXQnLAogICAgLy8gICBkZWNpbWFsczogMywKICAgIC8vICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gfSkKICAgIGludGNfMyAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QxX25leHRfdHhuQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQ0CiAgICAvLyBjb25zdCBbYXBwQ3JlYXRlVHhuLCBhc3NldDNfdHhuXSA9IGl0eG4uc3VibWl0R3JvdXAoYXBwQ3JlYXRlUGFyYW1zLCBhc3NldFBhcmFtcykKICAgIGl0eG5fc3VibWl0CiAgICBnaXR4biAwIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICBpdHhuIENvbmZpZ0Fzc2V0TmFtZQogICAgc3dhcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0NgogICAgLy8gYXNzZXJ0KGFwcENyZWF0ZVR4bi5jcmVhdGVkQXBwLCAnYXBwIGlzIGNyZWF0ZWQnKQogICAgYXNzZXJ0IC8vIGFwcCBpcyBjcmVhdGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQ3CiAgICAvLyBhc3NlcnQoYXNzZXQzX3R4bi5hc3NldE5hbWUgPT09IEJ5dGVzKCdBU1QzJyksICdhc3NldDNfdHhuIGlzIGNvcnJlY3QnKQogICAgYnl0ZWMgOCAvLyAiQVNUMyIKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXQzX3R4biBpcyBjb3JyZWN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUwCiAgICAvLyBub3RlOiAnM3JkJywKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBkdXAKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBieiB0ZXN0MV9uZXh0X2ZpZWxkQDYKCnRlc3QxX3NldF9Ob3RlXzBfdG9fMEA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1MAogICAgLy8gbm90ZTogJzNyZCcsCiAgICBieXRlYyAxMiAvLyAiM3JkIgogICAgaXR4bl9maWVsZCBOb3RlCgp0ZXN0MV9uZXh0X2ZpZWxkQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjM0LTM4CiAgICAvLyBjb25zdCBhcHBDcmVhdGVQYXJhbXMgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGZlZTogMCwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czozNwogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0MV9uZXh0X3R4bkA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1NQogICAgLy8gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUzCiAgICAvLyBub3RlOiAnM3JkJywKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBkdXAKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjU1CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGFwcENyZWF0ZVBhcmFtcywgYXNzZXRQYXJhbXMpCiAgICBieiB0ZXN0MV9uZXh0X2ZpZWxkQDkKCnRlc3QxX3NldF9Ob3RlXzBfdG9fMEA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1MwogICAgLy8gbm90ZTogJzNyZCcsCiAgICBieXRlYyAxMiAvLyAiM3JkIgogICAgaXR4bl9maWVsZCBOb3RlCgp0ZXN0MV9uZXh0X2ZpZWxkQDk6CiAgICBmcmFtZV9kaWcgMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGZyYW1lX2RpZyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNwogICAgLy8gZGVjaW1hbHM6IDMsCiAgICBpbnRjXzMgLy8gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2CiAgICAvLyB1bml0TmFtZTogJ3VuaXQnLAogICAgYnl0ZWMgNCAvLyAidW5pdCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0MQogICAgLy8gYXNzZXROYW1lOiAnQVNUMycsCiAgICBieXRlYyA4IC8vICJBU1QzIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsOiAxMDAwLAogICAgaW50YyA0IC8vIDEwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMy0yMAogICAgLy8gY29uc3QgYXNzZXRQYXJhbXMgPSBpdHhuLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgdG90YWw6IDEwMDAsCiAgICAvLyAgIGFzc2V0TmFtZTogdGhpcy5uYW1lLnZhbHVlLAogICAgLy8gICB1bml0TmFtZTogJ3VuaXQnLAogICAgLy8gICBkZWNpbWFsczogMywKICAgIC8vICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gfSkKICAgIGludGNfMyAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QxX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1NQogICAgLy8gaXR4bi5zdWJtaXRHcm91cChhcHBDcmVhdGVQYXJhbXMsIGFzc2V0UGFyYW1zKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QudGVzdDIoKSAtPiB2b2lkOgp0ZXN0MjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NTgKICAgIC8vIHB1YmxpYyB0ZXN0MigpIHsKICAgIHByb3RvIDAgMAogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NjAKICAgIC8vIGlmIChUeG4ubnVtQXBwQXJncykgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IHRlc3QyX2Vsc2VfYm9keUAyCgp0ZXN0Ml9pZl9ib2R5QDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCBhcmdzID0gW0J5dGVzKCcxJyksIEJ5dGVzKCcyJyldIGFzIGNvbnN0CiAgICBieXRlY18zIC8vICIxIgogICAgZnJhbWVfYnVyeSAwCiAgICBieXRlYyA1IC8vICIyIgogICAgZnJhbWVfYnVyeSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjY1CiAgICAvLyBhcHBBcmdzOiBhcmdzLAogICAgcHVzaGludCAyIC8vIDIKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo2NgogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLk5vT3AsCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA2CiAgICBwdXNoaW50IDEgLy8gMQogICAgZnJhbWVfYnVyeSA0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjY3CiAgICAvLyBub3RlOiAnd2l0aCBhcmdzIHBhcmFtIHNldCcsCiAgICBieXRlYyAxMyAvLyAid2l0aCBhcmdzIHBhcmFtIHNldCIKCnRlc3QyX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NzcKICAgIC8vIGNvbnN0IGNyZWF0ZUFwcFR4biA9IGNyZWF0ZUFwcFBhcmFtcy5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBOb3RlCiAgICBmcmFtZV9kaWcgNAogICAgcHVzaGludCAxIC8vIDEKICAgID49CiAgICBieiB0ZXN0Ml9uZXh0X2ZpZWxkQDUKCnRlc3QyX3NldF9PbkNvbXBsZXRpb25fMF90b18wQDQ6CiAgICBmcmFtZV9kaWcgNgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCnRlc3QyX25leHRfZmllbGRANToKICAgIGZyYW1lX2RpZyAwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18zIC8vIDMKICAgID49CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjc3CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4gPSBjcmVhdGVBcHBQYXJhbXMuc3VibWl0KCkKICAgIGJ6IHRlc3QyX25leHRfZmllbGRANwoKdGVzdDJfc2V0X0FwcGxpY2F0aW9uQXJnc18yX3RvXzJANjoKICAgIGZyYW1lX2RpZyA1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKdGVzdDJfbmV4dF9maWVsZEA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo2Mi02OAogICAgLy8gY3JlYXRlQXBwUGFyYW1zID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBhcHBBcmdzOiBhcmdzLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uTm9PcCwKICAgIC8vICAgbm90ZTogJ3dpdGggYXJncyBwYXJhbSBzZXQnLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QyX25leHRfdHhuQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjc3CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4gPSBjcmVhdGVBcHBQYXJhbXMuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIE5vdGUKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3OAogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5hcHBBcmdzKDApID09PSBCeXRlcygnMScpLCAnY29ycmVjdCBhcmdzIHVzZWQgMScpCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWNfMyAvLyAiMSIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3OQogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5hcHBBcmdzKDEpID09PSBCeXRlcygnMicpLCAnY29ycmVjdCBhcmdzIHVzZWQgMicpCiAgICBwdXNoaW50IDEgLy8gMQogICAgaXR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgNSAvLyAiMiIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4MQogICAgLy8gaWYgKFR4bi5udW1BcHBBcmdzID4gMSkgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIHB1c2hpbnQgMSAvLyAxCiAgICA+CiAgICBieiB0ZXN0Ml9hZnRlcl9pZl9lbHNlQDExCgp0ZXN0Ml9pZl9ib2R5QDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjgyLTg5CiAgICAvLyBjb25zdCBjcmVhdGVBcHBUeG4yID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICAgIGFwcEFyZ3M6IFtCeXRlcygnNDInKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4NwogICAgLy8gYXBwQXJnczogW0J5dGVzKCc0MicpXSwKICAgIGJ5dGVjIDE0IC8vICI0MiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjg2CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6ODItODgKICAgIC8vIGNvbnN0IGNyZWF0ZUFwcFR4bjIgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgICAgYXBwQXJnczogW0J5dGVzKCc0MicpXSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QyX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4Mi04OQogICAgLy8gY29uc3QgY3JlYXRlQXBwVHhuMiA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgICBhcHBBcmdzOiBbQnl0ZXMoJzQyJyldLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjkwCiAgICAvLyBhc3NlcnQoY3JlYXRlQXBwVHhuMi5hcHBBcmdzKDApID09PSBCeXRlcygnNDInKSwgJ2NvcnJlY3QgYXJncyB1c2VkIDInKQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDE0IC8vICI0MiIKICAgID09CiAgICBhc3NlcnQgLy8gY29ycmVjdCBhcmdzIHVzZWQgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5MQogICAgLy8gYXNzZXJ0KGNyZWF0ZUFwcFR4bi5ub3RlID09PSBCeXRlcygnd2l0aCBhcmdzIHBhcmFtIHNldCcpKQogICAgZnJhbWVfZGlnIDIKICAgIGJ5dGVjIDEzIC8vICJ3aXRoIGFyZ3MgcGFyYW0gc2V0IgogICAgPT0KICAgIGFzc2VydAoKdGVzdDJfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIHJldHN1YgoKdGVzdDJfZWxzZV9ib2R5QDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjczCiAgICAvLyBhcHBBcmdzOiBbQnl0ZXMoJzMnKSwgJzQnLCBCeXRlcygnNScpXSwKICAgIGJ5dGVjIDkgLy8gIjMiCiAgICBmcmFtZV9idXJ5IDAKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgZnJhbWVfYnVyeSAxCiAgICBieXRlYyAxMSAvLyAiNSIKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18zIC8vIDMKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo3NAogICAgLy8gbm90ZTogJ25vIGFyZ3MgcGFyYW0gc2V0JywKICAgIHB1c2hieXRlcyAibm8gYXJncyBwYXJhbSBzZXQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjcwCiAgICAvLyBjcmVhdGVBcHBQYXJhbXMgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA0CiAgICBiIHRlc3QyX2FmdGVyX2lmX2Vsc2VAMwoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QudGVzdDMoKSAtPiB2b2lkOgp0ZXN0MzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTM0LTE1MQogICAgLy8gY29uc3QgW2FwcDEsIGFwcDIsIGFwcDMsIGFwcDQsIGFwcDUsIGFwcDYsIGFwcDcsIGFwcDgsIGFwcDksIGFwcDEwLCBhcHAxMSwgYXBwMTIsIGFwcDEzLCBhcHAxNCwgYXBwMTUsIGFwcDE2XSA9IGl0eG4uc3VibWl0R3JvdXAoCiAgICAvLyAgIGFwcFR4bjEsCiAgICAvLyAgIGFwcFR4bjIsCiAgICAvLyAgIGFwcFR4bjMsCiAgICAvLyAgIGFwcFR4bjQsCiAgICAvLyAgIGFwcFR4bjUsCiAgICAvLyAgIGFwcFR4bjYsCiAgICAvLyAgIGFwcFR4bjcsCiAgICAvLyAgIGFwcFR4bjgsCiAgICAvLyAgIGFwcFR4bjksCiAgICAvLyAgIGFwcFR4bjEwLAogICAgLy8gICBhcHBUeG4xMSwKICAgIC8vICAgYXBwVHhuMTIsCiAgICAvLyAgIGFwcFR4bjEzLAogICAgLy8gICBhcHBUeG4xNCwKICAgIC8vICAgYXBwVHhuMTUsCiAgICAvLyAgIGFwcFR4bjE2LAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMDAKICAgIC8vIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIGJ5dGVjXzMgLy8gIjEiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEzNgogICAgLy8gYXBwVHhuMiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMDQKICAgIC8vIGFwcFR4bjIuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcyJyldIH0pCiAgICBieXRlYyA1IC8vICIyIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzcKICAgIC8vIGFwcFR4bjMsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTA2CiAgICAvLyBhcHBUeG4zLnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMycpXSB9KQogICAgYnl0ZWMgOSAvLyAiMyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTM4CiAgICAvLyBhcHBUeG40LAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEwOAogICAgLy8gYXBwVHhuNC5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzQnKV0gfSkKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzkKICAgIC8vIGFwcFR4bjUsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTEwCiAgICAvLyBhcHBUeG41LnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnNScpXSB9KQogICAgYnl0ZWMgMTEgLy8gIjUiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MAogICAgLy8gYXBwVHhuNiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTIKICAgIC8vIGFwcFR4bjYuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc2JyldIH0pCiAgICBwdXNoYnl0ZXMgIjYiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MQogICAgLy8gYXBwVHhuNywKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTQKICAgIC8vIGFwcFR4bjcuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc3JyldIH0pCiAgICBwdXNoYnl0ZXMgIjciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MgogICAgLy8gYXBwVHhuOCwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTYKICAgIC8vIGFwcFR4bjguc2V0KHsgYXBwQXJnczogW0J5dGVzKCc4JyldIH0pCiAgICBwdXNoYnl0ZXMgIjgiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0MwogICAgLy8gYXBwVHhuOSwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMTgKICAgIC8vIGFwcFR4bjkuc2V0KHsgYXBwQXJnczogW0J5dGVzKCc5JyldIH0pCiAgICBwdXNoYnl0ZXMgIjkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0NAogICAgLy8gYXBwVHhuMTAsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTIwCiAgICAvLyBhcHBUeG4xMC5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzEwJyldIH0pCiAgICBieXRlYyAxNSAvLyAiMTAiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNDUKICAgIC8vIGFwcFR4bjExLAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEyMgogICAgLy8gYXBwVHhuMTEuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcxMScpXSB9KQogICAgYnl0ZWMgMTYgLy8gIjExIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQ2CiAgICAvLyBhcHBUeG4xMiwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMjQKICAgIC8vIGFwcFR4bjEyLnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMTInKV0gfSkKICAgIGJ5dGVjIDE3IC8vICIxMiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE0NwogICAgLy8gYXBwVHhuMTMsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTI2CiAgICAvLyBhcHBUeG4xMy5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzEzJyldIH0pCiAgICBieXRlYyAxOCAvLyAiMTMiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNDgKICAgIC8vIGFwcFR4bjE0LAogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IEFQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTgxMDEnKQogICAgYnl0ZWNfMCAvLyAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjQKICAgIC8vIGNvbnN0IExPR18xU1RfQVJHX0FORF9BUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDkzNjFBMDBCMDgxMDEnKQogICAgYnl0ZWNfMSAvLyAweDA5MzYxYTAwYjA4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjEyOAogICAgLy8gYXBwVHhuMTQuc2V0KHsgYXBwQXJnczogW0J5dGVzKCcxNCcpXSB9KQogICAgYnl0ZWMgMTkgLy8gIjE0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTkKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMiAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5Ni0xMDEKICAgIC8vIGNvbnN0IGFwcFR4bjEgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcHJvdmFsUHJvZ3JhbTogTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUsCiAgICAvLyAgIGNsZWFyU3RhdGVQcm9ncmFtOiBBUFBST1ZFLAogICAgLy8gICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIGFwcEFyZ3M6IFtCeXRlcygnMScpXSwKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0M19uZXh0X3R4bkAxNDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTQ5CiAgICAvLyBhcHBUeG4xNSwKICAgIGl0eG5fbmV4dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo0CiAgICAvLyBjb25zdCBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5MzYxQTAwQjA4MTAxJykKICAgIGJ5dGVjXzEgLy8gMHgwOTM2MWEwMGIwODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzAKICAgIC8vIGFwcFR4bjE1LnNldCh7IGFwcEFyZ3M6IFtCeXRlcygnMTUnKV0gfSkKICAgIGJ5dGVjIDIwIC8vICIxNSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk5CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6OTYtMTAxCiAgICAvLyBjb25zdCBhcHBUeG4xID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHByb3ZhbFByb2dyYW06IExPR18xU1RfQVJHX0FORF9BUFBST1ZFLAogICAgLy8gICBjbGVhclN0YXRlUHJvZ3JhbTogQVBQUk9WRSwKICAgIC8vICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdDNfbmV4dF90eG5AMTU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE1MAogICAgLy8gYXBwVHhuMTYsCiAgICBpdHhuX25leHQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NAogICAgLy8gY29uc3QgTE9HXzFTVF9BUkdfQU5EX0FQUFJPVkUgPSBCeXRlcy5mcm9tSGV4KCcwOTM2MUEwMEIwODEwMScpCiAgICBieXRlY18xIC8vIDB4MDkzNjFhMDBiMDgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTMyCiAgICAvLyBhcHBUeG4xNi5zZXQoeyBhcHBBcmdzOiBbQnl0ZXMoJzE2JyldIH0pCiAgICBieXRlYyAyMSAvLyAiMTYiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo5OQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18yIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjk2LTEwMQogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBMT0dfMVNUX0FSR19BTkRfQVBQUk9WRSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3QzX25leHRfdHhuQDE2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxMzQtMTUxCiAgICAvLyBjb25zdCBbYXBwMSwgYXBwMiwgYXBwMywgYXBwNCwgYXBwNSwgYXBwNiwgYXBwNywgYXBwOCwgYXBwOSwgYXBwMTAsIGFwcDExLCBhcHAxMiwgYXBwMTMsIGFwcDE0LCBhcHAxNSwgYXBwMTZdID0gaXR4bi5zdWJtaXRHcm91cCgKICAgIC8vICAgYXBwVHhuMSwKICAgIC8vICAgYXBwVHhuMiwKICAgIC8vICAgYXBwVHhuMywKICAgIC8vICAgYXBwVHhuNCwKICAgIC8vICAgYXBwVHhuNSwKICAgIC8vICAgYXBwVHhuNiwKICAgIC8vICAgYXBwVHhuNywKICAgIC8vICAgYXBwVHhuOCwKICAgIC8vICAgYXBwVHhuOSwKICAgIC8vICAgYXBwVHhuMTAsCiAgICAvLyAgIGFwcFR4bjExLAogICAgLy8gICBhcHBUeG4xMiwKICAgIC8vICAgYXBwVHhuMTMsCiAgICAvLyAgIGFwcFR4bjE0LAogICAgLy8gICBhcHBUeG4xNSwKICAgIC8vICAgYXBwVHhuMTYsCiAgICAvLyApCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTMKICAgIC8vIGFzc2VydChhcHAxLmxvZ3MoMCkgPT09IEJ5dGVzKCcxJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAwIExvZ3MKICAgIGJ5dGVjXzMgLy8gIjEiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE1NAogICAgLy8gYXNzZXJ0KGFwcDIubG9ncygwKSA9PT0gQnl0ZXMoJzInKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDEgTG9ncwogICAgYnl0ZWMgNSAvLyAiMiIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTU1CiAgICAvLyBhc3NlcnQoYXBwMy5sb2dzKDApID09PSBCeXRlcygnMycpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMiBMb2dzCiAgICBieXRlYyA5IC8vICIzIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTYKICAgIC8vIGFzc2VydChhcHA0LmxvZ3MoMCkgPT09IEJ5dGVzKCc0JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAzIExvZ3MKICAgIGJ5dGVjIDEwIC8vICI0IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTcKICAgIC8vIGFzc2VydChhcHA1LmxvZ3MoMCkgPT09IEJ5dGVzKCc1JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA0IExvZ3MKICAgIGJ5dGVjIDExIC8vICI1IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNTgKICAgIC8vIGFzc2VydChhcHA2LmxvZ3MoMCkgPT09IEJ5dGVzKCc2JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA1IExvZ3MKICAgIHB1c2hieXRlcyAiNiIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTU5CiAgICAvLyBhc3NlcnQoYXBwNy5sb2dzKDApID09PSBCeXRlcygnNycpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgNiBMb2dzCiAgICBwdXNoYnl0ZXMgIjciCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2MAogICAgLy8gYXNzZXJ0KGFwcDgubG9ncygwKSA9PT0gQnl0ZXMoJzgnKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDcgTG9ncwogICAgcHVzaGJ5dGVzICI4IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjEKICAgIC8vIGFzc2VydChhcHA5LmxvZ3MoMCkgPT09IEJ5dGVzKCc5JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA4IExvZ3MKICAgIHB1c2hieXRlcyAiOSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTYyCiAgICAvLyBhc3NlcnQoYXBwMTAubG9ncygwKSA9PT0gQnl0ZXMoJzEwJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyA5IExvZ3MKICAgIGJ5dGVjIDE1IC8vICIxMCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTYzCiAgICAvLyBhc3NlcnQoYXBwMTEubG9ncygwKSA9PT0gQnl0ZXMoJzExJykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAxMCBMb2dzCiAgICBieXRlYyAxNiAvLyAiMTEiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2NAogICAgLy8gYXNzZXJ0KGFwcDEyLmxvZ3MoMCkgPT09IEJ5dGVzKCcxMicpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMTEgTG9ncwogICAgYnl0ZWMgMTcgLy8gIjEyIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjUKICAgIC8vIGFzc2VydChhcHAxMy5sb2dzKDApID09PSBCeXRlcygnMTMnKSkKICAgIGludGNfMCAvLyAwCiAgICBnaXR4bmFzIDEyIExvZ3MKICAgIGJ5dGVjIDE4IC8vICIxMyIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYXBwMTQubG9ncygwKSA9PT0gQnl0ZXMoJzE0JykpCiAgICBpbnRjXzAgLy8gMAogICAgZ2l0eG5hcyAxMyBMb2dzCiAgICBieXRlYyAxOSAvLyAiMTQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE2NwogICAgLy8gYXNzZXJ0KGFwcDE1LmxvZ3MoMCkgPT09IEJ5dGVzKCcxNScpKQogICAgaW50Y18wIC8vIDAKICAgIGdpdHhuYXMgMTQgTG9ncwogICAgYnl0ZWMgMjAgLy8gIjE1IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNjgKICAgIC8vIGFzc2VydChhcHAxNi5sb2dzKDApID09PSBCeXRlcygnMTYnKSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuYXMgTG9ncwogICAgYnl0ZWMgMjEgLy8gIjE2IgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo6SXR4bkRlbW9Db250cmFjdC50ZXN0NCgpIC0+IHZvaWQ6CnRlc3Q0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzIKICAgIC8vIGNvbnN0IGxvdHNPZkJ5dGVzID0gb3AuYnplcm8oMjA0NCkKICAgIHB1c2hpbnQgMjA0NCAvLyAyMDQ0CiAgICBiemVybwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQKICAgIC8vIGNvbnN0IGFwcHJvdmFsMiA9IEJ5dGVzLmZyb21IZXgoJzgwJyArICdGQzBmJykKICAgIHB1c2hieXRlcyAweDgwZmMwZgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQtMTc1CiAgICAvLyBjb25zdCBhcHByb3ZhbDIgPSBCeXRlcy5mcm9tSGV4KCc4MCcgKyAnRkMwZicpCiAgICAvLyAgIC5jb25jYXQobG90c09mQnl0ZXMpCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTc2CiAgICAvLyAuY29uY2F0KEJ5dGVzLmZyb21IZXgoJzQ4JykpCiAgICBwdXNoYnl0ZXMgMHg0OAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxNzQtMTc2CiAgICAvLyBjb25zdCBhcHByb3ZhbDIgPSBCeXRlcy5mcm9tSGV4KCc4MCcgKyAnRkMwZicpCiAgICAvLyAgIC5jb25jYXQobG90c09mQnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoQnl0ZXMuZnJvbUhleCgnNDgnKSkKICAgIGNvbmNhdAogICAgZHVwbiAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE3OQogICAgLy8gYXBwcm92YWxQcm9ncmFtOiBbYXBwcm92YWwxLCBhcHByb3ZhbDIsIGFwcHJvdmFsMiwgYXBwcm92YWwyXSwKICAgIGNvdmVyIDIKICAgIGNvdmVyIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTg1CiAgICAvLyBjb25zdCBhcHAxID0gYXBwVHhuMS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxODMKICAgIC8vIGV4dHJhUHJvZ3JhbVBhZ2VzOiAzLAogICAgaW50Y18zIC8vIDMKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgyCiAgICAvLyBhcHBBcmdzOiBbQnl0ZXMoJzEnKV0sCiAgICBieXRlY18zIC8vICIxIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTgxCiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzIgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTc4LTE4NAogICAgLy8gY29uc3QgYXBwVHhuMSA9IGl0eG4uYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgYXBwcm92YWxQcm9ncmFtOiBbYXBwcm92YWwxLCBhcHByb3ZhbDIsIGFwcHJvdmFsMiwgYXBwcm92YWwyXSwKICAgIC8vICAgY2xlYXJTdGF0ZVByb2dyYW06IEFQUFJPVkUsCiAgICAvLyAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgYXBwQXJnczogW0J5dGVzKCcxJyldLAogICAgLy8gICBleHRyYVByb2dyYW1QYWdlczogMywKICAgIC8vIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0NF9uZXh0X3R4bkAxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czoxODUKICAgIC8vIGNvbnN0IGFwcDEgPSBhcHBUeG4xLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBFeHRyYVByb2dyYW1QYWdlcwogICAgaXR4biBOdW1BcHByb3ZhbFByb2dyYW1QYWdlcwogICAgc3dhcAogICAgaXR4biBOdW1DbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBjb3ZlciAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXJ0KGFwcDEuZXh0cmFQcm9ncmFtUGFnZXMgPT09IDMsICdleHRyYSBwYWdlcyA9IDMnKQogICAgaW50Y18zIC8vIDMKICAgID09CiAgICBhc3NlcnQgLy8gZXh0cmEgcGFnZXMgPSAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4NwogICAgLy8gYXNzZXJ0KGFwcDEubnVtQXBwcm92YWxQcm9ncmFtUGFnZXMgPT09IDIsICdhcHByb3ZhbCBwYWdlcyA9IDInKQogICAgcHVzaGludCAyIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gYXBwcm92YWwgcGFnZXMgPSAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4OAogICAgLy8gYXNzZXJ0KGFwcDEuYXBwcm92YWxQcm9ncmFtUGFnZXMoMCkgPT09IGFwcHJvdmFsMS5jb25jYXQoYXBwcm92YWwyKS5jb25jYXQoYXBwcm92YWwyLnNsaWNlKDAsIC0zKSksICdleHBlY3RlZCBhcHByb3ZhbCBwYWdlIDAnKQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5hcyBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo1CiAgICAvLyBjb25zdCBBUFBST1ZFID0gQnl0ZXMuZnJvbUhleCgnMDk4MTAxJykKICAgIGJ5dGVjXzAgLy8gMHgwOTgxMDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTg4CiAgICAvLyBhc3NlcnQoYXBwMS5hcHByb3ZhbFByb2dyYW1QYWdlcygwKSA9PT0gYXBwcm92YWwxLmNvbmNhdChhcHByb3ZhbDIpLmNvbmNhdChhcHByb3ZhbDIuc2xpY2UoMCwgLTMpKSwgJ2V4cGVjdGVkIGFwcHJvdmFsIHBhZ2UgMCcpCiAgICB1bmNvdmVyIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDAKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18wIC8vIDAKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3dhcAogICAgaW50Y18zIC8vIDMKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18zIC8vIDMKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLQogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgc3dhcAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYXBwcm92YWwgcGFnZSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KGFwcDEuYXBwcm92YWxQcm9ncmFtUGFnZXMoMSkgPT09IGFwcHJvdmFsMi5zbGljZSgtMykuY29uY2F0KGFwcHJvdmFsMiksICdleHBlY3RlZCBhcHByb3ZhbCBwYWdlIDEnKQogICAgcHVzaGludCAxIC8vIDEKICAgIGl0eG5hcyBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgc3dhcAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMyAvLyAzCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAxCiAgICBzd2FwCiAgICAtCiAgICBkaWcgMgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBzd2FwCiAgICBjb25jYXQKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYXBwcm92YWwgcGFnZSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE5MAogICAgLy8gYXNzZXJ0KGFwcDEubnVtQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcyA9PT0gMSwgJ2NsZWFyIHN0YXRlIHBhZ2VzID0gMScpCiAgICBwdXNoaW50IDEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBjbGVhciBzdGF0ZSBwYWdlcyA9IDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6MTkxCiAgICAvLyBhc3NlcnQoYXBwMS5jbGVhclN0YXRlUHJvZ3JhbVBhZ2VzKDApID09PSBBUFBST1ZFLCAnZXhwZWN0ZWQgY2xlYXIgc3RhdGUgcGFnZScpCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bmFzIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6NQogICAgLy8gY29uc3QgQVBQUk9WRSA9IEJ5dGVzLmZyb21IZXgoJzA5ODEwMScpCiAgICBieXRlY18wIC8vIDB4MDk4MTAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjE5MQogICAgLy8gYXNzZXJ0KGFwcDEuY2xlYXJTdGF0ZVByb2dyYW1QYWdlcygwKSA9PT0gQVBQUk9WRSwgJ2V4cGVjdGVkIGNsZWFyIHN0YXRlIHBhZ2UnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBjbGVhciBzdGF0ZSBwYWdlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaXR4bi5hbGdvLnRzOjpJdHhuRGVtb0NvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pdHhuLmFsZ28udHM6Okl0eG5EZW1vQ29udHJhY3QuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKCmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgpjb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2l0eG4uYWxnby50czo4CiAgICAvLyBuYW1lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCkgfSkKICAgIGJ5dGVjXzIgLy8gIm5hbWUiCiAgICBwdXNoYnl0ZXMgMHgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiAFAAYFA+gHJhYDCYEBBwk2GgCwgQEEbmFtZQExBHVuaXQBMgRBU1QxBEFTVDIEQVNUMwEzATQBNQMzcmQTd2l0aCBhcmdzIHBhcmFtIHNldAI0MgIxMAIxMQIxMgIxMwIxNAIxNQIxNjEYQAADiASqMRsiE0EAcTYaAIAEICVPkYAE8ZCFJIAE35IPN4AEPUY0XE8EjgQAOAAmABQAAiJDMRkiEkQxGCITRIgDxYEBQv/tMRkiEkQxGCITRIgB7IEBQv/bMRkiEkQxGCITRIgBIYEBQv/JMRkiEkQxGCITRIgAHYEBQv+3MRkiTI4BAANC/6sxGCISRIgEJIEBQv+figAAIionBmciKmVEMgpJTgIyCklOAyonB2exsiqyKSWyIycEsiWyJiEEsiIlshAisgGztCaMALQ8IiplRLGLArIqiwGyKSWyIycEsiWyJiEEsiIlshAisgGztCa0PEyLACcGEkQnBxJETHEERCcGEkRxBEQnBxJEsSiyQiiyQCOyECKyAbaLArIqiwGyKSWyIycEsiUnCLImIQSyIiWyECKyAbO3AD20JkxEJwgSRLGBAUkPQQAEJwyyBSiyQiiyQCOyECKyAbaBAUkPQQAEJwyyBYsCsiqLAbIpJbIjJwSyJScIsiYhBLIiJbIQIrIBs4mKAAAiRwKAAEkigAAxG0EAgCuMACcFjAGBAowDIowGgQGMBCcNsbIFiwSBAQ9BAASLBrIZiwCyGosBshqLAyUPQQAEiwWyGiiyQiiyQCOyECKyAbO0BYwCIsUaKxJEgQHFGicFEkQxG4EBDUEAIrEnDrIaJLIZKLJCKLJAI7IQIrIBsyLFGicOEkSLAicNEkSJJwmMACcKjAEnC4wFJYwDgBFubyBhcmdzIHBhcmFtIHNldCKMBEL/bLErshokshkoskIpskAjshAisgG2KLJCKbJAJwWyGiSyGSOyECKyAbYoskIpskAnCbIaJLIZI7IQIrIBtiiyQimyQCcKshokshkjshAisgG2KLJCKbJAJwuyGiSyGSOyECKyAbYoskIpskCAATayGiSyGSOyECKyAbYoskIpskCAATeyGiSyGSOyECKyAbYoskIpskCAATiyGiSyGSOyECKyAbYoskIpskCAATmyGiSyGSOyECKyAbYoskIpskAnD7IaJLIZI7IQIrIBtiiyQimyQCcQshokshkjshAisgG2KLJCKbJAJxGyGiSyGSOyECKyAbYoskIpskAnErIaJLIZI7IQIrIBtiiyQimyQCcTshokshkjshAisgG2KLJCKbJAJxSyGiSyGSOyECKyAbYoskIpskAnFbIaJLIZI7IQIrIBsyLGADorEkQixgE6JwUSRCLGAjonCRJEIsYDOicKEkQixgQ6JwsSRCLGBTqAATYSRCLGBjqAATcSRCLGBzqAATgSRCLGCDqAATkSRCLGCTonDxJEIsYKOicQEkQixgs6JxESRCLGDDonEhJEIsYNOicTEkQixg46JxQSRCLFOicVEkSJgfwPr4ADgPwPTFCAAUhQRwNOAk4CsSWyOCuyGiSyGSiyQiiyQLJAskCyQCOyECKyAbO0OLRBTLRDTgIlEkSBAhJEIsVAKE8DSU4CUExJFSJLAQ8iSwJPAk1MJUsBDyVLAk8CTQlJSwIMTEsCTwJNSwJPAk8CUk8CTFBPAhJEgQHFQExJFSVLAQ8lSwJPAk1LAUwJSwJMTwJSTFASRIEBEkQixUIoEkSJKoAAZ4mJ", + "approval": "CiAFAAYFA+gHJhYDCYEBBwk2GgCwgQEEbmFtZQExBHVuaXQBMgRBU1QxBEFTVDIEQVNUMwEzATQBNQMzcmQTd2l0aCBhcmdzIHBhcmFtIHNldAI0MgIxMAIxMQIxMgIxMwIxNAIxNQIxNjEYQAADiASrMRsiE0EAcTYaAIAEICVPkYAE8ZCFJIAE35IPN4AEPUY0XE8EjgQAOAAmABQAAiJDMRkiEkQxGCITRIgDxYEBQv/tMRkiEkQxGCITRIgB7IEBQv/bMRkiEkQxGCITRIgBIYEBQv/JMRkiEkQxGCITRIgAHYEBQv+3MRkiTI4BAANC/6sxGCISRIgEH4EBQv+figAAIionBmciKmVEMgpJTgIyCklOAyonB2exsiqyKSWyIycEsiWyJiEEsiIlshAisgGztCaMALQ8IiplRLGLArIqiwGyKSWyIycEsiWyJiEEsiIlshAisgGztCa0PEyLACcGEkQnBxJETHEERCcGEkRxBEQnBxJEsSiyQiiyQCOyECKyAbaLArIqiwGyKSWyIycEsiUnCLImIQSyIiWyECKyAbO3AD20JkxEJwgSRLGBAUkPQQAEJwyyBSiyQiiyQCOyECKyAbaBAUkPQQAEJwyyBYsCsiqLAbIpJbIjJwSyJScIsiYhBLIiJbIQIrIBs4mKAAAiRwKAAEkigAAxG0EAgCuMACcFjAGBAowDIowGgQGMBCcNsbIFiwSBAQ9BAASLBrIZiwCyGosBshqLAyUPQQAEiwWyGiiyQiiyQCOyECKyAbO0BYwCIsUaKxJEgQHFGicFEkQxG4EBDUEAIrEnDrIaJLIZKLJCKLJAI7IQIrIBsyLFGicOEkSLAicNEkSJJwmMACcKjAEnC4wFJYwDgBFubyBhcmdzIHBhcmFtIHNldCKMBEL/bLErshokshkoskIpskAjshAisgG2KLJCKbJAJwWyGiSyGSOyECKyAbYoskIpskAnCbIaJLIZI7IQIrIBtiiyQimyQCcKshokshkjshAisgG2KLJCKbJAJwuyGiSyGSOyECKyAbYoskIpskCAATayGiSyGSOyECKyAbYoskIpskCAATeyGiSyGSOyECKyAbYoskIpskCAATiyGiSyGSOyECKyAbYoskIpskCAATmyGiSyGSOyECKyAbYoskIpskAnD7IaJLIZI7IQIrIBtiiyQimyQCcQshokshkjshAisgG2KLJCKbJAJxGyGiSyGSOyECKyAbYoskIpskAnErIaJLIZI7IQIrIBtiiyQimyQCcTshokshkjshAisgG2KLJCKbJAJxSyGiSyGSOyECKyAbYoskIpskAnFbIaJLIZI7IQIrIBsyLGADorEkQixgE6JwUSRCLGAjonCRJEIsYDOicKEkQixgQ6JwsSRCLGBTqAATYSRCLGBjqAATcSRCLGBzqAATgSRCLGCDqAATkSRCLGCTonDxJEIsYKOicQEkQixgs6JxESRCLGDDonEhJEIsYNOicTEkQixg46JxQSRCLFOicVEkSJgfwPr4ADgPwPTFCAAUhQRwNOAk4CsSWyOCuyGiSyGSiyQiiyQLJAskCyQCOyECKyAbO0OLRBTLRDTgIlEkSBAhJEIsVAKE8DSU4CUExJFSJLAQ8iSwJPAk1MJUsBDyVLAk8CTQlJSwIMTEsCTwJNSwJPAk8CUk8CTFBPAhJEgQHFQExJFSVLAQ8lSwJPAk1LAUwJSwJMTwJSTFASRIEBEkQixUIoEkSJiSqAAGeJ", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir index 13b2f6198..9f74e17a2 100644 --- a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir @@ -3274,11 +3274,16 @@ subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.test4() -> void: (assert tmp%14#0) // expected clear state page return +subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: + block@0: // L7 + return + subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() -> void: block@0: // L7 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "name" 0x) return -subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: - block@0: // L7 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.1.ssa.array.ir index 514b70488..edb793440 100644 --- a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.1.ssa.array.ir @@ -528,11 +528,15 @@ subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.test4() -> void: (assert tmp%14#0) // expected clear state page return -subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() -> void: +subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: block@0: // L7 - (app_global_put "name" 0x) return -subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: +subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() -> void: block@0: // L7 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L7 + (app_global_put "name" 0x) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.2.ssa.slot.ir index 514b70488..edb793440 100644 --- a/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.2.ssa.slot.ir @@ -528,11 +528,15 @@ subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.test4() -> void: (assert tmp%14#0) // expected clear state page return -subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() -> void: +subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: block@0: // L7 - (app_global_put "name" 0x) return -subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.__algots__.defaultCreate() -> void: +subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() -> void: block@0: // L7 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L7 + (app_global_put "name" 0x) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/itxn/itxn.awst b/tests/approvals/out/unoptimized/itxn/itxn.awst index cf009fdd8..231fa4c80 100644 --- a/tests/approvals/out/unoptimized/itxn/itxn.awst +++ b/tests/approvals/out/unoptimized/itxn/itxn.awst @@ -123,13 +123,17 @@ contract ItxnDemoContract assert(app1.ClearStateProgramPages[0] == 0x098101, comment=expected clear state page) } + __algots__.defaultCreate(): void + { + } + constructor(): void { - void + super.constructor() GlobalState["name"]: bytes = 0x } - __algots__.defaultCreate(): void + BaseContract::constructor(): void { } diff --git a/tests/approvals/out/unoptimized/itxn/itxn.awst.json b/tests/approvals/out/unoptimized/itxn/itxn.awst.json index d30bd08e3..27eef57a0 100644 --- a/tests/approvals/out/unoptimized/itxn/itxn.awst.json +++ b/tests/approvals/out/unoptimized/itxn/itxn.awst.json @@ -11250,6 +11250,60 @@ "default_args": {} } }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/itxn.algo.ts", + "line": 7, + "end_line": 7, + "column": 0, + "end_column": 48 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/itxn.algo.ts", + "line": 7, + "end_line": 7, + "column": 0, + "end_column": 48 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": "Implicitly generated create method", + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/itxn.algo.ts::ItxnDemoContract", + "member_name": "__algots__.defaultCreate", + "arc4_method_config": { + "_type": "ARC4BareMethodConfig", + "source_location": { + "file": "tests/approvals/itxn.algo.ts", + "line": 7, + "end_line": 7, + "column": 0, + "end_column": 48 + }, + "allowed_completion_types": [ + 0 + ], + "create": 2 + } + }, { "_type": "ContractMethod", "source_location": { @@ -11287,7 +11341,7 @@ "end_column": 48 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/itxn.algo.ts", "line": 7, @@ -11301,7 +11355,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -11388,11 +11447,12 @@ { "_type": "ContractMethod", "source_location": { - "file": "tests/approvals/itxn.algo.ts", - "line": 7, - "end_line": 7, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 48 + "end_column": 1 }, "args": [], "return_type": { @@ -11405,11 +11465,12 @@ "body": { "_type": "Block", "source_location": { - "file": "tests/approvals/itxn.algo.ts", - "line": 7, - "end_line": 7, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 48 + "end_column": 1 }, "body": [], "label": null, @@ -11417,27 +11478,14 @@ }, "documentation": { "_type": "MethodDocumentation", - "description": "Implicitly generated create method", + "description": null, "args": {}, "returns": null }, - "inline": null, - "cref": "tests/approvals/itxn.algo.ts::ItxnDemoContract", - "member_name": "__algots__.defaultCreate", - "arc4_method_config": { - "_type": "ARC4BareMethodConfig", - "source_location": { - "file": "tests/approvals/itxn.algo.ts", - "line": 7, - "end_line": 7, - "column": 0, - "end_column": 48 - }, - "allowed_completion_types": [ - 0 - ], - "create": 2 - } + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.approval.teal b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.approval.teal index 61676a0f4..9142e81af 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.approval.teal +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.approval.teal @@ -151,19 +151,6 @@ methodOne: retsub -// tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: -constructor: - // tests/approvals/multi-inheritance.algo.ts:17 - // export class BaseOne extends CommonBase { - callsub tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor - // tests/approvals/multi-inheritance.algo.ts:18 - // stateOne = GlobalState({ initialValue: Uint64(45) }) - pushbytes "stateOne" - pushint 45 // 45 - app_global_put - retsub - - // tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: methodCommon: // tests/approvals/multi-inheritance.algo.ts:9 @@ -180,16 +167,33 @@ b2CantOverride: retsub +// tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: +__algots__.defaultCreate: + retsub + + +// tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: +constructor: + // tests/approvals/multi-inheritance.algo.ts:17 + // export class BaseOne extends CommonBase { + callsub tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor + // tests/approvals/multi-inheritance.algo.ts:18 + // stateOne = GlobalState({ initialValue: Uint64(45) }) + pushbytes "stateOne" + pushint 45 // 45 + app_global_put + retsub + + // tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor: + +tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor_block@1: + +tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/multi-inheritance.algo.ts:6 // stateCommon = GlobalState({ initialValue: 123 }) pushbytes "stateCommon" pushint 123 // 123 app_global_put retsub - - -// tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: -__algots__.defaultCreate: - retsub diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.arc32.json b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.arc32.json index 3dbedef85..f50141d72 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.arc32.json +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.arc32.json @@ -17,7 +17,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGMzMjUzM2UzIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHg0NTVjOGQwOSAvLyBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZjlmNTE0MmMgLy8gbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgdW5jb3ZlciAzCiAgICBtYXRjaCBtYWluX21ldGhvZE9uZV9yb3V0ZUA1IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDYgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1OgogICAgcmV0dXJuCgptYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTUKCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo4CiAgICAvLyBtZXRob2RDb21tb24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9tZXRob2RPbmVfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjE5CiAgICAvLyBtZXRob2RPbmUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZE9uZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9iYXJlX3JvdXRpbmdAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDEyOgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEzOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTQKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUubWV0aG9kT25lKCkgLT4gYnl0ZXM6Cm1ldGhvZE9uZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gJ2Jhc2Utb25lJwogICAgcHVzaGJ5dGVzICJiYXNlLW9uZSIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjE4CiAgICAvLyBzdGF0ZU9uZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoNDUpIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlT25lIgogICAgcHVzaGludCA0NSAvLyA0NQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiAnY29tbW9uJwogICAgYnl0ZWNfMSAvLyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjYKICAgIC8vIHN0YXRlQ29tbW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMTIzIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlQ29tbW9uIgogICAgcHVzaGludCAxMjMgLy8gMTIzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGMzMjUzM2UzIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHg0NTVjOGQwOSAvLyBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZjlmNTE0MmMgLy8gbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgdW5jb3ZlciAzCiAgICBtYXRjaCBtYWluX21ldGhvZE9uZV9yb3V0ZUA1IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDYgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1OgogICAgcmV0dXJuCgptYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTUKCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo4CiAgICAvLyBtZXRob2RDb21tb24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9tZXRob2RPbmVfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjE5CiAgICAvLyBtZXRob2RPbmUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZE9uZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9iYXJlX3JvdXRpbmdAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDEyOgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEzOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTQKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUubWV0aG9kT25lKCkgLT4gYnl0ZXM6Cm1ldGhvZE9uZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gJ2Jhc2Utb25lJwogICAgcHVzaGJ5dGVzICJiYXNlLW9uZSIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiAnY29tbW9uJwogICAgYnl0ZWNfMSAvLyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZU9uZSBleHRlbmRzIENvbW1vbkJhc2UgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTgKICAgIC8vIHN0YXRlT25lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg0NSkgfSkKICAgIHB1c2hieXRlcyAic3RhdGVPbmUiCiAgICBwdXNoaW50IDQ1IC8vIDQ1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcjoKCnRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NgogICAgLy8gc3RhdGVDb21tb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAxMjMgfSkKICAgIHB1c2hieXRlcyAic3RhdGVDb21tb24iCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.arc56.json b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.arc56.json index a37b0e347..56ebedbcf 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.arc56.json +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.arc56.json @@ -129,11 +129,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGMzMjUzM2UzIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHg0NTVjOGQwOSAvLyBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZjlmNTE0MmMgLy8gbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgdW5jb3ZlciAzCiAgICBtYXRjaCBtYWluX21ldGhvZE9uZV9yb3V0ZUA1IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDYgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1OgogICAgcmV0dXJuCgptYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTUKCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo4CiAgICAvLyBtZXRob2RDb21tb24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9tZXRob2RPbmVfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjE5CiAgICAvLyBtZXRob2RPbmUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZE9uZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9iYXJlX3JvdXRpbmdAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDEyOgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEzOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTQKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUubWV0aG9kT25lKCkgLT4gYnl0ZXM6Cm1ldGhvZE9uZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gJ2Jhc2Utb25lJwogICAgcHVzaGJ5dGVzICJiYXNlLW9uZSIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjE4CiAgICAvLyBzdGF0ZU9uZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoNDUpIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlT25lIgogICAgcHVzaGludCA0NSAvLyA0NQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiAnY29tbW9uJwogICAgYnl0ZWNfMSAvLyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjYKICAgIC8vIHN0YXRlQ29tbW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMTIzIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlQ29tbW9uIgogICAgcHVzaGludCAxMjMgLy8gMTIzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGMzMjUzM2UzIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHg0NTVjOGQwOSAvLyBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZjlmNTE0MmMgLy8gbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgdW5jb3ZlciAzCiAgICBtYXRjaCBtYWluX21ldGhvZE9uZV9yb3V0ZUA1IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDYgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1OgogICAgcmV0dXJuCgptYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTUKCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo4CiAgICAvLyBtZXRob2RDb21tb24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9tZXRob2RPbmVfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjE5CiAgICAvLyBtZXRob2RPbmUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZE9uZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9iYXJlX3JvdXRpbmdAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VPbmUgZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDEyOgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEzOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTQKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUubWV0aG9kT25lKCkgLT4gYnl0ZXM6Cm1ldGhvZE9uZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gJ2Jhc2Utb25lJwogICAgcHVzaGJ5dGVzICJiYXNlLW9uZSIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiAnY29tbW9uJwogICAgYnl0ZWNfMSAvLyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZU9uZSBleHRlbmRzIENvbW1vbkJhc2UgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTgKICAgIC8vIHN0YXRlT25lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg0NSkgfSkKICAgIHB1c2hieXRlcyAic3RhdGVPbmUiCiAgICBwdXNoaW50IDQ1IC8vIDQ1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcjoKCnRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NgogICAgLy8gc3RhdGVDb21tb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAxMjMgfSkKICAgIHB1c2hieXRlcyAic3RhdGVDb21tb24iCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmAgQVH3x1BmNvbW1vbjEYQAADiAChMRsiE0EAeDYaAIAEwyUz44AERVyNCYAE+fUULE8DjgMAPAAfAAIiQzEZIhJEMRgiE0SIAH9JFRZXBgJMUChMULAjQv/iMRkiEkQxGCITRIgAYEkVFlcGAkxQKExQsCNC/8UxGSISRDEYIhNEiAAnSRUWVwYCTFAoTFCwI0L/qDEZIkyOAQADQv+cMRgiEkSIADUjQv+RgAhiYXNlLW9uZYmIABKACHN0YXRlT25lgS1niSmJKYmAC3N0YXRlQ29tbW9ugXtniYk=", + "approval": "CiACAAEmAgQVH3x1BmNvbW1vbjEYQAADiACmMRsiE0EAeDYaAIAEwyUz44AERVyNCYAE+fUULE8DjgMAPAAfAAIiQzEZIhJEMRgiE0SIAG5JFRZXBgJMUChMULAjQv/iMRkiEkQxGCITRIgAT0kVFlcGAkxQKExQsCNC/8UxGSISRDEYIhNEiAAnSRUWVwYCTFAoTFCwI0L/qDEZIkyOAQADQv+cMRgiEkSIABMjQv+RgAhiYXNlLW9uZYkpiSmJiYgADoAIc3RhdGVPbmWBLWeJgAtzdGF0ZUNvbW1vboF7Z4k=", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir index d19441684..b76f21412 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.0.ssa.ir @@ -86,12 +86,6 @@ subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.methodOne() -> byt block@0: // L19 return "base-one" -subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: - block@0: // L17 - tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() - (app_global_put "stateOne" 45u) - return - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: block@0: // L8 return "common" @@ -100,11 +94,22 @@ subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride( block@0: // L12 return "common" +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: + block@0: // L17 + return + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: + block@0: // L17 + tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() + (app_global_put "stateOne" 45u) + return + subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: - block@0: // L17 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.1.ssa.array.ir index 976f3233f..663a394be 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.1.ssa.array.ir @@ -91,12 +91,6 @@ subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.methodOne() -> byt block@0: // L19 return "base-one" -subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: - block@0: // L17 - tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() - (app_global_put "stateOne" 45u) - return - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: block@0: // L8 return "common" @@ -105,11 +99,21 @@ subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride( block@0: // L12 return "common" -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: - block@0: // L5 - (app_global_put "stateCommon" 123u) +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: + block@0: // L17 return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: block@0: // L17 + tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() + (app_global_put "stateOne" 45u) + return + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: + block@0: // L5 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L5 + (app_global_put "stateCommon" 123u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.2.ssa.slot.ir index 976f3233f..663a394be 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseOne.ir/BaseOne.approval.2.ssa.slot.ir @@ -91,12 +91,6 @@ subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.methodOne() -> byt block@0: // L19 return "base-one" -subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: - block@0: // L17 - tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() - (app_global_put "stateOne" 45u) - return - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: block@0: // L8 return "common" @@ -105,11 +99,21 @@ subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride( block@0: // L12 return "common" -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: - block@0: // L5 - (app_global_put "stateCommon" 123u) +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: + block@0: // L17 return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.__algots__.defaultCreate() -> void: +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: block@0: // L17 + tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() + (app_global_put "stateOne" 45u) + return + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: + block@0: // L5 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L5 + (app_global_put "stateCommon" 123u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.approval.teal b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.approval.teal index 5ec8d348d..9010cfa04 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.approval.teal +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.approval.teal @@ -159,6 +159,19 @@ b2CantOverride: retsub +// tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: +methodCommon: + // tests/approvals/multi-inheritance.algo.ts:9 + // return 'common' + pushbytes "common" + retsub + + +// tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: +__algots__.defaultCreate: + retsub + + // tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: constructor: // tests/approvals/multi-inheritance.algo.ts:24 @@ -172,24 +185,15 @@ constructor: retsub -// tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: -methodCommon: - // tests/approvals/multi-inheritance.algo.ts:9 - // return 'common' - pushbytes "common" - retsub - - // tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor: + +tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor_block@1: + +tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/multi-inheritance.algo.ts:6 // stateCommon = GlobalState({ initialValue: 123 }) pushbytes "stateCommon" pushint 123 // 123 app_global_put retsub - - -// tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: -__algots__.defaultCreate: - retsub diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.arc32.json b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.arc32.json index f298fa2c2..938f5f264 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.arc32.json +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.arc32.json @@ -17,7 +17,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImJhc2UtdHdvIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTAKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MzYzYjMyOWUgLy8gbWV0aG9kICJtZXRob2RUd28oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGY5ZjUxNDJjIC8vIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIKICAgIHB1c2hieXRlcyAweDQ1NWM4ZDA5IC8vIG1ldGhvZCAibWV0aG9kQ29tbW9uKClzdHJpbmciCiAgICB1bmNvdmVyIDMKICAgIG1hdGNoIG1haW5fbWV0aG9kVHdvX3JvdXRlQDUgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDcKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDk6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VUd28gZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uX19wdXlhX2FyYzRfcm91dGVyX19AMTU6CiAgICByZXR1cm4KCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo4CiAgICAvLyBtZXRob2RDb21tb24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MzUKICAgIC8vIGIyQ2FudE92ZXJyaWRlKCk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGIyQ2FudE92ZXJyaWRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgptYWluX21ldGhvZFR3b19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjYKICAgIC8vIG1ldGhvZFR3bygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kVHdvCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgptYWluX2JhcmVfcm91dGluZ0AxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDExCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTI6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTM6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxNAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VUd28gZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uX19wdXlhX2FyYzRfcm91dGVyX19AMTUKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5tZXRob2RUd28oKSAtPiBieXRlczoKbWV0aG9kVHdvOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjcKICAgIC8vIHJldHVybiAnYmFzZS10d28nCiAgICBieXRlY18xIC8vICJiYXNlLXR3byIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MzYKICAgIC8vIHJldHVybiAnYmFzZS10d28nCiAgICBieXRlY18xIC8vICJiYXNlLXR3byIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VUd28gZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI1CiAgICAvLyBzdGF0ZVR3byA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnSGVsbG8nIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlVHdvIgogICAgcHVzaGJ5dGVzICJIZWxsbyIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5tZXRob2RDb21tb24oKSAtPiBieXRlczoKbWV0aG9kQ29tbW9uOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OQogICAgLy8gcmV0dXJuICdjb21tb24nCiAgICBwdXNoYnl0ZXMgImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo2CiAgICAvLyBzdGF0ZUNvbW1vbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEyMyB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZUNvbW1vbiIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImJhc2UtdHdvIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTAKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MzYzYjMyOWUgLy8gbWV0aG9kICJtZXRob2RUd28oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGY5ZjUxNDJjIC8vIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIKICAgIHB1c2hieXRlcyAweDQ1NWM4ZDA5IC8vIG1ldGhvZCAibWV0aG9kQ29tbW9uKClzdHJpbmciCiAgICB1bmNvdmVyIDMKICAgIG1hdGNoIG1haW5fbWV0aG9kVHdvX3JvdXRlQDUgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDcKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDk6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VUd28gZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uX19wdXlhX2FyYzRfcm91dGVyX19AMTU6CiAgICByZXR1cm4KCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo4CiAgICAvLyBtZXRob2RDb21tb24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MzUKICAgIC8vIGIyQ2FudE92ZXJyaWRlKCk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGIyQ2FudE92ZXJyaWRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgptYWluX21ldGhvZFR3b19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjYKICAgIC8vIG1ldGhvZFR3bygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kVHdvCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgptYWluX2JhcmVfcm91dGluZ0AxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDExCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTI6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTM6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxNAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VUd28gZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uX19wdXlhX2FyYzRfcm91dGVyX19AMTUKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5tZXRob2RUd28oKSAtPiBieXRlczoKbWV0aG9kVHdvOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjcKICAgIC8vIHJldHVybiAnYmFzZS10d28nCiAgICBieXRlY18xIC8vICJiYXNlLXR3byIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MzYKICAgIC8vIHJldHVybiAnYmFzZS10d28nCiAgICBieXRlY18xIC8vICJiYXNlLXR3byIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIHB1c2hieXRlcyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjUKICAgIC8vIHN0YXRlVHdvID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICdIZWxsbycgfSkKICAgIHB1c2hieXRlcyAic3RhdGVUd28iCiAgICBwdXNoYnl0ZXMgIkhlbGxvIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3I6Cgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3Rvcl9ibG9ja0AxOgoKdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3JfYWZ0ZXJfaW5saW5lZF9AYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY29uc3RydWN0b3JAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjYKICAgIC8vIHN0YXRlQ29tbW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMTIzIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlQ29tbW9uIgogICAgcHVzaGludCAxMjMgLy8gMTIzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.arc56.json b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.arc56.json index 51bb1ec3a..a61e889d1 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.arc56.json +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.arc56.json @@ -130,11 +130,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImJhc2UtdHdvIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTAKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MzYzYjMyOWUgLy8gbWV0aG9kICJtZXRob2RUd28oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGY5ZjUxNDJjIC8vIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIKICAgIHB1c2hieXRlcyAweDQ1NWM4ZDA5IC8vIG1ldGhvZCAibWV0aG9kQ29tbW9uKClzdHJpbmciCiAgICB1bmNvdmVyIDMKICAgIG1hdGNoIG1haW5fbWV0aG9kVHdvX3JvdXRlQDUgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDcKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDk6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VUd28gZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uX19wdXlhX2FyYzRfcm91dGVyX19AMTU6CiAgICByZXR1cm4KCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo4CiAgICAvLyBtZXRob2RDb21tb24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MzUKICAgIC8vIGIyQ2FudE92ZXJyaWRlKCk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGIyQ2FudE92ZXJyaWRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgptYWluX21ldGhvZFR3b19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjYKICAgIC8vIG1ldGhvZFR3bygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kVHdvCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgptYWluX2JhcmVfcm91dGluZ0AxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDExCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTI6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTM6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxNAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VUd28gZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uX19wdXlhX2FyYzRfcm91dGVyX19AMTUKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5tZXRob2RUd28oKSAtPiBieXRlczoKbWV0aG9kVHdvOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjcKICAgIC8vIHJldHVybiAnYmFzZS10d28nCiAgICBieXRlY18xIC8vICJiYXNlLXR3byIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MzYKICAgIC8vIHJldHVybiAnYmFzZS10d28nCiAgICBieXRlY18xIC8vICJiYXNlLXR3byIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VUd28gZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI1CiAgICAvLyBzdGF0ZVR3byA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnSGVsbG8nIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlVHdvIgogICAgcHVzaGJ5dGVzICJIZWxsbyIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5tZXRob2RDb21tb24oKSAtPiBieXRlczoKbWV0aG9kQ29tbW9uOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OQogICAgLy8gcmV0dXJuICdjb21tb24nCiAgICBwdXNoYnl0ZXMgImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo2CiAgICAvLyBzdGF0ZUNvbW1vbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEyMyB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZUNvbW1vbiIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImJhc2UtdHdvIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTAKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MzYzYjMyOWUgLy8gbWV0aG9kICJtZXRob2RUd28oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGY5ZjUxNDJjIC8vIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIKICAgIHB1c2hieXRlcyAweDQ1NWM4ZDA5IC8vIG1ldGhvZCAibWV0aG9kQ29tbW9uKClzdHJpbmciCiAgICB1bmNvdmVyIDMKICAgIG1hdGNoIG1haW5fbWV0aG9kVHdvX3JvdXRlQDUgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDcKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDk6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VUd28gZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uX19wdXlhX2FyYzRfcm91dGVyX19AMTU6CiAgICByZXR1cm4KCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo4CiAgICAvLyBtZXRob2RDb21tb24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MzUKICAgIC8vIGIyQ2FudE92ZXJyaWRlKCk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGIyQ2FudE92ZXJyaWRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgptYWluX21ldGhvZFR3b19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjYKICAgIC8vIG1ldGhvZFR3bygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kVHdvCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgptYWluX2JhcmVfcm91dGluZ0AxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDExCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTI6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTM6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxNAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VUd28gZXh0ZW5kcyBDb21tb25CYXNlIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uX19wdXlhX2FyYzRfcm91dGVyX19AMTUKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5tZXRob2RUd28oKSAtPiBieXRlczoKbWV0aG9kVHdvOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjcKICAgIC8vIHJldHVybiAnYmFzZS10d28nCiAgICBieXRlY18xIC8vICJiYXNlLXR3byIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MzYKICAgIC8vIHJldHVybiAnYmFzZS10d28nCiAgICBieXRlY18xIC8vICJiYXNlLXR3byIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIHB1c2hieXRlcyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjUKICAgIC8vIHN0YXRlVHdvID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICdIZWxsbycgfSkKICAgIHB1c2hieXRlcyAic3RhdGVUd28iCiAgICBwdXNoYnl0ZXMgIkhlbGxvIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3I6Cgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3Rvcl9ibG9ja0AxOgoKdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3JfYWZ0ZXJfaW5saW5lZF9AYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY29uc3RydWN0b3JAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjYKICAgIC8vIHN0YXRlQ29tbW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMTIzIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlQ29tbW9uIgogICAgcHVzaGludCAxMjMgLy8gMTIzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmAgQVH3x1CGJhc2UtdHdvMRhAAAOIAJoxGyITQQB4NhoAgAQ2OzKegAT59RQsgARFXI0JTwOOAwA8AB8AAiJDMRkiEkQxGCITRIgAe0kVFlcGAkxQKExQsCNC/+IxGSISRDEYIhNEiABGSRUWVwYCTFAoTFCwI0L/xTEZIhJEMRgiE0SIACdJFRZXBgJMUChMULAjQv+oMRkiTI4BAANC/5wxGCISRIgAOCNC/5EpiSmJiAAcgAhzdGF0ZVR3b4AFSGVsbG9niYAGY29tbW9uiYALc3RhdGVDb21tb26Be2eJiQ==", + "approval": "CiACAAEmAgQVH3x1CGJhc2UtdHdvMRhAAAOIAKQxGyITQQB4NhoAgAQ2OzKegAT59RQsgARFXI0JTwOOAwA8AB8AAiJDMRkiEkQxGCITRIgAZUkVFlcGAkxQKExQsCNC/+IxGSISRDEYIhNEiABGSRUWVwYCTFAoTFCwI0L/xTEZIhJEMRgiE0SIACdJFRZXBgJMUChMULAjQv+oMRkiTI4BAANC/5wxGCISRIgAESNC/5EpiSmJgAZjb21tb26JiYgAE4AIc3RhdGVUd2+ABUhlbGxvZ4mAC3N0YXRlQ29tbW9ugXtniQ==", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir index 77b35fa13..dadd2cfc3 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.0.ssa.ir @@ -90,21 +90,26 @@ subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() - block@0: // L35 return "base-two" +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: + block@0: // L8 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: + block@0: // L24 + return + subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: block@0: // L24 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateTwo" "Hello") return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: - block@0: // L8 - return "common" - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: - block@0: // L24 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.1.ssa.array.ir index 6c07c5baf..ccd06a31e 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.1.ssa.array.ir @@ -95,21 +95,25 @@ subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() - block@0: // L35 return "base-two" +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: + block@0: // L8 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: + block@0: // L24 + return + subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: block@0: // L24 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateTwo" "Hello") return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: - block@0: // L8 - return "common" - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L5 (app_global_put "stateCommon" 123u) - return - -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: - block@0: // L24 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.2.ssa.slot.ir index 6c07c5baf..ccd06a31e 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/BaseTwo.ir/BaseTwo.approval.2.ssa.slot.ir @@ -95,21 +95,25 @@ subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() - block@0: // L35 return "base-two" +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: + block@0: // L8 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: + block@0: // L24 + return + subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: block@0: // L24 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateTwo" "Hello") return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: - block@0: // L8 - return "common" - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L5 (app_global_put "stateCommon" 123u) - return - -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.__algots__.defaultCreate() -> void: - block@0: // L24 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.approval.teal b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.approval.teal index 533c9e5bb..bc0965e8a 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.approval.teal +++ b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.approval.teal @@ -133,16 +133,20 @@ b2CantOverride: retsub +// tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: +__algots__.defaultCreate: + retsub + + // tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: constructor: + +constructor_block@1: + +constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/multi-inheritance.algo.ts:6 // stateCommon = GlobalState({ initialValue: 123 }) pushbytes "stateCommon" pushint 123 // 123 app_global_put retsub - - -// tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: -__algots__.defaultCreate: - retsub diff --git a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.arc32.json b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.arc32.json index c187c62bc..970b36590 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.arc32.json +++ b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.arc32.json @@ -12,7 +12,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgQ29tbW9uQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb21tb25CYXNlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4NDU1YzhkMDkgLy8gbWV0aG9kICJtZXRob2RDb21tb24oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGY5ZjUxNDJjIC8vIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIKICAgIHVuY292ZXIgMgogICAgbWF0Y2ggbWFpbl9tZXRob2RDb21tb25fcm91dGVANSBtYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDYKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDg6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgQ29tbW9uQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjEyCiAgICAvLyBiMkNhbnRPdmVycmlkZSgpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBiMkNhbnRPdmVycmlkZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9tZXRob2RDb21tb25fcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjgKICAgIC8vIG1ldGhvZENvbW1vbigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kQ29tbW9uCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2JhcmVfcm91dGluZ0A5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NQogICAgLy8gZXhwb3J0IGNsYXNzIENvbW1vbkJhc2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTAKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb21tb25CYXNlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiAnY29tbW9uJwogICAgYnl0ZWNfMSAvLyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjYKICAgIC8vIHN0YXRlQ29tbW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMTIzIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlQ29tbW9uIgogICAgcHVzaGludCAxMjMgLy8gMTIzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgQ29tbW9uQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb21tb25CYXNlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4NDU1YzhkMDkgLy8gbWV0aG9kICJtZXRob2RDb21tb24oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGY5ZjUxNDJjIC8vIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIKICAgIHVuY292ZXIgMgogICAgbWF0Y2ggbWFpbl9tZXRob2RDb21tb25fcm91dGVANSBtYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDYKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDg6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgQ29tbW9uQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjEyCiAgICAvLyBiMkNhbnRPdmVycmlkZSgpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBiMkNhbnRPdmVycmlkZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9tZXRob2RDb21tb25fcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjgKICAgIC8vIG1ldGhvZENvbW1vbigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kQ29tbW9uCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2JhcmVfcm91dGluZ0A5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NQogICAgLy8gZXhwb3J0IGNsYXNzIENvbW1vbkJhc2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTAKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb21tb25CYXNlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiAnY29tbW9uJwogICAgYnl0ZWNfMSAvLyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKCmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgpjb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NgogICAgLy8gc3RhdGVDb21tb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAxMjMgfSkKICAgIHB1c2hieXRlcyAic3RhdGVDb21tb24iCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.arc56.json b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.arc56.json index 459535db0..8ddd1bc30 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.arc56.json +++ b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.arc56.json @@ -106,11 +106,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgQ29tbW9uQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb21tb25CYXNlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4NDU1YzhkMDkgLy8gbWV0aG9kICJtZXRob2RDb21tb24oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGY5ZjUxNDJjIC8vIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIKICAgIHVuY292ZXIgMgogICAgbWF0Y2ggbWFpbl9tZXRob2RDb21tb25fcm91dGVANSBtYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDYKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDg6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgQ29tbW9uQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjEyCiAgICAvLyBiMkNhbnRPdmVycmlkZSgpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBiMkNhbnRPdmVycmlkZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9tZXRob2RDb21tb25fcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjgKICAgIC8vIG1ldGhvZENvbW1vbigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kQ29tbW9uCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2JhcmVfcm91dGluZ0A5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NQogICAgLy8gZXhwb3J0IGNsYXNzIENvbW1vbkJhc2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTAKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb21tb25CYXNlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiAnY29tbW9uJwogICAgYnl0ZWNfMSAvLyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjYKICAgIC8vIHN0YXRlQ29tbW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMTIzIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlQ29tbW9uIgogICAgcHVzaGludCAxMjMgLy8gMTIzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgQ29tbW9uQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb21tb25CYXNlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4NDU1YzhkMDkgLy8gbWV0aG9kICJtZXRob2RDb21tb24oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGY5ZjUxNDJjIC8vIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIKICAgIHVuY292ZXIgMgogICAgbWF0Y2ggbWFpbl9tZXRob2RDb21tb25fcm91dGVANSBtYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDYKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDg6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgQ29tbW9uQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjEyCiAgICAvLyBiMkNhbnRPdmVycmlkZSgpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBiMkNhbnRPdmVycmlkZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9tZXRob2RDb21tb25fcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjgKICAgIC8vIG1ldGhvZENvbW1vbigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kQ29tbW9uCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2JhcmVfcm91dGluZ0A5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NQogICAgLy8gZXhwb3J0IGNsYXNzIENvbW1vbkJhc2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTAKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb21tb25CYXNlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiAnY29tbW9uJwogICAgYnl0ZWNfMSAvLyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKCmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgpjb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NgogICAgLy8gc3RhdGVDb21tb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAxMjMgfSkKICAgIHB1c2hieXRlcyAic3RhdGVDb21tb24iCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmAgQVH3x1BmNvbW1vbjEYQAADiAB1MRsiE0EAUzYaAIAERVyNCYAE+fUULE8CjgIAHwACIkMxGSISRDEYIhNEiABGSRUWVwYCTFAoTFCwI0L/4jEZIhJEMRgiE0SIACdJFRZXBgJMUChMULAjQv/FMRkiTI4BAANC/7kxGCISRIgAGSNC/64piSmJgAtzdGF0ZUNvbW1vboF7Z4mJ", + "approval": "CiACAAEmAgQVH3x1BmNvbW1vbjEYQAADiAB2MRsiE0EAUzYaAIAERVyNCYAE+fUULE8CjgIAHwACIkMxGSISRDEYIhNEiABGSRUWVwYCTFAoTFCwI0L/4jEZIhJEMRgiE0SIACdJFRZXBgJMUChMULAjQv/FMRkiTI4BAANC/7kxGCISRIgACCNC/64piSmJiYALc3RhdGVDb21tb26Be2eJ", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir index d217ab841..9cfbfedfb 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.0.ssa.ir @@ -75,11 +75,16 @@ subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride( block@0: // L12 return "common" +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: + block@0: // L5 + return + subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: - block@0: // L5 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.1.ssa.array.ir index 5e618273c..3de011d26 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.1.ssa.array.ir @@ -79,11 +79,15 @@ subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride( block@0: // L12 return "common" -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: block@0: // L5 - (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L5 + (app_global_put "stateCommon" 123u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.2.ssa.slot.ir index 5e618273c..3de011d26 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/CommonBase.ir/CommonBase.approval.2.ssa.slot.ir @@ -79,11 +79,15 @@ subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride( block@0: // L12 return "common" -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: block@0: // L5 - (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.__algots__.defaultCreate() -> void: +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L5 + (app_global_put "stateCommon" 123u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.approval.teal b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.approval.teal index a77d8c832..b15b80ddc 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.approval.teal +++ b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.approval.teal @@ -305,6 +305,51 @@ callB2Common: retsub +// tests/approvals/multi-inheritance.algo.ts::BaseOne.methodOne() -> bytes: +methodOne: + // tests/approvals/multi-inheritance.algo.ts:20 + // return 'base-one' + pushbytes "base-one" + retsub + + +// tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: +methodCommon: + // tests/approvals/multi-inheritance.algo.ts:9 + // return 'common' + bytec_1 // "common" + retsub + + +// tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: +b2CantOverride: + // tests/approvals/multi-inheritance.algo.ts:13 + // return 'common' + bytec_1 // "common" + retsub + + +// tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: +methodTwo: + // tests/approvals/multi-inheritance.algo.ts:27 + // return 'base-two' + bytec_2 // "base-two" + retsub + + +// tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: +tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride: + // tests/approvals/multi-inheritance.algo.ts:36 + // return 'base-two' + bytec_2 // "base-two" + retsub + + +// tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: +__algots__.defaultCreate: + retsub + + // tests/approvals/multi-inheritance.algo.ts::MultiBases.constructor() -> void: constructor: // tests/approvals/multi-inheritance.algo.ts:40 @@ -325,14 +370,6 @@ polytype/lib/polytype-module.d.ts::ClusteredContract bytes: -methodOne: - // tests/approvals/multi-inheritance.algo.ts:20 - // return 'base-one' - pushbytes "base-one" - retsub - - // tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor: // tests/approvals/multi-inheritance.algo.ts:17 @@ -346,24 +383,12 @@ tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor: retsub -// tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: -methodCommon: - // tests/approvals/multi-inheritance.algo.ts:9 - // return 'common' - bytec_1 // "common" - retsub - - -// tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: -b2CantOverride: - // tests/approvals/multi-inheritance.algo.ts:13 - // return 'common' - bytec_1 // "common" - retsub - - // tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor: + +tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor_block@1: + +tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/multi-inheritance.algo.ts:6 // stateCommon = GlobalState({ initialValue: 123 }) pushbytes "stateCommon" @@ -372,22 +397,6 @@ tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor: retsub -// tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: -methodTwo: - // tests/approvals/multi-inheritance.algo.ts:27 - // return 'base-two' - bytec_2 // "base-two" - retsub - - -// tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: -tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride: - // tests/approvals/multi-inheritance.algo.ts:36 - // return 'base-two' - bytec_2 // "base-two" - retsub - - // tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor: // tests/approvals/multi-inheritance.algo.ts:24 @@ -399,8 +408,3 @@ tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor: pushbytes "Hello" app_global_put retsub - - -// tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: -__algots__.defaultCreate: - retsub diff --git a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.arc32.json b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.arc32.json index ed1ee3793..ee2c8bf87 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.arc32.json +++ b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.arc32.json @@ -42,7 +42,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIgImJhc2UtdHdvIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTUKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MjkwZWJhOWYgLy8gbWV0aG9kICJtZXRob2RNdWx0aSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ODM5ZDk2ZmYgLy8gbWV0aG9kICJtZXRob2RDYWxsc1N1cGVyKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHhhOTc4Y2E1NiAvLyBtZXRob2QgImNhbGxCMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ODg1NDdlYjggLy8gbWV0aG9kICJjYWxsQjJDb21tb24oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGMzMjUzM2UzIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHg0NTVjOGQwOSAvLyBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZjlmNTE0MmMgLy8gbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4MzYzYjMyOWUgLy8gbWV0aG9kICJtZXRob2RUd28oKXN0cmluZyIKICAgIHVuY292ZXIgOAogICAgbWF0Y2ggbWFpbl9tZXRob2RNdWx0aV9yb3V0ZUA1IG1haW5fbWV0aG9kQ2FsbHNTdXBlcl9yb3V0ZUA2IG1haW5fY2FsbEIyQ2FudE92ZXJyaWRlX3JvdXRlQDcgbWFpbl9jYWxsQjJDb21tb25fcm91dGVAOCBtYWluX21ldGhvZE9uZV9yb3V0ZUA5IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDEwIG1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVAMTEgbWFpbl9tZXRob2RUd29fcm91dGVAMTIKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNDoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AyMDoKICAgIHJldHVybgoKbWFpbl9tZXRob2RUd29fcm91dGVAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNgogICAgLy8gbWV0aG9kVHdvKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RUd28KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OAogICAgLy8gbWV0aG9kQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RDb21tb24KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kT25lX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxOQogICAgLy8gbWV0aG9kT25lKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RPbmUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fY2FsbEIyQ29tbW9uX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1NQogICAgLy8gY2FsbEIyQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjYWxsQjJDb21tb24KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fY2FsbEIyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1MQogICAgLy8gY2FsbEIyQ2FudE92ZXJyaWRlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjYWxsQjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kQ2FsbHNTdXBlcl9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDcKICAgIC8vIG1ldGhvZENhbGxzU3VwZXIoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENhbGxzU3VwZXIKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kTXVsdGlfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQzCiAgICAvLyBtZXRob2RNdWx0aSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kTXVsdGkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fYmFyZV9yb3V0aW5nQDE1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTYKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxNzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxODoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE5CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxNjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AyMAoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLm1ldGhvZE11bHRpKCkgLT4gYnl0ZXM6Cm1ldGhvZE11bHRpOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDQKICAgIC8vIHJldHVybiAnbXVsdGktYmFzZXMnCiAgICBwdXNoYnl0ZXMgIm11bHRpLWJhc2VzIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMubWV0aG9kQ2FsbHNTdXBlcigpIC0+IGJ5dGVzOgptZXRob2RDYWxsc1N1cGVyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDgKICAgIC8vIHJldHVybiBzdXBlci5tZXRob2RUd28oKQogICAgY2FsbHN1YiBtZXRob2RUd28KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLmNhbGxCMkNhbnRPdmVycmlkZSgpIC0+IGJ5dGVzOgpjYWxsQjJDYW50T3ZlcnJpZGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1MgogICAgLy8gcmV0dXJuIHN1cGVyLmNsYXNzKEJhc2VUd28pLmIyQ2FudE92ZXJyaWRlKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uYjJDYW50T3ZlcnJpZGUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLmNhbGxCMkNvbW1vbigpIC0+IGJ5dGVzOgpjYWxsQjJDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1NgogICAgLy8gcmV0dXJuIHN1cGVyLmNsYXNzKEJhc2VUd28pLm1ldGhvZENvbW1vbigpCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgY2FsbHN1YiBwb2x5dHlwZS9saWIvcG9seXR5cGUtbW9kdWxlLmQudHM6OkNsdXN0ZXJlZENvbnRyYWN0PHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvPi5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDEKICAgIC8vIHN0YXRlTXVsdGkgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJ0htbW0nIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlTXVsdGkiCiAgICBwdXNoYnl0ZXMgIkhtbW0iCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gcG9seXR5cGUvbGliL3BvbHl0eXBlLW1vZHVsZS5kLnRzOjpDbHVzdGVyZWRDb250cmFjdDx0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZSx0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3bz4uY29uc3RydWN0b3IoKSAtPiB2b2lkOgpwb2x5dHlwZS9saWIvcG9seXR5cGUtbW9kdWxlLmQudHM6OkNsdXN0ZXJlZENvbnRyYWN0PHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvPi5jb25zdHJ1Y3RvcjoKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuY29uc3RydWN0b3IKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uY29uc3RydWN0b3IKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLm1ldGhvZE9uZSgpIC0+IGJ5dGVzOgptZXRob2RPbmU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyMAogICAgLy8gcmV0dXJuICdiYXNlLW9uZScKICAgIHB1c2hieXRlcyAiYmFzZS1vbmUiCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxOAogICAgLy8gc3RhdGVPbmUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDQ1KSB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZU9uZSIKICAgIHB1c2hpbnQgNDUgLy8gNDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5tZXRob2RDb21tb24oKSAtPiBieXRlczoKbWV0aG9kQ29tbW9uOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OQogICAgLy8gcmV0dXJuICdjb21tb24nCiAgICBieXRlY18xIC8vICJjb21tb24iCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5iMkNhbnRPdmVycmlkZSgpIC0+IGJ5dGVzOgpiMkNhbnRPdmVycmlkZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo2CiAgICAvLyBzdGF0ZUNvbW1vbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEyMyB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZUNvbW1vbiIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLm1ldGhvZFR3bygpIC0+IGJ5dGVzOgptZXRob2RUd286CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNwogICAgLy8gcmV0dXJuICdiYXNlLXR3bycKICAgIGJ5dGVjXzIgLy8gImJhc2UtdHdvIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uYjJDYW50T3ZlcnJpZGUoKSAtPiBieXRlczoKdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uYjJDYW50T3ZlcnJpZGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czozNgogICAgLy8gcmV0dXJuICdiYXNlLXR3bycKICAgIGJ5dGVjXzIgLy8gImJhc2UtdHdvIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5jb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjUKICAgIC8vIHN0YXRlVHdvID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICdIZWxsbycgfSkKICAgIHB1c2hieXRlcyAic3RhdGVUd28iCiAgICBwdXNoYnl0ZXMgIkhlbGxvIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIgImJhc2UtdHdvIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTUKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MjkwZWJhOWYgLy8gbWV0aG9kICJtZXRob2RNdWx0aSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ODM5ZDk2ZmYgLy8gbWV0aG9kICJtZXRob2RDYWxsc1N1cGVyKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHhhOTc4Y2E1NiAvLyBtZXRob2QgImNhbGxCMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ODg1NDdlYjggLy8gbWV0aG9kICJjYWxsQjJDb21tb24oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGMzMjUzM2UzIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHg0NTVjOGQwOSAvLyBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZjlmNTE0MmMgLy8gbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4MzYzYjMyOWUgLy8gbWV0aG9kICJtZXRob2RUd28oKXN0cmluZyIKICAgIHVuY292ZXIgOAogICAgbWF0Y2ggbWFpbl9tZXRob2RNdWx0aV9yb3V0ZUA1IG1haW5fbWV0aG9kQ2FsbHNTdXBlcl9yb3V0ZUA2IG1haW5fY2FsbEIyQ2FudE92ZXJyaWRlX3JvdXRlQDcgbWFpbl9jYWxsQjJDb21tb25fcm91dGVAOCBtYWluX21ldGhvZE9uZV9yb3V0ZUA5IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDEwIG1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVAMTEgbWFpbl9tZXRob2RUd29fcm91dGVAMTIKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNDoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AyMDoKICAgIHJldHVybgoKbWFpbl9tZXRob2RUd29fcm91dGVAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNgogICAgLy8gbWV0aG9kVHdvKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RUd28KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OAogICAgLy8gbWV0aG9kQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RDb21tb24KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kT25lX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxOQogICAgLy8gbWV0aG9kT25lKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RPbmUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fY2FsbEIyQ29tbW9uX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1NQogICAgLy8gY2FsbEIyQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjYWxsQjJDb21tb24KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fY2FsbEIyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1MQogICAgLy8gY2FsbEIyQ2FudE92ZXJyaWRlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjYWxsQjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kQ2FsbHNTdXBlcl9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDcKICAgIC8vIG1ldGhvZENhbGxzU3VwZXIoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENhbGxzU3VwZXIKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kTXVsdGlfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQzCiAgICAvLyBtZXRob2RNdWx0aSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kTXVsdGkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fYmFyZV9yb3V0aW5nQDE1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTYKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxNzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxODoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE5CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxNjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AyMAoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLm1ldGhvZE11bHRpKCkgLT4gYnl0ZXM6Cm1ldGhvZE11bHRpOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDQKICAgIC8vIHJldHVybiAnbXVsdGktYmFzZXMnCiAgICBwdXNoYnl0ZXMgIm11bHRpLWJhc2VzIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMubWV0aG9kQ2FsbHNTdXBlcigpIC0+IGJ5dGVzOgptZXRob2RDYWxsc1N1cGVyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDgKICAgIC8vIHJldHVybiBzdXBlci5tZXRob2RUd28oKQogICAgY2FsbHN1YiBtZXRob2RUd28KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLmNhbGxCMkNhbnRPdmVycmlkZSgpIC0+IGJ5dGVzOgpjYWxsQjJDYW50T3ZlcnJpZGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1MgogICAgLy8gcmV0dXJuIHN1cGVyLmNsYXNzKEJhc2VUd28pLmIyQ2FudE92ZXJyaWRlKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uYjJDYW50T3ZlcnJpZGUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLmNhbGxCMkNvbW1vbigpIC0+IGJ5dGVzOgpjYWxsQjJDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1NgogICAgLy8gcmV0dXJuIHN1cGVyLmNsYXNzKEJhc2VUd28pLm1ldGhvZENvbW1vbigpCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUubWV0aG9kT25lKCkgLT4gYnl0ZXM6Cm1ldGhvZE9uZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gJ2Jhc2Utb25lJwogICAgcHVzaGJ5dGVzICJiYXNlLW9uZSIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiAnY29tbW9uJwogICAgYnl0ZWNfMSAvLyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28ubWV0aG9kVHdvKCkgLT4gYnl0ZXM6Cm1ldGhvZFR3bzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gJ2Jhc2UtdHdvJwogICAgYnl0ZWNfMiAvLyAiYmFzZS10d28iCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5iMkNhbnRPdmVycmlkZSgpIC0+IGJ5dGVzOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5iMkNhbnRPdmVycmlkZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjM2CiAgICAvLyByZXR1cm4gJ2Jhc2UtdHdvJwogICAgYnl0ZWNfMiAvLyAiYmFzZS10d28iCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICBjYWxsc3ViIHBvbHl0eXBlL2xpYi9wb2x5dHlwZS1tb2R1bGUuZC50czo6Q2x1c3RlcmVkQ29udHJhY3Q8dGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUsdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28+LmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo0MQogICAgLy8gc3RhdGVNdWx0aSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnSG1tbScgfSkKICAgIHB1c2hieXRlcyAic3RhdGVNdWx0aSIKICAgIHB1c2hieXRlcyAiSG1tbSIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBwb2x5dHlwZS9saWIvcG9seXR5cGUtbW9kdWxlLmQudHM6OkNsdXN0ZXJlZENvbnRyYWN0PHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvPi5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CnBvbHl0eXBlL2xpYi9wb2x5dHlwZS1tb2R1bGUuZC50czo6Q2x1c3RlcmVkQ29udHJhY3Q8dGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUsdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28+LmNvbnN0cnVjdG9yOgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5jb25zdHJ1Y3RvcgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5jb25zdHJ1Y3RvcgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5jb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZU9uZSBleHRlbmRzIENvbW1vbkJhc2UgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTgKICAgIC8vIHN0YXRlT25lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg0NSkgfSkKICAgIHB1c2hieXRlcyAic3RhdGVPbmUiCiAgICBwdXNoaW50IDQ1IC8vIDQ1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcjoKCnRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NgogICAgLy8gc3RhdGVDb21tb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAxMjMgfSkKICAgIHB1c2hieXRlcyAic3RhdGVDb21tb24iCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlVHdvIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNQogICAgLy8gc3RhdGVUd28gPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJ0hlbGxvJyB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZVR3byIKICAgIHB1c2hieXRlcyAiSGVsbG8iCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.arc56.json b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.arc56.json index d0ef0631b..d0c778412 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.arc56.json +++ b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.arc56.json @@ -229,11 +229,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIgImJhc2UtdHdvIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTUKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MjkwZWJhOWYgLy8gbWV0aG9kICJtZXRob2RNdWx0aSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ODM5ZDk2ZmYgLy8gbWV0aG9kICJtZXRob2RDYWxsc1N1cGVyKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHhhOTc4Y2E1NiAvLyBtZXRob2QgImNhbGxCMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ODg1NDdlYjggLy8gbWV0aG9kICJjYWxsQjJDb21tb24oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGMzMjUzM2UzIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHg0NTVjOGQwOSAvLyBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZjlmNTE0MmMgLy8gbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4MzYzYjMyOWUgLy8gbWV0aG9kICJtZXRob2RUd28oKXN0cmluZyIKICAgIHVuY292ZXIgOAogICAgbWF0Y2ggbWFpbl9tZXRob2RNdWx0aV9yb3V0ZUA1IG1haW5fbWV0aG9kQ2FsbHNTdXBlcl9yb3V0ZUA2IG1haW5fY2FsbEIyQ2FudE92ZXJyaWRlX3JvdXRlQDcgbWFpbl9jYWxsQjJDb21tb25fcm91dGVAOCBtYWluX21ldGhvZE9uZV9yb3V0ZUA5IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDEwIG1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVAMTEgbWFpbl9tZXRob2RUd29fcm91dGVAMTIKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNDoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AyMDoKICAgIHJldHVybgoKbWFpbl9tZXRob2RUd29fcm91dGVAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNgogICAgLy8gbWV0aG9kVHdvKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RUd28KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OAogICAgLy8gbWV0aG9kQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RDb21tb24KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kT25lX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxOQogICAgLy8gbWV0aG9kT25lKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RPbmUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fY2FsbEIyQ29tbW9uX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1NQogICAgLy8gY2FsbEIyQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjYWxsQjJDb21tb24KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fY2FsbEIyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1MQogICAgLy8gY2FsbEIyQ2FudE92ZXJyaWRlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjYWxsQjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kQ2FsbHNTdXBlcl9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDcKICAgIC8vIG1ldGhvZENhbGxzU3VwZXIoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENhbGxzU3VwZXIKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kTXVsdGlfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQzCiAgICAvLyBtZXRob2RNdWx0aSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kTXVsdGkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fYmFyZV9yb3V0aW5nQDE1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTYKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxNzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxODoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE5CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxNjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AyMAoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLm1ldGhvZE11bHRpKCkgLT4gYnl0ZXM6Cm1ldGhvZE11bHRpOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDQKICAgIC8vIHJldHVybiAnbXVsdGktYmFzZXMnCiAgICBwdXNoYnl0ZXMgIm11bHRpLWJhc2VzIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMubWV0aG9kQ2FsbHNTdXBlcigpIC0+IGJ5dGVzOgptZXRob2RDYWxsc1N1cGVyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDgKICAgIC8vIHJldHVybiBzdXBlci5tZXRob2RUd28oKQogICAgY2FsbHN1YiBtZXRob2RUd28KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLmNhbGxCMkNhbnRPdmVycmlkZSgpIC0+IGJ5dGVzOgpjYWxsQjJDYW50T3ZlcnJpZGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1MgogICAgLy8gcmV0dXJuIHN1cGVyLmNsYXNzKEJhc2VUd28pLmIyQ2FudE92ZXJyaWRlKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uYjJDYW50T3ZlcnJpZGUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLmNhbGxCMkNvbW1vbigpIC0+IGJ5dGVzOgpjYWxsQjJDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1NgogICAgLy8gcmV0dXJuIHN1cGVyLmNsYXNzKEJhc2VUd28pLm1ldGhvZENvbW1vbigpCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgY2FsbHN1YiBwb2x5dHlwZS9saWIvcG9seXR5cGUtbW9kdWxlLmQudHM6OkNsdXN0ZXJlZENvbnRyYWN0PHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvPi5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDEKICAgIC8vIHN0YXRlTXVsdGkgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJ0htbW0nIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlTXVsdGkiCiAgICBwdXNoYnl0ZXMgIkhtbW0iCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gcG9seXR5cGUvbGliL3BvbHl0eXBlLW1vZHVsZS5kLnRzOjpDbHVzdGVyZWRDb250cmFjdDx0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZSx0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3bz4uY29uc3RydWN0b3IoKSAtPiB2b2lkOgpwb2x5dHlwZS9saWIvcG9seXR5cGUtbW9kdWxlLmQudHM6OkNsdXN0ZXJlZENvbnRyYWN0PHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvPi5jb25zdHJ1Y3RvcjoKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuY29uc3RydWN0b3IKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uY29uc3RydWN0b3IKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLm1ldGhvZE9uZSgpIC0+IGJ5dGVzOgptZXRob2RPbmU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyMAogICAgLy8gcmV0dXJuICdiYXNlLW9uZScKICAgIHB1c2hieXRlcyAiYmFzZS1vbmUiCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxOAogICAgLy8gc3RhdGVPbmUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDQ1KSB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZU9uZSIKICAgIHB1c2hpbnQgNDUgLy8gNDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5tZXRob2RDb21tb24oKSAtPiBieXRlczoKbWV0aG9kQ29tbW9uOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OQogICAgLy8gcmV0dXJuICdjb21tb24nCiAgICBieXRlY18xIC8vICJjb21tb24iCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5iMkNhbnRPdmVycmlkZSgpIC0+IGJ5dGVzOgpiMkNhbnRPdmVycmlkZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo2CiAgICAvLyBzdGF0ZUNvbW1vbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEyMyB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZUNvbW1vbiIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLm1ldGhvZFR3bygpIC0+IGJ5dGVzOgptZXRob2RUd286CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNwogICAgLy8gcmV0dXJuICdiYXNlLXR3bycKICAgIGJ5dGVjXzIgLy8gImJhc2UtdHdvIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uYjJDYW50T3ZlcnJpZGUoKSAtPiBieXRlczoKdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uYjJDYW50T3ZlcnJpZGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czozNgogICAgLy8gcmV0dXJuICdiYXNlLXR3bycKICAgIGJ5dGVjXzIgLy8gImJhc2UtdHdvIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5jb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjUKICAgIC8vIHN0YXRlVHdvID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICdIZWxsbycgfSkKICAgIHB1c2hieXRlcyAic3RhdGVUd28iCiAgICBwdXNoYnl0ZXMgIkhlbGxvIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImNvbW1vbiIgImJhc2UtdHdvIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTUKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MjkwZWJhOWYgLy8gbWV0aG9kICJtZXRob2RNdWx0aSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ODM5ZDk2ZmYgLy8gbWV0aG9kICJtZXRob2RDYWxsc1N1cGVyKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHhhOTc4Y2E1NiAvLyBtZXRob2QgImNhbGxCMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ODg1NDdlYjggLy8gbWV0aG9kICJjYWxsQjJDb21tb24oKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGMzMjUzM2UzIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHg0NTVjOGQwOSAvLyBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZjlmNTE0MmMgLy8gbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4MzYzYjMyOWUgLy8gbWV0aG9kICJtZXRob2RUd28oKXN0cmluZyIKICAgIHVuY292ZXIgOAogICAgbWF0Y2ggbWFpbl9tZXRob2RNdWx0aV9yb3V0ZUA1IG1haW5fbWV0aG9kQ2FsbHNTdXBlcl9yb3V0ZUA2IG1haW5fY2FsbEIyQ2FudE92ZXJyaWRlX3JvdXRlQDcgbWFpbl9jYWxsQjJDb21tb25fcm91dGVAOCBtYWluX21ldGhvZE9uZV9yb3V0ZUA5IG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDEwIG1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVAMTEgbWFpbl9tZXRob2RUd29fcm91dGVAMTIKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNDoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AyMDoKICAgIHJldHVybgoKbWFpbl9tZXRob2RUd29fcm91dGVAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNgogICAgLy8gbWV0aG9kVHdvKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RUd28KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OAogICAgLy8gbWV0aG9kQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RDb21tb24KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kT25lX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoxOQogICAgLy8gbWV0aG9kT25lKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtZXRob2RPbmUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fY2FsbEIyQ29tbW9uX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1NQogICAgLy8gY2FsbEIyQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjYWxsQjJDb21tb24KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fY2FsbEIyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1MQogICAgLy8gY2FsbEIyQ2FudE92ZXJyaWRlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjYWxsQjJDYW50T3ZlcnJpZGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kQ2FsbHNTdXBlcl9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDcKICAgIC8vIG1ldGhvZENhbGxzU3VwZXIoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG1ldGhvZENhbGxzU3VwZXIKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fbWV0aG9kTXVsdGlfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQzCiAgICAvLyBtZXRob2RNdWx0aSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWV0aG9kTXVsdGkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMuX19wdXlhX2FyYzRfcm91dGVyX19AMjAKCm1haW5fYmFyZV9yb3V0aW5nQDE1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTYKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxNzoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxODoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE5CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxNjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjQwCiAgICAvLyBleHBvcnQgY2xhc3MgTXVsdGlCYXNlcyBleHRlbmRzIGNsYXNzZXMoQmFzZU9uZSwgQmFzZVR3bykgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AyMAoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLm1ldGhvZE11bHRpKCkgLT4gYnl0ZXM6Cm1ldGhvZE11bHRpOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDQKICAgIC8vIHJldHVybiAnbXVsdGktYmFzZXMnCiAgICBwdXNoYnl0ZXMgIm11bHRpLWJhc2VzIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6Ok11bHRpQmFzZXMubWV0aG9kQ2FsbHNTdXBlcigpIC0+IGJ5dGVzOgptZXRob2RDYWxsc1N1cGVyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDgKICAgIC8vIHJldHVybiBzdXBlci5tZXRob2RUd28oKQogICAgY2FsbHN1YiBtZXRob2RUd28KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLmNhbGxCMkNhbnRPdmVycmlkZSgpIC0+IGJ5dGVzOgpjYWxsQjJDYW50T3ZlcnJpZGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1MgogICAgLy8gcmV0dXJuIHN1cGVyLmNsYXNzKEJhc2VUd28pLmIyQ2FudE92ZXJyaWRlKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28uYjJDYW50T3ZlcnJpZGUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpNdWx0aUJhc2VzLmNhbGxCMkNvbW1vbigpIC0+IGJ5dGVzOgpjYWxsQjJDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo1NgogICAgLy8gcmV0dXJuIHN1cGVyLmNsYXNzKEJhc2VUd28pLm1ldGhvZENvbW1vbigpCiAgICBjYWxsc3ViIG1ldGhvZENvbW1vbgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUubWV0aG9kT25lKCkgLT4gYnl0ZXM6Cm1ldGhvZE9uZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gJ2Jhc2Utb25lJwogICAgcHVzaGJ5dGVzICJiYXNlLW9uZSIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLm1ldGhvZENvbW1vbigpIC0+IGJ5dGVzOgptZXRob2RDb21tb246CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo5CiAgICAvLyByZXR1cm4gJ2NvbW1vbicKICAgIGJ5dGVjXzEgLy8gImNvbW1vbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmIyQ2FudE92ZXJyaWRlKCkgLT4gYnl0ZXM6CmIyQ2FudE92ZXJyaWRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiAnY29tbW9uJwogICAgYnl0ZWNfMSAvLyAiY29tbW9uIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28ubWV0aG9kVHdvKCkgLT4gYnl0ZXM6Cm1ldGhvZFR3bzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gJ2Jhc2UtdHdvJwogICAgYnl0ZWNfMiAvLyAiYmFzZS10d28iCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5iMkNhbnRPdmVycmlkZSgpIC0+IGJ5dGVzOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5iMkNhbnRPdmVycmlkZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjM2CiAgICAvLyByZXR1cm4gJ2Jhc2UtdHdvJwogICAgYnl0ZWNfMiAvLyAiYmFzZS10d28iCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6TXVsdGlCYXNlcy5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICBjYWxsc3ViIHBvbHl0eXBlL2xpYi9wb2x5dHlwZS1tb2R1bGUuZC50czo6Q2x1c3RlcmVkQ29udHJhY3Q8dGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUsdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28+LmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo0MQogICAgLy8gc3RhdGVNdWx0aSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnSG1tbScgfSkKICAgIHB1c2hieXRlcyAic3RhdGVNdWx0aSIKICAgIHB1c2hieXRlcyAiSG1tbSIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBwb2x5dHlwZS9saWIvcG9seXR5cGUtbW9kdWxlLmQudHM6OkNsdXN0ZXJlZENvbnRyYWN0PHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlT25lLHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvPi5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CnBvbHl0eXBlL2xpYi9wb2x5dHlwZS1tb2R1bGUuZC50czo6Q2x1c3RlcmVkQ29udHJhY3Q8dGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUsdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VUd28+LmNvbnN0cnVjdG9yOgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5jb25zdHJ1Y3RvcgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5jb25zdHJ1Y3RvcgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkJhc2VPbmUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZU9uZS5jb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZU9uZSBleHRlbmRzIENvbW1vbkJhc2UgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MTgKICAgIC8vIHN0YXRlT25lID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg0NSkgfSkKICAgIHB1c2hieXRlcyAic3RhdGVPbmUiCiAgICBwdXNoaW50IDQ1IC8vIDQ1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6OkNvbW1vbkJhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3RvcjoKCnRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgp0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6Q29tbW9uQmFzZS5jb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6NgogICAgLy8gc3RhdGVDb21tb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAxMjMgfSkKICAgIHB1c2hieXRlcyAic3RhdGVDb21tb24iCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czo6QmFzZVR3by5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpCYXNlVHdvLmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL211bHRpLWluaGVyaXRhbmNlLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlVHdvIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9tdWx0aS1pbmhlcml0YW5jZS5hbGdvLnRzOjpDb21tb25CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbXVsdGktaW5oZXJpdGFuY2UuYWxnby50czoyNQogICAgLy8gc3RhdGVUd28gPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJ0hlbGxvJyB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZVR3byIKICAgIHB1c2hieXRlcyAiSGVsbG8iCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmAwQVH3x1BmNvbW1vbghiYXNlLXR3bzEYQAADiAFpMRsiE0EBMTYaAIAEKQ66n4AEg52W/4AEqXjKVoAEiFR+uIAEwyUz44AERVyNCYAE+fUULIAENjsynk8IjggAzQCwAJMAdgBZADwAHwACIkMxGSISRDEYIhNEiAFbSRUWVwYCTFAoTFCwI0L/4jEZIhJEMRgiE0SIAStJFRZXBgJMUChMULAjQv/FMRkiEkQxGCITRIgBDEkVFlcGAkxQKExQsCNC/6gxGSISRDEYIhNEiADTSRUWVwYCTFAoTFCwI0L/izEZIhJEMRgiE0SIAJRJFRZXBgJMUChMULAjQv9uMRkiEkQxGCITRIgAc0kVFlcGAkxQKExQsCNC/1ExGSISRDEYIhNEiABSSRUWVwYCTFAoTFCwI0L/NDEZIhJEMRgiE0SIACdJFRZXBgJMUChMULAjQv8XMRkiTI4BAANC/wsxGCISRIgAhyNC/wCAC211bHRpLWJhc2VziYgAWImIAFaJiAA7iYgAFIAKc3RhdGVNdWx0aYAESG1tbWeJiAAPiAA2iYAIYmFzZS1vbmWJiAASgAhzdGF0ZU9uZYEtZ4kpiSmJgAtzdGF0ZUNvbW1vboF7Z4kqiSqJiP/ogAhzdGF0ZVR3b4AFSGVsbG9niYk=", + "approval": "CiACAAEmAwQVH3x1BmNvbW1vbghiYXNlLXR3bzEYQAADiAF9MRsiE0EBMTYaAIAEKQ66n4AEg52W/4AEqXjKVoAEiFR+uIAEwyUz44AERVyNCYAE+fUULIAENjsynk8IjggAzQCwAJMAdgBZADwAHwACIkMxGSISRDEYIhNEiAEbSRUWVwYCTFAoTFCwI0L/4jEZIhJEMRgiE0SIAPxJFRZXBgJMUChMULAjQv/FMRkiEkQxGCITRIgA3UkVFlcGAkxQKExQsCNC/6gxGSISRDEYIhNEiAC1SRUWVwYCTFAoTFCwI0L/izEZIhJEMRgiE0SIAJRJFRZXBgJMUChMULAjQv9uMRkiEkQxGCITRIgAc0kVFlcGAkxQKExQsCNC/1ExGSISRDEYIhNEiABSSRUWVwYCTFAoTFCwI0L/NDEZIhJEMRgiE0SIACdJFRZXBgJMUChMULAjQv8XMRkiTI4BAANC/wsxGCISRIgAMSNC/wCAC211bHRpLWJhc2VziYgAGImIABaJiAAMiYAIYmFzZS1vbmWJKYkpiSqJKomJiAAUgApzdGF0ZU11bHRpgARIbW1tZ4mIAASIACOJiAAOgAhzdGF0ZU9uZYEtZ4mAC3N0YXRlQ29tbW9ugXtniYj/7IAIc3RhdGVUd2+ABUhlbGxvZ4k=", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir index 68539cb46..5bb6d99be 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.0.ssa.ir @@ -176,6 +176,30 @@ subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.callB2Common() let tmp%0#0: bytes = tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() return tmp%0#0 +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.methodOne() -> bytes: + block@0: // L19 + return "base-one" + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: + block@0: // L8 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: + block@0: // L12 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: + block@0: // L26 + return "base-two" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: + block@0: // L35 + return "base-two" + +subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: + block@0: // L40 + return + subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.constructor() -> void: block@0: // L40 polytype/lib/polytype-module.d.ts::ClusteredContract.constructor() @@ -188,43 +212,24 @@ subroutine polytype/lib/polytype-module.d.ts::ClusteredContract bytes: - block@0: // L19 - return "base-one" - subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: block@0: // L17 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateOne" 45u) return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: - block@0: // L8 - return "common" - -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: - block@0: // L12 - return "common" - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: - block@0: // L26 - return "base-two" - -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: - block@0: // L35 - return "base-two" +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 + return subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: block@0: // L24 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateTwo" "Hello") - return - -subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: - block@0: // L40 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.1.ssa.array.ir index 06c941e45..c54aa78d1 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.1.ssa.array.ir @@ -186,6 +186,30 @@ subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.callB2Common() let tmp%0#0: bytes = tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() return tmp%0#0 +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.methodOne() -> bytes: + block@0: // L19 + return "base-one" + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: + block@0: // L8 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: + block@0: // L12 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: + block@0: // L26 + return "base-two" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: + block@0: // L35 + return "base-two" + +subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: + block@0: // L40 + return + subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.constructor() -> void: block@0: // L40 polytype/lib/polytype-module.d.ts::ClusteredContract.constructor() @@ -198,43 +222,23 @@ subroutine polytype/lib/polytype-module.d.ts::ClusteredContract bytes: - block@0: // L19 - return "base-one" - subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: block@0: // L17 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateOne" 45u) return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: - block@0: // L8 - return "common" - -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: - block@0: // L12 - return "common" - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L5 (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: - block@0: // L26 - return "base-two" - -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: - block@0: // L35 - return "base-two" - subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: block@0: // L24 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateTwo" "Hello") - return - -subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: - block@0: // L40 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.2.ssa.slot.ir index 06c941e45..c54aa78d1 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/multi-inheritance/MultiBases.ir/MultiBases.approval.2.ssa.slot.ir @@ -186,6 +186,30 @@ subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.callB2Common() let tmp%0#0: bytes = tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() return tmp%0#0 +subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.methodOne() -> bytes: + block@0: // L19 + return "base-one" + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: + block@0: // L8 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: + block@0: // L12 + return "common" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: + block@0: // L26 + return "base-two" + +subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: + block@0: // L35 + return "base-two" + +subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: + block@0: // L40 + return + subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.constructor() -> void: block@0: // L40 polytype/lib/polytype-module.d.ts::ClusteredContract.constructor() @@ -198,43 +222,23 @@ subroutine polytype/lib/polytype-module.d.ts::ClusteredContract bytes: - block@0: // L19 - return "base-one" - subroutine tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() -> void: block@0: // L17 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateOne" 45u) return -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.methodCommon() -> bytes: - block@0: // L8 - return "common" - -subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.b2CantOverride() -> bytes: - block@0: // L12 - return "common" - subroutine tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() -> void: block@0: // L5 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L5 (app_global_put "stateCommon" 123u) return -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodTwo() -> bytes: - block@0: // L26 - return "base-two" - -subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.b2CantOverride() -> bytes: - block@0: // L35 - return "base-two" - subroutine tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() -> void: block@0: // L24 tests/approvals/multi-inheritance.algo.ts::CommonBase.constructor() (app_global_put "stateTwo" "Hello") - return - -subroutine tests/approvals/multi-inheritance.algo.ts::MultiBases.__algots__.defaultCreate() -> void: - block@0: // L40 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/multi-inheritance.awst b/tests/approvals/out/unoptimized/multi-inheritance/multi-inheritance.awst index 37d73f556..fc2093669 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/multi-inheritance.awst +++ b/tests/approvals/out/unoptimized/multi-inheritance/multi-inheritance.awst @@ -26,13 +26,17 @@ contract CommonBase return "common" } + __algots__.defaultCreate(): void + { + } + constructor(): void { - void + super.constructor() GlobalState["stateCommon"]: uint64 = 123 } - __algots__.defaultCreate(): void + BaseContract::constructor(): void { } @@ -61,12 +65,6 @@ contract BaseOne return "base-one" } - constructor(): void - { - super.constructor() - GlobalState["stateOne"]: uint64 = 45 - } - CommonBase::methodCommon(): string { return "common" @@ -77,13 +75,23 @@ contract BaseOne return "common" } + __algots__.defaultCreate(): void + { + } + + constructor(): void + { + super.constructor() + GlobalState["stateOne"]: uint64 = 45 + } + CommonBase::constructor(): void { - void + super.constructor() GlobalState["stateCommon"]: uint64 = 123 } - __algots__.defaultCreate(): void + BaseContract::constructor(): void { } @@ -117,12 +125,6 @@ contract BaseTwo return "base-two" } - constructor(): void - { - super.constructor() - GlobalState["stateTwo"]: string = "Hello" - } - CommonBase::methodCommon(): string { return "common" @@ -133,13 +135,23 @@ contract BaseTwo return "common" } + __algots__.defaultCreate(): void + { + } + + constructor(): void + { + super.constructor() + GlobalState["stateTwo"]: string = "Hello" + } + CommonBase::constructor(): void { - void + super.constructor() GlobalState["stateCommon"]: uint64 = 123 } - __algots__.defaultCreate(): void + BaseContract::constructor(): void { } @@ -185,63 +197,67 @@ contract MultiBases return tests/approvals/multi-inheritance.algo.ts::BaseTwo.methodCommon() } - constructor(): void + BaseOne::methodOne(): string { - super.constructor() - GlobalState["stateMulti"]: string = "Hmmm" + return "base-one" } - ClusteredContract::constructor(): void + CommonBase::methodCommon(): string { - tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() - tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() + return "common" } - BaseOne::methodOne(): string + CommonBase::b2CantOverride(): string { - return "base-one" + return "common" } - BaseOne::constructor(): void + BaseTwo::methodTwo(): string { - super.constructor() - GlobalState["stateOne"]: uint64 = 45 + return "base-two" } - CommonBase::methodCommon(): string + BaseTwo::b2CantOverride(): string { - return "common" + return "base-two" } - CommonBase::b2CantOverride(): string + __algots__.defaultCreate(): void { - return "common" } - CommonBase::constructor(): void + constructor(): void { - void - GlobalState["stateCommon"]: uint64 = 123 + super.constructor() + GlobalState["stateMulti"]: string = "Hmmm" } - BaseTwo::methodTwo(): string + ClusteredContract::constructor(): void { - return "base-two" + tests/approvals/multi-inheritance.algo.ts::BaseOne.constructor() + tests/approvals/multi-inheritance.algo.ts::BaseTwo.constructor() } - BaseTwo::b2CantOverride(): string + BaseOne::constructor(): void { - return "base-two" + super.constructor() + GlobalState["stateOne"]: uint64 = 45 } - BaseTwo::constructor(): void + CommonBase::constructor(): void { super.constructor() - GlobalState["stateTwo"]: string = "Hello" + GlobalState["stateCommon"]: uint64 = 123 } - __algots__.defaultCreate(): void + BaseContract::constructor(): void { } + BaseTwo::constructor(): void + { + super.constructor() + GlobalState["stateTwo"]: string = "Hello" + } + } \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/multi-inheritance/multi-inheritance.awst.json b/tests/approvals/out/unoptimized/multi-inheritance/multi-inheritance.awst.json index 4ed4dd2ba..118f13161 100644 --- a/tests/approvals/out/unoptimized/multi-inheritance/multi-inheritance.awst.json +++ b/tests/approvals/out/unoptimized/multi-inheritance/multi-inheritance.awst.json @@ -470,6 +470,60 @@ "default_args": {} } }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 5, + "end_line": 5, + "column": 0, + "end_column": 42 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 5, + "end_line": 5, + "column": 0, + "end_column": 42 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": "Implicitly generated create method", + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/multi-inheritance.algo.ts::CommonBase", + "member_name": "__algots__.defaultCreate", + "arc4_method_config": { + "_type": "ARC4BareMethodConfig", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 5, + "end_line": 5, + "column": 0, + "end_column": 42 + }, + "allowed_completion_types": [ + 0 + ], + "create": 2 + } + }, { "_type": "ContractMethod", "source_location": { @@ -507,7 +561,7 @@ "end_column": 42 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", "line": 5, @@ -521,7 +575,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -608,11 +667,12 @@ { "_type": "ContractMethod", "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 5, - "end_line": 5, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 42 + "end_column": 1 }, "args": [], "return_type": { @@ -625,11 +685,12 @@ "body": { "_type": "Block", "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 5, - "end_line": 5, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 42 + "end_column": 1 }, "body": [], "label": null, @@ -637,27 +698,14 @@ }, "documentation": { "_type": "MethodDocumentation", - "description": "Implicitly generated create method", + "description": null, "args": {}, "returns": null }, - "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::CommonBase", - "member_name": "__algots__.defaultCreate", - "arc4_method_config": { - "_type": "ARC4BareMethodConfig", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 5, - "end_line": 5, - "column": 0, - "end_column": 42 - }, - "allowed_completion_types": [ - 0 - ], - "create": 2 - } + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ @@ -1098,146 +1146,6 @@ "default_args": {} } }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 41 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 41 - }, - "body": [ - { - "_type": "ExpressionStatement", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 41 - }, - "expr": { - "_type": "SubroutineCallExpression", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 41 - }, - "wtype": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "target": { - "_type": "InstanceSuperMethodTarget", - "member_name": "constructor" - }, - "args": [] - } - }, - { - "_type": "AssignmentStatement", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 54 - }, - "target": { - "_type": "AppStateExpression", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 10 - }, - "wtype": { - "_type": "WType", - "name": "uint64", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "key": { - "_type": "BytesConstant", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 10 - }, - "wtype": { - "_type": "WType", - "name": "state_key", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "b97;JWlwHp", - "encoding": "utf8" - }, - "exists_assertion_message": null - }, - "value": { - "_type": "IntegerConstant", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 18, - "end_line": 18, - "column": 48, - "end_column": 50 - }, - "wtype": { - "_type": "WType", - "name": "uint64", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "value": "45", - "teal_alias": null - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": null, - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::BaseOne", - "member_name": "constructor", - "arc4_method_config": null - }, { "_type": "ContractMethod", "source_location": { @@ -1414,10 +1322,10 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 5, - "end_line": 5, + "line": 17, + "end_line": 17, "column": 0, - "end_column": 42 + "end_column": 41 }, "args": [], "return_type": { @@ -1431,14 +1339,208 @@ "_type": "Block", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 5, - "end_line": 5, + "line": 17, + "end_line": 17, "column": 0, - "end_column": 42 + "end_column": 41 }, - "body": [ - { - "_type": "ExpressionStatement", + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": "Implicitly generated create method", + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/multi-inheritance.algo.ts::BaseOne", + "member_name": "__algots__.defaultCreate", + "arc4_method_config": { + "_type": "ARC4BareMethodConfig", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 41 + }, + "allowed_completion_types": [ + 0 + ], + "create": 2 + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 41 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 41 + }, + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 41 + }, + "expr": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 41 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] + } + }, + { + "_type": "AssignmentStatement", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 18, + "end_line": 18, + "column": 2, + "end_column": 54 + }, + "target": { + "_type": "AppStateExpression", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 18, + "end_line": 18, + "column": 2, + "end_column": 10 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "key": { + "_type": "BytesConstant", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 18, + "end_line": 18, + "column": 2, + "end_column": 10 + }, + "wtype": { + "_type": "WType", + "name": "state_key", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "b97;JWlwHp", + "encoding": "utf8" + }, + "exists_assertion_message": null + }, + "value": { + "_type": "IntegerConstant", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 18, + "end_line": 18, + "column": 48, + "end_column": 50 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "value": "45", + "teal_alias": null + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/multi-inheritance.algo.ts::BaseOne", + "member_name": "constructor", + "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 5, + "end_line": 5, + "column": 0, + "end_column": 42 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 5, + "end_line": 5, + "column": 0, + "end_column": 42 + }, + "body": [ + { + "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", "line": 5, @@ -1447,7 +1549,7 @@ "end_column": 42 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", "line": 5, @@ -1461,7 +1563,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -1548,11 +1655,12 @@ { "_type": "ContractMethod", "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 17, - "end_line": 17, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 41 + "end_column": 1 }, "args": [], "return_type": { @@ -1565,11 +1673,12 @@ "body": { "_type": "Block", "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 17, - "end_line": 17, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 41 + "end_column": 1 }, "body": [], "label": null, @@ -1577,27 +1686,14 @@ }, "documentation": { "_type": "MethodDocumentation", - "description": "Implicitly generated create method", + "description": null, "args": {}, "returns": null }, - "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::BaseOne", - "member_name": "__algots__.defaultCreate", - "arc4_method_config": { - "_type": "ARC4BareMethodConfig", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 41 - }, - "allowed_completion_types": [ - 0 - ], - "create": 2 - } + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ @@ -2168,157 +2264,18 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 24, - "end_line": 24, - "column": 0, - "end_column": 41 + "line": 8, + "end_line": 8, + "column": 2, + "end_column": 16 }, "args": [], "return_type": { "_type": "WType", - "name": "void", + "name": "string", "immutable": true, "ephemeral": false, - "scalar_type": null - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 24, - "end_line": 24, - "column": 0, - "end_column": 41 - }, - "body": [ - { - "_type": "ExpressionStatement", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 24, - "end_line": 24, - "column": 0, - "end_column": 41 - }, - "expr": { - "_type": "SubroutineCallExpression", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 24, - "end_line": 24, - "column": 0, - "end_column": 41 - }, - "wtype": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "target": { - "_type": "InstanceSuperMethodTarget", - "member_name": "constructor" - }, - "args": [] - } - }, - { - "_type": "AssignmentStatement", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 25, - "end_line": 25, - "column": 2, - "end_column": 51 - }, - "target": { - "_type": "AppStateExpression", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 25, - "end_line": 25, - "column": 2, - "end_column": 10 - }, - "wtype": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "key": { - "_type": "BytesConstant", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 25, - "end_line": 25, - "column": 2, - "end_column": 10 - }, - "wtype": { - "_type": "WType", - "name": "state_key", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "b97;JWmI=>", - "encoding": "utf8" - }, - "exists_assertion_message": null - }, - "value": { - "_type": "StringConstant", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 25, - "end_line": 25, - "column": 41, - "end_column": 48 - }, - "wtype": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "Hello" - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": null, - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", - "member_name": "constructor", - "arc4_method_config": null - }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 8, - "end_line": 8, - "column": 2, - "end_column": 16 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 + "scalar_type": 1 }, "body": { "_type": "Block", @@ -2479,10 +2436,10 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 5, - "end_line": 5, + "line": 24, + "end_line": 24, "column": 0, - "end_column": 42 + "end_column": 41 }, "args": [], "return_type": { @@ -2496,29 +2453,83 @@ "_type": "Block", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 5, - "end_line": 5, + "line": 24, + "end_line": 24, "column": 0, - "end_column": 42 + "end_column": 41 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": "Implicitly generated create method", + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", + "member_name": "__algots__.defaultCreate", + "arc4_method_config": { + "_type": "ARC4BareMethodConfig", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 24, + "end_line": 24, + "column": 0, + "end_column": 41 + }, + "allowed_completion_types": [ + 0 + ], + "create": 2 + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 24, + "end_line": 24, + "column": 0, + "end_column": 41 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 24, + "end_line": 24, + "column": 0, + "end_column": 41 }, "body": [ { "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 5, - "end_line": 5, + "line": 24, + "end_line": 24, "column": 0, - "end_column": 42 + "end_column": 41 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 5, - "end_line": 5, + "line": 24, + "end_line": 24, "column": 0, - "end_column": 42 + "end_column": 41 }, "wtype": { "_type": "WType", @@ -2526,42 +2537,47 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { "_type": "AssignmentStatement", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 6, - "end_line": 6, + "line": 25, + "end_line": 25, "column": 2, - "end_column": 58 + "end_column": 51 }, "target": { "_type": "AppStateExpression", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 6, - "end_line": 6, + "line": 25, + "end_line": 25, "column": 2, - "end_column": 13 + "end_column": 10 }, "wtype": { "_type": "WType", - "name": "uint64", + "name": "string", "immutable": true, "ephemeral": false, - "scalar_type": 2 + "scalar_type": 1 }, "key": { "_type": "BytesConstant", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 6, - "end_line": 6, + "line": 25, + "end_line": 25, "column": 2, - "end_column": 13 + "end_column": 10 }, "wtype": { "_type": "WType", @@ -2570,29 +2586,28 @@ "ephemeral": false, "scalar_type": 1 }, - "value": "b97;JWkYXmZEtP", + "value": "b97;JWmI=>", "encoding": "utf8" }, "exists_assertion_message": null }, "value": { - "_type": "IntegerConstant", + "_type": "StringConstant", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 6, - "end_line": 6, - "column": 52, - "end_column": 55 - }, + "line": 25, + "end_line": 25, + "column": 41, + "end_column": 48 + }, "wtype": { "_type": "WType", - "name": "uint64", + "name": "string", "immutable": true, "ephemeral": false, - "scalar_type": 2 + "scalar_type": 1 }, - "value": "123", - "teal_alias": null + "value": "Hello" } } ], @@ -2606,7 +2621,7 @@ "returns": null }, "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::CommonBase", + "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", "member_name": "constructor", "arc4_method_config": null }, @@ -2614,10 +2629,10 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 24, - "end_line": 24, + "line": 5, + "end_line": 5, "column": 0, - "end_column": 41 + "end_column": 42 }, "args": [], "return_type": { @@ -2631,38 +2646,167 @@ "_type": "Block", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 24, - "end_line": 24, + "line": 5, + "end_line": 5, "column": 0, - "end_column": 41 + "end_column": 42 }, - "body": [], + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 5, + "end_line": 5, + "column": 0, + "end_column": 42 + }, + "expr": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 5, + "end_line": 5, + "column": 0, + "end_column": 42 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] + } + }, + { + "_type": "AssignmentStatement", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 6, + "end_line": 6, + "column": 2, + "end_column": 58 + }, + "target": { + "_type": "AppStateExpression", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 6, + "end_line": 6, + "column": 2, + "end_column": 13 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "key": { + "_type": "BytesConstant", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 6, + "end_line": 6, + "column": 2, + "end_column": 13 + }, + "wtype": { + "_type": "WType", + "name": "state_key", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "b97;JWkYXmZEtP", + "encoding": "utf8" + }, + "exists_assertion_message": null + }, + "value": { + "_type": "IntegerConstant", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 6, + "end_line": 6, + "column": 52, + "end_column": 55 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "value": "123", + "teal_alias": null + } + } + ], "label": null, "comment": null }, "documentation": { "_type": "MethodDocumentation", - "description": "Implicitly generated create method", + "description": null, "args": {}, "returns": null }, "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", - "member_name": "__algots__.defaultCreate", - "arc4_method_config": { - "_type": "ARC4BareMethodConfig", + "cref": "tests/approvals/multi-inheritance.algo.ts::CommonBase", + "member_name": "constructor", + "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 24, - "end_line": 24, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 41 + "end_column": 1 }, - "allowed_completion_types": [ - 0 - ], - "create": 2 - } + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ @@ -3057,20 +3201,464 @@ "args": {}, "returns": null }, - "inline": null, - "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", - "member_name": "clearStateProgram", - "arc4_method_config": null - }, - "methods": [ + "inline": null, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "clearStateProgram", + "arc4_method_config": null + }, + "methods": [ + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 43, + "end_line": 43, + "column": 2, + "end_column": 15 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 43, + "end_line": 45, + "column": 16, + "end_column": 3 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 44, + "end_line": 44, + "column": 4, + "end_column": 24 + }, + "value": { + "_type": "StringConstant", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 44, + "end_line": 44, + "column": 11, + "end_column": 24 + }, + "wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "multi-bases" + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/multi-inheritance.algo.ts::MultiBases", + "member_name": "methodMulti", + "arc4_method_config": { + "_type": "ARC4ABIMethodConfig", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 43, + "end_line": 43, + "column": 2, + "end_column": 15 + }, + "allowed_completion_types": [ + 0 + ], + "create": 3, + "name": "methodMulti", + "readonly": false, + "default_args": {} + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 47, + "end_line": 47, + "column": 2, + "end_column": 20 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 47, + "end_line": 49, + "column": 21, + "end_column": 3 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 48, + "end_line": 48, + "column": 4, + "end_column": 28 + }, + "value": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 48, + "end_line": 48, + "column": 11, + "end_column": 28 + }, + "wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "methodTwo" + }, + "args": [] + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/multi-inheritance.algo.ts::MultiBases", + "member_name": "methodCallsSuper", + "arc4_method_config": { + "_type": "ARC4ABIMethodConfig", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 47, + "end_line": 47, + "column": 2, + "end_column": 20 + }, + "allowed_completion_types": [ + 0 + ], + "create": 3, + "name": "methodCallsSuper", + "readonly": false, + "default_args": {} + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 51, + "end_line": 51, + "column": 2, + "end_column": 22 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 51, + "end_line": 53, + "column": 23, + "end_column": 3 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 52, + "end_line": 52, + "column": 4, + "end_column": 48 + }, + "value": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 52, + "end_line": 52, + "column": 11, + "end_column": 48 + }, + "wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "target": { + "_type": "ContractMethodTarget", + "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", + "member_name": "b2CantOverride" + }, + "args": [] + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/multi-inheritance.algo.ts::MultiBases", + "member_name": "callB2CantOverride", + "arc4_method_config": { + "_type": "ARC4ABIMethodConfig", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 51, + "end_line": 51, + "column": 2, + "end_column": 22 + }, + "allowed_completion_types": [ + 0 + ], + "create": 3, + "name": "callB2CantOverride", + "readonly": false, + "default_args": {} + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 55, + "end_line": 55, + "column": 2, + "end_column": 16 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 55, + "end_line": 57, + "column": 17, + "end_column": 3 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 56, + "end_line": 56, + "column": 4, + "end_column": 46 + }, + "value": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 56, + "end_line": 56, + "column": 11, + "end_column": 46 + }, + "wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "target": { + "_type": "ContractMethodTarget", + "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", + "member_name": "methodCommon" + }, + "args": [] + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/multi-inheritance.algo.ts::MultiBases", + "member_name": "callB2Common", + "arc4_method_config": { + "_type": "ARC4ABIMethodConfig", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 55, + "end_line": 55, + "column": 2, + "end_column": 16 + }, + "allowed_completion_types": [ + 0 + ], + "create": 3, + "name": "callB2Common", + "readonly": false, + "default_args": {} + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 19, + "end_line": 19, + "column": 2, + "end_column": 13 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 19, + "end_line": 21, + "column": 14, + "end_column": 3 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 20, + "end_line": 20, + "column": 4, + "end_column": 21 + }, + "value": { + "_type": "StringConstant", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 20, + "end_line": 20, + "column": 11, + "end_column": 21 + }, + "wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "base-one" + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/multi-inheritance.algo.ts::BaseOne", + "member_name": "methodOne", + "arc4_method_config": { + "_type": "ARC4ABIMethodConfig", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 19, + "end_line": 19, + "column": 2, + "end_column": 13 + }, + "allowed_completion_types": [ + 0 + ], + "create": 3, + "name": "methodOne", + "readonly": false, + "default_args": {} + } + }, { "_type": "ContractMethod", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 43, - "end_line": 43, + "line": 8, + "end_line": 8, "column": 2, - "end_column": 15 + "end_column": 16 }, "args": [], "return_type": { @@ -3084,9 +3672,9 @@ "_type": "Block", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 43, - "end_line": 45, - "column": 16, + "line": 8, + "end_line": 10, + "column": 17, "end_column": 3 }, "body": [ @@ -3094,19 +3682,19 @@ "_type": "ReturnStatement", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 44, - "end_line": 44, + "line": 9, + "end_line": 9, "column": 4, - "end_column": 24 + "end_column": 19 }, "value": { "_type": "StringConstant", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 44, - "end_line": 44, + "line": 9, + "end_line": 9, "column": 11, - "end_column": 24 + "end_column": 19 }, "wtype": { "_type": "WType", @@ -3115,7 +3703,7 @@ "ephemeral": false, "scalar_type": 1 }, - "value": "multi-bases" + "value": "common" } } ], @@ -3129,22 +3717,22 @@ "returns": null }, "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::MultiBases", - "member_name": "methodMulti", + "cref": "tests/approvals/multi-inheritance.algo.ts::CommonBase", + "member_name": "methodCommon", "arc4_method_config": { "_type": "ARC4ABIMethodConfig", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 43, - "end_line": 43, + "line": 8, + "end_line": 8, "column": 2, - "end_column": 15 + "end_column": 16 }, "allowed_completion_types": [ 0 ], "create": 3, - "name": "methodMulti", + "name": "methodCommon", "readonly": false, "default_args": {} } @@ -3153,10 +3741,10 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 47, - "end_line": 47, + "line": 12, + "end_line": 12, "column": 2, - "end_column": 20 + "end_column": 26 }, "args": [], "return_type": { @@ -3170,9 +3758,9 @@ "_type": "Block", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 47, - "end_line": 49, - "column": 21, + "line": 12, + "end_line": 14, + "column": 27, "end_column": 3 }, "body": [ @@ -3180,19 +3768,19 @@ "_type": "ReturnStatement", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 48, - "end_line": 48, + "line": 13, + "end_line": 13, "column": 4, - "end_column": 28 + "end_column": 19 }, "value": { - "_type": "SubroutineCallExpression", + "_type": "StringConstant", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 48, - "end_line": 48, + "line": 13, + "end_line": 13, "column": 11, - "end_column": 28 + "end_column": 19 }, "wtype": { "_type": "WType", @@ -3201,11 +3789,7 @@ "ephemeral": false, "scalar_type": 1 }, - "target": { - "_type": "InstanceSuperMethodTarget", - "member_name": "methodTwo" - }, - "args": [] + "value": "common" } } ], @@ -3219,22 +3803,22 @@ "returns": null }, "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::MultiBases", - "member_name": "methodCallsSuper", + "cref": "tests/approvals/multi-inheritance.algo.ts::CommonBase", + "member_name": "b2CantOverride", "arc4_method_config": { "_type": "ARC4ABIMethodConfig", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 47, - "end_line": 47, + "line": 12, + "end_line": 12, "column": 2, - "end_column": 20 + "end_column": 26 }, "allowed_completion_types": [ 0 ], "create": 3, - "name": "methodCallsSuper", + "name": "b2CantOverride", "readonly": false, "default_args": {} } @@ -3243,10 +3827,10 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 51, - "end_line": 51, + "line": 26, + "end_line": 26, "column": 2, - "end_column": 22 + "end_column": 13 }, "args": [], "return_type": { @@ -3260,9 +3844,9 @@ "_type": "Block", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 51, - "end_line": 53, - "column": 23, + "line": 26, + "end_line": 28, + "column": 14, "end_column": 3 }, "body": [ @@ -3270,19 +3854,19 @@ "_type": "ReturnStatement", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 52, - "end_line": 52, + "line": 27, + "end_line": 27, "column": 4, - "end_column": 48 + "end_column": 21 }, "value": { - "_type": "SubroutineCallExpression", + "_type": "StringConstant", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 52, - "end_line": 52, + "line": 27, + "end_line": 27, "column": 11, - "end_column": 48 + "end_column": 21 }, "wtype": { "_type": "WType", @@ -3291,12 +3875,7 @@ "ephemeral": false, "scalar_type": 1 }, - "target": { - "_type": "ContractMethodTarget", - "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", - "member_name": "b2CantOverride" - }, - "args": [] + "value": "base-two" } } ], @@ -3310,22 +3889,22 @@ "returns": null }, "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::MultiBases", - "member_name": "callB2CantOverride", + "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", + "member_name": "methodTwo", "arc4_method_config": { "_type": "ARC4ABIMethodConfig", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 51, - "end_line": 51, + "line": 26, + "end_line": 26, "column": 2, - "end_column": 22 + "end_column": 13 }, "allowed_completion_types": [ 0 ], "create": 3, - "name": "callB2CantOverride", + "name": "methodTwo", "readonly": false, "default_args": {} } @@ -3334,10 +3913,10 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 55, - "end_line": 55, + "line": 35, + "end_line": 35, "column": 2, - "end_column": 16 + "end_column": 26 }, "args": [], "return_type": { @@ -3351,9 +3930,9 @@ "_type": "Block", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 55, - "end_line": 57, - "column": 17, + "line": 35, + "end_line": 37, + "column": 27, "end_column": 3 }, "body": [ @@ -3361,19 +3940,19 @@ "_type": "ReturnStatement", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 56, - "end_line": 56, + "line": 36, + "end_line": 36, "column": 4, - "end_column": 46 + "end_column": 21 }, "value": { - "_type": "SubroutineCallExpression", + "_type": "StringConstant", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 56, - "end_line": 56, + "line": 36, + "end_line": 36, "column": 11, - "end_column": 46 + "end_column": 21 }, "wtype": { "_type": "WType", @@ -3382,12 +3961,7 @@ "ephemeral": false, "scalar_type": 1 }, - "target": { - "_type": "ContractMethodTarget", - "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", - "member_name": "methodCommon" - }, - "args": [] + "value": "base-two" } } ], @@ -3396,29 +3970,83 @@ }, "documentation": { "_type": "MethodDocumentation", - "description": null, + "description": "Because CommonBase implements this method, and MRO for polytype is depth first; this method\nshould not be accessible from MultiBases as the MRO should be `BaseOne => CommonBase => BaseTwo => CommonBase`\nand since CommonBase provides an implementation, this one should not be used", "args": {}, "returns": null }, "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::MultiBases", - "member_name": "callB2Common", + "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", + "member_name": "b2CantOverride", "arc4_method_config": { "_type": "ARC4ABIMethodConfig", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 55, - "end_line": 55, - "column": 2, - "end_column": 16 + "line": 35, + "end_line": 35, + "column": 2, + "end_column": 26 + }, + "allowed_completion_types": [ + 0 + ], + "create": 3, + "name": "b2CantOverride", + "readonly": false, + "default_args": {} + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 40, + "end_line": 40, + "column": 0, + "end_column": 59 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 40, + "end_line": 40, + "column": 0, + "end_column": 59 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": "Implicitly generated create method", + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/multi-inheritance.algo.ts::MultiBases", + "member_name": "__algots__.defaultCreate", + "arc4_method_config": { + "_type": "ARC4BareMethodConfig", + "source_location": { + "file": "tests/approvals/multi-inheritance.algo.ts", + "line": 40, + "end_line": 40, + "column": 0, + "end_column": 59 }, "allowed_completion_types": [ 0 ], - "create": 3, - "name": "callB2Common", - "readonly": false, - "default_args": {} + "create": 2 } }, { @@ -3674,92 +4302,6 @@ "member_name": "constructor", "arc4_method_config": null }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 19, - "end_line": 19, - "column": 2, - "end_column": 13 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 19, - "end_line": 21, - "column": 14, - "end_column": 3 - }, - "body": [ - { - "_type": "ReturnStatement", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 20, - "end_line": 20, - "column": 4, - "end_column": 21 - }, - "value": { - "_type": "StringConstant", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 20, - "end_line": 20, - "column": 11, - "end_column": 21 - }, - "wtype": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "base-one" - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": null, - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::BaseOne", - "member_name": "methodOne", - "arc4_method_config": { - "_type": "ARC4ABIMethodConfig", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 19, - "end_line": 19, - "column": 2, - "end_column": 13 - }, - "allowed_completion_types": [ - 0 - ], - "create": 3, - "name": "methodOne", - "readonly": false, - "default_args": {} - } - }, { "_type": "ContractMethod", "source_location": { @@ -3876,169 +4418,13 @@ }, "wtype": { "_type": "WType", - "name": "uint64", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "value": "45", - "teal_alias": null - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": null, - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::BaseOne", - "member_name": "constructor", - "arc4_method_config": null - }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 8, - "end_line": 8, - "column": 2, - "end_column": 16 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 8, - "end_line": 10, - "column": 17, - "end_column": 3 - }, - "body": [ - { - "_type": "ReturnStatement", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 9, - "end_line": 9, - "column": 4, - "end_column": 19 - }, - "value": { - "_type": "StringConstant", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 9, - "end_line": 9, - "column": 11, - "end_column": 19 - }, - "wtype": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "common" - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": null, - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::CommonBase", - "member_name": "methodCommon", - "arc4_method_config": { - "_type": "ARC4ABIMethodConfig", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 8, - "end_line": 8, - "column": 2, - "end_column": 16 - }, - "allowed_completion_types": [ - 0 - ], - "create": 3, - "name": "methodCommon", - "readonly": false, - "default_args": {} - } - }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 12, - "end_line": 12, - "column": 2, - "end_column": 26 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 12, - "end_line": 14, - "column": 27, - "end_column": 3 - }, - "body": [ - { - "_type": "ReturnStatement", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 13, - "end_line": 13, - "column": 4, - "end_column": 19 - }, - "value": { - "_type": "StringConstant", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 13, - "end_line": 13, - "column": 11, - "end_column": 19 - }, - "wtype": { - "_type": "WType", - "name": "string", + "name": "uint64", "immutable": true, "ephemeral": false, - "scalar_type": 1 + "scalar_type": 2 }, - "value": "common" + "value": "45", + "teal_alias": null } } ], @@ -4052,25 +4438,9 @@ "returns": null }, "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::CommonBase", - "member_name": "b2CantOverride", - "arc4_method_config": { - "_type": "ARC4ABIMethodConfig", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 12, - "end_line": 12, - "column": 2, - "end_column": 26 - }, - "allowed_completion_types": [ - 0 - ], - "create": 3, - "name": "b2CantOverride", - "readonly": false, - "default_args": {} - } + "cref": "tests/approvals/multi-inheritance.algo.ts::BaseOne", + "member_name": "constructor", + "arc4_method_config": null }, { "_type": "ContractMethod", @@ -4109,7 +4479,7 @@ "end_column": 42 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/multi-inheritance.algo.ts", "line": 5, @@ -4123,7 +4493,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -4210,59 +4585,32 @@ { "_type": "ContractMethod", "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 26, - "end_line": 26, - "column": 2, - "end_column": 13 + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 }, "args": [], "return_type": { "_type": "WType", - "name": "string", + "name": "void", "immutable": true, "ephemeral": false, - "scalar_type": 1 + "scalar_type": null }, "body": { "_type": "Block", "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 26, - "end_line": 28, - "column": 14, - "end_column": 3 + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 }, - "body": [ - { - "_type": "ReturnStatement", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 27, - "end_line": 27, - "column": 4, - "end_column": 21 - }, - "value": { - "_type": "StringConstant", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 27, - "end_line": 27, - "column": 11, - "end_column": 21 - }, - "wtype": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "base-two" - } - } - ], + "body": [], "label": null, "comment": null }, @@ -4272,112 +4620,10 @@ "args": {}, "returns": null }, - "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", - "member_name": "methodTwo", - "arc4_method_config": { - "_type": "ARC4ABIMethodConfig", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 26, - "end_line": 26, - "column": 2, - "end_column": 13 - }, - "allowed_completion_types": [ - 0 - ], - "create": 3, - "name": "methodTwo", - "readonly": false, - "default_args": {} - } - }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 35, - "end_line": 35, - "column": 2, - "end_column": 26 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 35, - "end_line": 37, - "column": 27, - "end_column": 3 - }, - "body": [ - { - "_type": "ReturnStatement", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 36, - "end_line": 36, - "column": 4, - "end_column": 21 - }, - "value": { - "_type": "StringConstant", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 36, - "end_line": 36, - "column": 11, - "end_column": 21 - }, - "wtype": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "base-two" - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": "Because CommonBase implements this method, and MRO for polytype is depth first; this method\nshould not be accessible from MultiBases as the MRO should be `BaseOne => CommonBase => BaseTwo => CommonBase`\nand since CommonBase provides an implementation, this one should not be used", - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", - "member_name": "b2CantOverride", - "arc4_method_config": { - "_type": "ARC4ABIMethodConfig", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 35, - "end_line": 35, - "column": 2, - "end_column": 26 - }, - "allowed_completion_types": [ - 0 - ], - "create": 3, - "name": "b2CantOverride", - "readonly": false, - "default_args": {} - } + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null }, { "_type": "ContractMethod", @@ -4517,60 +4763,6 @@ "cref": "tests/approvals/multi-inheritance.algo.ts::BaseTwo", "member_name": "constructor", "arc4_method_config": null - }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 40, - "end_line": 40, - "column": 0, - "end_column": 59 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 40, - "end_line": 40, - "column": 0, - "end_column": 59 - }, - "body": [], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": "Implicitly generated create method", - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/multi-inheritance.algo.ts::MultiBases", - "member_name": "__algots__.defaultCreate", - "arc4_method_config": { - "_type": "ARC4BareMethodConfig", - "source_location": { - "file": "tests/approvals/multi-inheritance.algo.ts", - "line": 40, - "end_line": 40, - "column": 0, - "end_column": 59 - }, - "allowed_completion_types": [ - 0 - ], - "create": 2 - } } ], "app_state": [ diff --git a/tests/approvals/out/unoptimized/precompiled-apps/Hello.approval.teal b/tests/approvals/out/unoptimized/precompiled-apps/Hello.approval.teal index 81f42092b..4ca4545f5 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/Hello.approval.teal +++ b/tests/approvals/out/unoptimized/precompiled-apps/Hello.approval.teal @@ -181,6 +181,10 @@ greet: // tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: constructor: + +constructor_block@1: + +constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/precompiled-apps.algo.ts:4 // greeting = GlobalState({ initialValue: '' }) bytec_0 // "greeting" diff --git a/tests/approvals/out/unoptimized/precompiled-apps/Hello.arc32.json b/tests/approvals/out/unoptimized/precompiled-apps/Hello.arc32.json index b117a489f..ca334a9f0 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/Hello.arc32.json +++ b/tests/approvals/out/unoptimized/precompiled-apps/Hello.arc32.json @@ -22,7 +22,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsbyBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgwMDkyMjVhZSAvLyBtZXRob2QgImhlbGxvQ3JlYXRlKHN0cmluZyl2b2lkIgogICAgcHVzaGJ5dGVzIDB4MjQzNzhkM2MgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhhMGU4MTg3MiAvLyBtZXRob2QgInVwZGF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweGQwYTI4MjAwIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIHVuY292ZXIgNAogICAgbWF0Y2ggbWFpbl9oZWxsb0NyZWF0ZV9yb3V0ZUA1IG1haW5fZGVsZXRlX3JvdXRlQDYgbWFpbl91cGRhdGVfcm91dGVANyBtYWluX2dyZWV0X3JvdXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGdyZWV0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fdXBkYXRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IFVwZGF0ZUFwcGxpY2F0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB1cGRhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2hlbGxvQ3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2hlbGxvQ3JlYXRlJywgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTgKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnaGVsbG9DcmVhdGUnLCBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uY3JlYXRlKGdyZWV0aW5nOiBieXRlcykgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxOC0xOQogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdoZWxsb0NyZWF0ZScsIG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIGNyZWF0ZShncmVldGluZzogc3RyaW5nKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoyMAogICAgLy8gdGhpcy5ncmVldGluZy52YWx1ZSA9IGdyZWV0aW5nCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5ncmVldChuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmdyZWV0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYnl0ZWNfMSAvLyAiIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsbyBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgwMDkyMjVhZSAvLyBtZXRob2QgImhlbGxvQ3JlYXRlKHN0cmluZyl2b2lkIgogICAgcHVzaGJ5dGVzIDB4MjQzNzhkM2MgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhhMGU4MTg3MiAvLyBtZXRob2QgInVwZGF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweGQwYTI4MjAwIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIHVuY292ZXIgNAogICAgbWF0Y2ggbWFpbl9oZWxsb0NyZWF0ZV9yb3V0ZUA1IG1haW5fZGVsZXRlX3JvdXRlQDYgbWFpbl91cGRhdGVfcm91dGVANyBtYWluX2dyZWV0X3JvdXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGdyZWV0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fdXBkYXRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IFVwZGF0ZUFwcGxpY2F0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB1cGRhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2hlbGxvQ3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2hlbGxvQ3JlYXRlJywgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTgKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnaGVsbG9DcmVhdGUnLCBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uY3JlYXRlKGdyZWV0aW5nOiBieXRlcykgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxOC0xOQogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdoZWxsb0NyZWF0ZScsIG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIGNyZWF0ZShncmVldGluZzogc3RyaW5nKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoyMAogICAgLy8gdGhpcy5ncmVldGluZy52YWx1ZSA9IGdyZWV0aW5nCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5ncmVldChuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmdyZWV0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKCmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgpjb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/precompiled-apps/Hello.arc56.json b/tests/approvals/out/unoptimized/precompiled-apps/Hello.arc56.json index 0ddacfc1c..4194a8f2d 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/Hello.arc56.json +++ b/tests/approvals/out/unoptimized/precompiled-apps/Hello.arc56.json @@ -165,7 +165,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsbyBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgwMDkyMjVhZSAvLyBtZXRob2QgImhlbGxvQ3JlYXRlKHN0cmluZyl2b2lkIgogICAgcHVzaGJ5dGVzIDB4MjQzNzhkM2MgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhhMGU4MTg3MiAvLyBtZXRob2QgInVwZGF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweGQwYTI4MjAwIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIHVuY292ZXIgNAogICAgbWF0Y2ggbWFpbl9oZWxsb0NyZWF0ZV9yb3V0ZUA1IG1haW5fZGVsZXRlX3JvdXRlQDYgbWFpbl91cGRhdGVfcm91dGVANyBtYWluX2dyZWV0X3JvdXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGdyZWV0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fdXBkYXRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IFVwZGF0ZUFwcGxpY2F0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB1cGRhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2hlbGxvQ3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2hlbGxvQ3JlYXRlJywgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTgKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnaGVsbG9DcmVhdGUnLCBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uY3JlYXRlKGdyZWV0aW5nOiBieXRlcykgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxOC0xOQogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdoZWxsb0NyZWF0ZScsIG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIGNyZWF0ZShncmVldGluZzogc3RyaW5nKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoyMAogICAgLy8gdGhpcy5ncmVldGluZy52YWx1ZSA9IGdyZWV0aW5nCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5ncmVldChuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmdyZWV0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYnl0ZWNfMSAvLyAiIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsbyBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgwMDkyMjVhZSAvLyBtZXRob2QgImhlbGxvQ3JlYXRlKHN0cmluZyl2b2lkIgogICAgcHVzaGJ5dGVzIDB4MjQzNzhkM2MgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhhMGU4MTg3MiAvLyBtZXRob2QgInVwZGF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweGQwYTI4MjAwIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIHVuY292ZXIgNAogICAgbWF0Y2ggbWFpbl9oZWxsb0NyZWF0ZV9yb3V0ZUA1IG1haW5fZGVsZXRlX3JvdXRlQDYgbWFpbl91cGRhdGVfcm91dGVANyBtYWluX2dyZWV0X3JvdXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGdyZWV0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fdXBkYXRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IFVwZGF0ZUFwcGxpY2F0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB1cGRhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2hlbGxvQ3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2hlbGxvQ3JlYXRlJywgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTgKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnaGVsbG9DcmVhdGUnLCBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uY3JlYXRlKGdyZWV0aW5nOiBieXRlcykgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxOC0xOQogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdoZWxsb0NyZWF0ZScsIG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIGNyZWF0ZShncmVldGluZzogc3RyaW5nKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoyMAogICAgLy8gdGhpcy5ncmVldGluZy52YWx1ZSA9IGdyZWV0aW5nCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5ncmVldChuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmdyZWV0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKCmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgpjb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { diff --git a/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir b/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir index 182087125..1566b6282 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir @@ -96,5 +96,10 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "greeting" "") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.1.ssa.array.ir index 6aa04a4e3..47f8a01f4 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.1.ssa.array.ir @@ -101,5 +101,9 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L3 (app_global_put "greeting" "") return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.2.ssa.slot.ir index 6aa04a4e3..47f8a01f4 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/precompiled-apps/Hello.ir/Hello.approval.2.ssa.slot.ir @@ -101,5 +101,9 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L3 (app_global_put "greeting" "") return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.approval.teal b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.approval.teal index 71a17f7c8..13c4d6819 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.approval.teal +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.approval.teal @@ -129,21 +129,6 @@ create: retsub -// tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: -constructor: - // tests/approvals/precompiled-apps.algo.ts:26 - // super() - callsub tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor - // tests/approvals/precompiled-apps.algo.ts:4 - // greeting = GlobalState({ initialValue: '' }) - bytec_0 // "greeting" - // tests/approvals/precompiled-apps.algo.ts:27 - // this.greeting.value = TemplateVar('GREETING') - bytec_2 // TMPL_GREETING - app_global_put - retsub - - // tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: delete: retsub @@ -177,8 +162,27 @@ greet: retsub +// tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: +constructor: + // tests/approvals/precompiled-apps.algo.ts:26 + // super() + callsub tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor + // tests/approvals/precompiled-apps.algo.ts:4 + // greeting = GlobalState({ initialValue: '' }) + bytec_0 // "greeting" + // tests/approvals/precompiled-apps.algo.ts:27 + // this.greeting.value = TemplateVar('GREETING') + bytec_2 // TMPL_GREETING + app_global_put + retsub + + // tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor: + +tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor_block@1: + +tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/precompiled-apps.algo.ts:4 // greeting = GlobalState({ initialValue: '' }) bytec_0 // "greeting" diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.arc32.json b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.arc32.json index 548b3947e..e95a82437 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.arc32.json +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.arc32.json @@ -22,7 +22,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgVE1QTF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLmNyZWF0ZSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycpCiAgICBieXRlY18yIC8vIFRNUExfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5ncmVldChuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmdyZWV0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgVE1QTF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLmNyZWF0ZSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5kZWxldGUoKSAtPiB2b2lkOgpkZWxldGU6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UudXBkYXRlKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmdyZWV0KG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKZ3JlZXQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBieXRlY18xIC8vICIiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAiICIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycpCiAgICBieXRlY18yIC8vIFRNUExfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6Cgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3JfYmxvY2tAMToKCnRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5jb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.arc56.json b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.arc56.json index 9a7643e75..dab1e6792 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.arc56.json +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.arc56.json @@ -147,7 +147,7 @@ }, { "pc": [ - 168 + 161 ], "errorMessage": "check GlobalState exists" } @@ -160,11 +160,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgVE1QTF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLmNyZWF0ZSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycpCiAgICBieXRlY18yIC8vIFRNUExfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5ncmVldChuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmdyZWV0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgVE1QTF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLmNyZWF0ZSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5kZWxldGUoKSAtPiB2b2lkOgpkZWxldGU6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UudXBkYXRlKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmdyZWV0KG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKZ3JlZXQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBieXRlY18xIC8vICIiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAiICIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycpCiAgICBieXRlY18yIC8vIFRNUExfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6Cgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3JfYmxvY2tAMToKCnRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5jb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmAwhncmVldGluZwAAMRhAAAOIAJExGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABXSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIADMjQv/FMRmBBRJEMRgiE0SIACAjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiAAYKCpniYmJigEBIihlRClMUIABIFCL/1CJKClniQ==", + "approval": "CiACAAEmAwhncmVldGluZwAAMRhAAAOIAKUxGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABQSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIACwjQv/FMRmBBRJEMRgiE0SIABkjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiYmKAQEiKGVEKUxQgAEgUIv/UImIAAQoKmeJKClniQ==", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir index f9129c0aa..608e586a7 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir @@ -74,12 +74,6 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.create() -> v block@0: // L30 return -subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: - block@0: // L25 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) - return - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: block@0: // L6 return @@ -97,7 +91,18 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes let tmp%2#0: bytes = (concat tmp%1#0 name#0) return tmp%2#0 +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: + block@0: // L25 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) + return + subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "greeting" "") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.1.ssa.array.ir index 930dd3d09..f0a8c0c3c 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.1.ssa.array.ir @@ -79,12 +79,6 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.create() -> v block@0: // L30 return -subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: - block@0: // L25 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) - return - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: block@0: // L6 return @@ -102,7 +96,17 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes let tmp%2#0: bytes = (concat tmp%1#0 name#0) return tmp%2#0 +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: + block@0: // L25 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) + return + subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L3 (app_global_put "greeting" "") return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.2.ssa.slot.ir index 930dd3d09..f0a8c0c3c 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.2.ssa.slot.ir @@ -79,12 +79,6 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.create() -> v block@0: // L30 return -subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: - block@0: // L25 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) - return - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: block@0: // L6 return @@ -102,7 +96,17 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes let tmp%2#0: bytes = (concat tmp%1#0 name#0) return tmp%2#0 +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: + block@0: // L25 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) + return + subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L3 (app_global_put "greeting" "") return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.approval.teal b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.approval.teal index 6bd34cfe4..ee679942b 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.approval.teal +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.approval.teal @@ -129,21 +129,6 @@ create: retsub -// tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: -constructor: - // tests/approvals/precompiled-apps.algo.ts:36 - // super() - callsub tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor - // tests/approvals/precompiled-apps.algo.ts:4 - // greeting = GlobalState({ initialValue: '' }) - bytec_0 // "greeting" - // tests/approvals/precompiled-apps.algo.ts:37 - // this.greeting.value = TemplateVar('GREETING', 'PRFX_') - bytec_2 // PRFX_GREETING - app_global_put - retsub - - // tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: delete: retsub @@ -177,8 +162,27 @@ greet: retsub +// tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: +constructor: + // tests/approvals/precompiled-apps.algo.ts:36 + // super() + callsub tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor + // tests/approvals/precompiled-apps.algo.ts:4 + // greeting = GlobalState({ initialValue: '' }) + bytec_0 // "greeting" + // tests/approvals/precompiled-apps.algo.ts:37 + // this.greeting.value = TemplateVar('GREETING', 'PRFX_') + bytec_2 // PRFX_GREETING + app_global_put + retsub + + // tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor: + +tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor_block@1: + +tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/precompiled-apps.algo.ts:4 // greeting = GlobalState({ initialValue: '' }) bytec_0 // "greeting" diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.arc32.json b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.arc32.json index 5cc053c1f..8f05cf689 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.arc32.json +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.arc32.json @@ -22,7 +22,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgUFJGWF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4IGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4LmNyZWF0ZSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycsICdQUkZYXycpCiAgICBieXRlY18yIC8vIFBSRlhfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5ncmVldChuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmdyZWV0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgUFJGWF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4IGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4LmNyZWF0ZSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5kZWxldGUoKSAtPiB2b2lkOgpkZWxldGU6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UudXBkYXRlKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmdyZWV0KG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKZ3JlZXQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBieXRlY18xIC8vICIiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAiICIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycsICdQUkZYXycpCiAgICBieXRlY18yIC8vIFBSRlhfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6Cgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3JfYmxvY2tAMToKCnRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5jb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.arc56.json b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.arc56.json index 147df5f27..98d0a4694 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.arc56.json +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.arc56.json @@ -147,7 +147,7 @@ }, { "pc": [ - 168 + 161 ], "errorMessage": "check GlobalState exists" } @@ -160,11 +160,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgUFJGWF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4IGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4LmNyZWF0ZSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycsICdQUkZYXycpCiAgICBieXRlY18yIC8vIFBSRlhfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5ncmVldChuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmdyZWV0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgUFJGWF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4IGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4LmNyZWF0ZSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5kZWxldGUoKSAtPiB2b2lkOgpkZWxldGU6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UudXBkYXRlKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmdyZWV0KG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKZ3JlZXQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBieXRlY18xIC8vICIiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAiICIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycsICdQUkZYXycpCiAgICBieXRlY18yIC8vIFBSRlhfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6Cgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3JfYmxvY2tAMToKCnRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5jb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmAwhncmVldGluZwAAMRhAAAOIAJExGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABXSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIADMjQv/FMRmBBRJEMRgiE0SIACAjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiAAYKCpniYmJigEBIihlRClMUIABIFCL/1CJKClniQ==", + "approval": "CiACAAEmAwhncmVldGluZwAAMRhAAAOIAKUxGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABQSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIACwjQv/FMRmBBRJEMRgiE0SIABkjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiYmKAQEiKGVEKUxQgAEgUIv/UImIAAQoKmeJKClniQ==", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir index 63d0f269b..e448d3e02 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir @@ -74,12 +74,6 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.c block@0: // L40 return -subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: - block@0: // L35 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) - return - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: block@0: // L6 return @@ -97,7 +91,18 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes let tmp%2#0: bytes = (concat tmp%1#0 name#0) return tmp%2#0 +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: + block@0: // L35 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) + return + subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "greeting" "") + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.1.ssa.array.ir index f6c59eb6f..d5950e66c 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.1.ssa.array.ir @@ -79,12 +79,6 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.c block@0: // L40 return -subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: - block@0: // L35 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) - return - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: block@0: // L6 return @@ -102,7 +96,17 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes let tmp%2#0: bytes = (concat tmp%1#0 name#0) return tmp%2#0 +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: + block@0: // L35 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) + return + subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L3 (app_global_put "greeting" "") return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.2.ssa.slot.ir index f6c59eb6f..d5950e66c 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.2.ssa.slot.ir @@ -79,12 +79,6 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.c block@0: // L40 return -subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: - block@0: // L35 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) - return - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: block@0: // L6 return @@ -102,7 +96,17 @@ subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes let tmp%2#0: bytes = (concat tmp%1#0 name#0) return tmp%2#0 +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: + block@0: // L35 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) + return + subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: block@0: // L3 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L3 (app_global_put "greeting" "") return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/precompiled-apps/precompiled-apps.awst b/tests/approvals/out/unoptimized/precompiled-apps/precompiled-apps.awst index 8edb546dc..80a51fd8b 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/precompiled-apps.awst +++ b/tests/approvals/out/unoptimized/precompiled-apps/precompiled-apps.awst @@ -36,10 +36,14 @@ contract Hello HelloBase::constructor(): void { - void + super.constructor() GlobalState["greeting"]: string = "" } + BaseContract::constructor(): void + { + } + } contract HelloTemplate { @@ -63,12 +67,6 @@ contract HelloTemplate { } - constructor(): void - { - super.constructor() - GlobalState["greeting"]: string = TemplateVar[string](TMPL_GREETING) - } - HelloBase::delete(): void { } @@ -82,12 +80,22 @@ contract HelloTemplate return "" + GlobalState["greeting"] + " " + name } + constructor(): void + { + super.constructor() + GlobalState["greeting"]: string = TemplateVar[string](TMPL_GREETING) + } + HelloBase::constructor(): void { - void + super.constructor() GlobalState["greeting"]: string = "" } + BaseContract::constructor(): void + { + } + } contract HelloTemplateCustomPrefix { @@ -111,12 +119,6 @@ contract HelloTemplateCustomPrefix { } - constructor(): void - { - super.constructor() - GlobalState["greeting"]: string = TemplateVar[string](PRFX_GREETING) - } - HelloBase::delete(): void { } @@ -130,12 +132,22 @@ contract HelloTemplateCustomPrefix return "" + GlobalState["greeting"] + " " + name } + constructor(): void + { + super.constructor() + GlobalState["greeting"]: string = TemplateVar[string](PRFX_GREETING) + } + HelloBase::constructor(): void { - void + super.constructor() GlobalState["greeting"]: string = "" } + BaseContract::constructor(): void + { + } + } subroutine getBigBytes(): bytes { diff --git a/tests/approvals/out/unoptimized/precompiled-apps/precompiled-apps.awst.json b/tests/approvals/out/unoptimized/precompiled-apps/precompiled-apps.awst.json index 3a716520d..4adc00f20 100644 --- a/tests/approvals/out/unoptimized/precompiled-apps/precompiled-apps.awst.json +++ b/tests/approvals/out/unoptimized/precompiled-apps/precompiled-apps.awst.json @@ -824,7 +824,7 @@ "end_column": 43 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/precompiled-apps.algo.ts", "line": 3, @@ -838,7 +838,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -920,6 +925,49 @@ "cref": "tests/approvals/precompiled-apps.algo.ts::HelloBase", "member_name": "constructor", "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ @@ -1331,159 +1379,6 @@ "default_args": {} } }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 25, - "end_line": 28, - "column": 2, - "end_column": 3 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 25, - "end_line": 28, - "column": 16, - "end_column": 3 - }, - "body": [ - { - "_type": "Block", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 26, - "end_line": 26, - "column": 4, - "end_column": 11 - }, - "body": [ - { - "_type": "ExpressionStatement", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 26, - "end_line": 26, - "column": 4, - "end_column": 11 - }, - "expr": { - "_type": "SubroutineCallExpression", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 26, - "end_line": 26, - "column": 4, - "end_column": 11 - }, - "wtype": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "target": { - "_type": "InstanceSuperMethodTarget", - "member_name": "constructor" - }, - "args": [] - } - } - ], - "label": null, - "comment": null - }, - { - "_type": "AssignmentStatement", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 27, - "end_line": 27, - "column": 4, - "end_column": 57 - }, - "target": { - "_type": "AppStateExpression", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 4, - "end_line": 4, - "column": 2, - "end_column": 10 - }, - "wtype": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "key": { - "_type": "BytesConstant", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 4, - "end_line": 4, - "column": 2, - "end_column": 10 - }, - "wtype": { - "_type": "WType", - "name": "state_key", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "XL4m_bZKs9", - "encoding": "utf8" - }, - "exists_assertion_message": "check GlobalState exists" - }, - "value": { - "_type": "TemplateVar", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 27, - "end_line": 27, - "column": 26, - "end_column": 57 - }, - "wtype": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "name": "TMPL_GREETING" - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": null, - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/precompiled-apps.algo.ts::HelloTemplate", - "member_name": "constructor", - "arc4_method_config": null - }, { "_type": "ContractMethod", "source_location": { @@ -1834,10 +1729,10 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 3, - "end_line": 3, - "column": 0, - "end_column": 43 + "line": 25, + "end_line": 28, + "column": 2, + "end_column": 3 }, "args": [], "return_type": { @@ -1851,60 +1746,218 @@ "_type": "Block", "source_location": { "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 3, - "end_line": 3, - "column": 0, - "end_column": 43 + "line": 25, + "end_line": 28, + "column": 16, + "end_column": 3 }, "body": [ { - "_type": "ExpressionStatement", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 3, - "end_line": 3, - "column": 0, - "end_column": 43 - }, - "expr": { - "_type": "VoidConstant", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 3, - "end_line": 3, - "column": 0, - "end_column": 43 - }, - "wtype": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - } - } - }, - { - "_type": "AssignmentStatement", + "_type": "Block", "source_location": { "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 4, - "end_line": 4, - "column": 2, - "end_column": 46 + "line": 26, + "end_line": 26, + "column": 4, + "end_column": 11 }, - "target": { - "_type": "AppStateExpression", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 4, - "end_line": 4, - "column": 2, - "end_column": 10 - }, - "wtype": { - "_type": "WType", - "name": "string", + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 26, + "end_line": 26, + "column": 4, + "end_column": 11 + }, + "expr": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 26, + "end_line": 26, + "column": 4, + "end_column": 11 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] + } + } + ], + "label": null, + "comment": null + }, + { + "_type": "AssignmentStatement", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 27, + "end_line": 27, + "column": 4, + "end_column": 57 + }, + "target": { + "_type": "AppStateExpression", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 4, + "end_line": 4, + "column": 2, + "end_column": 10 + }, + "wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "key": { + "_type": "BytesConstant", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 4, + "end_line": 4, + "column": 2, + "end_column": 10 + }, + "wtype": { + "_type": "WType", + "name": "state_key", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "XL4m_bZKs9", + "encoding": "utf8" + }, + "exists_assertion_message": "check GlobalState exists" + }, + "value": { + "_type": "TemplateVar", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 27, + "end_line": 27, + "column": 26, + "end_column": 57 + }, + "wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "name": "TMPL_GREETING" + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/precompiled-apps.algo.ts::HelloTemplate", + "member_name": "constructor", + "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 3, + "end_line": 3, + "column": 0, + "end_column": 43 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 3, + "end_line": 3, + "column": 0, + "end_column": 43 + }, + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 3, + "end_line": 3, + "column": 0, + "end_column": 43 + }, + "expr": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 3, + "end_line": 3, + "column": 0, + "end_column": 43 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] + } + }, + { + "_type": "AssignmentStatement", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 4, + "end_line": 4, + "column": 2, + "end_column": 46 + }, + "target": { + "_type": "AppStateExpression", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 4, + "end_line": 4, + "column": 2, + "end_column": 10 + }, + "wtype": { + "_type": "WType", + "name": "string", "immutable": true, "ephemeral": false, "scalar_type": 1 @@ -1963,6 +2016,49 @@ "cref": "tests/approvals/precompiled-apps.algo.ts::HelloBase", "member_name": "constructor", "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ @@ -2378,10 +2474,10 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 35, - "end_line": 38, + "line": 6, + "end_line": 7, "column": 2, - "end_column": 3 + "end_column": 10 }, "args": [], "return_type": { @@ -2395,163 +2491,10 @@ "_type": "Block", "source_location": { "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 35, - "end_line": 38, - "column": 16, - "end_column": 3 - }, - "body": [ - { - "_type": "Block", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 36, - "end_line": 36, - "column": 4, - "end_column": 11 - }, - "body": [ - { - "_type": "ExpressionStatement", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 36, - "end_line": 36, - "column": 4, - "end_column": 11 - }, - "expr": { - "_type": "SubroutineCallExpression", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 36, - "end_line": 36, - "column": 4, - "end_column": 11 - }, - "wtype": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "target": { - "_type": "InstanceSuperMethodTarget", - "member_name": "constructor" - }, - "args": [] - } - } - ], - "label": null, - "comment": null - }, - { - "_type": "AssignmentStatement", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 37, - "end_line": 37, - "column": 4, - "end_column": 66 - }, - "target": { - "_type": "AppStateExpression", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 4, - "end_line": 4, - "column": 2, - "end_column": 10 - }, - "wtype": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "key": { - "_type": "BytesConstant", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 4, - "end_line": 4, - "column": 2, - "end_column": 10 - }, - "wtype": { - "_type": "WType", - "name": "state_key", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "XL4m_bZKs9", - "encoding": "utf8" - }, - "exists_assertion_message": "check GlobalState exists" - }, - "value": { - "_type": "TemplateVar", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 37, - "end_line": 37, - "column": 26, - "end_column": 66 - }, - "wtype": { - "_type": "WType", - "name": "string", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "name": "PRFX_GREETING" - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": null, - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix", - "member_name": "constructor", - "arc4_method_config": null - }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 6, - "end_line": 7, - "column": 2, - "end_column": 10 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/precompiled-apps.algo.ts", - "line": 7, - "end_line": 7, - "column": 11, - "end_column": 13 + "line": 7, + "end_line": 7, + "column": 11, + "end_column": 13 }, "body": [], "label": null, @@ -2873,6 +2816,159 @@ "default_args": {} } }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 35, + "end_line": 38, + "column": 2, + "end_column": 3 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 35, + "end_line": 38, + "column": 16, + "end_column": 3 + }, + "body": [ + { + "_type": "Block", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 36, + "end_line": 36, + "column": 4, + "end_column": 11 + }, + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 36, + "end_line": 36, + "column": 4, + "end_column": 11 + }, + "expr": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 36, + "end_line": 36, + "column": 4, + "end_column": 11 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] + } + } + ], + "label": null, + "comment": null + }, + { + "_type": "AssignmentStatement", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 37, + "end_line": 37, + "column": 4, + "end_column": 66 + }, + "target": { + "_type": "AppStateExpression", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 4, + "end_line": 4, + "column": 2, + "end_column": 10 + }, + "wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "key": { + "_type": "BytesConstant", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 4, + "end_line": 4, + "column": 2, + "end_column": 10 + }, + "wtype": { + "_type": "WType", + "name": "state_key", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "XL4m_bZKs9", + "encoding": "utf8" + }, + "exists_assertion_message": "check GlobalState exists" + }, + "value": { + "_type": "TemplateVar", + "source_location": { + "file": "tests/approvals/precompiled-apps.algo.ts", + "line": 37, + "end_line": 37, + "column": 26, + "end_column": 66 + }, + "wtype": { + "_type": "WType", + "name": "string", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "name": "PRFX_GREETING" + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix", + "member_name": "constructor", + "arc4_method_config": null + }, { "_type": "ContractMethod", "source_location": { @@ -2910,7 +3006,7 @@ "end_column": 43 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/precompiled-apps.algo.ts", "line": 3, @@ -2924,7 +3020,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -3006,6 +3107,49 @@ "cref": "tests/approvals/precompiled-apps.algo.ts::HelloBase", "member_name": "constructor", "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ diff --git a/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.approval.teal b/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.approval.teal index 0fbc3e650..5c03b9e1a 100644 --- a/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.approval.teal +++ b/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.approval.teal @@ -324,7 +324,7 @@ test_compile_contract_with_template: itxn_field ClearStateProgramPages bytec_0 // 0x itxn_field ClearStateProgramPages - pushbytes base64(CiACAAEmAwhncmVldGluZwADaGV5MRhAAAOIAJExGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABXSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIADMjQv/FMRmBBRJEMRgiE0SIACAjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiAAYKCpniYmJigEBIihlRClMUIABIFCL/1CJKClniQ==) + pushbytes base64(CiACAAEmAwhncmVldGluZwADaGV5MRhAAAOIAKUxGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABQSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIACwjQv/FMRmBBRJEMRgiE0SIABkjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiYmKAQEiKGVEKUxQgAEgUIv/UImIAAQoKmeJKClniQ==) itxn_field ApprovalProgramPages bytec_0 // 0x itxn_field ApprovalProgramPages @@ -495,7 +495,7 @@ test_compile_contract_with_template_and_custom_prefix: itxn_field ClearStateProgramPages bytec_0 // 0x itxn_field ClearStateProgramPages - pushbytes base64(CiACAAEmAwhncmVldGluZwAHYm9uam91cjEYQAADiACRMRsiE0EAhjYaAIAETFxhuoAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAV0kVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiAAzI0L/xTEZgQUSRDEYIhNEiAAgI0L/szEZIhJEMRgiEkSIAAcjQv+iQv+eiYgAGCgqZ4mJiYoBASIoZUQpTFCAASBQi/9QiSgpZ4k=) + pushbytes base64(CiACAAEmAwhncmVldGluZwAHYm9uam91cjEYQAADiAClMRsiE0EAhjYaAIAETFxhuoAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAUEkVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiAAsI0L/xTEZgQUSRDEYIhNEiAAZI0L/szEZIhJEMRgiEkSIAAcjQv+iQv+eiYmJigEBIihlRClMUIABIFCL/1CJiAAEKCpniSgpZ4k=) itxn_field ApprovalProgramPages bytec_0 // 0x itxn_field ApprovalProgramPages diff --git a/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.arc32.json b/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.arc32.json index de17bc889..dd78003f2 100644 --- a/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.arc32.json +++ b/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.arc32.json @@ -22,7 +22,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA2IDEgNQogICAgYnl0ZWNibG9jayAweCAid29ybGQiIGJhc2U2NChDb0VCUXc9PSkgMHgxNTFmN2M3NSAweDI0Mzc4ZDNjIDB4ZDBhMjgyMDAgImhlbGxvIiAweDRjNWM2MWJhCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmExNzk5NWMgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhlMzI1NGJjOSAvLyBtZXRob2QgInRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTJiN2M2OTIgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpdm9pZCIKICAgIHB1c2hieXRlcyAweDAyOTQ3Y2EyIC8vIG1ldGhvZCAidGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzIG1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfcm91dGVANCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4X3JvdXRlQDUgbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2Vfcm91dGVANgoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgptYWluX3N3aXRjaF9jYXNlX25leHRAODoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2UKICAgIGludGNfMiAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjkKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozOAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3QoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTE6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTI6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmNyZWF0ZSksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBieXRlYyA2IC8vICJoZWxsbyIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjIDYgLy8gImhlbGxvIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE1CiAgICAvLyBnbG9iYWxOdW1CeXRlczogMSwKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4CiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG8pCiAgICBieXRlY18yIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KENpQUNBQUVtQWdobmNtVmxkR2x1WndBeEdFQUFBNGdBc2pFYkloTkJBSXcyR2dDQUJBQ1NKYTZBQkNRM2pUeUFCS0RvR0hLQUJOQ2lnZ0JQQkk0RUFFNEFQQUFxQUFJaVF6RVpJaEpFTVJnaUUwUTJHZ0ZYQWdDSUFGMUpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNDTkMvOWN4R1lFRUVrUXhHQ0lUUklnQU9TTkMvOFV4R1lFRkVrUXhHQ0lUUklnQUppTkMvN014R1NJU1JERVlJaEpFTmhvQlZ3SUFpQUFISTBML25FTC9tSW9CQUNpTC8yZUppWW1LQVFFaUtHVkVLVXhRZ0FFZ1VJdi9VSWtvS1dlSikKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBwdXNoYnl0ZXMgMHgwMDkyMjVhZSAvLyBtZXRob2QgImhlbGxvQ3JlYXRlKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwLTE2CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5jcmVhdGUpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmNyZWF0ZSksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE3CiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMC0xNwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTI0CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZ3JlZXQpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyMQogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5ncmVldCksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyMgogICAgLy8gYXBwSWQ6IGhlbGxvQXBwLAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIxCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmdyZWV0KSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlYyA1IC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxOS0yMwogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmdyZWV0KSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X25leHRfdHhuQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTI0CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZ3JlZXQpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyNQogICAgLy8gY29uc3QgcmVzdWx0ID0gZGVjb2RlQXJjNDxzdHJpbmc+KHR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChyZXN1bHQgPT09ICdoZWxsbyB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhlbGxvIHdvcmxkIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyOS0zNQogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5kZWxldGUpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozMwogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjMyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmRlbGV0ZSldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjktMzQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZGVsZXRlKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X25leHRfdHhuQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjI5LTM1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmRlbGV0ZSldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0NgogICAgLy8gZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MzkKICAgIC8vIGNvbnN0IGNvbXBpbGVkID0gY29tcGlsZShIZWxsb1RlbXBsYXRlLCB7IHRlbXBsYXRlVmFyczogeyBHUkVFVElORzogJ2hleScgfSB9KQogICAgYnl0ZWNfMiAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDaUFDQUFFbUF3aG5jbVZsZEdsdVp3QURhR1Y1TVJoQUFBT0lBSkV4R3lJVFFRQ0dOaG9BZ0FSTVhHRzZnQVFrTjQwOGdBU2c2Qmh5Z0FUUW9vSUFUd1NPQkFCT0FEd0FLZ0FDSWtNeEdTSVNSREVZSWhORU5ob0JWd0lBaUFCWFNSVVdWd1lDVEZDQUJCVWZmSFZNVUxBalF2L1hNUm1CQkJKRU1SZ2lFMFNJQURNalF2L0ZNUm1CQlJKRU1SZ2lFMFNJQUNBalF2K3pNUmtpRWtReEdDSVNSSWdBQnlOQy82SkMvNTZKaUFBWUtDcG5pWW1KaWdFQklpaGxSQ2xNVUlBQklGQ0wvMUNKS0NsbmlRPT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDcgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00NwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9zdWJtaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NDgKICAgIC8vIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUwLTU1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MwogICAgLy8gYXBwSWQ6IGhlbGxvQXBwLAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlYyA1IC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MC01NAogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfbmV4dF90eG5AMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTAtNTUKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1OAogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2hleSB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhleSB3b3JsZCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY0CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYwLTY2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS50ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3Mi03OQogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzcKICAgIC8vIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcwCiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCwgeyB0ZW1wbGF0ZVZhcnM6IHsgR1JFRVRJTkc6ICdib25qb3VyJyB9LCB0ZW1wbGF0ZVZhcnNQcmVmaXg6ICdQUkZYXycgfSkKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRW1Bd2huY21WbGRHbHVad0FIWW05dWFtOTFjakVZUUFBRGlBQ1JNUnNpRTBFQWhqWWFBSUFFVEZ4aHVvQUVKRGVOUElBRW9PZ1ljb0FFMEtLQ0FFOEVqZ1FBVGdBOEFDb0FBaUpETVJraUVrUXhHQ0lUUkRZYUFWY0NBSWdBVjBrVkZsY0dBa3hRZ0FRVkgzeDFURkN3STBMLzF6RVpnUVFTUkRFWUloTkVpQUF6STBML3hURVpnUVVTUkRFWUloTkVpQUFnSTBML3N6RVpJaEpFTVJnaUVrU0lBQWNqUXYraVF2K2VpWWdBR0NncVo0bUppWW9CQVNJb1pVUXBURkNBQVNCUWkvOVFpU2dwWjRrPSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcyLTc4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3OQogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODEtODYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg0CiAgICAvLyBhcHBJZDogaGVsbG9BcHAsCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjIDUgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgxLTg1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4MS04NgogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8c3RyaW5nPih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg5CiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSAnYm9uam91ciB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImJvbmpvdXIgd29ybGQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5NQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjk0CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NwogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMQogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKExhcmdlUHJvZ3JhbSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRXhHeUlUUVFCR05ob0FnQVFDdnpEUGdBUWtONDA4VHdLT0FnQVVBQUlpUXpFWmdRVVNSREVZSWhORWlBQkFJMEwvN1RFWkloSkVNUmdpRTBTSUFDb1dnQVFWSDN4MVRGQ3dJMEwvMGpFWklreU9BUUFEUXYvR01SZ2lFa1NJQUE4alF2KzdnWUFncjRtSS8vZ1ZpWW1KKQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTA5CiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2VfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAzLTExMAogICAgLy8gY29uc3QgbGFyZ2VBcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBleHRyYVByb2dyYW1QYWdlczogY29tcGlsZWQuZXh0cmFQcm9ncmFtUGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IGNvbXBpbGVkLmdsb2JhbEJ5dGVzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9zdWJtaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEwCiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEyLTExNwogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIHB1c2hieXRlcyAweDAyYmYzMGNmIC8vIG1ldGhvZCAiZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjExMi0xMTYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdnZXRCaWdCeXRlc0xlbmd0aCgpdWludDY0JyldLAogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTItMTE3CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTgKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8dWludDY0Pih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIwCiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSA0MDk2KQogICAgcHVzaGludCA0MDk2IC8vIDQwOTYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIyLTEyOAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI2CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI1CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyMi0xMjcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9uZXh0X3R4bkAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMjItMTI4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA2IDEgNQogICAgYnl0ZWNibG9jayAweCAid29ybGQiIGJhc2U2NChDb0VCUXc9PSkgMHgxNTFmN2M3NSAweDI0Mzc4ZDNjIDB4ZDBhMjgyMDAgImhlbGxvIiAweDRjNWM2MWJhCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmExNzk5NWMgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhlMzI1NGJjOSAvLyBtZXRob2QgInRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTJiN2M2OTIgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpdm9pZCIKICAgIHB1c2hieXRlcyAweDAyOTQ3Y2EyIC8vIG1ldGhvZCAidGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzIG1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfcm91dGVANCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4X3JvdXRlQDUgbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2Vfcm91dGVANgoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgptYWluX3N3aXRjaF9jYXNlX25leHRAODoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2UKICAgIGludGNfMiAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjkKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozOAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3QoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTE6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTI6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmNyZWF0ZSksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBieXRlYyA2IC8vICJoZWxsbyIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjIDYgLy8gImhlbGxvIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE1CiAgICAvLyBnbG9iYWxOdW1CeXRlczogMSwKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4CiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG8pCiAgICBieXRlY18yIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KENpQUNBQUVtQWdobmNtVmxkR2x1WndBeEdFQUFBNGdBc2pFYkloTkJBSXcyR2dDQUJBQ1NKYTZBQkNRM2pUeUFCS0RvR0hLQUJOQ2lnZ0JQQkk0RUFFNEFQQUFxQUFJaVF6RVpJaEpFTVJnaUUwUTJHZ0ZYQWdDSUFGMUpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNDTkMvOWN4R1lFRUVrUXhHQ0lUUklnQU9TTkMvOFV4R1lFRkVrUXhHQ0lUUklnQUppTkMvN014R1NJU1JERVlJaEpFTmhvQlZ3SUFpQUFISTBML25FTC9tSW9CQUNpTC8yZUppWW1LQVFFaUtHVkVLVXhRZ0FFZ1VJdi9VSWtvS1dlSikKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBwdXNoYnl0ZXMgMHgwMDkyMjVhZSAvLyBtZXRob2QgImhlbGxvQ3JlYXRlKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwLTE2CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5jcmVhdGUpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmNyZWF0ZSksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE3CiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMC0xNwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTI0CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZ3JlZXQpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyMQogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5ncmVldCksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyMgogICAgLy8gYXBwSWQ6IGhlbGxvQXBwLAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIxCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmdyZWV0KSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlYyA1IC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxOS0yMwogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmdyZWV0KSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X25leHRfdHhuQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTI0CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZ3JlZXQpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyNQogICAgLy8gY29uc3QgcmVzdWx0ID0gZGVjb2RlQXJjNDxzdHJpbmc+KHR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChyZXN1bHQgPT09ICdoZWxsbyB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhlbGxvIHdvcmxkIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyOS0zNQogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5kZWxldGUpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozMwogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjMyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmRlbGV0ZSldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjktMzQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZGVsZXRlKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X25leHRfdHhuQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjI5LTM1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmRlbGV0ZSldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0NgogICAgLy8gZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MzkKICAgIC8vIGNvbnN0IGNvbXBpbGVkID0gY29tcGlsZShIZWxsb1RlbXBsYXRlLCB7IHRlbXBsYXRlVmFyczogeyBHUkVFVElORzogJ2hleScgfSB9KQogICAgYnl0ZWNfMiAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDaUFDQUFFbUF3aG5jbVZsZEdsdVp3QURhR1Y1TVJoQUFBT0lBS1V4R3lJVFFRQ0dOaG9BZ0FSTVhHRzZnQVFrTjQwOGdBU2c2Qmh5Z0FUUW9vSUFUd1NPQkFCT0FEd0FLZ0FDSWtNeEdTSVNSREVZSWhORU5ob0JWd0lBaUFCUVNSVVdWd1lDVEZDQUJCVWZmSFZNVUxBalF2L1hNUm1CQkJKRU1SZ2lFMFNJQUN3alF2L0ZNUm1CQlJKRU1SZ2lFMFNJQUJralF2K3pNUmtpRWtReEdDSVNSSWdBQnlOQy82SkMvNTZKaVltS0FRRWlLR1ZFS1V4UWdBRWdVSXYvVUltSUFBUW9LbWVKS0NsbmlRPT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDcgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00NwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9zdWJtaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NDgKICAgIC8vIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUwLTU1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MwogICAgLy8gYXBwSWQ6IGhlbGxvQXBwLAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlYyA1IC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MC01NAogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfbmV4dF90eG5AMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTAtNTUKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1OAogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2hleSB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhleSB3b3JsZCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY0CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYwLTY2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS50ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3Mi03OQogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzcKICAgIC8vIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcwCiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCwgeyB0ZW1wbGF0ZVZhcnM6IHsgR1JFRVRJTkc6ICdib25qb3VyJyB9LCB0ZW1wbGF0ZVZhcnNQcmVmaXg6ICdQUkZYXycgfSkKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRW1Bd2huY21WbGRHbHVad0FIWW05dWFtOTFjakVZUUFBRGlBQ2xNUnNpRTBFQWhqWWFBSUFFVEZ4aHVvQUVKRGVOUElBRW9PZ1ljb0FFMEtLQ0FFOEVqZ1FBVGdBOEFDb0FBaUpETVJraUVrUXhHQ0lUUkRZYUFWY0NBSWdBVUVrVkZsY0dBa3hRZ0FRVkgzeDFURkN3STBMLzF6RVpnUVFTUkRFWUloTkVpQUFzSTBML3hURVpnUVVTUkRFWUloTkVpQUFaSTBML3N6RVpJaEpFTVJnaUVrU0lBQWNqUXYraVF2K2VpWW1KaWdFQklpaGxSQ2xNVUlBQklGQ0wvMUNKaUFBRUtDcG5pU2dwWjRrPSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcyLTc4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3OQogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODEtODYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg0CiAgICAvLyBhcHBJZDogaGVsbG9BcHAsCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjIDUgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgxLTg1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4MS04NgogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8c3RyaW5nPih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg5CiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSAnYm9uam91ciB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImJvbmpvdXIgd29ybGQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5NQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjk0CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NwogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMQogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKExhcmdlUHJvZ3JhbSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRXhHeUlUUVFCR05ob0FnQVFDdnpEUGdBUWtONDA4VHdLT0FnQVVBQUlpUXpFWmdRVVNSREVZSWhORWlBQkFJMEwvN1RFWkloSkVNUmdpRTBTSUFDb1dnQVFWSDN4MVRGQ3dJMEwvMGpFWklreU9BUUFEUXYvR01SZ2lFa1NJQUE4alF2KzdnWUFncjRtSS8vZ1ZpWW1KKQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTA5CiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2VfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAzLTExMAogICAgLy8gY29uc3QgbGFyZ2VBcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBleHRyYVByb2dyYW1QYWdlczogY29tcGlsZWQuZXh0cmFQcm9ncmFtUGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IGNvbXBpbGVkLmdsb2JhbEJ5dGVzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9zdWJtaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEwCiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEyLTExNwogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIHB1c2hieXRlcyAweDAyYmYzMGNmIC8vIG1ldGhvZCAiZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjExMi0xMTYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdnZXRCaWdCeXRlc0xlbmd0aCgpdWludDY0JyldLAogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTItMTE3CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTgKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8dWludDY0Pih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIwCiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSA0MDk2KQogICAgcHVzaGludCA0MDk2IC8vIDQwOTYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIyLTEyOAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI2CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI1CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyMi0xMjcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9uZXh0X3R4bkAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMjItMTI4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.arc56.json b/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.arc56.json index 1d454a3be..7d5dcca5f 100644 --- a/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.arc56.json +++ b/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.arc56.json @@ -145,11 +145,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA2IDEgNQogICAgYnl0ZWNibG9jayAweCAid29ybGQiIGJhc2U2NChDb0VCUXc9PSkgMHgxNTFmN2M3NSAweDI0Mzc4ZDNjIDB4ZDBhMjgyMDAgImhlbGxvIiAweDRjNWM2MWJhCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmExNzk5NWMgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhlMzI1NGJjOSAvLyBtZXRob2QgInRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTJiN2M2OTIgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpdm9pZCIKICAgIHB1c2hieXRlcyAweDAyOTQ3Y2EyIC8vIG1ldGhvZCAidGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzIG1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfcm91dGVANCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4X3JvdXRlQDUgbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2Vfcm91dGVANgoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgptYWluX3N3aXRjaF9jYXNlX25leHRAODoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2UKICAgIGludGNfMiAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjkKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozOAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3QoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTE6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTI6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmNyZWF0ZSksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBieXRlYyA2IC8vICJoZWxsbyIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjIDYgLy8gImhlbGxvIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE1CiAgICAvLyBnbG9iYWxOdW1CeXRlczogMSwKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4CiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG8pCiAgICBieXRlY18yIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KENpQUNBQUVtQWdobmNtVmxkR2x1WndBeEdFQUFBNGdBc2pFYkloTkJBSXcyR2dDQUJBQ1NKYTZBQkNRM2pUeUFCS0RvR0hLQUJOQ2lnZ0JQQkk0RUFFNEFQQUFxQUFJaVF6RVpJaEpFTVJnaUUwUTJHZ0ZYQWdDSUFGMUpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNDTkMvOWN4R1lFRUVrUXhHQ0lUUklnQU9TTkMvOFV4R1lFRkVrUXhHQ0lUUklnQUppTkMvN014R1NJU1JERVlJaEpFTmhvQlZ3SUFpQUFISTBML25FTC9tSW9CQUNpTC8yZUppWW1LQVFFaUtHVkVLVXhRZ0FFZ1VJdi9VSWtvS1dlSikKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBwdXNoYnl0ZXMgMHgwMDkyMjVhZSAvLyBtZXRob2QgImhlbGxvQ3JlYXRlKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwLTE2CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5jcmVhdGUpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmNyZWF0ZSksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE3CiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMC0xNwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTI0CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZ3JlZXQpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyMQogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5ncmVldCksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyMgogICAgLy8gYXBwSWQ6IGhlbGxvQXBwLAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIxCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmdyZWV0KSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlYyA1IC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxOS0yMwogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmdyZWV0KSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X25leHRfdHhuQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTI0CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZ3JlZXQpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyNQogICAgLy8gY29uc3QgcmVzdWx0ID0gZGVjb2RlQXJjNDxzdHJpbmc+KHR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChyZXN1bHQgPT09ICdoZWxsbyB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhlbGxvIHdvcmxkIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyOS0zNQogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5kZWxldGUpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozMwogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjMyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmRlbGV0ZSldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjktMzQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZGVsZXRlKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X25leHRfdHhuQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjI5LTM1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmRlbGV0ZSldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0NgogICAgLy8gZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MzkKICAgIC8vIGNvbnN0IGNvbXBpbGVkID0gY29tcGlsZShIZWxsb1RlbXBsYXRlLCB7IHRlbXBsYXRlVmFyczogeyBHUkVFVElORzogJ2hleScgfSB9KQogICAgYnl0ZWNfMiAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDaUFDQUFFbUF3aG5jbVZsZEdsdVp3QURhR1Y1TVJoQUFBT0lBSkV4R3lJVFFRQ0dOaG9BZ0FSTVhHRzZnQVFrTjQwOGdBU2c2Qmh5Z0FUUW9vSUFUd1NPQkFCT0FEd0FLZ0FDSWtNeEdTSVNSREVZSWhORU5ob0JWd0lBaUFCWFNSVVdWd1lDVEZDQUJCVWZmSFZNVUxBalF2L1hNUm1CQkJKRU1SZ2lFMFNJQURNalF2L0ZNUm1CQlJKRU1SZ2lFMFNJQUNBalF2K3pNUmtpRWtReEdDSVNSSWdBQnlOQy82SkMvNTZKaUFBWUtDcG5pWW1KaWdFQklpaGxSQ2xNVUlBQklGQ0wvMUNKS0NsbmlRPT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDcgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00NwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9zdWJtaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NDgKICAgIC8vIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUwLTU1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MwogICAgLy8gYXBwSWQ6IGhlbGxvQXBwLAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlYyA1IC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MC01NAogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfbmV4dF90eG5AMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTAtNTUKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1OAogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2hleSB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhleSB3b3JsZCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY0CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYwLTY2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS50ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3Mi03OQogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzcKICAgIC8vIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcwCiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCwgeyB0ZW1wbGF0ZVZhcnM6IHsgR1JFRVRJTkc6ICdib25qb3VyJyB9LCB0ZW1wbGF0ZVZhcnNQcmVmaXg6ICdQUkZYXycgfSkKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRW1Bd2huY21WbGRHbHVad0FIWW05dWFtOTFjakVZUUFBRGlBQ1JNUnNpRTBFQWhqWWFBSUFFVEZ4aHVvQUVKRGVOUElBRW9PZ1ljb0FFMEtLQ0FFOEVqZ1FBVGdBOEFDb0FBaUpETVJraUVrUXhHQ0lUUkRZYUFWY0NBSWdBVjBrVkZsY0dBa3hRZ0FRVkgzeDFURkN3STBMLzF6RVpnUVFTUkRFWUloTkVpQUF6STBML3hURVpnUVVTUkRFWUloTkVpQUFnSTBML3N6RVpJaEpFTVJnaUVrU0lBQWNqUXYraVF2K2VpWWdBR0NncVo0bUppWW9CQVNJb1pVUXBURkNBQVNCUWkvOVFpU2dwWjRrPSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcyLTc4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3OQogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODEtODYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg0CiAgICAvLyBhcHBJZDogaGVsbG9BcHAsCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjIDUgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgxLTg1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4MS04NgogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8c3RyaW5nPih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg5CiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSAnYm9uam91ciB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImJvbmpvdXIgd29ybGQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5NQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjk0CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NwogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMQogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKExhcmdlUHJvZ3JhbSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRXhHeUlUUVFCR05ob0FnQVFDdnpEUGdBUWtONDA4VHdLT0FnQVVBQUlpUXpFWmdRVVNSREVZSWhORWlBQkFJMEwvN1RFWkloSkVNUmdpRTBTSUFDb1dnQVFWSDN4MVRGQ3dJMEwvMGpFWklreU9BUUFEUXYvR01SZ2lFa1NJQUE4alF2KzdnWUFncjRtSS8vZ1ZpWW1KKQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTA5CiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2VfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAzLTExMAogICAgLy8gY29uc3QgbGFyZ2VBcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBleHRyYVByb2dyYW1QYWdlczogY29tcGlsZWQuZXh0cmFQcm9ncmFtUGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IGNvbXBpbGVkLmdsb2JhbEJ5dGVzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9zdWJtaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEwCiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEyLTExNwogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIHB1c2hieXRlcyAweDAyYmYzMGNmIC8vIG1ldGhvZCAiZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjExMi0xMTYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdnZXRCaWdCeXRlc0xlbmd0aCgpdWludDY0JyldLAogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTItMTE3CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTgKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8dWludDY0Pih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIwCiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSA0MDk2KQogICAgcHVzaGludCA0MDk2IC8vIDQwOTYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIyLTEyOAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI2CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI1CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyMi0xMjcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9uZXh0X3R4bkAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMjItMTI4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA2IDEgNQogICAgYnl0ZWNibG9jayAweCAid29ybGQiIGJhc2U2NChDb0VCUXc9PSkgMHgxNTFmN2M3NSAweDI0Mzc4ZDNjIDB4ZDBhMjgyMDAgImhlbGxvIiAweDRjNWM2MWJhCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmExNzk5NWMgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhlMzI1NGJjOSAvLyBtZXRob2QgInRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTJiN2M2OTIgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpdm9pZCIKICAgIHB1c2hieXRlcyAweDAyOTQ3Y2EyIC8vIG1ldGhvZCAidGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzIG1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfcm91dGVANCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4X3JvdXRlQDUgbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2Vfcm91dGVANgoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgptYWluX3N3aXRjaF9jYXNlX25leHRAODoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2UKICAgIGludGNfMiAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjkKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozOAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3QoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTE6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTI6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmNyZWF0ZSksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBieXRlYyA2IC8vICJoZWxsbyIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjIDYgLy8gImhlbGxvIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE1CiAgICAvLyBnbG9iYWxOdW1CeXRlczogMSwKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4CiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG8pCiAgICBieXRlY18yIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KENpQUNBQUVtQWdobmNtVmxkR2x1WndBeEdFQUFBNGdBc2pFYkloTkJBSXcyR2dDQUJBQ1NKYTZBQkNRM2pUeUFCS0RvR0hLQUJOQ2lnZ0JQQkk0RUFFNEFQQUFxQUFJaVF6RVpJaEpFTVJnaUUwUTJHZ0ZYQWdDSUFGMUpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNDTkMvOWN4R1lFRUVrUXhHQ0lUUklnQU9TTkMvOFV4R1lFRkVrUXhHQ0lUUklnQUppTkMvN014R1NJU1JERVlJaEpFTmhvQlZ3SUFpQUFISTBML25FTC9tSW9CQUNpTC8yZUppWW1LQVFFaUtHVkVLVXhRZ0FFZ1VJdi9VSWtvS1dlSikKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBwdXNoYnl0ZXMgMHgwMDkyMjVhZSAvLyBtZXRob2QgImhlbGxvQ3JlYXRlKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwLTE2CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5jcmVhdGUpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmNyZWF0ZSksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE3CiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMC0xNwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuY3JlYXRlKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTI0CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZ3JlZXQpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyMQogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5ncmVldCksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyMgogICAgLy8gYXBwSWQ6IGhlbGxvQXBwLAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIxCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmdyZWV0KSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlYyA1IC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxOS0yMwogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmdyZWV0KSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X25leHRfdHhuQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTI0CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZ3JlZXQpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyNQogICAgLy8gY29uc3QgcmVzdWx0ID0gZGVjb2RlQXJjNDxzdHJpbmc+KHR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChyZXN1bHQgPT09ICdoZWxsbyB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhlbGxvIHdvcmxkIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyOS0zNQogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKEhlbGxvLnByb3RvdHlwZS5kZWxldGUpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozMwogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjMyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmRlbGV0ZSldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjktMzQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcihIZWxsby5wcm90b3R5cGUuZGVsZXRlKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X25leHRfdHhuQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjI5LTM1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoSGVsbG8ucHJvdG90eXBlLmRlbGV0ZSldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0NgogICAgLy8gZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MzkKICAgIC8vIGNvbnN0IGNvbXBpbGVkID0gY29tcGlsZShIZWxsb1RlbXBsYXRlLCB7IHRlbXBsYXRlVmFyczogeyBHUkVFVElORzogJ2hleScgfSB9KQogICAgYnl0ZWNfMiAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDaUFDQUFFbUF3aG5jbVZsZEdsdVp3QURhR1Y1TVJoQUFBT0lBS1V4R3lJVFFRQ0dOaG9BZ0FSTVhHRzZnQVFrTjQwOGdBU2c2Qmh5Z0FUUW9vSUFUd1NPQkFCT0FEd0FLZ0FDSWtNeEdTSVNSREVZSWhORU5ob0JWd0lBaUFCUVNSVVdWd1lDVEZDQUJCVWZmSFZNVUxBalF2L1hNUm1CQkJKRU1SZ2lFMFNJQUN3alF2L0ZNUm1CQlJKRU1SZ2lFMFNJQUJralF2K3pNUmtpRWtReEdDSVNSSWdBQnlOQy82SkMvNTZKaVltS0FRRWlLR1ZFS1V4UWdBRWdVSXYvVUltSUFBUW9LbWVKS0NsbmlRPT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDcgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00NwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9zdWJtaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NDgKICAgIC8vIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUwLTU1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MwogICAgLy8gYXBwSWQ6IGhlbGxvQXBwLAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlYyA1IC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MC01NAogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfbmV4dF90eG5AMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTAtNTUKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1OAogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2hleSB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhleSB3b3JsZCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY0CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYwLTY2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS50ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3Mi03OQogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzcKICAgIC8vIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcwCiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCwgeyB0ZW1wbGF0ZVZhcnM6IHsgR1JFRVRJTkc6ICdib25qb3VyJyB9LCB0ZW1wbGF0ZVZhcnNQcmVmaXg6ICdQUkZYXycgfSkKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRW1Bd2huY21WbGRHbHVad0FIWW05dWFtOTFjakVZUUFBRGlBQ2xNUnNpRTBFQWhqWWFBSUFFVEZ4aHVvQUVKRGVOUElBRW9PZ1ljb0FFMEtLQ0FFOEVqZ1FBVGdBOEFDb0FBaUpETVJraUVrUXhHQ0lUUkRZYUFWY0NBSWdBVUVrVkZsY0dBa3hRZ0FRVkgzeDFURkN3STBMLzF6RVpnUVFTUkRFWUloTkVpQUFzSTBML3hURVpnUVVTUkRFWUloTkVpQUFaSTBML3N6RVpJaEpFTVJnaUVrU0lBQWNqUXYraVF2K2VpWW1KaWdFQklpaGxSQ2xNVUlBQklGQ0wvMUNKaUFBRUtDcG5pU2dwWjRrPSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcyLTc4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3OQogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODEtODYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg0CiAgICAvLyBhcHBJZDogaGVsbG9BcHAsCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjIDUgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgxLTg1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4MS04NgogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8c3RyaW5nPih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg5CiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSAnYm9uam91ciB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImJvbmpvdXIgd29ybGQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5NQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjk0CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NwogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMQogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKExhcmdlUHJvZ3JhbSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRXhHeUlUUVFCR05ob0FnQVFDdnpEUGdBUWtONDA4VHdLT0FnQVVBQUlpUXpFWmdRVVNSREVZSWhORWlBQkFJMEwvN1RFWkloSkVNUmdpRTBTSUFDb1dnQVFWSDN4MVRGQ3dJMEwvMGpFWklreU9BUUFEUXYvR01SZ2lFa1NJQUE4alF2KzdnWUFncjRtSS8vZ1ZpWW1KKQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTA5CiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2VfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAzLTExMAogICAgLy8gY29uc3QgbGFyZ2VBcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBleHRyYVByb2dyYW1QYWdlczogY29tcGlsZWQuZXh0cmFQcm9ncmFtUGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IGNvbXBpbGVkLmdsb2JhbEJ5dGVzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9zdWJtaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEwCiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEyLTExNwogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIHB1c2hieXRlcyAweDAyYmYzMGNmIC8vIG1ldGhvZCAiZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjExMi0xMTYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdnZXRCaWdCeXRlc0xlbmd0aCgpdWludDY0JyldLAogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTItMTE3CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTgKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8dWludDY0Pih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIwCiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSA0MDk2KQogICAgcHVzaGludCA0MDk2IC8vIDQwOTYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIyLTEyOAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI2CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI1CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyMi0xMjcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9uZXh0X3R4bkAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMjItMTI4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiAEAAYBBSYIAAV3b3JsZAQKgQFDBBUffHUEJDeNPATQooIABWhlbGxvBExcYboxGyITQQBtNhoAgAQqF5lcgATjJUvJgATit8aSgAQClHyiTwSOBAA1ACQAEwACIkMxGSISRDEYIhNEiAQJJEL/7jEZIhJEMRgiE0SIArskQv/dMRkiEkQxGCITRIgBdSRC/8wxGSISRDEYIhNEiAAbJEL/uzEZIkyOAQADQv+vMRgiEkSIBIkkQv+ksScGFRZXBgInBlAksjUqskIoskKAzwEKIAIAASYCCGdyZWV0aW5nADEYQAADiACyMRsiE0EAjDYaAIAEAJIlroAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAXUkVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiAA5I0L/xTEZgQUSRDEYIhNEiAAmI0L/szEZIhJEMRgiEkQ2GgFXAgCIAAcjQv+cQv+YigEAKIv/Z4mJiYoBASIoZUQpTFCAASBQi/9QiSgpZ4myQCiyQIAEAJIlrrIashojshAisgGztD1JsSkVFlcGAilQTLIYJwWyGrIaI7IQIrIBs7Q+SVcEAExXAAQrEkRXAgCAC2hlbGxvIHdvcmxkEkSxJbIZJwSyGrIYI7IQIrIBs4mxJLI1KrJCKLJCgM0BCiACAAEmAwhncmVldGluZwADaGV5MRhAAAOIAJExGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABXSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIADMjQv/FMRmBBRJEMRgiE0SIACAjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiAAYKCpniYmJigEBIihlRClMUIABIFCL/1CJKClnibJAKLJAJweyGiOyECKyAbO0PUmxKRUWVwYCKVBMshgnBbIashojshAisgGztD5JVwQATFcABCsSRFcCAIAJaGV5IHdvcmxkEkSxJbIZJwSyGrIYI7IQIrIBs4mxJLI1KrJCKLJCgNEBCiACAAEmAwhncmVldGluZwAHYm9uam91cjEYQAADiACRMRsiE0EAhjYaAIAETFxhuoAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAV0kVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiAAzI0L/xTEZgQUSRDEYIhNEiAAgI0L/szEZIhJEMRgiEkSIAAcjQv+iQv+eiYgAGCgqZ4mJiYoBASIoZUQpTFCAASBQi/9QiSgpZ4myQCiyQCcHshojshAisgGztD1JsSkVFlcGAilQTLIYJwWyGrIaI7IQIrIBs7Q+SVcEAExXAAQrEkRXAgCADWJvbmpvdXIgd29ybGQSRLElshknBLIashgjshAisgGzibEisjUisjgqskIoskKAdQogAgABMRsiE0EARjYaAIAEAr8wz4AEJDeNPE8CjgIAFAACIkMxGYEFEkQxGCITRIgAQCNC/+0xGSISRDEYIhNEiAAqFoAEFR98dUxQsCNC/9IxGSJMjgEAA0L/xjEYIhJEiAAPI0L/u4GAIK+JiP/4FYmJibJAKLJAI7IQIrIBs7Q9SbGyGIAEAr8wz7IaI7IQIrIBs7Q+SVcEAExXAAQrEkQXgYAgEkSxJbIZJwSyGrIYI7IQIrIBs4mJ", + "approval": "CiAEAAYBBSYIAAV3b3JsZAQKgQFDBBUffHUEJDeNPATQooIABWhlbGxvBExcYboxGyITQQBtNhoAgAQqF5lcgATjJUvJgATit8aSgAQClHyiTwSOBAA1ACQAEwACIkMxGSISRDEYIhNEiAQJJEL/7jEZIhJEMRgiE0SIArskQv/dMRkiEkQxGCITRIgBdSRC/8wxGSISRDEYIhNEiAAbJEL/uzEZIkyOAQADQv+vMRgiEkSIBIkkQv+ksScGFRZXBgInBlAksjUqskIoskKAzwEKIAIAASYCCGdyZWV0aW5nADEYQAADiACyMRsiE0EAjDYaAIAEAJIlroAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAXUkVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiAA5I0L/xTEZgQUSRDEYIhNEiAAmI0L/szEZIhJEMRgiEkQ2GgFXAgCIAAcjQv+cQv+YigEAKIv/Z4mJiYoBASIoZUQpTFCAASBQi/9QiSgpZ4myQCiyQIAEAJIlrrIashojshAisgGztD1JsSkVFlcGAilQTLIYJwWyGrIaI7IQIrIBs7Q+SVcEAExXAAQrEkRXAgCAC2hlbGxvIHdvcmxkEkSxJbIZJwSyGrIYI7IQIrIBs4mxJLI1KrJCKLJCgM0BCiACAAEmAwhncmVldGluZwADaGV5MRhAAAOIAKUxGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABQSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIACwjQv/FMRmBBRJEMRgiE0SIABkjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiYmKAQEiKGVEKUxQgAEgUIv/UImIAAQoKmeJKClnibJAKLJAJweyGiOyECKyAbO0PUmxKRUWVwYCKVBMshgnBbIashojshAisgGztD5JVwQATFcABCsSRFcCAIAJaGV5IHdvcmxkEkSxJbIZJwSyGrIYI7IQIrIBs4mxJLI1KrJCKLJCgNEBCiACAAEmAwhncmVldGluZwAHYm9uam91cjEYQAADiAClMRsiE0EAhjYaAIAETFxhuoAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAUEkVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiAAsI0L/xTEZgQUSRDEYIhNEiAAZI0L/szEZIhJEMRgiEkSIAAcjQv+iQv+eiYmJigEBIihlRClMUIABIFCL/1CJiAAEKCpniSgpZ4myQCiyQCcHshojshAisgGztD1JsSkVFlcGAilQTLIYJwWyGrIaI7IQIrIBs7Q+SVcEAExXAAQrEkRXAgCADWJvbmpvdXIgd29ybGQSRLElshknBLIashgjshAisgGzibEisjUisjgqskIoskKAdQogAgABMRsiE0EARjYaAIAEAr8wz4AEJDeNPE8CjgIAFAACIkMxGYEFEkQxGCITRIgAQCNC/+0xGSISRDEYIhNEiAAqFoAEFR98dUxQsCNC/9IxGSJMjgEAA0L/xjEYIhJEiAAPI0L/u4GAIK+JiP/4FYmJibJAKLJAI7IQIrIBs7Q9SbGyGIAEAr8wz7IaI7IQIrIBs7Q+SVcEAExXAAQrEkQXgYAgEkSxJbIZJwSyGrIYI7IQIrIBs4mJ", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.ir/HelloFactory.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.ir/HelloFactory.approval.1.ssa.array.ir index 59a124c42..e8752048f 100644 --- a/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.ir/HelloFactory.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.ir/HelloFactory.approval.1.ssa.array.ir @@ -135,7 +135,7 @@ subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compil ((itxn_field GlobalNumByteSlice) 1u) ((itxn_field ClearStateProgramPages) CoEBQw==) (itxn_field ClearStateProgramPages) - ((itxn_field ApprovalProgramPages) CiACAAEmAwhncmVldGluZwADaGV5MRhAAAOIAJExGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABXSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIADMjQv/FMRmBBRJEMRgiE0SIACAjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiAAYKCpniYmJigEBIihlRClMUIABIFCL/1CJKClniQ==) + ((itxn_field ApprovalProgramPages) CiACAAEmAwhncmVldGluZwADaGV5MRhAAAOIAKUxGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABQSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIACwjQv/FMRmBBRJEMRgiE0SIABkjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiYmKAQEiKGVEKUxQgAEgUIv/UImIAAQoKmeJKClniQ==) (itxn_field ApprovalProgramPages) ((itxn_field ApplicationArgs) method "create()void") ((itxn_field TypeEnum) 6u) @@ -185,7 +185,7 @@ subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compil ((itxn_field GlobalNumByteSlice) 1u) ((itxn_field ClearStateProgramPages) CoEBQw==) (itxn_field ClearStateProgramPages) - ((itxn_field ApprovalProgramPages) CiACAAEmAwhncmVldGluZwAHYm9uam91cjEYQAADiACRMRsiE0EAhjYaAIAETFxhuoAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAV0kVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiAAzI0L/xTEZgQUSRDEYIhNEiAAgI0L/szEZIhJEMRgiEkSIAAcjQv+iQv+eiYgAGCgqZ4mJiYoBASIoZUQpTFCAASBQi/9QiSgpZ4k=) + ((itxn_field ApprovalProgramPages) CiACAAEmAwhncmVldGluZwAHYm9uam91cjEYQAADiAClMRsiE0EAhjYaAIAETFxhuoAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAUEkVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiAAsI0L/xTEZgQUSRDEYIhNEiAAZI0L/szEZIhJEMRgiEkSIAAcjQv+iQv+eiYmJigEBIihlRClMUIABIFCL/1CJiAAEKCpniSgpZ4k=) (itxn_field ApprovalProgramPages) ((itxn_field ApplicationArgs) method "create()void") ((itxn_field TypeEnum) 6u) diff --git a/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.ir/HelloFactory.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.ir/HelloFactory.approval.2.ssa.slot.ir index 59a124c42..e8752048f 100644 --- a/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.ir/HelloFactory.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/precompiled-factory/HelloFactory.ir/HelloFactory.approval.2.ssa.slot.ir @@ -135,7 +135,7 @@ subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compil ((itxn_field GlobalNumByteSlice) 1u) ((itxn_field ClearStateProgramPages) CoEBQw==) (itxn_field ClearStateProgramPages) - ((itxn_field ApprovalProgramPages) CiACAAEmAwhncmVldGluZwADaGV5MRhAAAOIAJExGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABXSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIADMjQv/FMRmBBRJEMRgiE0SIACAjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiAAYKCpniYmJigEBIihlRClMUIABIFCL/1CJKClniQ==) + ((itxn_field ApprovalProgramPages) CiACAAEmAwhncmVldGluZwADaGV5MRhAAAOIAKUxGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABQSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIACwjQv/FMRmBBRJEMRgiE0SIABkjQv+zMRkiEkQxGCISRIgAByNC/6JC/56JiYmKAQEiKGVEKUxQgAEgUIv/UImIAAQoKmeJKClniQ==) (itxn_field ApprovalProgramPages) ((itxn_field ApplicationArgs) method "create()void") ((itxn_field TypeEnum) 6u) @@ -185,7 +185,7 @@ subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compil ((itxn_field GlobalNumByteSlice) 1u) ((itxn_field ClearStateProgramPages) CoEBQw==) (itxn_field ClearStateProgramPages) - ((itxn_field ApprovalProgramPages) CiACAAEmAwhncmVldGluZwAHYm9uam91cjEYQAADiACRMRsiE0EAhjYaAIAETFxhuoAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAV0kVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiAAzI0L/xTEZgQUSRDEYIhNEiAAgI0L/szEZIhJEMRgiEkSIAAcjQv+iQv+eiYgAGCgqZ4mJiYoBASIoZUQpTFCAASBQi/9QiSgpZ4k=) + ((itxn_field ApprovalProgramPages) CiACAAEmAwhncmVldGluZwAHYm9uam91cjEYQAADiAClMRsiE0EAhjYaAIAETFxhuoAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAUEkVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiAAsI0L/xTEZgQUSRDEYIhNEiAAZI0L/szEZIhJEMRgiEkSIAAcjQv+iQv+eiYmJigEBIihlRClMUIABIFCL/1CJiAAEKCpniSgpZ4k=) (itxn_field ApprovalProgramPages) ((itxn_field ApplicationArgs) method "create()void") ((itxn_field TypeEnum) 6u) diff --git a/tests/approvals/out/unoptimized/state-totals/BaseWithState.approval.teal b/tests/approvals/out/unoptimized/state-totals/BaseWithState.approval.teal index 0e11f9ceb..a244c012e 100644 --- a/tests/approvals/out/unoptimized/state-totals/BaseWithState.approval.teal +++ b/tests/approvals/out/unoptimized/state-totals/BaseWithState.approval.teal @@ -109,16 +109,20 @@ setState: retsub +// tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: +__algots__.defaultCreate: + retsub + + // tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: constructor: + +constructor_block@1: + +constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/state-totals.algo.ts:5 // oneGlobal = GlobalState({ initialValue: Uint64(1) }) bytec_0 // "oneGlobal" intc_1 // 1 app_global_put retsub - - -// tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: -__algots__.defaultCreate: - retsub diff --git a/tests/approvals/out/unoptimized/state-totals/BaseWithState.arc32.json b/tests/approvals/out/unoptimized/state-totals/BaseWithState.arc32.json index db25c9d4a..d39733839 100644 --- a/tests/approvals/out/unoptimized/state-totals/BaseWithState.arc32.json +++ b/tests/approvals/out/unoptimized/state-totals/BaseWithState.arc32.json @@ -7,7 +7,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAoKbWFpbl9hYmlfcm91dGluZ0A0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmNkOTVhYTEgLy8gbWV0aG9kICJzZXRTdGF0ZSh1aW50NjQpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fc2V0U3RhdGVfcm91dGVANQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzOgogICAgcmV0dXJuCgptYWluX3NldFN0YXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAoKbWFpbl9hYmlfcm91dGluZ0A0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmNkOTVhYTEgLy8gbWV0aG9kICJzZXRTdGF0ZSh1aW50NjQpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fc2V0U3RhdGVfcm91dGVANQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzOgogICAgcmV0dXJuCgptYWluX3NldFN0YXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6Cgpjb25zdHJ1Y3Rvcl9ibG9ja0AxOgoKY29uc3RydWN0b3JfYWZ0ZXJfaW5saW5lZF9AYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY29uc3RydWN0b3JAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/state-totals/BaseWithState.arc56.json b/tests/approvals/out/unoptimized/state-totals/BaseWithState.arc56.json index c475f5569..4b1c97764 100644 --- a/tests/approvals/out/unoptimized/state-totals/BaseWithState.arc56.json +++ b/tests/approvals/out/unoptimized/state-totals/BaseWithState.arc56.json @@ -104,11 +104,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAoKbWFpbl9hYmlfcm91dGluZ0A0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmNkOTVhYTEgLy8gbWV0aG9kICJzZXRTdGF0ZSh1aW50NjQpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fc2V0U3RhdGVfcm91dGVANQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzOgogICAgcmV0dXJuCgptYWluX3NldFN0YXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAoKbWFpbl9hYmlfcm91dGluZ0A0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmNkOTVhYTEgLy8gbWV0aG9kICJzZXRTdGF0ZSh1aW50NjQpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fc2V0U3RhdGVfcm91dGVANQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzOgogICAgcmV0dXJuCgptYWluX3NldFN0YXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6Cgpjb25zdHJ1Y3Rvcl9ibG9ja0AxOgoKY29uc3RydWN0b3JfYWZ0ZXJfaW5saW5lZF9AYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY29uc3RydWN0b3JAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAWTEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkiEkQxGCITRDYaAReIABsjQv/qMRkiTI4BAANC/94xGCISRIgAHiNC/9OKAQAoi/9ngAl0d29HbG9iYWyL/2eJKCNniYk=", + "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAWjEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkiEkQxGCITRDYaAReIABsjQv/qMRkiTI4BAANC/94xGCISRIgAGiNC/9OKAQAoi/9ngAl0d29HbG9iYWyL/2eJiSgjZ4k=", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir b/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir index 8486b5b8d..a0777844d 100644 --- a/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir @@ -54,11 +54,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: + block@0: // L4 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: - block@0: // L4 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.1.ssa.array.ir index 89b35d3aa..3a5b23439 100644 --- a/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.1.ssa.array.ir @@ -57,11 +57,15 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return -subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: block@0: // L4 - (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 + (app_global_put "oneGlobal" 1u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.2.ssa.slot.ir index 89b35d3aa..3a5b23439 100644 --- a/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/state-totals/BaseWithState.ir/BaseWithState.approval.2.ssa.slot.ir @@ -57,11 +57,15 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return -subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: block@0: // L4 - (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 + (app_global_put "oneGlobal" 1u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.approval.teal b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.approval.teal index f1eb2ec90..5f011a38b 100644 --- a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.approval.teal +++ b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.approval.teal @@ -138,16 +138,20 @@ tests/approvals/state-totals.algo.ts::BaseWithState.setState: retsub +// tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: +__algots__.defaultCreate: + retsub + + // tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: constructor: + +constructor_block@1: + +constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/state-totals.algo.ts:5 // oneGlobal = GlobalState({ initialValue: Uint64(1) }) bytec_0 // "oneGlobal" intc_1 // 1 app_global_put retsub - - -// tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: -__algots__.defaultCreate: - retsub diff --git a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.arc32.json b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.arc32.json index 3599eda46..3bca2e798 100644 --- a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.arc32.json +++ b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.arc32.json @@ -7,7 +7,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzEKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6RXh0ZW5kc1N1YldpdGhUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzEtMzIKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzMKICAgIC8vIHN1cGVyLnNldFN0YXRlKG4pCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzUKICAgIC8vIHRoaXMub25lTG9jYWwoVHhuLnNlbmRlcikudmFsdWUgPSBuCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjkKICAgIC8vIG9uZUxvY2FsID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAib25lTG9jYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzUKICAgIC8vIHRoaXMub25lTG9jYWwoVHhuLnNlbmRlcikudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZShuOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6RXh0ZW5kc1N1YldpdGhUb3RhbHMuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzEKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6RXh0ZW5kc1N1YldpdGhUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzEtMzIKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzMKICAgIC8vIHN1cGVyLnNldFN0YXRlKG4pCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzUKICAgIC8vIHRoaXMub25lTG9jYWwoVHhuLnNlbmRlcikudmFsdWUgPSBuCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjkKICAgIC8vIG9uZUxvY2FsID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAib25lTG9jYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzUKICAgIC8vIHRoaXMub25lTG9jYWwoVHhuLnNlbmRlcikudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZShuOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CmNvbnN0cnVjdG9yOgoKY29uc3RydWN0b3JfYmxvY2tAMToKCmNvbnN0cnVjdG9yX2FmdGVyX2lubGluZWRfQGFsZ29yYW5kZm91bmRhdGlvbi9hbGdvcmFuZC10eXBlc2NyaXB0L2Jhc2UtY29udHJhY3QuZC50czo6QmFzZUNvbnRyYWN0LmNvbnN0cnVjdG9yQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.arc56.json b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.arc56.json index d29044eb7..af840bdc2 100644 --- a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.arc56.json +++ b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.arc56.json @@ -109,11 +109,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzEKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6RXh0ZW5kc1N1YldpdGhUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzEtMzIKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzMKICAgIC8vIHN1cGVyLnNldFN0YXRlKG4pCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzUKICAgIC8vIHRoaXMub25lTG9jYWwoVHhuLnNlbmRlcikudmFsdWUgPSBuCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjkKICAgIC8vIG9uZUxvY2FsID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAib25lTG9jYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzUKICAgIC8vIHRoaXMub25lTG9jYWwoVHhuLnNlbmRlcikudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZShuOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6RXh0ZW5kc1N1YldpdGhUb3RhbHMuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzEKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6RXh0ZW5kc1N1YldpdGhUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzEtMzIKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzMKICAgIC8vIHN1cGVyLnNldFN0YXRlKG4pCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzUKICAgIC8vIHRoaXMub25lTG9jYWwoVHhuLnNlbmRlcikudmFsdWUgPSBuCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjkKICAgIC8vIG9uZUxvY2FsID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAib25lTG9jYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzUKICAgIC8vIHRoaXMub25lTG9jYWwoVHhuLnNlbmRlcikudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZShuOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CmNvbnN0cnVjdG9yOgoKY29uc3RydWN0b3JfYmxvY2tAMToKCmNvbnN0cnVjdG9yX2FmdGVyX2lubGluZWRfQGFsZ29yYW5kZm91bmRhdGlvbi9hbGdvcmFuZC10eXBlc2NyaXB0L2Jhc2UtY29udHJhY3QuZC50czo6QmFzZUNvbnRyYWN0LmNvbnN0cnVjdG9yQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAcTEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkjEkQxGCITRDYaAReIABsjQv/qMRkiTI4BAANC/94xGCISRIgANiNC/9OKAQCL/4gAEDEAgAhvbmVMb2NhbIv/ZomKAQAoi/9ngAl0d29HbG9iYWyL/2eJKCNniYk=", + "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAcjEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkjEkQxGCITRDYaAReIABsjQv/qMRkiTI4BAANC/94xGCISRIgAMiNC/9OKAQCL/4gAEDEAgAhvbmVMb2NhbIv/ZomKAQAoi/9ngAl0d29HbG9iYWyL/2eJiSgjZ4k=", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir index 4c4df7e59..47ab50b8e 100644 --- a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir @@ -61,11 +61,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: + block@0: // L27 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: - block@0: // L27 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.1.ssa.array.ir index cc9ad13dc..4005ba1c2 100644 --- a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.1.ssa.array.ir @@ -64,11 +64,15 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: + block@0: // L27 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "oneGlobal" 1u) - return - -subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: - block@0: // L27 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.2.ssa.slot.ir index cc9ad13dc..4005ba1c2 100644 --- a/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.2.ssa.slot.ir @@ -64,11 +64,15 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: + block@0: // L27 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "oneGlobal" 1u) - return - -subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: - block@0: // L27 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.approval.teal b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.approval.teal index bbae8d36a..e61364503 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.approval.teal +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.approval.teal @@ -115,16 +115,20 @@ setState: retsub +// tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: +__algots__.defaultCreate: + retsub + + // tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: constructor: + +constructor_block@1: + +constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/state-totals.algo.ts:5 // oneGlobal = GlobalState({ initialValue: Uint64(1) }) bytec_0 // "oneGlobal" intc_1 // 1 app_global_put retsub - - -// tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: -__algots__.defaultCreate: - retsub diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.arc32.json b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.arc32.json index 5341097d5..6faa8c05a 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.arc32.json +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.arc32.json @@ -7,7 +7,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3NldFN0YXRlX3JvdXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNC0yNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQsIGxvY2FsVWludHM6IDAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7fQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3NldFN0YXRlX3JvdXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNC0yNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQsIGxvY2FsVWludHM6IDAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7fQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CmNvbnN0cnVjdG9yOgoKY29uc3RydWN0b3JfYmxvY2tAMToKCmNvbnN0cnVjdG9yX2FmdGVyX2lubGluZWRfQGFsZ29yYW5kZm91bmRhdGlvbi9hbGdvcmFuZC10eXBlc2NyaXB0L2Jhc2UtY29udHJhY3QuZC50czo6QmFzZUNvbnRyYWN0LmNvbnN0cnVjdG9yQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.arc56.json b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.arc56.json index a7d6a11f5..bdc1a6d96 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.arc56.json +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.arc56.json @@ -104,11 +104,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3NldFN0YXRlX3JvdXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNC0yNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQsIGxvY2FsVWludHM6IDAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7fQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3NldFN0YXRlX3JvdXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNC0yNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQsIGxvY2FsVWludHM6IDAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7fQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CmNvbnN0cnVjdG9yOgoKY29uc3RydWN0b3JfYmxvY2tAMToKCmNvbnN0cnVjdG9yX2FmdGVyX2lubGluZWRfQGFsZ29yYW5kZm91bmRhdGlvbi9hbGdvcmFuZC10eXBlc2NyaXB0L2Jhc2UtY29udHJhY3QuZC50czo6QmFzZUNvbnRyYWN0LmNvbnN0cnVjdG9yQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAWTEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkiEkQxGCITRDYaAReIABsjQv/qMRkiTI4BAANC/94xGCISRIgAHiNC/9OKAQAoi/9ngAl0d29HbG9iYWyL/2eJKCNniYk=", + "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAWjEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkiEkQxGCITRDYaAReIABsjQv/qMRkiTI4BAANC/94xGCISRIgAGiNC/9OKAQAoi/9ngAl0d29HbG9iYWyL/2eJiSgjZ4k=", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir index cd5bdac35..37a285cdc 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir @@ -54,11 +54,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: + block@0: // L24 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: - block@0: // L24 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.1.ssa.array.ir index d5d135987..fc0235fd8 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.1.ssa.array.ir @@ -57,11 +57,15 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: + block@0: // L24 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "oneGlobal" 1u) - return - -subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: - block@0: // L24 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.2.ssa.slot.ir index d5d135987..fc0235fd8 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.2.ssa.slot.ir @@ -57,11 +57,15 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: + block@0: // L24 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "oneGlobal" 1u) - return - -subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: - block@0: // L24 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.approval.teal b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.approval.teal index c86127d59..d0d6eb534 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.approval.teal +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.approval.teal @@ -128,16 +128,20 @@ tests/approvals/state-totals.algo.ts::BaseWithState.setState: retsub +// tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: +__algots__.defaultCreate: + retsub + + // tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: constructor: + +constructor_block@1: + +constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/state-totals.algo.ts:5 // oneGlobal = GlobalState({ initialValue: Uint64(1) }) bytec_0 // "oneGlobal" intc_1 // 1 app_global_put retsub - - -// tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: -__algots__.defaultCreate: - retsub diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.arc32.json b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.arc32.json index d0eb3779c..ec0d9db2b 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.arc32.json +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.arc32.json @@ -7,7 +7,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE4CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTgKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgY2FsbHN1YiBzZXRTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhTdGF0ZSBleHRlbmRzIEJhc2VXaXRoU3RhdGUgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxOAogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxOQogICAgLy8gc3VwZXIuc2V0U3RhdGUobikKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNgogICAgLy8gdGhyZWVHbG9iYWwgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAidGhyZWVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjAKICAgIC8vIHRoaXMudGhyZWVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aFN0YXRlLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE4CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTgKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgY2FsbHN1YiBzZXRTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhTdGF0ZSBleHRlbmRzIEJhc2VXaXRoU3RhdGUgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxOAogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxOQogICAgLy8gc3VwZXIuc2V0U3RhdGUobikKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNgogICAgLy8gdGhyZWVHbG9iYWwgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAidGhyZWVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjAKICAgIC8vIHRoaXMudGhyZWVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKCmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgpjb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.arc56.json b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.arc56.json index ee9a91511..0a91dc7be 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.arc56.json +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.arc56.json @@ -114,11 +114,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE4CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTgKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgY2FsbHN1YiBzZXRTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhTdGF0ZSBleHRlbmRzIEJhc2VXaXRoU3RhdGUgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxOAogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxOQogICAgLy8gc3VwZXIuc2V0U3RhdGUobikKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNgogICAgLy8gdGhyZWVHbG9iYWwgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAidGhyZWVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjAKICAgIC8vIHRoaXMudGhyZWVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aFN0YXRlLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE4CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTgKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgY2FsbHN1YiBzZXRTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhTdGF0ZSBleHRlbmRzIEJhc2VXaXRoU3RhdGUgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxOAogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxOQogICAgLy8gc3VwZXIuc2V0U3RhdGUobikKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNgogICAgLy8gdGhyZWVHbG9iYWwgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAidGhyZWVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjAKICAgIC8vIHRoaXMudGhyZWVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKCmNvbnN0cnVjdG9yX2Jsb2NrQDE6Cgpjb25zdHJ1Y3Rvcl9hZnRlcl9pbmxpbmVkX0BhbGdvcmFuZGZvdW5kYXRpb24vYWxnb3JhbmQtdHlwZXNjcmlwdC9iYXNlLWNvbnRyYWN0LmQudHM6OkJhc2VDb250cmFjdC5jb25zdHJ1Y3RvckAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAcjEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkiEkQxGCITRDYaAReIABsjQv/qMRkiTI4BAANC/94xGCISRIgANyNC/9OKAQCL/4gAEYALdGhyZWVHbG9iYWyL/2eJigEAKIv/Z4AJdHdvR2xvYmFsi/9niSgjZ4mJ", + "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAczEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkiEkQxGCITRDYaAReIABsjQv/qMRkiTI4BAANC/94xGCISRIgAMyNC/9OKAQCL/4gAEYALdGhyZWVHbG9iYWyL/2eJigEAKIv/Z4AJdHdvR2xvYmFsi/9niYkoI2eJ", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir index bb5a730b5..e9b585d28 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir @@ -60,11 +60,16 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: + block@0: // L15 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "oneGlobal" 1u) return -subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: - block@0: // L15 +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.1.ssa.array.ir index 8eddf298c..a3f1d4b93 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.1.ssa.array.ir @@ -63,11 +63,15 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: + block@0: // L15 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "oneGlobal" 1u) - return - -subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: - block@0: // L15 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.2.ssa.slot.ir index 8eddf298c..a3f1d4b93 100644 --- a/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/state-totals/SubClassWithState.ir/SubClassWithState.approval.2.ssa.slot.ir @@ -63,11 +63,15 @@ subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint6 (app_global_put "twoGlobal" n#0) return +subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: + block@0: // L15 + return + subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "oneGlobal" 1u) - return - -subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: - block@0: // L15 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/state-totals/state-totals.awst b/tests/approvals/out/unoptimized/state-totals/state-totals.awst index 7096eda1e..6e5779337 100644 --- a/tests/approvals/out/unoptimized/state-totals/state-totals.awst +++ b/tests/approvals/out/unoptimized/state-totals/state-totals.awst @@ -26,13 +26,17 @@ contract BaseWithState GlobalState["twoGlobal"]: uint64 = n } + __algots__.defaultCreate(): void + { + } + constructor(): void { - void + super.constructor() GlobalState["oneGlobal"]: uint64 = 1 } - __algots__.defaultCreate(): void + BaseContract::constructor(): void { } @@ -73,13 +77,17 @@ contract SubClassWithState GlobalState["twoGlobal"]: uint64 = n } + __algots__.defaultCreate(): void + { + } + BaseWithState::constructor(): void { - void + super.constructor() GlobalState["oneGlobal"]: uint64 = 1 } - __algots__.defaultCreate(): void + BaseContract::constructor(): void { } @@ -112,13 +120,17 @@ contract SubClassWithExplicitTotals GlobalState["twoGlobal"]: uint64 = n } + __algots__.defaultCreate(): void + { + } + BaseWithState::constructor(): void { - void + super.constructor() GlobalState["oneGlobal"]: uint64 = 1 } - __algots__.defaultCreate(): void + BaseContract::constructor(): void { } @@ -158,13 +170,17 @@ contract ExtendsSubWithTotals GlobalState["twoGlobal"]: uint64 = n } + __algots__.defaultCreate(): void + { + } + BaseWithState::constructor(): void { - void + super.constructor() GlobalState["oneGlobal"]: uint64 = 1 } - __algots__.defaultCreate(): void + BaseContract::constructor(): void { } diff --git a/tests/approvals/out/unoptimized/state-totals/state-totals.awst.json b/tests/approvals/out/unoptimized/state-totals/state-totals.awst.json index 1f5743e5b..446e9ff33 100644 --- a/tests/approvals/out/unoptimized/state-totals/state-totals.awst.json +++ b/tests/approvals/out/unoptimized/state-totals/state-totals.awst.json @@ -505,6 +505,60 @@ "default_args": {} } }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 4, + "end_line": 4, + "column": 0, + "end_column": 45 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 4, + "end_line": 4, + "column": 0, + "end_column": 45 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": "Implicitly generated create method", + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/state-totals.algo.ts::BaseWithState", + "member_name": "__algots__.defaultCreate", + "arc4_method_config": { + "_type": "ARC4BareMethodConfig", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 4, + "end_line": 4, + "column": 0, + "end_column": 45 + }, + "allowed_completion_types": [ + 0 + ], + "create": 2 + } + }, { "_type": "ContractMethod", "source_location": { @@ -542,7 +596,7 @@ "end_column": 45 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/state-totals.algo.ts", "line": 4, @@ -556,7 +610,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -643,11 +702,12 @@ { "_type": "ContractMethod", "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 4, - "end_line": 4, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 45 + "end_column": 1 }, "args": [], "return_type": { @@ -660,11 +720,12 @@ "body": { "_type": "Block", "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 4, - "end_line": 4, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 45 + "end_column": 1 }, "body": [], "label": null, @@ -672,27 +733,14 @@ }, "documentation": { "_type": "MethodDocumentation", - "description": "Implicitly generated create method", + "description": null, "args": {}, "returns": null }, - "inline": null, - "cref": "tests/approvals/state-totals.algo.ts::BaseWithState", - "member_name": "__algots__.defaultCreate", - "arc4_method_config": { - "_type": "ARC4BareMethodConfig", - "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 4, - "end_line": 4, - "column": 0, - "end_column": 45 - }, - "allowed_completion_types": [ - 0 - ], - "create": 2 - } + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ @@ -1531,6 +1579,60 @@ "default_args": {} } }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 15, + "end_line": 15, + "column": 0, + "end_column": 54 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 15, + "end_line": 15, + "column": 0, + "end_column": 54 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": "Implicitly generated create method", + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/state-totals.algo.ts::SubClassWithState", + "member_name": "__algots__.defaultCreate", + "arc4_method_config": { + "_type": "ARC4BareMethodConfig", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 15, + "end_line": 15, + "column": 0, + "end_column": 54 + }, + "allowed_completion_types": [ + 0 + ], + "create": 2 + } + }, { "_type": "ContractMethod", "source_location": { @@ -1568,7 +1670,7 @@ "end_column": 45 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/state-totals.algo.ts", "line": 4, @@ -1582,7 +1684,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -1669,11 +1776,12 @@ { "_type": "ContractMethod", "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 15, - "end_line": 15, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 54 + "end_column": 1 }, "args": [], "return_type": { @@ -1686,11 +1794,12 @@ "body": { "_type": "Block", "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 15, - "end_line": 15, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 54 + "end_column": 1 }, "body": [], "label": null, @@ -1698,27 +1807,14 @@ }, "documentation": { "_type": "MethodDocumentation", - "description": "Implicitly generated create method", + "description": null, "args": {}, "returns": null }, - "inline": null, - "cref": "tests/approvals/state-totals.algo.ts::SubClassWithState", - "member_name": "__algots__.defaultCreate", - "arc4_method_config": { - "_type": "ARC4BareMethodConfig", - "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 15, - "end_line": 15, - "column": 0, - "end_column": 54 - }, - "allowed_completion_types": [ - 0 - ], - "create": 2 - } + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ @@ -2440,6 +2536,60 @@ "default_args": {} } }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 24, + "end_line": 25, + "column": 0, + "end_column": 64 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 24, + "end_line": 25, + "column": 0, + "end_column": 64 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": "Implicitly generated create method", + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals", + "member_name": "__algots__.defaultCreate", + "arc4_method_config": { + "_type": "ARC4BareMethodConfig", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 24, + "end_line": 25, + "column": 0, + "end_column": 64 + }, + "allowed_completion_types": [ + 0 + ], + "create": 2 + } + }, { "_type": "ContractMethod", "source_location": { @@ -2477,7 +2627,7 @@ "end_column": 45 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/state-totals.algo.ts", "line": 4, @@ -2491,7 +2641,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -2578,11 +2733,12 @@ { "_type": "ContractMethod", "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 24, - "end_line": 25, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 64 + "end_column": 1 }, "args": [], "return_type": { @@ -2595,11 +2751,12 @@ "body": { "_type": "Block", "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 24, - "end_line": 25, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 64 + "end_column": 1 }, "body": [], "label": null, @@ -2607,27 +2764,14 @@ }, "documentation": { "_type": "MethodDocumentation", - "description": "Implicitly generated create method", + "description": null, "args": {}, "returns": null }, - "inline": null, - "cref": "tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals", - "member_name": "__algots__.defaultCreate", - "arc4_method_config": { - "_type": "ARC4BareMethodConfig", - "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 24, - "end_line": 25, - "column": 0, - "end_column": 64 - }, - "allowed_completion_types": [ - 0 - ], - "create": 2 - } + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ @@ -3489,6 +3633,60 @@ "default_args": {} } }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 27, + "end_line": 28, + "column": 0, + "end_column": 70 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 27, + "end_line": 28, + "column": 0, + "end_column": 70 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": "Implicitly generated create method", + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals", + "member_name": "__algots__.defaultCreate", + "arc4_method_config": { + "_type": "ARC4BareMethodConfig", + "source_location": { + "file": "tests/approvals/state-totals.algo.ts", + "line": 27, + "end_line": 28, + "column": 0, + "end_column": 70 + }, + "allowed_completion_types": [ + 0 + ], + "create": 2 + } + }, { "_type": "ContractMethod", "source_location": { @@ -3526,7 +3724,7 @@ "end_column": 45 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/state-totals.algo.ts", "line": 4, @@ -3540,7 +3738,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -3627,11 +3830,12 @@ { "_type": "ContractMethod", "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 27, - "end_line": 28, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 70 + "end_column": 1 }, "args": [], "return_type": { @@ -3644,11 +3848,12 @@ "body": { "_type": "Block", "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 27, - "end_line": 28, + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, "column": 0, - "end_column": 70 + "end_column": 1 }, "body": [], "label": null, @@ -3656,27 +3861,14 @@ }, "documentation": { "_type": "MethodDocumentation", - "description": "Implicitly generated create method", + "description": null, "args": {}, "returns": null }, - "inline": null, - "cref": "tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals", - "member_name": "__algots__.defaultCreate", - "arc4_method_config": { - "_type": "ARC4BareMethodConfig", - "source_location": { - "file": "tests/approvals/state-totals.algo.ts", - "line": 27, - "end_line": 28, - "column": 0, - "end_column": 70 - }, - "allowed_completion_types": [ - 0 - ], - "create": 2 - } + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ diff --git a/tests/approvals/out/unoptimized/super-calls/SubContract.approval.teal b/tests/approvals/out/unoptimized/super-calls/SubContract.approval.teal index 06b2f9232..9e9725253 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubContract.approval.teal +++ b/tests/approvals/out/unoptimized/super-calls/SubContract.approval.teal @@ -55,6 +55,10 @@ constructor: // tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: tests/approvals/super-calls.algo.ts::SuperContract.constructor: + +tests/approvals/super-calls.algo.ts::SuperContract.constructor_block@1: + +tests/approvals/super-calls.algo.ts::SuperContract.constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/super-calls.algo.ts:5 // g1 = GlobalState({ initialValue: Uint64(1) }) bytec_0 // "g1" diff --git a/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir b/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir index f09712fcc..728f439b6 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir @@ -24,5 +24,10 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.1.ssa.array.ir index f09712fcc..9beb317a1 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.1.ssa.array.ir @@ -24,5 +24,9 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "g1" 1u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.2.ssa.slot.ir index f09712fcc..9beb317a1 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/super-calls/SubContract.ir/SubContract.approval.2.ssa.slot.ir @@ -24,5 +24,9 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "g1" 1u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/SubSubContract.approval.teal b/tests/approvals/out/unoptimized/super-calls/SubSubContract.approval.teal index 183990574..0d2c0fde9 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubSubContract.approval.teal +++ b/tests/approvals/out/unoptimized/super-calls/SubSubContract.approval.teal @@ -55,6 +55,10 @@ constructor: // tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: tests/approvals/super-calls.algo.ts::SuperContract.constructor: + +tests/approvals/super-calls.algo.ts::SuperContract.constructor_block@1: + +tests/approvals/super-calls.algo.ts::SuperContract.constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/super-calls.algo.ts:5 // g1 = GlobalState({ initialValue: Uint64(1) }) bytec_0 // "g1" diff --git a/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir b/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir index 6e4e09298..5543184c2 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir @@ -24,5 +24,10 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.1.ssa.array.ir index 6e4e09298..5ce10ac0e 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.1.ssa.array.ir @@ -24,5 +24,9 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "g1" 1u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.2.ssa.slot.ir index 6e4e09298..5ce10ac0e 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/super-calls/SubSubContract.ir/SubSubContract.approval.2.ssa.slot.ir @@ -24,5 +24,9 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "g1" 1u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.approval.teal b/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.approval.teal index 08bef17e9..ab1322a4b 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.approval.teal +++ b/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.approval.teal @@ -81,6 +81,10 @@ tests/approvals/super-calls.algo.ts::SubContract.constructor: // tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: tests/approvals/super-calls.algo.ts::SuperContract.constructor: + +tests/approvals/super-calls.algo.ts::SuperContract.constructor_block@1: + +tests/approvals/super-calls.algo.ts::SuperContract.constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/super-calls.algo.ts:5 // g1 = GlobalState({ initialValue: Uint64(1) }) bytec_0 // "g1" diff --git a/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir b/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir index c1abca70e..d9e0dba34 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir @@ -34,5 +34,10 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.1.ssa.array.ir index c1abca70e..98f5262ee 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.1.ssa.array.ir @@ -34,5 +34,9 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "g1" 1u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.2.ssa.slot.ir index c1abca70e..98f5262ee 100644 --- a/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.2.ssa.slot.ir @@ -34,5 +34,9 @@ subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> voi subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "g1" 1u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/SuperContract.approval.teal b/tests/approvals/out/unoptimized/super-calls/SuperContract.approval.teal index c57adaef4..dd80141b8 100644 --- a/tests/approvals/out/unoptimized/super-calls/SuperContract.approval.teal +++ b/tests/approvals/out/unoptimized/super-calls/SuperContract.approval.teal @@ -30,6 +30,10 @@ main_after_if_else@2: // tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: constructor: + +constructor_block@1: + +constructor_after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor@2: // tests/approvals/super-calls.algo.ts:5 // g1 = GlobalState({ initialValue: Uint64(1) }) bytec_0 // "g1" diff --git a/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir b/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir index c916dc08c..3f7b45db0 100644 --- a/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir @@ -14,5 +14,10 @@ main tests/approvals/super-calls.algo.ts::SuperContract.approvalProgram: subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() (app_global_put "g1" 1u) + return + +subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor() -> void: + block@0: // L1 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.1.ssa.array.ir index c916dc08c..3df6e0166 100644 --- a/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.1.ssa.array.ir @@ -14,5 +14,9 @@ main tests/approvals/super-calls.algo.ts::SuperContract.approvalProgram: subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "g1" 1u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.2.ssa.slot.ir index c916dc08c..3df6e0166 100644 --- a/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/super-calls/SuperContract.ir/SuperContract.approval.2.ssa.slot.ir @@ -14,5 +14,9 @@ main tests/approvals/super-calls.algo.ts::SuperContract.approvalProgram: subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: block@0: // L4 + goto block@1 + block@1: // L1 + goto block@2 + block@2: // after_inlined_@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.constructor_L4 (app_global_put "g1" 1u) return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/super-calls.awst b/tests/approvals/out/unoptimized/super-calls/super-calls.awst index 2e9e9e265..77e4923fd 100644 --- a/tests/approvals/out/unoptimized/super-calls/super-calls.awst +++ b/tests/approvals/out/unoptimized/super-calls/super-calls.awst @@ -24,10 +24,14 @@ contract SuperContract constructor(): void { - void + super.constructor() GlobalState["g1"]: uint64 = 1 } + BaseContract::constructor(): void + { + } + } contract SubContract { @@ -50,12 +54,6 @@ contract SubContract return True } - constructor(): void - { - super.constructor() - GlobalState["g2"]: uint64 = 2 - } - SuperContract::approvalProgram(): bool { assert(GlobalState["g1"] == 1) @@ -67,12 +65,22 @@ contract SubContract return True } + constructor(): void + { + super.constructor() + GlobalState["g2"]: uint64 = 2 + } + SuperContract::constructor(): void { - void + super.constructor() GlobalState["g1"]: uint64 = 1 } + BaseContract::constructor(): void + { + } + } contract SubSubContract { @@ -102,12 +110,6 @@ contract SubSubContract return True } - SubContract::constructor(): void - { - super.constructor() - GlobalState["g2"]: uint64 = 2 - } - SuperContract::approvalProgram(): bool { assert(GlobalState["g1"] == 1) @@ -119,12 +121,22 @@ contract SubSubContract return True } + SubContract::constructor(): void + { + super.constructor() + GlobalState["g2"]: uint64 = 2 + } + SuperContract::constructor(): void { - void + super.constructor() GlobalState["g1"]: uint64 = 1 } + BaseContract::constructor(): void + { + } + } contract SubSubSubContract { @@ -154,12 +166,6 @@ contract SubSubSubContract return super.superMethod() } - constructor(): void - { - super.constructor() - GlobalState["g3"]: uint64 = 3 - } - SubSubContract::approvalProgram(): bool { assert(GlobalState["g1"] == 1) @@ -174,12 +180,6 @@ contract SubSubSubContract return True } - SubContract::constructor(): void - { - super.constructor() - GlobalState["g2"]: uint64 = 2 - } - SuperContract::approvalProgram(): bool { assert(GlobalState["g1"] == 1) @@ -191,10 +191,26 @@ contract SubSubSubContract return True } + constructor(): void + { + super.constructor() + GlobalState["g3"]: uint64 = 3 + } + + SubContract::constructor(): void + { + super.constructor() + GlobalState["g2"]: uint64 = 2 + } + SuperContract::constructor(): void { - void + super.constructor() GlobalState["g1"]: uint64 = 1 } + BaseContract::constructor(): void + { + } + } \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/super-calls/super-calls.awst.json b/tests/approvals/out/unoptimized/super-calls/super-calls.awst.json index c01ae78b6..1b9d79541 100644 --- a/tests/approvals/out/unoptimized/super-calls/super-calls.awst.json +++ b/tests/approvals/out/unoptimized/super-calls/super-calls.awst.json @@ -503,7 +503,7 @@ "end_column": 49 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/super-calls.algo.ts", "line": 4, @@ -517,7 +517,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -600,6 +605,49 @@ "cref": "tests/approvals/super-calls.algo.ts::SuperContract", "member_name": "constructor", "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ @@ -1154,146 +1202,6 @@ "arc4_method_config": null }, "methods": [ - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 - }, - "body": [ - { - "_type": "ExpressionStatement", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 - }, - "expr": { - "_type": "SubroutineCallExpression", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 - }, - "wtype": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "target": { - "_type": "InstanceSuperMethodTarget", - "member_name": "constructor" - }, - "args": [] - } - }, - { - "_type": "AssignmentStatement", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 47 - }, - "target": { - "_type": "AppStateExpression", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 4 - }, - "wtype": { - "_type": "WType", - "name": "uint64", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "key": { - "_type": "BytesConstant", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 4 - }, - "wtype": { - "_type": "WType", - "name": "state_key", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "XEF", - "encoding": "utf8" - }, - "exists_assertion_message": null - }, - "value": { - "_type": "IntegerConstant", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 42, - "end_column": 43 - }, - "wtype": { - "_type": "WType", - "name": "uint64", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "value": "2", - "teal_alias": null - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": null, - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/super-calls.algo.ts::SubContract", - "member_name": "constructor", - "arc4_method_config": null - }, { "_type": "ContractMethod", "source_location": { @@ -1540,10 +1448,10 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 4, - "end_line": 4, + "line": 17, + "end_line": 17, "column": 0, - "end_column": 49 + "end_column": 48 }, "args": [], "return_type": { @@ -1557,29 +1465,29 @@ "_type": "Block", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 4, - "end_line": 4, + "line": 17, + "end_line": 17, "column": 0, - "end_column": 49 + "end_column": 48 }, "body": [ { "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 4, - "end_line": 4, + "line": 17, + "end_line": 17, "column": 0, - "end_column": 49 + "end_column": 48 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 4, - "end_line": 4, + "line": 17, + "end_line": 17, "column": 0, - "end_column": 49 + "end_column": 48 }, "wtype": { "_type": "WType", @@ -1587,15 +1495,20 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { "_type": "AssignmentStatement", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 5, - "end_line": 5, + "line": 18, + "end_line": 18, "column": 2, "end_column": 47 }, @@ -1603,8 +1516,8 @@ "_type": "AppStateExpression", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 5, - "end_line": 5, + "line": 18, + "end_line": 18, "column": 2, "end_column": 4 }, @@ -1619,8 +1532,8 @@ "_type": "BytesConstant", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 5, - "end_line": 5, + "line": 18, + "end_line": 18, "column": 2, "end_column": 4 }, @@ -1631,7 +1544,7 @@ "ephemeral": false, "scalar_type": 1 }, - "value": "XE6", + "value": "XEF", "encoding": "utf8" }, "exists_assertion_message": null @@ -1640,8 +1553,8 @@ "_type": "IntegerConstant", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 5, - "end_line": 5, + "line": 18, + "end_line": 18, "column": 42, "end_column": 43 }, @@ -1652,7 +1565,7 @@ "ephemeral": false, "scalar_type": 2 }, - "value": "1", + "value": "2", "teal_alias": null } } @@ -1667,24 +1580,207 @@ "returns": null }, "inline": null, - "cref": "tests/approvals/super-calls.algo.ts::SuperContract", + "cref": "tests/approvals/super-calls.algo.ts::SubContract", "member_name": "constructor", "arc4_method_config": null - } - ], - "app_state": [ + }, { - "_type": "AppStorageDefinition", + "_type": "ContractMethod", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 4 + "line": 4, + "end_line": 4, + "column": 0, + "end_column": 49 }, - "member_name": "g2", - "kind": 1, - "storage_wtype": { + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 4, + "end_line": 4, + "column": 0, + "end_column": 49 + }, + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 4, + "end_line": 4, + "column": 0, + "end_column": 49 + }, + "expr": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 4, + "end_line": 4, + "column": 0, + "end_column": 49 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] + } + }, + { + "_type": "AssignmentStatement", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 5, + "end_line": 5, + "column": 2, + "end_column": 47 + }, + "target": { + "_type": "AppStateExpression", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 5, + "end_line": 5, + "column": 2, + "end_column": 4 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "key": { + "_type": "BytesConstant", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 5, + "end_line": 5, + "column": 2, + "end_column": 4 + }, + "wtype": { + "_type": "WType", + "name": "state_key", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "XE6", + "encoding": "utf8" + }, + "exists_assertion_message": null + }, + "value": { + "_type": "IntegerConstant", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 5, + "end_line": 5, + "column": 42, + "end_column": 43 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "value": "1", + "teal_alias": null + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/super-calls.algo.ts::SuperContract", + "member_name": "constructor", + "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null + } + ], + "app_state": [ + { + "_type": "AppStorageDefinition", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 18, + "end_line": 18, + "column": 2, + "end_column": 4 + }, + "member_name": "g2", + "kind": 1, + "storage_wtype": { "_type": "WType", "name": "uint64", "immutable": true, @@ -2543,46 +2639,46 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 + "line": 7, + "end_line": 7, + "column": 2, + "end_column": 28 }, "args": [], "return_type": { "_type": "WType", - "name": "void", + "name": "bool", "immutable": true, "ephemeral": false, - "scalar_type": null + "scalar_type": 2 }, "body": { "_type": "Block", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 + "line": 7, + "end_line": 10, + "column": 29, + "end_column": 3 }, "body": [ { "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 + "line": 8, + "end_line": 8, + "column": 4, + "end_column": 31 }, "expr": { - "_type": "SubroutineCallExpression", + "_type": "AssertExpression", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 + "line": 8, + "end_line": 8, + "column": 4, + "end_column": 31 }, "wtype": { "_type": "WType", @@ -2591,148 +2687,8 @@ "ephemeral": false, "scalar_type": null }, - "target": { - "_type": "InstanceSuperMethodTarget", - "member_name": "constructor" - }, - "args": [] - } - }, - { - "_type": "AssignmentStatement", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 47 - }, - "target": { - "_type": "AppStateExpression", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 4 - }, - "wtype": { - "_type": "WType", - "name": "uint64", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "key": { - "_type": "BytesConstant", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 4 - }, - "wtype": { - "_type": "WType", - "name": "state_key", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "XEF", - "encoding": "utf8" - }, - "exists_assertion_message": null - }, - "value": { - "_type": "IntegerConstant", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 42, - "end_column": 43 - }, - "wtype": { - "_type": "WType", - "name": "uint64", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "value": "2", - "teal_alias": null - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": null, - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/super-calls.algo.ts::SubContract", - "member_name": "constructor", - "arc4_method_config": null - }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 7, - "end_line": 7, - "column": 2, - "end_column": 28 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "bool", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 7, - "end_line": 10, - "column": 29, - "end_column": 3 - }, - "body": [ - { - "_type": "ExpressionStatement", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 8, - "end_line": 8, - "column": 4, - "end_column": 31 - }, - "expr": { - "_type": "AssertExpression", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 8, - "end_line": 8, - "column": 4, - "end_column": 31 - }, - "wtype": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "condition": { - "_type": "NumericComparisonExpression", + "condition": { + "_type": "NumericComparisonExpression", "source_location": { "file": "tests/approvals/super-calls.algo.ts", "line": 8, @@ -2921,6 +2877,146 @@ "member_name": "superMethod", "arc4_method_config": null }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 48 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 48 + }, + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 48 + }, + "expr": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 48 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] + } + }, + { + "_type": "AssignmentStatement", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 18, + "end_line": 18, + "column": 2, + "end_column": 47 + }, + "target": { + "_type": "AppStateExpression", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 18, + "end_line": 18, + "column": 2, + "end_column": 4 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "key": { + "_type": "BytesConstant", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 18, + "end_line": 18, + "column": 2, + "end_column": 4 + }, + "wtype": { + "_type": "WType", + "name": "state_key", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "XEF", + "encoding": "utf8" + }, + "exists_assertion_message": null + }, + "value": { + "_type": "IntegerConstant", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 18, + "end_line": 18, + "column": 42, + "end_column": 43 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "value": "2", + "teal_alias": null + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/super-calls.algo.ts::SubContract", + "member_name": "constructor", + "arc4_method_config": null + }, { "_type": "ContractMethod", "source_location": { @@ -2958,7 +3054,7 @@ "end_column": 49 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/super-calls.algo.ts", "line": 4, @@ -2972,7 +3068,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -3055,9 +3156,52 @@ "cref": "tests/approvals/super-calls.algo.ts::SuperContract", "member_name": "constructor", "arc4_method_config": null - } - ], - "app_state": [ + }, + { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null + } + ], + "app_state": [ { "_type": "AppStorageDefinition", "source_location": { @@ -3827,160 +3971,6 @@ "member_name": "subSubSubMethod", "arc4_method_config": null }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 37, - "end_line": 40, - "column": 2, - "end_column": 3 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 37, - "end_line": 40, - "column": 16, - "end_column": 3 - }, - "body": [ - { - "_type": "Block", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 38, - "end_line": 38, - "column": 4, - "end_column": 11 - }, - "body": [ - { - "_type": "ExpressionStatement", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 38, - "end_line": 38, - "column": 4, - "end_column": 11 - }, - "expr": { - "_type": "SubroutineCallExpression", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 38, - "end_line": 38, - "column": 4, - "end_column": 11 - }, - "wtype": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "target": { - "_type": "InstanceSuperMethodTarget", - "member_name": "constructor" - }, - "args": [] - } - } - ], - "label": null, - "comment": null - }, - { - "_type": "AssignmentStatement", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 39, - "end_line": 39, - "column": 4, - "end_column": 21 - }, - "target": { - "_type": "AppStateExpression", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 36, - "end_line": 36, - "column": 2, - "end_column": 4 - }, - "wtype": { - "_type": "WType", - "name": "uint64", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "key": { - "_type": "BytesConstant", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 36, - "end_line": 36, - "column": 2, - "end_column": 4 - }, - "wtype": { - "_type": "WType", - "name": "state_key", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "XEO", - "encoding": "utf8" - }, - "exists_assertion_message": "check GlobalState exists" - }, - "value": { - "_type": "IntegerConstant", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 39, - "end_line": 39, - "column": 20, - "end_column": 21 - }, - "wtype": { - "_type": "WType", - "name": "uint64", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "value": "3", - "teal_alias": null - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": null, - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/super-calls.algo.ts::SubSubSubContract", - "member_name": "constructor", - "arc4_method_config": null - }, { "_type": "ContractMethod", "source_location": { @@ -4533,186 +4523,46 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 + "line": 7, + "end_line": 7, + "column": 2, + "end_column": 28 }, "args": [], "return_type": { "_type": "WType", - "name": "void", + "name": "bool", "immutable": true, "ephemeral": false, - "scalar_type": null + "scalar_type": 2 }, "body": { "_type": "Block", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 + "line": 7, + "end_line": 10, + "column": 29, + "end_column": 3 }, "body": [ { "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 + "line": 8, + "end_line": 8, + "column": 4, + "end_column": 31 }, "expr": { - "_type": "SubroutineCallExpression", + "_type": "AssertExpression", "source_location": { "file": "tests/approvals/super-calls.algo.ts", - "line": 17, - "end_line": 17, - "column": 0, - "end_column": 48 - }, - "wtype": { - "_type": "WType", - "name": "void", - "immutable": true, - "ephemeral": false, - "scalar_type": null - }, - "target": { - "_type": "InstanceSuperMethodTarget", - "member_name": "constructor" - }, - "args": [] - } - }, - { - "_type": "AssignmentStatement", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 47 - }, - "target": { - "_type": "AppStateExpression", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 4 - }, - "wtype": { - "_type": "WType", - "name": "uint64", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "key": { - "_type": "BytesConstant", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 2, - "end_column": 4 - }, - "wtype": { - "_type": "WType", - "name": "state_key", - "immutable": true, - "ephemeral": false, - "scalar_type": 1 - }, - "value": "XEF", - "encoding": "utf8" - }, - "exists_assertion_message": null - }, - "value": { - "_type": "IntegerConstant", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 18, - "end_line": 18, - "column": 42, - "end_column": 43 - }, - "wtype": { - "_type": "WType", - "name": "uint64", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "value": "2", - "teal_alias": null - } - } - ], - "label": null, - "comment": null - }, - "documentation": { - "_type": "MethodDocumentation", - "description": null, - "args": {}, - "returns": null - }, - "inline": null, - "cref": "tests/approvals/super-calls.algo.ts::SubContract", - "member_name": "constructor", - "arc4_method_config": null - }, - { - "_type": "ContractMethod", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 7, - "end_line": 7, - "column": 2, - "end_column": 28 - }, - "args": [], - "return_type": { - "_type": "WType", - "name": "bool", - "immutable": true, - "ephemeral": false, - "scalar_type": 2 - }, - "body": { - "_type": "Block", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 7, - "end_line": 10, - "column": 29, - "end_column": 3 - }, - "body": [ - { - "_type": "ExpressionStatement", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 8, - "end_line": 8, - "column": 4, - "end_column": 31 - }, - "expr": { - "_type": "AssertExpression", - "source_location": { - "file": "tests/approvals/super-calls.algo.ts", - "line": 8, - "end_line": 8, - "column": 4, - "end_column": 31 + "line": 8, + "end_line": 8, + "column": 4, + "end_column": 31 }, "wtype": { "_type": "WType", @@ -4911,6 +4761,300 @@ "member_name": "superMethod", "arc4_method_config": null }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 37, + "end_line": 40, + "column": 2, + "end_column": 3 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 37, + "end_line": 40, + "column": 16, + "end_column": 3 + }, + "body": [ + { + "_type": "Block", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 38, + "end_line": 38, + "column": 4, + "end_column": 11 + }, + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 38, + "end_line": 38, + "column": 4, + "end_column": 11 + }, + "expr": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 38, + "end_line": 38, + "column": 4, + "end_column": 11 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] + } + } + ], + "label": null, + "comment": null + }, + { + "_type": "AssignmentStatement", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 39, + "end_line": 39, + "column": 4, + "end_column": 21 + }, + "target": { + "_type": "AppStateExpression", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 36, + "end_line": 36, + "column": 2, + "end_column": 4 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "key": { + "_type": "BytesConstant", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 36, + "end_line": 36, + "column": 2, + "end_column": 4 + }, + "wtype": { + "_type": "WType", + "name": "state_key", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "XEO", + "encoding": "utf8" + }, + "exists_assertion_message": "check GlobalState exists" + }, + "value": { + "_type": "IntegerConstant", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 39, + "end_line": 39, + "column": 20, + "end_column": 21 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "value": "3", + "teal_alias": null + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/super-calls.algo.ts::SubSubSubContract", + "member_name": "constructor", + "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 48 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 48 + }, + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 48 + }, + "expr": { + "_type": "SubroutineCallExpression", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 17, + "end_line": 17, + "column": 0, + "end_column": 48 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] + } + }, + { + "_type": "AssignmentStatement", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 18, + "end_line": 18, + "column": 2, + "end_column": 47 + }, + "target": { + "_type": "AppStateExpression", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 18, + "end_line": 18, + "column": 2, + "end_column": 4 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "key": { + "_type": "BytesConstant", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 18, + "end_line": 18, + "column": 2, + "end_column": 4 + }, + "wtype": { + "_type": "WType", + "name": "state_key", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "value": "XEF", + "encoding": "utf8" + }, + "exists_assertion_message": null + }, + "value": { + "_type": "IntegerConstant", + "source_location": { + "file": "tests/approvals/super-calls.algo.ts", + "line": 18, + "end_line": 18, + "column": 42, + "end_column": 43 + }, + "wtype": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "value": "2", + "teal_alias": null + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/super-calls.algo.ts::SubContract", + "member_name": "constructor", + "arc4_method_config": null + }, { "_type": "ContractMethod", "source_location": { @@ -4948,7 +5092,7 @@ "end_column": 49 }, "expr": { - "_type": "VoidConstant", + "_type": "SubroutineCallExpression", "source_location": { "file": "tests/approvals/super-calls.algo.ts", "line": 4, @@ -4962,7 +5106,12 @@ "immutable": true, "ephemeral": false, "scalar_type": null - } + }, + "target": { + "_type": "InstanceSuperMethodTarget", + "member_name": "constructor" + }, + "args": [] } }, { @@ -5045,6 +5194,49 @@ "cref": "tests/approvals/super-calls.algo.ts::SuperContract", "member_name": "constructor", "arc4_method_config": null + }, + { + "_type": "ContractMethod", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "args": [], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "_type": "SourceLocation", + "file": null, + "line": 1, + "end_line": 1, + "column": 0, + "end_column": 1 + }, + "body": [], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": true, + "cref": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract", + "member_name": "constructor", + "arc4_method_config": null } ], "app_state": [ diff --git a/tests/expected-output/arc4-method-selector.algo.ts b/tests/expected-output/arc4-method-selector.algo.ts new file mode 100644 index 000000000..5fd30b973 --- /dev/null +++ b/tests/expected-output/arc4-method-selector.algo.ts @@ -0,0 +1,27 @@ +import { Contract } from '@algorandfoundation/algorand-typescript' +import { baremethod, methodSelector } from '@algorandfoundation/algorand-typescript/arc4' + +class ContractOne extends Contract { + test() { + // @expect-error bareMethod is not an ABI method + return methodSelector(ContractTwo.prototype.bareMethod) + } + + test2() { + // @epect-error Expected contract instance method, found someSubroutine + return methodSelector(someSubroutine) + } + test3() { + // @expect-error approvalProgram is not an ABI method + return methodSelector(ContractTwo.prototype.approvalProgram) + } +} + +class ContractTwo extends Contract { + @baremethod({ onCreate: 'allow' }) + bareMethod() {} +} + +function someSubroutine() { + return true +}