From 998bf8303d59b8b4a8a8465f7c2af0dc976f4bd8 Mon Sep 17 00:00:00 2001 From: sodium16 Date: Sat, 11 Apr 2026 06:59:49 +0530 Subject: [PATCH] temp push --- .../smart_contracts/algomint/contract.py | 25 + .../algomint/Algomint.approval.puya.map | 2469 ++++++++++++----- .../artifacts/algomint/Algomint.approval.teal | 227 +- .../artifacts/algomint/Algomint.arc56.json | 125 +- .../artifacts/algomint/algomint_client.py | 100 +- .../src/contracts/Algomint.ts | 76 +- .../src/hooks/useAlgoMint.ts | 67 +- .../hackalgo-frontend/src/pages/TradePage.tsx | 20 +- 8 files changed, 2335 insertions(+), 774 deletions(-) diff --git a/projects/hackalgo-contracts/smart_contracts/algomint/contract.py b/projects/hackalgo-contracts/smart_contracts/algomint/contract.py index 059e9b2..61f5d0a 100644 --- a/projects/hackalgo-contracts/smart_contracts/algomint/contract.py +++ b/projects/hackalgo-contracts/smart_contracts/algomint/contract.py @@ -156,6 +156,31 @@ def claim_payout(self, asset_id: UInt64) -> None: self.last_claimed_quarter[asset_id] = self.last_reported_quarter.value + @arc4.abimethod + def secondary_sale( + self, + asset_id: UInt64, + seller_payment: gtxn.PaymentTransaction, + royalty_payment: gtxn.PaymentTransaction, + asset_transfer: gtxn.AssetTransferTransaction, + ) -> None: + # 1. Security checks. + assert self.initialized.value + assert asset_id > UInt64(0) + assert self.minted_assets.get(asset_id, default=UInt64(0)) == UInt64(1) + + # 2. Verify seller payment. + assert seller_payment.receiver == asset_transfer.sender + + # 3. Verify royalty payment (10%). + expected_royalty = seller_payment.amount // UInt64(10) + assert royalty_payment.amount >= expected_royalty + assert royalty_payment.receiver == self.creator.value + + # 4. Verify asset transfer. + assert asset_transfer.xfer_asset.id == asset_id + assert asset_transfer.asset_receiver == seller_payment.sender + @arc4.abimethod(readonly=True) def get_pending_payout(self, asset_id: UInt64, address: Account) -> UInt64: assert self.initialized.value diff --git a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.puya.map b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.puya.map index 3cf4c57..94e1c9b 100644 --- a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.puya.map +++ b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../algomint/contract.py" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOQ;AAA8B;AAA9B;AACA;AAAiC;AAAjC;AACA;;AAAkC;AAAlC;AACA;;AAAiC;AAAjC;AACA;;AAA8B;AAA9B;AACA;;AAAkC;AAAlC;AACA;;AAAmC;AAAnC;AACA;AAAyC;AAAzC;AACA;;AAAwC;AAAxC;AACA;;AAAkC;AAAlC;AACA;AAA+B;AAA/B;AAdR;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;AAAA;;;;;;;;;;;AAqBK;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAUc;AAAA;AAAA;AAAA;AAAJ;AAAP;AACA;;AAAA;AACA;;AAAA;AACO;;AAAiB;;;AAAjB;AAAP;AACA;;AAAA;AACA;;AAAA;AACA;;AAAA;AAEO;AAAA;;AAAsB;;AAAtB;AAAP;AACO;AAAA;;AAAwB;;AAAxB;AAAP;AAEO;;AAAsB;;;;AAAtB;AAAP;AAEA;;AAAqB;;AAArB;AACA;AAAA;;AAAA;AACA;AAAA;;AAAA;AACA;;AAAA;;AAAA;AACA;;AAAA;;AAAA;AACA;;AAAA;AAAA;AAC6B;AAAA;AAAA;AAAA;AAA4B;AAAA;AAAA;AAAA;AAA5B;AAA7B;;AAAA;AAAA;AACA;AAAyB;AAAzB;AAGW;AAAnB;AAAA;;AAAA;AAAA;;;AACsB;AAQE;;AACA;;;;;AAFJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFM;;;;;;;;;AADC;;;;;;;;;;;;;;;;;;;;;;AADI;;;AADN;;;AADH;;;AADA;;;;AAUF;;;AAVE;;;;;AAYtB;AAAA;;;AACgB;;AAAA;;AAAA;AACe;;AAAA;AAAnB;;AAAA;AAAA;AAA+C;AAA/C;AAAA;AAfO;AAAA;AAAA;;;;;;AAjCd;AAAA;AAkDA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAOU;AAAA;AAAA;AAAA;AAAP;AACA;;AAAA;AAC8B;;AAAA;AAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AAKO;;AAAA;;AAAiB;;AAAjB;AAAP;AACO;;AAAA;;AAAyB;;AAAzB;AAAP;AACO;;AAAA;;AAAA;;AAAA;AAAP;AACO;AAAA;;AAAA;AAAP;AAEO;AAAA;;AAAkB;;AAAlB;AAAP;AACO;AAAA;;AAAoB;;AAApB;AAAP;AACO;;AAAkB;AAAA;;AAAA;AAAA;AAAlB;;AAAA;AAAP;AAE0D;;AAAjC;;AAAA;;AACzB;AACsB;AAAf;AAAP;AAGA;AAEmB;;AACF;;;;;;;;AAHjB;;;;AAIQ;;;AAJR;AAMA;AACa;AAAA;;AAAA;AAAA;;;;;AADb;;;AAGQ;;;AAHR;AAlCH;AAAA;AAwCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAIU;AAAA;AAAA;AAAA;AAAP;AACO;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAP;AACiB;AAAA;AAAA;AAAA;AAAV;;AAAA;AAAP;AACA;;AAAA;AAEgC;AAAA;AAAA;AAAA;AAAhB;;AAAA;AAA6C;;;AAA9C;AACf;AAAA;AAGO;;AAAA;;AAAyB;;AAAzB;AAAP;AACO;;AAAA;;AAA2B;;AAA3B;AAAP;AACO;AAAA;;AAAA;;AAAA;AAAP;AAEA;AAAA;;AAAA;AACA;;AAAA;;AAAA;AAC4C;AAAA;AAAA;AAAA;AAAhB;AAA5B;;AAAA;AAAA;AAnBH;AAAA;AAqBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEU;AAAA;AAAA;AAAA;AAAP;AACA;AAAA;AAC8B;AAAA;AAAvB;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AACO;AAAA;AAAA;AAAA;AAAP;AAAA;AAEgE;;AAAjC;;AAAA;;AAC/B;AACyB;AAAlB;AAAP;AAEU;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgD;AAAhD;AAAA;;AAAA;AACH;;AAAA;AAAP;AACO;AAAA;;AAAA;AAAA;AAAP;AAAA;AAEA;AAEa;;;;;;AAFb;;;AAGQ;;;AAHR;AAMA;AAAA;AAAA;AArBH;AAAA;;;AAuBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAEU;AAAA;AAAA;AAAA;AAAP;AACA;;AAAA;AAC8B;AAAA;AAAA;AAAA;;AAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AACkB;;AAAX;AAAP;AAEG;AAAA;AAAA;AAAA;AAAX;;;AACmB;AARd;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUkC;;AAAA;;AAAA;;AAAA;AAAA;;AAC5B;;;AACQ;AAZd;;;AAaM;;AAAkB;AAAlB;AAAX;;;AACmB;AAdd;;;AAgBa;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAgD;AAAhD;AAAA;;AAAA;AACG;AAAA;AAAA;AAAA;AAAV;AAAX;;;AACmB;AAAA;;AAAA;AAAA;AAlBd;;;AAmBU;AAnBV;;;;AA4BU;AAAA;AAAA;AAAA;AAAJ;;;AAEK;;AAAA;;AACA;AACA;;AAXX;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBO;AAAA;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;;;;;AAxBP", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOQ;AAA8B;AAA9B;AACA;AAAiC;AAAjC;AACA;;AAAkC;AAAlC;AACA;;AAAiC;AAAjC;AACA;;AAA8B;AAA9B;AACA;;AAAkC;AAAlC;AACA;;AAAmC;AAAnC;AACA;AAAyC;AAAzC;AACA;;AAAwC;AAAxC;AACA;;AAAkC;AAAlC;AACA;AAA+B;AAA/B;AAdR;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;AAqBK;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAUc;AAAA;AAAA;AAAA;AAAJ;AAAP;AACA;;AAAA;AACA;;AAAA;AACO;;AAAiB;;;AAAjB;AAAP;AACA;;AAAA;AACA;;AAAA;AACA;;AAAA;AAEO;AAAA;;AAAsB;;AAAtB;AAAP;AACO;AAAA;;AAAwB;;AAAxB;AAAP;AAEO;;AAAsB;;;;AAAtB;AAAP;AAEA;;AAAqB;;AAArB;AACA;AAAA;;AAAA;AACA;AAAA;;AAAA;AACA;;AAAA;;AAAA;AACA;;AAAA;;AAAA;AACA;;AAAA;AAAA;AAC6B;AAAA;AAAA;AAAA;AAA4B;AAAA;AAAA;AAAA;AAA5B;AAA7B;;AAAA;AAAA;AACA;AAAyB;AAAzB;AAGW;AAAnB;AAAA;;AAAA;AAAA;;;AACsB;AAQE;;AACA;;;;;AAFJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFM;;;;;;;;;AADC;;;;;;;;;;;;;;;;;;;;;;AADI;;;AADN;;;AADH;;;AADA;;;;AAUF;;;AAVE;;;;;AAYtB;AAAA;;;AACgB;;AAAA;;AAAA;AACe;;AAAA;AAAnB;;AAAA;AAAA;AAA+C;AAA/C;AAAA;AAfO;AAAA;AAAA;;;;;;AAjCd;AAAA;AAkDA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAOU;AAAA;AAAA;AAAA;AAAP;AACA;;AAAA;AAC8B;;AAAA;AAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AAKO;;AAAA;;AAAiB;;AAAjB;AAAP;AACO;;AAAA;;AAAyB;;AAAzB;AAAP;AACO;;AAAA;;AAAA;;AAAA;AAAP;AACO;AAAA;;AAAA;AAAP;AAEO;AAAA;;AAAkB;;AAAlB;AAAP;AACO;AAAA;;AAAoB;;AAApB;AAAP;AACO;;AAAkB;AAAA;;AAAA;AAAA;AAAlB;;AAAA;AAAP;AAE0D;;AAAjC;;AAAA;;AACzB;AACsB;AAAf;AAAP;AAGA;AAEmB;;AACF;;;;;;;;AAHjB;;;;AAIQ;;;AAJR;AAMA;AACa;AAAA;;AAAA;AAAA;;;;;AADb;;;AAGQ;;;AAHR;AAlCH;AAAA;AAwCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAIU;AAAA;AAAA;AAAA;AAAP;AACO;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAP;AACiB;AAAA;AAAA;AAAA;AAAV;;AAAA;AAAP;AACA;;AAAA;AAEgC;AAAA;AAAA;AAAA;AAAhB;;AAAA;AAA6C;;;AAA9C;AACf;AAAA;AAGO;;AAAA;;AAAyB;;AAAzB;AAAP;AACO;;AAAA;;AAA2B;;AAA3B;AAAP;AACO;AAAA;;AAAA;;AAAA;AAAP;AAEA;AAAA;;AAAA;AACA;;AAAA;;AAAA;AAC4C;AAAA;AAAA;AAAA;AAAhB;AAA5B;;AAAA;AAAA;AAnBH;AAAA;AAqBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEU;AAAA;AAAA;AAAA;AAAP;AACA;AAAA;AAC8B;AAAA;AAAvB;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AACO;AAAA;AAAA;AAAA;AAAP;AAAA;AAEgE;;AAAjC;;AAAA;;AAC/B;AACyB;AAAlB;AAAP;AAEU;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgD;AAAhD;AAAA;;AAAA;AACH;;AAAA;AAAP;AACO;AAAA;;AAAA;AAAA;AAAP;AAAA;AAEA;AAEa;;;;;;AAFb;;;AAGQ;;;AAHR;AAMA;AAAA;AAAA;AArBH;AAAA;AAuBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AASU;AAAA;AAAA;AAAA;AAAP;AACA;;AAAA;AAC8B;;AAAA;AAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AAGO;;AAAA;;AAA2B;;AAAA;;AAA3B;AAAP;AAGmB;;AAAA;;AAAyB;;AAAzB;AACZ;;AAAA;;AAAA;AAAP;AACO;AAAA;;AAA4B;AAAA;;AAAA;AAAA;AAA5B;AAAP;AAGO;AAAA;;AAAA;;AAAA;AAAP;AACO;;AAAiC;AAAA;;AAAjC;AAAP;AAvBH;AAAA;;;AAyBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAEU;AAAA;AAAA;AAAA;AAAP;AACA;;AAAA;AAC8B;AAAA;AAAA;AAAA;;AAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AACkB;;AAAX;AAAP;AAEG;AAAA;AAAA;AAAA;AAAX;;;AACmB;AARd;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUkC;;AAAA;;AAAA;;AAAA;AAAA;;AAC5B;;;AACQ;AAZd;;;AAaM;;AAAkB;AAAlB;AAAX;;;AACmB;AAdd;;;AAgBa;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAgD;AAAhD;AAAA;;AAAA;AACG;AAAA;AAAA;AAAA;AAAV;AAAX;;;AACmB;AAAA;;AAAA;AAAA;AAlBd;;;AAmBU;AAnBV;;;;AA4BU;AAAA;AAAA;AAAA;AAAJ;;;AAEK;;AAAA;;AACA;AACA;;AAXX;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBO;AAAA;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;;;;;AAxBP", "op_pc_offset": 0, "pc_events": { "1": { @@ -14,7 +14,7 @@ "op": "intcblock 0 1 8 1000" }, "8": { - "op": "bytecblock \"initialized\" \"last_reported_quarter\" \"total_nfts\" \"total_pct_bps\" \"sale_price\" \"payout_per_nft\" \"creator\" \"ma_\" \"duration_years\" \"start_quarter\" \"first_asset_id\" \"pct_per_nft_bps\" \"last_reported_income\" \"lc_\" 0x151f7c75" + "op": "bytecblock \"initialized\" \"last_reported_quarter\" \"total_nfts\" \"total_pct_bps\" \"creator\" \"ma_\" \"sale_price\" \"payout_per_nft\" \"duration_years\" \"start_quarter\" \"first_asset_id\" \"pct_per_nft_bps\" \"last_reported_income\" \"lc_\" 0x151f7c75" }, "197": { "op": "txn ApplicationID", @@ -114,7 +114,7 @@ "stack_out": [] }, "216": { - "op": "bytec 4 // \"sale_price\"", + "op": "bytec 6 // \"sale_price\"", "defined_out": [ "\"sale_price\"" ], @@ -214,7 +214,7 @@ "stack_out": [] }, "235": { - "op": "bytec 5 // \"payout_per_nft\"", + "op": "bytec 7 // \"payout_per_nft\"", "defined_out": [ "\"payout_per_nft\"" ], @@ -265,7 +265,7 @@ ] }, "244": { - "op": "bz main___algopy_default_create@15", + "op": "bz main___algopy_default_create@16", "stack_out": [] }, "247": { @@ -304,25 +304,27 @@ "stack_out": [] }, "254": { - "op": "pushbytess 0xac6e1a04 0xdd980e6d 0xbd8dc97e 0x945f1777 0x57377178 0xbefc16c5 // method \"mint_future_nft(uint64,uint64,uint64,uint64,uint64,pay)void\", method \"buy_nft(uint64,axfer,pay)void\", method \"report_income(uint64,uint64,pay)void\", method \"claim_payout(uint64)void\", method \"get_pending_payout(uint64,address)uint64\", method \"get_terms()(address,uint64,uint64,uint64,uint64,uint64,uint64)\"", + "op": "pushbytess 0xac6e1a04 0xdd980e6d 0xbd8dc97e 0x945f1777 0xf4b2deed 0x57377178 0xbefc16c5 // method \"mint_future_nft(uint64,uint64,uint64,uint64,uint64,pay)void\", method \"buy_nft(uint64,axfer,pay)void\", method \"report_income(uint64,uint64,pay)void\", method \"claim_payout(uint64)void\", method \"secondary_sale(uint64,pay,pay,axfer)void\", method \"get_pending_payout(uint64,address)uint64\", method \"get_terms()(address,uint64,uint64,uint64,uint64,uint64,uint64)\"", "defined_out": [ "Method(buy_nft(uint64,axfer,pay)void)", "Method(claim_payout(uint64)void)", "Method(get_pending_payout(uint64,address)uint64)", "Method(get_terms()(address,uint64,uint64,uint64,uint64,uint64,uint64))", "Method(mint_future_nft(uint64,uint64,uint64,uint64,uint64,pay)void)", - "Method(report_income(uint64,uint64,pay)void)" + "Method(report_income(uint64,uint64,pay)void)", + "Method(secondary_sale(uint64,pay,pay,axfer)void)" ], "stack_out": [ "Method(mint_future_nft(uint64,uint64,uint64,uint64,uint64,pay)void)", "Method(buy_nft(uint64,axfer,pay)void)", "Method(report_income(uint64,uint64,pay)void)", "Method(claim_payout(uint64)void)", + "Method(secondary_sale(uint64,pay,pay,axfer)void)", "Method(get_pending_payout(uint64,address)uint64)", "Method(get_terms()(address,uint64,uint64,uint64,uint64,uint64,uint64))" ] }, - "286": { + "291": { "op": "txna ApplicationArgs 0", "defined_out": [ "Method(buy_nft(uint64,axfer,pay)void)", @@ -331,6 +333,7 @@ "Method(get_terms()(address,uint64,uint64,uint64,uint64,uint64,uint64))", "Method(mint_future_nft(uint64,uint64,uint64,uint64,uint64,pay)void)", "Method(report_income(uint64,uint64,pay)void)", + "Method(secondary_sale(uint64,pay,pay,axfer)void)", "tmp%6#0" ], "stack_out": [ @@ -338,20 +341,21 @@ "Method(buy_nft(uint64,axfer,pay)void)", "Method(report_income(uint64,uint64,pay)void)", "Method(claim_payout(uint64)void)", + "Method(secondary_sale(uint64,pay,pay,axfer)void)", "Method(get_pending_payout(uint64,address)uint64)", "Method(get_terms()(address,uint64,uint64,uint64,uint64,uint64,uint64))", "tmp%6#0" ] }, - "289": { - "op": "match mint_future_nft buy_nft report_income claim_payout get_pending_payout get_terms", + "294": { + "op": "match mint_future_nft buy_nft report_income claim_payout secondary_sale get_pending_payout get_terms", "stack_out": [] }, - "303": { + "310": { "op": "err" }, - "304": { - "block": "main___algopy_default_create@15", + "311": { + "block": "main___algopy_default_create@16", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ @@ -361,7 +365,7 @@ "tmp%7#0" ] }, - "306": { + "313": { "op": "!", "defined_out": [ "tmp%8#0" @@ -370,7 +374,7 @@ "tmp%8#0" ] }, - "307": { + "314": { "op": "txn ApplicationID", "defined_out": [ "tmp%8#0", @@ -381,7 +385,7 @@ "tmp%9#0" ] }, - "309": { + "316": { "op": "!", "defined_out": [ "tmp%10#0", @@ -392,7 +396,7 @@ "tmp%10#0" ] }, - "310": { + "317": { "op": "&&", "defined_out": [ "tmp%11#0" @@ -401,12 +405,12 @@ "tmp%11#0" ] }, - "311": { + "318": { "op": "return", "defined_out": [], "stack_out": [] }, - "312": { + "319": { "subroutine": "smart_contracts.algomint.contract.Algomint.mint_future_nft[routing]", "params": {}, "block": "mint_future_nft", @@ -416,7 +420,7 @@ "created.CreatedAssetID#0" ] }, - "314": { + "321": { "op": "txna ApplicationArgs 1", "defined_out": [ "tmp%0#0" @@ -426,7 +430,7 @@ "tmp%0#0" ] }, - "317": { + "324": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -438,7 +442,7 @@ "tmp%0#0 (copy)" ] }, - "318": { + "325": { "op": "len", "defined_out": [ "len%0#0", @@ -450,7 +454,7 @@ "len%0#0" ] }, - "319": { + "326": { "op": "intc_2 // 8", "defined_out": [ "8", @@ -464,7 +468,7 @@ "8" ] }, - "320": { + "327": { "op": "==", "defined_out": [ "eq%0#0", @@ -476,7 +480,7 @@ "eq%0#0" ] }, - "321": { + "328": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ @@ -484,7 +488,7 @@ "tmp%0#0" ] }, - "322": { + "329": { "op": "btoi", "defined_out": [ "total_nfts#0" @@ -494,7 +498,7 @@ "total_nfts#0" ] }, - "323": { + "330": { "op": "dup", "defined_out": [ "total_nfts#0" @@ -505,7 +509,7 @@ "total_nfts#0" ] }, - "324": { + "331": { "op": "txna ApplicationArgs 2", "defined_out": [ "tmp%2#0", @@ -518,7 +522,7 @@ "tmp%2#0" ] }, - "327": { + "334": { "op": "dup", "defined_out": [ "tmp%2#0", @@ -533,7 +537,7 @@ "tmp%2#0 (copy)" ] }, - "328": { + "335": { "op": "len", "defined_out": [ "len%1#0", @@ -548,7 +552,7 @@ "len%1#0" ] }, - "329": { + "336": { "op": "intc_2 // 8", "stack_out": [ "created.CreatedAssetID#0", @@ -559,7 +563,7 @@ "8" ] }, - "330": { + "337": { "op": "==", "defined_out": [ "eq%1#0", @@ -574,7 +578,7 @@ "eq%1#0" ] }, - "331": { + "338": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ @@ -584,7 +588,7 @@ "tmp%2#0" ] }, - "332": { + "339": { "op": "btoi", "defined_out": [ "total_nfts#0", @@ -597,7 +601,7 @@ "total_pct_bps#0" ] }, - "333": { + "340": { "op": "txna ApplicationArgs 3", "defined_out": [ "tmp%4#0", @@ -612,7 +616,7 @@ "tmp%4#0" ] }, - "336": { + "343": { "op": "dup", "defined_out": [ "tmp%4#0", @@ -629,7 +633,7 @@ "tmp%4#0 (copy)" ] }, - "337": { + "344": { "op": "len", "defined_out": [ "len%2#0", @@ -646,7 +650,7 @@ "len%2#0" ] }, - "338": { + "345": { "op": "intc_2 // 8", "stack_out": [ "created.CreatedAssetID#0", @@ -658,7 +662,7 @@ "8" ] }, - "339": { + "346": { "op": "==", "defined_out": [ "eq%2#0", @@ -675,7 +679,7 @@ "eq%2#0" ] }, - "340": { + "347": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ @@ -686,7 +690,7 @@ "tmp%4#0" ] }, - "341": { + "348": { "op": "btoi", "defined_out": [ "duration_years#0", @@ -701,7 +705,7 @@ "duration_years#0" ] }, - "342": { + "349": { "op": "txna ApplicationArgs 4", "defined_out": [ "duration_years#0", @@ -718,7 +722,7 @@ "tmp%6#0" ] }, - "345": { + "352": { "op": "dup", "defined_out": [ "duration_years#0", @@ -737,7 +741,7 @@ "tmp%6#0 (copy)" ] }, - "346": { + "353": { "op": "len", "defined_out": [ "duration_years#0", @@ -756,7 +760,7 @@ "len%3#0" ] }, - "347": { + "354": { "op": "intc_2 // 8", "stack_out": [ "created.CreatedAssetID#0", @@ -769,7 +773,7 @@ "8" ] }, - "348": { + "355": { "op": "==", "defined_out": [ "duration_years#0", @@ -788,7 +792,7 @@ "eq%3#0" ] }, - "349": { + "356": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ @@ -800,7 +804,7 @@ "tmp%6#0" ] }, - "350": { + "357": { "op": "btoi", "defined_out": [ "duration_years#0", @@ -817,7 +821,7 @@ "start_quarter#0" ] }, - "351": { + "358": { "op": "txna ApplicationArgs 5", "defined_out": [ "duration_years#0", @@ -836,7 +840,7 @@ "tmp%8#0" ] }, - "354": { + "361": { "op": "dup", "defined_out": [ "duration_years#0", @@ -857,7 +861,7 @@ "tmp%8#0 (copy)" ] }, - "355": { + "362": { "op": "len", "defined_out": [ "duration_years#0", @@ -878,7 +882,7 @@ "len%4#0" ] }, - "356": { + "363": { "op": "intc_2 // 8", "stack_out": [ "created.CreatedAssetID#0", @@ -892,7 +896,7 @@ "8" ] }, - "357": { + "364": { "op": "==", "defined_out": [ "duration_years#0", @@ -913,7 +917,7 @@ "eq%4#0" ] }, - "358": { + "365": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ @@ -926,7 +930,7 @@ "tmp%8#0" ] }, - "359": { + "366": { "op": "btoi", "defined_out": [ "duration_years#0", @@ -945,7 +949,7 @@ "sale_price#0" ] }, - "360": { + "367": { "op": "txn GroupIndex", "defined_out": [ "duration_years#0", @@ -966,7 +970,7 @@ "tmp%10#0" ] }, - "362": { + "369": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -989,7 +993,7 @@ "1" ] }, - "363": { + "370": { "op": "-", "defined_out": [ "duration_years#0", @@ -1010,7 +1014,7 @@ "mbr_payment#0" ] }, - "364": { + "371": { "op": "dup", "defined_out": [ "duration_years#0", @@ -1033,7 +1037,7 @@ "mbr_payment#0 (copy)" ] }, - "365": { + "372": { "op": "gtxns TypeEnum", "defined_out": [ "duration_years#0", @@ -1056,7 +1060,7 @@ "gtxn_type%0#0" ] }, - "367": { + "374": { "op": "intc_1 // pay", "defined_out": [ "duration_years#0", @@ -1081,7 +1085,7 @@ "pay" ] }, - "368": { + "375": { "op": "==", "defined_out": [ "duration_years#0", @@ -1104,7 +1108,7 @@ "gtxn_type_matches%0#0" ] }, - "369": { + "376": { "error": "transaction type is pay", "op": "assert // transaction type is pay", "stack_out": [ @@ -1118,7 +1122,7 @@ "mbr_payment#0" ] }, - "370": { + "377": { "op": "intc_0 // 0", "stack_out": [ "created.CreatedAssetID#0", @@ -1132,7 +1136,7 @@ "0" ] }, - "371": { + "378": { "op": "bytec_0 // \"initialized\"", "defined_out": [ "\"initialized\"", @@ -1157,7 +1161,7 @@ "\"initialized\"" ] }, - "372": { + "379": { "op": "app_global_get_ex", "defined_out": [ "duration_years#0", @@ -1182,7 +1186,7 @@ "maybe_exists%0#0" ] }, - "373": { + "380": { "error": "check self.initialized exists", "op": "assert // check self.initialized exists", "stack_out": [ @@ -1197,7 +1201,7 @@ "maybe_value%0#0" ] }, - "374": { + "381": { "op": "!", "defined_out": [ "duration_years#0", @@ -1220,7 +1224,7 @@ "tmp%0#1" ] }, - "375": { + "382": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1233,7 +1237,7 @@ "mbr_payment#0" ] }, - "376": { + "383": { "op": "dig 5", "defined_out": [ "duration_years#0", @@ -1256,7 +1260,7 @@ "total_nfts#0 (copy)" ] }, - "378": { + "385": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1269,7 +1273,7 @@ "mbr_payment#0" ] }, - "379": { + "386": { "op": "dig 4", "defined_out": [ "duration_years#0", @@ -1292,7 +1296,7 @@ "total_pct_bps#0 (copy)" ] }, - "381": { + "388": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1305,7 +1309,7 @@ "mbr_payment#0" ] }, - "382": { + "389": { "op": "dig 4", "stack_out": [ "created.CreatedAssetID#0", @@ -1319,7 +1323,7 @@ "total_pct_bps#0 (copy)" ] }, - "384": { + "391": { "op": "pushint 10000", "defined_out": [ "10000", @@ -1344,7 +1348,7 @@ "10000" ] }, - "387": { + "394": { "op": "<=", "defined_out": [ "duration_years#0", @@ -1367,7 +1371,7 @@ "tmp%3#1" ] }, - "388": { + "395": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1380,7 +1384,7 @@ "mbr_payment#0" ] }, - "389": { + "396": { "op": "dig 3", "defined_out": [ "duration_years#0", @@ -1403,7 +1407,7 @@ "duration_years#0 (copy)" ] }, - "391": { + "398": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1416,7 +1420,7 @@ "mbr_payment#0" ] }, - "392": { + "399": { "op": "dig 2", "defined_out": [ "duration_years#0", @@ -1439,7 +1443,7 @@ "start_quarter#0 (copy)" ] }, - "394": { + "401": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1452,7 +1456,7 @@ "mbr_payment#0" ] }, - "395": { + "402": { "op": "dig 1", "defined_out": [ "duration_years#0", @@ -1475,7 +1479,7 @@ "sale_price#0 (copy)" ] }, - "397": { + "404": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1488,7 +1492,7 @@ "mbr_payment#0" ] }, - "398": { + "405": { "op": "dup", "stack_out": [ "created.CreatedAssetID#0", @@ -1502,7 +1506,7 @@ "mbr_payment#0 (copy)" ] }, - "399": { + "406": { "op": "gtxns Sender", "defined_out": [ "duration_years#0", @@ -1525,7 +1529,7 @@ "tmp%7#1" ] }, - "401": { + "408": { "op": "txn Sender", "defined_out": [ "duration_years#0", @@ -1550,7 +1554,7 @@ "tmp%8#1" ] }, - "403": { + "410": { "op": "==", "defined_out": [ "duration_years#0", @@ -1573,7 +1577,7 @@ "tmp%9#1" ] }, - "404": { + "411": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1586,7 +1590,7 @@ "mbr_payment#0" ] }, - "405": { + "412": { "op": "dup", "stack_out": [ "created.CreatedAssetID#0", @@ -1600,7 +1604,7 @@ "mbr_payment#0 (copy)" ] }, - "406": { + "413": { "op": "gtxns Receiver", "defined_out": [ "duration_years#0", @@ -1623,7 +1627,7 @@ "tmp%10#1" ] }, - "408": { + "415": { "op": "global CurrentApplicationAddress", "defined_out": [ "duration_years#0", @@ -1648,7 +1652,7 @@ "tmp%11#0" ] }, - "410": { + "417": { "op": "==", "defined_out": [ "duration_years#0", @@ -1671,7 +1675,7 @@ "tmp%12#0" ] }, - "411": { + "418": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1684,7 +1688,7 @@ "mbr_payment#0" ] }, - "412": { + "419": { "op": "gtxns Amount", "defined_out": [ "duration_years#0", @@ -1705,7 +1709,7 @@ "tmp%13#0" ] }, - "414": { + "421": { "op": "pushint 1000000", "defined_out": [ "1000000", @@ -1728,7 +1732,7 @@ "1000000" ] }, - "418": { + "425": { "op": ">=", "defined_out": [ "duration_years#0", @@ -1749,7 +1753,7 @@ "tmp%14#0" ] }, - "419": { + "426": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1761,8 +1765,8 @@ "sale_price#0" ] }, - "420": { - "op": "bytec 6 // \"creator\"", + "427": { + "op": "bytec 4 // \"creator\"", "defined_out": [ "\"creator\"", "duration_years#0", @@ -1782,7 +1786,7 @@ "\"creator\"" ] }, - "422": { + "429": { "op": "txn Sender", "defined_out": [ "\"creator\"", @@ -1805,7 +1809,7 @@ "tmp%15#0" ] }, - "424": { + "431": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -1817,7 +1821,7 @@ "sale_price#0" ] }, - "425": { + "432": { "op": "bytec_2 // \"total_nfts\"", "defined_out": [ "\"total_nfts\"", @@ -1838,7 +1842,7 @@ "\"total_nfts\"" ] }, - "426": { + "433": { "op": "uncover 5", "stack_out": [ "created.CreatedAssetID#0", @@ -1851,7 +1855,7 @@ "total_nfts#0" ] }, - "428": { + "435": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -1862,7 +1866,7 @@ "sale_price#0" ] }, - "429": { + "436": { "op": "bytec_3 // \"total_pct_bps\"", "defined_out": [ "\"total_pct_bps\"", @@ -1882,7 +1886,7 @@ "\"total_pct_bps\"" ] }, - "430": { + "437": { "op": "uncover 4", "stack_out": [ "created.CreatedAssetID#0", @@ -1894,7 +1898,7 @@ "total_pct_bps#0" ] }, - "432": { + "439": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -1904,7 +1908,7 @@ "sale_price#0" ] }, - "433": { + "440": { "op": "bytec 8 // \"duration_years\"", "defined_out": [ "\"duration_years\"", @@ -1922,7 +1926,7 @@ "\"duration_years\"" ] }, - "435": { + "442": { "op": "uncover 3", "stack_out": [ "created.CreatedAssetID#0", @@ -1933,7 +1937,7 @@ "duration_years#0" ] }, - "437": { + "444": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -1942,7 +1946,7 @@ "sale_price#0" ] }, - "438": { + "445": { "op": "bytec 9 // \"start_quarter\"", "defined_out": [ "\"start_quarter\"", @@ -1958,7 +1962,7 @@ "\"start_quarter\"" ] }, - "440": { + "447": { "op": "uncover 2", "stack_out": [ "created.CreatedAssetID#0", @@ -1968,7 +1972,7 @@ "start_quarter#0" ] }, - "442": { + "449": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -1976,8 +1980,8 @@ "sale_price#0" ] }, - "443": { - "op": "bytec 4 // \"sale_price\"", + "450": { + "op": "bytec 6 // \"sale_price\"", "defined_out": [ "\"sale_price\"", "sale_price#0", @@ -1990,7 +1994,7 @@ "\"sale_price\"" ] }, - "445": { + "452": { "op": "swap", "stack_out": [ "created.CreatedAssetID#0", @@ -1999,14 +2003,14 @@ "sale_price#0" ] }, - "446": { + "453": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", "total_nfts#0" ] }, - "447": { + "454": { "op": "intc_0 // 0", "stack_out": [ "created.CreatedAssetID#0", @@ -2014,7 +2018,7 @@ "0" ] }, - "448": { + "455": { "op": "bytec_3 // \"total_pct_bps\"", "stack_out": [ "created.CreatedAssetID#0", @@ -2023,7 +2027,7 @@ "\"total_pct_bps\"" ] }, - "449": { + "456": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%1#0", @@ -2037,7 +2041,7 @@ "maybe_exists%1#0" ] }, - "450": { + "457": { "error": "check self.total_pct_bps exists", "op": "assert // check self.total_pct_bps exists", "stack_out": [ @@ -2046,7 +2050,7 @@ "maybe_value%1#0" ] }, - "451": { + "458": { "op": "intc_0 // 0", "stack_out": [ "created.CreatedAssetID#0", @@ -2055,7 +2059,7 @@ "0" ] }, - "452": { + "459": { "op": "bytec_2 // \"total_nfts\"", "stack_out": [ "created.CreatedAssetID#0", @@ -2065,7 +2069,7 @@ "\"total_nfts\"" ] }, - "453": { + "460": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%2#0", @@ -2081,7 +2085,7 @@ "maybe_exists%2#0" ] }, - "454": { + "461": { "error": "check self.total_nfts exists", "op": "assert // check self.total_nfts exists", "stack_out": [ @@ -2091,7 +2095,7 @@ "maybe_value%2#0" ] }, - "455": { + "462": { "op": "/", "defined_out": [ "tmp%16#0", @@ -2103,7 +2107,7 @@ "tmp%16#0" ] }, - "456": { + "463": { "op": "bytec 11 // \"pct_per_nft_bps\"", "defined_out": [ "\"pct_per_nft_bps\"", @@ -2117,7 +2121,7 @@ "\"pct_per_nft_bps\"" ] }, - "458": { + "465": { "op": "swap", "stack_out": [ "created.CreatedAssetID#0", @@ -2126,14 +2130,14 @@ "tmp%16#0" ] }, - "459": { + "466": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", "total_nfts#0" ] }, - "460": { + "467": { "op": "bytec_0 // \"initialized\"", "stack_out": [ "created.CreatedAssetID#0", @@ -2141,7 +2145,7 @@ "\"initialized\"" ] }, - "461": { + "468": { "op": "intc_1 // 1", "stack_out": [ "created.CreatedAssetID#0", @@ -2150,14 +2154,14 @@ "1" ] }, - "462": { + "469": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", "total_nfts#0" ] }, - "463": { + "470": { "op": "intc_0 // 0", "defined_out": [ "idx#0", @@ -2169,7 +2173,7 @@ "idx#0" ] }, - "464": { + "471": { "block": "mint_future_nft_for_header@2", "stack_in": [ "created.CreatedAssetID#0", @@ -2187,7 +2191,7 @@ "idx#0" ] }, - "465": { + "472": { "op": "dig 2", "defined_out": [ "idx#0", @@ -2201,7 +2205,7 @@ "total_nfts#0" ] }, - "467": { + "474": { "op": "<", "defined_out": [ "continue_looping%0#0", @@ -2215,7 +2219,7 @@ "continue_looping%0#0" ] }, - "468": { + "475": { "op": "bz mint_future_nft_after_for@8", "stack_out": [ "created.CreatedAssetID#0", @@ -2223,10 +2227,10 @@ "idx#0" ] }, - "471": { + "478": { "op": "itxn_begin" }, - "472": { + "479": { "op": "global CurrentApplicationAddress", "defined_out": [ "idx#0", @@ -2240,7 +2244,7 @@ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" ] }, - "474": { + "481": { "op": "dup", "defined_out": [ "idx#0", @@ -2256,7 +2260,7 @@ "inner_txn_params%0%%param_ConfigAssetReserve_idx_0#0" ] }, - "475": { + "482": { "op": "itxn_field ConfigAssetReserve", "stack_out": [ "created.CreatedAssetID#0", @@ -2265,7 +2269,7 @@ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" ] }, - "477": { + "484": { "op": "itxn_field ConfigAssetManager", "stack_out": [ "created.CreatedAssetID#0", @@ -2273,7 +2277,7 @@ "idx#0" ] }, - "479": { + "486": { "op": "pushbytes 0x74656d706c6174652d697066733a2f2f7b697066736369643a313a7261773a726573657276653a736861322d3235367d", "defined_out": [ "0x74656d706c6174652d697066733a2f2f7b697066736369643a313a7261773a726573657276653a736861322d3235367d", @@ -2287,7 +2291,7 @@ "0x74656d706c6174652d697066733a2f2f7b697066736369643a313a7261773a726573657276653a736861322d3235367d" ] }, - "529": { + "536": { "op": "itxn_field ConfigAssetURL", "stack_out": [ "created.CreatedAssetID#0", @@ -2295,7 +2299,7 @@ "idx#0" ] }, - "531": { + "538": { "op": "pushbytes 0x46454e4654", "defined_out": [ "0x46454e4654", @@ -2309,7 +2313,7 @@ "0x46454e4654" ] }, - "538": { + "545": { "op": "itxn_field ConfigAssetUnitName", "stack_out": [ "created.CreatedAssetID#0", @@ -2317,7 +2321,7 @@ "idx#0" ] }, - "540": { + "547": { "op": "pushbytes 0x467574757265204561726e696e67204e4654", "defined_out": [ "0x467574757265204561726e696e67204e4654", @@ -2331,7 +2335,7 @@ "0x467574757265204561726e696e67204e4654" ] }, - "560": { + "567": { "op": "itxn_field ConfigAssetName", "stack_out": [ "created.CreatedAssetID#0", @@ -2339,7 +2343,7 @@ "idx#0" ] }, - "562": { + "569": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -2353,7 +2357,7 @@ "0" ] }, - "563": { + "570": { "op": "itxn_field ConfigAssetDefaultFrozen", "stack_out": [ "created.CreatedAssetID#0", @@ -2361,7 +2365,7 @@ "idx#0" ] }, - "565": { + "572": { "op": "intc_0 // 0", "stack_out": [ "created.CreatedAssetID#0", @@ -2370,7 +2374,7 @@ "0" ] }, - "566": { + "573": { "op": "itxn_field ConfigAssetDecimals", "stack_out": [ "created.CreatedAssetID#0", @@ -2378,7 +2382,7 @@ "idx#0" ] }, - "568": { + "575": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -2392,7 +2396,7 @@ "1" ] }, - "569": { + "576": { "op": "itxn_field ConfigAssetTotal", "stack_out": [ "created.CreatedAssetID#0", @@ -2400,7 +2404,7 @@ "idx#0" ] }, - "571": { + "578": { "op": "pushint 3 // acfg", "defined_out": [ "acfg", @@ -2414,7 +2418,7 @@ "acfg" ] }, - "573": { + "580": { "op": "itxn_field TypeEnum", "stack_out": [ "created.CreatedAssetID#0", @@ -2422,7 +2426,7 @@ "idx#0" ] }, - "575": { + "582": { "op": "intc_3 // 1000", "defined_out": [ "1000", @@ -2436,7 +2440,7 @@ "1000" ] }, - "576": { + "583": { "op": "itxn_field Fee", "stack_out": [ "created.CreatedAssetID#0", @@ -2444,10 +2448,10 @@ "idx#0" ] }, - "578": { + "585": { "op": "itxn_submit" }, - "579": { + "586": { "op": "itxn CreatedAssetID", "defined_out": [ "created.CreatedAssetID#0", @@ -2461,7 +2465,7 @@ "created.CreatedAssetID#0" ] }, - "581": { + "588": { "op": "bury 3", "defined_out": [ "created.CreatedAssetID#0", @@ -2474,7 +2478,7 @@ "idx#0" ] }, - "583": { + "590": { "op": "dup", "stack_out": [ "created.CreatedAssetID#0", @@ -2483,7 +2487,7 @@ "idx#0" ] }, - "584": { + "591": { "op": "bnz mint_future_nft_after_if_else@6", "stack_out": [ "created.CreatedAssetID#0", @@ -2491,7 +2495,7 @@ "idx#0" ] }, - "587": { + "594": { "op": "bytec 10 // \"first_asset_id\"", "defined_out": [ "\"first_asset_id\"", @@ -2506,7 +2510,7 @@ "\"first_asset_id\"" ] }, - "589": { + "596": { "op": "dig 3", "stack_out": [ "created.CreatedAssetID#0", @@ -2516,7 +2520,7 @@ "created.CreatedAssetID#0" ] }, - "591": { + "598": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -2524,7 +2528,7 @@ "idx#0" ] }, - "592": { + "599": { "block": "mint_future_nft_after_if_else@6", "stack_in": [ "created.CreatedAssetID#0", @@ -2542,7 +2546,7 @@ "created.CreatedAssetID#0" ] }, - "594": { + "601": { "op": "itob", "defined_out": [ "created.CreatedAssetID#0", @@ -2555,8 +2559,8 @@ "encoded_value%0#0" ] }, - "595": { - "op": "bytec 7 // \"ma_\"", + "602": { + "op": "bytec 5 // \"ma_\"", "defined_out": [ "\"ma_\"", "created.CreatedAssetID#0", @@ -2570,7 +2574,7 @@ "\"ma_\"" ] }, - "597": { + "604": { "op": "swap", "stack_out": [ "created.CreatedAssetID#0", @@ -2580,7 +2584,7 @@ "encoded_value%0#0" ] }, - "598": { + "605": { "op": "concat", "defined_out": [ "created.CreatedAssetID#0", @@ -2593,7 +2597,7 @@ "map_prefixed_key%0#0" ] }, - "599": { + "606": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -2608,7 +2612,7 @@ "1" ] }, - "600": { + "607": { "op": "itob", "defined_out": [ "created.CreatedAssetID#0", @@ -2623,7 +2627,7 @@ "encoded_value%1#0" ] }, - "601": { + "608": { "op": "box_put", "stack_out": [ "created.CreatedAssetID#0", @@ -2631,7 +2635,7 @@ "idx#0" ] }, - "602": { + "609": { "op": "dup", "defined_out": [ "created.CreatedAssetID#0", @@ -2644,7 +2648,7 @@ "idx#0" ] }, - "603": { + "610": { "op": "intc_1 // 1", "stack_out": [ "created.CreatedAssetID#0", @@ -2654,7 +2658,7 @@ "1" ] }, - "604": { + "611": { "op": "+", "stack_out": [ "created.CreatedAssetID#0", @@ -2663,7 +2667,7 @@ "idx#0" ] }, - "605": { + "612": { "op": "bury 1", "defined_out": [ "created.CreatedAssetID#0", @@ -2675,10 +2679,10 @@ "idx#0" ] }, - "607": { + "614": { "op": "b mint_future_nft_for_header@2" }, - "610": { + "617": { "block": "mint_future_nft_after_for@8", "stack_in": [ "created.CreatedAssetID#0", @@ -2696,7 +2700,7 @@ "1" ] }, - "611": { + "618": { "op": "return", "stack_out": [ "created.CreatedAssetID#0", @@ -2704,7 +2708,7 @@ "idx#0" ] }, - "612": { + "619": { "subroutine": "smart_contracts.algomint.contract.Algomint.buy_nft[routing]", "params": {}, "block": "buy_nft", @@ -2717,7 +2721,7 @@ "tmp%0#0" ] }, - "615": { + "622": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -2728,7 +2732,7 @@ "tmp%0#0 (copy)" ] }, - "616": { + "623": { "op": "len", "defined_out": [ "len%0#0", @@ -2739,7 +2743,7 @@ "len%0#0" ] }, - "617": { + "624": { "op": "intc_2 // 8", "defined_out": [ "8", @@ -2752,7 +2756,7 @@ "8" ] }, - "618": { + "625": { "op": "==", "defined_out": [ "eq%0#0", @@ -2763,14 +2767,14 @@ "eq%0#0" ] }, - "619": { + "626": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ "tmp%0#0" ] }, - "620": { + "627": { "op": "btoi", "defined_out": [ "asset_id#0" @@ -2779,7 +2783,7 @@ "asset_id#0" ] }, - "621": { + "628": { "op": "txn GroupIndex", "defined_out": [ "asset_id#0", @@ -2790,7 +2794,7 @@ "tmp%2#0" ] }, - "623": { + "630": { "op": "pushint 2", "defined_out": [ "2", @@ -2803,7 +2807,7 @@ "2" ] }, - "625": { + "632": { "op": "-", "defined_out": [ "asset_id#0", @@ -2814,7 +2818,7 @@ "opt_in#0" ] }, - "626": { + "633": { "op": "dup", "defined_out": [ "asset_id#0", @@ -2827,7 +2831,7 @@ "opt_in#0 (copy)" ] }, - "627": { + "634": { "op": "gtxns TypeEnum", "defined_out": [ "asset_id#0", @@ -2840,7 +2844,7 @@ "gtxn_type%0#0" ] }, - "629": { + "636": { "op": "pushint 4 // axfer", "defined_out": [ "asset_id#0", @@ -2855,7 +2859,7 @@ "axfer" ] }, - "631": { + "638": { "op": "==", "defined_out": [ "asset_id#0", @@ -2868,7 +2872,7 @@ "gtxn_type_matches%0#0" ] }, - "632": { + "639": { "error": "transaction type is axfer", "op": "assert // transaction type is axfer", "stack_out": [ @@ -2876,7 +2880,7 @@ "opt_in#0" ] }, - "633": { + "640": { "op": "txn GroupIndex", "defined_out": [ "asset_id#0", @@ -2889,7 +2893,7 @@ "tmp%3#0" ] }, - "635": { + "642": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -2904,7 +2908,7 @@ "1" ] }, - "636": { + "643": { "op": "-", "defined_out": [ "asset_id#0", @@ -2917,7 +2921,7 @@ "payment#0" ] }, - "637": { + "644": { "op": "dup", "defined_out": [ "asset_id#0", @@ -2932,7 +2936,7 @@ "payment#0 (copy)" ] }, - "638": { + "645": { "op": "gtxns TypeEnum", "defined_out": [ "asset_id#0", @@ -2947,7 +2951,7 @@ "gtxn_type%1#0" ] }, - "640": { + "647": { "op": "intc_1 // pay", "defined_out": [ "asset_id#0", @@ -2964,7 +2968,7 @@ "pay" ] }, - "641": { + "648": { "op": "==", "defined_out": [ "asset_id#0", @@ -2979,7 +2983,7 @@ "gtxn_type_matches%1#0" ] }, - "642": { + "649": { "error": "transaction type is pay", "op": "assert // transaction type is pay", "stack_out": [ @@ -2988,7 +2992,7 @@ "payment#0" ] }, - "643": { + "650": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -3003,7 +3007,7 @@ "0" ] }, - "644": { + "651": { "op": "bytec_0 // \"initialized\"", "defined_out": [ "\"initialized\"", @@ -3020,7 +3024,7 @@ "\"initialized\"" ] }, - "645": { + "652": { "op": "app_global_get_ex", "defined_out": [ "asset_id#0", @@ -3037,7 +3041,7 @@ "maybe_exists%0#0" ] }, - "646": { + "653": { "error": "check self.initialized exists", "op": "assert // check self.initialized exists", "stack_out": [ @@ -3047,7 +3051,7 @@ "maybe_value%0#0" ] }, - "647": { + "654": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3055,7 +3059,7 @@ "payment#0" ] }, - "648": { + "655": { "op": "dig 2", "defined_out": [ "asset_id#0", @@ -3070,7 +3074,7 @@ "asset_id#0 (copy)" ] }, - "650": { + "657": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3078,7 +3082,7 @@ "payment#0" ] }, - "651": { + "658": { "op": "dig 2", "stack_out": [ "asset_id#0", @@ -3087,7 +3091,7 @@ "asset_id#0 (copy)" ] }, - "653": { + "660": { "op": "itob", "defined_out": [ "asset_id#0", @@ -3102,8 +3106,8 @@ "encoded_value%0#0" ] }, - "654": { - "op": "bytec 7 // \"ma_\"", + "661": { + "op": "bytec 5 // \"ma_\"", "defined_out": [ "\"ma_\"", "asset_id#0", @@ -3119,7 +3123,7 @@ "\"ma_\"" ] }, - "656": { + "663": { "op": "swap", "stack_out": [ "asset_id#0", @@ -3129,7 +3133,7 @@ "encoded_value%0#0" ] }, - "657": { + "664": { "op": "concat", "defined_out": [ "asset_id#0", @@ -3144,7 +3148,7 @@ "map_prefixed_key%0#0" ] }, - "658": { + "665": { "op": "box_get", "defined_out": [ "asset_id#0", @@ -3161,7 +3165,7 @@ "maybe_exists%1#0" ] }, - "659": { + "666": { "op": "swap", "stack_out": [ "asset_id#0", @@ -3171,7 +3175,7 @@ "maybe_value%1#0" ] }, - "660": { + "667": { "op": "btoi", "defined_out": [ "asset_id#0", @@ -3188,7 +3192,7 @@ "maybe_value_converted%0#0" ] }, - "661": { + "668": { "op": "intc_0 // 0", "stack_out": [ "asset_id#0", @@ -3199,7 +3203,7 @@ "0" ] }, - "662": { + "669": { "op": "swap", "stack_out": [ "asset_id#0", @@ -3210,7 +3214,7 @@ "maybe_value_converted%0#0" ] }, - "663": { + "670": { "op": "uncover 2", "stack_out": [ "asset_id#0", @@ -3221,7 +3225,7 @@ "maybe_exists%1#0" ] }, - "665": { + "672": { "op": "select", "defined_out": [ "asset_id#0", @@ -3236,7 +3240,7 @@ "state_get%0#0" ] }, - "666": { + "673": { "op": "intc_1 // 1", "stack_out": [ "asset_id#0", @@ -3246,7 +3250,7 @@ "1" ] }, - "667": { + "674": { "op": "==", "defined_out": [ "asset_id#0", @@ -3261,7 +3265,7 @@ "tmp%1#1" ] }, - "668": { + "675": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3269,7 +3273,7 @@ "payment#0" ] }, - "669": { + "676": { "op": "dig 1", "stack_out": [ "asset_id#0", @@ -3278,7 +3282,7 @@ "opt_in#0 (copy)" ] }, - "671": { + "678": { "op": "gtxns Sender", "defined_out": [ "asset_id#0", @@ -3293,7 +3297,7 @@ "tmp%2#1" ] }, - "673": { + "680": { "op": "txn Sender", "defined_out": [ "asset_id#0", @@ -3310,7 +3314,7 @@ "tmp%3#1" ] }, - "675": { + "682": { "op": "==", "defined_out": [ "asset_id#0", @@ -3325,7 +3329,7 @@ "tmp%4#0" ] }, - "676": { + "683": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3333,7 +3337,7 @@ "payment#0" ] }, - "677": { + "684": { "op": "dig 1", "stack_out": [ "asset_id#0", @@ -3342,7 +3346,7 @@ "opt_in#0 (copy)" ] }, - "679": { + "686": { "op": "gtxns AssetReceiver", "defined_out": [ "asset_id#0", @@ -3357,7 +3361,7 @@ "tmp%5#0" ] }, - "681": { + "688": { "op": "txn Sender", "defined_out": [ "asset_id#0", @@ -3374,7 +3378,7 @@ "tmp%6#0" ] }, - "683": { + "690": { "op": "==", "defined_out": [ "asset_id#0", @@ -3389,7 +3393,7 @@ "tmp%7#0" ] }, - "684": { + "691": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3397,7 +3401,7 @@ "payment#0" ] }, - "685": { + "692": { "op": "dig 1", "stack_out": [ "asset_id#0", @@ -3406,7 +3410,7 @@ "opt_in#0 (copy)" ] }, - "687": { + "694": { "op": "gtxns XferAsset", "defined_out": [ "asset_id#0", @@ -3421,7 +3425,7 @@ "tmp%8#0" ] }, - "689": { + "696": { "op": "dig 3", "stack_out": [ "asset_id#0", @@ -3431,7 +3435,7 @@ "asset_id#0 (copy)" ] }, - "691": { + "698": { "op": "==", "defined_out": [ "asset_id#0", @@ -3446,7 +3450,7 @@ "tmp%9#0" ] }, - "692": { + "699": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3454,7 +3458,7 @@ "payment#0" ] }, - "693": { + "700": { "op": "swap", "stack_out": [ "asset_id#0", @@ -3462,7 +3466,7 @@ "opt_in#0" ] }, - "694": { + "701": { "op": "gtxns AssetAmount", "defined_out": [ "asset_id#0", @@ -3475,7 +3479,7 @@ "tmp%10#0" ] }, - "696": { + "703": { "op": "!", "defined_out": [ "asset_id#0", @@ -3488,14 +3492,14 @@ "tmp%11#0" ] }, - "697": { + "704": { "op": "assert", "stack_out": [ "asset_id#0", "payment#0" ] }, - "698": { + "705": { "op": "dup", "stack_out": [ "asset_id#0", @@ -3503,7 +3507,7 @@ "payment#0 (copy)" ] }, - "699": { + "706": { "op": "gtxns Sender", "defined_out": [ "asset_id#0", @@ -3516,7 +3520,7 @@ "tmp%12#0" ] }, - "701": { + "708": { "op": "txn Sender", "defined_out": [ "asset_id#0", @@ -3531,7 +3535,7 @@ "tmp%13#0" ] }, - "703": { + "710": { "op": "==", "defined_out": [ "asset_id#0", @@ -3544,14 +3548,14 @@ "tmp%14#0" ] }, - "704": { + "711": { "op": "assert", "stack_out": [ "asset_id#0", "payment#0" ] }, - "705": { + "712": { "op": "dup", "stack_out": [ "asset_id#0", @@ -3559,7 +3563,7 @@ "payment#0 (copy)" ] }, - "706": { + "713": { "op": "gtxns Receiver", "defined_out": [ "asset_id#0", @@ -3572,7 +3576,7 @@ "tmp%15#0" ] }, - "708": { + "715": { "op": "global CurrentApplicationAddress", "defined_out": [ "asset_id#0", @@ -3587,7 +3591,7 @@ "tmp%16#0" ] }, - "710": { + "717": { "op": "==", "defined_out": [ "asset_id#0", @@ -3600,14 +3604,14 @@ "tmp%17#0" ] }, - "711": { + "718": { "op": "assert", "stack_out": [ "asset_id#0", "payment#0" ] }, - "712": { + "719": { "op": "gtxns Amount", "defined_out": [ "asset_id#0", @@ -3618,7 +3622,7 @@ "tmp%18#0" ] }, - "714": { + "721": { "op": "intc_0 // 0", "stack_out": [ "asset_id#0", @@ -3626,8 +3630,8 @@ "0" ] }, - "715": { - "op": "bytec 4 // \"sale_price\"", + "722": { + "op": "bytec 6 // \"sale_price\"", "defined_out": [ "\"sale_price\"", "0", @@ -3641,7 +3645,7 @@ "\"sale_price\"" ] }, - "717": { + "724": { "op": "app_global_get_ex", "defined_out": [ "asset_id#0", @@ -3656,7 +3660,7 @@ "maybe_exists%2#0" ] }, - "718": { + "725": { "error": "check self.sale_price exists", "op": "assert // check self.sale_price exists", "stack_out": [ @@ -3665,7 +3669,7 @@ "maybe_value%2#0" ] }, - "719": { + "726": { "op": "dig 1", "defined_out": [ "asset_id#0", @@ -3680,7 +3684,7 @@ "tmp%18#0 (copy)" ] }, - "721": { + "728": { "op": "==", "defined_out": [ "asset_id#0", @@ -3693,14 +3697,14 @@ "tmp%19#0" ] }, - "722": { + "729": { "op": "assert", "stack_out": [ "asset_id#0", "tmp%18#0" ] }, - "723": { + "730": { "op": "global CurrentApplicationAddress", "defined_out": [ "asset_id#0", @@ -3713,7 +3717,7 @@ "tmp%20#0" ] }, - "725": { + "732": { "op": "dig 2", "stack_out": [ "asset_id#0", @@ -3722,7 +3726,7 @@ "asset_id#0 (copy)" ] }, - "727": { + "734": { "op": "asset_holding_get AssetBalance", "defined_out": [ "app_balance#0", @@ -3737,7 +3741,7 @@ "app_opted#0" ] }, - "729": { + "736": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3745,7 +3749,7 @@ "app_balance#0" ] }, - "730": { + "737": { "op": "intc_1 // 1", "stack_out": [ "asset_id#0", @@ -3754,7 +3758,7 @@ "1" ] }, - "731": { + "738": { "op": "==", "defined_out": [ "asset_id#0", @@ -3767,17 +3771,17 @@ "tmp%23#0" ] }, - "732": { + "739": { "op": "assert", "stack_out": [ "asset_id#0", "tmp%18#0" ] }, - "733": { + "740": { "op": "itxn_begin" }, - "734": { + "741": { "op": "txn Sender", "defined_out": [ "asset_id#0", @@ -3790,7 +3794,7 @@ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" ] }, - "736": { + "743": { "op": "intc_1 // 1", "stack_out": [ "asset_id#0", @@ -3799,7 +3803,7 @@ "1" ] }, - "737": { + "744": { "op": "itxn_field AssetAmount", "stack_out": [ "asset_id#0", @@ -3807,40 +3811,40 @@ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" ] }, - "739": { + "746": { "op": "itxn_field AssetReceiver", "stack_out": [ "asset_id#0", "tmp%18#0" ] }, - "741": { + "748": { "op": "swap", "stack_out": [ "tmp%18#0", "asset_id#0" ] }, - "742": { + "749": { "op": "itxn_field XferAsset", "stack_out": [ "tmp%18#0" ] }, - "744": { + "751": { "op": "pushint 4 // axfer", "stack_out": [ "tmp%18#0", "axfer" ] }, - "746": { + "753": { "op": "itxn_field TypeEnum", "stack_out": [ "tmp%18#0" ] }, - "748": { + "755": { "op": "intc_3 // 1000", "defined_out": [ "1000", @@ -3851,27 +3855,27 @@ "1000" ] }, - "749": { + "756": { "op": "itxn_field Fee", "stack_out": [ "tmp%18#0" ] }, - "751": { + "758": { "op": "itxn_submit" }, - "752": { + "759": { "op": "itxn_begin" }, - "753": { + "760": { "op": "intc_0 // 0", "stack_out": [ "tmp%18#0", "0" ] }, - "754": { - "op": "bytec 6 // \"creator\"", + "761": { + "op": "bytec 4 // \"creator\"", "defined_out": [ "\"creator\"", "0", @@ -3883,7 +3887,7 @@ "\"creator\"" ] }, - "756": { + "763": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%3#0", @@ -3896,7 +3900,7 @@ "maybe_exists%3#0" ] }, - "757": { + "764": { "error": "check self.creator exists", "op": "assert // check self.creator exists", "stack_out": [ @@ -3904,47 +3908,47 @@ "maybe_value%3#0" ] }, - "758": { + "765": { "op": "itxn_field Receiver" }, - "760": { + "767": { "op": "itxn_field Amount", "stack_out": [] }, - "762": { + "769": { "op": "intc_1 // pay", "stack_out": [ "pay" ] }, - "763": { + "770": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "765": { + "772": { "op": "intc_3 // 1000", "stack_out": [ "1000" ] }, - "766": { + "773": { "op": "itxn_field Fee", "stack_out": [] }, - "768": { + "775": { "op": "itxn_submit" }, - "769": { + "776": { "op": "intc_1 // 1", "stack_out": [ "1" ] }, - "770": { + "777": { "op": "return", "stack_out": [] }, - "771": { + "778": { "subroutine": "smart_contracts.algomint.contract.Algomint.report_income[routing]", "params": {}, "block": "report_income", @@ -3957,7 +3961,7 @@ "tmp%0#0" ] }, - "774": { + "781": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -3968,7 +3972,7 @@ "tmp%0#0 (copy)" ] }, - "775": { + "782": { "op": "len", "defined_out": [ "len%0#0", @@ -3979,7 +3983,7 @@ "len%0#0" ] }, - "776": { + "783": { "op": "intc_2 // 8", "defined_out": [ "8", @@ -3992,7 +3996,7 @@ "8" ] }, - "777": { + "784": { "op": "==", "defined_out": [ "eq%0#0", @@ -4003,14 +4007,14 @@ "eq%0#0" ] }, - "778": { + "785": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ "tmp%0#0" ] }, - "779": { + "786": { "op": "btoi", "defined_out": [ "quarter#0" @@ -4019,7 +4023,7 @@ "quarter#0" ] }, - "780": { + "787": { "op": "txna ApplicationArgs 2", "defined_out": [ "quarter#0", @@ -4030,7 +4034,7 @@ "tmp%2#0" ] }, - "783": { + "790": { "op": "dup", "defined_out": [ "quarter#0", @@ -4043,7 +4047,7 @@ "tmp%2#0 (copy)" ] }, - "784": { + "791": { "op": "len", "defined_out": [ "len%1#0", @@ -4056,7 +4060,7 @@ "len%1#0" ] }, - "785": { + "792": { "op": "intc_2 // 8", "stack_out": [ "quarter#0", @@ -4065,7 +4069,7 @@ "8" ] }, - "786": { + "793": { "op": "==", "defined_out": [ "eq%1#0", @@ -4078,7 +4082,7 @@ "eq%1#0" ] }, - "787": { + "794": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ @@ -4086,7 +4090,7 @@ "tmp%2#0" ] }, - "788": { + "795": { "op": "btoi", "defined_out": [ "income_amount#0", @@ -4097,7 +4101,7 @@ "income_amount#0" ] }, - "789": { + "796": { "op": "txn GroupIndex", "defined_out": [ "income_amount#0", @@ -4110,7 +4114,7 @@ "tmp%4#0" ] }, - "791": { + "798": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -4125,7 +4129,7 @@ "1" ] }, - "792": { + "799": { "op": "-", "defined_out": [ "income_amount#0", @@ -4138,7 +4142,7 @@ "payout_funding#0" ] }, - "793": { + "800": { "op": "dup", "defined_out": [ "income_amount#0", @@ -4153,7 +4157,7 @@ "payout_funding#0 (copy)" ] }, - "794": { + "801": { "op": "gtxns TypeEnum", "defined_out": [ "gtxn_type%0#0", @@ -4168,7 +4172,7 @@ "gtxn_type%0#0" ] }, - "796": { + "803": { "op": "intc_1 // pay", "defined_out": [ "gtxn_type%0#0", @@ -4185,7 +4189,7 @@ "pay" ] }, - "797": { + "804": { "op": "==", "defined_out": [ "gtxn_type_matches%0#0", @@ -4200,7 +4204,7 @@ "gtxn_type_matches%0#0" ] }, - "798": { + "805": { "error": "transaction type is pay", "op": "assert // transaction type is pay", "stack_out": [ @@ -4209,7 +4213,7 @@ "payout_funding#0" ] }, - "799": { + "806": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -4224,7 +4228,7 @@ "0" ] }, - "800": { + "807": { "op": "bytec_0 // \"initialized\"", "defined_out": [ "\"initialized\"", @@ -4241,7 +4245,7 @@ "\"initialized\"" ] }, - "801": { + "808": { "op": "app_global_get_ex", "defined_out": [ "income_amount#0", @@ -4258,7 +4262,7 @@ "maybe_exists%0#0" ] }, - "802": { + "809": { "error": "check self.initialized exists", "op": "assert // check self.initialized exists", "stack_out": [ @@ -4268,7 +4272,7 @@ "maybe_value%0#0" ] }, - "803": { + "810": { "op": "assert", "stack_out": [ "quarter#0", @@ -4276,7 +4280,7 @@ "payout_funding#0" ] }, - "804": { + "811": { "op": "txn Sender", "defined_out": [ "income_amount#0", @@ -4291,7 +4295,7 @@ "tmp%0#1" ] }, - "806": { + "813": { "op": "intc_0 // 0", "stack_out": [ "quarter#0", @@ -4301,8 +4305,8 @@ "0" ] }, - "807": { - "op": "bytec 6 // \"creator\"", + "814": { + "op": "bytec 4 // \"creator\"", "defined_out": [ "\"creator\"", "0", @@ -4320,7 +4324,7 @@ "\"creator\"" ] }, - "809": { + "816": { "op": "app_global_get_ex", "defined_out": [ "income_amount#0", @@ -4339,7 +4343,7 @@ "maybe_exists%1#0" ] }, - "810": { + "817": { "error": "check self.creator exists", "op": "assert // check self.creator exists", "stack_out": [ @@ -4350,7 +4354,7 @@ "maybe_value%1#0" ] }, - "811": { + "818": { "op": "==", "defined_out": [ "income_amount#0", @@ -4365,7 +4369,7 @@ "tmp%1#1" ] }, - "812": { + "819": { "op": "assert", "stack_out": [ "quarter#0", @@ -4373,7 +4377,7 @@ "payout_funding#0" ] }, - "813": { + "820": { "op": "intc_0 // 0", "stack_out": [ "quarter#0", @@ -4382,7 +4386,7 @@ "0" ] }, - "814": { + "821": { "op": "bytec_1 // \"last_reported_quarter\"", "defined_out": [ "\"last_reported_quarter\"", @@ -4399,7 +4403,7 @@ "\"last_reported_quarter\"" ] }, - "815": { + "822": { "op": "app_global_get_ex", "defined_out": [ "income_amount#0", @@ -4416,7 +4420,7 @@ "maybe_exists%2#0" ] }, - "816": { + "823": { "error": "check self.last_reported_quarter exists", "op": "assert // check self.last_reported_quarter exists", "stack_out": [ @@ -4426,7 +4430,7 @@ "maybe_value%2#0" ] }, - "817": { + "824": { "op": "dig 3", "defined_out": [ "income_amount#0", @@ -4443,7 +4447,7 @@ "quarter#0 (copy)" ] }, - "819": { + "826": { "op": "<", "defined_out": [ "income_amount#0", @@ -4458,7 +4462,7 @@ "tmp%2#1" ] }, - "820": { + "827": { "op": "assert", "stack_out": [ "quarter#0", @@ -4466,7 +4470,7 @@ "payout_funding#0" ] }, - "821": { + "828": { "op": "dig 1", "defined_out": [ "income_amount#0", @@ -4481,7 +4485,7 @@ "income_amount#0 (copy)" ] }, - "823": { + "830": { "op": "assert", "stack_out": [ "quarter#0", @@ -4489,7 +4493,7 @@ "payout_funding#0" ] }, - "824": { + "831": { "op": "intc_0 // 0", "stack_out": [ "quarter#0", @@ -4498,7 +4502,7 @@ "0" ] }, - "825": { + "832": { "op": "bytec_3 // \"total_pct_bps\"", "defined_out": [ "\"total_pct_bps\"", @@ -4515,7 +4519,7 @@ "\"total_pct_bps\"" ] }, - "826": { + "833": { "op": "app_global_get_ex", "defined_out": [ "income_amount#0", @@ -4532,7 +4536,7 @@ "maybe_exists%3#0" ] }, - "827": { + "834": { "error": "check self.total_pct_bps exists", "op": "assert // check self.total_pct_bps exists", "stack_out": [ @@ -4542,7 +4546,7 @@ "maybe_value%3#0" ] }, - "828": { + "835": { "op": "dig 2", "stack_out": [ "quarter#0", @@ -4552,7 +4556,7 @@ "income_amount#0 (copy)" ] }, - "830": { + "837": { "op": "*", "stack_out": [ "quarter#0", @@ -4561,7 +4565,7 @@ "tmp%4#0" ] }, - "831": { + "838": { "op": "pushint 10000", "defined_out": [ "10000", @@ -4578,7 +4582,7 @@ "10000" ] }, - "834": { + "841": { "op": "/", "defined_out": [ "income_amount#0", @@ -4593,7 +4597,7 @@ "total_payout#0" ] }, - "835": { + "842": { "op": "dup", "defined_out": [ "income_amount#0", @@ -4610,7 +4614,7 @@ "total_payout#0 (copy)" ] }, - "836": { + "843": { "op": "assert", "stack_out": [ "quarter#0", @@ -4619,7 +4623,7 @@ "total_payout#0" ] }, - "837": { + "844": { "op": "dig 1", "stack_out": [ "quarter#0", @@ -4629,7 +4633,7 @@ "payout_funding#0 (copy)" ] }, - "839": { + "846": { "op": "gtxns Sender", "defined_out": [ "income_amount#0", @@ -4646,7 +4650,7 @@ "tmp%7#0" ] }, - "841": { + "848": { "op": "txn Sender", "defined_out": [ "income_amount#0", @@ -4665,7 +4669,7 @@ "tmp%8#0" ] }, - "843": { + "850": { "op": "==", "defined_out": [ "income_amount#0", @@ -4682,7 +4686,7 @@ "tmp%9#0" ] }, - "844": { + "851": { "op": "assert", "stack_out": [ "quarter#0", @@ -4691,7 +4695,7 @@ "total_payout#0" ] }, - "845": { + "852": { "op": "dig 1", "stack_out": [ "quarter#0", @@ -4701,7 +4705,7 @@ "payout_funding#0 (copy)" ] }, - "847": { + "854": { "op": "gtxns Receiver", "defined_out": [ "income_amount#0", @@ -4718,7 +4722,7 @@ "tmp%10#0" ] }, - "849": { + "856": { "op": "global CurrentApplicationAddress", "defined_out": [ "income_amount#0", @@ -4737,7 +4741,7 @@ "tmp%11#0" ] }, - "851": { + "858": { "op": "==", "defined_out": [ "income_amount#0", @@ -4754,7 +4758,7 @@ "tmp%12#0" ] }, - "852": { + "859": { "op": "assert", "stack_out": [ "quarter#0", @@ -4763,7 +4767,7 @@ "total_payout#0" ] }, - "853": { + "860": { "op": "swap", "stack_out": [ "quarter#0", @@ -4772,7 +4776,7 @@ "payout_funding#0" ] }, - "854": { + "861": { "op": "gtxns Amount", "defined_out": [ "income_amount#0", @@ -4787,7 +4791,7 @@ "tmp%13#0" ] }, - "856": { + "863": { "op": "dig 1", "stack_out": [ "quarter#0", @@ -4797,7 +4801,7 @@ "total_payout#0 (copy)" ] }, - "858": { + "865": { "op": "==", "defined_out": [ "income_amount#0", @@ -4812,7 +4816,7 @@ "tmp%14#0" ] }, - "859": { + "866": { "op": "assert", "stack_out": [ "quarter#0", @@ -4820,7 +4824,7 @@ "total_payout#0" ] }, - "860": { + "867": { "op": "bytec_1 // \"last_reported_quarter\"", "stack_out": [ "quarter#0", @@ -4829,7 +4833,7 @@ "\"last_reported_quarter\"" ] }, - "861": { + "868": { "op": "uncover 3", "stack_out": [ "income_amount#0", @@ -4838,14 +4842,14 @@ "quarter#0" ] }, - "863": { + "870": { "op": "app_global_put", "stack_out": [ "income_amount#0", "total_payout#0" ] }, - "864": { + "871": { "op": "bytec 12 // \"last_reported_income\"", "defined_out": [ "\"last_reported_income\"", @@ -4858,7 +4862,7 @@ "\"last_reported_income\"" ] }, - "866": { + "873": { "op": "uncover 2", "stack_out": [ "total_payout#0", @@ -4866,20 +4870,20 @@ "income_amount#0" ] }, - "868": { + "875": { "op": "app_global_put", "stack_out": [ "total_payout#0" ] }, - "869": { + "876": { "op": "intc_0 // 0", "stack_out": [ "total_payout#0", "0" ] }, - "870": { + "877": { "op": "bytec_2 // \"total_nfts\"", "defined_out": [ "\"total_nfts\"", @@ -4892,7 +4896,7 @@ "\"total_nfts\"" ] }, - "871": { + "878": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%4#0", @@ -4905,7 +4909,7 @@ "maybe_exists%4#0" ] }, - "872": { + "879": { "error": "check self.total_nfts exists", "op": "assert // check self.total_nfts exists", "stack_out": [ @@ -4913,7 +4917,7 @@ "maybe_value%4#0" ] }, - "873": { + "880": { "op": "/", "defined_out": [ "tmp%15#0" @@ -4922,8 +4926,8 @@ "tmp%15#0" ] }, - "874": { - "op": "bytec 5 // \"payout_per_nft\"", + "881": { + "op": "bytec 7 // \"payout_per_nft\"", "defined_out": [ "\"payout_per_nft\"", "tmp%15#0" @@ -4933,28 +4937,28 @@ "\"payout_per_nft\"" ] }, - "876": { + "883": { "op": "swap", "stack_out": [ "\"payout_per_nft\"", "tmp%15#0" ] }, - "877": { + "884": { "op": "app_global_put", "stack_out": [] }, - "878": { + "885": { "op": "intc_1 // 1", "stack_out": [ "1" ] }, - "879": { + "886": { "op": "return", "stack_out": [] }, - "880": { + "887": { "subroutine": "smart_contracts.algomint.contract.Algomint.claim_payout[routing]", "params": {}, "block": "claim_payout", @@ -4967,7 +4971,7 @@ "tmp%0#0" ] }, - "883": { + "890": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -4978,7 +4982,7 @@ "tmp%0#0 (copy)" ] }, - "884": { + "891": { "op": "len", "defined_out": [ "len%0#0", @@ -4989,7 +4993,7 @@ "len%0#0" ] }, - "885": { + "892": { "op": "intc_2 // 8", "defined_out": [ "8", @@ -5002,7 +5006,7 @@ "8" ] }, - "886": { + "893": { "op": "==", "defined_out": [ "eq%0#0", @@ -5013,14 +5017,14 @@ "eq%0#0" ] }, - "887": { + "894": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ "tmp%0#0" ] }, - "888": { + "895": { "op": "btoi", "defined_out": [ "asset_id#0" @@ -5029,7 +5033,7 @@ "asset_id#0" ] }, - "889": { + "896": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -5040,7 +5044,7 @@ "0" ] }, - "890": { + "897": { "op": "bytec_0 // \"initialized\"", "defined_out": [ "\"initialized\"", @@ -5053,7 +5057,7 @@ "\"initialized\"" ] }, - "891": { + "898": { "op": "app_global_get_ex", "defined_out": [ "asset_id#0", @@ -5066,7 +5070,7 @@ "maybe_exists%0#0" ] }, - "892": { + "899": { "error": "check self.initialized exists", "op": "assert // check self.initialized exists", "stack_out": [ @@ -5074,13 +5078,13 @@ "maybe_value%0#0" ] }, - "893": { + "900": { "op": "assert", "stack_out": [ "asset_id#0" ] }, - "894": { + "901": { "op": "dup", "defined_out": [ "asset_id#0", @@ -5091,20 +5095,20 @@ "asset_id#0 (copy)" ] }, - "895": { + "902": { "op": "assert", "stack_out": [ "asset_id#0" ] }, - "896": { + "903": { "op": "dup", "stack_out": [ "asset_id#0", "asset_id#0 (copy)" ] }, - "897": { + "904": { "op": "itob", "defined_out": [ "asset_id#0", @@ -5115,8 +5119,8 @@ "encoded_value%0#0" ] }, - "898": { - "op": "bytec 7 // \"ma_\"", + "905": { + "op": "bytec 5 // \"ma_\"", "defined_out": [ "\"ma_\"", "asset_id#0", @@ -5128,7 +5132,7 @@ "\"ma_\"" ] }, - "900": { + "907": { "op": "dig 1", "defined_out": [ "\"ma_\"", @@ -5143,7 +5147,7 @@ "encoded_value%0#0 (copy)" ] }, - "902": { + "909": { "op": "concat", "defined_out": [ "asset_id#0", @@ -5156,7 +5160,7 @@ "map_prefixed_key%0#0" ] }, - "903": { + "910": { "op": "box_get", "defined_out": [ "asset_id#0", @@ -5171,7 +5175,7 @@ "maybe_exists%1#0" ] }, - "904": { + "911": { "op": "swap", "stack_out": [ "asset_id#0", @@ -5180,7 +5184,7 @@ "maybe_value%1#0" ] }, - "905": { + "912": { "op": "btoi", "defined_out": [ "asset_id#0", @@ -5195,7 +5199,7 @@ "maybe_value_converted%0#0" ] }, - "906": { + "913": { "op": "intc_0 // 0", "stack_out": [ "asset_id#0", @@ -5205,7 +5209,7 @@ "0" ] }, - "907": { + "914": { "op": "swap", "stack_out": [ "asset_id#0", @@ -5215,7 +5219,7 @@ "maybe_value_converted%0#0" ] }, - "908": { + "915": { "op": "uncover 2", "stack_out": [ "asset_id#0", @@ -5225,7 +5229,7 @@ "maybe_exists%1#0" ] }, - "910": { + "917": { "op": "select", "defined_out": [ "asset_id#0", @@ -5238,7 +5242,7 @@ "state_get%0#0" ] }, - "911": { + "918": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -5253,7 +5257,7 @@ "1" ] }, - "912": { + "919": { "op": "==", "defined_out": [ "asset_id#0", @@ -5266,14 +5270,14 @@ "tmp%1#1" ] }, - "913": { + "920": { "op": "assert", "stack_out": [ "asset_id#0", "encoded_value%0#0" ] }, - "914": { + "921": { "op": "intc_0 // 0", "stack_out": [ "asset_id#0", @@ -5281,7 +5285,7 @@ "0" ] }, - "915": { + "922": { "op": "bytec_1 // \"last_reported_quarter\"", "defined_out": [ "\"last_reported_quarter\"", @@ -5296,7 +5300,7 @@ "\"last_reported_quarter\"" ] }, - "916": { + "923": { "op": "app_global_get_ex", "defined_out": [ "asset_id#0", @@ -5311,7 +5315,7 @@ "maybe_exists%2#0" ] }, - "917": { + "924": { "error": "check self.last_reported_quarter exists", "op": "assert // check self.last_reported_quarter exists", "stack_out": [ @@ -5320,7 +5324,7 @@ "maybe_value%2#0" ] }, - "918": { + "925": { "op": "dup", "defined_out": [ "asset_id#0", @@ -5335,7 +5339,7 @@ "maybe_value%2#0 (copy)" ] }, - "919": { + "926": { "op": "assert", "stack_out": [ "asset_id#0", @@ -5343,7 +5347,7 @@ "maybe_value%2#0" ] }, - "920": { + "927": { "op": "txn Sender", "defined_out": [ "asset_id#0", @@ -5358,7 +5362,7 @@ "tmp%3#0" ] }, - "922": { + "929": { "op": "uncover 3", "stack_out": [ "encoded_value%0#0", @@ -5367,7 +5371,7 @@ "asset_id#0" ] }, - "924": { + "931": { "op": "asset_holding_get AssetBalance", "defined_out": [ "encoded_value%0#0", @@ -5382,7 +5386,7 @@ "holder_opted#0" ] }, - "926": { + "933": { "op": "assert", "stack_out": [ "encoded_value%0#0", @@ -5390,7 +5394,7 @@ "holder_balance#0" ] }, - "927": { + "934": { "op": "intc_1 // 1", "stack_out": [ "encoded_value%0#0", @@ -5399,7 +5403,7 @@ "1" ] }, - "928": { + "935": { "op": "==", "defined_out": [ "encoded_value%0#0", @@ -5412,14 +5416,14 @@ "tmp%6#0" ] }, - "929": { + "936": { "op": "assert", "stack_out": [ "encoded_value%0#0", "maybe_value%2#0" ] }, - "930": { + "937": { "op": "bytec 13 // \"lc_\"", "defined_out": [ "\"lc_\"", @@ -5432,7 +5436,7 @@ "\"lc_\"" ] }, - "932": { + "939": { "op": "uncover 2", "stack_out": [ "maybe_value%2#0", @@ -5440,7 +5444,7 @@ "encoded_value%0#0" ] }, - "934": { + "941": { "op": "concat", "defined_out": [ "map_prefixed_key%1#0", @@ -5451,7 +5455,7 @@ "map_prefixed_key%1#0" ] }, - "935": { + "942": { "op": "dup", "defined_out": [ "map_prefixed_key%1#0", @@ -5464,7 +5468,7 @@ "map_prefixed_key%1#0 (copy)" ] }, - "936": { + "943": { "op": "box_get", "defined_out": [ "map_prefixed_key%1#0", @@ -5479,7 +5483,7 @@ "maybe_exists%3#0" ] }, - "937": { + "944": { "op": "swap", "stack_out": [ "maybe_value%2#0", @@ -5488,7 +5492,7 @@ "maybe_value%3#0" ] }, - "938": { + "945": { "op": "btoi", "defined_out": [ "map_prefixed_key%1#0", @@ -5503,7 +5507,7 @@ "maybe_value_converted%1#0" ] }, - "939": { + "946": { "op": "intc_0 // 0", "stack_out": [ "maybe_value%2#0", @@ -5513,7 +5517,7 @@ "0" ] }, - "940": { + "947": { "op": "swap", "stack_out": [ "maybe_value%2#0", @@ -5523,7 +5527,7 @@ "maybe_value_converted%1#0" ] }, - "941": { + "948": { "op": "uncover 2", "stack_out": [ "maybe_value%2#0", @@ -5533,7 +5537,7 @@ "maybe_exists%3#0" ] }, - "943": { + "950": { "op": "select", "defined_out": [ "claimed#0", @@ -5546,7 +5550,7 @@ "claimed#0" ] }, - "944": { + "951": { "op": "dig 2", "stack_out": [ "maybe_value%2#0", @@ -5555,7 +5559,7 @@ "maybe_value%2#0 (copy)" ] }, - "946": { + "953": { "op": "<", "defined_out": [ "map_prefixed_key%1#0", @@ -5568,14 +5572,14 @@ "tmp%7#0" ] }, - "947": { + "954": { "op": "assert", "stack_out": [ "maybe_value%2#0", "map_prefixed_key%1#0" ] }, - "948": { + "955": { "op": "intc_0 // 0", "stack_out": [ "maybe_value%2#0", @@ -5583,8 +5587,8 @@ "0" ] }, - "949": { - "op": "bytec 5 // \"payout_per_nft\"", + "956": { + "op": "bytec 7 // \"payout_per_nft\"", "defined_out": [ "\"payout_per_nft\"", "0", @@ -5598,7 +5602,7 @@ "\"payout_per_nft\"" ] }, - "951": { + "958": { "op": "app_global_get_ex", "defined_out": [ "map_prefixed_key%1#0", @@ -5613,7 +5617,7 @@ "maybe_exists%5#0" ] }, - "952": { + "959": { "error": "check self.payout_per_nft exists", "op": "assert // check self.payout_per_nft exists", "stack_out": [ @@ -5622,7 +5626,7 @@ "maybe_value%5#0" ] }, - "953": { + "960": { "op": "dup", "defined_out": [ "map_prefixed_key%1#0", @@ -5637,7 +5641,7 @@ "maybe_value%5#0 (copy)" ] }, - "954": { + "961": { "op": "assert", "stack_out": [ "maybe_value%2#0", @@ -5645,10 +5649,10 @@ "maybe_value%5#0" ] }, - "955": { + "962": { "op": "itxn_begin" }, - "956": { + "963": { "op": "txn Sender", "defined_out": [ "inner_txn_params%0%%param_Receiver_idx_0#0", @@ -5663,97 +5667,1228 @@ "inner_txn_params%0%%param_Receiver_idx_0#0" ] }, - "958": { - "op": "itxn_field Receiver", + "965": { + "op": "itxn_field Receiver", + "stack_out": [ + "maybe_value%2#0", + "map_prefixed_key%1#0", + "maybe_value%5#0" + ] + }, + "967": { + "op": "itxn_field Amount", + "stack_out": [ + "maybe_value%2#0", + "map_prefixed_key%1#0" + ] + }, + "969": { + "op": "intc_1 // pay", + "defined_out": [ + "map_prefixed_key%1#0", + "maybe_value%2#0", + "pay" + ], + "stack_out": [ + "maybe_value%2#0", + "map_prefixed_key%1#0", + "pay" + ] + }, + "970": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "maybe_value%2#0", + "map_prefixed_key%1#0" + ] + }, + "972": { + "op": "intc_3 // 1000", + "defined_out": [ + "1000", + "map_prefixed_key%1#0", + "maybe_value%2#0" + ], + "stack_out": [ + "maybe_value%2#0", + "map_prefixed_key%1#0", + "1000" + ] + }, + "973": { + "op": "itxn_field Fee", + "stack_out": [ + "maybe_value%2#0", + "map_prefixed_key%1#0" + ] + }, + "975": { + "op": "itxn_submit" + }, + "976": { + "op": "swap", + "stack_out": [ + "map_prefixed_key%1#0", + "maybe_value%2#0" + ] + }, + "977": { + "op": "itob", + "defined_out": [ + "encoded_value%3#0", + "map_prefixed_key%1#0" + ], + "stack_out": [ + "map_prefixed_key%1#0", + "encoded_value%3#0" + ] + }, + "978": { + "op": "box_put", + "stack_out": [] + }, + "979": { + "op": "intc_1 // 1", + "stack_out": [ + "1" + ] + }, + "980": { + "op": "return", + "stack_out": [] + }, + "981": { + "subroutine": "smart_contracts.algomint.contract.Algomint.secondary_sale[routing]", + "params": {}, + "block": "secondary_sale", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "984": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "985": { + "op": "len", + "defined_out": [ + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0" + ] + }, + "986": { + "op": "intc_2 // 8", + "defined_out": [ + "8", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0", + "8" + ] + }, + "987": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "988": { + "error": "invalid number of bytes for arc4.uint64", + "op": "assert // invalid number of bytes for arc4.uint64", + "stack_out": [ + "tmp%0#0" + ] + }, + "989": { + "op": "btoi", + "defined_out": [ + "asset_id#0" + ], + "stack_out": [ + "asset_id#0" + ] + }, + "990": { + "op": "txn GroupIndex", + "defined_out": [ + "asset_id#0", + "tmp%2#0" + ], + "stack_out": [ + "asset_id#0", + "tmp%2#0" + ] + }, + "992": { + "op": "pushint 3", + "defined_out": [ + "3", + "asset_id#0", + "tmp%2#0" + ], + "stack_out": [ + "asset_id#0", + "tmp%2#0", + "3" + ] + }, + "994": { + "op": "-", + "defined_out": [ + "asset_id#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0" + ] + }, + "995": { + "op": "dup", + "defined_out": [ + "asset_id#0", + "seller_payment#0", + "seller_payment#0 (copy)" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "seller_payment#0 (copy)" + ] + }, + "996": { + "op": "gtxns TypeEnum", + "defined_out": [ + "asset_id#0", + "gtxn_type%0#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "gtxn_type%0#0" + ] + }, + "998": { + "op": "intc_1 // pay", + "defined_out": [ + "asset_id#0", + "gtxn_type%0#0", + "pay", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "gtxn_type%0#0", + "pay" + ] + }, + "999": { + "op": "==", + "defined_out": [ + "asset_id#0", + "gtxn_type_matches%0#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "gtxn_type_matches%0#0" + ] + }, + "1000": { + "error": "transaction type is pay", + "op": "assert // transaction type is pay", + "stack_out": [ + "asset_id#0", + "seller_payment#0" + ] + }, + "1001": { + "op": "txn GroupIndex", + "defined_out": [ + "asset_id#0", + "seller_payment#0", + "tmp%3#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "tmp%3#0" + ] + }, + "1003": { + "op": "pushint 2", + "defined_out": [ + "2", + "asset_id#0", + "seller_payment#0", + "tmp%3#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "tmp%3#0", + "2" + ] + }, + "1005": { + "op": "-", + "defined_out": [ + "asset_id#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0" + ] + }, + "1006": { + "op": "dup", + "defined_out": [ + "asset_id#0", + "royalty_payment#0", + "royalty_payment#0 (copy)", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "royalty_payment#0 (copy)" + ] + }, + "1007": { + "op": "gtxns TypeEnum", + "defined_out": [ + "asset_id#0", + "gtxn_type%1#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "gtxn_type%1#0" + ] + }, + "1009": { + "op": "intc_1 // pay", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "gtxn_type%1#0", + "pay" + ] + }, + "1010": { + "op": "==", + "defined_out": [ + "asset_id#0", + "gtxn_type_matches%1#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "gtxn_type_matches%1#0" + ] + }, + "1011": { + "error": "transaction type is pay", + "op": "assert // transaction type is pay", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0" + ] + }, + "1012": { + "op": "txn GroupIndex", + "defined_out": [ + "asset_id#0", + "royalty_payment#0", + "seller_payment#0", + "tmp%4#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "tmp%4#0" + ] + }, + "1014": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "asset_id#0", + "royalty_payment#0", + "seller_payment#0", + "tmp%4#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "tmp%4#0", + "1" + ] + }, + "1015": { + "op": "-", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0" + ] + }, + "1016": { + "op": "dup", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "asset_transfer#0 (copy)", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "asset_transfer#0 (copy)" + ] + }, + "1017": { + "op": "gtxns TypeEnum", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "gtxn_type%2#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "gtxn_type%2#0" + ] + }, + "1019": { + "op": "pushint 4 // axfer", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "axfer", + "gtxn_type%2#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "gtxn_type%2#0", + "axfer" + ] + }, + "1021": { + "op": "==", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "gtxn_type_matches%2#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "gtxn_type_matches%2#0" + ] + }, + "1022": { + "error": "transaction type is axfer", + "op": "assert // transaction type is axfer", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0" + ] + }, + "1023": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "asset_id#0", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "0" + ] + }, + "1024": { + "op": "bytec_0 // \"initialized\"", + "defined_out": [ + "\"initialized\"", + "0", + "asset_id#0", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "0", + "\"initialized\"" + ] + }, + "1025": { + "op": "app_global_get_ex", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "1026": { + "error": "check self.initialized exists", + "op": "assert // check self.initialized exists", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "maybe_value%0#0" + ] + }, + "1027": { + "op": "assert", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0" + ] + }, + "1028": { + "op": "dig 3", + "defined_out": [ + "asset_id#0", + "asset_id#0 (copy)", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "asset_id#0 (copy)" + ] + }, + "1030": { + "op": "assert", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0" + ] + }, + "1031": { + "op": "dig 3", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "asset_id#0 (copy)" + ] + }, + "1033": { + "op": "itob", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "encoded_value%0#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "encoded_value%0#0" + ] + }, + "1034": { + "op": "bytec 5 // \"ma_\"", + "defined_out": [ + "\"ma_\"", + "asset_id#0", + "asset_transfer#0", + "encoded_value%0#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "encoded_value%0#0", + "\"ma_\"" + ] + }, + "1036": { + "op": "swap", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "\"ma_\"", + "encoded_value%0#0" + ] + }, + "1037": { + "op": "concat", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "map_prefixed_key%0#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "map_prefixed_key%0#0" + ] + }, + "1038": { + "op": "box_get", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "maybe_exists%1#0", + "maybe_value%1#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "1039": { + "op": "swap", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "maybe_exists%1#0", + "maybe_value%1#0" + ] + }, + "1040": { + "op": "btoi", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "maybe_exists%1#0", + "maybe_value_converted%0#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "maybe_exists%1#0", + "maybe_value_converted%0#0" + ] + }, + "1041": { + "op": "intc_0 // 0", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "maybe_exists%1#0", + "maybe_value_converted%0#0", + "0" + ] + }, + "1042": { + "op": "swap", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "maybe_exists%1#0", + "0", + "maybe_value_converted%0#0" + ] + }, + "1043": { + "op": "uncover 2", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "0", + "maybe_value_converted%0#0", + "maybe_exists%1#0" + ] + }, + "1045": { + "op": "select", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0", + "state_get%0#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "state_get%0#0" + ] + }, + "1046": { + "op": "intc_1 // 1", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "state_get%0#0", + "1" + ] + }, + "1047": { + "op": "==", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0", + "tmp%1#1" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "tmp%1#1" + ] + }, + "1048": { + "op": "assert", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0" + ] + }, + "1049": { + "op": "dig 2", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "seller_payment#0 (copy)" + ] + }, + "1051": { + "op": "gtxns Receiver", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0", + "tmp%2#1" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "tmp%2#1" + ] + }, + "1053": { + "op": "dig 1", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "tmp%2#1", + "asset_transfer#0 (copy)" + ] + }, + "1055": { + "op": "gtxns Sender", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0", + "tmp%2#1", + "tmp%3#1" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "tmp%2#1", + "tmp%3#1" + ] + }, + "1057": { + "op": "==", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0", + "tmp%4#1" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "tmp%4#1" + ] + }, + "1058": { + "op": "assert", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0" + ] + }, + "1059": { + "op": "dig 2", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "seller_payment#0 (copy)" + ] + }, + "1061": { + "op": "gtxns Amount", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0", + "tmp%5#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "tmp%5#0" + ] + }, + "1063": { + "op": "pushint 10", + "defined_out": [ + "10", + "asset_id#0", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0", + "tmp%5#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "tmp%5#0", + "10" + ] + }, + "1065": { + "op": "/", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "expected_royalty#0", + "royalty_payment#0", + "seller_payment#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "expected_royalty#0" + ] + }, + "1066": { + "op": "dig 2", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "expected_royalty#0", + "royalty_payment#0 (copy)" + ] + }, + "1068": { + "op": "gtxns Amount", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "expected_royalty#0", + "royalty_payment#0", + "seller_payment#0", + "tmp%7#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "expected_royalty#0", + "tmp%7#0" + ] + }, + "1070": { + "op": "<=", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "royalty_payment#0", + "seller_payment#0", + "tmp%8#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0", + "tmp%8#0" + ] + }, + "1071": { + "op": "assert", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "royalty_payment#0", + "asset_transfer#0" + ] + }, + "1072": { + "op": "swap", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "asset_transfer#0", + "royalty_payment#0" + ] + }, + "1073": { + "op": "gtxns Receiver", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "seller_payment#0", + "tmp%9#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "asset_transfer#0", + "tmp%9#0" + ] + }, + "1075": { + "op": "intc_0 // 0", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "asset_transfer#0", + "tmp%9#0", + "0" + ] + }, + "1076": { + "op": "bytec 4 // \"creator\"", + "defined_out": [ + "\"creator\"", + "0", + "asset_id#0", + "asset_transfer#0", + "seller_payment#0", + "tmp%9#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "asset_transfer#0", + "tmp%9#0", + "0", + "\"creator\"" + ] + }, + "1078": { + "op": "app_global_get_ex", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "maybe_exists%2#0", + "maybe_value%2#0", + "seller_payment#0", + "tmp%9#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "asset_transfer#0", + "tmp%9#0", + "maybe_value%2#0", + "maybe_exists%2#0" + ] + }, + "1079": { + "error": "check self.creator exists", + "op": "assert // check self.creator exists", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "asset_transfer#0", + "tmp%9#0", + "maybe_value%2#0" + ] + }, + "1080": { + "op": "==", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "seller_payment#0", + "tmp%10#0" + ], + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "asset_transfer#0", + "tmp%10#0" + ] + }, + "1081": { + "op": "assert", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "asset_transfer#0" + ] + }, + "1082": { + "op": "dup", + "stack_out": [ + "asset_id#0", + "seller_payment#0", + "asset_transfer#0", + "asset_transfer#0 (copy)" + ] + }, + "1083": { + "op": "gtxns XferAsset", + "defined_out": [ + "asset_id#0", + "asset_transfer#0", + "seller_payment#0", + "tmp%11#0" + ], "stack_out": [ - "maybe_value%2#0", - "map_prefixed_key%1#0", - "maybe_value%5#0" + "asset_id#0", + "seller_payment#0", + "asset_transfer#0", + "tmp%11#0" ] }, - "960": { - "op": "itxn_field Amount", + "1085": { + "op": "uncover 3", "stack_out": [ - "maybe_value%2#0", - "map_prefixed_key%1#0" + "seller_payment#0", + "asset_transfer#0", + "tmp%11#0", + "asset_id#0" ] }, - "962": { - "op": "intc_1 // pay", + "1087": { + "op": "==", "defined_out": [ - "map_prefixed_key%1#0", - "maybe_value%2#0", - "pay" + "asset_transfer#0", + "seller_payment#0", + "tmp%12#0" ], "stack_out": [ - "maybe_value%2#0", - "map_prefixed_key%1#0", - "pay" + "seller_payment#0", + "asset_transfer#0", + "tmp%12#0" ] }, - "963": { - "op": "itxn_field TypeEnum", + "1088": { + "op": "assert", "stack_out": [ - "maybe_value%2#0", - "map_prefixed_key%1#0" + "seller_payment#0", + "asset_transfer#0" ] }, - "965": { - "op": "intc_3 // 1000", + "1089": { + "op": "gtxns AssetReceiver", "defined_out": [ - "1000", - "map_prefixed_key%1#0", - "maybe_value%2#0" + "seller_payment#0", + "tmp%13#0" ], "stack_out": [ - "maybe_value%2#0", - "map_prefixed_key%1#0", - "1000" + "seller_payment#0", + "tmp%13#0" ] }, - "966": { - "op": "itxn_field Fee", + "1091": { + "op": "swap", "stack_out": [ - "maybe_value%2#0", - "map_prefixed_key%1#0" + "tmp%13#0", + "seller_payment#0" ] }, - "968": { - "op": "itxn_submit" - }, - "969": { - "op": "swap", + "1092": { + "op": "gtxns Sender", + "defined_out": [ + "tmp%13#0", + "tmp%14#0" + ], "stack_out": [ - "map_prefixed_key%1#0", - "maybe_value%2#0" + "tmp%13#0", + "tmp%14#0" ] }, - "970": { - "op": "itob", + "1094": { + "op": "==", "defined_out": [ - "encoded_value%3#0", - "map_prefixed_key%1#0" + "tmp%15#0" ], "stack_out": [ - "map_prefixed_key%1#0", - "encoded_value%3#0" + "tmp%15#0" ] }, - "971": { - "op": "box_put", + "1095": { + "op": "assert", "stack_out": [] }, - "972": { + "1096": { "op": "intc_1 // 1", "stack_out": [ "1" ] }, - "973": { + "1097": { "op": "return", "stack_out": [] }, - "974": { + "1098": { "subroutine": "smart_contracts.algomint.contract.Algomint.get_pending_payout[routing]", "params": {}, "block": "get_pending_payout", @@ -5763,7 +6898,7 @@ "holder_balance#0" ] }, - "976": { + "1100": { "op": "txna ApplicationArgs 1", "defined_out": [ "tmp%0#0" @@ -5773,7 +6908,7 @@ "tmp%0#0" ] }, - "979": { + "1103": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -5785,7 +6920,7 @@ "tmp%0#0 (copy)" ] }, - "980": { + "1104": { "op": "len", "defined_out": [ "len%0#0", @@ -5797,7 +6932,7 @@ "len%0#0" ] }, - "981": { + "1105": { "op": "intc_2 // 8", "defined_out": [ "8", @@ -5811,7 +6946,7 @@ "8" ] }, - "982": { + "1106": { "op": "==", "defined_out": [ "eq%0#0", @@ -5823,7 +6958,7 @@ "eq%0#0" ] }, - "983": { + "1107": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ @@ -5831,7 +6966,7 @@ "tmp%0#0" ] }, - "984": { + "1108": { "op": "btoi", "defined_out": [ "asset_id#0" @@ -5841,7 +6976,7 @@ "asset_id#0" ] }, - "985": { + "1109": { "op": "dup", "defined_out": [ "asset_id#0" @@ -5852,10 +6987,10 @@ "asset_id#0" ] }, - "986": { + "1110": { "op": "txna ApplicationArgs 2" }, - "989": { + "1113": { "op": "dup", "defined_out": [ "address#0", @@ -5869,7 +7004,7 @@ "address#0" ] }, - "990": { + "1114": { "op": "cover 2", "defined_out": [ "address#0", @@ -5883,7 +7018,7 @@ "address#0" ] }, - "992": { + "1116": { "op": "dup", "defined_out": [ "address#0", @@ -5899,7 +7034,7 @@ "address#0 (copy)" ] }, - "993": { + "1117": { "op": "len", "defined_out": [ "address#0", @@ -5915,7 +7050,7 @@ "len%1#0" ] }, - "994": { + "1118": { "op": "pushint 32", "defined_out": [ "32", @@ -5933,7 +7068,7 @@ "32" ] }, - "996": { + "1120": { "op": "==", "defined_out": [ "address#0", @@ -5949,7 +7084,7 @@ "eq%1#0" ] }, - "997": { + "1121": { "error": "invalid number of bytes for arc4.static_array", "op": "assert // invalid number of bytes for arc4.static_array", "stack_out": [ @@ -5960,7 +7095,7 @@ "address#0" ] }, - "998": { + "1122": { "op": "intc_0 // 0", "stack_out": [ "holder_balance#0", @@ -5971,7 +7106,7 @@ "0" ] }, - "999": { + "1123": { "op": "bytec_0 // \"initialized\"", "defined_out": [ "\"initialized\"", @@ -5989,7 +7124,7 @@ "\"initialized\"" ] }, - "1000": { + "1124": { "op": "app_global_get_ex", "defined_out": [ "address#0", @@ -6007,7 +7142,7 @@ "maybe_exists%0#0" ] }, - "1001": { + "1125": { "error": "check self.initialized exists", "op": "assert // check self.initialized exists", "stack_out": [ @@ -6019,7 +7154,7 @@ "maybe_value%0#0" ] }, - "1002": { + "1126": { "op": "assert", "stack_out": [ "holder_balance#0", @@ -6029,7 +7164,7 @@ "address#0" ] }, - "1003": { + "1127": { "op": "dig 1", "defined_out": [ "address#0", @@ -6045,7 +7180,7 @@ "asset_id#0 (copy)" ] }, - "1005": { + "1129": { "op": "assert", "stack_out": [ "holder_balance#0", @@ -6055,7 +7190,7 @@ "address#0" ] }, - "1006": { + "1130": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6065,7 +7200,7 @@ "asset_id#0" ] }, - "1007": { + "1131": { "op": "itob", "defined_out": [ "address#0", @@ -6080,7 +7215,7 @@ "encoded_value%0#0" ] }, - "1008": { + "1132": { "op": "dup", "stack_out": [ "holder_balance#0", @@ -6091,7 +7226,7 @@ "encoded_value%0#0" ] }, - "1009": { + "1133": { "op": "cover 2", "defined_out": [ "address#0", @@ -6107,8 +7242,8 @@ "encoded_value%0#0" ] }, - "1011": { - "op": "bytec 7 // \"ma_\"", + "1135": { + "op": "bytec 5 // \"ma_\"", "defined_out": [ "\"ma_\"", "address#0", @@ -6125,7 +7260,7 @@ "\"ma_\"" ] }, - "1013": { + "1137": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6137,7 +7272,7 @@ "encoded_value%0#0" ] }, - "1014": { + "1138": { "op": "concat", "defined_out": [ "address#0", @@ -6154,7 +7289,7 @@ "map_prefixed_key%0#0" ] }, - "1015": { + "1139": { "op": "box_get", "defined_out": [ "address#0", @@ -6173,7 +7308,7 @@ "maybe_exists%1#0" ] }, - "1016": { + "1140": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6185,7 +7320,7 @@ "maybe_value%1#0" ] }, - "1017": { + "1141": { "op": "btoi", "defined_out": [ "address#0", @@ -6204,7 +7339,7 @@ "maybe_value_converted%0#0" ] }, - "1018": { + "1142": { "op": "intc_0 // 0", "stack_out": [ "holder_balance#0", @@ -6217,7 +7352,7 @@ "0" ] }, - "1019": { + "1143": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6230,7 +7365,7 @@ "maybe_value_converted%0#0" ] }, - "1020": { + "1144": { "op": "uncover 2", "stack_out": [ "holder_balance#0", @@ -6243,7 +7378,7 @@ "maybe_exists%1#0" ] }, - "1022": { + "1146": { "op": "select", "defined_out": [ "address#0", @@ -6260,7 +7395,7 @@ "state_get%0#0" ] }, - "1023": { + "1147": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -6279,7 +7414,7 @@ "1" ] }, - "1024": { + "1148": { "op": "==", "defined_out": [ "address#0", @@ -6296,7 +7431,7 @@ "tmp%1#1" ] }, - "1025": { + "1149": { "op": "assert", "stack_out": [ "holder_balance#0", @@ -6306,7 +7441,7 @@ "address#0" ] }, - "1026": { + "1150": { "op": "global ZeroAddress", "defined_out": [ "address#0", @@ -6323,7 +7458,7 @@ "tmp%2#1" ] }, - "1028": { + "1152": { "op": "!=", "defined_out": [ "address#0", @@ -6339,7 +7474,7 @@ "tmp%3#1" ] }, - "1029": { + "1153": { "op": "assert", "stack_out": [ "holder_balance#0", @@ -6348,7 +7483,7 @@ "encoded_value%0#0" ] }, - "1030": { + "1154": { "op": "intc_0 // 0", "stack_out": [ "holder_balance#0", @@ -6358,7 +7493,7 @@ "0" ] }, - "1031": { + "1155": { "op": "bytec_1 // \"last_reported_quarter\"", "defined_out": [ "\"last_reported_quarter\"", @@ -6376,7 +7511,7 @@ "\"last_reported_quarter\"" ] }, - "1032": { + "1156": { "op": "app_global_get_ex", "defined_out": [ "address#0", @@ -6394,7 +7529,7 @@ "maybe_exists%2#0" ] }, - "1033": { + "1157": { "error": "check self.last_reported_quarter exists", "op": "assert // check self.last_reported_quarter exists", "stack_out": [ @@ -6405,7 +7540,7 @@ "maybe_value%2#0" ] }, - "1034": { + "1158": { "op": "bnz get_pending_payout_after_if_else@3", "stack_out": [ "holder_balance#0", @@ -6414,7 +7549,7 @@ "encoded_value%0#0" ] }, - "1037": { + "1161": { "op": "intc_0 // 0", "defined_out": [ "address#0", @@ -6430,7 +7565,7 @@ "tmp%4#0" ] }, - "1038": { + "1162": { "block": "get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10", "stack_in": [ "holder_balance#0", @@ -6451,7 +7586,7 @@ "aggregate%val_as_bytes%0#0" ] }, - "1039": { + "1163": { "op": "bytec 14 // 0x151f7c75", "defined_out": [ "0x151f7c75", @@ -6466,7 +7601,7 @@ "0x151f7c75" ] }, - "1041": { + "1165": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6477,7 +7612,7 @@ "aggregate%val_as_bytes%0#0" ] }, - "1042": { + "1166": { "op": "concat", "defined_out": [ "tmp%6#0" @@ -6490,7 +7625,7 @@ "tmp%6#0" ] }, - "1043": { + "1167": { "op": "log", "stack_out": [ "holder_balance#0", @@ -6499,7 +7634,7 @@ "encoded_value%0#0" ] }, - "1044": { + "1168": { "op": "intc_1 // 1", "defined_out": [ "1" @@ -6512,7 +7647,7 @@ "1" ] }, - "1045": { + "1169": { "op": "return", "stack_out": [ "holder_balance#0", @@ -6521,7 +7656,7 @@ "encoded_value%0#0" ] }, - "1046": { + "1170": { "block": "get_pending_payout_after_if_else@3", "stack_in": [ "holder_balance#0", @@ -6541,7 +7676,7 @@ "address#0" ] }, - "1048": { + "1172": { "op": "dig 3", "defined_out": [ "address#0", @@ -6556,7 +7691,7 @@ "asset_id#0" ] }, - "1050": { + "1174": { "op": "asset_holding_get AssetBalance", "defined_out": [ "address#0", @@ -6573,7 +7708,7 @@ "holder_opted#0" ] }, - "1052": { + "1176": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6584,7 +7719,7 @@ "holder_balance#0" ] }, - "1053": { + "1177": { "op": "bury 5", "defined_out": [ "address#0", @@ -6600,7 +7735,7 @@ "holder_opted#0" ] }, - "1055": { + "1179": { "op": "bnz get_pending_payout_after_if_else@5", "stack_out": [ "holder_balance#0", @@ -6609,7 +7744,7 @@ "encoded_value%0#0" ] }, - "1058": { + "1182": { "op": "intc_0 // 0", "defined_out": [ "address#0", @@ -6625,10 +7760,10 @@ "tmp%4#0" ] }, - "1059": { + "1183": { "op": "b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10" }, - "1062": { + "1186": { "block": "get_pending_payout_after_if_else@5", "stack_in": [ "holder_balance#0", @@ -6648,7 +7783,7 @@ "holder_balance#0" ] }, - "1064": { + "1188": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -6663,7 +7798,7 @@ "1" ] }, - "1065": { + "1189": { "op": "!=", "defined_out": [ "holder_balance#0", @@ -6677,7 +7812,7 @@ "tmp%7#0" ] }, - "1066": { + "1190": { "op": "bz get_pending_payout_after_if_else@7", "stack_out": [ "holder_balance#0", @@ -6686,7 +7821,7 @@ "encoded_value%0#0" ] }, - "1069": { + "1193": { "op": "intc_0 // 0", "defined_out": [ "holder_balance#0", @@ -6700,10 +7835,10 @@ "tmp%4#0" ] }, - "1070": { + "1194": { "op": "b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10" }, - "1073": { + "1197": { "block": "get_pending_payout_after_if_else@7", "stack_in": [ "holder_balance#0", @@ -6723,7 +7858,7 @@ "\"lc_\"" ] }, - "1075": { + "1199": { "op": "dig 1", "defined_out": [ "\"lc_\"", @@ -6738,7 +7873,7 @@ "encoded_value%0#0" ] }, - "1077": { + "1201": { "op": "concat", "defined_out": [ "encoded_value%0#0", @@ -6752,7 +7887,7 @@ "map_prefixed_key%1#0" ] }, - "1078": { + "1202": { "op": "box_get", "defined_out": [ "encoded_value%0#0", @@ -6768,7 +7903,7 @@ "maybe_exists%3#0" ] }, - "1079": { + "1203": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6779,7 +7914,7 @@ "maybe_value%3#0" ] }, - "1080": { + "1204": { "op": "btoi", "defined_out": [ "encoded_value%0#0", @@ -6795,7 +7930,7 @@ "maybe_value_converted%1#0" ] }, - "1081": { + "1205": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -6813,7 +7948,7 @@ "0" ] }, - "1082": { + "1206": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6825,7 +7960,7 @@ "maybe_value_converted%1#0" ] }, - "1083": { + "1207": { "op": "uncover 2", "stack_out": [ "holder_balance#0", @@ -6837,7 +7972,7 @@ "maybe_exists%3#0" ] }, - "1085": { + "1209": { "op": "select", "defined_out": [ "claimed#0", @@ -6851,7 +7986,7 @@ "claimed#0" ] }, - "1086": { + "1210": { "op": "intc_0 // 0", "stack_out": [ "holder_balance#0", @@ -6862,7 +7997,7 @@ "0" ] }, - "1087": { + "1211": { "op": "bytec_1 // \"last_reported_quarter\"", "defined_out": [ "\"last_reported_quarter\"", @@ -6880,7 +8015,7 @@ "\"last_reported_quarter\"" ] }, - "1088": { + "1212": { "op": "app_global_get_ex", "defined_out": [ "claimed#0", @@ -6898,7 +8033,7 @@ "maybe_exists%4#0" ] }, - "1089": { + "1213": { "error": "check self.last_reported_quarter exists", "op": "assert // check self.last_reported_quarter exists", "stack_out": [ @@ -6910,7 +8045,7 @@ "maybe_value%4#0" ] }, - "1090": { + "1214": { "op": "<", "defined_out": [ "encoded_value%0#0", @@ -6924,7 +8059,7 @@ "tmp%8#0" ] }, - "1091": { + "1215": { "op": "bz get_pending_payout_after_if_else@9", "stack_out": [ "holder_balance#0", @@ -6933,7 +8068,7 @@ "encoded_value%0#0" ] }, - "1094": { + "1218": { "op": "intc_0 // 0", "stack_out": [ "holder_balance#0", @@ -6943,8 +8078,8 @@ "0" ] }, - "1095": { - "op": "bytec 5 // \"payout_per_nft\"", + "1219": { + "op": "bytec 7 // \"payout_per_nft\"", "defined_out": [ "\"payout_per_nft\"", "0", @@ -6959,7 +8094,7 @@ "\"payout_per_nft\"" ] }, - "1097": { + "1221": { "op": "app_global_get_ex", "defined_out": [ "encoded_value%0#0", @@ -6975,7 +8110,7 @@ "maybe_exists%5#0" ] }, - "1098": { + "1222": { "error": "check self.payout_per_nft exists", "op": "assert // check self.payout_per_nft exists", "defined_out": [ @@ -6990,10 +8125,10 @@ "tmp%4#0" ] }, - "1099": { + "1223": { "op": "b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10" }, - "1102": { + "1226": { "block": "get_pending_payout_after_if_else@9", "stack_in": [ "holder_balance#0", @@ -7013,10 +8148,10 @@ "tmp%4#0" ] }, - "1103": { + "1227": { "op": "b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10" }, - "1106": { + "1230": { "subroutine": "smart_contracts.algomint.contract.Algomint.get_terms[routing]", "params": {}, "block": "get_terms", @@ -7026,7 +8161,7 @@ "tmp%0#0" ] }, - "1107": { + "1231": { "op": "dup", "defined_out": [ "0" @@ -7036,7 +8171,7 @@ "0" ] }, - "1108": { + "1232": { "op": "bytec_0 // \"initialized\"", "defined_out": [ "\"initialized\"", @@ -7048,7 +8183,7 @@ "\"initialized\"" ] }, - "1109": { + "1233": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%0#0", @@ -7060,7 +8195,7 @@ "maybe_exists%0#0" ] }, - "1110": { + "1234": { "error": "check self.initialized exists", "op": "assert // check self.initialized exists", "stack_out": [ @@ -7068,13 +8203,13 @@ "maybe_value%0#0" ] }, - "1111": { + "1235": { "op": "bnz get_terms_after_if_else@3", "stack_out": [ "tmp%0#0" ] }, - "1114": { + "1238": { "op": "global ZeroAddress", "defined_out": [ "tmp%0#0" @@ -7084,7 +8219,7 @@ "tmp%0#0" ] }, - "1116": { + "1240": { "op": "bury 1", "defined_out": [ "tmp%0#0" @@ -7093,10 +8228,10 @@ "tmp%0#0" ] }, - "1118": { + "1242": { "op": "intc_0 // 0" }, - "1119": { + "1243": { "op": "dupn 5", "defined_out": [ "tmp%0#0", @@ -7117,7 +8252,7 @@ "tmp%6#0" ] }, - "1121": { + "1245": { "block": "get_terms_after_inlined_smart_contracts.algomint.contract.Algomint.get_terms@4", "stack_in": [ "tmp%0#0", @@ -7142,7 +8277,7 @@ "tmp%1#0" ] }, - "1123": { + "1247": { "op": "itob", "defined_out": [ "aggregate%val_as_bytes%0#0" @@ -7157,7 +8292,7 @@ "aggregate%val_as_bytes%0#0" ] }, - "1124": { + "1248": { "op": "dig 6", "defined_out": [ "aggregate%val_as_bytes%0#0", @@ -7174,7 +8309,7 @@ "tmp%0#0" ] }, - "1126": { + "1250": { "op": "swap", "stack_out": [ "tmp%0#0", @@ -7187,7 +8322,7 @@ "aggregate%val_as_bytes%0#0" ] }, - "1127": { + "1251": { "op": "concat", "defined_out": [ "aggregate%head%1#0", @@ -7203,7 +8338,7 @@ "aggregate%head%1#0" ] }, - "1128": { + "1252": { "op": "uncover 5", "defined_out": [ "aggregate%head%1#0", @@ -7220,7 +8355,7 @@ "tmp%2#0" ] }, - "1130": { + "1254": { "op": "itob", "defined_out": [ "aggregate%head%1#0", @@ -7237,7 +8372,7 @@ "aggregate%val_as_bytes%1#0" ] }, - "1131": { + "1255": { "op": "concat", "defined_out": [ "aggregate%head%2#0", @@ -7252,7 +8387,7 @@ "aggregate%head%2#0" ] }, - "1132": { + "1256": { "op": "uncover 4", "defined_out": [ "aggregate%head%2#0", @@ -7268,7 +8403,7 @@ "tmp%3#0" ] }, - "1134": { + "1258": { "op": "itob", "defined_out": [ "aggregate%head%2#0", @@ -7284,7 +8419,7 @@ "aggregate%val_as_bytes%2#0" ] }, - "1135": { + "1259": { "op": "concat", "defined_out": [ "aggregate%head%3#0", @@ -7298,7 +8433,7 @@ "aggregate%head%3#0" ] }, - "1136": { + "1260": { "op": "uncover 3", "defined_out": [ "aggregate%head%3#0", @@ -7313,7 +8448,7 @@ "tmp%4#0" ] }, - "1138": { + "1262": { "op": "itob", "defined_out": [ "aggregate%head%3#0", @@ -7328,7 +8463,7 @@ "aggregate%val_as_bytes%3#0" ] }, - "1139": { + "1263": { "op": "concat", "defined_out": [ "aggregate%head%4#0", @@ -7341,7 +8476,7 @@ "aggregate%head%4#0" ] }, - "1140": { + "1264": { "op": "uncover 2", "defined_out": [ "aggregate%head%4#0", @@ -7355,7 +8490,7 @@ "tmp%5#0" ] }, - "1142": { + "1266": { "op": "itob", "defined_out": [ "aggregate%head%4#0", @@ -7369,7 +8504,7 @@ "aggregate%val_as_bytes%4#0" ] }, - "1143": { + "1267": { "op": "concat", "defined_out": [ "aggregate%head%5#0", @@ -7381,7 +8516,7 @@ "aggregate%head%5#0" ] }, - "1144": { + "1268": { "op": "swap", "defined_out": [ "aggregate%head%5#0", @@ -7394,7 +8529,7 @@ "tmp%6#0" ] }, - "1145": { + "1269": { "op": "itob", "defined_out": [ "aggregate%head%5#0", @@ -7407,7 +8542,7 @@ "aggregate%val_as_bytes%5#0" ] }, - "1146": { + "1270": { "op": "concat", "defined_out": [ "aggregate%head%6#0", @@ -7418,7 +8553,7 @@ "aggregate%head%6#0" ] }, - "1147": { + "1271": { "op": "bytec 14 // 0x151f7c75", "defined_out": [ "0x151f7c75", @@ -7431,7 +8566,7 @@ "0x151f7c75" ] }, - "1149": { + "1273": { "op": "swap", "stack_out": [ "tmp%0#0", @@ -7439,7 +8574,7 @@ "aggregate%head%6#0" ] }, - "1150": { + "1274": { "op": "concat", "defined_out": [ "tmp%0#0", @@ -7450,13 +8585,13 @@ "tmp%8#0" ] }, - "1151": { + "1275": { "op": "log", "stack_out": [ "tmp%0#0" ] }, - "1152": { + "1276": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -7467,13 +8602,13 @@ "1" ] }, - "1153": { + "1277": { "op": "return", "stack_out": [ "tmp%0#0" ] }, - "1154": { + "1278": { "block": "get_terms_after_if_else@3", "stack_in": [ "tmp%0#0" @@ -7487,8 +8622,8 @@ "0" ] }, - "1155": { - "op": "bytec 6 // \"creator\"", + "1279": { + "op": "bytec 4 // \"creator\"", "defined_out": [ "\"creator\"", "0" @@ -7499,7 +8634,7 @@ "\"creator\"" ] }, - "1157": { + "1281": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%1#0", @@ -7511,7 +8646,7 @@ "maybe_exists%1#0" ] }, - "1158": { + "1282": { "error": "check self.creator exists", "op": "assert // check self.creator exists", "stack_out": [ @@ -7519,7 +8654,7 @@ "maybe_value%1#0" ] }, - "1159": { + "1283": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7527,7 +8662,7 @@ "0" ] }, - "1160": { + "1284": { "op": "bytec_2 // \"total_nfts\"", "defined_out": [ "\"total_nfts\"", @@ -7541,7 +8676,7 @@ "\"total_nfts\"" ] }, - "1161": { + "1285": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%2#0", @@ -7555,7 +8690,7 @@ "maybe_exists%2#0" ] }, - "1162": { + "1286": { "error": "check self.total_nfts exists", "op": "assert // check self.total_nfts exists", "stack_out": [ @@ -7564,7 +8699,7 @@ "maybe_value%2#0" ] }, - "1163": { + "1287": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7573,7 +8708,7 @@ "0" ] }, - "1164": { + "1288": { "op": "bytec_3 // \"total_pct_bps\"", "defined_out": [ "\"total_pct_bps\"", @@ -7589,7 +8724,7 @@ "\"total_pct_bps\"" ] }, - "1165": { + "1289": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%3#0", @@ -7605,7 +8740,7 @@ "maybe_exists%3#0" ] }, - "1166": { + "1290": { "error": "check self.total_pct_bps exists", "op": "assert // check self.total_pct_bps exists", "stack_out": [ @@ -7615,7 +8750,7 @@ "maybe_value%3#0" ] }, - "1167": { + "1291": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7625,7 +8760,7 @@ "0" ] }, - "1168": { + "1292": { "op": "bytec 8 // \"duration_years\"", "defined_out": [ "\"duration_years\"", @@ -7643,7 +8778,7 @@ "\"duration_years\"" ] }, - "1170": { + "1294": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%4#0", @@ -7661,7 +8796,7 @@ "maybe_exists%4#0" ] }, - "1171": { + "1295": { "error": "check self.duration_years exists", "op": "assert // check self.duration_years exists", "stack_out": [ @@ -7672,7 +8807,7 @@ "maybe_value%4#0" ] }, - "1172": { + "1296": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7683,7 +8818,7 @@ "0" ] }, - "1173": { + "1297": { "op": "bytec 9 // \"start_quarter\"", "defined_out": [ "\"start_quarter\"", @@ -7703,7 +8838,7 @@ "\"start_quarter\"" ] }, - "1175": { + "1299": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%5#0", @@ -7723,7 +8858,7 @@ "maybe_exists%5#0" ] }, - "1176": { + "1300": { "error": "check self.start_quarter exists", "op": "assert // check self.start_quarter exists", "stack_out": [ @@ -7735,7 +8870,7 @@ "maybe_value%5#0" ] }, - "1177": { + "1301": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7747,8 +8882,8 @@ "0" ] }, - "1178": { - "op": "bytec 4 // \"sale_price\"", + "1302": { + "op": "bytec 6 // \"sale_price\"", "defined_out": [ "\"sale_price\"", "0", @@ -7769,7 +8904,7 @@ "\"sale_price\"" ] }, - "1180": { + "1304": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%6#0", @@ -7791,7 +8926,7 @@ "maybe_exists%6#0" ] }, - "1181": { + "1305": { "error": "check self.sale_price exists", "op": "assert // check self.sale_price exists", "stack_out": [ @@ -7804,7 +8939,7 @@ "maybe_value%6#0" ] }, - "1182": { + "1306": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7817,7 +8952,7 @@ "0" ] }, - "1183": { + "1307": { "op": "bytec 10 // \"first_asset_id\"", "defined_out": [ "\"first_asset_id\"", @@ -7841,7 +8976,7 @@ "\"first_asset_id\"" ] }, - "1185": { + "1309": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%7#0", @@ -7865,7 +9000,7 @@ "maybe_exists%7#0" ] }, - "1186": { + "1310": { "error": "check self.first_asset_id exists", "op": "assert // check self.first_asset_id exists", "defined_out": [ @@ -7888,7 +9023,7 @@ "tmp%6#0" ] }, - "1187": { + "1311": { "op": "uncover 6", "defined_out": [ "tmp%0#0", @@ -7910,7 +9045,7 @@ "tmp%0#0" ] }, - "1189": { + "1313": { "op": "bury 7", "stack_out": [ "tmp%0#0", @@ -7922,7 +9057,7 @@ "tmp%6#0" ] }, - "1191": { + "1315": { "op": "b get_terms_after_inlined_smart_contracts.algomint.contract.Algomint.get_terms@4" } } diff --git a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.teal b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.teal index 6b72fd6..a77ef23 100644 --- a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.teal +++ b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.teal @@ -4,7 +4,7 @@ // algopy.arc4.ARC4Contract.approval_program() -> uint64: main: intcblock 0 1 8 1000 - bytecblock "initialized" "last_reported_quarter" "total_nfts" "total_pct_bps" "sale_price" "payout_per_nft" "creator" "ma_" "duration_years" "start_quarter" "first_asset_id" "pct_per_nft_bps" "last_reported_income" "lc_" 0x151f7c75 + bytecblock "initialized" "last_reported_quarter" "total_nfts" "total_pct_bps" "creator" "ma_" "sale_price" "payout_per_nft" "duration_years" "start_quarter" "first_asset_id" "pct_per_nft_bps" "last_reported_income" "lc_" 0x151f7c75 txn ApplicationID bnz main_after_if_else@2 // smart_contracts/algomint/contract.py:8 @@ -29,7 +29,7 @@ main: app_global_put // smart_contracts/algomint/contract.py:12 // self.sale_price = GlobalState(UInt64(0)) - bytec 4 // "sale_price" + bytec 6 // "sale_price" intc_0 // 0 app_global_put // smart_contracts/algomint/contract.py:13 @@ -54,7 +54,7 @@ main: app_global_put // smart_contracts/algomint/contract.py:17 // self.payout_per_nft = GlobalState(UInt64(0)) - bytec 5 // "payout_per_nft" + bytec 7 // "payout_per_nft" intc_0 // 0 app_global_put // smart_contracts/algomint/contract.py:18 @@ -67,18 +67,18 @@ main_after_if_else@2: // smart_contracts/algomint/contract.py:4 // class Algomint(ARC4Contract): txn NumAppArgs - bz main___algopy_default_create@15 + bz main___algopy_default_create@16 txn OnCompletion ! assert txn ApplicationID assert - pushbytess 0xac6e1a04 0xdd980e6d 0xbd8dc97e 0x945f1777 0x57377178 0xbefc16c5 // method "mint_future_nft(uint64,uint64,uint64,uint64,uint64,pay)void", method "buy_nft(uint64,axfer,pay)void", method "report_income(uint64,uint64,pay)void", method "claim_payout(uint64)void", method "get_pending_payout(uint64,address)uint64", method "get_terms()(address,uint64,uint64,uint64,uint64,uint64,uint64)" + pushbytess 0xac6e1a04 0xdd980e6d 0xbd8dc97e 0x945f1777 0xf4b2deed 0x57377178 0xbefc16c5 // method "mint_future_nft(uint64,uint64,uint64,uint64,uint64,pay)void", method "buy_nft(uint64,axfer,pay)void", method "report_income(uint64,uint64,pay)void", method "claim_payout(uint64)void", method "secondary_sale(uint64,pay,pay,axfer)void", method "get_pending_payout(uint64,address)uint64", method "get_terms()(address,uint64,uint64,uint64,uint64,uint64,uint64)" txna ApplicationArgs 0 - match mint_future_nft buy_nft report_income claim_payout get_pending_payout get_terms + match mint_future_nft buy_nft report_income claim_payout secondary_sale get_pending_payout get_terms err -main___algopy_default_create@15: +main___algopy_default_create@16: txn OnCompletion ! txn ApplicationID @@ -193,7 +193,7 @@ mint_future_nft: assert // smart_contracts/algomint/contract.py:48 // self.creator.value = Txn.sender - bytec 6 // "creator" + bytec 4 // "creator" txn Sender app_global_put // smart_contracts/algomint/contract.py:49 @@ -218,7 +218,7 @@ mint_future_nft: app_global_put // smart_contracts/algomint/contract.py:53 // self.sale_price.value = sale_price - bytec 4 // "sale_price" + bytec 6 // "sale_price" swap app_global_put // smart_contracts/algomint/contract.py:54 @@ -339,7 +339,7 @@ mint_future_nft_after_if_else@6: // self.minted_assets[created.created_asset.id] = UInt64(1) dig 2 itob - bytec 7 // "ma_" + bytec 5 // "ma_" swap concat intc_1 // 1 @@ -403,7 +403,7 @@ buy_nft: // assert self.minted_assets.get(asset_id, default=UInt64(0)) == UInt64(1) dig 2 itob - bytec 7 // "ma_" + bytec 5 // "ma_" swap concat box_get @@ -462,7 +462,7 @@ buy_nft: // assert payment.amount == self.sale_price.value gtxns Amount intc_0 // 0 - bytec 4 // "sale_price" + bytec 6 // "sale_price" app_global_get_ex assert // check self.sale_price exists dig 1 @@ -528,7 +528,7 @@ buy_nft: // smart_contracts/algomint/contract.py:110 // receiver=self.creator.value, intc_0 // 0 - bytec 6 // "creator" + bytec 4 // "creator" app_global_get_ex assert // check self.creator exists itxn_field Receiver @@ -591,7 +591,7 @@ report_income: // assert Txn.sender == self.creator.value txn Sender intc_0 // 0 - bytec 6 // "creator" + bytec 4 // "creator" app_global_get_ex assert // check self.creator exists == @@ -662,7 +662,7 @@ report_income: app_global_get_ex assert // check self.total_nfts exists / - bytec 5 // "payout_per_nft" + bytec 7 // "payout_per_nft" swap app_global_put // smart_contracts/algomint/contract.py:115 @@ -697,7 +697,7 @@ claim_payout: // assert self.minted_assets.get(asset_id, default=UInt64(0)) == UInt64(1) dup itob - bytec 7 // "ma_" + bytec 5 // "ma_" dig 1 concat box_get @@ -752,7 +752,7 @@ claim_payout: // smart_contracts/algomint/contract.py:149 // assert self.payout_per_nft.value > UInt64(0) intc_0 // 0 - bytec 5 // "payout_per_nft" + bytec 7 // "payout_per_nft" app_global_get_ex assert // check self.payout_per_nft exists dup @@ -795,10 +795,127 @@ claim_payout: return +// smart_contracts.algomint.contract.Algomint.secondary_sale[routing]() -> void: +secondary_sale: + // smart_contracts/algomint/contract.py:159 + // @arc4.abimethod + txna ApplicationArgs 1 + dup + len + intc_2 // 8 + == + assert // invalid number of bytes for arc4.uint64 + btoi + txn GroupIndex + pushint 3 + - + dup + gtxns TypeEnum + intc_1 // pay + == + assert // transaction type is pay + txn GroupIndex + pushint 2 + - + dup + gtxns TypeEnum + intc_1 // pay + == + assert // transaction type is pay + txn GroupIndex + intc_1 // 1 + - + dup + gtxns TypeEnum + pushint 4 // axfer + == + assert // transaction type is axfer + // smart_contracts/algomint/contract.py:167-168 + // # 1. Security checks. + // assert self.initialized.value + intc_0 // 0 + bytec_0 // "initialized" + app_global_get_ex + assert // check self.initialized exists + assert + // smart_contracts/algomint/contract.py:169 + // assert asset_id > UInt64(0) + dig 3 + assert + // smart_contracts/algomint/contract.py:170 + // assert self.minted_assets.get(asset_id, default=UInt64(0)) == UInt64(1) + dig 3 + itob + bytec 5 // "ma_" + swap + concat + box_get + swap + btoi + intc_0 // 0 + swap + uncover 2 + select + intc_1 // 1 + == + assert + // smart_contracts/algomint/contract.py:172-173 + // # 2. Verify seller payment. + // assert seller_payment.receiver == asset_transfer.sender + dig 2 + gtxns Receiver + dig 1 + gtxns Sender + == + assert + // smart_contracts/algomint/contract.py:175-176 + // # 3. Verify royalty payment (10%). + // expected_royalty = seller_payment.amount // UInt64(10) + dig 2 + gtxns Amount + pushint 10 + / + // smart_contracts/algomint/contract.py:177 + // assert royalty_payment.amount >= expected_royalty + dig 2 + gtxns Amount + <= + assert + // smart_contracts/algomint/contract.py:178 + // assert royalty_payment.receiver == self.creator.value + swap + gtxns Receiver + intc_0 // 0 + bytec 4 // "creator" + app_global_get_ex + assert // check self.creator exists + == + assert + // smart_contracts/algomint/contract.py:180-181 + // # 4. Verify asset transfer. + // assert asset_transfer.xfer_asset.id == asset_id + dup + gtxns XferAsset + uncover 3 + == + assert + // smart_contracts/algomint/contract.py:182 + // assert asset_transfer.asset_receiver == seller_payment.sender + gtxns AssetReceiver + swap + gtxns Sender + == + assert + // smart_contracts/algomint/contract.py:159 + // @arc4.abimethod + intc_1 // 1 + return + + // smart_contracts.algomint.contract.Algomint.get_pending_payout[routing]() -> void: get_pending_payout: pushbytes "" - // smart_contracts/algomint/contract.py:159 + // smart_contracts/algomint/contract.py:184 // @arc4.abimethod(readonly=True) txna ApplicationArgs 1 dup @@ -816,24 +933,24 @@ get_pending_payout: pushint 32 == assert // invalid number of bytes for arc4.static_array - // smart_contracts/algomint/contract.py:161 + // smart_contracts/algomint/contract.py:186 // assert self.initialized.value intc_0 // 0 bytec_0 // "initialized" app_global_get_ex assert // check self.initialized exists assert - // smart_contracts/algomint/contract.py:162 + // smart_contracts/algomint/contract.py:187 // assert asset_id > UInt64(0) dig 1 assert - // smart_contracts/algomint/contract.py:163 + // smart_contracts/algomint/contract.py:188 // assert self.minted_assets.get(asset_id, default=UInt64(0)) == UInt64(1) swap itob dup cover 2 - bytec 7 // "ma_" + bytec 5 // "ma_" swap concat box_get @@ -846,24 +963,24 @@ get_pending_payout: intc_1 // 1 == assert - // smart_contracts/algomint/contract.py:164 + // smart_contracts/algomint/contract.py:189 // assert address != Global.zero_address global ZeroAddress != assert - // smart_contracts/algomint/contract.py:166 + // smart_contracts/algomint/contract.py:191 // if self.last_reported_quarter.value == UInt64(0): intc_0 // 0 bytec_1 // "last_reported_quarter" app_global_get_ex assert // check self.last_reported_quarter exists bnz get_pending_payout_after_if_else@3 - // smart_contracts/algomint/contract.py:167 + // smart_contracts/algomint/contract.py:192 // return UInt64(0) intc_0 // 0 get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10: - // smart_contracts/algomint/contract.py:159 + // smart_contracts/algomint/contract.py:184 // @arc4.abimethod(readonly=True) itob bytec 14 // 0x151f7c75 @@ -874,39 +991,39 @@ get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_ return get_pending_payout_after_if_else@3: - // smart_contracts/algomint/contract.py:169 + // smart_contracts/algomint/contract.py:194 // holder_balance, holder_opted = op.AssetHoldingGet.asset_balance(address, Asset(asset_id)) dig 1 dig 3 asset_holding_get AssetBalance swap bury 5 - // smart_contracts/algomint/contract.py:170 + // smart_contracts/algomint/contract.py:195 // if not holder_opted: bnz get_pending_payout_after_if_else@5 - // smart_contracts/algomint/contract.py:171 + // smart_contracts/algomint/contract.py:196 // return UInt64(0) intc_0 // 0 - // smart_contracts/algomint/contract.py:159 + // smart_contracts/algomint/contract.py:184 // @arc4.abimethod(readonly=True) b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10 get_pending_payout_after_if_else@5: - // smart_contracts/algomint/contract.py:172 + // smart_contracts/algomint/contract.py:197 // if holder_balance != UInt64(1): dig 3 intc_1 // 1 != bz get_pending_payout_after_if_else@7 - // smart_contracts/algomint/contract.py:173 + // smart_contracts/algomint/contract.py:198 // return UInt64(0) intc_0 // 0 - // smart_contracts/algomint/contract.py:159 + // smart_contracts/algomint/contract.py:184 // @arc4.abimethod(readonly=True) b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10 get_pending_payout_after_if_else@7: - // smart_contracts/algomint/contract.py:175 + // smart_contracts/algomint/contract.py:200 // claimed = self.last_claimed_quarter.get(asset_id, default=UInt64(0)) bytec 13 // "lc_" dig 1 @@ -918,7 +1035,7 @@ get_pending_payout_after_if_else@7: swap uncover 2 select - // smart_contracts/algomint/contract.py:176 + // smart_contracts/algomint/contract.py:201 // if claimed < self.last_reported_quarter.value: intc_0 // 0 bytec_1 // "last_reported_quarter" @@ -926,21 +1043,21 @@ get_pending_payout_after_if_else@7: assert // check self.last_reported_quarter exists < bz get_pending_payout_after_if_else@9 - // smart_contracts/algomint/contract.py:177 + // smart_contracts/algomint/contract.py:202 // return self.payout_per_nft.value intc_0 // 0 - bytec 5 // "payout_per_nft" + bytec 7 // "payout_per_nft" app_global_get_ex assert // check self.payout_per_nft exists - // smart_contracts/algomint/contract.py:159 + // smart_contracts/algomint/contract.py:184 // @arc4.abimethod(readonly=True) b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10 get_pending_payout_after_if_else@9: - // smart_contracts/algomint/contract.py:178 + // smart_contracts/algomint/contract.py:203 // return UInt64(0) intc_0 // 0 - // smart_contracts/algomint/contract.py:159 + // smart_contracts/algomint/contract.py:184 // @arc4.abimethod(readonly=True) b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10 @@ -948,7 +1065,7 @@ get_pending_payout_after_if_else@9: // smart_contracts.algomint.contract.Algomint.get_terms[routing]() -> void: get_terms: intc_0 // 0 - // smart_contracts/algomint/contract.py:185-187 + // smart_contracts/algomint/contract.py:210-212 // # Must be safe to call before minting/initialization (UI calls this after deploy). // # Return zero/default values until initialized. // if not self.initialized.value: @@ -957,14 +1074,14 @@ get_terms: app_global_get_ex assert // check self.initialized exists bnz get_terms_after_if_else@3 - // smart_contracts/algomint/contract.py:189 + // smart_contracts/algomint/contract.py:214 // Global.zero_address, global ZeroAddress bury 1 - // smart_contracts/algomint/contract.py:190 + // smart_contracts/algomint/contract.py:215 // UInt64(0), intc_0 // 0 - // smart_contracts/algomint/contract.py:191-195 + // smart_contracts/algomint/contract.py:216-220 // UInt64(0), // UInt64(0), // UInt64(0), @@ -973,7 +1090,7 @@ get_terms: dupn 5 get_terms_after_inlined_smart_contracts.algomint.contract.Algomint.get_terms@4: - // smart_contracts/algomint/contract.py:180 + // smart_contracts/algomint/contract.py:205 // @arc4.abimethod(readonly=True) uncover 5 itob @@ -1003,43 +1120,43 @@ get_terms_after_inlined_smart_contracts.algomint.contract.Algomint.get_terms@4: return get_terms_after_if_else@3: - // smart_contracts/algomint/contract.py:198 + // smart_contracts/algomint/contract.py:223 // self.creator.value, intc_0 // 0 - bytec 6 // "creator" + bytec 4 // "creator" app_global_get_ex assert // check self.creator exists - // smart_contracts/algomint/contract.py:199 + // smart_contracts/algomint/contract.py:224 // self.total_nfts.value, intc_0 // 0 bytec_2 // "total_nfts" app_global_get_ex assert // check self.total_nfts exists - // smart_contracts/algomint/contract.py:200 + // smart_contracts/algomint/contract.py:225 // self.total_pct_bps.value, intc_0 // 0 bytec_3 // "total_pct_bps" app_global_get_ex assert // check self.total_pct_bps exists - // smart_contracts/algomint/contract.py:201 + // smart_contracts/algomint/contract.py:226 // self.duration_years.value, intc_0 // 0 bytec 8 // "duration_years" app_global_get_ex assert // check self.duration_years exists - // smart_contracts/algomint/contract.py:202 + // smart_contracts/algomint/contract.py:227 // self.start_quarter.value, intc_0 // 0 bytec 9 // "start_quarter" app_global_get_ex assert // check self.start_quarter exists - // smart_contracts/algomint/contract.py:203 + // smart_contracts/algomint/contract.py:228 // self.sale_price.value, intc_0 // 0 - bytec 4 // "sale_price" + bytec 6 // "sale_price" app_global_get_ex assert // check self.sale_price exists - // smart_contracts/algomint/contract.py:204 + // smart_contracts/algomint/contract.py:229 // self.first_asset_id.value, intc_0 // 0 bytec 10 // "first_asset_id" @@ -1047,6 +1164,6 @@ get_terms_after_if_else@3: assert // check self.first_asset_id exists uncover 6 bury 7 - // smart_contracts/algomint/contract.py:180 + // smart_contracts/algomint/contract.py:205 // @arc4.abimethod(readonly=True) b get_terms_after_inlined_smart_contracts.algomint.contract.Algomint.get_terms@4 diff --git a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.arc56.json b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.arc56.json index c2aed9e..6ee12e6 100644 --- a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.arc56.json +++ b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.arc56.json @@ -122,6 +122,39 @@ "events": [], "recommendations": {} }, + { + "name": "secondary_sale", + "args": [ + { + "type": "uint64", + "name": "asset_id" + }, + { + "type": "pay", + "name": "seller_payment" + }, + { + "type": "pay", + "name": "royalty_payment" + }, + { + "type": "axfer", + "name": "asset_transfer" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, { "name": "get_pending_payout", "args": [ @@ -275,112 +308,118 @@ "sourceInfo": [ { "pc": [ - 757, - 810, - 1158 + 764, + 817, + 1079, + 1282 ], "errorMessage": "check self.creator exists" }, { "pc": [ - 1171 + 1295 ], "errorMessage": "check self.duration_years exists" }, { "pc": [ - 1186 + 1310 ], "errorMessage": "check self.first_asset_id exists" }, { "pc": [ - 373, - 646, - 802, - 892, - 1001, - 1110 + 380, + 653, + 809, + 899, + 1026, + 1125, + 1234 ], "errorMessage": "check self.initialized exists" }, { "pc": [ - 816, - 917, - 1033, - 1089 + 823, + 924, + 1157, + 1213 ], "errorMessage": "check self.last_reported_quarter exists" }, { "pc": [ - 952, - 1098 + 959, + 1222 ], "errorMessage": "check self.payout_per_nft exists" }, { "pc": [ - 718, - 1181 + 725, + 1305 ], "errorMessage": "check self.sale_price exists" }, { "pc": [ - 1176 + 1300 ], "errorMessage": "check self.start_quarter exists" }, { "pc": [ - 454, - 872, - 1162 + 461, + 879, + 1286 ], "errorMessage": "check self.total_nfts exists" }, { "pc": [ - 450, - 827, - 1166 + 457, + 834, + 1290 ], "errorMessage": "check self.total_pct_bps exists" }, { "pc": [ - 997 + 1121 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ - 321, - 331, - 340, - 349, - 358, - 619, - 778, - 787, - 887, - 983 + 328, + 338, + 347, + 356, + 365, + 626, + 785, + 794, + 894, + 988, + 1107 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ - 632 + 639, + 1022 ], "errorMessage": "transaction type is axfer" }, { "pc": [ - 369, - 642, - 798 + 376, + 649, + 805, + 1000, + 1011 ], "errorMessage": "transaction type is pay" } @@ -393,11 +432,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAxMDAwCiAgICBieXRlY2Jsb2NrICJpbml0aWFsaXplZCIgImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIgInRvdGFsX25mdHMiICJ0b3RhbF9wY3RfYnBzIiAic2FsZV9wcmljZSIgInBheW91dF9wZXJfbmZ0IiAiY3JlYXRvciIgIm1hXyIgImR1cmF0aW9uX3llYXJzIiAic3RhcnRfcXVhcnRlciIgImZpcnN0X2Fzc2V0X2lkIiAicGN0X3Blcl9uZnRfYnBzIiAibGFzdF9yZXBvcnRlZF9pbmNvbWUiICJsY18iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4CiAgICAvLyBzZWxmLnRvdGFsX25mdHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OQogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBzZWxmLmR1cmF0aW9uX3llYXJzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMQogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyA0IC8vICJzYWxlX3ByaWNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNAogICAgLy8gc2VsZi5wY3RfcGVyX25mdF9icHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9pbmNvbWUgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMiAvLyAibGFzdF9yZXBvcnRlZF9pbmNvbWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNwogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdCA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTgKICAgIC8vIHNlbGYuaW5pdGlhbGl6ZWQgPSBHbG9iYWxTdGF0ZShGYWxzZSkKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0CiAgICAvLyBjbGFzcyBBbGdvbWludChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTUKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweGFjNmUxYTA0IDB4ZGQ5ODBlNmQgMHhiZDhkYzk3ZSAweDk0NWYxNzc3IDB4NTczNzcxNzggMHhiZWZjMTZjNSAvLyBtZXRob2QgIm1pbnRfZnV0dXJlX25mdCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJidXlfbmZ0KHVpbnQ2NCxheGZlcixwYXkpdm9pZCIsIG1ldGhvZCAicmVwb3J0X2luY29tZSh1aW50NjQsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJjbGFpbV9wYXlvdXQodWludDY0KXZvaWQiLCBtZXRob2QgImdldF9wZW5kaW5nX3BheW91dCh1aW50NjQsYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgImdldF90ZXJtcygpKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWludF9mdXR1cmVfbmZ0IGJ1eV9uZnQgcmVwb3J0X2luY29tZSBjbGFpbV9wYXlvdXQgZ2V0X3BlbmRpbmdfcGF5b3V0IGdldF90ZXJtcwogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQubWludF9mdXR1cmVfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKbWludF9mdXR1cmVfbmZ0OgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNgogICAgLy8gYXNzZXJ0IHRvdGFsX25mdHMgPiBVSW50NjQoMCkKICAgIGRpZyA1CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNwogICAgLy8gYXNzZXJ0IHRvdGFsX3BjdF9icHMgPiBVSW50NjQoMCkKICAgIGRpZyA0CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozOAogICAgLy8gYXNzZXJ0IHRvdGFsX3BjdF9icHMgPD0gVUludDY0KDEwXzAwMCkKICAgIGRpZyA0CiAgICBwdXNoaW50IDEwMDAwCiAgICA8PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzkKICAgIC8vIGFzc2VydCBkdXJhdGlvbl95ZWFycyA+IFVJbnQ2NCgwKQogICAgZGlnIDMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBhc3NlcnQgc3RhcnRfcXVhcnRlciA+IFVJbnQ2NCgwKQogICAgZGlnIDIKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBhc3NlcnQgc2FsZV9wcmljZSA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQzCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ1LTQ2CiAgICAvLyAjIE5PVEU6IEV4YWN0IE1CUiBkZXBlbmRzIG9uIHByb3RvY29sIHBhcmFtczsgcmVxdWlyZSBhIHNlbnNpYmxlIG1pbmltdW0gZm9yIGRlbW8uCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuYW1vdW50ID49IFVJbnQ2NCgxXzAwMF8wMDApCiAgICBndHhucyBBbW91bnQKICAgIHB1c2hpbnQgMTAwMDAwMAogICAgPj0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBzZWxmLmNyZWF0b3IudmFsdWUgPSBUeG4uc2VuZGVyCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0OQogICAgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlID0gdG90YWxfbmZ0cwogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIHVuY292ZXIgNQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlID0gdG90YWxfcGN0X2JwcwogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIHVuY292ZXIgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MQogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSA9IGR1cmF0aW9uX3llYXJzCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyLnZhbHVlID0gc3RhcnRfcXVhcnRlcgogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlID0gc2FsZV9wcmljZQogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTQKICAgIC8vIHNlbGYucGN0X3Blcl9uZnRfYnBzLnZhbHVlID0gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1NQogICAgLy8gc2VsZi5pbml0aWFsaXplZC52YWx1ZSA9IFRydWUKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgaW50Y18wIC8vIDAKCm1pbnRfZnV0dXJlX25mdF9mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2ZvckA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTktNzAKICAgIC8vIGNyZWF0ZWQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIC8vICAgICB1bml0X25hbWU9YiJGRU5GVCIsCiAgICAvLyAgICAgIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vICAgICB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTEwMDAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjcKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjgKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjUtNjYKICAgIC8vICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgcHVzaGJ5dGVzIDB4NzQ2NTZkNzA2YzYxNzQ2NTJkNjk3MDY2NzMzYTJmMmY3YjY5NzA2NjczNjM2OTY0M2EzMTNhNzI2MTc3M2E3MjY1NzM2NTcyNzY2NTNhNzM2ODYxMzIyZDMyMzUzNjdkCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjQKICAgIC8vIHVuaXRfbmFtZT1iIkZFTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NDU0ZTQ2NTQKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYzCiAgICAvLyBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NzU3NDc1NzI2NTIwNDU2MTcyNmU2OTZlNjcyMDRlNDY1NAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MgogICAgLy8gZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MQogICAgLy8gZGVjaW1hbHM9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MAogICAgLy8gdG90YWw9MSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1OQogICAgLy8gY3JlYXRlZCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjY5CiAgICAvLyBmZWU9MTAwMCwKICAgIGludGNfMyAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU5LTcwCiAgICAvLyBjcmVhdGVkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xLAogICAgLy8gICAgIGRlY2ltYWxzPTAsCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICAvLyAgICAgYXNzZXRfbmFtZT1iIkZ1dHVyZSBFYXJuaW5nIE5GVCIsCiAgICAvLyAgICAgdW5pdF9uYW1lPWIiRkVORlQiLAogICAgLy8gICAgICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyAgICAgdXJsPWIidGVtcGxhdGUtaXBmczovL3tpcGZzY2lkOjE6cmF3OnJlc2VydmU6c2hhMi0yNTZ9IiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIGJ1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcxCiAgICAvLyBpZiBpZHggPT0gVUludDY0KDApOgogICAgZHVwCiAgICBibnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcyCiAgICAvLyBzZWxmLmZpcnN0X2Fzc2V0X2lkLnZhbHVlID0gY3JlYXRlZC5jcmVhdGVkX2Fzc2V0LmlkCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCm1pbnRfZnV0dXJlX25mdF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzMKICAgIC8vIHNlbGYubWludGVkX2Fzc2V0c1tjcmVhdGVkLmNyZWF0ZWRfYXNzZXQuaWRdID0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBpbnRjXzEgLy8gMQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU3LTU4CiAgICAvLyAjIE1pbnQgYSBmaXhlZCBzZXJpZXMgb2YgQVJDLTE5IHN0eWxlIE5GVHMgZnJvbSB0aGUgYXBwIGFjY291bnQuCiAgICAvLyBmb3IgaWR4IGluIHVyYW5nZSh0b3RhbF9uZnRzKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBtaW50X2Z1dHVyZV9uZnRfZm9yX2hlYWRlckAyCgptaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5idXlfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKYnV5X25mdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODIKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkaWcgMgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODgtODkKICAgIC8vICMgRW5zdXJlIGJ1eWVyIGhhcyBvcHRlZC1pbiBpbiB0aGUgc2FtZSBncm91cC4KICAgIC8vIGFzc2VydCBvcHRfaW4uc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5MAogICAgLy8gYXNzZXJ0IG9wdF9pbi5hc3NldF9yZWNlaXZlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkxCiAgICAvLyBhc3NlcnQgb3B0X2luLnhmZXJfYXNzZXQuaWQgPT0gYXNzZXQuaWQKICAgIGRpZyAxCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGRpZyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTIKICAgIC8vIGFzc2VydCBvcHRfaW4uYXNzZXRfYW1vdW50ID09IFVJbnQ2NCgwKQogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBhc3NlcnQgcGF5bWVudC5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NQogICAgLy8gYXNzZXJ0IHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NgogICAgLy8gYXNzZXJ0IHBheW1lbnQuYW1vdW50ID09IHNlbGYuc2FsZV9wcmljZS52YWx1ZQogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OAogICAgLy8gYXBwX2JhbGFuY2UsIGFwcF9vcHRlZCA9IG9wLkFzc2V0SG9sZGluZ0dldC5hc3NldF9iYWxhbmNlKEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsIGFzc2V0KQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGRpZyAyCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IGFwcF9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAwCiAgICAvLyBhc3NlcnQgYXBwX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwMi0xMDgKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIGludmVzdG9yIGFuZCBmb3J3YXJkIHBheW1lbnQgdG8gY3JlYXRvci4KICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PVVJbnQ2NCgxKSwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDUKICAgIC8vIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTA2CiAgICAvLyBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgc3dhcAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDItMTAzCiAgICAvLyAjIFRyYW5zZmVyIE5GVCB0byBpbnZlc3RvciBhbmQgZm9yd2FyZCBwYXltZW50IHRvIGNyZWF0b3IuCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDcKICAgIC8vIGZlZT0xMDAwLAogICAgaW50Y18zIC8vIDEwMDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAyLTEwOAogICAgLy8gIyBUcmFuc2ZlciBORlQgdG8gaW52ZXN0b3IgYW5kIGZvcndhcmQgcGF5bWVudCB0byBjcmVhdG9yLgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTAKICAgIC8vIHJlY2VpdmVyPXNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExMgogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5yZXBvcnRfaW5jb21lW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVwb3J0X2luY29tZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE5CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmNyZWF0b3IudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIxCiAgICAvLyBhc3NlcnQgcXVhcnRlciA+IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGRpZyAzCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjIKICAgIC8vIGFzc2VydCBpbmNvbWVfYW1vdW50ID4gVUludDY0KDApCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI0CiAgICAvLyB0b3RhbF9wYXlvdXQgPSAoaW5jb21lX2Ftb3VudCAqIHNlbGYudG90YWxfcGN0X2Jwcy52YWx1ZSkgLy8gVUludDY0KDEwXzAwMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF9wY3RfYnBzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX3BjdF9icHMgZXhpc3RzCiAgICBkaWcgMgogICAgKgogICAgcHVzaGludCAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyNQogICAgLy8gYXNzZXJ0IHRvdGFsX3BheW91dCA+IFVJbnQ2NCgwKQogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjctMTI4CiAgICAvLyAjIFJlcXVpcmUgdGhlIGNyZWF0b3IgdG8gZnVuZCB0aGUgYXBwIGZvciB0aGlzIHF1YXJ0ZXIncyBwYXlvdXRzLgogICAgLy8gYXNzZXJ0IHBheW91dF9mdW5kaW5nLnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI5CiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMAogICAgLy8gYXNzZXJ0IHBheW91dF9mdW5kaW5nLmFtb3VudCA9PSB0b3RhbF9wYXlvdXQKICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzIKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID0gcXVhcnRlcgogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMwogICAgLy8gc2VsZi5sYXN0X3JlcG9ydGVkX2luY29tZS52YWx1ZSA9IGluY29tZV9hbW91bnQKICAgIGJ5dGVjIDEyIC8vICJsYXN0X3JlcG9ydGVkX2luY29tZSIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzQKICAgIC8vIHNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUgPSB0b3RhbF9wYXlvdXQgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9uZnRzIGV4aXN0cwogICAgLwogICAgYnl0ZWMgNSAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmNsYWltX3BheW91dFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltX3BheW91dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzOAogICAgLy8gYXNzZXJ0IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbml0aWFsaXplZCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzOQogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0MAogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIGR1cAogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0MQogICAgLy8gYXNzZXJ0IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQzCiAgICAvLyBob2xkZXJfYmFsYW5jZSwgaG9sZGVyX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoVHhuLnNlbmRlciwgQXNzZXQoYXNzZXRfaWQpKQogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDQKICAgIC8vIGFzc2VydCBob2xkZXJfb3B0ZWQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NQogICAgLy8gYXNzZXJ0IGhvbGRlcl9iYWxhbmNlID09IFVJbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDcKICAgIC8vIGNsYWltZWQgPSBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyAxMyAvLyAibGNfIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ4CiAgICAvLyBhc3NlcnQgY2xhaW1lZCA8IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBkaWcgMgogICAgPAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ5CiAgICAvLyBhc3NlcnQgc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSA+IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBheW91dF9wZXJfbmZ0IGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTEtMTU1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgYW1vdW50PXNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTMKICAgIC8vIHJlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1NAogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTEtMTU1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgYW1vdW50PXNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU3CiAgICAvLyBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyW2Fzc2V0X2lkXSA9IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3BlbmRpbmdfcGF5b3V0W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3BlbmRpbmdfcGF5b3V0OgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYxCiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYyCiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGRpZyAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjMKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBzd2FwCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ5dGVjIDcgLy8gIm1hXyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE2NAogICAgLy8gYXNzZXJ0IGFkZHJlc3MgIT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY2CiAgICAvLyBpZiBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlci52YWx1ZSA9PSBVSW50NjQoMCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGJueiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY3CiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgaXRvYgogICAgYnl0ZWMgMTQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY5CiAgICAvLyBob2xkZXJfYmFsYW5jZSwgaG9sZGVyX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoYWRkcmVzcywgQXNzZXQoYXNzZXRfaWQpKQogICAgZGlnIDEKICAgIGRpZyAzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIHN3YXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE3MAogICAgLy8gaWYgbm90IGhvbGRlcl9vcHRlZDoKICAgIGJueiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcxCiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcyCiAgICAvLyBpZiBob2xkZXJfYmFsYW5jZSAhPSBVSW50NjQoMSk6CiAgICBkaWcgMwogICAgaW50Y18xIC8vIDEKICAgICE9CiAgICBieiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTczCiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc1CiAgICAvLyBjbGFpbWVkID0gc2VsZi5sYXN0X2NsYWltZWRfcXVhcnRlci5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKQogICAgYnl0ZWMgMTMgLy8gImxjXyIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE3NgogICAgLy8gaWYgY2xhaW1lZCA8IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIgZXhpc3RzCiAgICA8CiAgICBieiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc3CiAgICAvLyByZXR1cm4gc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBheW91dF9wZXJfbmZ0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc4CiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3Rlcm1zW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3Rlcm1zOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODUtMTg3CiAgICAvLyAjIE11c3QgYmUgc2FmZSB0byBjYWxsIGJlZm9yZSBtaW50aW5nL2luaXRpYWxpemF0aW9uIChVSSBjYWxscyB0aGlzIGFmdGVyIGRlcGxveSkuCiAgICAvLyAjIFJldHVybiB6ZXJvL2RlZmF1bHQgdmFsdWVzIHVudGlsIGluaXRpYWxpemVkLgogICAgLy8gaWYgbm90IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWU6CiAgICBkdXAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYm56IGdldF90ZXJtc19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODkKICAgIC8vIEdsb2JhbC56ZXJvX2FkZHJlc3MsCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE5MAogICAgLy8gVUludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTEtMTk1CiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICBkdXBuIDUKCmdldF90ZXJtc19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBkaWcgNgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAxNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3Rlcm1zX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTgKICAgIC8vIHNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTk5CiAgICAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9uZnRzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDEKICAgIC8vIHNlbGYuZHVyYXRpb25feWVhcnMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZHVyYXRpb25feWVhcnMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAyCiAgICAvLyBzZWxmLnN0YXJ0X3F1YXJ0ZXIudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGFydF9xdWFydGVyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gInNhbGVfcHJpY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2FsZV9wcmljZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDQKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gImZpcnN0X2Fzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmZpcnN0X2Fzc2V0X2lkIGV4aXN0cwogICAgdW5jb3ZlciA2CiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfdGVybXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3Rlcm1zQDQK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAxMDAwCiAgICBieXRlY2Jsb2NrICJpbml0aWFsaXplZCIgImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIgInRvdGFsX25mdHMiICJ0b3RhbF9wY3RfYnBzIiAiY3JlYXRvciIgIm1hXyIgInNhbGVfcHJpY2UiICJwYXlvdXRfcGVyX25mdCIgImR1cmF0aW9uX3llYXJzIiAic3RhcnRfcXVhcnRlciIgImZpcnN0X2Fzc2V0X2lkIiAicGN0X3Blcl9uZnRfYnBzIiAibGFzdF9yZXBvcnRlZF9pbmNvbWUiICJsY18iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4CiAgICAvLyBzZWxmLnRvdGFsX25mdHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OQogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBzZWxmLmR1cmF0aW9uX3llYXJzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMQogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyA2IC8vICJzYWxlX3ByaWNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNAogICAgLy8gc2VsZi5wY3RfcGVyX25mdF9icHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9pbmNvbWUgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMiAvLyAibGFzdF9yZXBvcnRlZF9pbmNvbWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNwogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdCA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDcgLy8gInBheW91dF9wZXJfbmZ0IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTgKICAgIC8vIHNlbGYuaW5pdGlhbGl6ZWQgPSBHbG9iYWxTdGF0ZShGYWxzZSkKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0CiAgICAvLyBjbGFzcyBBbGdvbWludChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTYKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweGFjNmUxYTA0IDB4ZGQ5ODBlNmQgMHhiZDhkYzk3ZSAweDk0NWYxNzc3IDB4ZjRiMmRlZWQgMHg1NzM3NzE3OCAweGJlZmMxNmM1IC8vIG1ldGhvZCAibWludF9mdXR1cmVfbmZ0KHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQscGF5KXZvaWQiLCBtZXRob2QgImJ1eV9uZnQodWludDY0LGF4ZmVyLHBheSl2b2lkIiwgbWV0aG9kICJyZXBvcnRfaW5jb21lKHVpbnQ2NCx1aW50NjQscGF5KXZvaWQiLCBtZXRob2QgImNsYWltX3BheW91dCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic2Vjb25kYXJ5X3NhbGUodWludDY0LHBheSxwYXksYXhmZXIpdm9pZCIsIG1ldGhvZCAiZ2V0X3BlbmRpbmdfcGF5b3V0KHVpbnQ2NCxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X3Rlcm1zKCkoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtaW50X2Z1dHVyZV9uZnQgYnV5X25mdCByZXBvcnRfaW5jb21lIGNsYWltX3BheW91dCBzZWNvbmRhcnlfc2FsZSBnZXRfcGVuZGluZ19wYXlvdXQgZ2V0X3Rlcm1zCiAgICBlcnIKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTY6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5taW50X2Z1dHVyZV9uZnRbcm91dGluZ10oKSAtPiB2b2lkOgptaW50X2Z1dHVyZV9uZnQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM1CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbml0aWFsaXplZCBleGlzdHMKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM2CiAgICAvLyBhc3NlcnQgdG90YWxfbmZ0cyA+IFVJbnQ2NCgwKQogICAgZGlnIDUKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM3CiAgICAvLyBhc3NlcnQgdG90YWxfcGN0X2JwcyA+IFVJbnQ2NCgwKQogICAgZGlnIDQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM4CiAgICAvLyBhc3NlcnQgdG90YWxfcGN0X2JwcyA8PSBVSW50NjQoMTBfMDAwKQogICAgZGlnIDQKICAgIHB1c2hpbnQgMTAwMDAKICAgIDw9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozOQogICAgLy8gYXNzZXJ0IGR1cmF0aW9uX3llYXJzID4gVUludDY0KDApCiAgICBkaWcgMwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDAKICAgIC8vIGFzc2VydCBzdGFydF9xdWFydGVyID4gVUludDY0KDApCiAgICBkaWcgMgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDEKICAgIC8vIGFzc2VydCBzYWxlX3ByaWNlID4gVUludDY0KDApCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDMKICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0NAogICAgLy8gYXNzZXJ0IG1icl9wYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDUtNDYKICAgIC8vICMgTk9URTogRXhhY3QgTUJSIGRlcGVuZHMgb24gcHJvdG9jb2wgcGFyYW1zOyByZXF1aXJlIGEgc2Vuc2libGUgbWluaW11bSBmb3IgZGVtby4KICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5hbW91bnQgPj0gVUludDY0KDFfMDAwXzAwMCkKICAgIGd0eG5zIEFtb3VudAogICAgcHVzaGludCAxMDAwMDAwCiAgICA+PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDgKICAgIC8vIHNlbGYuY3JlYXRvci52YWx1ZSA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUgPSB0b3RhbF9uZnRzCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgdW5jb3ZlciA1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUwCiAgICAvLyBzZWxmLnRvdGFsX3BjdF9icHMudmFsdWUgPSB0b3RhbF9wY3RfYnBzCiAgICBieXRlY18zIC8vICJ0b3RhbF9wY3RfYnBzIgogICAgdW5jb3ZlciA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUxCiAgICAvLyBzZWxmLmR1cmF0aW9uX3llYXJzLnZhbHVlID0gZHVyYXRpb25feWVhcnMKICAgIGJ5dGVjIDggLy8gImR1cmF0aW9uX3llYXJzIgogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUyCiAgICAvLyBzZWxmLnN0YXJ0X3F1YXJ0ZXIudmFsdWUgPSBzdGFydF9xdWFydGVyCiAgICBieXRlYyA5IC8vICJzdGFydF9xdWFydGVyIgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUzCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UudmFsdWUgPSBzYWxlX3ByaWNlCiAgICBieXRlYyA2IC8vICJzYWxlX3ByaWNlIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1NAogICAgLy8gc2VsZi5wY3RfcGVyX25mdF9icHMudmFsdWUgPSBzZWxmLnRvdGFsX3BjdF9icHMudmFsdWUgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9wY3RfYnBzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInRvdGFsX25mdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfbmZ0cyBleGlzdHMKICAgIC8KICAgIGJ5dGVjIDExIC8vICJwY3RfcGVyX25mdF9icHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBzZWxmLmluaXRpYWxpemVkLnZhbHVlID0gVHJ1ZQogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1Ny01OAogICAgLy8gIyBNaW50IGEgZml4ZWQgc2VyaWVzIG9mIEFSQy0xOSBzdHlsZSBORlRzIGZyb20gdGhlIGFwcCBhY2NvdW50LgogICAgLy8gZm9yIGlkeCBpbiB1cmFuZ2UodG90YWxfbmZ0cyk6CiAgICBpbnRjXzAgLy8gMAoKbWludF9mdXR1cmVfbmZ0X2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1Ny01OAogICAgLy8gIyBNaW50IGEgZml4ZWQgc2VyaWVzIG9mIEFSQy0xOSBzdHlsZSBORlRzIGZyb20gdGhlIGFwcCBhY2NvdW50LgogICAgLy8gZm9yIGlkeCBpbiB1cmFuZ2UodG90YWxfbmZ0cyk6CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBtaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfZm9yQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1OS03MAogICAgLy8gY3JlYXRlZCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9MSwKICAgIC8vICAgICBkZWNpbWFscz0wLAogICAgLy8gICAgIGRlZmF1bHRfZnJvemVuPUZhbHNlLAogICAgLy8gICAgIGFzc2V0X25hbWU9YiJGdXR1cmUgRWFybmluZyBORlQiLAogICAgLy8gICAgIHVuaXRfbmFtZT1iIkZFTkZUIiwKICAgIC8vICAgICAjIEFSQy0xOSB0ZW1wbGF0ZSBVUkwgKENJRCBzb3VyY2VkIGZyb20gcmVzZXJ2ZSBhY2NvdW50IGJ5IGNsaWVudHMpLgogICAgLy8gICAgIHVybD1iInRlbXBsYXRlLWlwZnM6Ly97aXBmc2NpZDoxOnJhdzpyZXNlcnZlOnNoYTItMjU2fSIsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2NwogICAgLy8gbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2OAogICAgLy8gcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2NS02NgogICAgLy8gIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vIHVybD1iInRlbXBsYXRlLWlwZnM6Ly97aXBmc2NpZDoxOnJhdzpyZXNlcnZlOnNoYTItMjU2fSIsCiAgICBwdXNoYnl0ZXMgMHg3NDY1NmQ3MDZjNjE3NDY1MmQ2OTcwNjY3MzNhMmYyZjdiNjk3MDY2NzM2MzY5NjQzYTMxM2E3MjYxNzczYTcyNjU3MzY1NzI3NjY1M2E3MzY4NjEzMjJkMzIzNTM2N2QKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2NAogICAgLy8gdW5pdF9uYW1lPWIiRkVORlQiLAogICAgcHVzaGJ5dGVzIDB4NDY0NTRlNDY1NAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjMKICAgIC8vIGFzc2V0X25hbWU9YiJGdXR1cmUgRWFybmluZyBORlQiLAogICAgcHVzaGJ5dGVzIDB4NDY3NTc0NzU3MjY1MjA0NTYxNzI2ZTY5NmU2NzIwNGU0NjU0CiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVmYXVsdEZyb3plbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYxCiAgICAvLyBkZWNpbWFscz0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYwCiAgICAvLyB0b3RhbD0xLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU5CiAgICAvLyBjcmVhdGVkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjkKICAgIC8vIGZlZT0xMDAwLAogICAgaW50Y18zIC8vIDEwMDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTktNzAKICAgIC8vIGNyZWF0ZWQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIC8vICAgICB1bml0X25hbWU9YiJGRU5GVCIsCiAgICAvLyAgICAgIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vICAgICB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTEwMDAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzEKICAgIC8vIGlmIGlkeCA9PSBVSW50NjQoMCk6CiAgICBkdXAKICAgIGJueiBtaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzIKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQudmFsdWUgPSBjcmVhdGVkLmNyZWF0ZWRfYXNzZXQuaWQKICAgIGJ5dGVjIDEwIC8vICJmaXJzdF9hc3NldF9pZCIKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWludF9mdXR1cmVfbmZ0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3MwogICAgLy8gc2VsZi5taW50ZWRfYXNzZXRzW2NyZWF0ZWQuY3JlYXRlZF9hc3NldC5pZF0gPSBVSW50NjQoMSkKICAgIGRpZyAyCiAgICBpdG9iCiAgICBieXRlYyA1IC8vICJtYV8iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGludGNfMSAvLyAxCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIG1pbnRfZnV0dXJlX25mdF9mb3JfaGVhZGVyQDIKCm1pbnRfZnV0dXJlX25mdF9hZnRlcl9mb3JAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmJ1eV9uZnRbcm91dGluZ10oKSAtPiB2b2lkOgpidXlfbmZ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBwdXNoaW50IDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4MgogICAgLy8gYXNzZXJ0IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbml0aWFsaXplZCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjgzCiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGRpZyAyCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4NAogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIGRpZyAyCiAgICBpdG9iCiAgICBieXRlYyA1IC8vICJtYV8iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4OC04OQogICAgLy8gIyBFbnN1cmUgYnV5ZXIgaGFzIG9wdGVkLWluIGluIHRoZSBzYW1lIGdyb3VwLgogICAgLy8gYXNzZXJ0IG9wdF9pbi5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZGlnIDEKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkwCiAgICAvLyBhc3NlcnQgb3B0X2luLmFzc2V0X3JlY2VpdmVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTEKICAgIC8vIGFzc2VydCBvcHRfaW4ueGZlcl9hc3NldC5pZCA9PSBhc3NldC5pZAogICAgZGlnIDEKICAgIGd0eG5zIFhmZXJBc3NldAogICAgZGlnIDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5MgogICAgLy8gYXNzZXJ0IG9wdF9pbi5hc3NldF9hbW91bnQgPT0gVUludDY0KDApCiAgICBzd2FwCiAgICBndHhucyBBc3NldEFtb3VudAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTQKICAgIC8vIGFzc2VydCBwYXltZW50LnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICBkdXAKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBhc3NlcnQgcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBhc3NlcnQgcGF5bWVudC5hbW91bnQgPT0gc2VsZi5zYWxlX3ByaWNlLnZhbHVlCiAgICBndHhucyBBbW91bnQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJzYWxlX3ByaWNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNhbGVfcHJpY2UgZXhpc3RzCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBhcHBfYmFsYW5jZSwgYXBwX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgYXNzZXQpCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZGlnIDIKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk5CiAgICAvLyBhc3NlcnQgYXBwX29wdGVkCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDAKICAgIC8vIGFzc2VydCBhcHBfYmFsYW5jZSA9PSBVSW50NjQoMSkKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAyLTEwOAogICAgLy8gIyBUcmFuc2ZlciBORlQgdG8gaW52ZXN0b3IgYW5kIGZvcndhcmQgcGF5bWVudCB0byBjcmVhdG9yLgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwNQogICAgLy8gYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDYKICAgIC8vIGFzc2V0X2Ftb3VudD1VSW50NjQoMSksCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwMi0xMDMKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIGludmVzdG9yIGFuZCBmb3J3YXJkIHBheW1lbnQgdG8gY3JlYXRvci4KICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwNwogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDItMTA4CiAgICAvLyAjIFRyYW5zZmVyIE5GVCB0byBpbnZlc3RvciBhbmQgZm9yd2FyZCBwYXltZW50IHRvIGNyZWF0b3IuCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1VSW50NjQoMSksCiAgICAvLyAgICAgZmVlPTEwMDAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOS0xMTMKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLmNyZWF0b3IudmFsdWUsCiAgICAvLyAgICAgYW1vdW50PXBheW1lbnQuYW1vdW50LAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExMAogICAgLy8gcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTA5CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTEyCiAgICAvLyBmZWU9MTAwMCwKICAgIGludGNfMyAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOS0xMTMKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLmNyZWF0b3IudmFsdWUsCiAgICAvLyAgICAgYW1vdW50PXBheW1lbnQuYW1vdW50LAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LnJlcG9ydF9pbmNvbWVbcm91dGluZ10oKSAtPiB2b2lkOgpyZXBvcnRfaW5jb21lOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTkKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjAKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHNlbGYuY3JlYXRvci52YWx1ZQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjEKICAgIC8vIGFzc2VydCBxdWFydGVyID4gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgZGlnIDMKICAgIDwKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyMgogICAgLy8gYXNzZXJ0IGluY29tZV9hbW91bnQgPiBVSW50NjQoMCkKICAgIGRpZyAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjQKICAgIC8vIHRvdGFsX3BheW91dCA9IChpbmNvbWVfYW1vdW50ICogc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlKSAvLyBVSW50NjQoMTBfMDAwKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBwdXNoaW50IDEwMDAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI1CiAgICAvLyBhc3NlcnQgdG90YWxfcGF5b3V0ID4gVUludDY0KDApCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyNy0xMjgKICAgIC8vICMgUmVxdWlyZSB0aGUgY3JlYXRvciB0byBmdW5kIHRoZSBhcHAgZm9yIHRoaXMgcXVhcnRlcidzIHBheW91dHMuCiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjkKICAgIC8vIGFzc2VydCBwYXlvdXRfZnVuZGluZy5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkaWcgMQogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMwCiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcuYW1vdW50ID09IHRvdGFsX3BheW91dAogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMgogICAgLy8gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUgPSBxdWFydGVyCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICB1bmNvdmVyIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMzCiAgICAvLyBzZWxmLmxhc3RfcmVwb3J0ZWRfaW5jb21lLnZhbHVlID0gaW5jb21lX2Ftb3VudAogICAgYnl0ZWMgMTIgLy8gImxhc3RfcmVwb3J0ZWRfaW5jb21lIgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzNAogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSA9IHRvdGFsX3BheW91dCAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyA3IC8vICJwYXlvdXRfcGVyX25mdCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuY2xhaW1fcGF5b3V0W3JvdXRpbmddKCkgLT4gdm9pZDoKY2xhaW1fcGF5b3V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM4CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM5CiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQwCiAgICAvLyBhc3NlcnQgc2VsZi5taW50ZWRfYXNzZXRzLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpID09IFVJbnQ2NCgxKQogICAgZHVwCiAgICBpdG9iCiAgICBieXRlYyA1IC8vICJtYV8iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQxCiAgICAvLyBhc3NlcnQgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUgPiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDMKICAgIC8vIGhvbGRlcl9iYWxhbmNlLCBob2xkZXJfb3B0ZWQgPSBvcC5Bc3NldEhvbGRpbmdHZXQuYXNzZXRfYmFsYW5jZShUeG4uc2VuZGVyLCBBc3NldChhc3NldF9pZCkpCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDMKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NAogICAgLy8gYXNzZXJ0IGhvbGRlcl9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ1CiAgICAvLyBhc3NlcnQgaG9sZGVyX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NwogICAgLy8gY2xhaW1lZCA9IHNlbGYubGFzdF9jbGFpbWVkX3F1YXJ0ZXIuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkKICAgIGJ5dGVjIDEzIC8vICJsY18iCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDgKICAgIC8vIGFzc2VydCBjbGFpbWVkIDwgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIGRpZyAyCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDkKICAgIC8vIGFzc2VydCBzZWxmLnBheW91dF9wZXJfbmZ0LnZhbHVlID4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF5b3V0X3Blcl9uZnQgZXhpc3RzCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MS0xNTUKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICBhbW91bnQ9c2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MwogICAgLy8gcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUxCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU0CiAgICAvLyBmZWU9MTAwMCwKICAgIGludGNfMyAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MS0xNTUKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICBhbW91bnQ9c2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTcKICAgIC8vIHNlbGYubGFzdF9jbGFpbWVkX3F1YXJ0ZXJbYXNzZXRfaWRdID0gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5zZWNvbmRhcnlfc2FsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNlY29uZGFyeV9zYWxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAzCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY3LTE2OAogICAgLy8gIyAxLiBTZWN1cml0eSBjaGVja3MuCiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY5CiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGRpZyAzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzAKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBkaWcgMwogICAgaXRvYgogICAgYnl0ZWMgNSAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcyLTE3MwogICAgLy8gIyAyLiBWZXJpZnkgc2VsbGVyIHBheW1lbnQuCiAgICAvLyBhc3NlcnQgc2VsbGVyX3BheW1lbnQucmVjZWl2ZXIgPT0gYXNzZXRfdHJhbnNmZXIuc2VuZGVyCiAgICBkaWcgMgogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzUtMTc2CiAgICAvLyAjIDMuIFZlcmlmeSByb3lhbHR5IHBheW1lbnQgKDEwJSkuCiAgICAvLyBleHBlY3RlZF9yb3lhbHR5ID0gc2VsbGVyX3BheW1lbnQuYW1vdW50IC8vIFVJbnQ2NCgxMCkKICAgIGRpZyAyCiAgICBndHhucyBBbW91bnQKICAgIHB1c2hpbnQgMTAKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzcKICAgIC8vIGFzc2VydCByb3lhbHR5X3BheW1lbnQuYW1vdW50ID49IGV4cGVjdGVkX3JveWFsdHkKICAgIGRpZyAyCiAgICBndHhucyBBbW91bnQKICAgIDw9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzgKICAgIC8vIGFzc2VydCByb3lhbHR5X3BheW1lbnQucmVjZWl2ZXIgPT0gc2VsZi5jcmVhdG9yLnZhbHVlCiAgICBzd2FwCiAgICBndHhucyBSZWNlaXZlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAtMTgxCiAgICAvLyAjIDQuIFZlcmlmeSBhc3NldCB0cmFuc2Zlci4KICAgIC8vIGFzc2VydCBhc3NldF90cmFuc2Zlci54ZmVyX2Fzc2V0LmlkID09IGFzc2V0X2lkCiAgICBkdXAKICAgIGd0eG5zIFhmZXJBc3NldAogICAgdW5jb3ZlciAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTgyCiAgICAvLyBhc3NlcnQgYXNzZXRfdHJhbnNmZXIuYXNzZXRfcmVjZWl2ZXIgPT0gc2VsbGVyX3BheW1lbnQuc2VuZGVyCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBzd2FwCiAgICBndHhucyBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfcGVuZGluZ19wYXlvdXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODYKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODcKICAgIC8vIGFzc2VydCBhc3NldF9pZCA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4OAogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIHN3YXAKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMgogICAgYnl0ZWMgNSAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg5CiAgICAvLyBhc3NlcnQgYWRkcmVzcyAhPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTEKICAgIC8vIGlmIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID09IFVJbnQ2NCgwKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgYm56IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTIKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCgpnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3BlbmRpbmdfcGF5b3V0QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBpdG9iCiAgICBieXRlYyAxNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTQKICAgIC8vIGhvbGRlcl9iYWxhbmNlLCBob2xkZXJfb3B0ZWQgPSBvcC5Bc3NldEhvbGRpbmdHZXQuYXNzZXRfYmFsYW5jZShhZGRyZXNzLCBBc3NldChhc3NldF9pZCkpCiAgICBkaWcgMQogICAgZGlnIDMKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgc3dhcAogICAgYnVyeSA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTk1CiAgICAvLyBpZiBub3QgaG9sZGVyX29wdGVkOgogICAgYm56IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTYKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTcKICAgIC8vIGlmIGhvbGRlcl9iYWxhbmNlICE9IFVJbnQ2NCgxKToKICAgIGRpZyAzCiAgICBpbnRjXzEgLy8gMQogICAgIT0KICAgIGJ6IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTgKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDAKICAgIC8vIGNsYWltZWQgPSBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyAxMyAvLyAibGNfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAxCiAgICAvLyBpZiBjbGFpbWVkIDwgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWU6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIDwKICAgIGJ6IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDIKICAgIC8vIHJldHVybiBzZWxmLnBheW91dF9wZXJfbmZ0LnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF5b3V0X3Blcl9uZnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDMKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfdGVybXM6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIxMC0yMTIKICAgIC8vICMgTXVzdCBiZSBzYWZlIHRvIGNhbGwgYmVmb3JlIG1pbnRpbmcvaW5pdGlhbGl6YXRpb24gKFVJIGNhbGxzIHRoaXMgYWZ0ZXIgZGVwbG95KS4KICAgIC8vICMgUmV0dXJuIHplcm8vZGVmYXVsdCB2YWx1ZXMgdW50aWwgaW5pdGlhbGl6ZWQuCiAgICAvLyBpZiBub3Qgc2VsZi5pbml0aWFsaXplZC52YWx1ZToKICAgIGR1cAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBibnogZ2V0X3Rlcm1zX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIxNAogICAgLy8gR2xvYmFsLnplcm9fYWRkcmVzcywKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjE1CiAgICAvLyBVSW50NjQoMCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIxNi0yMjAKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIGR1cG4gNQoKZ2V0X3Rlcm1zX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF90ZXJtc0A0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGRpZyA2CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDE0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfdGVybXNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIyMwogICAgLy8gc2VsZi5jcmVhdG9yLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMjQKICAgIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjI1CiAgICAvLyBzZWxmLnRvdGFsX3BjdF9icHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9wY3RfYnBzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIyNgogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kdXJhdGlvbl95ZWFycyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMjcKICAgIC8vIHNlbGYuc3RhcnRfcXVhcnRlci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJzdGFydF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXJ0X3F1YXJ0ZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjI4CiAgICAvLyBzZWxmLnNhbGVfcHJpY2UudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIyOQogICAgLy8gc2VsZi5maXJzdF9hc3NldF9pZC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZmlyc3RfYXNzZXRfaWQgZXhpc3RzCiAgICB1bmNvdmVyIDYKICAgIGJ1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF90ZXJtc19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNANAo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CyAEAAEI6AcmDwtpbml0aWFsaXplZBVsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIKdG90YWxfbmZ0cw10b3RhbF9wY3RfYnBzCnNhbGVfcHJpY2UOcGF5b3V0X3Blcl9uZnQHY3JlYXRvcgNtYV8OZHVyYXRpb25feWVhcnMNc3RhcnRfcXVhcnRlcg5maXJzdF9hc3NldF9pZA9wY3RfcGVyX25mdF9icHMUbGFzdF9yZXBvcnRlZF9pbmNvbWUDbGNfBBUffHUxGEAAKCoiZysiZycIImcnCSJnJwQiZycKImcnCyJnKSJnJwwiZycFImcoImcxG0EAOTEZFEQxGESCBgSsbhoEBN2YDm0EvY3JfgSUXxd3BFc3cXgEvvwWxTYaAI4GAAkBNQHUAkECnwMjADEZFDEYFBBDgAA2GgFJFSQSRBdJNhoCSRUkEkQXNhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXMRYjCUk4ECMSRCIoZUQUREsFREsEREsEgZBODkRLA0RLAkRLAURJOAAxABJESTgHMgoSRDgIgcCEPQ9EJwYxAGcqTwVnK08EZycITwNnJwlPAmcnBExnIitlRCIqZUQKJwtMZygjZyJJSwIMQQCLsTIKSbIqsimAMHRlbXBsYXRlLWlwZnM6Ly97aXBmc2NpZDoxOnJhdzpyZXNlcnZlOnNoYTItMjU2fbIngAVGRU5GVLIlgBJGdXR1cmUgRWFybmluZyBORlSyJiKyJCKyIyOyIoEDshAlsgGztDxFA0lAAAUnCksDZ0sCFicHTFAjFr9JIwhFAUL/biNDNhoBSRUkEkQXMRaBAglJOBCBBBJEMRYjCUk4ECMSRCIoZURESwJESwIWJwdMUL5MFyJMTwJNIxJESwE4ADEAEkRLATgUMQASREsBOBFLAxJETDgSFERJOAAxABJESTgHMgoSRDgIIicEZURLARJEMgpLAnAARCMSRLExACOyErIUTLIRgQSyECWyAbOxIicGZUSyB7III7IQJbIBsyNDNhoBSRUkEkQXNhoCSRUkEkQXMRYjCUk4ECMSRCIoZUREMQAiJwZlRBJEIillREsDDERLAUQiK2VESwILgZBOCklESwE4ADEAEkRLATgHMgoSREw4CEsBEkQpTwNnJwxPAmciKmVECicFTGcjQzYaAUkVJBJEFyIoZURESURJFicHSwFQvkwXIkxPAk0jEkQiKWVESUQxAE8DcABEIxJEJw1PAlBJvkwXIkxPAk1LAgxEIicFZURJRLExALIHsggjshAlsgGzTBa/I0OAADYaAUkVJBJEF0k2GgJJTgJJFYEgEkQiKGVEREsBREwWSU4CJwdMUL5MFyJMTwJNIxJEMgMTRCIpZURAAAkiFicOTFCwI0NLAUsDcABMRQVAAAQiQv/oSwMjE0EABCJC/90nDUsBUL5MFyJMTwJNIillRAxBAAgiJwVlREL/wCJC/7wiSShlREAAKDIDRQEiRwVPBRZLBkxQTwUWUE8EFlBPAxZQTwIWUEwWUCcOTFCwI0MiJwZlRCIqZUQiK2VEIicIZUQiJwllRCInBGVEIicKZURPBkUHQv+3", + "approval": "CyAEAAEI6AcmDwtpbml0aWFsaXplZBVsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIKdG90YWxfbmZ0cw10b3RhbF9wY3RfYnBzB2NyZWF0b3IDbWFfCnNhbGVfcHJpY2UOcGF5b3V0X3Blcl9uZnQOZHVyYXRpb25feWVhcnMNc3RhcnRfcXVhcnRlcg5maXJzdF9hc3NldF9pZA9wY3RfcGVyX25mdF9icHMUbGFzdF9yZXBvcnRlZF9pbmNvbWUDbGNfBBUffHUxGEAAKCoiZysiZycIImcnCSJnJwYiZycKImcnCyJnKSJnJwwiZycHImcoImcxG0EAQDEZFEQxGESCBwSsbhoEBN2YDm0EvY3JfgSUXxd3BPSy3u0EVzdxeAS+/BbFNhoAjgcACQE1AdQCQQKfAxQDmAAxGRQxGBQQQ4AANhoBSRUkEkQXSTYaAkkVJBJEFzYaA0kVJBJEFzYaBEkVJBJEFzYaBUkVJBJEFzEWIwlJOBAjEkQiKGVEFERLBURLBERLBIGQTg5ESwNESwJESwFESTgAMQASREk4BzIKEkQ4CIHAhD0PRCcEMQBnKk8FZytPBGcnCE8DZycJTwJnJwZMZyIrZUQiKmVECicLTGcoI2ciSUsCDEEAi7EyCkmyKrIpgDB0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn2yJ4AFRkVORlSyJYASRnV0dXJlIEVhcm5pbmcgTkZUsiYisiQisiMjsiKBA7IQJbIBs7Q8RQNJQAAFJwpLA2dLAhYnBUxQIxa/SSMIRQFC/24jQzYaAUkVJBJEFzEWgQIJSTgQgQQSRDEWIwlJOBAjEkQiKGVEREsCREsCFicFTFC+TBciTE8CTSMSREsBOAAxABJESwE4FDEAEkRLATgRSwMSREw4EhRESTgAMQASREk4BzIKEkQ4CCInBmVESwESRDIKSwJwAEQjEkSxMQAjshKyFEyyEYEEshAlsgGzsSInBGVEsgeyCCOyECWyAbMjQzYaAUkVJBJEFzYaAkkVJBJEFzEWIwlJOBAjEkQiKGVERDEAIicEZUQSRCIpZURLAwxESwFEIitlREsCC4GQTgpJREsBOAAxABJESwE4BzIKEkRMOAhLARJEKU8DZycMTwJnIiplRAonB0xnI0M2GgFJFSQSRBciKGVERElESRYnBUsBUL5MFyJMTwJNIxJEIillRElEMQBPA3AARCMSRCcNTwJQSb5MFyJMTwJNSwIMRCInB2VESUSxMQCyB7III7IQJbIBs0wWvyNDNhoBSRUkEkQXMRaBAwlJOBAjEkQxFoECCUk4ECMSRDEWIwlJOBCBBBJEIihlRERLA0RLAxYnBUxQvkwXIkxPAk0jEkRLAjgHSwE4ABJESwI4CIEKCksCOAgOREw4ByInBGVEEkRJOBFPAxJEOBRMOAASRCNDgAA2GgFJFSQSRBdJNhoCSU4CSRWBIBJEIihlRERLAURMFklOAicFTFC+TBciTE8CTSMSRDIDE0QiKWVEQAAJIhYnDkxQsCNDSwFLA3AATEUFQAAEIkL/6EsDIxNBAAQiQv/dJw1LAVC+TBciTE8CTSIpZUQMQQAIIicHZURC/8AiQv+8IkkoZURAACgyA0UBIkcFTwUWSwZMUE8FFlBPBBZQTwMWUE8CFlBMFlAnDkxQsCNDIicEZUQiKmVEIitlRCInCGVEIicJZUQiJwZlRCInCmVETwZFB0L/tw==", "clear": "C4EBQw==" }, "compilerInfo": { diff --git a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/algomint_client.py b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/algomint_client.py index 07f58a4..28e54d8 100644 --- a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/algomint_client.py +++ b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/algomint_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "total_nfts"}, {"type": "uint64", "name": "total_pct_bps"}, {"type": "uint64", "name": "duration_years"}, {"type": "uint64", "name": "start_quarter"}, {"type": "uint64", "name": "sale_price"}, {"type": "pay", "name": "mbr_payment"}], "name": "mint_future_nft", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}, {"type": "axfer", "name": "opt_in"}, {"type": "pay", "name": "payment"}], "name": "buy_nft", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "quarter"}, {"type": "uint64", "name": "income_amount"}, {"type": "pay", "name": "payout_funding"}], "name": "report_income", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}], "name": "claim_payout", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}, {"type": "address", "name": "address"}], "name": "get_pending_payout", "returns": {"type": "uint64"}, "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_terms", "returns": {"type": "(address,uint64,uint64,uint64,uint64,uint64,uint64)"}, "desc": "Returns: (creator, total_nfts, total_pct_bps, duration_years, start_quarter, sale_price, first_asset_id)", "events": [], "readonly": true, "recommendations": {}}], "name": "Algomint", "state": {"keys": {"box": {}, "global": {"creator": {"key": "Y3JlYXRvcg==", "keyType": "AVMString", "valueType": "address"}, "total_nfts": {"key": "dG90YWxfbmZ0cw==", "keyType": "AVMString", "valueType": "AVMUint64"}, "total_pct_bps": {"key": "dG90YWxfcGN0X2Jwcw==", "keyType": "AVMString", "valueType": "AVMUint64"}, "duration_years": {"key": "ZHVyYXRpb25feWVhcnM=", "keyType": "AVMString", "valueType": "AVMUint64"}, "start_quarter": {"key": "c3RhcnRfcXVhcnRlcg==", "keyType": "AVMString", "valueType": "AVMUint64"}, "sale_price": {"key": "c2FsZV9wcmljZQ==", "keyType": "AVMString", "valueType": "AVMUint64"}, "first_asset_id": {"key": "Zmlyc3RfYXNzZXRfaWQ=", "keyType": "AVMString", "valueType": "AVMUint64"}, "pct_per_nft_bps": {"key": "cGN0X3Blcl9uZnRfYnBz", "keyType": "AVMString", "valueType": "AVMUint64"}, "last_reported_quarter": {"key": "bGFzdF9yZXBvcnRlZF9xdWFydGVy", "keyType": "AVMString", "valueType": "AVMUint64"}, "last_reported_income": {"key": "bGFzdF9yZXBvcnRlZF9pbmNvbWU=", "keyType": "AVMString", "valueType": "AVMUint64"}, "payout_per_nft": {"key": "cGF5b3V0X3Blcl9uZnQ=", "keyType": "AVMString", "valueType": "AVMUint64"}, "initialized": {"key": "aW5pdGlhbGl6ZWQ=", "keyType": "AVMString", "valueType": "AVMUint64"}}, "local": {}}, "maps": {"box": {"last_claimed_quarter": {"keyType": "uint64", "valueType": "uint64", "prefix": "bGNf"}, "minted_assets": {"keyType": "uint64", "valueType": "uint64", "prefix": "bWFf"}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 1, "ints": 11}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CyAEAAEI6AcmDwtpbml0aWFsaXplZBVsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIKdG90YWxfbmZ0cw10b3RhbF9wY3RfYnBzCnNhbGVfcHJpY2UOcGF5b3V0X3Blcl9uZnQHY3JlYXRvcgNtYV8OZHVyYXRpb25feWVhcnMNc3RhcnRfcXVhcnRlcg5maXJzdF9hc3NldF9pZA9wY3RfcGVyX25mdF9icHMUbGFzdF9yZXBvcnRlZF9pbmNvbWUDbGNfBBUffHUxGEAAKCoiZysiZycIImcnCSJnJwQiZycKImcnCyJnKSJnJwwiZycFImcoImcxG0EAOTEZFEQxGESCBgSsbhoEBN2YDm0EvY3JfgSUXxd3BFc3cXgEvvwWxTYaAI4GAAkBNQHUAkECnwMjADEZFDEYFBBDgAA2GgFJFSQSRBdJNhoCSRUkEkQXNhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXMRYjCUk4ECMSRCIoZUQUREsFREsEREsEgZBODkRLA0RLAkRLAURJOAAxABJESTgHMgoSRDgIgcCEPQ9EJwYxAGcqTwVnK08EZycITwNnJwlPAmcnBExnIitlRCIqZUQKJwtMZygjZyJJSwIMQQCLsTIKSbIqsimAMHRlbXBsYXRlLWlwZnM6Ly97aXBmc2NpZDoxOnJhdzpyZXNlcnZlOnNoYTItMjU2fbIngAVGRU5GVLIlgBJGdXR1cmUgRWFybmluZyBORlSyJiKyJCKyIyOyIoEDshAlsgGztDxFA0lAAAUnCksDZ0sCFicHTFAjFr9JIwhFAUL/biNDNhoBSRUkEkQXMRaBAglJOBCBBBJEMRYjCUk4ECMSRCIoZURESwJESwIWJwdMUL5MFyJMTwJNIxJESwE4ADEAEkRLATgUMQASREsBOBFLAxJETDgSFERJOAAxABJESTgHMgoSRDgIIicEZURLARJEMgpLAnAARCMSRLExACOyErIUTLIRgQSyECWyAbOxIicGZUSyB7III7IQJbIBsyNDNhoBSRUkEkQXNhoCSRUkEkQXMRYjCUk4ECMSRCIoZUREMQAiJwZlRBJEIillREsDDERLAUQiK2VESwILgZBOCklESwE4ADEAEkRLATgHMgoSREw4CEsBEkQpTwNnJwxPAmciKmVECicFTGcjQzYaAUkVJBJEFyIoZURESURJFicHSwFQvkwXIkxPAk0jEkQiKWVESUQxAE8DcABEIxJEJw1PAlBJvkwXIkxPAk1LAgxEIicFZURJRLExALIHsggjshAlsgGzTBa/I0OAADYaAUkVJBJEF0k2GgJJTgJJFYEgEkQiKGVEREsBREwWSU4CJwdMUL5MFyJMTwJNIxJEMgMTRCIpZURAAAkiFicOTFCwI0NLAUsDcABMRQVAAAQiQv/oSwMjE0EABCJC/90nDUsBUL5MFyJMTwJNIillRAxBAAgiJwVlREL/wCJC/7wiSShlREAAKDIDRQEiRwVPBRZLBkxQTwUWUE8EFlBPAxZQTwIWUEwWUCcOTFCwI0MiJwZlRCIqZUQiK2VEIicIZUQiJwllRCInBGVEIicKZURPBkUHQv+3", "clear": "C4EBQw=="}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAxMDAwCiAgICBieXRlY2Jsb2NrICJpbml0aWFsaXplZCIgImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIgInRvdGFsX25mdHMiICJ0b3RhbF9wY3RfYnBzIiAic2FsZV9wcmljZSIgInBheW91dF9wZXJfbmZ0IiAiY3JlYXRvciIgIm1hXyIgImR1cmF0aW9uX3llYXJzIiAic3RhcnRfcXVhcnRlciIgImZpcnN0X2Fzc2V0X2lkIiAicGN0X3Blcl9uZnRfYnBzIiAibGFzdF9yZXBvcnRlZF9pbmNvbWUiICJsY18iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4CiAgICAvLyBzZWxmLnRvdGFsX25mdHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OQogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBzZWxmLmR1cmF0aW9uX3llYXJzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMQogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyA0IC8vICJzYWxlX3ByaWNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNAogICAgLy8gc2VsZi5wY3RfcGVyX25mdF9icHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9pbmNvbWUgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMiAvLyAibGFzdF9yZXBvcnRlZF9pbmNvbWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNwogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdCA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTgKICAgIC8vIHNlbGYuaW5pdGlhbGl6ZWQgPSBHbG9iYWxTdGF0ZShGYWxzZSkKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0CiAgICAvLyBjbGFzcyBBbGdvbWludChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTUKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweGFjNmUxYTA0IDB4ZGQ5ODBlNmQgMHhiZDhkYzk3ZSAweDk0NWYxNzc3IDB4NTczNzcxNzggMHhiZWZjMTZjNSAvLyBtZXRob2QgIm1pbnRfZnV0dXJlX25mdCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJidXlfbmZ0KHVpbnQ2NCxheGZlcixwYXkpdm9pZCIsIG1ldGhvZCAicmVwb3J0X2luY29tZSh1aW50NjQsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJjbGFpbV9wYXlvdXQodWludDY0KXZvaWQiLCBtZXRob2QgImdldF9wZW5kaW5nX3BheW91dCh1aW50NjQsYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgImdldF90ZXJtcygpKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWludF9mdXR1cmVfbmZ0IGJ1eV9uZnQgcmVwb3J0X2luY29tZSBjbGFpbV9wYXlvdXQgZ2V0X3BlbmRpbmdfcGF5b3V0IGdldF90ZXJtcwogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQubWludF9mdXR1cmVfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKbWludF9mdXR1cmVfbmZ0OgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNgogICAgLy8gYXNzZXJ0IHRvdGFsX25mdHMgPiBVSW50NjQoMCkKICAgIGRpZyA1CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNwogICAgLy8gYXNzZXJ0IHRvdGFsX3BjdF9icHMgPiBVSW50NjQoMCkKICAgIGRpZyA0CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozOAogICAgLy8gYXNzZXJ0IHRvdGFsX3BjdF9icHMgPD0gVUludDY0KDEwXzAwMCkKICAgIGRpZyA0CiAgICBwdXNoaW50IDEwMDAwCiAgICA8PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzkKICAgIC8vIGFzc2VydCBkdXJhdGlvbl95ZWFycyA+IFVJbnQ2NCgwKQogICAgZGlnIDMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBhc3NlcnQgc3RhcnRfcXVhcnRlciA+IFVJbnQ2NCgwKQogICAgZGlnIDIKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBhc3NlcnQgc2FsZV9wcmljZSA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQzCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ1LTQ2CiAgICAvLyAjIE5PVEU6IEV4YWN0IE1CUiBkZXBlbmRzIG9uIHByb3RvY29sIHBhcmFtczsgcmVxdWlyZSBhIHNlbnNpYmxlIG1pbmltdW0gZm9yIGRlbW8uCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuYW1vdW50ID49IFVJbnQ2NCgxXzAwMF8wMDApCiAgICBndHhucyBBbW91bnQKICAgIHB1c2hpbnQgMTAwMDAwMAogICAgPj0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBzZWxmLmNyZWF0b3IudmFsdWUgPSBUeG4uc2VuZGVyCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0OQogICAgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlID0gdG90YWxfbmZ0cwogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIHVuY292ZXIgNQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlID0gdG90YWxfcGN0X2JwcwogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIHVuY292ZXIgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MQogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSA9IGR1cmF0aW9uX3llYXJzCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyLnZhbHVlID0gc3RhcnRfcXVhcnRlcgogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlID0gc2FsZV9wcmljZQogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTQKICAgIC8vIHNlbGYucGN0X3Blcl9uZnRfYnBzLnZhbHVlID0gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1NQogICAgLy8gc2VsZi5pbml0aWFsaXplZC52YWx1ZSA9IFRydWUKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgaW50Y18wIC8vIDAKCm1pbnRfZnV0dXJlX25mdF9mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2ZvckA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTktNzAKICAgIC8vIGNyZWF0ZWQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIC8vICAgICB1bml0X25hbWU9YiJGRU5GVCIsCiAgICAvLyAgICAgIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vICAgICB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTEwMDAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjcKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjgKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjUtNjYKICAgIC8vICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgcHVzaGJ5dGVzIDB4NzQ2NTZkNzA2YzYxNzQ2NTJkNjk3MDY2NzMzYTJmMmY3YjY5NzA2NjczNjM2OTY0M2EzMTNhNzI2MTc3M2E3MjY1NzM2NTcyNzY2NTNhNzM2ODYxMzIyZDMyMzUzNjdkCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjQKICAgIC8vIHVuaXRfbmFtZT1iIkZFTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NDU0ZTQ2NTQKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYzCiAgICAvLyBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NzU3NDc1NzI2NTIwNDU2MTcyNmU2OTZlNjcyMDRlNDY1NAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MgogICAgLy8gZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MQogICAgLy8gZGVjaW1hbHM9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MAogICAgLy8gdG90YWw9MSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1OQogICAgLy8gY3JlYXRlZCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjY5CiAgICAvLyBmZWU9MTAwMCwKICAgIGludGNfMyAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU5LTcwCiAgICAvLyBjcmVhdGVkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xLAogICAgLy8gICAgIGRlY2ltYWxzPTAsCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICAvLyAgICAgYXNzZXRfbmFtZT1iIkZ1dHVyZSBFYXJuaW5nIE5GVCIsCiAgICAvLyAgICAgdW5pdF9uYW1lPWIiRkVORlQiLAogICAgLy8gICAgICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyAgICAgdXJsPWIidGVtcGxhdGUtaXBmczovL3tpcGZzY2lkOjE6cmF3OnJlc2VydmU6c2hhMi0yNTZ9IiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIGJ1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcxCiAgICAvLyBpZiBpZHggPT0gVUludDY0KDApOgogICAgZHVwCiAgICBibnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcyCiAgICAvLyBzZWxmLmZpcnN0X2Fzc2V0X2lkLnZhbHVlID0gY3JlYXRlZC5jcmVhdGVkX2Fzc2V0LmlkCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCm1pbnRfZnV0dXJlX25mdF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzMKICAgIC8vIHNlbGYubWludGVkX2Fzc2V0c1tjcmVhdGVkLmNyZWF0ZWRfYXNzZXQuaWRdID0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBpbnRjXzEgLy8gMQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU3LTU4CiAgICAvLyAjIE1pbnQgYSBmaXhlZCBzZXJpZXMgb2YgQVJDLTE5IHN0eWxlIE5GVHMgZnJvbSB0aGUgYXBwIGFjY291bnQuCiAgICAvLyBmb3IgaWR4IGluIHVyYW5nZSh0b3RhbF9uZnRzKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBtaW50X2Z1dHVyZV9uZnRfZm9yX2hlYWRlckAyCgptaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5idXlfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKYnV5X25mdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODIKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkaWcgMgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODgtODkKICAgIC8vICMgRW5zdXJlIGJ1eWVyIGhhcyBvcHRlZC1pbiBpbiB0aGUgc2FtZSBncm91cC4KICAgIC8vIGFzc2VydCBvcHRfaW4uc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5MAogICAgLy8gYXNzZXJ0IG9wdF9pbi5hc3NldF9yZWNlaXZlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkxCiAgICAvLyBhc3NlcnQgb3B0X2luLnhmZXJfYXNzZXQuaWQgPT0gYXNzZXQuaWQKICAgIGRpZyAxCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGRpZyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTIKICAgIC8vIGFzc2VydCBvcHRfaW4uYXNzZXRfYW1vdW50ID09IFVJbnQ2NCgwKQogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBhc3NlcnQgcGF5bWVudC5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NQogICAgLy8gYXNzZXJ0IHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NgogICAgLy8gYXNzZXJ0IHBheW1lbnQuYW1vdW50ID09IHNlbGYuc2FsZV9wcmljZS52YWx1ZQogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OAogICAgLy8gYXBwX2JhbGFuY2UsIGFwcF9vcHRlZCA9IG9wLkFzc2V0SG9sZGluZ0dldC5hc3NldF9iYWxhbmNlKEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsIGFzc2V0KQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGRpZyAyCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IGFwcF9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAwCiAgICAvLyBhc3NlcnQgYXBwX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwMi0xMDgKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIGludmVzdG9yIGFuZCBmb3J3YXJkIHBheW1lbnQgdG8gY3JlYXRvci4KICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PVVJbnQ2NCgxKSwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDUKICAgIC8vIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTA2CiAgICAvLyBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgc3dhcAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDItMTAzCiAgICAvLyAjIFRyYW5zZmVyIE5GVCB0byBpbnZlc3RvciBhbmQgZm9yd2FyZCBwYXltZW50IHRvIGNyZWF0b3IuCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDcKICAgIC8vIGZlZT0xMDAwLAogICAgaW50Y18zIC8vIDEwMDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAyLTEwOAogICAgLy8gIyBUcmFuc2ZlciBORlQgdG8gaW52ZXN0b3IgYW5kIGZvcndhcmQgcGF5bWVudCB0byBjcmVhdG9yLgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTAKICAgIC8vIHJlY2VpdmVyPXNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExMgogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5yZXBvcnRfaW5jb21lW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVwb3J0X2luY29tZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE5CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmNyZWF0b3IudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIxCiAgICAvLyBhc3NlcnQgcXVhcnRlciA+IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGRpZyAzCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjIKICAgIC8vIGFzc2VydCBpbmNvbWVfYW1vdW50ID4gVUludDY0KDApCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI0CiAgICAvLyB0b3RhbF9wYXlvdXQgPSAoaW5jb21lX2Ftb3VudCAqIHNlbGYudG90YWxfcGN0X2Jwcy52YWx1ZSkgLy8gVUludDY0KDEwXzAwMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF9wY3RfYnBzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX3BjdF9icHMgZXhpc3RzCiAgICBkaWcgMgogICAgKgogICAgcHVzaGludCAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyNQogICAgLy8gYXNzZXJ0IHRvdGFsX3BheW91dCA+IFVJbnQ2NCgwKQogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjctMTI4CiAgICAvLyAjIFJlcXVpcmUgdGhlIGNyZWF0b3IgdG8gZnVuZCB0aGUgYXBwIGZvciB0aGlzIHF1YXJ0ZXIncyBwYXlvdXRzLgogICAgLy8gYXNzZXJ0IHBheW91dF9mdW5kaW5nLnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI5CiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMAogICAgLy8gYXNzZXJ0IHBheW91dF9mdW5kaW5nLmFtb3VudCA9PSB0b3RhbF9wYXlvdXQKICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzIKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID0gcXVhcnRlcgogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMwogICAgLy8gc2VsZi5sYXN0X3JlcG9ydGVkX2luY29tZS52YWx1ZSA9IGluY29tZV9hbW91bnQKICAgIGJ5dGVjIDEyIC8vICJsYXN0X3JlcG9ydGVkX2luY29tZSIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzQKICAgIC8vIHNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUgPSB0b3RhbF9wYXlvdXQgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9uZnRzIGV4aXN0cwogICAgLwogICAgYnl0ZWMgNSAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmNsYWltX3BheW91dFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltX3BheW91dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzOAogICAgLy8gYXNzZXJ0IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbml0aWFsaXplZCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzOQogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0MAogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIGR1cAogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0MQogICAgLy8gYXNzZXJ0IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQzCiAgICAvLyBob2xkZXJfYmFsYW5jZSwgaG9sZGVyX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoVHhuLnNlbmRlciwgQXNzZXQoYXNzZXRfaWQpKQogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDQKICAgIC8vIGFzc2VydCBob2xkZXJfb3B0ZWQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NQogICAgLy8gYXNzZXJ0IGhvbGRlcl9iYWxhbmNlID09IFVJbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDcKICAgIC8vIGNsYWltZWQgPSBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyAxMyAvLyAibGNfIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ4CiAgICAvLyBhc3NlcnQgY2xhaW1lZCA8IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBkaWcgMgogICAgPAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ5CiAgICAvLyBhc3NlcnQgc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSA+IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBheW91dF9wZXJfbmZ0IGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTEtMTU1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgYW1vdW50PXNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTMKICAgIC8vIHJlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1NAogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTEtMTU1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgYW1vdW50PXNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU3CiAgICAvLyBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyW2Fzc2V0X2lkXSA9IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3BlbmRpbmdfcGF5b3V0W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3BlbmRpbmdfcGF5b3V0OgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYxCiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYyCiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGRpZyAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjMKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBzd2FwCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ5dGVjIDcgLy8gIm1hXyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE2NAogICAgLy8gYXNzZXJ0IGFkZHJlc3MgIT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY2CiAgICAvLyBpZiBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlci52YWx1ZSA9PSBVSW50NjQoMCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGJueiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY3CiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgaXRvYgogICAgYnl0ZWMgMTQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY5CiAgICAvLyBob2xkZXJfYmFsYW5jZSwgaG9sZGVyX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoYWRkcmVzcywgQXNzZXQoYXNzZXRfaWQpKQogICAgZGlnIDEKICAgIGRpZyAzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIHN3YXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE3MAogICAgLy8gaWYgbm90IGhvbGRlcl9vcHRlZDoKICAgIGJueiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcxCiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcyCiAgICAvLyBpZiBob2xkZXJfYmFsYW5jZSAhPSBVSW50NjQoMSk6CiAgICBkaWcgMwogICAgaW50Y18xIC8vIDEKICAgICE9CiAgICBieiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTczCiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc1CiAgICAvLyBjbGFpbWVkID0gc2VsZi5sYXN0X2NsYWltZWRfcXVhcnRlci5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKQogICAgYnl0ZWMgMTMgLy8gImxjXyIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE3NgogICAgLy8gaWYgY2xhaW1lZCA8IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIgZXhpc3RzCiAgICA8CiAgICBieiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc3CiAgICAvLyByZXR1cm4gc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBheW91dF9wZXJfbmZ0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc4CiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3Rlcm1zW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3Rlcm1zOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODUtMTg3CiAgICAvLyAjIE11c3QgYmUgc2FmZSB0byBjYWxsIGJlZm9yZSBtaW50aW5nL2luaXRpYWxpemF0aW9uIChVSSBjYWxscyB0aGlzIGFmdGVyIGRlcGxveSkuCiAgICAvLyAjIFJldHVybiB6ZXJvL2RlZmF1bHQgdmFsdWVzIHVudGlsIGluaXRpYWxpemVkLgogICAgLy8gaWYgbm90IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWU6CiAgICBkdXAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYm56IGdldF90ZXJtc19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODkKICAgIC8vIEdsb2JhbC56ZXJvX2FkZHJlc3MsCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE5MAogICAgLy8gVUludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTEtMTk1CiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICBkdXBuIDUKCmdldF90ZXJtc19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBkaWcgNgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAxNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3Rlcm1zX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTgKICAgIC8vIHNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTk5CiAgICAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9uZnRzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDEKICAgIC8vIHNlbGYuZHVyYXRpb25feWVhcnMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZHVyYXRpb25feWVhcnMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAyCiAgICAvLyBzZWxmLnN0YXJ0X3F1YXJ0ZXIudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGFydF9xdWFydGVyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gInNhbGVfcHJpY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2FsZV9wcmljZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDQKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gImZpcnN0X2Fzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmZpcnN0X2Fzc2V0X2lkIGV4aXN0cwogICAgdW5jb3ZlciA2CiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfdGVybXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3Rlcm1zQDQK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [757, 810, 1158], "errorMessage": "check self.creator exists"}, {"pc": [1171], "errorMessage": "check self.duration_years exists"}, {"pc": [1186], "errorMessage": "check self.first_asset_id exists"}, {"pc": [373, 646, 802, 892, 1001, 1110], "errorMessage": "check self.initialized exists"}, {"pc": [816, 917, 1033, 1089], "errorMessage": "check self.last_reported_quarter exists"}, {"pc": [952, 1098], "errorMessage": "check self.payout_per_nft exists"}, {"pc": [718, 1181], "errorMessage": "check self.sale_price exists"}, {"pc": [1176], "errorMessage": "check self.start_quarter exists"}, {"pc": [454, 872, 1162], "errorMessage": "check self.total_nfts exists"}, {"pc": [450, 827, 1166], "errorMessage": "check self.total_pct_bps exists"}, {"pc": [997], "errorMessage": "invalid number of bytes for arc4.static_array"}, {"pc": [321, 331, 340, 349, 358, 619, 778, 787, 887, 983], "errorMessage": "invalid number of bytes for arc4.uint64"}, {"pc": [632], "errorMessage": "transaction type is axfer"}, {"pc": [369, 642, 798], "errorMessage": "transaction type is pay"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "total_nfts"}, {"type": "uint64", "name": "total_pct_bps"}, {"type": "uint64", "name": "duration_years"}, {"type": "uint64", "name": "start_quarter"}, {"type": "uint64", "name": "sale_price"}, {"type": "pay", "name": "mbr_payment"}], "name": "mint_future_nft", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}, {"type": "axfer", "name": "opt_in"}, {"type": "pay", "name": "payment"}], "name": "buy_nft", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "quarter"}, {"type": "uint64", "name": "income_amount"}, {"type": "pay", "name": "payout_funding"}], "name": "report_income", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}], "name": "claim_payout", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}, {"type": "pay", "name": "seller_payment"}, {"type": "pay", "name": "royalty_payment"}, {"type": "axfer", "name": "asset_transfer"}], "name": "secondary_sale", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}, {"type": "address", "name": "address"}], "name": "get_pending_payout", "returns": {"type": "uint64"}, "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_terms", "returns": {"type": "(address,uint64,uint64,uint64,uint64,uint64,uint64)"}, "desc": "Returns: (creator, total_nfts, total_pct_bps, duration_years, start_quarter, sale_price, first_asset_id)", "events": [], "readonly": true, "recommendations": {}}], "name": "Algomint", "state": {"keys": {"box": {}, "global": {"creator": {"key": "Y3JlYXRvcg==", "keyType": "AVMString", "valueType": "address"}, "total_nfts": {"key": "dG90YWxfbmZ0cw==", "keyType": "AVMString", "valueType": "AVMUint64"}, "total_pct_bps": {"key": "dG90YWxfcGN0X2Jwcw==", "keyType": "AVMString", "valueType": "AVMUint64"}, "duration_years": {"key": "ZHVyYXRpb25feWVhcnM=", "keyType": "AVMString", "valueType": "AVMUint64"}, "start_quarter": {"key": "c3RhcnRfcXVhcnRlcg==", "keyType": "AVMString", "valueType": "AVMUint64"}, "sale_price": {"key": "c2FsZV9wcmljZQ==", "keyType": "AVMString", "valueType": "AVMUint64"}, "first_asset_id": {"key": "Zmlyc3RfYXNzZXRfaWQ=", "keyType": "AVMString", "valueType": "AVMUint64"}, "pct_per_nft_bps": {"key": "cGN0X3Blcl9uZnRfYnBz", "keyType": "AVMString", "valueType": "AVMUint64"}, "last_reported_quarter": {"key": "bGFzdF9yZXBvcnRlZF9xdWFydGVy", "keyType": "AVMString", "valueType": "AVMUint64"}, "last_reported_income": {"key": "bGFzdF9yZXBvcnRlZF9pbmNvbWU=", "keyType": "AVMString", "valueType": "AVMUint64"}, "payout_per_nft": {"key": "cGF5b3V0X3Blcl9uZnQ=", "keyType": "AVMString", "valueType": "AVMUint64"}, "initialized": {"key": "aW5pdGlhbGl6ZWQ=", "keyType": "AVMString", "valueType": "AVMUint64"}}, "local": {}}, "maps": {"box": {"last_claimed_quarter": {"keyType": "uint64", "valueType": "uint64", "prefix": "bGNf"}, "minted_assets": {"keyType": "uint64", "valueType": "uint64", "prefix": "bWFf"}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 1, "ints": 11}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CyAEAAEI6AcmDwtpbml0aWFsaXplZBVsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIKdG90YWxfbmZ0cw10b3RhbF9wY3RfYnBzB2NyZWF0b3IDbWFfCnNhbGVfcHJpY2UOcGF5b3V0X3Blcl9uZnQOZHVyYXRpb25feWVhcnMNc3RhcnRfcXVhcnRlcg5maXJzdF9hc3NldF9pZA9wY3RfcGVyX25mdF9icHMUbGFzdF9yZXBvcnRlZF9pbmNvbWUDbGNfBBUffHUxGEAAKCoiZysiZycIImcnCSJnJwYiZycKImcnCyJnKSJnJwwiZycHImcoImcxG0EAQDEZFEQxGESCBwSsbhoEBN2YDm0EvY3JfgSUXxd3BPSy3u0EVzdxeAS+/BbFNhoAjgcACQE1AdQCQQKfAxQDmAAxGRQxGBQQQ4AANhoBSRUkEkQXSTYaAkkVJBJEFzYaA0kVJBJEFzYaBEkVJBJEFzYaBUkVJBJEFzEWIwlJOBAjEkQiKGVEFERLBURLBERLBIGQTg5ESwNESwJESwFESTgAMQASREk4BzIKEkQ4CIHAhD0PRCcEMQBnKk8FZytPBGcnCE8DZycJTwJnJwZMZyIrZUQiKmVECicLTGcoI2ciSUsCDEEAi7EyCkmyKrIpgDB0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn2yJ4AFRkVORlSyJYASRnV0dXJlIEVhcm5pbmcgTkZUsiYisiQisiMjsiKBA7IQJbIBs7Q8RQNJQAAFJwpLA2dLAhYnBUxQIxa/SSMIRQFC/24jQzYaAUkVJBJEFzEWgQIJSTgQgQQSRDEWIwlJOBAjEkQiKGVEREsCREsCFicFTFC+TBciTE8CTSMSREsBOAAxABJESwE4FDEAEkRLATgRSwMSREw4EhRESTgAMQASREk4BzIKEkQ4CCInBmVESwESRDIKSwJwAEQjEkSxMQAjshKyFEyyEYEEshAlsgGzsSInBGVEsgeyCCOyECWyAbMjQzYaAUkVJBJEFzYaAkkVJBJEFzEWIwlJOBAjEkQiKGVERDEAIicEZUQSRCIpZURLAwxESwFEIitlREsCC4GQTgpJREsBOAAxABJESwE4BzIKEkRMOAhLARJEKU8DZycMTwJnIiplRAonB0xnI0M2GgFJFSQSRBciKGVERElESRYnBUsBUL5MFyJMTwJNIxJEIillRElEMQBPA3AARCMSRCcNTwJQSb5MFyJMTwJNSwIMRCInB2VESUSxMQCyB7III7IQJbIBs0wWvyNDNhoBSRUkEkQXMRaBAwlJOBAjEkQxFoECCUk4ECMSRDEWIwlJOBCBBBJEIihlRERLA0RLAxYnBUxQvkwXIkxPAk0jEkRLAjgHSwE4ABJESwI4CIEKCksCOAgOREw4ByInBGVEEkRJOBFPAxJEOBRMOAASRCNDgAA2GgFJFSQSRBdJNhoCSU4CSRWBIBJEIihlRERLAURMFklOAicFTFC+TBciTE8CTSMSRDIDE0QiKWVEQAAJIhYnDkxQsCNDSwFLA3AATEUFQAAEIkL/6EsDIxNBAAQiQv/dJw1LAVC+TBciTE8CTSIpZUQMQQAIIicHZURC/8AiQv+8IkkoZURAACgyA0UBIkcFTwUWSwZMUE8FFlBPBBZQTwMWUE8CFlBMFlAnDkxQsCNDIicEZUQiKmVEIitlRCInCGVEIicJZUQiJwZlRCInCmVETwZFB0L/tw==", "clear": "C4EBQw=="}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAxMDAwCiAgICBieXRlY2Jsb2NrICJpbml0aWFsaXplZCIgImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIgInRvdGFsX25mdHMiICJ0b3RhbF9wY3RfYnBzIiAiY3JlYXRvciIgIm1hXyIgInNhbGVfcHJpY2UiICJwYXlvdXRfcGVyX25mdCIgImR1cmF0aW9uX3llYXJzIiAic3RhcnRfcXVhcnRlciIgImZpcnN0X2Fzc2V0X2lkIiAicGN0X3Blcl9uZnRfYnBzIiAibGFzdF9yZXBvcnRlZF9pbmNvbWUiICJsY18iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4CiAgICAvLyBzZWxmLnRvdGFsX25mdHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OQogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBzZWxmLmR1cmF0aW9uX3llYXJzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMQogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyA2IC8vICJzYWxlX3ByaWNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNAogICAgLy8gc2VsZi5wY3RfcGVyX25mdF9icHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9pbmNvbWUgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMiAvLyAibGFzdF9yZXBvcnRlZF9pbmNvbWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNwogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdCA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDcgLy8gInBheW91dF9wZXJfbmZ0IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTgKICAgIC8vIHNlbGYuaW5pdGlhbGl6ZWQgPSBHbG9iYWxTdGF0ZShGYWxzZSkKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0CiAgICAvLyBjbGFzcyBBbGdvbWludChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTYKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweGFjNmUxYTA0IDB4ZGQ5ODBlNmQgMHhiZDhkYzk3ZSAweDk0NWYxNzc3IDB4ZjRiMmRlZWQgMHg1NzM3NzE3OCAweGJlZmMxNmM1IC8vIG1ldGhvZCAibWludF9mdXR1cmVfbmZ0KHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQscGF5KXZvaWQiLCBtZXRob2QgImJ1eV9uZnQodWludDY0LGF4ZmVyLHBheSl2b2lkIiwgbWV0aG9kICJyZXBvcnRfaW5jb21lKHVpbnQ2NCx1aW50NjQscGF5KXZvaWQiLCBtZXRob2QgImNsYWltX3BheW91dCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic2Vjb25kYXJ5X3NhbGUodWludDY0LHBheSxwYXksYXhmZXIpdm9pZCIsIG1ldGhvZCAiZ2V0X3BlbmRpbmdfcGF5b3V0KHVpbnQ2NCxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X3Rlcm1zKCkoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtaW50X2Z1dHVyZV9uZnQgYnV5X25mdCByZXBvcnRfaW5jb21lIGNsYWltX3BheW91dCBzZWNvbmRhcnlfc2FsZSBnZXRfcGVuZGluZ19wYXlvdXQgZ2V0X3Rlcm1zCiAgICBlcnIKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTY6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5taW50X2Z1dHVyZV9uZnRbcm91dGluZ10oKSAtPiB2b2lkOgptaW50X2Z1dHVyZV9uZnQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM1CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbml0aWFsaXplZCBleGlzdHMKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM2CiAgICAvLyBhc3NlcnQgdG90YWxfbmZ0cyA+IFVJbnQ2NCgwKQogICAgZGlnIDUKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM3CiAgICAvLyBhc3NlcnQgdG90YWxfcGN0X2JwcyA+IFVJbnQ2NCgwKQogICAgZGlnIDQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM4CiAgICAvLyBhc3NlcnQgdG90YWxfcGN0X2JwcyA8PSBVSW50NjQoMTBfMDAwKQogICAgZGlnIDQKICAgIHB1c2hpbnQgMTAwMDAKICAgIDw9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozOQogICAgLy8gYXNzZXJ0IGR1cmF0aW9uX3llYXJzID4gVUludDY0KDApCiAgICBkaWcgMwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDAKICAgIC8vIGFzc2VydCBzdGFydF9xdWFydGVyID4gVUludDY0KDApCiAgICBkaWcgMgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDEKICAgIC8vIGFzc2VydCBzYWxlX3ByaWNlID4gVUludDY0KDApCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDMKICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0NAogICAgLy8gYXNzZXJ0IG1icl9wYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDUtNDYKICAgIC8vICMgTk9URTogRXhhY3QgTUJSIGRlcGVuZHMgb24gcHJvdG9jb2wgcGFyYW1zOyByZXF1aXJlIGEgc2Vuc2libGUgbWluaW11bSBmb3IgZGVtby4KICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5hbW91bnQgPj0gVUludDY0KDFfMDAwXzAwMCkKICAgIGd0eG5zIEFtb3VudAogICAgcHVzaGludCAxMDAwMDAwCiAgICA+PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDgKICAgIC8vIHNlbGYuY3JlYXRvci52YWx1ZSA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUgPSB0b3RhbF9uZnRzCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgdW5jb3ZlciA1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUwCiAgICAvLyBzZWxmLnRvdGFsX3BjdF9icHMudmFsdWUgPSB0b3RhbF9wY3RfYnBzCiAgICBieXRlY18zIC8vICJ0b3RhbF9wY3RfYnBzIgogICAgdW5jb3ZlciA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUxCiAgICAvLyBzZWxmLmR1cmF0aW9uX3llYXJzLnZhbHVlID0gZHVyYXRpb25feWVhcnMKICAgIGJ5dGVjIDggLy8gImR1cmF0aW9uX3llYXJzIgogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUyCiAgICAvLyBzZWxmLnN0YXJ0X3F1YXJ0ZXIudmFsdWUgPSBzdGFydF9xdWFydGVyCiAgICBieXRlYyA5IC8vICJzdGFydF9xdWFydGVyIgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUzCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UudmFsdWUgPSBzYWxlX3ByaWNlCiAgICBieXRlYyA2IC8vICJzYWxlX3ByaWNlIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1NAogICAgLy8gc2VsZi5wY3RfcGVyX25mdF9icHMudmFsdWUgPSBzZWxmLnRvdGFsX3BjdF9icHMudmFsdWUgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9wY3RfYnBzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInRvdGFsX25mdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfbmZ0cyBleGlzdHMKICAgIC8KICAgIGJ5dGVjIDExIC8vICJwY3RfcGVyX25mdF9icHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBzZWxmLmluaXRpYWxpemVkLnZhbHVlID0gVHJ1ZQogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1Ny01OAogICAgLy8gIyBNaW50IGEgZml4ZWQgc2VyaWVzIG9mIEFSQy0xOSBzdHlsZSBORlRzIGZyb20gdGhlIGFwcCBhY2NvdW50LgogICAgLy8gZm9yIGlkeCBpbiB1cmFuZ2UodG90YWxfbmZ0cyk6CiAgICBpbnRjXzAgLy8gMAoKbWludF9mdXR1cmVfbmZ0X2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1Ny01OAogICAgLy8gIyBNaW50IGEgZml4ZWQgc2VyaWVzIG9mIEFSQy0xOSBzdHlsZSBORlRzIGZyb20gdGhlIGFwcCBhY2NvdW50LgogICAgLy8gZm9yIGlkeCBpbiB1cmFuZ2UodG90YWxfbmZ0cyk6CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBtaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfZm9yQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1OS03MAogICAgLy8gY3JlYXRlZCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9MSwKICAgIC8vICAgICBkZWNpbWFscz0wLAogICAgLy8gICAgIGRlZmF1bHRfZnJvemVuPUZhbHNlLAogICAgLy8gICAgIGFzc2V0X25hbWU9YiJGdXR1cmUgRWFybmluZyBORlQiLAogICAgLy8gICAgIHVuaXRfbmFtZT1iIkZFTkZUIiwKICAgIC8vICAgICAjIEFSQy0xOSB0ZW1wbGF0ZSBVUkwgKENJRCBzb3VyY2VkIGZyb20gcmVzZXJ2ZSBhY2NvdW50IGJ5IGNsaWVudHMpLgogICAgLy8gICAgIHVybD1iInRlbXBsYXRlLWlwZnM6Ly97aXBmc2NpZDoxOnJhdzpyZXNlcnZlOnNoYTItMjU2fSIsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2NwogICAgLy8gbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2OAogICAgLy8gcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2NS02NgogICAgLy8gIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vIHVybD1iInRlbXBsYXRlLWlwZnM6Ly97aXBmc2NpZDoxOnJhdzpyZXNlcnZlOnNoYTItMjU2fSIsCiAgICBwdXNoYnl0ZXMgMHg3NDY1NmQ3MDZjNjE3NDY1MmQ2OTcwNjY3MzNhMmYyZjdiNjk3MDY2NzM2MzY5NjQzYTMxM2E3MjYxNzczYTcyNjU3MzY1NzI3NjY1M2E3MzY4NjEzMjJkMzIzNTM2N2QKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2NAogICAgLy8gdW5pdF9uYW1lPWIiRkVORlQiLAogICAgcHVzaGJ5dGVzIDB4NDY0NTRlNDY1NAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjMKICAgIC8vIGFzc2V0X25hbWU9YiJGdXR1cmUgRWFybmluZyBORlQiLAogICAgcHVzaGJ5dGVzIDB4NDY3NTc0NzU3MjY1MjA0NTYxNzI2ZTY5NmU2NzIwNGU0NjU0CiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVmYXVsdEZyb3plbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYxCiAgICAvLyBkZWNpbWFscz0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYwCiAgICAvLyB0b3RhbD0xLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU5CiAgICAvLyBjcmVhdGVkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjkKICAgIC8vIGZlZT0xMDAwLAogICAgaW50Y18zIC8vIDEwMDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTktNzAKICAgIC8vIGNyZWF0ZWQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIC8vICAgICB1bml0X25hbWU9YiJGRU5GVCIsCiAgICAvLyAgICAgIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vICAgICB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTEwMDAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzEKICAgIC8vIGlmIGlkeCA9PSBVSW50NjQoMCk6CiAgICBkdXAKICAgIGJueiBtaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzIKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQudmFsdWUgPSBjcmVhdGVkLmNyZWF0ZWRfYXNzZXQuaWQKICAgIGJ5dGVjIDEwIC8vICJmaXJzdF9hc3NldF9pZCIKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWludF9mdXR1cmVfbmZ0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3MwogICAgLy8gc2VsZi5taW50ZWRfYXNzZXRzW2NyZWF0ZWQuY3JlYXRlZF9hc3NldC5pZF0gPSBVSW50NjQoMSkKICAgIGRpZyAyCiAgICBpdG9iCiAgICBieXRlYyA1IC8vICJtYV8iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGludGNfMSAvLyAxCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIG1pbnRfZnV0dXJlX25mdF9mb3JfaGVhZGVyQDIKCm1pbnRfZnV0dXJlX25mdF9hZnRlcl9mb3JAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmJ1eV9uZnRbcm91dGluZ10oKSAtPiB2b2lkOgpidXlfbmZ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBwdXNoaW50IDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4MgogICAgLy8gYXNzZXJ0IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbml0aWFsaXplZCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjgzCiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGRpZyAyCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4NAogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIGRpZyAyCiAgICBpdG9iCiAgICBieXRlYyA1IC8vICJtYV8iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4OC04OQogICAgLy8gIyBFbnN1cmUgYnV5ZXIgaGFzIG9wdGVkLWluIGluIHRoZSBzYW1lIGdyb3VwLgogICAgLy8gYXNzZXJ0IG9wdF9pbi5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZGlnIDEKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkwCiAgICAvLyBhc3NlcnQgb3B0X2luLmFzc2V0X3JlY2VpdmVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTEKICAgIC8vIGFzc2VydCBvcHRfaW4ueGZlcl9hc3NldC5pZCA9PSBhc3NldC5pZAogICAgZGlnIDEKICAgIGd0eG5zIFhmZXJBc3NldAogICAgZGlnIDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5MgogICAgLy8gYXNzZXJ0IG9wdF9pbi5hc3NldF9hbW91bnQgPT0gVUludDY0KDApCiAgICBzd2FwCiAgICBndHhucyBBc3NldEFtb3VudAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTQKICAgIC8vIGFzc2VydCBwYXltZW50LnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICBkdXAKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBhc3NlcnQgcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBhc3NlcnQgcGF5bWVudC5hbW91bnQgPT0gc2VsZi5zYWxlX3ByaWNlLnZhbHVlCiAgICBndHhucyBBbW91bnQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJzYWxlX3ByaWNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNhbGVfcHJpY2UgZXhpc3RzCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBhcHBfYmFsYW5jZSwgYXBwX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgYXNzZXQpCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZGlnIDIKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk5CiAgICAvLyBhc3NlcnQgYXBwX29wdGVkCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDAKICAgIC8vIGFzc2VydCBhcHBfYmFsYW5jZSA9PSBVSW50NjQoMSkKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAyLTEwOAogICAgLy8gIyBUcmFuc2ZlciBORlQgdG8gaW52ZXN0b3IgYW5kIGZvcndhcmQgcGF5bWVudCB0byBjcmVhdG9yLgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwNQogICAgLy8gYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDYKICAgIC8vIGFzc2V0X2Ftb3VudD1VSW50NjQoMSksCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwMi0xMDMKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIGludmVzdG9yIGFuZCBmb3J3YXJkIHBheW1lbnQgdG8gY3JlYXRvci4KICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwNwogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDItMTA4CiAgICAvLyAjIFRyYW5zZmVyIE5GVCB0byBpbnZlc3RvciBhbmQgZm9yd2FyZCBwYXltZW50IHRvIGNyZWF0b3IuCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1VSW50NjQoMSksCiAgICAvLyAgICAgZmVlPTEwMDAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOS0xMTMKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLmNyZWF0b3IudmFsdWUsCiAgICAvLyAgICAgYW1vdW50PXBheW1lbnQuYW1vdW50LAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExMAogICAgLy8gcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTA5CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTEyCiAgICAvLyBmZWU9MTAwMCwKICAgIGludGNfMyAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOS0xMTMKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLmNyZWF0b3IudmFsdWUsCiAgICAvLyAgICAgYW1vdW50PXBheW1lbnQuYW1vdW50LAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LnJlcG9ydF9pbmNvbWVbcm91dGluZ10oKSAtPiB2b2lkOgpyZXBvcnRfaW5jb21lOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTkKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjAKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHNlbGYuY3JlYXRvci52YWx1ZQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjEKICAgIC8vIGFzc2VydCBxdWFydGVyID4gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgZGlnIDMKICAgIDwKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyMgogICAgLy8gYXNzZXJ0IGluY29tZV9hbW91bnQgPiBVSW50NjQoMCkKICAgIGRpZyAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjQKICAgIC8vIHRvdGFsX3BheW91dCA9IChpbmNvbWVfYW1vdW50ICogc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlKSAvLyBVSW50NjQoMTBfMDAwKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBwdXNoaW50IDEwMDAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI1CiAgICAvLyBhc3NlcnQgdG90YWxfcGF5b3V0ID4gVUludDY0KDApCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyNy0xMjgKICAgIC8vICMgUmVxdWlyZSB0aGUgY3JlYXRvciB0byBmdW5kIHRoZSBhcHAgZm9yIHRoaXMgcXVhcnRlcidzIHBheW91dHMuCiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjkKICAgIC8vIGFzc2VydCBwYXlvdXRfZnVuZGluZy5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkaWcgMQogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMwCiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcuYW1vdW50ID09IHRvdGFsX3BheW91dAogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMgogICAgLy8gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUgPSBxdWFydGVyCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICB1bmNvdmVyIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMzCiAgICAvLyBzZWxmLmxhc3RfcmVwb3J0ZWRfaW5jb21lLnZhbHVlID0gaW5jb21lX2Ftb3VudAogICAgYnl0ZWMgMTIgLy8gImxhc3RfcmVwb3J0ZWRfaW5jb21lIgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzNAogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSA9IHRvdGFsX3BheW91dCAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyA3IC8vICJwYXlvdXRfcGVyX25mdCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuY2xhaW1fcGF5b3V0W3JvdXRpbmddKCkgLT4gdm9pZDoKY2xhaW1fcGF5b3V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM4CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM5CiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQwCiAgICAvLyBhc3NlcnQgc2VsZi5taW50ZWRfYXNzZXRzLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpID09IFVJbnQ2NCgxKQogICAgZHVwCiAgICBpdG9iCiAgICBieXRlYyA1IC8vICJtYV8iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQxCiAgICAvLyBhc3NlcnQgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUgPiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDMKICAgIC8vIGhvbGRlcl9iYWxhbmNlLCBob2xkZXJfb3B0ZWQgPSBvcC5Bc3NldEhvbGRpbmdHZXQuYXNzZXRfYmFsYW5jZShUeG4uc2VuZGVyLCBBc3NldChhc3NldF9pZCkpCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDMKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NAogICAgLy8gYXNzZXJ0IGhvbGRlcl9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ1CiAgICAvLyBhc3NlcnQgaG9sZGVyX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NwogICAgLy8gY2xhaW1lZCA9IHNlbGYubGFzdF9jbGFpbWVkX3F1YXJ0ZXIuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkKICAgIGJ5dGVjIDEzIC8vICJsY18iCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDgKICAgIC8vIGFzc2VydCBjbGFpbWVkIDwgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIGRpZyAyCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDkKICAgIC8vIGFzc2VydCBzZWxmLnBheW91dF9wZXJfbmZ0LnZhbHVlID4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF5b3V0X3Blcl9uZnQgZXhpc3RzCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MS0xNTUKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICBhbW91bnQ9c2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MwogICAgLy8gcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUxCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU0CiAgICAvLyBmZWU9MTAwMCwKICAgIGludGNfMyAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MS0xNTUKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICBhbW91bnQ9c2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTcKICAgIC8vIHNlbGYubGFzdF9jbGFpbWVkX3F1YXJ0ZXJbYXNzZXRfaWRdID0gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5zZWNvbmRhcnlfc2FsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNlY29uZGFyeV9zYWxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAzCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY3LTE2OAogICAgLy8gIyAxLiBTZWN1cml0eSBjaGVja3MuCiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY5CiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGRpZyAzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzAKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBkaWcgMwogICAgaXRvYgogICAgYnl0ZWMgNSAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcyLTE3MwogICAgLy8gIyAyLiBWZXJpZnkgc2VsbGVyIHBheW1lbnQuCiAgICAvLyBhc3NlcnQgc2VsbGVyX3BheW1lbnQucmVjZWl2ZXIgPT0gYXNzZXRfdHJhbnNmZXIuc2VuZGVyCiAgICBkaWcgMgogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzUtMTc2CiAgICAvLyAjIDMuIFZlcmlmeSByb3lhbHR5IHBheW1lbnQgKDEwJSkuCiAgICAvLyBleHBlY3RlZF9yb3lhbHR5ID0gc2VsbGVyX3BheW1lbnQuYW1vdW50IC8vIFVJbnQ2NCgxMCkKICAgIGRpZyAyCiAgICBndHhucyBBbW91bnQKICAgIHB1c2hpbnQgMTAKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzcKICAgIC8vIGFzc2VydCByb3lhbHR5X3BheW1lbnQuYW1vdW50ID49IGV4cGVjdGVkX3JveWFsdHkKICAgIGRpZyAyCiAgICBndHhucyBBbW91bnQKICAgIDw9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzgKICAgIC8vIGFzc2VydCByb3lhbHR5X3BheW1lbnQucmVjZWl2ZXIgPT0gc2VsZi5jcmVhdG9yLnZhbHVlCiAgICBzd2FwCiAgICBndHhucyBSZWNlaXZlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAtMTgxCiAgICAvLyAjIDQuIFZlcmlmeSBhc3NldCB0cmFuc2Zlci4KICAgIC8vIGFzc2VydCBhc3NldF90cmFuc2Zlci54ZmVyX2Fzc2V0LmlkID09IGFzc2V0X2lkCiAgICBkdXAKICAgIGd0eG5zIFhmZXJBc3NldAogICAgdW5jb3ZlciAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTgyCiAgICAvLyBhc3NlcnQgYXNzZXRfdHJhbnNmZXIuYXNzZXRfcmVjZWl2ZXIgPT0gc2VsbGVyX3BheW1lbnQuc2VuZGVyCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBzd2FwCiAgICBndHhucyBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfcGVuZGluZ19wYXlvdXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODYKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODcKICAgIC8vIGFzc2VydCBhc3NldF9pZCA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4OAogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIHN3YXAKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMgogICAgYnl0ZWMgNSAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg5CiAgICAvLyBhc3NlcnQgYWRkcmVzcyAhPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTEKICAgIC8vIGlmIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID09IFVJbnQ2NCgwKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgYm56IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTIKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCgpnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3BlbmRpbmdfcGF5b3V0QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBpdG9iCiAgICBieXRlYyAxNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTQKICAgIC8vIGhvbGRlcl9iYWxhbmNlLCBob2xkZXJfb3B0ZWQgPSBvcC5Bc3NldEhvbGRpbmdHZXQuYXNzZXRfYmFsYW5jZShhZGRyZXNzLCBBc3NldChhc3NldF9pZCkpCiAgICBkaWcgMQogICAgZGlnIDMKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgc3dhcAogICAgYnVyeSA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTk1CiAgICAvLyBpZiBub3QgaG9sZGVyX29wdGVkOgogICAgYm56IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTYKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTcKICAgIC8vIGlmIGhvbGRlcl9iYWxhbmNlICE9IFVJbnQ2NCgxKToKICAgIGRpZyAzCiAgICBpbnRjXzEgLy8gMQogICAgIT0KICAgIGJ6IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTgKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDAKICAgIC8vIGNsYWltZWQgPSBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyAxMyAvLyAibGNfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAxCiAgICAvLyBpZiBjbGFpbWVkIDwgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWU6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIDwKICAgIGJ6IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDIKICAgIC8vIHJldHVybiBzZWxmLnBheW91dF9wZXJfbmZ0LnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF5b3V0X3Blcl9uZnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDMKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfdGVybXM6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIxMC0yMTIKICAgIC8vICMgTXVzdCBiZSBzYWZlIHRvIGNhbGwgYmVmb3JlIG1pbnRpbmcvaW5pdGlhbGl6YXRpb24gKFVJIGNhbGxzIHRoaXMgYWZ0ZXIgZGVwbG95KS4KICAgIC8vICMgUmV0dXJuIHplcm8vZGVmYXVsdCB2YWx1ZXMgdW50aWwgaW5pdGlhbGl6ZWQuCiAgICAvLyBpZiBub3Qgc2VsZi5pbml0aWFsaXplZC52YWx1ZToKICAgIGR1cAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBibnogZ2V0X3Rlcm1zX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIxNAogICAgLy8gR2xvYmFsLnplcm9fYWRkcmVzcywKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjE1CiAgICAvLyBVSW50NjQoMCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIxNi0yMjAKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIGR1cG4gNQoKZ2V0X3Rlcm1zX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF90ZXJtc0A0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGRpZyA2CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDE0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfdGVybXNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIyMwogICAgLy8gc2VsZi5jcmVhdG9yLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMjQKICAgIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjI1CiAgICAvLyBzZWxmLnRvdGFsX3BjdF9icHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9wY3RfYnBzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIyNgogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kdXJhdGlvbl95ZWFycyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMjcKICAgIC8vIHNlbGYuc3RhcnRfcXVhcnRlci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJzdGFydF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXJ0X3F1YXJ0ZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjI4CiAgICAvLyBzZWxmLnNhbGVfcHJpY2UudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIyOQogICAgLy8gc2VsZi5maXJzdF9hc3NldF9pZC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZmlyc3RfYXNzZXRfaWQgZXhpc3RzCiAgICB1bmNvdmVyIDYKICAgIGJ1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF90ZXJtc19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNANAo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [764, 817, 1079, 1282], "errorMessage": "check self.creator exists"}, {"pc": [1295], "errorMessage": "check self.duration_years exists"}, {"pc": [1310], "errorMessage": "check self.first_asset_id exists"}, {"pc": [380, 653, 809, 899, 1026, 1125, 1234], "errorMessage": "check self.initialized exists"}, {"pc": [823, 924, 1157, 1213], "errorMessage": "check self.last_reported_quarter exists"}, {"pc": [959, 1222], "errorMessage": "check self.payout_per_nft exists"}, {"pc": [725, 1305], "errorMessage": "check self.sale_price exists"}, {"pc": [1300], "errorMessage": "check self.start_quarter exists"}, {"pc": [461, 879, 1286], "errorMessage": "check self.total_nfts exists"}, {"pc": [457, 834, 1290], "errorMessage": "check self.total_pct_bps exists"}, {"pc": [1121], "errorMessage": "invalid number of bytes for arc4.static_array"}, {"pc": [328, 338, 347, 356, 365, 626, 785, 794, 894, 988, 1107], "errorMessage": "invalid number of bytes for arc4.uint64"}, {"pc": [639, 1022], "errorMessage": "transaction type is axfer"}, {"pc": [376, 649, 805, 1000, 1011], "errorMessage": "transaction type is pay"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: @@ -109,6 +109,18 @@ class ClaimPayoutArgs: def abi_method_signature(self) -> str: return "claim_payout(uint64)void" +@dataclasses.dataclass(frozen=True, kw_only=True) +class SecondarySaleArgs: + """Dataclass for secondary_sale arguments""" + asset_id: int + seller_payment: algokit_utils.AppMethodCallTransactionArgument + royalty_payment: algokit_utils.AppMethodCallTransactionArgument + asset_transfer: algokit_utils.AppMethodCallTransactionArgument + + @property + def abi_method_signature(self) -> str: + return "secondary_sale(uint64,pay,pay,axfer)void" + @dataclasses.dataclass(frozen=True, kw_only=True) class GetPendingPayoutArgs: """Dataclass for get_pending_payout arguments""" @@ -176,6 +188,19 @@ def claim_payout( "args": method_args, })) + def secondary_sale( + self, + args: tuple[int, algokit_utils.AppMethodCallTransactionArgument, algokit_utils.AppMethodCallTransactionArgument, algokit_utils.AppMethodCallTransactionArgument] | SecondarySaleArgs, + params: algokit_utils.CommonAppCallParams | None = None + ) -> algokit_utils.AppCallMethodCallParams: + method_args = _parse_abi_args(args) + params = params or algokit_utils.CommonAppCallParams() + return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{ + **dataclasses.asdict(params), + "method": "secondary_sale(uint64,pay,pay,axfer)void", + "args": method_args, + })) + def get_pending_payout( self, args: tuple[int, str] | GetPendingPayoutArgs, @@ -267,6 +292,19 @@ def claim_payout( "args": method_args, })) + def secondary_sale( + self, + args: tuple[int, algokit_utils.AppMethodCallTransactionArgument, algokit_utils.AppMethodCallTransactionArgument, algokit_utils.AppMethodCallTransactionArgument] | SecondarySaleArgs, + params: algokit_utils.CommonAppCallParams | None = None + ) -> algokit_utils.BuiltTransactions: + method_args = _parse_abi_args(args) + params = params or algokit_utils.CommonAppCallParams() + return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{ + **dataclasses.asdict(params), + "method": "secondary_sale(uint64,pay,pay,axfer)void", + "args": method_args, + })) + def get_pending_payout( self, args: tuple[int, str] | GetPendingPayoutArgs, @@ -370,6 +408,22 @@ def claim_payout( parsed_response = response return typing.cast(algokit_utils.SendAppTransactionResult[None], parsed_response) + def secondary_sale( + self, + args: tuple[int, algokit_utils.AppMethodCallTransactionArgument, algokit_utils.AppMethodCallTransactionArgument, algokit_utils.AppMethodCallTransactionArgument] | SecondarySaleArgs, + params: algokit_utils.CommonAppCallParams | None = None, + send_params: algokit_utils.SendParams | None = None + ) -> algokit_utils.SendAppTransactionResult[None]: + method_args = _parse_abi_args(args) + params = params or algokit_utils.CommonAppCallParams() + response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{ + **dataclasses.asdict(params), + "method": "secondary_sale(uint64,pay,pay,axfer)void", + "args": method_args, + }), send_params=send_params) + parsed_response = response + return typing.cast(algokit_utils.SendAppTransactionResult[None], parsed_response) + def get_pending_payout( self, args: tuple[int, str] | GetPendingPayoutArgs, @@ -809,6 +863,12 @@ def decode_return_value( return_value: algokit_utils.ABIReturn | None ) -> None: ... @typing.overload + def decode_return_value( + self, + method: typing.Literal["secondary_sale(uint64,pay,pay,axfer)void"], + return_value: algokit_utils.ABIReturn | None + ) -> None: ... + @typing.overload def decode_return_value( self, method: typing.Literal["get_pending_payout(uint64,address)uint64"], @@ -1082,6 +1142,26 @@ def claim_payout( compilation_params=compilation_params ) + def secondary_sale( + self, + args: tuple[int, algokit_utils.AppMethodCallTransactionArgument, algokit_utils.AppMethodCallTransactionArgument, algokit_utils.AppMethodCallTransactionArgument] | SecondarySaleArgs, + *, + params: algokit_utils.CommonAppCallCreateParams | None = None, + compilation_params: algokit_utils.AppClientCompilationParams | None = None + ) -> algokit_utils.AppCreateMethodCallParams: + """Creates a new instance using the secondary_sale(uint64,pay,pay,axfer)void ABI method""" + params = params or algokit_utils.CommonAppCallCreateParams() + return self.app_factory.params.create( + algokit_utils.AppFactoryCreateMethodCallParams( + **{ + **dataclasses.asdict(params), + "method": "secondary_sale(uint64,pay,pay,axfer)void", + "args": _parse_abi_args(args), + } + ), + compilation_params=compilation_params + ) + def get_pending_payout( self, args: tuple[int, str] | GetPendingPayoutArgs, @@ -1294,6 +1374,24 @@ def claim_payout( ) return self + def secondary_sale( + self, + args: tuple[int, algokit_utils.AppMethodCallTransactionArgument, algokit_utils.AppMethodCallTransactionArgument, algokit_utils.AppMethodCallTransactionArgument] | SecondarySaleArgs, + params: algokit_utils.CommonAppCallParams | None = None + ) -> "AlgomintComposer": + self._composer.add_app_call_method_call( + self.client.params.secondary_sale( + args=args, + params=params, + ) + ) + self._result_mappers.append( + lambda v: self.client.decode_return_value( + "secondary_sale(uint64,pay,pay,axfer)void", v + ) + ) + return self + def get_pending_payout( self, args: tuple[int, str] | GetPendingPayoutArgs, diff --git a/projects/hackalgo-frontend/src/contracts/Algomint.ts b/projects/hackalgo-frontend/src/contracts/Algomint.ts index 4338941..2a63e5d 100644 --- a/projects/hackalgo-frontend/src/contracts/Algomint.ts +++ b/projects/hackalgo-frontend/src/contracts/Algomint.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"Algomint","structs":{},"methods":[{"name":"mint_future_nft","args":[{"type":"uint64","name":"total_nfts"},{"type":"uint64","name":"total_pct_bps"},{"type":"uint64","name":"duration_years"},{"type":"uint64","name":"start_quarter"},{"type":"uint64","name":"sale_price"},{"type":"pay","name":"mbr_payment"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"buy_nft","args":[{"type":"uint64","name":"asset_id"},{"type":"axfer","name":"opt_in"},{"type":"pay","name":"payment"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"report_income","args":[{"type":"uint64","name":"quarter"},{"type":"uint64","name":"income_amount"},{"type":"pay","name":"payout_funding"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"claim_payout","args":[{"type":"uint64","name":"asset_id"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_pending_payout","args":[{"type":"uint64","name":"asset_id"},{"type":"address","name":"address"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"get_terms","args":[],"returns":{"type":"(address,uint64,uint64,uint64,uint64,uint64,uint64)"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns: (creator, total_nfts, total_pct_bps, duration_years, start_quarter, sale_price, first_asset_id)","events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":11,"bytes":1},"local":{"ints":0,"bytes":0}},"keys":{"global":{"creator":{"keyType":"AVMString","valueType":"address","key":"Y3JlYXRvcg=="},"total_nfts":{"keyType":"AVMString","valueType":"AVMUint64","key":"dG90YWxfbmZ0cw=="},"total_pct_bps":{"keyType":"AVMString","valueType":"AVMUint64","key":"dG90YWxfcGN0X2Jwcw=="},"duration_years":{"keyType":"AVMString","valueType":"AVMUint64","key":"ZHVyYXRpb25feWVhcnM="},"start_quarter":{"keyType":"AVMString","valueType":"AVMUint64","key":"c3RhcnRfcXVhcnRlcg=="},"sale_price":{"keyType":"AVMString","valueType":"AVMUint64","key":"c2FsZV9wcmljZQ=="},"first_asset_id":{"keyType":"AVMString","valueType":"AVMUint64","key":"Zmlyc3RfYXNzZXRfaWQ="},"pct_per_nft_bps":{"keyType":"AVMString","valueType":"AVMUint64","key":"cGN0X3Blcl9uZnRfYnBz"},"last_reported_quarter":{"keyType":"AVMString","valueType":"AVMUint64","key":"bGFzdF9yZXBvcnRlZF9xdWFydGVy"},"last_reported_income":{"keyType":"AVMString","valueType":"AVMUint64","key":"bGFzdF9yZXBvcnRlZF9pbmNvbWU="},"payout_per_nft":{"keyType":"AVMString","valueType":"AVMUint64","key":"cGF5b3V0X3Blcl9uZnQ="},"initialized":{"keyType":"AVMString","valueType":"AVMUint64","key":"aW5pdGlhbGl6ZWQ="}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{"last_claimed_quarter":{"keyType":"uint64","valueType":"uint64","prefix":"bGNf"},"minted_assets":{"keyType":"uint64","valueType":"uint64","prefix":"bWFf"}}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[757,810,1158],"errorMessage":"check self.creator exists"},{"pc":[1171],"errorMessage":"check self.duration_years exists"},{"pc":[1186],"errorMessage":"check self.first_asset_id exists"},{"pc":[373,646,802,892,1001,1110],"errorMessage":"check self.initialized exists"},{"pc":[816,917,1033,1089],"errorMessage":"check self.last_reported_quarter exists"},{"pc":[952,1098],"errorMessage":"check self.payout_per_nft exists"},{"pc":[718,1181],"errorMessage":"check self.sale_price exists"},{"pc":[1176],"errorMessage":"check self.start_quarter exists"},{"pc":[454,872,1162],"errorMessage":"check self.total_nfts exists"},{"pc":[450,827,1166],"errorMessage":"check self.total_pct_bps exists"},{"pc":[997],"errorMessage":"invalid number of bytes for arc4.static_array"},{"pc":[321,331,340,349,358,619,778,787,887,983],"errorMessage":"invalid number of bytes for arc4.uint64"},{"pc":[632],"errorMessage":"transaction type is axfer"},{"pc":[369,642,798],"errorMessage":"transaction type is pay"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAxMDAwCiAgICBieXRlY2Jsb2NrICJpbml0aWFsaXplZCIgImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIgInRvdGFsX25mdHMiICJ0b3RhbF9wY3RfYnBzIiAic2FsZV9wcmljZSIgInBheW91dF9wZXJfbmZ0IiAiY3JlYXRvciIgIm1hXyIgImR1cmF0aW9uX3llYXJzIiAic3RhcnRfcXVhcnRlciIgImZpcnN0X2Fzc2V0X2lkIiAicGN0X3Blcl9uZnRfYnBzIiAibGFzdF9yZXBvcnRlZF9pbmNvbWUiICJsY18iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4CiAgICAvLyBzZWxmLnRvdGFsX25mdHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OQogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBzZWxmLmR1cmF0aW9uX3llYXJzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMQogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyA0IC8vICJzYWxlX3ByaWNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNAogICAgLy8gc2VsZi5wY3RfcGVyX25mdF9icHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9pbmNvbWUgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMiAvLyAibGFzdF9yZXBvcnRlZF9pbmNvbWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNwogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdCA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTgKICAgIC8vIHNlbGYuaW5pdGlhbGl6ZWQgPSBHbG9iYWxTdGF0ZShGYWxzZSkKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0CiAgICAvLyBjbGFzcyBBbGdvbWludChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTUKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweGFjNmUxYTA0IDB4ZGQ5ODBlNmQgMHhiZDhkYzk3ZSAweDk0NWYxNzc3IDB4NTczNzcxNzggMHhiZWZjMTZjNSAvLyBtZXRob2QgIm1pbnRfZnV0dXJlX25mdCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJidXlfbmZ0KHVpbnQ2NCxheGZlcixwYXkpdm9pZCIsIG1ldGhvZCAicmVwb3J0X2luY29tZSh1aW50NjQsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJjbGFpbV9wYXlvdXQodWludDY0KXZvaWQiLCBtZXRob2QgImdldF9wZW5kaW5nX3BheW91dCh1aW50NjQsYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgImdldF90ZXJtcygpKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWludF9mdXR1cmVfbmZ0IGJ1eV9uZnQgcmVwb3J0X2luY29tZSBjbGFpbV9wYXlvdXQgZ2V0X3BlbmRpbmdfcGF5b3V0IGdldF90ZXJtcwogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQubWludF9mdXR1cmVfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKbWludF9mdXR1cmVfbmZ0OgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNgogICAgLy8gYXNzZXJ0IHRvdGFsX25mdHMgPiBVSW50NjQoMCkKICAgIGRpZyA1CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNwogICAgLy8gYXNzZXJ0IHRvdGFsX3BjdF9icHMgPiBVSW50NjQoMCkKICAgIGRpZyA0CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozOAogICAgLy8gYXNzZXJ0IHRvdGFsX3BjdF9icHMgPD0gVUludDY0KDEwXzAwMCkKICAgIGRpZyA0CiAgICBwdXNoaW50IDEwMDAwCiAgICA8PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzkKICAgIC8vIGFzc2VydCBkdXJhdGlvbl95ZWFycyA+IFVJbnQ2NCgwKQogICAgZGlnIDMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBhc3NlcnQgc3RhcnRfcXVhcnRlciA+IFVJbnQ2NCgwKQogICAgZGlnIDIKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBhc3NlcnQgc2FsZV9wcmljZSA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQzCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ1LTQ2CiAgICAvLyAjIE5PVEU6IEV4YWN0IE1CUiBkZXBlbmRzIG9uIHByb3RvY29sIHBhcmFtczsgcmVxdWlyZSBhIHNlbnNpYmxlIG1pbmltdW0gZm9yIGRlbW8uCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuYW1vdW50ID49IFVJbnQ2NCgxXzAwMF8wMDApCiAgICBndHhucyBBbW91bnQKICAgIHB1c2hpbnQgMTAwMDAwMAogICAgPj0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBzZWxmLmNyZWF0b3IudmFsdWUgPSBUeG4uc2VuZGVyCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0OQogICAgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlID0gdG90YWxfbmZ0cwogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIHVuY292ZXIgNQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlID0gdG90YWxfcGN0X2JwcwogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIHVuY292ZXIgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MQogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSA9IGR1cmF0aW9uX3llYXJzCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyLnZhbHVlID0gc3RhcnRfcXVhcnRlcgogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlID0gc2FsZV9wcmljZQogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTQKICAgIC8vIHNlbGYucGN0X3Blcl9uZnRfYnBzLnZhbHVlID0gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1NQogICAgLy8gc2VsZi5pbml0aWFsaXplZC52YWx1ZSA9IFRydWUKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgaW50Y18wIC8vIDAKCm1pbnRfZnV0dXJlX25mdF9mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2ZvckA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTktNzAKICAgIC8vIGNyZWF0ZWQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIC8vICAgICB1bml0X25hbWU9YiJGRU5GVCIsCiAgICAvLyAgICAgIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vICAgICB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTEwMDAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjcKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjgKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjUtNjYKICAgIC8vICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgcHVzaGJ5dGVzIDB4NzQ2NTZkNzA2YzYxNzQ2NTJkNjk3MDY2NzMzYTJmMmY3YjY5NzA2NjczNjM2OTY0M2EzMTNhNzI2MTc3M2E3MjY1NzM2NTcyNzY2NTNhNzM2ODYxMzIyZDMyMzUzNjdkCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjQKICAgIC8vIHVuaXRfbmFtZT1iIkZFTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NDU0ZTQ2NTQKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYzCiAgICAvLyBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NzU3NDc1NzI2NTIwNDU2MTcyNmU2OTZlNjcyMDRlNDY1NAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MgogICAgLy8gZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MQogICAgLy8gZGVjaW1hbHM9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MAogICAgLy8gdG90YWw9MSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1OQogICAgLy8gY3JlYXRlZCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjY5CiAgICAvLyBmZWU9MTAwMCwKICAgIGludGNfMyAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU5LTcwCiAgICAvLyBjcmVhdGVkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xLAogICAgLy8gICAgIGRlY2ltYWxzPTAsCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICAvLyAgICAgYXNzZXRfbmFtZT1iIkZ1dHVyZSBFYXJuaW5nIE5GVCIsCiAgICAvLyAgICAgdW5pdF9uYW1lPWIiRkVORlQiLAogICAgLy8gICAgICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyAgICAgdXJsPWIidGVtcGxhdGUtaXBmczovL3tpcGZzY2lkOjE6cmF3OnJlc2VydmU6c2hhMi0yNTZ9IiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIGJ1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcxCiAgICAvLyBpZiBpZHggPT0gVUludDY0KDApOgogICAgZHVwCiAgICBibnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcyCiAgICAvLyBzZWxmLmZpcnN0X2Fzc2V0X2lkLnZhbHVlID0gY3JlYXRlZC5jcmVhdGVkX2Fzc2V0LmlkCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCm1pbnRfZnV0dXJlX25mdF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzMKICAgIC8vIHNlbGYubWludGVkX2Fzc2V0c1tjcmVhdGVkLmNyZWF0ZWRfYXNzZXQuaWRdID0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBpbnRjXzEgLy8gMQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU3LTU4CiAgICAvLyAjIE1pbnQgYSBmaXhlZCBzZXJpZXMgb2YgQVJDLTE5IHN0eWxlIE5GVHMgZnJvbSB0aGUgYXBwIGFjY291bnQuCiAgICAvLyBmb3IgaWR4IGluIHVyYW5nZSh0b3RhbF9uZnRzKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBtaW50X2Z1dHVyZV9uZnRfZm9yX2hlYWRlckAyCgptaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5idXlfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKYnV5X25mdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODIKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkaWcgMgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODgtODkKICAgIC8vICMgRW5zdXJlIGJ1eWVyIGhhcyBvcHRlZC1pbiBpbiB0aGUgc2FtZSBncm91cC4KICAgIC8vIGFzc2VydCBvcHRfaW4uc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5MAogICAgLy8gYXNzZXJ0IG9wdF9pbi5hc3NldF9yZWNlaXZlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkxCiAgICAvLyBhc3NlcnQgb3B0X2luLnhmZXJfYXNzZXQuaWQgPT0gYXNzZXQuaWQKICAgIGRpZyAxCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGRpZyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTIKICAgIC8vIGFzc2VydCBvcHRfaW4uYXNzZXRfYW1vdW50ID09IFVJbnQ2NCgwKQogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBhc3NlcnQgcGF5bWVudC5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NQogICAgLy8gYXNzZXJ0IHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NgogICAgLy8gYXNzZXJ0IHBheW1lbnQuYW1vdW50ID09IHNlbGYuc2FsZV9wcmljZS52YWx1ZQogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OAogICAgLy8gYXBwX2JhbGFuY2UsIGFwcF9vcHRlZCA9IG9wLkFzc2V0SG9sZGluZ0dldC5hc3NldF9iYWxhbmNlKEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsIGFzc2V0KQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGRpZyAyCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IGFwcF9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAwCiAgICAvLyBhc3NlcnQgYXBwX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwMi0xMDgKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIGludmVzdG9yIGFuZCBmb3J3YXJkIHBheW1lbnQgdG8gY3JlYXRvci4KICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PVVJbnQ2NCgxKSwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDUKICAgIC8vIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTA2CiAgICAvLyBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgc3dhcAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDItMTAzCiAgICAvLyAjIFRyYW5zZmVyIE5GVCB0byBpbnZlc3RvciBhbmQgZm9yd2FyZCBwYXltZW50IHRvIGNyZWF0b3IuCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDcKICAgIC8vIGZlZT0xMDAwLAogICAgaW50Y18zIC8vIDEwMDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAyLTEwOAogICAgLy8gIyBUcmFuc2ZlciBORlQgdG8gaW52ZXN0b3IgYW5kIGZvcndhcmQgcGF5bWVudCB0byBjcmVhdG9yLgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTAKICAgIC8vIHJlY2VpdmVyPXNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExMgogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5yZXBvcnRfaW5jb21lW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVwb3J0X2luY29tZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE5CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmNyZWF0b3IudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIxCiAgICAvLyBhc3NlcnQgcXVhcnRlciA+IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGRpZyAzCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjIKICAgIC8vIGFzc2VydCBpbmNvbWVfYW1vdW50ID4gVUludDY0KDApCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI0CiAgICAvLyB0b3RhbF9wYXlvdXQgPSAoaW5jb21lX2Ftb3VudCAqIHNlbGYudG90YWxfcGN0X2Jwcy52YWx1ZSkgLy8gVUludDY0KDEwXzAwMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF9wY3RfYnBzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX3BjdF9icHMgZXhpc3RzCiAgICBkaWcgMgogICAgKgogICAgcHVzaGludCAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyNQogICAgLy8gYXNzZXJ0IHRvdGFsX3BheW91dCA+IFVJbnQ2NCgwKQogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjctMTI4CiAgICAvLyAjIFJlcXVpcmUgdGhlIGNyZWF0b3IgdG8gZnVuZCB0aGUgYXBwIGZvciB0aGlzIHF1YXJ0ZXIncyBwYXlvdXRzLgogICAgLy8gYXNzZXJ0IHBheW91dF9mdW5kaW5nLnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI5CiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMAogICAgLy8gYXNzZXJ0IHBheW91dF9mdW5kaW5nLmFtb3VudCA9PSB0b3RhbF9wYXlvdXQKICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzIKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID0gcXVhcnRlcgogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMwogICAgLy8gc2VsZi5sYXN0X3JlcG9ydGVkX2luY29tZS52YWx1ZSA9IGluY29tZV9hbW91bnQKICAgIGJ5dGVjIDEyIC8vICJsYXN0X3JlcG9ydGVkX2luY29tZSIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzQKICAgIC8vIHNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUgPSB0b3RhbF9wYXlvdXQgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9uZnRzIGV4aXN0cwogICAgLwogICAgYnl0ZWMgNSAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmNsYWltX3BheW91dFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltX3BheW91dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzOAogICAgLy8gYXNzZXJ0IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbml0aWFsaXplZCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzOQogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0MAogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIGR1cAogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0MQogICAgLy8gYXNzZXJ0IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQzCiAgICAvLyBob2xkZXJfYmFsYW5jZSwgaG9sZGVyX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoVHhuLnNlbmRlciwgQXNzZXQoYXNzZXRfaWQpKQogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDQKICAgIC8vIGFzc2VydCBob2xkZXJfb3B0ZWQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NQogICAgLy8gYXNzZXJ0IGhvbGRlcl9iYWxhbmNlID09IFVJbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDcKICAgIC8vIGNsYWltZWQgPSBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyAxMyAvLyAibGNfIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ4CiAgICAvLyBhc3NlcnQgY2xhaW1lZCA8IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBkaWcgMgogICAgPAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ5CiAgICAvLyBhc3NlcnQgc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSA+IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBheW91dF9wZXJfbmZ0IGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTEtMTU1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgYW1vdW50PXNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTMKICAgIC8vIHJlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1NAogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTEtMTU1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgYW1vdW50PXNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU3CiAgICAvLyBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyW2Fzc2V0X2lkXSA9IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3BlbmRpbmdfcGF5b3V0W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3BlbmRpbmdfcGF5b3V0OgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYxCiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYyCiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGRpZyAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjMKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBzd2FwCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ5dGVjIDcgLy8gIm1hXyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE2NAogICAgLy8gYXNzZXJ0IGFkZHJlc3MgIT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY2CiAgICAvLyBpZiBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlci52YWx1ZSA9PSBVSW50NjQoMCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGJueiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY3CiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgaXRvYgogICAgYnl0ZWMgMTQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY5CiAgICAvLyBob2xkZXJfYmFsYW5jZSwgaG9sZGVyX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoYWRkcmVzcywgQXNzZXQoYXNzZXRfaWQpKQogICAgZGlnIDEKICAgIGRpZyAzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIHN3YXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE3MAogICAgLy8gaWYgbm90IGhvbGRlcl9vcHRlZDoKICAgIGJueiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcxCiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcyCiAgICAvLyBpZiBob2xkZXJfYmFsYW5jZSAhPSBVSW50NjQoMSk6CiAgICBkaWcgMwogICAgaW50Y18xIC8vIDEKICAgICE9CiAgICBieiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTczCiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc1CiAgICAvLyBjbGFpbWVkID0gc2VsZi5sYXN0X2NsYWltZWRfcXVhcnRlci5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKQogICAgYnl0ZWMgMTMgLy8gImxjXyIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE3NgogICAgLy8gaWYgY2xhaW1lZCA8IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIgZXhpc3RzCiAgICA8CiAgICBieiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc3CiAgICAvLyByZXR1cm4gc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBheW91dF9wZXJfbmZ0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc4CiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3Rlcm1zW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3Rlcm1zOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODUtMTg3CiAgICAvLyAjIE11c3QgYmUgc2FmZSB0byBjYWxsIGJlZm9yZSBtaW50aW5nL2luaXRpYWxpemF0aW9uIChVSSBjYWxscyB0aGlzIGFmdGVyIGRlcGxveSkuCiAgICAvLyAjIFJldHVybiB6ZXJvL2RlZmF1bHQgdmFsdWVzIHVudGlsIGluaXRpYWxpemVkLgogICAgLy8gaWYgbm90IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWU6CiAgICBkdXAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYm56IGdldF90ZXJtc19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODkKICAgIC8vIEdsb2JhbC56ZXJvX2FkZHJlc3MsCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE5MAogICAgLy8gVUludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTEtMTk1CiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICBkdXBuIDUKCmdldF90ZXJtc19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBkaWcgNgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAxNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3Rlcm1zX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTgKICAgIC8vIHNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTk5CiAgICAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9uZnRzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDEKICAgIC8vIHNlbGYuZHVyYXRpb25feWVhcnMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZHVyYXRpb25feWVhcnMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAyCiAgICAvLyBzZWxmLnN0YXJ0X3F1YXJ0ZXIudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGFydF9xdWFydGVyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gInNhbGVfcHJpY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2FsZV9wcmljZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDQKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gImZpcnN0X2Fzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmZpcnN0X2Fzc2V0X2lkIGV4aXN0cwogICAgdW5jb3ZlciA2CiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfdGVybXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3Rlcm1zQDQK","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAEAAEI6AcmDwtpbml0aWFsaXplZBVsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIKdG90YWxfbmZ0cw10b3RhbF9wY3RfYnBzCnNhbGVfcHJpY2UOcGF5b3V0X3Blcl9uZnQHY3JlYXRvcgNtYV8OZHVyYXRpb25feWVhcnMNc3RhcnRfcXVhcnRlcg5maXJzdF9hc3NldF9pZA9wY3RfcGVyX25mdF9icHMUbGFzdF9yZXBvcnRlZF9pbmNvbWUDbGNfBBUffHUxGEAAKCoiZysiZycIImcnCSJnJwQiZycKImcnCyJnKSJnJwwiZycFImcoImcxG0EAOTEZFEQxGESCBgSsbhoEBN2YDm0EvY3JfgSUXxd3BFc3cXgEvvwWxTYaAI4GAAkBNQHUAkECnwMjADEZFDEYFBBDgAA2GgFJFSQSRBdJNhoCSRUkEkQXNhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXMRYjCUk4ECMSRCIoZUQUREsFREsEREsEgZBODkRLA0RLAkRLAURJOAAxABJESTgHMgoSRDgIgcCEPQ9EJwYxAGcqTwVnK08EZycITwNnJwlPAmcnBExnIitlRCIqZUQKJwtMZygjZyJJSwIMQQCLsTIKSbIqsimAMHRlbXBsYXRlLWlwZnM6Ly97aXBmc2NpZDoxOnJhdzpyZXNlcnZlOnNoYTItMjU2fbIngAVGRU5GVLIlgBJGdXR1cmUgRWFybmluZyBORlSyJiKyJCKyIyOyIoEDshAlsgGztDxFA0lAAAUnCksDZ0sCFicHTFAjFr9JIwhFAUL/biNDNhoBSRUkEkQXMRaBAglJOBCBBBJEMRYjCUk4ECMSRCIoZURESwJESwIWJwdMUL5MFyJMTwJNIxJESwE4ADEAEkRLATgUMQASREsBOBFLAxJETDgSFERJOAAxABJESTgHMgoSRDgIIicEZURLARJEMgpLAnAARCMSRLExACOyErIUTLIRgQSyECWyAbOxIicGZUSyB7III7IQJbIBsyNDNhoBSRUkEkQXNhoCSRUkEkQXMRYjCUk4ECMSRCIoZUREMQAiJwZlRBJEIillREsDDERLAUQiK2VESwILgZBOCklESwE4ADEAEkRLATgHMgoSREw4CEsBEkQpTwNnJwxPAmciKmVECicFTGcjQzYaAUkVJBJEFyIoZURESURJFicHSwFQvkwXIkxPAk0jEkQiKWVESUQxAE8DcABEIxJEJw1PAlBJvkwXIkxPAk1LAgxEIicFZURJRLExALIHsggjshAlsgGzTBa/I0OAADYaAUkVJBJEF0k2GgJJTgJJFYEgEkQiKGVEREsBREwWSU4CJwdMUL5MFyJMTwJNIxJEMgMTRCIpZURAAAkiFicOTFCwI0NLAUsDcABMRQVAAAQiQv/oSwMjE0EABCJC/90nDUsBUL5MFyJMTwJNIillRAxBAAgiJwVlREL/wCJC/7wiSShlREAAKDIDRQEiRwVPBRZLBkxQTwUWUE8EFlBPAxZQTwIWUEwWUCcOTFCwI0MiJwZlRCIqZUQiK2VEIicIZUQiJwllRCInBGVEIicKZURPBkUHQv+3","clear":"C4EBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":5,"minor":8,"patch":0}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"Algomint","structs":{},"methods":[{"name":"mint_future_nft","args":[{"type":"uint64","name":"total_nfts"},{"type":"uint64","name":"total_pct_bps"},{"type":"uint64","name":"duration_years"},{"type":"uint64","name":"start_quarter"},{"type":"uint64","name":"sale_price"},{"type":"pay","name":"mbr_payment"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"buy_nft","args":[{"type":"uint64","name":"asset_id"},{"type":"axfer","name":"opt_in"},{"type":"pay","name":"payment"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"report_income","args":[{"type":"uint64","name":"quarter"},{"type":"uint64","name":"income_amount"},{"type":"pay","name":"payout_funding"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"claim_payout","args":[{"type":"uint64","name":"asset_id"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"secondary_sale","args":[{"type":"uint64","name":"asset_id"},{"type":"pay","name":"seller_payment"},{"type":"pay","name":"royalty_payment"},{"type":"axfer","name":"asset_transfer"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"get_pending_payout","args":[{"type":"uint64","name":"asset_id"},{"type":"address","name":"address"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"get_terms","args":[],"returns":{"type":"(address,uint64,uint64,uint64,uint64,uint64,uint64)"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns: (creator, total_nfts, total_pct_bps, duration_years, start_quarter, sale_price, first_asset_id)","events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":11,"bytes":1},"local":{"ints":0,"bytes":0}},"keys":{"global":{"creator":{"keyType":"AVMString","valueType":"address","key":"Y3JlYXRvcg=="},"total_nfts":{"keyType":"AVMString","valueType":"AVMUint64","key":"dG90YWxfbmZ0cw=="},"total_pct_bps":{"keyType":"AVMString","valueType":"AVMUint64","key":"dG90YWxfcGN0X2Jwcw=="},"duration_years":{"keyType":"AVMString","valueType":"AVMUint64","key":"ZHVyYXRpb25feWVhcnM="},"start_quarter":{"keyType":"AVMString","valueType":"AVMUint64","key":"c3RhcnRfcXVhcnRlcg=="},"sale_price":{"keyType":"AVMString","valueType":"AVMUint64","key":"c2FsZV9wcmljZQ=="},"first_asset_id":{"keyType":"AVMString","valueType":"AVMUint64","key":"Zmlyc3RfYXNzZXRfaWQ="},"pct_per_nft_bps":{"keyType":"AVMString","valueType":"AVMUint64","key":"cGN0X3Blcl9uZnRfYnBz"},"last_reported_quarter":{"keyType":"AVMString","valueType":"AVMUint64","key":"bGFzdF9yZXBvcnRlZF9xdWFydGVy"},"last_reported_income":{"keyType":"AVMString","valueType":"AVMUint64","key":"bGFzdF9yZXBvcnRlZF9pbmNvbWU="},"payout_per_nft":{"keyType":"AVMString","valueType":"AVMUint64","key":"cGF5b3V0X3Blcl9uZnQ="},"initialized":{"keyType":"AVMString","valueType":"AVMUint64","key":"aW5pdGlhbGl6ZWQ="}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{"last_claimed_quarter":{"keyType":"uint64","valueType":"uint64","prefix":"bGNf"},"minted_assets":{"keyType":"uint64","valueType":"uint64","prefix":"bWFf"}}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[764,817,1079,1282],"errorMessage":"check self.creator exists"},{"pc":[1295],"errorMessage":"check self.duration_years exists"},{"pc":[1310],"errorMessage":"check self.first_asset_id exists"},{"pc":[380,653,809,899,1026,1125,1234],"errorMessage":"check self.initialized exists"},{"pc":[823,924,1157,1213],"errorMessage":"check self.last_reported_quarter exists"},{"pc":[959,1222],"errorMessage":"check self.payout_per_nft exists"},{"pc":[725,1305],"errorMessage":"check self.sale_price exists"},{"pc":[1300],"errorMessage":"check self.start_quarter exists"},{"pc":[461,879,1286],"errorMessage":"check self.total_nfts exists"},{"pc":[457,834,1290],"errorMessage":"check self.total_pct_bps exists"},{"pc":[1121],"errorMessage":"invalid number of bytes for arc4.static_array"},{"pc":[328,338,347,356,365,626,785,794,894,988,1107],"errorMessage":"invalid number of bytes for arc4.uint64"},{"pc":[639,1022],"errorMessage":"transaction type is axfer"},{"pc":[376,649,805,1000,1011],"errorMessage":"transaction type is pay"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAxMDAwCiAgICBieXRlY2Jsb2NrICJpbml0aWFsaXplZCIgImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIgInRvdGFsX25mdHMiICJ0b3RhbF9wY3RfYnBzIiAiY3JlYXRvciIgIm1hXyIgInNhbGVfcHJpY2UiICJwYXlvdXRfcGVyX25mdCIgImR1cmF0aW9uX3llYXJzIiAic3RhcnRfcXVhcnRlciIgImZpcnN0X2Fzc2V0X2lkIiAicGN0X3Blcl9uZnRfYnBzIiAibGFzdF9yZXBvcnRlZF9pbmNvbWUiICJsY18iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4CiAgICAvLyBzZWxmLnRvdGFsX25mdHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OQogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBzZWxmLmR1cmF0aW9uX3llYXJzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMQogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyA2IC8vICJzYWxlX3ByaWNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNAogICAgLy8gc2VsZi5wY3RfcGVyX25mdF9icHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9pbmNvbWUgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMiAvLyAibGFzdF9yZXBvcnRlZF9pbmNvbWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNwogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdCA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDcgLy8gInBheW91dF9wZXJfbmZ0IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTgKICAgIC8vIHNlbGYuaW5pdGlhbGl6ZWQgPSBHbG9iYWxTdGF0ZShGYWxzZSkKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0CiAgICAvLyBjbGFzcyBBbGdvbWludChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTYKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweGFjNmUxYTA0IDB4ZGQ5ODBlNmQgMHhiZDhkYzk3ZSAweDk0NWYxNzc3IDB4ZjRiMmRlZWQgMHg1NzM3NzE3OCAweGJlZmMxNmM1IC8vIG1ldGhvZCAibWludF9mdXR1cmVfbmZ0KHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQscGF5KXZvaWQiLCBtZXRob2QgImJ1eV9uZnQodWludDY0LGF4ZmVyLHBheSl2b2lkIiwgbWV0aG9kICJyZXBvcnRfaW5jb21lKHVpbnQ2NCx1aW50NjQscGF5KXZvaWQiLCBtZXRob2QgImNsYWltX3BheW91dCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic2Vjb25kYXJ5X3NhbGUodWludDY0LHBheSxwYXksYXhmZXIpdm9pZCIsIG1ldGhvZCAiZ2V0X3BlbmRpbmdfcGF5b3V0KHVpbnQ2NCxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X3Rlcm1zKCkoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtaW50X2Z1dHVyZV9uZnQgYnV5X25mdCByZXBvcnRfaW5jb21lIGNsYWltX3BheW91dCBzZWNvbmRhcnlfc2FsZSBnZXRfcGVuZGluZ19wYXlvdXQgZ2V0X3Rlcm1zCiAgICBlcnIKCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTY6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5taW50X2Z1dHVyZV9uZnRbcm91dGluZ10oKSAtPiB2b2lkOgptaW50X2Z1dHVyZV9uZnQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM1CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbml0aWFsaXplZCBleGlzdHMKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM2CiAgICAvLyBhc3NlcnQgdG90YWxfbmZ0cyA+IFVJbnQ2NCgwKQogICAgZGlnIDUKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM3CiAgICAvLyBhc3NlcnQgdG90YWxfcGN0X2JwcyA+IFVJbnQ2NCgwKQogICAgZGlnIDQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjM4CiAgICAvLyBhc3NlcnQgdG90YWxfcGN0X2JwcyA8PSBVSW50NjQoMTBfMDAwKQogICAgZGlnIDQKICAgIHB1c2hpbnQgMTAwMDAKICAgIDw9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozOQogICAgLy8gYXNzZXJ0IGR1cmF0aW9uX3llYXJzID4gVUludDY0KDApCiAgICBkaWcgMwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDAKICAgIC8vIGFzc2VydCBzdGFydF9xdWFydGVyID4gVUludDY0KDApCiAgICBkaWcgMgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDEKICAgIC8vIGFzc2VydCBzYWxlX3ByaWNlID4gVUludDY0KDApCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDMKICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0NAogICAgLy8gYXNzZXJ0IG1icl9wYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDUtNDYKICAgIC8vICMgTk9URTogRXhhY3QgTUJSIGRlcGVuZHMgb24gcHJvdG9jb2wgcGFyYW1zOyByZXF1aXJlIGEgc2Vuc2libGUgbWluaW11bSBmb3IgZGVtby4KICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5hbW91bnQgPj0gVUludDY0KDFfMDAwXzAwMCkKICAgIGd0eG5zIEFtb3VudAogICAgcHVzaGludCAxMDAwMDAwCiAgICA+PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDgKICAgIC8vIHNlbGYuY3JlYXRvci52YWx1ZSA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUgPSB0b3RhbF9uZnRzCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgdW5jb3ZlciA1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUwCiAgICAvLyBzZWxmLnRvdGFsX3BjdF9icHMudmFsdWUgPSB0b3RhbF9wY3RfYnBzCiAgICBieXRlY18zIC8vICJ0b3RhbF9wY3RfYnBzIgogICAgdW5jb3ZlciA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUxCiAgICAvLyBzZWxmLmR1cmF0aW9uX3llYXJzLnZhbHVlID0gZHVyYXRpb25feWVhcnMKICAgIGJ5dGVjIDggLy8gImR1cmF0aW9uX3llYXJzIgogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUyCiAgICAvLyBzZWxmLnN0YXJ0X3F1YXJ0ZXIudmFsdWUgPSBzdGFydF9xdWFydGVyCiAgICBieXRlYyA5IC8vICJzdGFydF9xdWFydGVyIgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjUzCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UudmFsdWUgPSBzYWxlX3ByaWNlCiAgICBieXRlYyA2IC8vICJzYWxlX3ByaWNlIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1NAogICAgLy8gc2VsZi5wY3RfcGVyX25mdF9icHMudmFsdWUgPSBzZWxmLnRvdGFsX3BjdF9icHMudmFsdWUgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9wY3RfYnBzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInRvdGFsX25mdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfbmZ0cyBleGlzdHMKICAgIC8KICAgIGJ5dGVjIDExIC8vICJwY3RfcGVyX25mdF9icHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBzZWxmLmluaXRpYWxpemVkLnZhbHVlID0gVHJ1ZQogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1Ny01OAogICAgLy8gIyBNaW50IGEgZml4ZWQgc2VyaWVzIG9mIEFSQy0xOSBzdHlsZSBORlRzIGZyb20gdGhlIGFwcCBhY2NvdW50LgogICAgLy8gZm9yIGlkeCBpbiB1cmFuZ2UodG90YWxfbmZ0cyk6CiAgICBpbnRjXzAgLy8gMAoKbWludF9mdXR1cmVfbmZ0X2Zvcl9oZWFkZXJAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1Ny01OAogICAgLy8gIyBNaW50IGEgZml4ZWQgc2VyaWVzIG9mIEFSQy0xOSBzdHlsZSBORlRzIGZyb20gdGhlIGFwcCBhY2NvdW50LgogICAgLy8gZm9yIGlkeCBpbiB1cmFuZ2UodG90YWxfbmZ0cyk6CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBtaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfZm9yQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1OS03MAogICAgLy8gY3JlYXRlZCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9MSwKICAgIC8vICAgICBkZWNpbWFscz0wLAogICAgLy8gICAgIGRlZmF1bHRfZnJvemVuPUZhbHNlLAogICAgLy8gICAgIGFzc2V0X25hbWU9YiJGdXR1cmUgRWFybmluZyBORlQiLAogICAgLy8gICAgIHVuaXRfbmFtZT1iIkZFTkZUIiwKICAgIC8vICAgICAjIEFSQy0xOSB0ZW1wbGF0ZSBVUkwgKENJRCBzb3VyY2VkIGZyb20gcmVzZXJ2ZSBhY2NvdW50IGJ5IGNsaWVudHMpLgogICAgLy8gICAgIHVybD1iInRlbXBsYXRlLWlwZnM6Ly97aXBmc2NpZDoxOnJhdzpyZXNlcnZlOnNoYTItMjU2fSIsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2NwogICAgLy8gbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2OAogICAgLy8gcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2NS02NgogICAgLy8gIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vIHVybD1iInRlbXBsYXRlLWlwZnM6Ly97aXBmc2NpZDoxOnJhdzpyZXNlcnZlOnNoYTItMjU2fSIsCiAgICBwdXNoYnl0ZXMgMHg3NDY1NmQ3MDZjNjE3NDY1MmQ2OTcwNjY3MzNhMmYyZjdiNjk3MDY2NzM2MzY5NjQzYTMxM2E3MjYxNzczYTcyNjU3MzY1NzI3NjY1M2E3MzY4NjEzMjJkMzIzNTM2N2QKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2NAogICAgLy8gdW5pdF9uYW1lPWIiRkVORlQiLAogICAgcHVzaGJ5dGVzIDB4NDY0NTRlNDY1NAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjMKICAgIC8vIGFzc2V0X25hbWU9YiJGdXR1cmUgRWFybmluZyBORlQiLAogICAgcHVzaGJ5dGVzIDB4NDY3NTc0NzU3MjY1MjA0NTYxNzI2ZTY5NmU2NzIwNGU0NjU0CiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYyCiAgICAvLyBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVmYXVsdEZyb3plbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYxCiAgICAvLyBkZWNpbWFscz0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYwCiAgICAvLyB0b3RhbD0xLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU5CiAgICAvLyBjcmVhdGVkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjkKICAgIC8vIGZlZT0xMDAwLAogICAgaW50Y18zIC8vIDEwMDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTktNzAKICAgIC8vIGNyZWF0ZWQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIC8vICAgICB1bml0X25hbWU9YiJGRU5GVCIsCiAgICAvLyAgICAgIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vICAgICB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTEwMDAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzEKICAgIC8vIGlmIGlkeCA9PSBVSW50NjQoMCk6CiAgICBkdXAKICAgIGJueiBtaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzIKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQudmFsdWUgPSBjcmVhdGVkLmNyZWF0ZWRfYXNzZXQuaWQKICAgIGJ5dGVjIDEwIC8vICJmaXJzdF9hc3NldF9pZCIKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWludF9mdXR1cmVfbmZ0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3MwogICAgLy8gc2VsZi5taW50ZWRfYXNzZXRzW2NyZWF0ZWQuY3JlYXRlZF9hc3NldC5pZF0gPSBVSW50NjQoMSkKICAgIGRpZyAyCiAgICBpdG9iCiAgICBieXRlYyA1IC8vICJtYV8iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGludGNfMSAvLyAxCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIG1pbnRfZnV0dXJlX25mdF9mb3JfaGVhZGVyQDIKCm1pbnRfZnV0dXJlX25mdF9hZnRlcl9mb3JAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmJ1eV9uZnRbcm91dGluZ10oKSAtPiB2b2lkOgpidXlfbmZ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBwdXNoaW50IDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4MgogICAgLy8gYXNzZXJ0IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbml0aWFsaXplZCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjgzCiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGRpZyAyCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4NAogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIGRpZyAyCiAgICBpdG9iCiAgICBieXRlYyA1IC8vICJtYV8iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4OC04OQogICAgLy8gIyBFbnN1cmUgYnV5ZXIgaGFzIG9wdGVkLWluIGluIHRoZSBzYW1lIGdyb3VwLgogICAgLy8gYXNzZXJ0IG9wdF9pbi5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZGlnIDEKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkwCiAgICAvLyBhc3NlcnQgb3B0X2luLmFzc2V0X3JlY2VpdmVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTEKICAgIC8vIGFzc2VydCBvcHRfaW4ueGZlcl9hc3NldC5pZCA9PSBhc3NldC5pZAogICAgZGlnIDEKICAgIGd0eG5zIFhmZXJBc3NldAogICAgZGlnIDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5MgogICAgLy8gYXNzZXJ0IG9wdF9pbi5hc3NldF9hbW91bnQgPT0gVUludDY0KDApCiAgICBzd2FwCiAgICBndHhucyBBc3NldEFtb3VudAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTQKICAgIC8vIGFzc2VydCBwYXltZW50LnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICBkdXAKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBhc3NlcnQgcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBhc3NlcnQgcGF5bWVudC5hbW91bnQgPT0gc2VsZi5zYWxlX3ByaWNlLnZhbHVlCiAgICBndHhucyBBbW91bnQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJzYWxlX3ByaWNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNhbGVfcHJpY2UgZXhpc3RzCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBhcHBfYmFsYW5jZSwgYXBwX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgYXNzZXQpCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZGlnIDIKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk5CiAgICAvLyBhc3NlcnQgYXBwX29wdGVkCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDAKICAgIC8vIGFzc2VydCBhcHBfYmFsYW5jZSA9PSBVSW50NjQoMSkKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAyLTEwOAogICAgLy8gIyBUcmFuc2ZlciBORlQgdG8gaW52ZXN0b3IgYW5kIGZvcndhcmQgcGF5bWVudCB0byBjcmVhdG9yLgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwNQogICAgLy8gYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDYKICAgIC8vIGFzc2V0X2Ftb3VudD1VSW50NjQoMSksCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwMi0xMDMKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIGludmVzdG9yIGFuZCBmb3J3YXJkIHBheW1lbnQgdG8gY3JlYXRvci4KICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwNwogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDItMTA4CiAgICAvLyAjIFRyYW5zZmVyIE5GVCB0byBpbnZlc3RvciBhbmQgZm9yd2FyZCBwYXltZW50IHRvIGNyZWF0b3IuCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1VSW50NjQoMSksCiAgICAvLyAgICAgZmVlPTEwMDAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOS0xMTMKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLmNyZWF0b3IudmFsdWUsCiAgICAvLyAgICAgYW1vdW50PXBheW1lbnQuYW1vdW50LAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExMAogICAgLy8gcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTA5CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTEyCiAgICAvLyBmZWU9MTAwMCwKICAgIGludGNfMyAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOS0xMTMKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLmNyZWF0b3IudmFsdWUsCiAgICAvLyAgICAgYW1vdW50PXBheW1lbnQuYW1vdW50LAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LnJlcG9ydF9pbmNvbWVbcm91dGluZ10oKSAtPiB2b2lkOgpyZXBvcnRfaW5jb21lOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTkKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjAKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHNlbGYuY3JlYXRvci52YWx1ZQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjEKICAgIC8vIGFzc2VydCBxdWFydGVyID4gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgZGlnIDMKICAgIDwKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyMgogICAgLy8gYXNzZXJ0IGluY29tZV9hbW91bnQgPiBVSW50NjQoMCkKICAgIGRpZyAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjQKICAgIC8vIHRvdGFsX3BheW91dCA9IChpbmNvbWVfYW1vdW50ICogc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlKSAvLyBVSW50NjQoMTBfMDAwKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBwdXNoaW50IDEwMDAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI1CiAgICAvLyBhc3NlcnQgdG90YWxfcGF5b3V0ID4gVUludDY0KDApCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyNy0xMjgKICAgIC8vICMgUmVxdWlyZSB0aGUgY3JlYXRvciB0byBmdW5kIHRoZSBhcHAgZm9yIHRoaXMgcXVhcnRlcidzIHBheW91dHMuCiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjkKICAgIC8vIGFzc2VydCBwYXlvdXRfZnVuZGluZy5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkaWcgMQogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMwCiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcuYW1vdW50ID09IHRvdGFsX3BheW91dAogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMgogICAgLy8gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUgPSBxdWFydGVyCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICB1bmNvdmVyIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMzCiAgICAvLyBzZWxmLmxhc3RfcmVwb3J0ZWRfaW5jb21lLnZhbHVlID0gaW5jb21lX2Ftb3VudAogICAgYnl0ZWMgMTIgLy8gImxhc3RfcmVwb3J0ZWRfaW5jb21lIgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzNAogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSA9IHRvdGFsX3BheW91dCAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyA3IC8vICJwYXlvdXRfcGVyX25mdCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuY2xhaW1fcGF5b3V0W3JvdXRpbmddKCkgLT4gdm9pZDoKY2xhaW1fcGF5b3V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM4CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM5CiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQwCiAgICAvLyBhc3NlcnQgc2VsZi5taW50ZWRfYXNzZXRzLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpID09IFVJbnQ2NCgxKQogICAgZHVwCiAgICBpdG9iCiAgICBieXRlYyA1IC8vICJtYV8iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQxCiAgICAvLyBhc3NlcnQgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUgPiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDMKICAgIC8vIGhvbGRlcl9iYWxhbmNlLCBob2xkZXJfb3B0ZWQgPSBvcC5Bc3NldEhvbGRpbmdHZXQuYXNzZXRfYmFsYW5jZShUeG4uc2VuZGVyLCBBc3NldChhc3NldF9pZCkpCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDMKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NAogICAgLy8gYXNzZXJ0IGhvbGRlcl9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ1CiAgICAvLyBhc3NlcnQgaG9sZGVyX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NwogICAgLy8gY2xhaW1lZCA9IHNlbGYubGFzdF9jbGFpbWVkX3F1YXJ0ZXIuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkKICAgIGJ5dGVjIDEzIC8vICJsY18iCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDgKICAgIC8vIGFzc2VydCBjbGFpbWVkIDwgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIGRpZyAyCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDkKICAgIC8vIGFzc2VydCBzZWxmLnBheW91dF9wZXJfbmZ0LnZhbHVlID4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF5b3V0X3Blcl9uZnQgZXhpc3RzCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MS0xNTUKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICBhbW91bnQ9c2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MwogICAgLy8gcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUxCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU0CiAgICAvLyBmZWU9MTAwMCwKICAgIGludGNfMyAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MS0xNTUKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICBhbW91bnQ9c2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTcKICAgIC8vIHNlbGYubGFzdF9jbGFpbWVkX3F1YXJ0ZXJbYXNzZXRfaWRdID0gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5zZWNvbmRhcnlfc2FsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNlY29uZGFyeV9zYWxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAzCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY3LTE2OAogICAgLy8gIyAxLiBTZWN1cml0eSBjaGVja3MuCiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY5CiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGRpZyAzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzAKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBkaWcgMwogICAgaXRvYgogICAgYnl0ZWMgNSAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcyLTE3MwogICAgLy8gIyAyLiBWZXJpZnkgc2VsbGVyIHBheW1lbnQuCiAgICAvLyBhc3NlcnQgc2VsbGVyX3BheW1lbnQucmVjZWl2ZXIgPT0gYXNzZXRfdHJhbnNmZXIuc2VuZGVyCiAgICBkaWcgMgogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzUtMTc2CiAgICAvLyAjIDMuIFZlcmlmeSByb3lhbHR5IHBheW1lbnQgKDEwJSkuCiAgICAvLyBleHBlY3RlZF9yb3lhbHR5ID0gc2VsbGVyX3BheW1lbnQuYW1vdW50IC8vIFVJbnQ2NCgxMCkKICAgIGRpZyAyCiAgICBndHhucyBBbW91bnQKICAgIHB1c2hpbnQgMTAKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzcKICAgIC8vIGFzc2VydCByb3lhbHR5X3BheW1lbnQuYW1vdW50ID49IGV4cGVjdGVkX3JveWFsdHkKICAgIGRpZyAyCiAgICBndHhucyBBbW91bnQKICAgIDw9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzgKICAgIC8vIGFzc2VydCByb3lhbHR5X3BheW1lbnQucmVjZWl2ZXIgPT0gc2VsZi5jcmVhdG9yLnZhbHVlCiAgICBzd2FwCiAgICBndHhucyBSZWNlaXZlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAtMTgxCiAgICAvLyAjIDQuIFZlcmlmeSBhc3NldCB0cmFuc2Zlci4KICAgIC8vIGFzc2VydCBhc3NldF90cmFuc2Zlci54ZmVyX2Fzc2V0LmlkID09IGFzc2V0X2lkCiAgICBkdXAKICAgIGd0eG5zIFhmZXJBc3NldAogICAgdW5jb3ZlciAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTgyCiAgICAvLyBhc3NlcnQgYXNzZXRfdHJhbnNmZXIuYXNzZXRfcmVjZWl2ZXIgPT0gc2VsbGVyX3BheW1lbnQuc2VuZGVyCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBzd2FwCiAgICBndHhucyBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfcGVuZGluZ19wYXlvdXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODYKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODcKICAgIC8vIGFzc2VydCBhc3NldF9pZCA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4OAogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIHN3YXAKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMgogICAgYnl0ZWMgNSAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg5CiAgICAvLyBhc3NlcnQgYWRkcmVzcyAhPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTEKICAgIC8vIGlmIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID09IFVJbnQ2NCgwKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgYm56IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTIKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCgpnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3BlbmRpbmdfcGF5b3V0QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBpdG9iCiAgICBieXRlYyAxNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTQKICAgIC8vIGhvbGRlcl9iYWxhbmNlLCBob2xkZXJfb3B0ZWQgPSBvcC5Bc3NldEhvbGRpbmdHZXQuYXNzZXRfYmFsYW5jZShhZGRyZXNzLCBBc3NldChhc3NldF9pZCkpCiAgICBkaWcgMQogICAgZGlnIDMKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgc3dhcAogICAgYnVyeSA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTk1CiAgICAvLyBpZiBub3QgaG9sZGVyX29wdGVkOgogICAgYm56IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTYKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTcKICAgIC8vIGlmIGhvbGRlcl9iYWxhbmNlICE9IFVJbnQ2NCgxKToKICAgIGRpZyAzCiAgICBpbnRjXzEgLy8gMQogICAgIT0KICAgIGJ6IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTgKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDAKICAgIC8vIGNsYWltZWQgPSBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyAxMyAvLyAibGNfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAxCiAgICAvLyBpZiBjbGFpbWVkIDwgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWU6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIDwKICAgIGJ6IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDIKICAgIC8vIHJldHVybiBzZWxmLnBheW91dF9wZXJfbmZ0LnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF5b3V0X3Blcl9uZnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDMKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfdGVybXM6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIxMC0yMTIKICAgIC8vICMgTXVzdCBiZSBzYWZlIHRvIGNhbGwgYmVmb3JlIG1pbnRpbmcvaW5pdGlhbGl6YXRpb24gKFVJIGNhbGxzIHRoaXMgYWZ0ZXIgZGVwbG95KS4KICAgIC8vICMgUmV0dXJuIHplcm8vZGVmYXVsdCB2YWx1ZXMgdW50aWwgaW5pdGlhbGl6ZWQuCiAgICAvLyBpZiBub3Qgc2VsZi5pbml0aWFsaXplZC52YWx1ZToKICAgIGR1cAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBibnogZ2V0X3Rlcm1zX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIxNAogICAgLy8gR2xvYmFsLnplcm9fYWRkcmVzcywKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjE1CiAgICAvLyBVSW50NjQoMCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIxNi0yMjAKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIGR1cG4gNQoKZ2V0X3Rlcm1zX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF90ZXJtc0A0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGRpZyA2CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDE0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfdGVybXNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIyMwogICAgLy8gc2VsZi5jcmVhdG9yLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMjQKICAgIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjI1CiAgICAvLyBzZWxmLnRvdGFsX3BjdF9icHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9wY3RfYnBzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIyNgogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kdXJhdGlvbl95ZWFycyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMjcKICAgIC8vIHNlbGYuc3RhcnRfcXVhcnRlci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJzdGFydF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXJ0X3F1YXJ0ZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjI4CiAgICAvLyBzZWxmLnNhbGVfcHJpY2UudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIyOQogICAgLy8gc2VsZi5maXJzdF9hc3NldF9pZC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZmlyc3RfYXNzZXRfaWQgZXhpc3RzCiAgICB1bmNvdmVyIDYKICAgIGJ1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF90ZXJtc19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNANAo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAEAAEI6AcmDwtpbml0aWFsaXplZBVsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIKdG90YWxfbmZ0cw10b3RhbF9wY3RfYnBzB2NyZWF0b3IDbWFfCnNhbGVfcHJpY2UOcGF5b3V0X3Blcl9uZnQOZHVyYXRpb25feWVhcnMNc3RhcnRfcXVhcnRlcg5maXJzdF9hc3NldF9pZA9wY3RfcGVyX25mdF9icHMUbGFzdF9yZXBvcnRlZF9pbmNvbWUDbGNfBBUffHUxGEAAKCoiZysiZycIImcnCSJnJwYiZycKImcnCyJnKSJnJwwiZycHImcoImcxG0EAQDEZFEQxGESCBwSsbhoEBN2YDm0EvY3JfgSUXxd3BPSy3u0EVzdxeAS+/BbFNhoAjgcACQE1AdQCQQKfAxQDmAAxGRQxGBQQQ4AANhoBSRUkEkQXSTYaAkkVJBJEFzYaA0kVJBJEFzYaBEkVJBJEFzYaBUkVJBJEFzEWIwlJOBAjEkQiKGVEFERLBURLBERLBIGQTg5ESwNESwJESwFESTgAMQASREk4BzIKEkQ4CIHAhD0PRCcEMQBnKk8FZytPBGcnCE8DZycJTwJnJwZMZyIrZUQiKmVECicLTGcoI2ciSUsCDEEAi7EyCkmyKrIpgDB0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn2yJ4AFRkVORlSyJYASRnV0dXJlIEVhcm5pbmcgTkZUsiYisiQisiMjsiKBA7IQJbIBs7Q8RQNJQAAFJwpLA2dLAhYnBUxQIxa/SSMIRQFC/24jQzYaAUkVJBJEFzEWgQIJSTgQgQQSRDEWIwlJOBAjEkQiKGVEREsCREsCFicFTFC+TBciTE8CTSMSREsBOAAxABJESwE4FDEAEkRLATgRSwMSREw4EhRESTgAMQASREk4BzIKEkQ4CCInBmVESwESRDIKSwJwAEQjEkSxMQAjshKyFEyyEYEEshAlsgGzsSInBGVEsgeyCCOyECWyAbMjQzYaAUkVJBJEFzYaAkkVJBJEFzEWIwlJOBAjEkQiKGVERDEAIicEZUQSRCIpZURLAwxESwFEIitlREsCC4GQTgpJREsBOAAxABJESwE4BzIKEkRMOAhLARJEKU8DZycMTwJnIiplRAonB0xnI0M2GgFJFSQSRBciKGVERElESRYnBUsBUL5MFyJMTwJNIxJEIillRElEMQBPA3AARCMSRCcNTwJQSb5MFyJMTwJNSwIMRCInB2VESUSxMQCyB7III7IQJbIBs0wWvyNDNhoBSRUkEkQXMRaBAwlJOBAjEkQxFoECCUk4ECMSRDEWIwlJOBCBBBJEIihlRERLA0RLAxYnBUxQvkwXIkxPAk0jEkRLAjgHSwE4ABJESwI4CIEKCksCOAgOREw4ByInBGVEEkRJOBFPAxJEOBRMOAASRCNDgAA2GgFJFSQSRBdJNhoCSU4CSRWBIBJEIihlRERLAURMFklOAicFTFC+TBciTE8CTSMSRDIDE0QiKWVEQAAJIhYnDkxQsCNDSwFLA3AATEUFQAAEIkL/6EsDIxNBAAQiQv/dJw1LAVC+TBciTE8CTSIpZUQMQQAIIicHZURC/8AiQv+8IkkoZURAACgyA0UBIkcFTwUWSwZMUE8FFlBPBBZQTwMWUE8CFlBMFlAnDkxQsCNDIicEZUQiKmVEIitlRCInCGVEIicJZUQiJwZlRCInCmVETwZFB0L/tw==","clear":"C4EBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":5,"minor":8,"patch":0}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data @@ -92,6 +92,12 @@ export type AlgomintArgs = { 'claim_payout(uint64)void': { assetId: bigint | number } + 'secondary_sale(uint64,pay,pay,axfer)void': { + assetId: bigint | number + sellerPayment: AppMethodCallTransactionArgument + royaltyPayment: AppMethodCallTransactionArgument + assetTransfer: AppMethodCallTransactionArgument + } 'get_pending_payout(uint64,address)uint64': { assetId: bigint | number address: string @@ -106,6 +112,7 @@ export type AlgomintArgs = { 'buy_nft(uint64,axfer,pay)void': [assetId: bigint | number, optIn: AppMethodCallTransactionArgument, payment: AppMethodCallTransactionArgument] 'report_income(uint64,uint64,pay)void': [quarter: bigint | number, incomeAmount: bigint | number, payoutFunding: AppMethodCallTransactionArgument] 'claim_payout(uint64)void': [assetId: bigint | number] + 'secondary_sale(uint64,pay,pay,axfer)void': [assetId: bigint | number, sellerPayment: AppMethodCallTransactionArgument, royaltyPayment: AppMethodCallTransactionArgument, assetTransfer: AppMethodCallTransactionArgument] 'get_pending_payout(uint64,address)uint64': [assetId: bigint | number, address: string] 'get_terms()(address,uint64,uint64,uint64,uint64,uint64,uint64)': [] } @@ -119,6 +126,7 @@ export type AlgomintReturns = { 'buy_nft(uint64,axfer,pay)void': void 'report_income(uint64,uint64,pay)void': void 'claim_payout(uint64)void': void + 'secondary_sale(uint64,pay,pay,axfer)void': void 'get_pending_payout(uint64,address)uint64': bigint 'get_terms()(address,uint64,uint64,uint64,uint64,uint64,uint64)': [string, bigint, bigint, bigint, bigint, bigint, bigint] } @@ -151,6 +159,11 @@ export type AlgomintTypes = { argsTuple: AlgomintArgs['tuple']['claim_payout(uint64)void'] returns: AlgomintReturns['claim_payout(uint64)void'] }> + & Record<'secondary_sale(uint64,pay,pay,axfer)void' | 'secondary_sale', { + argsObj: AlgomintArgs['obj']['secondary_sale(uint64,pay,pay,axfer)void'] + argsTuple: AlgomintArgs['tuple']['secondary_sale(uint64,pay,pay,axfer)void'] + returns: AlgomintReturns['secondary_sale(uint64,pay,pay,axfer)void'] + }> & Record<'get_pending_payout(uint64,address)uint64' | 'get_pending_payout', { argsObj: AlgomintArgs['obj']['get_pending_payout(uint64,address)uint64'] argsTuple: AlgomintArgs['tuple']['get_pending_payout(uint64,address)uint64'] @@ -302,6 +315,19 @@ export abstract class AlgomintParamsFactory { args: Array.isArray(params.args) ? params.args : [params.args.assetId], } } + /** + * Constructs a no op call for the secondary_sale(uint64,pay,pay,axfer)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static secondarySale(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'secondary_sale(uint64,pay,pay,axfer)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assetId, params.args.sellerPayment, params.args.royaltyPayment, params.args.assetTransfer], + } + } /** * Constructs a no op call for the get_pending_payout(uint64,address)uint64 ABI method * @@ -610,6 +636,16 @@ export class AlgomintClient { return this.appClient.params.call(AlgomintParamsFactory.claimPayout(params)) }, + /** + * Makes a call to the Algomint smart contract using the `secondary_sale(uint64,pay,pay,axfer)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + secondarySale: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AlgomintParamsFactory.secondarySale(params)) + }, + /** * Makes a call to the Algomint smart contract using the `get_pending_payout(uint64,address)uint64` ABI method. * @@ -692,6 +728,16 @@ export class AlgomintClient { return this.appClient.createTransaction.call(AlgomintParamsFactory.claimPayout(params)) }, + /** + * Makes a call to the Algomint smart contract using the `secondary_sale(uint64,pay,pay,axfer)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + secondarySale: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AlgomintParamsFactory.secondarySale(params)) + }, + /** * Makes a call to the Algomint smart contract using the `get_pending_payout(uint64,address)uint64` ABI method. * @@ -778,6 +824,17 @@ export class AlgomintClient { return {...result, return: result.return as unknown as (undefined | AlgomintReturns['claim_payout(uint64)void'])} }, + /** + * Makes a call to the Algomint smart contract using the `secondary_sale(uint64,pay,pay,axfer)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + secondarySale: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AlgomintParamsFactory.secondarySale(params)) + return {...result, return: result.return as unknown as (undefined | AlgomintReturns['secondary_sale(uint64,pay,pay,axfer)void'])} + }, + /** * Makes a call to the Algomint smart contract using the `get_pending_payout(uint64,address)uint64` ABI method. * @@ -1002,6 +1059,14 @@ export class AlgomintClient { resultMappers.push(undefined) return this }, + /** + * Add a secondary_sale(uint64,pay,pay,axfer)void method call against the Algomint contract + */ + secondarySale(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.secondarySale(params))) + resultMappers.push(undefined) + return this + }, /** * Add a get_pending_payout(uint64,address)uint64 method call against the Algomint contract */ @@ -1089,6 +1154,15 @@ export type AlgomintComposer = { */ claimPayout(params?: CallParams): AlgomintComposer<[...TReturns, AlgomintReturns['claim_payout(uint64)void'] | undefined]> + /** + * Calls the secondary_sale(uint64,pay,pay,axfer)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + secondarySale(params?: CallParams): AlgomintComposer<[...TReturns, AlgomintReturns['secondary_sale(uint64,pay,pay,axfer)void'] | undefined]> + /** * Calls the get_pending_payout(uint64,address)uint64 ABI method. * diff --git a/projects/hackalgo-frontend/src/hooks/useAlgoMint.ts b/projects/hackalgo-frontend/src/hooks/useAlgoMint.ts index 1447fa7..8df5d29 100644 --- a/projects/hackalgo-frontend/src/hooks/useAlgoMint.ts +++ b/projects/hackalgo-frontend/src/hooks/useAlgoMint.ts @@ -314,6 +314,59 @@ export function useAlgoMint() { [algorand.client.algod, fetchTerms, getClient, refreshTerms, termsValue], ) + const secondary_sale = useCallback( + async (args: { asset_id: number; seller: string; price_micro_algo: number }) => { + const signer = signerRef.current + const sender = activeAddressRef.current + if (!signer || !sender) throw new Error('Wallet not connected') + if (!creatorAddressValue) throw new Error('Creator address unavailable') + + const client = await getClient() + const sp = await algorand.client.algod.getTransactionParams().do() + + // 1. Payment to seller. + const sellerPay = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender, + receiver: args.seller, + amount: args.price_micro_algo, + suggestedParams: sp, + }) + + // 2. Royalty to creator (10%). + const royaltyPay = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender, + receiver: creatorAddressValue, + amount: Math.floor(args.price_micro_algo * 0.1), + suggestedParams: sp, + }) + + // 3. Asset transfer (seller to buyer). + // Note: in production, seller must sign this transfer or the app must custody the NFT. + const assetXfer = algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({ + sender: args.seller, + receiver: sender, + assetIndex: args.asset_id, + amount: 1, + suggestedParams: sp, + }) + + await client + .newGroup() + .secondarySale({ + args: { + assetId: args.asset_id, + sellerPayment: sellerPay, + royaltyPayment: royaltyPay, + assetTransfer: assetXfer, + }, + sender, + signer, + }) + .send() + }, + [algorand.client.algod, getClient, creatorAddressValue], + ) + const get_pending_payout = useCallback( async (args: { asset_id: number; address: string }) => { if (!state.appId) return 0 @@ -407,12 +460,24 @@ export function useAlgoMint() { listNfts, mint_future_nft, buy_nft, + secondary_sale, get_pending_payout, claim_payout, report_income, resetMock, }), - [creatorAddressValue, listNfts, mint_future_nft, buy_nft, get_pending_payout, claim_payout, report_income, resetMock, termsValue], + [ + creatorAddressValue, + listNfts, + mint_future_nft, + buy_nft, + secondary_sale, + get_pending_payout, + claim_payout, + report_income, + resetMock, + termsValue, + ], ) return api diff --git a/projects/hackalgo-frontend/src/pages/TradePage.tsx b/projects/hackalgo-frontend/src/pages/TradePage.tsx index 621b431..b9d89cf 100644 --- a/projects/hackalgo-frontend/src/pages/TradePage.tsx +++ b/projects/hackalgo-frontend/src/pages/TradePage.tsx @@ -8,6 +8,7 @@ export default function TradePage(props: { onEvent?: (type: ActivityEvent['type' const { activeAddress } = useWallet() const { enqueueSnackbar } = useSnackbar() const algoMint = useAlgoMint() + const SECONDARY_PRICE_MICRO_ALGO = 15_000_000 const [marketItems, setMarketItems] = useState([]) const [loading, setLoading] = useState(true) @@ -52,13 +53,20 @@ export default function TradePage(props: { onEvent?: (type: ActivityEvent['type' className="btn btn-xs btn-accent mt-1" onClick={async () => { try { - // In a real app, this would call a secondary_sale method enqueueSnackbar('Initiating Atomic Swap with Royalties...', { variant: 'info' }) - // Mocking the trade logic for the demo - setTimeout(() => { - enqueueSnackbar('Trade Successful: Creator received 1.5 ALGO', { variant: 'success' }) - props.onEvent?.('BUY', `Secondary sale completed for NFT #${item.assetId}`) - }, 2000) + if (!item.owner || item.owner === 'unknown') { + throw new Error('Seller address unavailable for this listing') + } + + await algoMint.secondary_sale({ + asset_id: item.assetId, + seller: item.owner, + price_micro_algo: SECONDARY_PRICE_MICRO_ALGO, + }) + + enqueueSnackbar('Trade successful. Royalty sent to creator.', { variant: 'success' }) + props.onEvent?.('BUY', `Secondary sale completed for NFT #${item.assetId}`) + await refreshMarket() } catch (e) { enqueueSnackbar('Trade failed', { variant: 'error' }) }