diff --git a/examples/amm/amm.algo.ts b/examples/amm/amm.algo.ts index 9d2bfa031..287738f53 100644 --- a/examples/amm/amm.algo.ts +++ b/examples/amm/amm.algo.ts @@ -23,22 +23,26 @@ class ConstantProductAMM extends Contract { private doCreatePoolToken(aAsset: AssetID, bAsset: AssetID): AssetID { // Unit name asserts not needed since it's done automatically by AssetID.unitName - return sendAssetCreation({ - configAssetName: 'DPT-' + aAsset.unitName + '-' + bAsset.unitName, - configAssetUnitName: 'dpt', - configAssetTotal: TOTAL_SUPPLY, - configAssetDecimals: 3, - configAssetManager: this.app.address, - configAssetReserve: this.app.address, - }); + return this.txnComposer.send( + new AssetCreateTxn({ + configAssetName: 'DPT-' + aAsset.unitName + '-' + bAsset.unitName, + configAssetUnitName: 'dpt', + configAssetTotal: TOTAL_SUPPLY, + configAssetDecimals: 3, + configAssetManager: this.app.address, + configAssetReserve: this.app.address, + }) + ); } private doAxfer(receiver: Address, asset: AssetID, amount: uint64): void { - sendAssetTransfer({ - assetReceiver: receiver, - xferAsset: asset, - assetAmount: amount, - }); + this.txnComposer.send( + new AssetTransferTxn({ + assetReceiver: receiver, + xferAsset: asset, + assetAmount: amount, + }) + ); } private doOptIn(asset: AssetID): void { diff --git a/examples/amm/tealscript_artifacts/ConstantProductAMM.approval.teal b/examples/amm/tealscript_artifacts/ConstantProductAMM.approval.teal index 45afb84e4..ba0d5469f 100644 --- a/examples/amm/tealscript_artifacts/ConstantProductAMM.approval.teal +++ b/examples/amm/tealscript_artifacts/ConstantProductAMM.approval.teal @@ -45,19 +45,21 @@ doCreatePoolToken: proto 2 1 // examples/amm/amm.algo.ts:26 - // return sendAssetCreation({ - // configAssetName: 'DPT-' + aAsset.unitName + '-' + bAsset.unitName, - // configAssetUnitName: 'dpt', - // configAssetTotal: TOTAL_SUPPLY, - // configAssetDecimals: 3, - // configAssetManager: this.app.address, - // configAssetReserve: this.app.address, - // }); + // return this.txnComposer.send( + // new AssetCreateTxn({ + // configAssetName: 'DPT-' + aAsset.unitName + '-' + bAsset.unitName, + // configAssetUnitName: 'dpt', + // configAssetTotal: TOTAL_SUPPLY, + // configAssetDecimals: 3, + // configAssetManager: this.app.address, + // configAssetReserve: this.app.address, + // }) + // ); itxn_begin int acfg itxn_field TypeEnum - // examples/amm/amm.algo.ts:27 + // examples/amm/amm.algo.ts:28 // configAssetName: 'DPT-' + aAsset.unitName + '-' + bAsset.unitName byte 0x4450542d // "DPT-" frame_dig -1 // aAsset: AssetID @@ -72,27 +74,27 @@ doCreatePoolToken: concat itxn_field ConfigAssetName - // examples/amm/amm.algo.ts:28 + // examples/amm/amm.algo.ts:29 // configAssetUnitName: 'dpt' byte 0x647074 // "dpt" itxn_field ConfigAssetUnitName - // examples/amm/amm.algo.ts:29 + // examples/amm/amm.algo.ts:30 // configAssetTotal: TOTAL_SUPPLY int 10000000000 itxn_field ConfigAssetTotal - // examples/amm/amm.algo.ts:30 + // examples/amm/amm.algo.ts:31 // configAssetDecimals: 3 int 3 itxn_field ConfigAssetDecimals - // examples/amm/amm.algo.ts:31 + // examples/amm/amm.algo.ts:32 // configAssetManager: this.app.address global CurrentApplicationAddress itxn_field ConfigAssetManager - // examples/amm/amm.algo.ts:32 + // examples/amm/amm.algo.ts:33 // configAssetReserve: this.app.address global CurrentApplicationAddress itxn_field ConfigAssetReserve @@ -110,27 +112,29 @@ doCreatePoolToken: doAxfer: proto 3 0 - // examples/amm/amm.algo.ts:37 - // sendAssetTransfer({ - // assetReceiver: receiver, - // xferAsset: asset, - // assetAmount: amount, - // }) + // examples/amm/amm.algo.ts:39 + // this.txnComposer.send( + // new AssetTransferTxn({ + // assetReceiver: receiver, + // xferAsset: asset, + // assetAmount: amount, + // }) + // ) itxn_begin int axfer itxn_field TypeEnum - // examples/amm/amm.algo.ts:38 + // examples/amm/amm.algo.ts:41 // assetReceiver: receiver frame_dig -1 // receiver: Address itxn_field AssetReceiver - // examples/amm/amm.algo.ts:39 + // examples/amm/amm.algo.ts:42 // xferAsset: asset frame_dig -2 // asset: AssetID itxn_field XferAsset - // examples/amm/amm.algo.ts:40 + // examples/amm/amm.algo.ts:43 // assetAmount: amount frame_dig -3 // amount: uint64 itxn_field AssetAmount @@ -147,7 +151,7 @@ doAxfer: doOptIn: proto 1 0 - // examples/amm/amm.algo.ts:45 + // examples/amm/amm.algo.ts:49 // this.doAxfer(this.app.address, asset, 0) int 0 frame_dig -1 // asset: AssetID @@ -159,7 +163,7 @@ doOptIn: tokensToMintIntial: proto 2 1 - // examples/amm/amm.algo.ts:49 + // examples/amm/amm.algo.ts:53 // return sqrt(aAmount * bAmount); frame_dig -1 // aAmount: uint64 frame_dig -2 // bAmount: uint64 @@ -175,7 +179,7 @@ tokensToMint: byte 0x dupn 2 - // examples/amm/amm.algo.ts:53 + // examples/amm/amm.algo.ts:57 // aRatio = wideRatio([aAmount, SCALE], [aSupply]) frame_dig -4 // aAmount: uint64 int 1000 @@ -192,7 +196,7 @@ tokensToMint: assert frame_bury 0 // aRatio: uint64 - // examples/amm/amm.algo.ts:54 + // examples/amm/amm.algo.ts:58 // bRatio = wideRatio([bAmount, SCALE], [bSupply]) frame_dig -5 // bAmount: uint64 int 1000 @@ -209,7 +213,7 @@ tokensToMint: assert frame_bury 1 // bRatio: uint64 - // examples/amm/amm.algo.ts:56 + // examples/amm/amm.algo.ts:60 // ratio = aRatio < bRatio ? aRatio : bRatio frame_dig 0 // aRatio: uint64 frame_dig 1 // bRatio: uint64 @@ -224,7 +228,7 @@ tokensToMint: *ternary1_end: frame_bury 2 // ratio: uint64 - // examples/amm/amm.algo.ts:58 + // examples/amm/amm.algo.ts:62 // return wideRatio([ratio, issued], [SCALE]); frame_dig 2 // ratio: uint64 frame_dig -1 // issued: uint64 @@ -251,7 +255,7 @@ tokensToMint: computeRatio: proto 0 1 - // examples/amm/amm.algo.ts:62 + // examples/amm/amm.algo.ts:66 // return wideRatio( // [this.app.address.assetBalance(this.assetA.value), SCALE], // [this.app.address.assetBalance(this.assetB.value)] @@ -283,7 +287,7 @@ computeRatio: tokensToBurn: proto 3 1 - // examples/amm/amm.algo.ts:69 + // examples/amm/amm.algo.ts:73 // return wideRatio([supply, amount], [issued]); frame_dig -2 // supply: uint64 frame_dig -3 // amount: uint64 @@ -307,12 +311,12 @@ tokensToSwap: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // examples/amm/amm.algo.ts:73 + // examples/amm/amm.algo.ts:77 // factor = SCALE - FEE int 995 frame_bury 0 // factor: uint64 - // examples/amm/amm.algo.ts:74 + // examples/amm/amm.algo.ts:78 // return wideRatio([inAmount, factor, outSupply], [inSupply * SCALE + inAmount * factor]); frame_dig -1 // inAmount: uint64 frame_dig 0 // factor: uint64 @@ -368,7 +372,7 @@ tokensToSwap: set_governor: proto 1 0 - // examples/amm/amm.algo.ts:78 + // examples/amm/amm.algo.ts:82 // verifyAppCallTxn(this.txn, { sender: this.governor.value }) // verify sender txn Sender @@ -379,7 +383,7 @@ set_governor: // transaction verification failed: {"txn":"this.txn","field":"sender","expected":"this.governor.value"} assert - // examples/amm/amm.algo.ts:79 + // examples/amm/amm.algo.ts:83 // this.governor.value = governor byte 0x67 // "g" frame_dig -1 // governor: Address @@ -423,7 +427,7 @@ set_governor: bootstrap: proto 3 1 - // examples/amm/amm.algo.ts:83 + // examples/amm/amm.algo.ts:87 // verifyAppCallTxn(this.txn, { sender: this.governor.value }) // verify sender txn Sender @@ -434,14 +438,14 @@ bootstrap: // transaction verification failed: {"txn":"this.txn","field":"sender","expected":"this.governor.value"} assert - // examples/amm/amm.algo.ts:85 + // examples/amm/amm.algo.ts:89 // assert(globals.groupSize === 2) global GroupSize int 2 == assert - // examples/amm/amm.algo.ts:87 + // examples/amm/amm.algo.ts:91 // verifyPayTxn(seed, { receiver: this.app.address, amount: { greaterThanEqualTo: 300_000 } }) // verify receiver frame_dig -1 // seed: PayTxn @@ -461,26 +465,26 @@ bootstrap: // transaction verification failed: {"txn":"seed","field":"amount","condition":"greaterThanEqualTo","expected":">=300_000"} assert - // examples/amm/amm.algo.ts:88 + // examples/amm/amm.algo.ts:92 // assert(aAsset < bAsset) frame_dig -2 // aAsset: AssetID frame_dig -3 // bAsset: AssetID < assert - // examples/amm/amm.algo.ts:90 + // examples/amm/amm.algo.ts:94 // this.assetA.value = aAsset byte 0x61 // "a" frame_dig -2 // aAsset: AssetID app_global_put - // examples/amm/amm.algo.ts:91 + // examples/amm/amm.algo.ts:95 // this.assetB.value = bAsset byte 0x62 // "b" frame_dig -3 // bAsset: AssetID app_global_put - // examples/amm/amm.algo.ts:92 + // examples/amm/amm.algo.ts:96 // this.poolToken.value = this.doCreatePoolToken(aAsset, bAsset) byte 0x70 // "p" frame_dig -3 // bAsset: AssetID @@ -488,17 +492,17 @@ bootstrap: callsub doCreatePoolToken app_global_put - // examples/amm/amm.algo.ts:94 + // examples/amm/amm.algo.ts:98 // this.doOptIn(aAsset) frame_dig -2 // aAsset: AssetID callsub doOptIn - // examples/amm/amm.algo.ts:95 + // examples/amm/amm.algo.ts:99 // this.doOptIn(bAsset) frame_dig -3 // bAsset: AssetID callsub doOptIn - // examples/amm/amm.algo.ts:97 + // examples/amm/amm.algo.ts:101 // return this.poolToken.value; byte 0x70 // "p" app_global_get @@ -555,7 +559,7 @@ mint: byte 0x // well formed mint - // examples/amm/amm.algo.ts:102 + // examples/amm/amm.algo.ts:106 // assert(aAsset === this.assetA.value) frame_dig -4 // aAsset: AssetID byte 0x61 // "a" @@ -563,7 +567,7 @@ mint: == assert - // examples/amm/amm.algo.ts:103 + // examples/amm/amm.algo.ts:107 // assert(bAsset === this.assetB.value) frame_dig -5 // bAsset: AssetID byte 0x62 // "b" @@ -571,7 +575,7 @@ mint: == assert - // examples/amm/amm.algo.ts:104 + // examples/amm/amm.algo.ts:108 // assert(poolAsset === this.poolToken.value) frame_dig -3 // poolAsset: AssetID byte 0x70 // "p" @@ -580,7 +584,7 @@ mint: assert // valid asset A axfer - // examples/amm/amm.algo.ts:107 + // examples/amm/amm.algo.ts:111 // verifyAssetTransferTxn(aXfer, { // sender: this.txn.sender, // assetAmount: { greaterThan: 0 }, @@ -624,7 +628,7 @@ mint: assert // valid asset B axfer - // examples/amm/amm.algo.ts:115 + // examples/amm/amm.algo.ts:119 // verifyAssetTransferTxn(bXfer, { // sender: this.txn.sender, // assetAmount: { greaterThan: 0 }, @@ -668,7 +672,7 @@ mint: assert // *if0_condition - // examples/amm/amm.algo.ts:123 + // examples/amm/amm.algo.ts:127 // this.app.address.assetBalance(aAsset) === aXfer.assetAmount && // this.app.address.assetBalance(bAsset) === bXfer.assetAmount global CurrentApplicationAddress @@ -693,7 +697,7 @@ mint: bz *if0_else // *if0_consequent - // examples/amm/amm.algo.ts:126 + // examples/amm/amm.algo.ts:130 // this.tokensToMintIntial(aXfer.assetAmount, bXfer.assetAmount) frame_dig -2 // bXfer: AssetTransferTxn gtxns AssetAmount @@ -703,7 +707,7 @@ mint: b *if0_end *if0_else: - // examples/amm/amm.algo.ts:128 + // examples/amm/amm.algo.ts:132 // toMint = this.tokensToMint( // TOTAL_SUPPLY - this.app.address.assetBalance(poolAsset), // this.app.address.assetBalance(aAsset) - aXfer.assetAmount, @@ -738,14 +742,14 @@ mint: callsub tokensToMint frame_bury 0 // toMint: uint64 - // examples/amm/amm.algo.ts:136 + // examples/amm/amm.algo.ts:140 // assert(toMint > 0) frame_dig 0 // toMint: uint64 int 0 > assert - // examples/amm/amm.algo.ts:138 + // examples/amm/amm.algo.ts:142 // this.doAxfer(this.txn.sender, poolAsset, toMint) frame_dig 0 // toMint: uint64 frame_dig -3 // poolAsset: AssetID @@ -795,7 +799,7 @@ burn: dupn 2 // well formed burn - // examples/amm/amm.algo.ts:144 + // examples/amm/amm.algo.ts:148 // assert(poolAsset === this.poolToken.value) frame_dig -2 // poolAsset: AssetID byte 0x70 // "p" @@ -803,7 +807,7 @@ burn: == assert - // examples/amm/amm.algo.ts:145 + // examples/amm/amm.algo.ts:149 // assert(aAsset === this.assetA.value) frame_dig -3 // aAsset: AssetID byte 0x61 // "a" @@ -811,7 +815,7 @@ burn: == assert - // examples/amm/amm.algo.ts:146 + // examples/amm/amm.algo.ts:150 // assert(bAsset === this.assetB.value) frame_dig -4 // bAsset: AssetID byte 0x62 // "b" @@ -820,7 +824,7 @@ burn: assert // valid pool axfer - // examples/amm/amm.algo.ts:149 + // examples/amm/amm.algo.ts:153 // verifyAssetTransferTxn(poolXfer, { // sender: this.txn.sender, // assetAmount: { greaterThan: 0 }, @@ -863,7 +867,7 @@ burn: // transaction verification failed: {"txn":"poolXfer","field":"xferAsset","expected":"poolAsset"} assert - // examples/amm/amm.algo.ts:156 + // examples/amm/amm.algo.ts:160 // issued = TOTAL_SUPPLY - (this.app.address.assetBalance(poolAsset) - poolXfer.assetAmount) int 10000000000 global CurrentApplicationAddress @@ -876,7 +880,7 @@ burn: - frame_bury 0 // issued: uint64 - // examples/amm/amm.algo.ts:158 + // examples/amm/amm.algo.ts:162 // aAmt = this.tokensToBurn(issued, this.app.address.assetBalance(aAsset), poolXfer.assetAmount) frame_dig -1 // poolXfer: AssetTransferTxn gtxns AssetAmount @@ -888,7 +892,7 @@ burn: callsub tokensToBurn frame_bury 1 // aAmt: uint64 - // examples/amm/amm.algo.ts:160 + // examples/amm/amm.algo.ts:164 // bAmt = this.tokensToBurn(issued, this.app.address.assetBalance(bAsset), poolXfer.assetAmount) frame_dig -1 // poolXfer: AssetTransferTxn gtxns AssetAmount @@ -900,21 +904,21 @@ burn: callsub tokensToBurn frame_bury 2 // bAmt: uint64 - // examples/amm/amm.algo.ts:162 + // examples/amm/amm.algo.ts:166 // this.doAxfer(this.txn.sender, aAsset, aAmt) frame_dig 1 // aAmt: uint64 frame_dig -3 // aAsset: AssetID txn Sender callsub doAxfer - // examples/amm/amm.algo.ts:163 + // examples/amm/amm.algo.ts:167 // this.doAxfer(this.txn.sender, bAsset, bAmt) frame_dig 2 // bAmt: uint64 frame_dig -4 // bAsset: AssetID txn Sender callsub doAxfer - // examples/amm/amm.algo.ts:165 + // examples/amm/amm.algo.ts:169 // this.ratio.value = this.computeRatio() byte 0x72 // "r" callsub computeRatio @@ -957,7 +961,7 @@ swap: dupn 2 // well formed swap - // examples/amm/amm.algo.ts:170 + // examples/amm/amm.algo.ts:174 // assert(aAsset === this.assetA.value) frame_dig -2 // aAsset: AssetID byte 0x61 // "a" @@ -965,7 +969,7 @@ swap: == assert - // examples/amm/amm.algo.ts:171 + // examples/amm/amm.algo.ts:175 // assert(bAsset === this.assetB.value) frame_dig -3 // bAsset: AssetID byte 0x62 // "b" @@ -973,7 +977,7 @@ swap: == assert - // examples/amm/amm.algo.ts:173 + // examples/amm/amm.algo.ts:177 // verifyAssetTransferTxn(swapXfer, { // assetAmount: { greaterThan: 0 }, // assetReceiver: this.app.address, @@ -1021,7 +1025,7 @@ swap: // transaction verification failed: {"txn":{"txnText":"swapXfer"},"field":"xferAsset","condition":"includedIn","expected":"[aAsset, bAsset]"} assert - // examples/amm/amm.algo.ts:180 + // examples/amm/amm.algo.ts:184 // outId = swapXfer.xferAsset === aAsset ? aAsset : bAsset frame_dig -1 // swapXfer: AssetTransferTxn gtxns XferAsset @@ -1037,13 +1041,13 @@ swap: *ternary3_end: frame_bury 0 // outId: uint64 - // examples/amm/amm.algo.ts:182 + // examples/amm/amm.algo.ts:186 // inId = swapXfer.xferAsset frame_dig -1 // swapXfer: AssetTransferTxn gtxns XferAsset frame_bury 1 // inId: uint64 - // examples/amm/amm.algo.ts:184 + // examples/amm/amm.algo.ts:188 // toSwap = this.tokensToSwap( // swapXfer.assetAmount, // this.app.address.assetBalance(inId) - swapXfer.assetAmount, @@ -1065,21 +1069,21 @@ swap: callsub tokensToSwap frame_bury 2 // toSwap: uint64 - // examples/amm/amm.algo.ts:190 + // examples/amm/amm.algo.ts:194 // assert(toSwap > 0) frame_dig 2 // toSwap: uint64 int 0 > assert - // examples/amm/amm.algo.ts:192 + // examples/amm/amm.algo.ts:196 // this.doAxfer(this.txn.sender, outId, toSwap) frame_dig 2 // toSwap: uint64 frame_dig 0 // outId: uint64 txn Sender callsub doAxfer - // examples/amm/amm.algo.ts:194 + // examples/amm/amm.algo.ts:198 // this.ratio.value = this.computeRatio() byte 0x72 // "r" callsub computeRatio diff --git a/examples/amm/tealscript_artifacts/ConstantProductAMM.arc32.json b/examples/amm/tealscript_artifacts/ConstantProductAMM.arc32.json index 9ef57a84a..a3be5eba8 100644 --- a/examples/amm/tealscript_artifacts/ConstantProductAMM.arc32.json +++ b/examples/amm/tealscript_artifacts/ConstantProductAMM.arc32.json @@ -80,7 +80,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIGNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIGNyZWF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpOiB2b2lkCmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwCgkvLyB0aGlzLmdvdmVybm9yLnZhbHVlID0gdGhpcy50eG4uc2VuZGVyCglieXRlIDB4NjcgLy8gImciCgl0eG4gU2VuZGVyCglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgovLyBkb0NyZWF0ZVBvb2xUb2tlbihhQXNzZXQ6IEFzc2V0SUQsIGJBc3NldDogQXNzZXRJRCk6IEFzc2V0SUQKZG9DcmVhdGVQb29sVG9rZW46Cglwcm90byAyIDEKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MjYKCS8vIHJldHVybiBzZW5kQXNzZXRDcmVhdGlvbih7CgkvLyAgICAgICBjb25maWdBc3NldE5hbWU6ICdEUFQtJyArIGFBc3NldC51bml0TmFtZSArICctJyArIGJBc3NldC51bml0TmFtZSwKCS8vICAgICAgIGNvbmZpZ0Fzc2V0VW5pdE5hbWU6ICdkcHQnLAoJLy8gICAgICAgY29uZmlnQXNzZXRUb3RhbDogVE9UQUxfU1VQUExZLAoJLy8gICAgICAgY29uZmlnQXNzZXREZWNpbWFsczogMywKCS8vICAgICAgIGNvbmZpZ0Fzc2V0TWFuYWdlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGNvbmZpZ0Fzc2V0UmVzZXJ2ZTogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KTsKCWl0eG5fYmVnaW4KCWludCBhY2ZnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjI3CgkvLyBjb25maWdBc3NldE5hbWU6ICdEUFQtJyArIGFBc3NldC51bml0TmFtZSArICctJyArIGJBc3NldC51bml0TmFtZQoJYnl0ZSAweDQ0NTA1NDJkIC8vICJEUFQtIgoJZnJhbWVfZGlnIC0xIC8vIGFBc3NldDogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCglwb3AKCWNvbmNhdAoJYnl0ZSAweDJkIC8vICItIgoJY29uY2F0CglmcmFtZV9kaWcgLTIgLy8gYkFzc2V0OiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKCXBvcAoJY29uY2F0CglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoyOAoJLy8gY29uZmlnQXNzZXRVbml0TmFtZTogJ2RwdCcKCWJ5dGUgMHg2NDcwNzQgLy8gImRwdCIKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoyOQoJLy8gY29uZmlnQXNzZXRUb3RhbDogVE9UQUxfU1VQUExZCglpbnQgMTAwMDAwMDAwMDAKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czozMAoJLy8gY29uZmlnQXNzZXREZWNpbWFsczogMwoJaW50IDMKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czozMQoJLy8gY29uZmlnQXNzZXRNYW5hZ2VyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MzIKCS8vIGNvbmZpZ0Fzc2V0UmVzZXJ2ZTogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBDcmVhdGVkQXNzZXRJRAoJcmV0c3ViCgovLyBkb0F4ZmVyKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCwgYW1vdW50OiB1aW50NjQpOiB2b2lkCmRvQXhmZXI6Cglwcm90byAzIDAKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MzcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc3NldCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czozOAoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjM5CgkvLyB4ZmVyQXNzZXQ6IGFzc2V0CglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjQwCgkvLyBhc3NldEFtb3VudDogYW1vdW50CglmcmFtZV9kaWcgLTMgLy8gYW1vdW50OiB1aW50NjQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGRvT3B0SW4oYXNzZXQ6IEFzc2V0SUQpOiB2b2lkCmRvT3B0SW46Cglwcm90byAxIDAKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NDUKCS8vIHRoaXMuZG9BeGZlcih0aGlzLmFwcC5hZGRyZXNzLCBhc3NldCwgMCkKCWludCAwCglmcmFtZV9kaWcgLTEgLy8gYXNzZXQ6IEFzc2V0SUQKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgljYWxsc3ViIGRvQXhmZXIKCXJldHN1YgoKLy8gdG9rZW5zVG9NaW50SW50aWFsKGFBbW91bnQ6IHVpbnQ2NCwgYkFtb3VudDogdWludDY0KTogdWludDY0CnRva2Vuc1RvTWludEludGlhbDoKCXByb3RvIDIgMQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo0OQoJLy8gcmV0dXJuIHNxcnQoYUFtb3VudCAqIGJBbW91bnQpOwoJZnJhbWVfZGlnIC0xIC8vIGFBbW91bnQ6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGJBbW91bnQ6IHVpbnQ2NAoJKgoJc3FydAoJcmV0c3ViCgovLyB0b2tlbnNUb01pbnQoaXNzdWVkOiB1aW50NjQsIGFTdXBwbHk6IHVpbnQ2NCwgYlN1cHBseTogdWludDY0LCBhQW1vdW50OiB1aW50NjQsIGJBbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NAp0b2tlbnNUb01pbnQ6Cglwcm90byA1IDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjUzCgkvLyBhUmF0aW8gPSB3aWRlUmF0aW8oW2FBbW91bnQsIFNDQUxFXSwgW2FTdXBwbHldKQoJZnJhbWVfZGlnIC00IC8vIGFBbW91bnQ6IHVpbnQ2NAoJaW50IDEwMDAKCW11bHcKCWludCAwCglmcmFtZV9kaWcgLTIgLy8gYVN1cHBseTogdWludDY0CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGFSYXRpbzogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjU0CgkvLyBiUmF0aW8gPSB3aWRlUmF0aW8oW2JBbW91bnQsIFNDQUxFXSwgW2JTdXBwbHldKQoJZnJhbWVfZGlnIC01IC8vIGJBbW91bnQ6IHVpbnQ2NAoJaW50IDEwMDAKCW11bHcKCWludCAwCglmcmFtZV9kaWcgLTMgLy8gYlN1cHBseTogdWludDY0CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAxIC8vIGJSYXRpbzogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjU2CgkvLyByYXRpbyA9IGFSYXRpbyA8IGJSYXRpbyA/IGFSYXRpbyA6IGJSYXRpbwoJZnJhbWVfZGlnIDAgLy8gYVJhdGlvOiB1aW50NjQKCWZyYW1lX2RpZyAxIC8vIGJSYXRpbzogdWludDY0Cgk8CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyAwIC8vIGFSYXRpbzogdWludDY0CgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWZyYW1lX2RpZyAxIC8vIGJSYXRpbzogdWludDY0CgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSAyIC8vIHJhdGlvOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NTgKCS8vIHJldHVybiB3aWRlUmF0aW8oW3JhdGlvLCBpc3N1ZWRdLCBbU0NBTEVdKTsKCWZyYW1lX2RpZyAyIC8vIHJhdGlvOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBpc3N1ZWQ6IHVpbnQ2NAoJbXVsdwoJaW50IDAKCWludCAxMDAwCglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gY29tcHV0ZVJhdGlvKCk6IHVpbnQ2NApjb21wdXRlUmF0aW86Cglwcm90byAwIDEKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NjIKCS8vIHJldHVybiB3aWRlUmF0aW8oCgkvLyAgICAgICBbdGhpcy5hcHAuYWRkcmVzcy5hc3NldEJhbGFuY2UodGhpcy5hc3NldEEudmFsdWUpLCBTQ0FMRV0sCgkvLyAgICAgICBbdGhpcy5hcHAuYWRkcmVzcy5hc3NldEJhbGFuY2UodGhpcy5hc3NldEIudmFsdWUpXQoJLy8gICAgICk7CglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYnl0ZSAweDYxIC8vICJhIgoJYXBwX2dsb2JhbF9nZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpbnQgMTAwMAoJbXVsdwoJaW50IDAKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglieXRlIDB4NjIgLy8gImIiCglhcHBfZ2xvYmFsX2dldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CglyZXRzdWIKCi8vIHRva2Vuc1RvQnVybihpc3N1ZWQ6IHVpbnQ2NCwgc3VwcGx5OiB1aW50NjQsIGFtb3VudDogdWludDY0KTogdWludDY0CnRva2Vuc1RvQnVybjoKCXByb3RvIDMgMQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo2OQoJLy8gcmV0dXJuIHdpZGVSYXRpbyhbc3VwcGx5LCBhbW91bnRdLCBbaXNzdWVkXSk7CglmcmFtZV9kaWcgLTIgLy8gc3VwcGx5OiB1aW50NjQKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnQ6IHVpbnQ2NAoJbXVsdwoJaW50IDAKCWZyYW1lX2RpZyAtMSAvLyBpc3N1ZWQ6IHVpbnQ2NAoJZGl2bW9kdwoJcG9wCglwb3AKCXN3YXAKCSEKCgkvLyB3aWRlUmF0aW8gZmFpbGVkCglhc3NlcnQKCXJldHN1YgoKLy8gdG9rZW5zVG9Td2FwKGluQW1vdW50OiB1aW50NjQsIGluU3VwcGx5OiB1aW50NjQsIG91dFN1cHBseTogdWludDY0KTogdWludDY0CnRva2Vuc1RvU3dhcDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjczCgkvLyBmYWN0b3IgPSBTQ0FMRSAtIEZFRQoJaW50IDk5NQoJZnJhbWVfYnVyeSAwIC8vIGZhY3RvcjogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjc0CgkvLyByZXR1cm4gd2lkZVJhdGlvKFtpbkFtb3VudCwgZmFjdG9yLCBvdXRTdXBwbHldLCBbaW5TdXBwbHkgKiBTQ0FMRSArIGluQW1vdW50ICogZmFjdG9yXSk7CglmcmFtZV9kaWcgLTEgLy8gaW5BbW91bnQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDAgLy8gZmFjdG9yOiB1aW50NjQKCW11bHcKCWZyYW1lX2RpZyAtMyAvLyBvdXRTdXBwbHk6IHVpbnQ2NAoJdW5jb3ZlciAyCglkaWcgMQoJKgoJY292ZXIgMgoJbXVsdwoJY292ZXIgMgoJKwoJc3dhcAoJaW50IDAKCWZyYW1lX2RpZyAtMiAvLyBpblN1cHBseTogdWludDY0CglpbnQgMTAwMAoJKgoJZnJhbWVfZGlnIC0xIC8vIGluQW1vdW50OiB1aW50NjQKCWZyYW1lX2RpZyAwIC8vIGZhY3RvcjogdWludDY0CgkqCgkrCglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBzZXRfZ292ZXJub3IoYWRkcmVzcyl2b2lkCiphYmlfcm91dGVfc2V0X2dvdmVybm9yOgoJLy8gZ292ZXJub3I6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMCAoZ292ZXJub3IpIGZvciBzZXRfZ292ZXJub3IgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgc2V0X2dvdmVybm9yKGFkZHJlc3Mpdm9pZAoJY2FsbHN1YiBzZXRfZ292ZXJub3IKCWludCAxCglyZXR1cm4KCi8vIHNldF9nb3Zlcm5vcihnb3Zlcm5vcjogQWRkcmVzcyk6IHZvaWQKc2V0X2dvdmVybm9yOgoJcHJvdG8gMSAwCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjc4CgkvLyB2ZXJpZnlBcHBDYWxsVHhuKHRoaXMudHhuLCB7IHNlbmRlcjogdGhpcy5nb3Zlcm5vci52YWx1ZSB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJdHhuIFNlbmRlcgoJYnl0ZSAweDY3IC8vICJnIgoJYXBwX2dsb2JhbF9nZXQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4biIsImZpZWxkIjoic2VuZGVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmdvdmVybm9yLnZhbHVlIn0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo3OQoJLy8gdGhpcy5nb3Zlcm5vci52YWx1ZSA9IGdvdmVybm9yCglieXRlIDB4NjcgLy8gImciCglmcmFtZV9kaWcgLTEgLy8gZ292ZXJub3I6IEFkZHJlc3MKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIGJvb3RzdHJhcChwYXksdWludDY0LHVpbnQ2NCl1aW50NjQKKmFiaV9yb3V0ZV9ib290c3RyYXA6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGJBc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gYUFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBzZWVkOiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAyIChzZWVkKSBmb3IgYm9vdHN0cmFwIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYm9vdHN0cmFwKHBheSx1aW50NjQsdWludDY0KXVpbnQ2NAoJY2FsbHN1YiBib290c3RyYXAKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBib290c3RyYXAoc2VlZDogUGF5VHhuLCBhQXNzZXQ6IEFzc2V0SUQsIGJBc3NldDogQXNzZXRJRCk6IEFzc2V0SUQKYm9vdHN0cmFwOgoJcHJvdG8gMyAxCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjgzCgkvLyB2ZXJpZnlBcHBDYWxsVHhuKHRoaXMudHhuLCB7IHNlbmRlcjogdGhpcy5nb3Zlcm5vci52YWx1ZSB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJdHhuIFNlbmRlcgoJYnl0ZSAweDY3IC8vICJnIgoJYXBwX2dsb2JhbF9nZXQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4biIsImZpZWxkIjoic2VuZGVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmdvdmVybm9yLnZhbHVlIn0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo4NQoJLy8gYXNzZXJ0KGdsb2JhbHMuZ3JvdXBTaXplID09PSAyKQoJZ2xvYmFsIEdyb3VwU2l6ZQoJaW50IDIKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6ODcKCS8vIHZlcmlmeVBheVR4bihzZWVkLCB7IHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLCBhbW91bnQ6IHsgZ3JlYXRlclRoYW5FcXVhbFRvOiAzMDBfMDAwIH0gfSkKCS8vIHZlcmlmeSByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHNlZWQ6IFBheVR4bgoJZ3R4bnMgUmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoic2VlZCIsImZpZWxkIjoicmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIHNlZWQ6IFBheVR4bgoJZ3R4bnMgQW1vdW50CglpbnQgMzAwXzAwMAoJPj0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InNlZWQiLCJmaWVsZCI6ImFtb3VudCIsImNvbmRpdGlvbiI6ImdyZWF0ZXJUaGFuRXF1YWxUbyIsImV4cGVjdGVkIjoiPj0zMDBfMDAwIn0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo4OAoJLy8gYXNzZXJ0KGFBc3NldCA8IGJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyBhQXNzZXQ6IEFzc2V0SUQKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IEFzc2V0SUQKCTwKCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo5MAoJLy8gdGhpcy5hc3NldEEudmFsdWUgPSBhQXNzZXQKCWJ5dGUgMHg2MSAvLyAiYSIKCWZyYW1lX2RpZyAtMiAvLyBhQXNzZXQ6IEFzc2V0SUQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjkxCgkvLyB0aGlzLmFzc2V0Qi52YWx1ZSA9IGJBc3NldAoJYnl0ZSAweDYyIC8vICJiIgoJZnJhbWVfZGlnIC0zIC8vIGJBc3NldDogQXNzZXRJRAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6OTIKCS8vIHRoaXMucG9vbFRva2VuLnZhbHVlID0gdGhpcy5kb0NyZWF0ZVBvb2xUb2tlbihhQXNzZXQsIGJBc3NldCkKCWJ5dGUgMHg3MCAvLyAicCIKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IEFzc2V0SUQKCWZyYW1lX2RpZyAtMiAvLyBhQXNzZXQ6IEFzc2V0SUQKCWNhbGxzdWIgZG9DcmVhdGVQb29sVG9rZW4KCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjk0CgkvLyB0aGlzLmRvT3B0SW4oYUFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIGFBc3NldDogQXNzZXRJRAoJY2FsbHN1YiBkb09wdEluCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjk1CgkvLyB0aGlzLmRvT3B0SW4oYkFzc2V0KQoJZnJhbWVfZGlnIC0zIC8vIGJBc3NldDogQXNzZXRJRAoJY2FsbHN1YiBkb09wdEluCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjk3CgkvLyByZXR1cm4gdGhpcy5wb29sVG9rZW4udmFsdWU7CglieXRlIDB4NzAgLy8gInAiCglhcHBfZ2xvYmFsX2dldAoJcmV0c3ViCgovLyBtaW50KGF4ZmVyLGF4ZmVyLHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQKKmFiaV9yb3V0ZV9taW50OgoJLy8gYkFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCgkvLyBhQXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHBvb2xBc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gYlhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCgkvLyBhcmd1bWVudCAzIChiWGZlcikgZm9yIG1pbnQgbXVzdCBiZSBhIGF4ZmVyIHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBhWGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMgoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoKCS8vIGFyZ3VtZW50IDQgKGFYZmVyKSBmb3IgbWludCBtdXN0IGJlIGEgYXhmZXIgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgbWludChheGZlcixheGZlcix1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIG1pbnQKCWludCAxCglyZXR1cm4KCi8vIG1pbnQoYVhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIGJYZmVyOiBBc3NldFRyYW5zZmVyVHhuLCBwb29sQXNzZXQ6IEFzc2V0SUQsIGFBc3NldDogQXNzZXRJRCwgYkFzc2V0OiBBc3NldElEKTogdm9pZAptaW50OgoJcHJvdG8gNSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB3ZWxsIGZvcm1lZCBtaW50CgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTAyCgkvLyBhc3NlcnQoYUFzc2V0ID09PSB0aGlzLmFzc2V0QS52YWx1ZSkKCWZyYW1lX2RpZyAtNCAvLyBhQXNzZXQ6IEFzc2V0SUQKCWJ5dGUgMHg2MSAvLyAiYSIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEwMwoJLy8gYXNzZXJ0KGJBc3NldCA9PT0gdGhpcy5hc3NldEIudmFsdWUpCglmcmFtZV9kaWcgLTUgLy8gYkFzc2V0OiBBc3NldElECglieXRlIDB4NjIgLy8gImIiCglhcHBfZ2xvYmFsX2dldAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMDQKCS8vIGFzc2VydChwb29sQXNzZXQgPT09IHRoaXMucG9vbFRva2VuLnZhbHVlKQoJZnJhbWVfZGlnIC0zIC8vIHBvb2xBc3NldDogQXNzZXRJRAoJYnl0ZSAweDcwIC8vICJwIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyB2YWxpZCBhc3NldCBBIGF4ZmVyCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTA3CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGFYZmVyLCB7CgkvLyAgICAgICBzZW5kZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiB7IGdyZWF0ZXJUaGFuOiAwIH0sCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgeGZlckFzc2V0OiBhQXNzZXQsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBzZW5kZXIKCWZyYW1lX2RpZyAtMSAvLyBhWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgU2VuZGVyCgl0eG4gU2VuZGVyCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoiYVhmZXIiLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoidGhpcy50eG4uc2VuZGVyIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaW50IDAKCT4KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6ImFYZmVyIiwiZmllbGQiOiJhc3NldEFtb3VudCIsImNvbmRpdGlvbiI6ImdyZWF0ZXJUaGFuIiwiZXhwZWN0ZWQiOiI+MCJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6ImFYZmVyIiwiZmllbGQiOiJhc3NldFJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIHZlcmlmeSB4ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBhWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglmcmFtZV9kaWcgLTQgLy8gYUFzc2V0OiBBc3NldElECgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoiYVhmZXIiLCJmaWVsZCI6InhmZXJBc3NldCIsImV4cGVjdGVkIjoiYUFzc2V0In0KCWFzc2VydAoKCS8vIHZhbGlkIGFzc2V0IEIgYXhmZXIKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMTUKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYlhmZXIsIHsKCS8vICAgICAgIHNlbmRlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IHsgZ3JlYXRlclRoYW46IDAgfSwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGJBc3NldCwKCS8vICAgICB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJZnJhbWVfZGlnIC0yIC8vIGJYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBTZW5kZXIKCXR4biBTZW5kZXIKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJiWGZlciIsImZpZWxkIjoic2VuZGVyIiwiZXhwZWN0ZWQiOiJ0aGlzLnR4bi5zZW5kZXIifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTIgLy8gYlhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpbnQgMAoJPgoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoiYlhmZXIiLCJmaWVsZCI6ImFzc2V0QW1vdW50IiwiY29uZGl0aW9uIjoiZ3JlYXRlclRoYW4iLCJleHBlY3RlZCI6Ij4wIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gYlhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoiYlhmZXIiLCJmaWVsZCI6ImFzc2V0UmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IHhmZXJBc3NldAoJZnJhbWVfZGlnIC0yIC8vIGJYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWZyYW1lX2RpZyAtNSAvLyBiQXNzZXQ6IEFzc2V0SUQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJiWGZlciIsImZpZWxkIjoieGZlckFzc2V0IiwiZXhwZWN0ZWQiOiJiQXNzZXQifQoJYXNzZXJ0CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMjMKCS8vIHRoaXMuYXBwLmFkZHJlc3MuYXNzZXRCYWxhbmNlKGFBc3NldCkgPT09IGFYZmVyLmFzc2V0QW1vdW50ICYmCgkvLyAgICAgICB0aGlzLmFwcC5hZGRyZXNzLmFzc2V0QmFsYW5jZShiQXNzZXQpID09PSBiWGZlci5hc3NldEFtb3VudAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtNCAvLyBhQXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgLTEgLy8gYVhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50Cgk9PQoJZHVwCglieiAqc2tpcF9hbmQwCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC01IC8vIGJBc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCT09CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjBfZWxzZQoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEyNgoJLy8gdGhpcy50b2tlbnNUb01pbnRJbnRpYWwoYVhmZXIuYXNzZXRBbW91bnQsIGJYZmVyLmFzc2V0QW1vdW50KQoJZnJhbWVfZGlnIC0yIC8vIGJYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJY2FsbHN1YiB0b2tlbnNUb01pbnRJbnRpYWwKCWIgKmlmMF9lbmQKCippZjBfZWxzZToKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMjgKCS8vIHRvTWludCA9IHRoaXMudG9rZW5zVG9NaW50KAoJLy8gICAgICAgICBUT1RBTF9TVVBQTFkgLSB0aGlzLmFwcC5hZGRyZXNzLmFzc2V0QmFsYW5jZShwb29sQXNzZXQpLAoJLy8gICAgICAgICB0aGlzLmFwcC5hZGRyZXNzLmFzc2V0QmFsYW5jZShhQXNzZXQpIC0gYVhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHRoaXMuYXBwLmFkZHJlc3MuYXNzZXRCYWxhbmNlKGJBc3NldCkgLSBiWGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgYVhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIGJYZmVyLmFzc2V0QW1vdW50CgkvLyAgICAgICApCglmcmFtZV9kaWcgLTIgLy8gYlhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYVhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC01IC8vIGJBc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCS0KCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTQgLy8gYUFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJLQoJaW50IDEwMDAwMDAwMDAwCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0zIC8vIHBvb2xBc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCS0KCWNhbGxzdWIgdG9rZW5zVG9NaW50CglmcmFtZV9idXJ5IDAgLy8gdG9NaW50OiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTM2CgkvLyBhc3NlcnQodG9NaW50ID4gMCkKCWZyYW1lX2RpZyAwIC8vIHRvTWludDogdWludDY0CglpbnQgMAoJPgoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEzOAoJLy8gdGhpcy5kb0F4ZmVyKHRoaXMudHhuLnNlbmRlciwgcG9vbEFzc2V0LCB0b01pbnQpCglmcmFtZV9kaWcgMCAvLyB0b01pbnQ6IHVpbnQ2NAoJZnJhbWVfZGlnIC0zIC8vIHBvb2xBc3NldDogQXNzZXRJRAoJdHhuIFNlbmRlcgoJY2FsbHN1YiBkb0F4ZmVyCgoqaWYwX2VuZDoKCXJldHN1YgoKLy8gYnVybihheGZlcix1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYnVybjoKCS8vIGJBc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgoJLy8gYUFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyBwb29sQXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIHBvb2xYZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09CgoJLy8gYXJndW1lbnQgMyAocG9vbFhmZXIpIGZvciBidXJuIG11c3QgYmUgYSBheGZlciB0cmFuc2FjdGlvbgoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBidXJuKGF4ZmVyLHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQKCWNhbGxzdWIgYnVybgoJaW50IDEKCXJldHVybgoKLy8gYnVybihwb29sWGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcG9vbEFzc2V0OiBBc3NldElELCBhQXNzZXQ6IEFzc2V0SUQsIGJBc3NldDogQXNzZXRJRCk6IHZvaWQKYnVybjoKCXByb3RvIDQgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyB3ZWxsIGZvcm1lZCBidXJuCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTQ0CgkvLyBhc3NlcnQocG9vbEFzc2V0ID09PSB0aGlzLnBvb2xUb2tlbi52YWx1ZSkKCWZyYW1lX2RpZyAtMiAvLyBwb29sQXNzZXQ6IEFzc2V0SUQKCWJ5dGUgMHg3MCAvLyAicCIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE0NQoJLy8gYXNzZXJ0KGFBc3NldCA9PT0gdGhpcy5hc3NldEEudmFsdWUpCglmcmFtZV9kaWcgLTMgLy8gYUFzc2V0OiBBc3NldElECglieXRlIDB4NjEgLy8gImEiCglhcHBfZ2xvYmFsX2dldAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNDYKCS8vIGFzc2VydChiQXNzZXQgPT09IHRoaXMuYXNzZXRCLnZhbHVlKQoJZnJhbWVfZGlnIC00IC8vIGJBc3NldDogQXNzZXRJRAoJYnl0ZSAweDYyIC8vICJiIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyB2YWxpZCBwb29sIGF4ZmVyCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTQ5CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKHBvb2xYZmVyLCB7CgkvLyAgICAgICBzZW5kZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiB7IGdyZWF0ZXJUaGFuOiAwIH0sCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgeGZlckFzc2V0OiBwb29sQXNzZXQsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBzZW5kZXIKCWZyYW1lX2RpZyAtMSAvLyBwb29sWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgU2VuZGVyCgl0eG4gU2VuZGVyCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoicG9vbFhmZXIiLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoidGhpcy50eG4uc2VuZGVyIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaW50IDAKCT4KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InBvb2xYZmVyIiwiZmllbGQiOiJhc3NldEFtb3VudCIsImNvbmRpdGlvbiI6ImdyZWF0ZXJUaGFuIiwiZXhwZWN0ZWQiOiI+MCJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InBvb2xYZmVyIiwiZmllbGQiOiJhc3NldFJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIHZlcmlmeSB4ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBwb29sWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglmcmFtZV9kaWcgLTIgLy8gcG9vbEFzc2V0OiBBc3NldElECgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoicG9vbFhmZXIiLCJmaWVsZCI6InhmZXJBc3NldCIsImV4cGVjdGVkIjoicG9vbEFzc2V0In0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNTYKCS8vIGlzc3VlZCA9IFRPVEFMX1NVUFBMWSAtICh0aGlzLmFwcC5hZGRyZXNzLmFzc2V0QmFsYW5jZShwb29sQXNzZXQpIC0gcG9vbFhmZXIuYXNzZXRBbW91bnQpCglpbnQgMTAwMDAwMDAwMDAKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gcG9vbEFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJLQoJLQoJZnJhbWVfYnVyeSAwIC8vIGlzc3VlZDogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE1OAoJLy8gYUFtdCA9IHRoaXMudG9rZW5zVG9CdXJuKGlzc3VlZCwgdGhpcy5hcHAuYWRkcmVzcy5hc3NldEJhbGFuY2UoYUFzc2V0KSwgcG9vbFhmZXIuYXNzZXRBbW91bnQpCglmcmFtZV9kaWcgLTEgLy8gcG9vbFhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0zIC8vIGFBc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGlzc3VlZDogdWludDY0CgljYWxsc3ViIHRva2Vuc1RvQnVybgoJZnJhbWVfYnVyeSAxIC8vIGFBbXQ6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNjAKCS8vIGJBbXQgPSB0aGlzLnRva2Vuc1RvQnVybihpc3N1ZWQsIHRoaXMuYXBwLmFkZHJlc3MuYXNzZXRCYWxhbmNlKGJBc3NldCksIHBvb2xYZmVyLmFzc2V0QW1vdW50KQoJZnJhbWVfZGlnIC0xIC8vIHBvb2xYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtNCAvLyBiQXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpc3N1ZWQ6IHVpbnQ2NAoJY2FsbHN1YiB0b2tlbnNUb0J1cm4KCWZyYW1lX2J1cnkgMiAvLyBiQW10OiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTYyCgkvLyB0aGlzLmRvQXhmZXIodGhpcy50eG4uc2VuZGVyLCBhQXNzZXQsIGFBbXQpCglmcmFtZV9kaWcgMSAvLyBhQW10OiB1aW50NjQKCWZyYW1lX2RpZyAtMyAvLyBhQXNzZXQ6IEFzc2V0SUQKCXR4biBTZW5kZXIKCWNhbGxzdWIgZG9BeGZlcgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNjMKCS8vIHRoaXMuZG9BeGZlcih0aGlzLnR4bi5zZW5kZXIsIGJBc3NldCwgYkFtdCkKCWZyYW1lX2RpZyAyIC8vIGJBbXQ6IHVpbnQ2NAoJZnJhbWVfZGlnIC00IC8vIGJBc3NldDogQXNzZXRJRAoJdHhuIFNlbmRlcgoJY2FsbHN1YiBkb0F4ZmVyCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE2NQoJLy8gdGhpcy5yYXRpby52YWx1ZSA9IHRoaXMuY29tcHV0ZVJhdGlvKCkKCWJ5dGUgMHg3MiAvLyAiciIKCWNhbGxzdWIgY29tcHV0ZVJhdGlvCglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgovLyBzd2FwKGF4ZmVyLHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX3N3YXA6CgkvLyBiQXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIGFBc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gc3dhcFhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCgkvLyBhcmd1bWVudCAyIChzd2FwWGZlcikgZm9yIHN3YXAgbXVzdCBiZSBhIGF4ZmVyIHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBleGVjdXRlIHN3YXAoYXhmZXIsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIHN3YXAKCWludCAxCglyZXR1cm4KCi8vIHN3YXAoc3dhcFhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIGFBc3NldDogQXNzZXRJRCwgYkFzc2V0OiBBc3NldElEKTogdm9pZApzd2FwOgoJcHJvdG8gMyAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIHdlbGwgZm9ybWVkIHN3YXAKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNzAKCS8vIGFzc2VydChhQXNzZXQgPT09IHRoaXMuYXNzZXRBLnZhbHVlKQoJZnJhbWVfZGlnIC0yIC8vIGFBc3NldDogQXNzZXRJRAoJYnl0ZSAweDYxIC8vICJhIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTcxCgkvLyBhc3NlcnQoYkFzc2V0ID09PSB0aGlzLmFzc2V0Qi52YWx1ZSkKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IEFzc2V0SUQKCWJ5dGUgMHg2MiAvLyAiYiIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE3MwoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihzd2FwWGZlciwgewoJLy8gICAgICAgYXNzZXRBbW91bnQ6IHsgZ3JlYXRlclRoYW46IDAgfSwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICBzZW5kZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIHhmZXJBc3NldDogeyBpbmNsdWRlZEluOiBbYUFzc2V0LCBiQXNzZXRdIH0sCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaW50IDAKCT4KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InN3YXBYZmVyIiwiZmllbGQiOiJhc3NldEFtb3VudCIsImNvbmRpdGlvbiI6ImdyZWF0ZXJUaGFuIiwiZXhwZWN0ZWQiOiI+MCJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InN3YXBYZmVyIiwiZmllbGQiOiJhc3NldFJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBzZW5kZXIKCWZyYW1lX2RpZyAtMSAvLyBzd2FwWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgU2VuZGVyCgl0eG4gU2VuZGVyCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoic3dhcFhmZXIiLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoidGhpcy50eG4uc2VuZGVyIn0KCWFzc2VydAoKCS8vIHZlcmlmeSB4ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBzd2FwWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBBc3NldElECgk9PQoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IEFzc2V0SUQKCT09Cgl8fAoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjp7InR4blRleHQiOiJzd2FwWGZlciJ9LCJmaWVsZCI6InhmZXJBc3NldCIsImNvbmRpdGlvbiI6ImluY2x1ZGVkSW4iLCJleHBlY3RlZCI6IlthQXNzZXQsIGJBc3NldF0ifQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE4MAoJLy8gb3V0SWQgPSBzd2FwWGZlci54ZmVyQXNzZXQgPT09IGFBc3NldCA/IGFBc3NldCA6IGJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWZyYW1lX2RpZyAtMiAvLyBhQXNzZXQ6IEFzc2V0SUQKCT09CglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMiAvLyBhQXNzZXQ6IEFzc2V0SUQKCWIgKnRlcm5hcnkzX2VuZAoKKnRlcm5hcnkzX2ZhbHNlOgoJZnJhbWVfZGlnIC0zIC8vIGJBc3NldDogQXNzZXRJRAoKKnRlcm5hcnkzX2VuZDoKCWZyYW1lX2J1cnkgMCAvLyBvdXRJZDogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE4MgoJLy8gaW5JZCA9IHN3YXBYZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWZyYW1lX2J1cnkgMSAvLyBpbklkOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTg0CgkvLyB0b1N3YXAgPSB0aGlzLnRva2Vuc1RvU3dhcCgKCS8vICAgICAgIHN3YXBYZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgdGhpcy5hcHAuYWRkcmVzcy5hc3NldEJhbGFuY2UoaW5JZCkgLSBzd2FwWGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHRoaXMuYXBwLmFkZHJlc3MuYXNzZXRCYWxhbmNlKG91dElkKQoJLy8gICAgICkKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgMCAvLyBvdXRJZDogdWludDY0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAxIC8vIGluSWQ6IHVpbnQ2NAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAtMSAvLyBzd2FwWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCS0KCWZyYW1lX2RpZyAtMSAvLyBzd2FwWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWNhbGxzdWIgdG9rZW5zVG9Td2FwCglmcmFtZV9idXJ5IDIgLy8gdG9Td2FwOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTkwCgkvLyBhc3NlcnQodG9Td2FwID4gMCkKCWZyYW1lX2RpZyAyIC8vIHRvU3dhcDogdWludDY0CglpbnQgMAoJPgoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE5MgoJLy8gdGhpcy5kb0F4ZmVyKHRoaXMudHhuLnNlbmRlciwgb3V0SWQsIHRvU3dhcCkKCWZyYW1lX2RpZyAyIC8vIHRvU3dhcDogdWludDY0CglmcmFtZV9kaWcgMCAvLyBvdXRJZDogdWludDY0Cgl0eG4gU2VuZGVyCgljYWxsc3ViIGRvQXhmZXIKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTk0CgkvLyB0aGlzLnJhdGlvLnZhbHVlID0gdGhpcy5jb21wdXRlUmF0aW8oKQoJYnl0ZSAweDcyIC8vICJyIgoJY2FsbHN1YiBjb21wdXRlUmF0aW8KCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgInNldF9nb3Zlcm5vcihhZGRyZXNzKXZvaWQiCgltZXRob2QgImJvb3RzdHJhcChwYXksdWludDY0LHVpbnQ2NCl1aW50NjQiCgltZXRob2QgIm1pbnQoYXhmZXIsYXhmZXIsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKCW1ldGhvZCAiYnVybihheGZlcix1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJzd2FwKGF4ZmVyLHVpbnQ2NCx1aW50NjQpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfc2V0X2dvdmVybm9yICphYmlfcm91dGVfYm9vdHN0cmFwICphYmlfcm91dGVfbWludCAqYWJpX3JvdXRlX2J1cm4gKmFiaV9yb3V0ZV9zd2FwCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIGNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIGNyZWF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpOiB2b2lkCmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwCgkvLyB0aGlzLmdvdmVybm9yLnZhbHVlID0gdGhpcy50eG4uc2VuZGVyCglieXRlIDB4NjcgLy8gImciCgl0eG4gU2VuZGVyCglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgovLyBkb0NyZWF0ZVBvb2xUb2tlbihhQXNzZXQ6IEFzc2V0SUQsIGJBc3NldDogQXNzZXRJRCk6IEFzc2V0SUQKZG9DcmVhdGVQb29sVG9rZW46Cglwcm90byAyIDEKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MjYKCS8vIHJldHVybiB0aGlzLnR4bkNvbXBvc2VyLnNlbmQoCgkvLyAgICAgICBuZXcgQXNzZXRDcmVhdGVUeG4oewoJLy8gICAgICAgICBjb25maWdBc3NldE5hbWU6ICdEUFQtJyArIGFBc3NldC51bml0TmFtZSArICctJyArIGJBc3NldC51bml0TmFtZSwKCS8vICAgICAgICAgY29uZmlnQXNzZXRVbml0TmFtZTogJ2RwdCcsCgkvLyAgICAgICAgIGNvbmZpZ0Fzc2V0VG90YWw6IFRPVEFMX1NVUFBMWSwKCS8vICAgICAgICAgY29uZmlnQXNzZXREZWNpbWFsczogMywKCS8vICAgICAgICAgY29uZmlnQXNzZXRNYW5hZ2VyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgICBjb25maWdBc3NldFJlc2VydmU6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICB9KQoJLy8gICAgICk7CglpdHhuX2JlZ2luCglpbnQgYWNmZwoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoyOAoJLy8gY29uZmlnQXNzZXROYW1lOiAnRFBULScgKyBhQXNzZXQudW5pdE5hbWUgKyAnLScgKyBiQXNzZXQudW5pdE5hbWUKCWJ5dGUgMHg0NDUwNTQyZCAvLyAiRFBULSIKCWZyYW1lX2RpZyAtMSAvLyBhQXNzZXQ6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRVbml0TmFtZQoJcG9wCgljb25jYXQKCWJ5dGUgMHgyZCAvLyAiLSIKCWNvbmNhdAoJZnJhbWVfZGlnIC0yIC8vIGJBc3NldDogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCglwb3AKCWNvbmNhdAoJaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MjkKCS8vIGNvbmZpZ0Fzc2V0VW5pdE5hbWU6ICdkcHQnCglieXRlIDB4NjQ3MDc0IC8vICJkcHQiCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MzAKCS8vIGNvbmZpZ0Fzc2V0VG90YWw6IFRPVEFMX1NVUFBMWQoJaW50IDEwMDAwMDAwMDAwCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MzEKCS8vIGNvbmZpZ0Fzc2V0RGVjaW1hbHM6IDMKCWludCAzCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MzIKCS8vIGNvbmZpZ0Fzc2V0TWFuYWdlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjMzCgkvLyBjb25maWdBc3NldFJlc2VydmU6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCWl0eG4gQ3JlYXRlZEFzc2V0SUQKCXJldHN1YgoKLy8gZG9BeGZlcihyZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IEFzc2V0SUQsIGFtb3VudDogdWludDY0KTogdm9pZApkb0F4ZmVyOgoJcHJvdG8gMyAwCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjM5CgkvLyB0aGlzLnR4bkNvbXBvc2VyLnNlbmQoCgkvLyAgICAgICBuZXcgQXNzZXRUcmFuc2ZlclR4bih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYW1vdW50LAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NDEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo0MgoJLy8geGZlckFzc2V0OiBhc3NldAoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo0MwoJLy8gYXNzZXRBbW91bnQ6IGFtb3VudAoJZnJhbWVfZGlnIC0zIC8vIGFtb3VudDogdWludDY0CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBkb09wdEluKGFzc2V0OiBBc3NldElEKTogdm9pZApkb09wdEluOgoJcHJvdG8gMSAwCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjQ5CgkvLyB0aGlzLmRvQXhmZXIodGhpcy5hcHAuYWRkcmVzcywgYXNzZXQsIDApCglpbnQgMAoJZnJhbWVfZGlnIC0xIC8vIGFzc2V0OiBBc3NldElECglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJY2FsbHN1YiBkb0F4ZmVyCglyZXRzdWIKCi8vIHRva2Vuc1RvTWludEludGlhbChhQW1vdW50OiB1aW50NjQsIGJBbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NAp0b2tlbnNUb01pbnRJbnRpYWw6Cglwcm90byAyIDEKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NTMKCS8vIHJldHVybiBzcXJ0KGFBbW91bnQgKiBiQW1vdW50KTsKCWZyYW1lX2RpZyAtMSAvLyBhQW1vdW50OiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBiQW1vdW50OiB1aW50NjQKCSoKCXNxcnQKCXJldHN1YgoKLy8gdG9rZW5zVG9NaW50KGlzc3VlZDogdWludDY0LCBhU3VwcGx5OiB1aW50NjQsIGJTdXBwbHk6IHVpbnQ2NCwgYUFtb3VudDogdWludDY0LCBiQW1vdW50OiB1aW50NjQpOiB1aW50NjQKdG9rZW5zVG9NaW50OgoJcHJvdG8gNSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo1NwoJLy8gYVJhdGlvID0gd2lkZVJhdGlvKFthQW1vdW50LCBTQ0FMRV0sIFthU3VwcGx5XSkKCWZyYW1lX2RpZyAtNCAvLyBhQW1vdW50OiB1aW50NjQKCWludCAxMDAwCgltdWx3CglpbnQgMAoJZnJhbWVfZGlnIC0yIC8vIGFTdXBwbHk6IHVpbnQ2NAoJZGl2bW9kdwoJcG9wCglwb3AKCXN3YXAKCSEKCgkvLyB3aWRlUmF0aW8gZmFpbGVkCglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBhUmF0aW86IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo1OAoJLy8gYlJhdGlvID0gd2lkZVJhdGlvKFtiQW1vdW50LCBTQ0FMRV0sIFtiU3VwcGx5XSkKCWZyYW1lX2RpZyAtNSAvLyBiQW1vdW50OiB1aW50NjQKCWludCAxMDAwCgltdWx3CglpbnQgMAoJZnJhbWVfZGlnIC0zIC8vIGJTdXBwbHk6IHVpbnQ2NAoJZGl2bW9kdwoJcG9wCglwb3AKCXN3YXAKCSEKCgkvLyB3aWRlUmF0aW8gZmFpbGVkCglhc3NlcnQKCWZyYW1lX2J1cnkgMSAvLyBiUmF0aW86IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo2MAoJLy8gcmF0aW8gPSBhUmF0aW8gPCBiUmF0aW8gPyBhUmF0aW8gOiBiUmF0aW8KCWZyYW1lX2RpZyAwIC8vIGFSYXRpbzogdWludDY0CglmcmFtZV9kaWcgMSAvLyBiUmF0aW86IHVpbnQ2NAoJPAoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgMCAvLyBhUmF0aW86IHVpbnQ2NAoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglmcmFtZV9kaWcgMSAvLyBiUmF0aW86IHVpbnQ2NAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgMiAvLyByYXRpbzogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjYyCgkvLyByZXR1cm4gd2lkZVJhdGlvKFtyYXRpbywgaXNzdWVkXSwgW1NDQUxFXSk7CglmcmFtZV9kaWcgMiAvLyByYXRpbzogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gaXNzdWVkOiB1aW50NjQKCW11bHcKCWludCAwCglpbnQgMTAwMAoJZGl2bW9kdwoJcG9wCglwb3AKCXN3YXAKCSEKCgkvLyB3aWRlUmF0aW8gZmFpbGVkCglhc3NlcnQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGNvbXB1dGVSYXRpbygpOiB1aW50NjQKY29tcHV0ZVJhdGlvOgoJcHJvdG8gMCAxCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjY2CgkvLyByZXR1cm4gd2lkZVJhdGlvKAoJLy8gICAgICAgW3RoaXMuYXBwLmFkZHJlc3MuYXNzZXRCYWxhbmNlKHRoaXMuYXNzZXRBLnZhbHVlKSwgU0NBTEVdLAoJLy8gICAgICAgW3RoaXMuYXBwLmFkZHJlc3MuYXNzZXRCYWxhbmNlKHRoaXMuYXNzZXRCLnZhbHVlKV0KCS8vICAgICApOwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWJ5dGUgMHg2MSAvLyAiYSIKCWFwcF9nbG9iYWxfZ2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaW50IDEwMDAKCW11bHcKCWludCAwCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYnl0ZSAweDYyIC8vICJiIgoJYXBwX2dsb2JhbF9nZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJcmV0c3ViCgovLyB0b2tlbnNUb0J1cm4oaXNzdWVkOiB1aW50NjQsIHN1cHBseTogdWludDY0LCBhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NAp0b2tlbnNUb0J1cm46Cglwcm90byAzIDEKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NzMKCS8vIHJldHVybiB3aWRlUmF0aW8oW3N1cHBseSwgYW1vdW50XSwgW2lzc3VlZF0pOwoJZnJhbWVfZGlnIC0yIC8vIHN1cHBseTogdWludDY0CglmcmFtZV9kaWcgLTMgLy8gYW1vdW50OiB1aW50NjQKCW11bHcKCWludCAwCglmcmFtZV9kaWcgLTEgLy8gaXNzdWVkOiB1aW50NjQKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CglyZXRzdWIKCi8vIHRva2Vuc1RvU3dhcChpbkFtb3VudDogdWludDY0LCBpblN1cHBseTogdWludDY0LCBvdXRTdXBwbHk6IHVpbnQ2NCk6IHVpbnQ2NAp0b2tlbnNUb1N3YXA6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo3NwoJLy8gZmFjdG9yID0gU0NBTEUgLSBGRUUKCWludCA5OTUKCWZyYW1lX2J1cnkgMCAvLyBmYWN0b3I6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo3OAoJLy8gcmV0dXJuIHdpZGVSYXRpbyhbaW5BbW91bnQsIGZhY3Rvciwgb3V0U3VwcGx5XSwgW2luU3VwcGx5ICogU0NBTEUgKyBpbkFtb3VudCAqIGZhY3Rvcl0pOwoJZnJhbWVfZGlnIC0xIC8vIGluQW1vdW50OiB1aW50NjQKCWZyYW1lX2RpZyAwIC8vIGZhY3RvcjogdWludDY0CgltdWx3CglmcmFtZV9kaWcgLTMgLy8gb3V0U3VwcGx5OiB1aW50NjQKCXVuY292ZXIgMgoJZGlnIDEKCSoKCWNvdmVyIDIKCW11bHcKCWNvdmVyIDIKCSsKCXN3YXAKCWludCAwCglmcmFtZV9kaWcgLTIgLy8gaW5TdXBwbHk6IHVpbnQ2NAoJaW50IDEwMDAKCSoKCWZyYW1lX2RpZyAtMSAvLyBpbkFtb3VudDogdWludDY0CglmcmFtZV9kaWcgMCAvLyBmYWN0b3I6IHVpbnQ2NAoJKgoJKwoJZGl2bW9kdwoJcG9wCglwb3AKCXN3YXAKCSEKCgkvLyB3aWRlUmF0aW8gZmFpbGVkCglhc3NlcnQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gc2V0X2dvdmVybm9yKGFkZHJlc3Mpdm9pZAoqYWJpX3JvdXRlX3NldF9nb3Zlcm5vcjoKCS8vIGdvdmVybm9yOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKGdvdmVybm9yKSBmb3Igc2V0X2dvdmVybm9yIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIHNldF9nb3Zlcm5vcihhZGRyZXNzKXZvaWQKCWNhbGxzdWIgc2V0X2dvdmVybm9yCglpbnQgMQoJcmV0dXJuCgovLyBzZXRfZ292ZXJub3IoZ292ZXJub3I6IEFkZHJlc3MpOiB2b2lkCnNldF9nb3Zlcm5vcjoKCXByb3RvIDEgMAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo4MgoJLy8gdmVyaWZ5QXBwQ2FsbFR4bih0aGlzLnR4biwgeyBzZW5kZXI6IHRoaXMuZ292ZXJub3IudmFsdWUgfSkKCS8vIHZlcmlmeSBzZW5kZXIKCXR4biBTZW5kZXIKCWJ5dGUgMHg2NyAvLyAiZyIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidGhpcy50eG4iLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoidGhpcy5nb3Zlcm5vci52YWx1ZSJ9Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6ODMKCS8vIHRoaXMuZ292ZXJub3IudmFsdWUgPSBnb3Zlcm5vcgoJYnl0ZSAweDY3IC8vICJnIgoJZnJhbWVfZGlnIC0xIC8vIGdvdmVybm9yOiBBZGRyZXNzCglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgovLyBib290c3RyYXAocGF5LHVpbnQ2NCx1aW50NjQpdWludDY0CiphYmlfcm91dGVfYm9vdHN0cmFwOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBiQXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIGFBc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gc2VlZDogcGF5Cgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBwYXkKCT09CgoJLy8gYXJndW1lbnQgMiAoc2VlZCkgZm9yIGJvb3RzdHJhcCBtdXN0IGJlIGEgcGF5IHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBleGVjdXRlIGJvb3RzdHJhcChwYXksdWludDY0LHVpbnQ2NCl1aW50NjQKCWNhbGxzdWIgYm9vdHN0cmFwCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYm9vdHN0cmFwKHNlZWQ6IFBheVR4biwgYUFzc2V0OiBBc3NldElELCBiQXNzZXQ6IEFzc2V0SUQpOiBBc3NldElECmJvb3RzdHJhcDoKCXByb3RvIDMgMQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo4NwoJLy8gdmVyaWZ5QXBwQ2FsbFR4bih0aGlzLnR4biwgeyBzZW5kZXI6IHRoaXMuZ292ZXJub3IudmFsdWUgfSkKCS8vIHZlcmlmeSBzZW5kZXIKCXR4biBTZW5kZXIKCWJ5dGUgMHg2NyAvLyAiZyIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidGhpcy50eG4iLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoidGhpcy5nb3Zlcm5vci52YWx1ZSJ9Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6ODkKCS8vIGFzc2VydChnbG9iYWxzLmdyb3VwU2l6ZSA9PT0gMikKCWdsb2JhbCBHcm91cFNpemUKCWludCAyCgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjkxCgkvLyB2ZXJpZnlQYXlUeG4oc2VlZCwgeyByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywgYW1vdW50OiB7IGdyZWF0ZXJUaGFuRXF1YWxUbzogMzAwXzAwMCB9IH0pCgkvLyB2ZXJpZnkgcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBzZWVkOiBQYXlUeG4KCWd0eG5zIFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InNlZWQiLCJmaWVsZCI6InJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBzZWVkOiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJaW50IDMwMF8wMDAKCT49CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJzZWVkIiwiZmllbGQiOiJhbW91bnQiLCJjb25kaXRpb24iOiJncmVhdGVyVGhhbkVxdWFsVG8iLCJleHBlY3RlZCI6Ij49MzAwXzAwMCJ9Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6OTIKCS8vIGFzc2VydChhQXNzZXQgPCBiQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBBc3NldElECglmcmFtZV9kaWcgLTMgLy8gYkFzc2V0OiBBc3NldElECgk8Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6OTQKCS8vIHRoaXMuYXNzZXRBLnZhbHVlID0gYUFzc2V0CglieXRlIDB4NjEgLy8gImEiCglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBBc3NldElECglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo5NQoJLy8gdGhpcy5hc3NldEIudmFsdWUgPSBiQXNzZXQKCWJ5dGUgMHg2MiAvLyAiYiIKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IEFzc2V0SUQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjk2CgkvLyB0aGlzLnBvb2xUb2tlbi52YWx1ZSA9IHRoaXMuZG9DcmVhdGVQb29sVG9rZW4oYUFzc2V0LCBiQXNzZXQpCglieXRlIDB4NzAgLy8gInAiCglmcmFtZV9kaWcgLTMgLy8gYkFzc2V0OiBBc3NldElECglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBBc3NldElECgljYWxsc3ViIGRvQ3JlYXRlUG9vbFRva2VuCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo5OAoJLy8gdGhpcy5kb09wdEluKGFBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyBhQXNzZXQ6IEFzc2V0SUQKCWNhbGxzdWIgZG9PcHRJbgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo5OQoJLy8gdGhpcy5kb09wdEluKGJBc3NldCkKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IEFzc2V0SUQKCWNhbGxzdWIgZG9PcHRJbgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMDEKCS8vIHJldHVybiB0aGlzLnBvb2xUb2tlbi52YWx1ZTsKCWJ5dGUgMHg3MCAvLyAicCIKCWFwcF9nbG9iYWxfZ2V0CglyZXRzdWIKCi8vIG1pbnQoYXhmZXIsYXhmZXIsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX21pbnQ6CgkvLyBiQXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoKCS8vIGFBc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcG9vbEFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBiWGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoKCS8vIGFyZ3VtZW50IDMgKGJYZmVyKSBmb3IgbWludCBtdXN0IGJlIGEgYXhmZXIgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGFYZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAyCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09CgoJLy8gYXJndW1lbnQgNCAoYVhmZXIpIGZvciBtaW50IG11c3QgYmUgYSBheGZlciB0cmFuc2FjdGlvbgoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBtaW50KGF4ZmVyLGF4ZmVyLHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQKCWNhbGxzdWIgbWludAoJaW50IDEKCXJldHVybgoKLy8gbWludChhWGZlcjogQXNzZXRUcmFuc2ZlclR4biwgYlhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHBvb2xBc3NldDogQXNzZXRJRCwgYUFzc2V0OiBBc3NldElELCBiQXNzZXQ6IEFzc2V0SUQpOiB2b2lkCm1pbnQ6Cglwcm90byA1IDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIHdlbGwgZm9ybWVkIG1pbnQKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMDYKCS8vIGFzc2VydChhQXNzZXQgPT09IHRoaXMuYXNzZXRBLnZhbHVlKQoJZnJhbWVfZGlnIC00IC8vIGFBc3NldDogQXNzZXRJRAoJYnl0ZSAweDYxIC8vICJhIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTA3CgkvLyBhc3NlcnQoYkFzc2V0ID09PSB0aGlzLmFzc2V0Qi52YWx1ZSkKCWZyYW1lX2RpZyAtNSAvLyBiQXNzZXQ6IEFzc2V0SUQKCWJ5dGUgMHg2MiAvLyAiYiIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEwOAoJLy8gYXNzZXJ0KHBvb2xBc3NldCA9PT0gdGhpcy5wb29sVG9rZW4udmFsdWUpCglmcmFtZV9kaWcgLTMgLy8gcG9vbEFzc2V0OiBBc3NldElECglieXRlIDB4NzAgLy8gInAiCglhcHBfZ2xvYmFsX2dldAoJPT0KCWFzc2VydAoKCS8vIHZhbGlkIGFzc2V0IEEgYXhmZXIKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMTEKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYVhmZXIsIHsKCS8vICAgICAgIHNlbmRlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IHsgZ3JlYXRlclRoYW46IDAgfSwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFBc3NldCwKCS8vICAgICB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBTZW5kZXIKCXR4biBTZW5kZXIKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJhWGZlciIsImZpZWxkIjoic2VuZGVyIiwiZXhwZWN0ZWQiOiJ0aGlzLnR4bi5zZW5kZXIifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYVhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpbnQgMAoJPgoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoiYVhmZXIiLCJmaWVsZCI6ImFzc2V0QW1vdW50IiwiY29uZGl0aW9uIjoiZ3JlYXRlclRoYW4iLCJleHBlY3RlZCI6Ij4wIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYVhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoiYVhmZXIiLCJmaWVsZCI6ImFzc2V0UmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IHhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWZyYW1lX2RpZyAtNCAvLyBhQXNzZXQ6IEFzc2V0SUQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJhWGZlciIsImZpZWxkIjoieGZlckFzc2V0IiwiZXhwZWN0ZWQiOiJhQXNzZXQifQoJYXNzZXJ0CgoJLy8gdmFsaWQgYXNzZXQgQiBheGZlcgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjExOQoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihiWGZlciwgewoJLy8gICAgICAgc2VuZGVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogeyBncmVhdGVyVGhhbjogMCB9LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIHhmZXJBc3NldDogYkFzc2V0LAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgc2VuZGVyCglmcmFtZV9kaWcgLTIgLy8gYlhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFNlbmRlcgoJdHhuIFNlbmRlcgoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6ImJYZmVyIiwiZmllbGQiOiJzZW5kZXIiLCJleHBlY3RlZCI6InRoaXMudHhuLnNlbmRlciJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWludCAwCgk+CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJiWGZlciIsImZpZWxkIjoiYXNzZXRBbW91bnQiLCJjb25kaXRpb24iOiJncmVhdGVyVGhhbiIsImV4cGVjdGVkIjoiPjAifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJiWGZlciIsImZpZWxkIjoiYXNzZXRSZWNlaXZlciIsImV4cGVjdGVkIjoidGhpcy5hcHAuYWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgeGZlckFzc2V0CglmcmFtZV9kaWcgLTIgLy8gYlhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJZnJhbWVfZGlnIC01IC8vIGJBc3NldDogQXNzZXRJRAoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6ImJYZmVyIiwiZmllbGQiOiJ4ZmVyQXNzZXQiLCJleHBlY3RlZCI6ImJBc3NldCJ9Cglhc3NlcnQKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEyNwoJLy8gdGhpcy5hcHAuYWRkcmVzcy5hc3NldEJhbGFuY2UoYUFzc2V0KSA9PT0gYVhmZXIuYXNzZXRBbW91bnQgJiYKCS8vICAgICAgIHRoaXMuYXBwLmFkZHJlc3MuYXNzZXRCYWxhbmNlKGJBc3NldCkgPT09IGJYZmVyLmFzc2V0QW1vdW50CglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC00IC8vIGFBc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAtMSAvLyBhWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCT09CglkdXAKCWJ6ICpza2lwX2FuZDAKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTUgLy8gYkFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIC0yIC8vIGJYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJPT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmMF9lbHNlCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTMwCgkvLyB0aGlzLnRva2Vuc1RvTWludEludGlhbChhWGZlci5hc3NldEFtb3VudCwgYlhmZXIuYXNzZXRBbW91bnQpCglmcmFtZV9kaWcgLTIgLy8gYlhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYVhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CgljYWxsc3ViIHRva2Vuc1RvTWludEludGlhbAoJYiAqaWYwX2VuZAoKKmlmMF9lbHNlOgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEzMgoJLy8gdG9NaW50ID0gdGhpcy50b2tlbnNUb01pbnQoCgkvLyAgICAgICAgIFRPVEFMX1NVUFBMWSAtIHRoaXMuYXBwLmFkZHJlc3MuYXNzZXRCYWxhbmNlKHBvb2xBc3NldCksCgkvLyAgICAgICAgIHRoaXMuYXBwLmFkZHJlc3MuYXNzZXRCYWxhbmNlKGFBc3NldCkgLSBhWGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgdGhpcy5hcHAuYWRkcmVzcy5hc3NldEJhbGFuY2UoYkFzc2V0KSAtIGJYZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICBhWGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgYlhmZXIuYXNzZXRBbW91bnQKCS8vICAgICAgICkKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBhWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTUgLy8gYkFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIC0yIC8vIGJYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJLQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtNCAvLyBhQXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgLTEgLy8gYVhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CgktCglpbnQgMTAwMDAwMDAwMDAKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTMgLy8gcG9vbEFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJLQoJY2FsbHN1YiB0b2tlbnNUb01pbnQKCWZyYW1lX2J1cnkgMCAvLyB0b01pbnQ6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNDAKCS8vIGFzc2VydCh0b01pbnQgPiAwKQoJZnJhbWVfZGlnIDAgLy8gdG9NaW50OiB1aW50NjQKCWludCAwCgk+Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTQyCgkvLyB0aGlzLmRvQXhmZXIodGhpcy50eG4uc2VuZGVyLCBwb29sQXNzZXQsIHRvTWludCkKCWZyYW1lX2RpZyAwIC8vIHRvTWludDogdWludDY0CglmcmFtZV9kaWcgLTMgLy8gcG9vbEFzc2V0OiBBc3NldElECgl0eG4gU2VuZGVyCgljYWxsc3ViIGRvQXhmZXIKCippZjBfZW5kOgoJcmV0c3ViCgovLyBidXJuKGF4ZmVyLHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQKKmFiaV9yb3V0ZV9idXJuOgoJLy8gYkFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCgkvLyBhQXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHBvb2xBc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gcG9vbFhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCgkvLyBhcmd1bWVudCAzIChwb29sWGZlcikgZm9yIGJ1cm4gbXVzdCBiZSBhIGF4ZmVyIHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBleGVjdXRlIGJ1cm4oYXhmZXIsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoJY2FsbHN1YiBidXJuCglpbnQgMQoJcmV0dXJuCgovLyBidXJuKHBvb2xYZmVyOiBBc3NldFRyYW5zZmVyVHhuLCBwb29sQXNzZXQ6IEFzc2V0SUQsIGFBc3NldDogQXNzZXRJRCwgYkFzc2V0OiBBc3NldElEKTogdm9pZApidXJuOgoJcHJvdG8gNCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIHdlbGwgZm9ybWVkIGJ1cm4KCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNDgKCS8vIGFzc2VydChwb29sQXNzZXQgPT09IHRoaXMucG9vbFRva2VuLnZhbHVlKQoJZnJhbWVfZGlnIC0yIC8vIHBvb2xBc3NldDogQXNzZXRJRAoJYnl0ZSAweDcwIC8vICJwIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTQ5CgkvLyBhc3NlcnQoYUFzc2V0ID09PSB0aGlzLmFzc2V0QS52YWx1ZSkKCWZyYW1lX2RpZyAtMyAvLyBhQXNzZXQ6IEFzc2V0SUQKCWJ5dGUgMHg2MSAvLyAiYSIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE1MAoJLy8gYXNzZXJ0KGJBc3NldCA9PT0gdGhpcy5hc3NldEIudmFsdWUpCglmcmFtZV9kaWcgLTQgLy8gYkFzc2V0OiBBc3NldElECglieXRlIDB4NjIgLy8gImIiCglhcHBfZ2xvYmFsX2dldAoJPT0KCWFzc2VydAoKCS8vIHZhbGlkIHBvb2wgYXhmZXIKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNTMKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4ocG9vbFhmZXIsIHsKCS8vICAgICAgIHNlbmRlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IHsgZ3JlYXRlclRoYW46IDAgfSwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IHBvb2xBc3NldCwKCS8vICAgICB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBTZW5kZXIKCXR4biBTZW5kZXIKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJwb29sWGZlciIsImZpZWxkIjoic2VuZGVyIiwiZXhwZWN0ZWQiOiJ0aGlzLnR4bi5zZW5kZXIifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gcG9vbFhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpbnQgMAoJPgoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoicG9vbFhmZXIiLCJmaWVsZCI6ImFzc2V0QW1vdW50IiwiY29uZGl0aW9uIjoiZ3JlYXRlclRoYW4iLCJleHBlY3RlZCI6Ij4wIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gcG9vbFhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoicG9vbFhmZXIiLCJmaWVsZCI6ImFzc2V0UmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IHhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWZyYW1lX2RpZyAtMiAvLyBwb29sQXNzZXQ6IEFzc2V0SUQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJwb29sWGZlciIsImZpZWxkIjoieGZlckFzc2V0IiwiZXhwZWN0ZWQiOiJwb29sQXNzZXQifQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE2MAoJLy8gaXNzdWVkID0gVE9UQUxfU1VQUExZIC0gKHRoaXMuYXBwLmFkZHJlc3MuYXNzZXRCYWxhbmNlKHBvb2xBc3NldCkgLSBwb29sWGZlci5hc3NldEFtb3VudCkKCWludCAxMDAwMDAwMDAwMAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBwb29sQXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgLTEgLy8gcG9vbFhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CgktCgktCglmcmFtZV9idXJ5IDAgLy8gaXNzdWVkOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTYyCgkvLyBhQW10ID0gdGhpcy50b2tlbnNUb0J1cm4oaXNzdWVkLCB0aGlzLmFwcC5hZGRyZXNzLmFzc2V0QmFsYW5jZShhQXNzZXQpLCBwb29sWGZlci5hc3NldEFtb3VudCkKCWZyYW1lX2RpZyAtMSAvLyBwb29sWGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTMgLy8gYUFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaXNzdWVkOiB1aW50NjQKCWNhbGxzdWIgdG9rZW5zVG9CdXJuCglmcmFtZV9idXJ5IDEgLy8gYUFtdDogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE2NAoJLy8gYkFtdCA9IHRoaXMudG9rZW5zVG9CdXJuKGlzc3VlZCwgdGhpcy5hcHAuYWRkcmVzcy5hc3NldEJhbGFuY2UoYkFzc2V0KSwgcG9vbFhmZXIuYXNzZXRBbW91bnQpCglmcmFtZV9kaWcgLTEgLy8gcG9vbFhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC00IC8vIGJBc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGlzc3VlZDogdWludDY0CgljYWxsc3ViIHRva2Vuc1RvQnVybgoJZnJhbWVfYnVyeSAyIC8vIGJBbXQ6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNjYKCS8vIHRoaXMuZG9BeGZlcih0aGlzLnR4bi5zZW5kZXIsIGFBc3NldCwgYUFtdCkKCWZyYW1lX2RpZyAxIC8vIGFBbXQ6IHVpbnQ2NAoJZnJhbWVfZGlnIC0zIC8vIGFBc3NldDogQXNzZXRJRAoJdHhuIFNlbmRlcgoJY2FsbHN1YiBkb0F4ZmVyCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE2NwoJLy8gdGhpcy5kb0F4ZmVyKHRoaXMudHhuLnNlbmRlciwgYkFzc2V0LCBiQW10KQoJZnJhbWVfZGlnIDIgLy8gYkFtdDogdWludDY0CglmcmFtZV9kaWcgLTQgLy8gYkFzc2V0OiBBc3NldElECgl0eG4gU2VuZGVyCgljYWxsc3ViIGRvQXhmZXIKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTY5CgkvLyB0aGlzLnJhdGlvLnZhbHVlID0gdGhpcy5jb21wdXRlUmF0aW8oKQoJYnl0ZSAweDcyIC8vICJyIgoJY2FsbHN1YiBjb21wdXRlUmF0aW8KCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIHN3YXAoYXhmZXIsdWludDY0LHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfc3dhcDoKCS8vIGJBc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gYUFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBzd2FwWGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoKCS8vIGFyZ3VtZW50IDIgKHN3YXBYZmVyKSBmb3Igc3dhcCBtdXN0IGJlIGEgYXhmZXIgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgc3dhcChheGZlcix1aW50NjQsdWludDY0KXZvaWQKCWNhbGxzdWIgc3dhcAoJaW50IDEKCXJldHVybgoKLy8gc3dhcChzd2FwWGZlcjogQXNzZXRUcmFuc2ZlclR4biwgYUFzc2V0OiBBc3NldElELCBiQXNzZXQ6IEFzc2V0SUQpOiB2b2lkCnN3YXA6Cglwcm90byAzIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gd2VsbCBmb3JtZWQgc3dhcAoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE3NAoJLy8gYXNzZXJ0KGFBc3NldCA9PT0gdGhpcy5hc3NldEEudmFsdWUpCglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBBc3NldElECglieXRlIDB4NjEgLy8gImEiCglhcHBfZ2xvYmFsX2dldAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNzUKCS8vIGFzc2VydChiQXNzZXQgPT09IHRoaXMuYXNzZXRCLnZhbHVlKQoJZnJhbWVfZGlnIC0zIC8vIGJBc3NldDogQXNzZXRJRAoJYnl0ZSAweDYyIC8vICJiIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTc3CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKHN3YXBYZmVyLCB7CgkvLyAgICAgICBhc3NldEFtb3VudDogeyBncmVhdGVyVGhhbjogMCB9LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIHNlbmRlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgeGZlckFzc2V0OiB7IGluY2x1ZGVkSW46IFthQXNzZXQsIGJBc3NldF0gfSwKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gc3dhcFhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpbnQgMAoJPgoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoic3dhcFhmZXIiLCJmaWVsZCI6ImFzc2V0QW1vdW50IiwiY29uZGl0aW9uIjoiZ3JlYXRlclRoYW4iLCJleHBlY3RlZCI6Ij4wIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gc3dhcFhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoic3dhcFhmZXIiLCJmaWVsZCI6ImFzc2V0UmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IHNlbmRlcgoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBTZW5kZXIKCXR4biBTZW5kZXIKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJzd2FwWGZlciIsImZpZWxkIjoic2VuZGVyIiwiZXhwZWN0ZWQiOiJ0aGlzLnR4bi5zZW5kZXIifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IHhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWZyYW1lX2RpZyAtMiAvLyBhQXNzZXQ6IEFzc2V0SUQKCT09CglmcmFtZV9kaWcgLTEgLy8gc3dhcFhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJZnJhbWVfZGlnIC0zIC8vIGJBc3NldDogQXNzZXRJRAoJPT0KCXx8CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOnsidHhuVGV4dCI6InN3YXBYZmVyIn0sImZpZWxkIjoieGZlckFzc2V0IiwiY29uZGl0aW9uIjoiaW5jbHVkZWRJbiIsImV4cGVjdGVkIjoiW2FBc3NldCwgYkFzc2V0XSJ9Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTg0CgkvLyBvdXRJZCA9IHN3YXBYZmVyLnhmZXJBc3NldCA9PT0gYUFzc2V0ID8gYUFzc2V0IDogYkFzc2V0CglmcmFtZV9kaWcgLTEgLy8gc3dhcFhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJZnJhbWVfZGlnIC0yIC8vIGFBc3NldDogQXNzZXRJRAoJPT0KCWJ6ICp0ZXJuYXJ5M19mYWxzZQoJZnJhbWVfZGlnIC0yIC8vIGFBc3NldDogQXNzZXRJRAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglmcmFtZV9kaWcgLTMgLy8gYkFzc2V0OiBBc3NldElECgoqdGVybmFyeTNfZW5kOgoJZnJhbWVfYnVyeSAwIC8vIG91dElkOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTg2CgkvLyBpbklkID0gc3dhcFhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gc3dhcFhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJZnJhbWVfYnVyeSAxIC8vIGluSWQ6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxODgKCS8vIHRvU3dhcCA9IHRoaXMudG9rZW5zVG9Td2FwKAoJLy8gICAgICAgc3dhcFhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB0aGlzLmFwcC5hZGRyZXNzLmFzc2V0QmFsYW5jZShpbklkKSAtIHN3YXBYZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgdGhpcy5hcHAuYWRkcmVzcy5hc3NldEJhbGFuY2Uob3V0SWQpCgkvLyAgICAgKQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIG91dElkOiB1aW50NjQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIDEgLy8gaW5JZDogdWludDY0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJLQoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJY2FsbHN1YiB0b2tlbnNUb1N3YXAKCWZyYW1lX2J1cnkgMiAvLyB0b1N3YXA6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxOTQKCS8vIGFzc2VydCh0b1N3YXAgPiAwKQoJZnJhbWVfZGlnIDIgLy8gdG9Td2FwOiB1aW50NjQKCWludCAwCgk+Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTk2CgkvLyB0aGlzLmRvQXhmZXIodGhpcy50eG4uc2VuZGVyLCBvdXRJZCwgdG9Td2FwKQoJZnJhbWVfZGlnIDIgLy8gdG9Td2FwOiB1aW50NjQKCWZyYW1lX2RpZyAwIC8vIG91dElkOiB1aW50NjQKCXR4biBTZW5kZXIKCWNhbGxzdWIgZG9BeGZlcgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxOTgKCS8vIHRoaXMucmF0aW8udmFsdWUgPSB0aGlzLmNvbXB1dGVSYXRpbygpCglieXRlIDB4NzIgLy8gInIiCgljYWxsc3ViIGNvbXB1dGVSYXRpbwoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAic2V0X2dvdmVybm9yKGFkZHJlc3Mpdm9pZCIKCW1ldGhvZCAiYm9vdHN0cmFwKHBheSx1aW50NjQsdWludDY0KXVpbnQ2NCIKCW1ldGhvZCAibWludChheGZlcixheGZlcix1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJidXJuKGF4ZmVyLHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQiCgltZXRob2QgInN3YXAoYXhmZXIsdWludDY0LHVpbnQ2NCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9zZXRfZ292ZXJub3IgKmFiaV9yb3V0ZV9ib290c3RyYXAgKmFiaV9yb3V0ZV9taW50ICphYmlfcm91dGVfYnVybiAqYWJpX3JvdXRlX3N3YXAKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/examples/amm/tealscript_artifacts/ConstantProductAMM.src_map.json b/examples/amm/tealscript_artifacts/ConstantProductAMM.src_map.json index ef6b7bb9d..fe5c72f3b 100644 --- a/examples/amm/tealscript_artifacts/ConstantProductAMM.src_map.json +++ b/examples/amm/tealscript_artifacts/ConstantProductAMM.src_map.json @@ -189,14 +189,14 @@ ] }, { - "teal": 56, + "teal": 58, "source": 26, "pc": [ 80 ] }, { - "teal": 57, + "teal": 59, "source": 26, "pc": [ 81, @@ -204,7 +204,7 @@ ] }, { - "teal": 58, + "teal": 60, "source": 26, "pc": [ 83, @@ -212,8 +212,8 @@ ] }, { - "teal": 62, - "source": 27, + "teal": 64, + "source": 28, "pc": [ 85, 86, @@ -224,38 +224,38 @@ ] }, { - "teal": 63, - "source": 27, + "teal": 65, + "source": 28, "pc": [ 91, 92 ] }, { - "teal": 64, - "source": 27, + "teal": 66, + "source": 28, "pc": [ 93, 94 ] }, { - "teal": 65, - "source": 27, + "teal": 67, + "source": 28, "pc": [ 95 ] }, { - "teal": 66, - "source": 27, + "teal": 68, + "source": 28, "pc": [ 96 ] }, { - "teal": 67, - "source": 27, + "teal": 69, + "source": 28, "pc": [ 97, 98, @@ -263,53 +263,53 @@ ] }, { - "teal": 68, - "source": 27, + "teal": 70, + "source": 28, "pc": [ 100 ] }, { - "teal": 69, - "source": 27, + "teal": 71, + "source": 28, "pc": [ 101, 102 ] }, { - "teal": 70, - "source": 27, + "teal": 72, + "source": 28, "pc": [ 103, 104 ] }, { - "teal": 71, - "source": 27, + "teal": 73, + "source": 28, "pc": [ 105 ] }, { - "teal": 72, - "source": 27, + "teal": 74, + "source": 28, "pc": [ 106 ] }, { - "teal": 73, - "source": 27, + "teal": 75, + "source": 28, "pc": [ 107, 108 ] }, { - "teal": 77, - "source": 28, + "teal": 79, + "source": 29, "pc": [ 109, 110, @@ -319,86 +319,86 @@ ] }, { - "teal": 78, - "source": 28, + "teal": 80, + "source": 29, "pc": [ 114, 115 ] }, { - "teal": 82, - "source": 29, + "teal": 84, + "source": 30, "pc": [ 116, 117 ] }, { - "teal": 83, - "source": 29, + "teal": 85, + "source": 30, "pc": [ 118, 119 ] }, { - "teal": 87, - "source": 30, + "teal": 89, + "source": 31, "pc": [ 120, 121 ] }, { - "teal": 88, - "source": 30, + "teal": 90, + "source": 31, "pc": [ 122, 123 ] }, { - "teal": 92, - "source": 31, + "teal": 94, + "source": 32, "pc": [ 124, 125 ] }, { - "teal": 93, - "source": 31, + "teal": 95, + "source": 32, "pc": [ 126, 127 ] }, { - "teal": 97, - "source": 32, + "teal": 99, + "source": 33, "pc": [ 128, 129 ] }, { - "teal": 98, - "source": 32, + "teal": 100, + "source": 33, "pc": [ 130, 131 ] }, { - "teal": 101, + "teal": 103, "source": 26, "pc": [ 132 ] }, { - "teal": 102, + "teal": 104, "source": 26, "pc": [ 133, @@ -406,14 +406,14 @@ ] }, { - "teal": 105, + "teal": 107, "source": 26, "pc": [ 135 ] }, { - "teal": 106, + "teal": 108, "source": 26, "pc": [ 136, @@ -421,15 +421,15 @@ ] }, { - "teal": 107, + "teal": 109, "source": 23, "pc": [ 138 ] }, { - "teal": 111, - "source": 36, + "teal": 113, + "source": 38, "pc": [ 139, 140, @@ -437,107 +437,107 @@ ] }, { - "teal": 119, - "source": 37, + "teal": 123, + "source": 39, "pc": [ 142 ] }, { - "teal": 120, - "source": 37, + "teal": 124, + "source": 39, "pc": [ 143 ] }, { - "teal": 121, - "source": 37, + "teal": 125, + "source": 39, "pc": [ 144, 145 ] }, { - "teal": 125, - "source": 38, + "teal": 129, + "source": 41, "pc": [ 146, 147 ] }, { - "teal": 126, - "source": 38, + "teal": 130, + "source": 41, "pc": [ 148, 149 ] }, { - "teal": 130, - "source": 39, + "teal": 134, + "source": 42, "pc": [ 150, 151 ] }, { - "teal": 131, - "source": 39, + "teal": 135, + "source": 42, "pc": [ 152, 153 ] }, { - "teal": 135, - "source": 40, + "teal": 139, + "source": 43, "pc": [ 154, 155 ] }, { - "teal": 136, - "source": 40, + "teal": 140, + "source": 43, "pc": [ 156, 157 ] }, { - "teal": 139, - "source": 37, + "teal": 143, + "source": 39, "pc": [ 158 ] }, { - "teal": 140, - "source": 37, + "teal": 144, + "source": 39, "pc": [ 159, 160 ] }, { - "teal": 143, - "source": 37, + "teal": 147, + "source": 39, "pc": [ 161 ] }, { - "teal": 144, - "source": 36, + "teal": 148, + "source": 38, "pc": [ 162 ] }, { - "teal": 148, - "source": 44, + "teal": 152, + "source": 48, "pc": [ 163, 164, @@ -545,31 +545,31 @@ ] }, { - "teal": 152, - "source": 45, + "teal": 156, + "source": 49, "pc": [ 166 ] }, { - "teal": 153, - "source": 45, + "teal": 157, + "source": 49, "pc": [ 167, 168 ] }, { - "teal": 154, - "source": 45, + "teal": 158, + "source": 49, "pc": [ 169, 170 ] }, { - "teal": 155, - "source": 45, + "teal": 159, + "source": 49, "pc": [ 171, 172, @@ -577,15 +577,15 @@ ] }, { - "teal": 156, - "source": 44, + "teal": 160, + "source": 48, "pc": [ 174 ] }, { - "teal": 160, - "source": 48, + "teal": 164, + "source": 52, "pc": [ 175, 176, @@ -593,45 +593,45 @@ ] }, { - "teal": 164, - "source": 49, + "teal": 168, + "source": 53, "pc": [ 178, 179 ] }, { - "teal": 165, - "source": 49, + "teal": 169, + "source": 53, "pc": [ 180, 181 ] }, { - "teal": 166, - "source": 49, + "teal": 170, + "source": 53, "pc": [ 182 ] }, { - "teal": 167, - "source": 49, + "teal": 171, + "source": 53, "pc": [ 183 ] }, { - "teal": 168, - "source": 48, + "teal": 172, + "source": 52, "pc": [ 184 ] }, { - "teal": 172, - "source": 52, + "teal": 176, + "source": 56, "pc": [ 185, 186, @@ -639,222 +639,222 @@ ] }, { - "teal": 175, - "source": 52, + "teal": 179, + "source": 56, "pc": [ 188 ] }, { - "teal": 176, - "source": 52, + "teal": 180, + "source": 56, "pc": [ 189, 190 ] }, { - "teal": 180, - "source": 53, + "teal": 184, + "source": 57, "pc": [ 191, 192 ] }, { - "teal": 181, - "source": 53, + "teal": 185, + "source": 57, "pc": [ 193 ] }, { - "teal": 182, - "source": 53, + "teal": 186, + "source": 57, "pc": [ 194 ] }, { - "teal": 183, - "source": 53, + "teal": 187, + "source": 57, "pc": [ 195 ] }, { - "teal": 184, - "source": 53, + "teal": 188, + "source": 57, "pc": [ 196, 197 ] }, { - "teal": 185, - "source": 53, + "teal": 189, + "source": 57, "pc": [ 198 ] }, { - "teal": 186, - "source": 53, + "teal": 190, + "source": 57, "pc": [ 199 ] }, { - "teal": 187, - "source": 53, + "teal": 191, + "source": 57, "pc": [ 200 ] }, { - "teal": 188, - "source": 53, + "teal": 192, + "source": 57, "pc": [ 201 ] }, { - "teal": 189, - "source": 53, + "teal": 193, + "source": 57, "pc": [ 202 ] }, { - "teal": 192, - "source": 53, + "teal": 196, + "source": 57, "errorMessage": "wideRatio failed", "pc": [ 203 ] }, { - "teal": 193, - "source": 53, + "teal": 197, + "source": 57, "pc": [ 204, 205 ] }, { - "teal": 197, - "source": 54, + "teal": 201, + "source": 58, "pc": [ 206, 207 ] }, { - "teal": 198, - "source": 54, + "teal": 202, + "source": 58, "pc": [ 208 ] }, { - "teal": 199, - "source": 54, + "teal": 203, + "source": 58, "pc": [ 209 ] }, { - "teal": 200, - "source": 54, + "teal": 204, + "source": 58, "pc": [ 210 ] }, { - "teal": 201, - "source": 54, + "teal": 205, + "source": 58, "pc": [ 211, 212 ] }, { - "teal": 202, - "source": 54, + "teal": 206, + "source": 58, "pc": [ 213 ] }, { - "teal": 203, - "source": 54, + "teal": 207, + "source": 58, "pc": [ 214 ] }, { - "teal": 204, - "source": 54, + "teal": 208, + "source": 58, "pc": [ 215 ] }, { - "teal": 205, - "source": 54, + "teal": 209, + "source": 58, "pc": [ 216 ] }, { - "teal": 206, - "source": 54, + "teal": 210, + "source": 58, "pc": [ 217 ] }, { - "teal": 209, - "source": 54, + "teal": 213, + "source": 58, "errorMessage": "wideRatio failed", "pc": [ 218 ] }, { - "teal": 210, - "source": 54, + "teal": 214, + "source": 58, "pc": [ 219, 220 ] }, { - "teal": 214, - "source": 56, + "teal": 218, + "source": 60, "pc": [ 221, 222 ] }, { - "teal": 215, - "source": 56, + "teal": 219, + "source": 60, "pc": [ 223, 224 ] }, { - "teal": 216, - "source": 56, + "teal": 220, + "source": 60, "pc": [ 225 ] }, { - "teal": 217, - "source": 56, + "teal": 221, + "source": 60, "pc": [ 226, 227, @@ -862,16 +862,16 @@ ] }, { - "teal": 218, - "source": 56, + "teal": 222, + "source": 60, "pc": [ 229, 230 ] }, { - "teal": 219, - "source": 56, + "teal": 223, + "source": 60, "pc": [ 231, 232, @@ -879,127 +879,127 @@ ] }, { - "teal": 222, - "source": 56, + "teal": 226, + "source": 60, "pc": [ 234, 235 ] }, { - "teal": 225, - "source": 56, + "teal": 229, + "source": 60, "pc": [ 236, 237 ] }, { - "teal": 229, - "source": 58, + "teal": 233, + "source": 62, "pc": [ 238, 239 ] }, { - "teal": 230, - "source": 58, + "teal": 234, + "source": 62, "pc": [ 240, 241 ] }, { - "teal": 231, - "source": 58, + "teal": 235, + "source": 62, "pc": [ 242 ] }, { - "teal": 232, - "source": 58, + "teal": 236, + "source": 62, "pc": [ 243 ] }, { - "teal": 233, - "source": 58, + "teal": 237, + "source": 62, "pc": [ 244 ] }, { - "teal": 234, - "source": 58, + "teal": 238, + "source": 62, "pc": [ 245 ] }, { - "teal": 235, - "source": 58, + "teal": 239, + "source": 62, "pc": [ 246 ] }, { - "teal": 236, - "source": 58, + "teal": 240, + "source": 62, "pc": [ 247 ] }, { - "teal": 237, - "source": 58, + "teal": 241, + "source": 62, "pc": [ 248 ] }, { - "teal": 238, - "source": 58, + "teal": 242, + "source": 62, "pc": [ 249 ] }, { - "teal": 241, - "source": 58, + "teal": 245, + "source": 62, "errorMessage": "wideRatio failed", "pc": [ 250 ] }, { - "teal": 244, - "source": 52, + "teal": 248, + "source": 56, "pc": [ 251, 252 ] }, { - "teal": 247, - "source": 52, + "teal": 251, + "source": 56, "pc": [ 253, 254 ] }, { - "teal": 248, - "source": 52, + "teal": 252, + "source": 56, "pc": [ 255 ] }, { - "teal": 252, - "source": 61, + "teal": 256, + "source": 65, "pc": [ 256, 257, @@ -1007,153 +1007,153 @@ ] }, { - "teal": 259, - "source": 63, + "teal": 263, + "source": 67, "pc": [ 259, 260 ] }, { - "teal": 260, - "source": 63, + "teal": 264, + "source": 67, "pc": [ 261 ] }, { - "teal": 261, - "source": 63, + "teal": 265, + "source": 67, "pc": [ 262 ] }, { - "teal": 262, - "source": 63, + "teal": 266, + "source": 67, "pc": [ 263, 264 ] }, { - "teal": 263, - "source": 63, + "teal": 267, + "source": 67, "pc": [ 265 ] }, { - "teal": 264, - "source": 63, + "teal": 268, + "source": 67, "pc": [ 266 ] }, { - "teal": 265, - "source": 62, + "teal": 269, + "source": 66, "pc": [ 267 ] }, { - "teal": 266, - "source": 62, + "teal": 270, + "source": 66, "pc": [ 268 ] }, { - "teal": 267, - "source": 64, + "teal": 271, + "source": 68, "pc": [ 269, 270 ] }, { - "teal": 268, - "source": 64, + "teal": 272, + "source": 68, "pc": [ 271 ] }, { - "teal": 269, - "source": 64, + "teal": 273, + "source": 68, "pc": [ 272 ] }, { - "teal": 270, - "source": 64, + "teal": 274, + "source": 68, "pc": [ 273, 274 ] }, { - "teal": 271, - "source": 64, + "teal": 275, + "source": 68, "pc": [ 275 ] }, { - "teal": 272, - "source": 62, + "teal": 276, + "source": 66, "pc": [ 276 ] }, { - "teal": 273, - "source": 62, + "teal": 277, + "source": 66, "pc": [ 277 ] }, { - "teal": 274, - "source": 62, + "teal": 278, + "source": 66, "pc": [ 278 ] }, { - "teal": 275, - "source": 62, + "teal": 279, + "source": 66, "pc": [ 279 ] }, { - "teal": 276, - "source": 62, + "teal": 280, + "source": 66, "pc": [ 280 ] }, { - "teal": 279, - "source": 62, + "teal": 283, + "source": 66, "errorMessage": "wideRatio failed", "pc": [ 281 ] }, { - "teal": 280, - "source": 61, + "teal": 284, + "source": 65, "pc": [ 282 ] }, { - "teal": 284, - "source": 68, + "teal": 288, + "source": 72, "pc": [ 283, 284, @@ -1161,96 +1161,96 @@ ] }, { - "teal": 288, - "source": 69, + "teal": 292, + "source": 73, "pc": [ 286, 287 ] }, { - "teal": 289, - "source": 69, + "teal": 293, + "source": 73, "pc": [ 288, 289 ] }, { - "teal": 290, - "source": 69, + "teal": 294, + "source": 73, "pc": [ 290 ] }, { - "teal": 291, - "source": 69, + "teal": 295, + "source": 73, "pc": [ 291 ] }, { - "teal": 292, - "source": 69, + "teal": 296, + "source": 73, "pc": [ 292, 293 ] }, { - "teal": 293, - "source": 69, + "teal": 297, + "source": 73, "pc": [ 294 ] }, { - "teal": 294, - "source": 69, + "teal": 298, + "source": 73, "pc": [ 295 ] }, { - "teal": 295, - "source": 69, + "teal": 299, + "source": 73, "pc": [ 296 ] }, { - "teal": 296, - "source": 69, + "teal": 300, + "source": 73, "pc": [ 297 ] }, { - "teal": 297, - "source": 69, + "teal": 301, + "source": 73, "pc": [ 298 ] }, { - "teal": 300, - "source": 69, + "teal": 304, + "source": 73, "errorMessage": "wideRatio failed", "pc": [ 299 ] }, { - "teal": 301, - "source": 68, + "teal": 305, + "source": 72, "pc": [ 300 ] }, { - "teal": 305, - "source": 72, + "teal": 309, + "source": 76, "pc": [ 301, 302, @@ -1258,15 +1258,15 @@ ] }, { - "teal": 308, - "source": 72, + "teal": 312, + "source": 76, "pc": [ 304 ] }, { - "teal": 312, - "source": 73, + "teal": 316, + "source": 77, "pc": [ 305, 306, @@ -1274,224 +1274,224 @@ ] }, { - "teal": 313, - "source": 73, + "teal": 317, + "source": 77, "pc": [ 308, 309 ] }, { - "teal": 317, - "source": 74, + "teal": 321, + "source": 78, "pc": [ 310, 311 ] }, { - "teal": 318, - "source": 74, + "teal": 322, + "source": 78, "pc": [ 312, 313 ] }, { - "teal": 319, - "source": 74, + "teal": 323, + "source": 78, "pc": [ 314 ] }, { - "teal": 320, - "source": 74, + "teal": 324, + "source": 78, "pc": [ 315, 316 ] }, { - "teal": 321, - "source": 74, + "teal": 325, + "source": 78, "pc": [ 317, 318 ] }, { - "teal": 322, - "source": 74, + "teal": 326, + "source": 78, "pc": [ 319, 320 ] }, { - "teal": 323, - "source": 74, + "teal": 327, + "source": 78, "pc": [ 321 ] }, { - "teal": 324, - "source": 74, + "teal": 328, + "source": 78, "pc": [ 322, 323 ] }, { - "teal": 325, - "source": 74, + "teal": 329, + "source": 78, "pc": [ 324 ] }, { - "teal": 326, - "source": 74, + "teal": 330, + "source": 78, "pc": [ 325, 326 ] }, { - "teal": 327, - "source": 74, + "teal": 331, + "source": 78, "pc": [ 327 ] }, { - "teal": 328, - "source": 74, + "teal": 332, + "source": 78, "pc": [ 328 ] }, { - "teal": 329, - "source": 74, + "teal": 333, + "source": 78, "pc": [ 329 ] }, { - "teal": 330, - "source": 74, + "teal": 334, + "source": 78, "pc": [ 330, 331 ] }, { - "teal": 331, - "source": 74, + "teal": 335, + "source": 78, "pc": [ 332 ] }, { - "teal": 332, - "source": 74, + "teal": 336, + "source": 78, "pc": [ 333 ] }, { - "teal": 333, - "source": 74, + "teal": 337, + "source": 78, "pc": [ 334, 335 ] }, { - "teal": 334, - "source": 74, + "teal": 338, + "source": 78, "pc": [ 336, 337 ] }, { - "teal": 335, - "source": 74, + "teal": 339, + "source": 78, "pc": [ 338 ] }, { - "teal": 336, - "source": 74, + "teal": 340, + "source": 78, "pc": [ 339 ] }, { - "teal": 337, - "source": 74, + "teal": 341, + "source": 78, "pc": [ 340 ] }, { - "teal": 338, - "source": 74, + "teal": 342, + "source": 78, "pc": [ 341 ] }, { - "teal": 339, - "source": 74, + "teal": 343, + "source": 78, "pc": [ 342 ] }, { - "teal": 340, - "source": 74, + "teal": 344, + "source": 78, "pc": [ 343 ] }, { - "teal": 341, - "source": 74, + "teal": 345, + "source": 78, "pc": [ 344 ] }, { - "teal": 344, - "source": 74, + "teal": 348, + "source": 78, "errorMessage": "wideRatio failed", "pc": [ 345 ] }, { - "teal": 347, - "source": 72, + "teal": 351, + "source": 76, "pc": [ 346, 347 ] }, { - "teal": 348, - "source": 72, + "teal": 352, + "source": 76, "pc": [ 348 ] }, { - "teal": 353, - "source": 77, + "teal": 357, + "source": 81, "pc": [ 349, 350, @@ -1499,45 +1499,45 @@ ] }, { - "teal": 354, - "source": 77, + "teal": 358, + "source": 81, "pc": [ 352 ] }, { - "teal": 355, - "source": 77, + "teal": 359, + "source": 81, "pc": [ 353 ] }, { - "teal": 356, - "source": 77, + "teal": 360, + "source": 81, "pc": [ 354, 355 ] }, { - "teal": 357, - "source": 77, + "teal": 361, + "source": 81, "pc": [ 356 ] }, { - "teal": 360, - "source": 77, + "teal": 364, + "source": 81, "errorMessage": "argument 0 (governor) for set_governor must be a address", "pc": [ 357 ] }, { - "teal": 363, - "source": 77, + "teal": 367, + "source": 81, "pc": [ 358, 359, @@ -1545,22 +1545,22 @@ ] }, { - "teal": 364, - "source": 77, + "teal": 368, + "source": 81, "pc": [ 361 ] }, { - "teal": 365, - "source": 77, + "teal": 369, + "source": 81, "pc": [ 362 ] }, { - "teal": 369, - "source": 77, + "teal": 373, + "source": 81, "pc": [ 363, 364, @@ -1568,74 +1568,74 @@ ] }, { - "teal": 374, - "source": 78, + "teal": 378, + "source": 82, "pc": [ 366, 367 ] }, { - "teal": 375, - "source": 78, + "teal": 379, + "source": 82, "pc": [ 368 ] }, { - "teal": 376, - "source": 78, + "teal": 380, + "source": 82, "pc": [ 369 ] }, { - "teal": 377, - "source": 78, + "teal": 381, + "source": 82, "pc": [ 370 ] }, { - "teal": 380, - "source": 78, + "teal": 384, + "source": 82, "errorMessage": "transaction verification failed: {\"txn\":\"this.txn\",\"field\":\"sender\",\"expected\":\"this.governor.value\"}", "pc": [ 371 ] }, { - "teal": 384, - "source": 79, + "teal": 388, + "source": 83, "pc": [ 372 ] }, { - "teal": 385, - "source": 79, + "teal": 389, + "source": 83, "pc": [ 373, 374 ] }, { - "teal": 386, - "source": 79, + "teal": 390, + "source": 83, "pc": [ 375 ] }, { - "teal": 387, - "source": 77, + "teal": 391, + "source": 81, "pc": [ 376 ] }, { - "teal": 392, - "source": 82, + "teal": 396, + "source": 86, "pc": [ 377, 378, @@ -1646,8 +1646,8 @@ ] }, { - "teal": 395, - "source": 82, + "teal": 399, + "source": 86, "pc": [ 383, 384, @@ -1655,15 +1655,15 @@ ] }, { - "teal": 396, - "source": 82, + "teal": 400, + "source": 86, "pc": [ 386 ] }, { - "teal": 399, - "source": 82, + "teal": 403, + "source": 86, "pc": [ 387, 388, @@ -1671,74 +1671,74 @@ ] }, { - "teal": 400, - "source": 82, + "teal": 404, + "source": 86, "pc": [ 390 ] }, { - "teal": 403, - "source": 82, + "teal": 407, + "source": 86, "pc": [ 391, 392 ] }, { - "teal": 404, - "source": 82, + "teal": 408, + "source": 86, "pc": [ 393 ] }, { - "teal": 405, - "source": 82, + "teal": 409, + "source": 86, "pc": [ 394 ] }, { - "teal": 406, - "source": 82, + "teal": 410, + "source": 86, "pc": [ 395 ] }, { - "teal": 407, - "source": 82, + "teal": 411, + "source": 86, "pc": [ 396, 397 ] }, { - "teal": 408, - "source": 82, + "teal": 412, + "source": 86, "pc": [ 398 ] }, { - "teal": 409, - "source": 82, + "teal": 413, + "source": 86, "pc": [ 399 ] }, { - "teal": 412, - "source": 82, + "teal": 416, + "source": 86, "errorMessage": "argument 2 (seed) for bootstrap must be a pay transaction", "pc": [ 400 ] }, { - "teal": 415, - "source": 82, + "teal": 419, + "source": 86, "pc": [ 401, 402, @@ -1746,43 +1746,43 @@ ] }, { - "teal": 416, - "source": 82, + "teal": 420, + "source": 86, "pc": [ 404 ] }, { - "teal": 417, - "source": 82, + "teal": 421, + "source": 86, "pc": [ 405 ] }, { - "teal": 418, - "source": 82, + "teal": 422, + "source": 86, "pc": [ 406 ] }, { - "teal": 419, - "source": 82, + "teal": 423, + "source": 86, "pc": [ 407 ] }, { - "teal": 420, - "source": 82, + "teal": 424, + "source": 86, "pc": [ 408 ] }, { - "teal": 424, - "source": 82, + "teal": 428, + "source": 86, "pc": [ 409, 410, @@ -1790,130 +1790,130 @@ ] }, { - "teal": 429, - "source": 83, + "teal": 433, + "source": 87, "pc": [ 412, 413 ] }, { - "teal": 430, - "source": 83, + "teal": 434, + "source": 87, "pc": [ 414 ] }, { - "teal": 431, - "source": 83, + "teal": 435, + "source": 87, "pc": [ 415 ] }, { - "teal": 432, - "source": 83, + "teal": 436, + "source": 87, "pc": [ 416 ] }, { - "teal": 435, - "source": 83, + "teal": 439, + "source": 87, "errorMessage": "transaction verification failed: {\"txn\":\"this.txn\",\"field\":\"sender\",\"expected\":\"this.governor.value\"}", "pc": [ 417 ] }, { - "teal": 439, - "source": 85, + "teal": 443, + "source": 89, "pc": [ 418, 419 ] }, { - "teal": 440, - "source": 85, + "teal": 444, + "source": 89, "pc": [ 420, 421 ] }, { - "teal": 441, - "source": 85, + "teal": 445, + "source": 89, "pc": [ 422 ] }, { - "teal": 442, - "source": 85, + "teal": 446, + "source": 89, "pc": [ 423 ] }, { - "teal": 447, - "source": 87, + "teal": 451, + "source": 91, "pc": [ 424, 425 ] }, { - "teal": 448, - "source": 87, + "teal": 452, + "source": 91, "pc": [ 426, 427 ] }, { - "teal": 449, - "source": 87, + "teal": 453, + "source": 91, "pc": [ 428, 429 ] }, { - "teal": 450, - "source": 87, + "teal": 454, + "source": 91, "pc": [ 430 ] }, { - "teal": 453, - "source": 87, + "teal": 457, + "source": 91, "errorMessage": "transaction verification failed: {\"txn\":\"seed\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", "pc": [ 431 ] }, { - "teal": 456, - "source": 87, + "teal": 460, + "source": 91, "pc": [ 432, 433 ] }, { - "teal": 457, - "source": 87, + "teal": 461, + "source": 91, "pc": [ 434, 435 ] }, { - "teal": 458, - "source": 87, + "teal": 462, + "source": 91, "pc": [ 436, 437, @@ -1922,121 +1922,121 @@ ] }, { - "teal": 459, - "source": 87, + "teal": 463, + "source": 91, "pc": [ 440 ] }, { - "teal": 462, - "source": 87, + "teal": 466, + "source": 91, "errorMessage": "transaction verification failed: {\"txn\":\"seed\",\"field\":\"amount\",\"condition\":\"greaterThanEqualTo\",\"expected\":\">=300_000\"}", "pc": [ 441 ] }, { - "teal": 466, - "source": 88, + "teal": 470, + "source": 92, "pc": [ 442, 443 ] }, { - "teal": 467, - "source": 88, + "teal": 471, + "source": 92, "pc": [ 444, 445 ] }, { - "teal": 468, - "source": 88, + "teal": 472, + "source": 92, "pc": [ 446 ] }, { - "teal": 469, - "source": 88, + "teal": 473, + "source": 92, "pc": [ 447 ] }, { - "teal": 473, - "source": 90, + "teal": 477, + "source": 94, "pc": [ 448 ] }, { - "teal": 474, - "source": 90, + "teal": 478, + "source": 94, "pc": [ 449, 450 ] }, { - "teal": 475, - "source": 90, + "teal": 479, + "source": 94, "pc": [ 451 ] }, { - "teal": 479, - "source": 91, + "teal": 483, + "source": 95, "pc": [ 452 ] }, { - "teal": 480, - "source": 91, + "teal": 484, + "source": 95, "pc": [ 453, 454 ] }, { - "teal": 481, - "source": 91, + "teal": 485, + "source": 95, "pc": [ 455 ] }, { - "teal": 485, - "source": 92, + "teal": 489, + "source": 96, "pc": [ 456, 457 ] }, { - "teal": 486, - "source": 92, + "teal": 490, + "source": 96, "pc": [ 458, 459 ] }, { - "teal": 487, - "source": 92, + "teal": 491, + "source": 96, "pc": [ 460, 461 ] }, { - "teal": 488, - "source": 92, + "teal": 492, + "source": 96, "pc": [ 462, 463, @@ -2044,23 +2044,23 @@ ] }, { - "teal": 489, - "source": 92, + "teal": 493, + "source": 96, "pc": [ 465 ] }, { - "teal": 493, - "source": 94, + "teal": 497, + "source": 98, "pc": [ 466, 467 ] }, { - "teal": 494, - "source": 94, + "teal": 498, + "source": 98, "pc": [ 468, 469, @@ -2068,16 +2068,16 @@ ] }, { - "teal": 498, - "source": 95, + "teal": 502, + "source": 99, "pc": [ 471, 472 ] }, { - "teal": 499, - "source": 95, + "teal": 503, + "source": 99, "pc": [ 473, 474, @@ -2085,30 +2085,30 @@ ] }, { - "teal": 503, - "source": 97, + "teal": 507, + "source": 101, "pc": [ 476, 477 ] }, { - "teal": 504, - "source": 97, + "teal": 508, + "source": 101, "pc": [ 478 ] }, { - "teal": 505, - "source": 82, + "teal": 509, + "source": 86, "pc": [ 479 ] }, { - "teal": 510, - "source": 100, + "teal": 514, + "source": 104, "pc": [ 480, 481, @@ -2116,15 +2116,15 @@ ] }, { - "teal": 511, - "source": 100, + "teal": 515, + "source": 104, "pc": [ 483 ] }, { - "teal": 514, - "source": 100, + "teal": 518, + "source": 104, "pc": [ 484, 485, @@ -2132,15 +2132,15 @@ ] }, { - "teal": 515, - "source": 100, + "teal": 519, + "source": 104, "pc": [ 487 ] }, { - "teal": 518, - "source": 100, + "teal": 522, + "source": 104, "pc": [ 488, 489, @@ -2148,134 +2148,134 @@ ] }, { - "teal": 519, - "source": 100, + "teal": 523, + "source": 104, "pc": [ 491 ] }, { - "teal": 522, - "source": 100, + "teal": 526, + "source": 104, "pc": [ 492, 493 ] }, { - "teal": 523, - "source": 100, + "teal": 527, + "source": 104, "pc": [ 494 ] }, { - "teal": 524, - "source": 100, + "teal": 528, + "source": 104, "pc": [ 495 ] }, { - "teal": 525, - "source": 100, + "teal": 529, + "source": 104, "pc": [ 496 ] }, { - "teal": 526, - "source": 100, + "teal": 530, + "source": 104, "pc": [ 497, 498 ] }, { - "teal": 527, - "source": 100, + "teal": 531, + "source": 104, "pc": [ 499 ] }, { - "teal": 528, - "source": 100, + "teal": 532, + "source": 104, "pc": [ 500 ] }, { - "teal": 531, - "source": 100, + "teal": 535, + "source": 104, "errorMessage": "argument 3 (bXfer) for mint must be a axfer transaction", "pc": [ 501 ] }, { - "teal": 534, - "source": 100, + "teal": 538, + "source": 104, "pc": [ 502, 503 ] }, { - "teal": 535, - "source": 100, + "teal": 539, + "source": 104, "pc": [ 504, 505 ] }, { - "teal": 536, - "source": 100, + "teal": 540, + "source": 104, "pc": [ 506 ] }, { - "teal": 537, - "source": 100, + "teal": 541, + "source": 104, "pc": [ 507 ] }, { - "teal": 538, - "source": 100, + "teal": 542, + "source": 104, "pc": [ 508, 509 ] }, { - "teal": 539, - "source": 100, + "teal": 543, + "source": 104, "pc": [ 510 ] }, { - "teal": 540, - "source": 100, + "teal": 544, + "source": 104, "pc": [ 511 ] }, { - "teal": 543, - "source": 100, + "teal": 547, + "source": 104, "errorMessage": "argument 4 (aXfer) for mint must be a axfer transaction", "pc": [ 512 ] }, { - "teal": 546, - "source": 100, + "teal": 550, + "source": 104, "pc": [ 513, 514, @@ -2283,22 +2283,22 @@ ] }, { - "teal": 547, - "source": 100, + "teal": 551, + "source": 104, "pc": [ 516 ] }, { - "teal": 548, - "source": 100, + "teal": 552, + "source": 104, "pc": [ 517 ] }, { - "teal": 552, - "source": 100, + "teal": 556, + "source": 104, "pc": [ 518, 519, @@ -2306,495 +2306,495 @@ ] }, { - "teal": 555, - "source": 100, + "teal": 559, + "source": 104, "pc": [ 521 ] }, { - "teal": 560, - "source": 102, + "teal": 564, + "source": 106, "pc": [ 522, 523 ] }, { - "teal": 561, - "source": 102, + "teal": 565, + "source": 106, "pc": [ 524 ] }, { - "teal": 562, - "source": 102, + "teal": 566, + "source": 106, "pc": [ 525 ] }, { - "teal": 563, - "source": 102, + "teal": 567, + "source": 106, "pc": [ 526 ] }, { - "teal": 564, - "source": 102, + "teal": 568, + "source": 106, "pc": [ 527 ] }, { - "teal": 568, - "source": 103, + "teal": 572, + "source": 107, "pc": [ 528, 529 ] }, { - "teal": 569, - "source": 103, + "teal": 573, + "source": 107, "pc": [ 530 ] }, { - "teal": 570, - "source": 103, + "teal": 574, + "source": 107, "pc": [ 531 ] }, { - "teal": 571, - "source": 103, + "teal": 575, + "source": 107, "pc": [ 532 ] }, { - "teal": 572, - "source": 103, + "teal": 576, + "source": 107, "pc": [ 533 ] }, { - "teal": 576, - "source": 104, + "teal": 580, + "source": 108, "pc": [ 534, 535 ] }, { - "teal": 577, - "source": 104, + "teal": 581, + "source": 108, "pc": [ 536, 537 ] }, { - "teal": 578, - "source": 104, + "teal": 582, + "source": 108, "pc": [ 538 ] }, { - "teal": 579, - "source": 104, + "teal": 583, + "source": 108, "pc": [ 539 ] }, { - "teal": 580, - "source": 104, + "teal": 584, + "source": 108, "pc": [ 540 ] }, { - "teal": 591, - "source": 107, + "teal": 595, + "source": 111, "pc": [ 541, 542 ] }, { - "teal": 592, - "source": 108, + "teal": 596, + "source": 112, "pc": [ 543, 544 ] }, { - "teal": 593, - "source": 108, + "teal": 597, + "source": 112, "pc": [ 545, 546 ] }, { - "teal": 594, - "source": 108, + "teal": 598, + "source": 112, "pc": [ 547 ] }, { - "teal": 597, - "source": 108, + "teal": 601, + "source": 112, "errorMessage": "transaction verification failed: {\"txn\":\"aXfer\",\"field\":\"sender\",\"expected\":\"this.txn.sender\"}", "pc": [ 548 ] }, { - "teal": 600, - "source": 107, + "teal": 604, + "source": 111, "pc": [ 549, 550 ] }, { - "teal": 601, - "source": 109, + "teal": 605, + "source": 113, "pc": [ 551, 552 ] }, { - "teal": 602, - "source": 109, + "teal": 606, + "source": 113, "pc": [ 553 ] }, { - "teal": 603, - "source": 109, + "teal": 607, + "source": 113, "pc": [ 554 ] }, { - "teal": 606, - "source": 109, + "teal": 610, + "source": 113, "errorMessage": "transaction verification failed: {\"txn\":\"aXfer\",\"field\":\"assetAmount\",\"condition\":\"greaterThan\",\"expected\":\">0\"}", "pc": [ 555 ] }, { - "teal": 609, - "source": 107, + "teal": 613, + "source": 111, "pc": [ 556, 557 ] }, { - "teal": 610, - "source": 110, + "teal": 614, + "source": 114, "pc": [ 558, 559 ] }, { - "teal": 611, - "source": 110, + "teal": 615, + "source": 114, "pc": [ 560, 561 ] }, { - "teal": 612, - "source": 110, + "teal": 616, + "source": 114, "pc": [ 562 ] }, { - "teal": 615, - "source": 110, + "teal": 619, + "source": 114, "errorMessage": "transaction verification failed: {\"txn\":\"aXfer\",\"field\":\"assetReceiver\",\"expected\":\"this.app.address\"}", "pc": [ 563 ] }, { - "teal": 618, - "source": 107, + "teal": 622, + "source": 111, "pc": [ 564, 565 ] }, { - "teal": 619, - "source": 111, + "teal": 623, + "source": 115, "pc": [ 566, 567 ] }, { - "teal": 620, - "source": 111, + "teal": 624, + "source": 115, "pc": [ 568, 569 ] }, { - "teal": 621, - "source": 111, + "teal": 625, + "source": 115, "pc": [ 570 ] }, { - "teal": 624, - "source": 111, + "teal": 628, + "source": 115, "errorMessage": "transaction verification failed: {\"txn\":\"aXfer\",\"field\":\"xferAsset\",\"expected\":\"aAsset\"}", "pc": [ 571 ] }, { - "teal": 635, - "source": 115, + "teal": 639, + "source": 119, "pc": [ 572, 573 ] }, { - "teal": 636, - "source": 116, + "teal": 640, + "source": 120, "pc": [ 574, 575 ] }, { - "teal": 637, - "source": 116, + "teal": 641, + "source": 120, "pc": [ 576, 577 ] }, { - "teal": 638, - "source": 116, + "teal": 642, + "source": 120, "pc": [ 578 ] }, { - "teal": 641, - "source": 116, + "teal": 645, + "source": 120, "errorMessage": "transaction verification failed: {\"txn\":\"bXfer\",\"field\":\"sender\",\"expected\":\"this.txn.sender\"}", "pc": [ 579 ] }, { - "teal": 644, - "source": 115, + "teal": 648, + "source": 119, "pc": [ 580, 581 ] }, { - "teal": 645, - "source": 117, + "teal": 649, + "source": 121, "pc": [ 582, 583 ] }, { - "teal": 646, - "source": 117, + "teal": 650, + "source": 121, "pc": [ 584 ] }, { - "teal": 647, - "source": 117, + "teal": 651, + "source": 121, "pc": [ 585 ] }, { - "teal": 650, - "source": 117, + "teal": 654, + "source": 121, "errorMessage": "transaction verification failed: {\"txn\":\"bXfer\",\"field\":\"assetAmount\",\"condition\":\"greaterThan\",\"expected\":\">0\"}", "pc": [ 586 ] }, { - "teal": 653, - "source": 115, + "teal": 657, + "source": 119, "pc": [ 587, 588 ] }, { - "teal": 654, - "source": 118, + "teal": 658, + "source": 122, "pc": [ 589, 590 ] }, { - "teal": 655, - "source": 118, + "teal": 659, + "source": 122, "pc": [ 591, 592 ] }, { - "teal": 656, - "source": 118, + "teal": 660, + "source": 122, "pc": [ 593 ] }, { - "teal": 659, - "source": 118, + "teal": 663, + "source": 122, "errorMessage": "transaction verification failed: {\"txn\":\"bXfer\",\"field\":\"assetReceiver\",\"expected\":\"this.app.address\"}", "pc": [ 594 ] }, { - "teal": 662, - "source": 115, + "teal": 666, + "source": 119, "pc": [ 595, 596 ] }, { - "teal": 663, - "source": 119, + "teal": 667, + "source": 123, "pc": [ 597, 598 ] }, { - "teal": 664, - "source": 119, + "teal": 668, + "source": 123, "pc": [ 599, 600 ] }, { - "teal": 665, - "source": 119, + "teal": 669, + "source": 123, "pc": [ 601 ] }, { - "teal": 668, - "source": 119, + "teal": 672, + "source": 123, "errorMessage": "transaction verification failed: {\"txn\":\"bXfer\",\"field\":\"xferAsset\",\"expected\":\"bAsset\"}", "pc": [ 602 ] }, { - "teal": 674, - "source": 123, + "teal": 678, + "source": 127, "pc": [ 603, 604 ] }, { - "teal": 675, - "source": 123, + "teal": 679, + "source": 127, "pc": [ 605, 606 ] }, { - "teal": 676, - "source": 123, + "teal": 680, + "source": 127, "pc": [ 607, 608 ] }, { - "teal": 677, - "source": 123, + "teal": 681, + "source": 127, "pc": [ 609 ] }, { - "teal": 678, - "source": 123, + "teal": 682, + "source": 127, "pc": [ 610, 611 ] }, { - "teal": 679, - "source": 123, + "teal": 683, + "source": 127, "pc": [ 612, 613 ] }, { - "teal": 680, - "source": 123, + "teal": 684, + "source": 127, "pc": [ 614 ] }, { - "teal": 681, - "source": 123, + "teal": 685, + "source": 127, "pc": [ 615 ] }, { - "teal": 682, - "source": 123, + "teal": 686, + "source": 127, "pc": [ 616, 617, @@ -2802,69 +2802,69 @@ ] }, { - "teal": 683, - "source": 124, + "teal": 687, + "source": 128, "pc": [ 619, 620 ] }, { - "teal": 684, - "source": 124, + "teal": 688, + "source": 128, "pc": [ 621, 622 ] }, { - "teal": 685, - "source": 124, + "teal": 689, + "source": 128, "pc": [ 623, 624 ] }, { - "teal": 686, - "source": 124, + "teal": 690, + "source": 128, "pc": [ 625 ] }, { - "teal": 687, - "source": 124, + "teal": 691, + "source": 128, "pc": [ 626, 627 ] }, { - "teal": 688, - "source": 124, + "teal": 692, + "source": 128, "pc": [ 628, 629 ] }, { - "teal": 689, - "source": 124, + "teal": 693, + "source": 128, "pc": [ 630 ] }, { - "teal": 690, - "source": 123, + "teal": 694, + "source": 127, "pc": [ 631 ] }, { - "teal": 693, - "source": 122, + "teal": 697, + "source": 126, "pc": [ 632, 633, @@ -2872,40 +2872,40 @@ ] }, { - "teal": 698, - "source": 126, + "teal": 702, + "source": 130, "pc": [ 635, 636 ] }, { - "teal": 699, - "source": 126, + "teal": 703, + "source": 130, "pc": [ 637, 638 ] }, { - "teal": 700, - "source": 126, + "teal": 704, + "source": 130, "pc": [ 639, 640 ] }, { - "teal": 701, - "source": 126, + "teal": 705, + "source": 130, "pc": [ 641, 642 ] }, { - "teal": 702, - "source": 126, + "teal": 706, + "source": 130, "pc": [ 643, 644, @@ -2913,8 +2913,8 @@ ] }, { - "teal": 703, - "source": 122, + "teal": 707, + "source": 126, "pc": [ 646, 647, @@ -2922,194 +2922,194 @@ ] }, { - "teal": 714, - "source": 133, + "teal": 718, + "source": 137, "pc": [ 649, 650 ] }, { - "teal": 715, - "source": 133, + "teal": 719, + "source": 137, "pc": [ 651, 652 ] }, { - "teal": 716, - "source": 132, + "teal": 720, + "source": 136, "pc": [ 653, 654 ] }, { - "teal": 717, - "source": 132, + "teal": 721, + "source": 136, "pc": [ 655, 656 ] }, { - "teal": 718, - "source": 131, + "teal": 722, + "source": 135, "pc": [ 657, 658 ] }, { - "teal": 719, - "source": 131, + "teal": 723, + "source": 135, "pc": [ 659, 660 ] }, { - "teal": 720, - "source": 131, + "teal": 724, + "source": 135, "pc": [ 661, 662 ] }, { - "teal": 721, - "source": 131, + "teal": 725, + "source": 135, "pc": [ 663 ] }, { - "teal": 722, - "source": 131, + "teal": 726, + "source": 135, "pc": [ 664, 665 ] }, { - "teal": 723, - "source": 131, + "teal": 727, + "source": 135, "pc": [ 666, 667 ] }, { - "teal": 724, - "source": 131, + "teal": 728, + "source": 135, "pc": [ 668 ] }, { - "teal": 725, - "source": 130, + "teal": 729, + "source": 134, "pc": [ 669, 670 ] }, { - "teal": 726, - "source": 130, + "teal": 730, + "source": 134, "pc": [ 671, 672 ] }, { - "teal": 727, - "source": 130, + "teal": 731, + "source": 134, "pc": [ 673, 674 ] }, { - "teal": 728, - "source": 130, + "teal": 732, + "source": 134, "pc": [ 675 ] }, { - "teal": 729, - "source": 130, + "teal": 733, + "source": 134, "pc": [ 676, 677 ] }, { - "teal": 730, - "source": 130, + "teal": 734, + "source": 134, "pc": [ 678, 679 ] }, { - "teal": 731, - "source": 130, + "teal": 735, + "source": 134, "pc": [ 680 ] }, { - "teal": 732, - "source": 129, + "teal": 736, + "source": 133, "pc": [ 681, 682 ] }, { - "teal": 733, - "source": 129, + "teal": 737, + "source": 133, "pc": [ 683, 684 ] }, { - "teal": 734, - "source": 129, + "teal": 738, + "source": 133, "pc": [ 685, 686 ] }, { - "teal": 735, - "source": 129, + "teal": 739, + "source": 133, "pc": [ 687, 688 ] }, { - "teal": 736, - "source": 129, + "teal": 740, + "source": 133, "pc": [ 689 ] }, { - "teal": 737, - "source": 129, + "teal": 741, + "source": 133, "pc": [ 690 ] }, { - "teal": 738, - "source": 128, + "teal": 742, + "source": 132, "pc": [ 691, 692, @@ -3117,69 +3117,69 @@ ] }, { - "teal": 739, - "source": 128, + "teal": 743, + "source": 132, "pc": [ 694, 695 ] }, { - "teal": 743, - "source": 136, + "teal": 747, + "source": 140, "pc": [ 696, 697 ] }, { - "teal": 744, - "source": 136, + "teal": 748, + "source": 140, "pc": [ 698 ] }, { - "teal": 745, - "source": 136, + "teal": 749, + "source": 140, "pc": [ 699 ] }, { - "teal": 746, - "source": 136, + "teal": 750, + "source": 140, "pc": [ 700 ] }, { - "teal": 750, - "source": 138, + "teal": 754, + "source": 142, "pc": [ 701, 702 ] }, { - "teal": 751, - "source": 138, + "teal": 755, + "source": 142, "pc": [ 703, 704 ] }, { - "teal": 752, - "source": 138, + "teal": 756, + "source": 142, "pc": [ 705, 706 ] }, { - "teal": 753, - "source": 138, + "teal": 757, + "source": 142, "pc": [ 707, 708, @@ -3187,15 +3187,15 @@ ] }, { - "teal": 756, - "source": 100, + "teal": 760, + "source": 104, "pc": [ 710 ] }, { - "teal": 761, - "source": 142, + "teal": 765, + "source": 146, "pc": [ 711, 712, @@ -3203,15 +3203,15 @@ ] }, { - "teal": 762, - "source": 142, + "teal": 766, + "source": 146, "pc": [ 714 ] }, { - "teal": 765, - "source": 142, + "teal": 769, + "source": 146, "pc": [ 715, 716, @@ -3219,15 +3219,15 @@ ] }, { - "teal": 766, - "source": 142, + "teal": 770, + "source": 146, "pc": [ 718 ] }, { - "teal": 769, - "source": 142, + "teal": 773, + "source": 146, "pc": [ 719, 720, @@ -3235,74 +3235,74 @@ ] }, { - "teal": 770, - "source": 142, + "teal": 774, + "source": 146, "pc": [ 722 ] }, { - "teal": 773, - "source": 142, + "teal": 777, + "source": 146, "pc": [ 723, 724 ] }, { - "teal": 774, - "source": 142, + "teal": 778, + "source": 146, "pc": [ 725 ] }, { - "teal": 775, - "source": 142, + "teal": 779, + "source": 146, "pc": [ 726 ] }, { - "teal": 776, - "source": 142, + "teal": 780, + "source": 146, "pc": [ 727 ] }, { - "teal": 777, - "source": 142, + "teal": 781, + "source": 146, "pc": [ 728, 729 ] }, { - "teal": 778, - "source": 142, + "teal": 782, + "source": 146, "pc": [ 730 ] }, { - "teal": 779, - "source": 142, + "teal": 783, + "source": 146, "pc": [ 731 ] }, { - "teal": 782, - "source": 142, + "teal": 786, + "source": 146, "errorMessage": "argument 3 (poolXfer) for burn must be a axfer transaction", "pc": [ 732 ] }, { - "teal": 785, - "source": 142, + "teal": 789, + "source": 146, "pc": [ 733, 734, @@ -3310,22 +3310,22 @@ ] }, { - "teal": 786, - "source": 142, + "teal": 790, + "source": 146, "pc": [ 736 ] }, { - "teal": 787, - "source": 142, + "teal": 791, + "source": 146, "pc": [ 737 ] }, { - "teal": 791, - "source": 142, + "teal": 795, + "source": 146, "pc": [ 738, 739, @@ -3333,419 +3333,419 @@ ] }, { - "teal": 794, - "source": 142, + "teal": 798, + "source": 146, "pc": [ 741 ] }, { - "teal": 795, - "source": 142, + "teal": 799, + "source": 146, "pc": [ 742, 743 ] }, { - "teal": 800, - "source": 144, + "teal": 804, + "source": 148, "pc": [ 744, 745 ] }, { - "teal": 801, - "source": 144, + "teal": 805, + "source": 148, "pc": [ 746, 747 ] }, { - "teal": 802, - "source": 144, + "teal": 806, + "source": 148, "pc": [ 748 ] }, { - "teal": 803, - "source": 144, + "teal": 807, + "source": 148, "pc": [ 749 ] }, { - "teal": 804, - "source": 144, + "teal": 808, + "source": 148, "pc": [ 750 ] }, { - "teal": 808, - "source": 145, + "teal": 812, + "source": 149, "pc": [ 751, 752 ] }, { - "teal": 809, - "source": 145, + "teal": 813, + "source": 149, "pc": [ 753 ] }, { - "teal": 810, - "source": 145, + "teal": 814, + "source": 149, "pc": [ 754 ] }, { - "teal": 811, - "source": 145, + "teal": 815, + "source": 149, "pc": [ 755 ] }, { - "teal": 812, - "source": 145, + "teal": 816, + "source": 149, "pc": [ 756 ] }, { - "teal": 816, - "source": 146, + "teal": 820, + "source": 150, "pc": [ 757, 758 ] }, { - "teal": 817, - "source": 146, + "teal": 821, + "source": 150, "pc": [ 759 ] }, { - "teal": 818, - "source": 146, + "teal": 822, + "source": 150, "pc": [ 760 ] }, { - "teal": 819, - "source": 146, + "teal": 823, + "source": 150, "pc": [ 761 ] }, { - "teal": 820, - "source": 146, + "teal": 824, + "source": 150, "pc": [ 762 ] }, { - "teal": 831, - "source": 149, + "teal": 835, + "source": 153, "pc": [ 763, 764 ] }, { - "teal": 832, - "source": 150, + "teal": 836, + "source": 154, "pc": [ 765, 766 ] }, { - "teal": 833, - "source": 150, + "teal": 837, + "source": 154, "pc": [ 767, 768 ] }, { - "teal": 834, - "source": 150, + "teal": 838, + "source": 154, "pc": [ 769 ] }, { - "teal": 837, - "source": 150, + "teal": 841, + "source": 154, "errorMessage": "transaction verification failed: {\"txn\":\"poolXfer\",\"field\":\"sender\",\"expected\":\"this.txn.sender\"}", "pc": [ 770 ] }, { - "teal": 840, - "source": 149, + "teal": 844, + "source": 153, "pc": [ 771, 772 ] }, { - "teal": 841, - "source": 151, + "teal": 845, + "source": 155, "pc": [ 773, 774 ] }, { - "teal": 842, - "source": 151, + "teal": 846, + "source": 155, "pc": [ 775 ] }, { - "teal": 843, - "source": 151, + "teal": 847, + "source": 155, "pc": [ 776 ] }, { - "teal": 846, - "source": 151, + "teal": 850, + "source": 155, "errorMessage": "transaction verification failed: {\"txn\":\"poolXfer\",\"field\":\"assetAmount\",\"condition\":\"greaterThan\",\"expected\":\">0\"}", "pc": [ 777 ] }, { - "teal": 849, - "source": 149, + "teal": 853, + "source": 153, "pc": [ 778, 779 ] }, { - "teal": 850, - "source": 152, + "teal": 854, + "source": 156, "pc": [ 780, 781 ] }, { - "teal": 851, - "source": 152, + "teal": 855, + "source": 156, "pc": [ 782, 783 ] }, { - "teal": 852, - "source": 152, + "teal": 856, + "source": 156, "pc": [ 784 ] }, { - "teal": 855, - "source": 152, + "teal": 859, + "source": 156, "errorMessage": "transaction verification failed: {\"txn\":\"poolXfer\",\"field\":\"assetReceiver\",\"expected\":\"this.app.address\"}", "pc": [ 785 ] }, { - "teal": 858, - "source": 149, + "teal": 862, + "source": 153, "pc": [ 786, 787 ] }, { - "teal": 859, - "source": 153, + "teal": 863, + "source": 157, "pc": [ 788, 789 ] }, { - "teal": 860, - "source": 153, + "teal": 864, + "source": 157, "pc": [ 790, 791 ] }, { - "teal": 861, - "source": 153, + "teal": 865, + "source": 157, "pc": [ 792 ] }, { - "teal": 864, - "source": 153, + "teal": 868, + "source": 157, "errorMessage": "transaction verification failed: {\"txn\":\"poolXfer\",\"field\":\"xferAsset\",\"expected\":\"poolAsset\"}", "pc": [ 793 ] }, { - "teal": 868, - "source": 156, + "teal": 872, + "source": 160, "pc": [ 794, 795 ] }, { - "teal": 869, - "source": 156, + "teal": 873, + "source": 160, "pc": [ 796, 797 ] }, { - "teal": 870, - "source": 156, + "teal": 874, + "source": 160, "pc": [ 798, 799 ] }, { - "teal": 871, - "source": 156, + "teal": 875, + "source": 160, "pc": [ 800, 801 ] }, { - "teal": 872, - "source": 156, + "teal": 876, + "source": 160, "pc": [ 802 ] }, { - "teal": 873, - "source": 156, + "teal": 877, + "source": 160, "pc": [ 803, 804 ] }, - { - "teal": 874, - "source": 156, + { + "teal": 878, + "source": 160, "pc": [ 805, 806 ] }, { - "teal": 875, - "source": 156, + "teal": 879, + "source": 160, "pc": [ 807 ] }, { - "teal": 876, - "source": 156, + "teal": 880, + "source": 160, "pc": [ 808 ] }, { - "teal": 877, - "source": 156, + "teal": 881, + "source": 160, "pc": [ 809, 810 ] }, { - "teal": 881, - "source": 158, + "teal": 885, + "source": 162, "pc": [ 811, 812 ] }, { - "teal": 882, - "source": 158, + "teal": 886, + "source": 162, "pc": [ 813, 814 ] }, { - "teal": 883, - "source": 158, + "teal": 887, + "source": 162, "pc": [ 815, 816 ] }, { - "teal": 884, - "source": 158, + "teal": 888, + "source": 162, "pc": [ 817, 818 ] }, { - "teal": 885, - "source": 158, + "teal": 889, + "source": 162, "pc": [ 819, 820 ] }, { - "teal": 886, - "source": 158, + "teal": 890, + "source": 162, "pc": [ 821 ] }, { - "teal": 887, - "source": 158, + "teal": 891, + "source": 162, "pc": [ 822, 823 ] }, { - "teal": 888, - "source": 158, + "teal": 892, + "source": 162, "pc": [ 824, 825, @@ -3753,71 +3753,71 @@ ] }, { - "teal": 889, - "source": 158, + "teal": 893, + "source": 162, "pc": [ 827, 828 ] }, { - "teal": 893, - "source": 160, + "teal": 897, + "source": 164, "pc": [ 829, 830 ] }, { - "teal": 894, - "source": 160, + "teal": 898, + "source": 164, "pc": [ 831, 832 ] }, { - "teal": 895, - "source": 160, + "teal": 899, + "source": 164, "pc": [ 833, 834 ] }, { - "teal": 896, - "source": 160, + "teal": 900, + "source": 164, "pc": [ 835, 836 ] }, { - "teal": 897, - "source": 160, + "teal": 901, + "source": 164, "pc": [ 837, 838 ] }, { - "teal": 898, - "source": 160, + "teal": 902, + "source": 164, "pc": [ 839 ] }, { - "teal": 899, - "source": 160, + "teal": 903, + "source": 164, "pc": [ 840, 841 ] }, { - "teal": 900, - "source": 160, + "teal": 904, + "source": 164, "pc": [ 842, 843, @@ -3825,40 +3825,40 @@ ] }, { - "teal": 901, - "source": 160, + "teal": 905, + "source": 164, "pc": [ 845, 846 ] }, { - "teal": 905, - "source": 162, + "teal": 909, + "source": 166, "pc": [ 847, 848 ] }, { - "teal": 906, - "source": 162, + "teal": 910, + "source": 166, "pc": [ 849, 850 ] }, { - "teal": 907, - "source": 162, + "teal": 911, + "source": 166, "pc": [ 851, 852 ] }, { - "teal": 908, - "source": 162, + "teal": 912, + "source": 166, "pc": [ 853, 854, @@ -3866,32 +3866,32 @@ ] }, { - "teal": 912, - "source": 163, + "teal": 916, + "source": 167, "pc": [ 856, 857 ] }, { - "teal": 913, - "source": 163, + "teal": 917, + "source": 167, "pc": [ 858, 859 ] }, { - "teal": 914, - "source": 163, + "teal": 918, + "source": 167, "pc": [ 860, 861 ] }, { - "teal": 915, - "source": 163, + "teal": 919, + "source": 167, "pc": [ 862, 863, @@ -3899,16 +3899,16 @@ ] }, { - "teal": 919, - "source": 165, + "teal": 923, + "source": 169, "pc": [ 865, 866 ] }, { - "teal": 920, - "source": 165, + "teal": 924, + "source": 169, "pc": [ 867, 868, @@ -3916,22 +3916,22 @@ ] }, { - "teal": 921, - "source": 165, + "teal": 925, + "source": 169, "pc": [ 870 ] }, { - "teal": 922, - "source": 142, + "teal": 926, + "source": 146, "pc": [ 871 ] }, { - "teal": 927, - "source": 168, + "teal": 931, + "source": 172, "pc": [ 872, 873, @@ -3939,15 +3939,15 @@ ] }, { - "teal": 928, - "source": 168, + "teal": 932, + "source": 172, "pc": [ 875 ] }, { - "teal": 931, - "source": 168, + "teal": 935, + "source": 172, "pc": [ 876, 877, @@ -3955,74 +3955,74 @@ ] }, { - "teal": 932, - "source": 168, + "teal": 936, + "source": 172, "pc": [ 879 ] }, { - "teal": 935, - "source": 168, + "teal": 939, + "source": 172, "pc": [ 880, 881 ] }, { - "teal": 936, - "source": 168, + "teal": 940, + "source": 172, "pc": [ 882 ] }, { - "teal": 937, - "source": 168, + "teal": 941, + "source": 172, "pc": [ 883 ] }, { - "teal": 938, - "source": 168, + "teal": 942, + "source": 172, "pc": [ 884 ] }, { - "teal": 939, - "source": 168, + "teal": 943, + "source": 172, "pc": [ 885, 886 ] }, { - "teal": 940, - "source": 168, + "teal": 944, + "source": 172, "pc": [ 887 ] }, { - "teal": 941, - "source": 168, + "teal": 945, + "source": 172, "pc": [ 888 ] }, { - "teal": 944, - "source": 168, + "teal": 948, + "source": 172, "errorMessage": "argument 2 (swapXfer) for swap must be a axfer transaction", "pc": [ 889 ] }, { - "teal": 947, - "source": 168, + "teal": 951, + "source": 172, "pc": [ 890, 891, @@ -4030,22 +4030,22 @@ ] }, { - "teal": 948, - "source": 168, + "teal": 952, + "source": 172, "pc": [ 893 ] }, { - "teal": 949, - "source": 168, + "teal": 953, + "source": 172, "pc": [ 894 ] }, { - "teal": 953, - "source": 168, + "teal": 957, + "source": 172, "pc": [ 895, 896, @@ -4053,319 +4053,319 @@ ] }, { - "teal": 956, - "source": 168, + "teal": 960, + "source": 172, "pc": [ 898 ] }, { - "teal": 957, - "source": 168, + "teal": 961, + "source": 172, "pc": [ 899, 900 ] }, { - "teal": 962, - "source": 170, + "teal": 966, + "source": 174, "pc": [ 901, 902 ] }, { - "teal": 963, - "source": 170, + "teal": 967, + "source": 174, "pc": [ 903 ] }, { - "teal": 964, - "source": 170, + "teal": 968, + "source": 174, "pc": [ 904 ] }, { - "teal": 965, - "source": 170, + "teal": 969, + "source": 174, "pc": [ 905 ] }, { - "teal": 966, - "source": 170, + "teal": 970, + "source": 174, "pc": [ 906 ] }, { - "teal": 970, - "source": 171, + "teal": 974, + "source": 175, "pc": [ 907, 908 ] }, { - "teal": 971, - "source": 171, + "teal": 975, + "source": 175, "pc": [ 909 ] }, { - "teal": 972, - "source": 171, + "teal": 976, + "source": 175, "pc": [ 910 ] }, { - "teal": 973, - "source": 171, + "teal": 977, + "source": 175, "pc": [ 911 ] }, { - "teal": 974, - "source": 171, + "teal": 978, + "source": 175, "pc": [ 912 ] }, { - "teal": 984, - "source": 173, + "teal": 988, + "source": 177, "pc": [ 913, 914 ] }, { - "teal": 985, - "source": 174, + "teal": 989, + "source": 178, "pc": [ 915, 916 ] }, { - "teal": 986, - "source": 174, + "teal": 990, + "source": 178, "pc": [ 917 ] }, { - "teal": 987, - "source": 174, + "teal": 991, + "source": 178, "pc": [ 918 ] }, { - "teal": 990, - "source": 174, + "teal": 994, + "source": 178, "errorMessage": "transaction verification failed: {\"txn\":\"swapXfer\",\"field\":\"assetAmount\",\"condition\":\"greaterThan\",\"expected\":\">0\"}", "pc": [ 919 ] }, { - "teal": 993, - "source": 173, + "teal": 997, + "source": 177, "pc": [ 920, 921 ] }, { - "teal": 994, - "source": 175, + "teal": 998, + "source": 179, "pc": [ 922, 923 ] }, { - "teal": 995, - "source": 175, + "teal": 999, + "source": 179, "pc": [ 924, 925 ] }, { - "teal": 996, - "source": 175, + "teal": 1000, + "source": 179, "pc": [ 926 ] }, { - "teal": 999, - "source": 175, + "teal": 1003, + "source": 179, "errorMessage": "transaction verification failed: {\"txn\":\"swapXfer\",\"field\":\"assetReceiver\",\"expected\":\"this.app.address\"}", "pc": [ 927 ] }, { - "teal": 1002, - "source": 173, + "teal": 1006, + "source": 177, "pc": [ 928, 929 ] }, { - "teal": 1003, - "source": 176, + "teal": 1007, + "source": 180, "pc": [ 930, 931 ] }, { - "teal": 1004, - "source": 176, + "teal": 1008, + "source": 180, "pc": [ 932, 933 ] }, { - "teal": 1005, - "source": 176, + "teal": 1009, + "source": 180, "pc": [ 934 ] }, { - "teal": 1008, - "source": 176, + "teal": 1012, + "source": 180, "errorMessage": "transaction verification failed: {\"txn\":\"swapXfer\",\"field\":\"sender\",\"expected\":\"this.txn.sender\"}", "pc": [ 935 ] }, { - "teal": 1011, - "source": 173, + "teal": 1015, + "source": 177, "pc": [ 936, 937 ] }, { - "teal": 1012, - "source": 177, + "teal": 1016, + "source": 181, "pc": [ 938, 939 ] }, { - "teal": 1013, - "source": 177, + "teal": 1017, + "source": 181, "pc": [ 940, 941 ] }, { - "teal": 1014, - "source": 177, + "teal": 1018, + "source": 181, "pc": [ 942 ] }, { - "teal": 1015, - "source": 173, + "teal": 1019, + "source": 177, "pc": [ 943, 944 ] }, { - "teal": 1016, - "source": 177, + "teal": 1020, + "source": 181, "pc": [ 945, 946 ] }, { - "teal": 1017, - "source": 177, + "teal": 1021, + "source": 181, "pc": [ 947, 948 ] }, { - "teal": 1018, - "source": 177, + "teal": 1022, + "source": 181, "pc": [ 949 ] }, { - "teal": 1019, - "source": 177, + "teal": 1023, + "source": 181, "pc": [ 950 ] }, { - "teal": 1022, - "source": 177, + "teal": 1026, + "source": 181, "errorMessage": "transaction verification failed: {\"txn\":{\"txnText\":\"swapXfer\"},\"field\":\"xferAsset\",\"condition\":\"includedIn\",\"expected\":\"[aAsset, bAsset]\"}", "pc": [ 951 ] }, { - "teal": 1026, - "source": 180, + "teal": 1030, + "source": 184, "pc": [ 952, 953 ] }, { - "teal": 1027, - "source": 180, + "teal": 1031, + "source": 184, "pc": [ 954, 955 ] }, { - "teal": 1028, - "source": 180, + "teal": 1032, + "source": 184, "pc": [ 956, 957 ] }, { - "teal": 1029, - "source": 180, + "teal": 1033, + "source": 184, "pc": [ 958 ] }, { - "teal": 1030, - "source": 180, + "teal": 1034, + "source": 184, "pc": [ 959, 960, @@ -4373,16 +4373,16 @@ ] }, { - "teal": 1031, - "source": 180, + "teal": 1035, + "source": 184, "pc": [ 962, 963 ] }, { - "teal": 1032, - "source": 180, + "teal": 1036, + "source": 184, "pc": [ 964, 965, @@ -4390,149 +4390,149 @@ ] }, { - "teal": 1035, - "source": 180, + "teal": 1039, + "source": 184, "pc": [ 967, 968 ] }, { - "teal": 1038, - "source": 180, + "teal": 1042, + "source": 184, "pc": [ 969, 970 ] }, { - "teal": 1042, - "source": 182, + "teal": 1046, + "source": 186, "pc": [ 971, 972 ] }, { - "teal": 1043, - "source": 182, + "teal": 1047, + "source": 186, "pc": [ 973, 974 ] }, { - "teal": 1044, - "source": 182, + "teal": 1048, + "source": 186, "pc": [ 975, 976 ] }, { - "teal": 1052, - "source": 187, + "teal": 1056, + "source": 191, "pc": [ 977, 978 ] }, { - "teal": 1053, - "source": 187, + "teal": 1057, + "source": 191, "pc": [ 979, 980 ] }, { - "teal": 1054, - "source": 187, + "teal": 1058, + "source": 191, "pc": [ 981, 982 ] }, { - "teal": 1055, - "source": 187, + "teal": 1059, + "source": 191, "pc": [ 983 ] }, { - "teal": 1056, - "source": 186, + "teal": 1060, + "source": 190, "pc": [ 984, 985 ] }, { - "teal": 1057, - "source": 186, + "teal": 1061, + "source": 190, "pc": [ 986, 987 ] }, { - "teal": 1058, - "source": 186, + "teal": 1062, + "source": 190, "pc": [ 988, 989 ] }, { - "teal": 1059, - "source": 186, + "teal": 1063, + "source": 190, "pc": [ 990 ] }, { - "teal": 1060, - "source": 186, + "teal": 1064, + "source": 190, "pc": [ 991, 992 ] }, { - "teal": 1061, - "source": 186, + "teal": 1065, + "source": 190, "pc": [ 993, 994 ] }, { - "teal": 1062, - "source": 186, + "teal": 1066, + "source": 190, "pc": [ 995 ] }, { - "teal": 1063, - "source": 185, + "teal": 1067, + "source": 189, "pc": [ 996, 997 ] }, { - "teal": 1064, - "source": 185, + "teal": 1068, + "source": 189, "pc": [ 998, 999 ] }, { - "teal": 1065, - "source": 184, + "teal": 1069, + "source": 188, "pc": [ 1000, 1001, @@ -4540,69 +4540,69 @@ ] }, { - "teal": 1066, - "source": 184, + "teal": 1070, + "source": 188, "pc": [ 1003, 1004 ] }, { - "teal": 1070, - "source": 190, + "teal": 1074, + "source": 194, "pc": [ 1005, 1006 ] }, { - "teal": 1071, - "source": 190, + "teal": 1075, + "source": 194, "pc": [ 1007 ] }, { - "teal": 1072, - "source": 190, + "teal": 1076, + "source": 194, "pc": [ 1008 ] }, { - "teal": 1073, - "source": 190, + "teal": 1077, + "source": 194, "pc": [ 1009 ] }, { - "teal": 1077, - "source": 192, + "teal": 1081, + "source": 196, "pc": [ 1010, 1011 ] }, { - "teal": 1078, - "source": 192, + "teal": 1082, + "source": 196, "pc": [ 1012, 1013 ] }, { - "teal": 1079, - "source": 192, + "teal": 1083, + "source": 196, "pc": [ 1014, 1015 ] }, { - "teal": 1080, - "source": 192, + "teal": 1084, + "source": 196, "pc": [ 1016, 1017, @@ -4610,16 +4610,16 @@ ] }, { - "teal": 1084, - "source": 194, + "teal": 1088, + "source": 198, "pc": [ 1019, 1020 ] }, { - "teal": 1085, - "source": 194, + "teal": 1089, + "source": 198, "pc": [ 1021, 1022, @@ -4627,21 +4627,21 @@ ] }, { - "teal": 1086, - "source": 194, + "teal": 1090, + "source": 198, "pc": [ 1024 ] }, { - "teal": 1087, - "source": 168, + "teal": 1091, + "source": 172, "pc": [ 1025 ] }, { - "teal": 1090, + "teal": 1094, "source": 8, "pc": [ 1026, @@ -4653,7 +4653,7 @@ ] }, { - "teal": 1091, + "teal": 1095, "source": 8, "pc": [ 1032, @@ -4662,7 +4662,7 @@ ] }, { - "teal": 1092, + "teal": 1096, "source": 8, "pc": [ 1035, @@ -4672,7 +4672,7 @@ ] }, { - "teal": 1095, + "teal": 1099, "source": 8, "errorMessage": "this contract does not implement the given ABI method for create NoOp", "pc": [ @@ -4680,7 +4680,7 @@ ] }, { - "teal": 1098, + "teal": 1102, "source": 8, "pc": [ 1040, @@ -4692,7 +4692,7 @@ ] }, { - "teal": 1099, + "teal": 1103, "source": 8, "pc": [ 1046, @@ -4704,7 +4704,7 @@ ] }, { - "teal": 1100, + "teal": 1104, "source": 8, "pc": [ 1052, @@ -4716,7 +4716,7 @@ ] }, { - "teal": 1101, + "teal": 1105, "source": 8, "pc": [ 1058, @@ -4728,7 +4728,7 @@ ] }, { - "teal": 1102, + "teal": 1106, "source": 8, "pc": [ 1064, @@ -4740,7 +4740,7 @@ ] }, { - "teal": 1103, + "teal": 1107, "source": 8, "pc": [ 1070, @@ -4749,7 +4749,7 @@ ] }, { - "teal": 1104, + "teal": 1108, "source": 8, "pc": [ 1073, @@ -4767,7 +4767,7 @@ ] }, { - "teal": 1107, + "teal": 1111, "source": 8, "errorMessage": "this contract does not implement the given ABI method for call NoOp", "pc": [ diff --git a/examples/arc75/arc75.algo.ts b/examples/arc75/arc75.algo.ts index f0d131217..2521bf398 100644 --- a/examples/arc75/arc75.algo.ts +++ b/examples/arc75/arc75.algo.ts @@ -14,10 +14,12 @@ class ARC75 extends Contract { } private sendMBRPayment(preMBR: uint64): void { - sendPayment({ - receiver: this.txn.sender, - amount: preMBR - this.app.address.minBalance, - }); + this.txnComposer.send( + new PayTxn({ + receiver: this.txn.sender, + amount: preMBR - this.app.address.minBalance, + }) + ); } /** diff --git a/examples/arc75/artifacts/ARC75.approval.teal b/examples/arc75/artifacts/ARC75.approval.teal index 79d4cce6a..51e84217e 100644 --- a/examples/arc75/artifacts/ARC75.approval.teal +++ b/examples/arc75/artifacts/ARC75.approval.teal @@ -59,20 +59,22 @@ sendMBRPayment: proto 1 0 // examples/arc75/arc75.algo.ts:17 - // sendPayment({ - // receiver: this.txn.sender, - // amount: preMBR - this.app.address.minBalance, - // }) + // this.txnComposer.send( + // new PayTxn({ + // receiver: this.txn.sender, + // amount: preMBR - this.app.address.minBalance, + // }) + // ) itxn_begin int pay itxn_field TypeEnum - // examples/arc75/arc75.algo.ts:18 + // examples/arc75/arc75.algo.ts:19 // receiver: this.txn.sender txn Sender itxn_field Receiver - // examples/arc75/arc75.algo.ts:19 + // examples/arc75/arc75.algo.ts:20 // amount: preMBR - this.app.address.minBalance frame_dig -1 // preMBR: uint64 global CurrentApplicationAddress @@ -142,14 +144,14 @@ addAppToWhiteList: byte 0x dupn 2 - // examples/arc75/arc75.algo.ts:33 + // examples/arc75/arc75.algo.ts:35 // preMBR = this.app.address.minBalance global CurrentApplicationAddress acct_params_get AcctMinBalance pop frame_bury 0 // preMBR: uint64 - // examples/arc75/arc75.algo.ts:34 + // examples/arc75/arc75.algo.ts:36 // whitelist: Whitelist = { account: this.txn.sender, boxIndex: boxIndex, arc: arc } byte 0x // initial head byte 0x // initial tail @@ -173,7 +175,7 @@ addAppToWhiteList: frame_bury 1 // whitelist: Whitelist // *if0_condition - // examples/arc75/arc75.algo.ts:36 + // examples/arc75/arc75.algo.ts:38 // this.whitelist(whitelist).exists frame_dig 1 // whitelist: Whitelist box_len @@ -182,7 +184,7 @@ addAppToWhiteList: bz *if0_else // *if0_consequent - // examples/arc75/arc75.algo.ts:37 + // examples/arc75/arc75.algo.ts:39 // this.whitelist(whitelist).value.push(appID) frame_dig 1 // whitelist: Whitelist box_get @@ -210,13 +212,13 @@ addAppToWhiteList: b *if0_end *if0_else: - // examples/arc75/arc75.algo.ts:39 + // examples/arc75/arc75.algo.ts:41 // newWhitelist: uint64[] = [appID] frame_dig -3 // appID: uint64 itob frame_bury 2 // newWhitelist: uint64[] - // examples/arc75/arc75.algo.ts:40 + // examples/arc75/arc75.algo.ts:42 // this.whitelist(whitelist).value = newWhitelist frame_dig 1 // whitelist: Whitelist dup @@ -234,7 +236,7 @@ addAppToWhiteList: box_put *if0_end: - // examples/arc75/arc75.algo.ts:43 + // examples/arc75/arc75.algo.ts:45 // this.verifyMBRPayment(payment, preMBR) frame_dig 0 // preMBR: uint64 frame_dig -4 // payment: PayTxn @@ -281,14 +283,14 @@ setAppWhitelist: byte 0x dup - // examples/arc75/arc75.algo.ts:55 + // examples/arc75/arc75.algo.ts:57 // preMBR = this.app.address.minBalance global CurrentApplicationAddress acct_params_get AcctMinBalance pop frame_bury 0 // preMBR: uint64 - // examples/arc75/arc75.algo.ts:56 + // examples/arc75/arc75.algo.ts:58 // whitelist: Whitelist = { account: this.txn.sender, boxIndex: boxIndex, arc: arc } byte 0x // initial head byte 0x // initial tail @@ -311,12 +313,12 @@ setAppWhitelist: concat // concat head and tail frame_bury 1 // whitelist: Whitelist - // examples/arc75/arc75.algo.ts:58 + // examples/arc75/arc75.algo.ts:60 // this.whitelist(whitelist).delete() frame_dig 1 // whitelist: Whitelist box_del - // examples/arc75/arc75.algo.ts:60 + // examples/arc75/arc75.algo.ts:62 // this.whitelist(whitelist).value = appIDs frame_dig 1 // whitelist: Whitelist dup @@ -334,7 +336,7 @@ setAppWhitelist: box_put // *if1_condition - // examples/arc75/arc75.algo.ts:62 + // examples/arc75/arc75.algo.ts:64 // preMBR > this.app.address.minBalance frame_dig 0 // preMBR: uint64 global CurrentApplicationAddress @@ -344,14 +346,14 @@ setAppWhitelist: bz *if1_else // *if1_consequent - // examples/arc75/arc75.algo.ts:63 + // examples/arc75/arc75.algo.ts:65 // this.sendMBRPayment(preMBR) frame_dig 0 // preMBR: uint64 callsub sendMBRPayment b *if1_end *if1_else: - // examples/arc75/arc75.algo.ts:65 + // examples/arc75/arc75.algo.ts:67 // this.verifyMBRPayment(this.txnGroup[this.txn.groupIndex - 1] as PayTxn, preMBR) frame_dig 0 // preMBR: uint64 txn GroupIndex @@ -405,14 +407,14 @@ deleteWhitelist: byte 0x dup - // examples/arc75/arc75.algo.ts:77 + // examples/arc75/arc75.algo.ts:79 // preMBR = this.app.address.minBalance global CurrentApplicationAddress acct_params_get AcctMinBalance pop frame_bury 0 // preMBR: uint64 - // examples/arc75/arc75.algo.ts:78 + // examples/arc75/arc75.algo.ts:80 // whitelist: Whitelist = { account: this.txn.sender, boxIndex: boxIndex, arc: arc } byte 0x // initial head byte 0x // initial tail @@ -435,12 +437,12 @@ deleteWhitelist: concat // concat head and tail frame_bury 1 // whitelist: Whitelist - // examples/arc75/arc75.algo.ts:80 + // examples/arc75/arc75.algo.ts:82 // this.whitelist(whitelist).delete() frame_dig 1 // whitelist: Whitelist box_del - // examples/arc75/arc75.algo.ts:82 + // examples/arc75/arc75.algo.ts:84 // this.sendMBRPayment(preMBR) frame_dig 0 // preMBR: uint64 callsub sendMBRPayment @@ -490,14 +492,14 @@ deleteAppFromWhitelist: byte 0x dupn 2 - // examples/arc75/arc75.algo.ts:94 + // examples/arc75/arc75.algo.ts:96 // preMBR = this.app.address.minBalance global CurrentApplicationAddress acct_params_get AcctMinBalance pop frame_bury 0 // preMBR: uint64 - // examples/arc75/arc75.algo.ts:95 + // examples/arc75/arc75.algo.ts:97 // whitelist: Whitelist = { account: this.txn.sender, boxIndex: boxIndex, arc: arc } byte 0x // initial head byte 0x // initial tail @@ -520,7 +522,7 @@ deleteAppFromWhitelist: concat // concat head and tail frame_bury 1 // whitelist: Whitelist - // examples/arc75/arc75.algo.ts:97 + // examples/arc75/arc75.algo.ts:99 // spliced = this.whitelist(whitelist).value.splice(index, 1) frame_dig 1 // whitelist: Whitelist box_get @@ -588,7 +590,7 @@ deleteAppFromWhitelist: box_put frame_bury 2 // spliced: uint64[] - // examples/arc75/arc75.algo.ts:99 + // examples/arc75/arc75.algo.ts:101 // assert(spliced[0] === appID) frame_dig 2 // spliced: uint64[] store 255 // full array @@ -599,7 +601,7 @@ deleteAppFromWhitelist: == assert - // examples/arc75/arc75.algo.ts:101 + // examples/arc75/arc75.algo.ts:103 // this.sendMBRPayment(preMBR) frame_dig 0 // preMBR: uint64 callsub sendMBRPayment diff --git a/examples/arc75/artifacts/ARC75.arc32.json b/examples/arc75/artifacts/ARC75.arc32.json index 1fb2c8aa1..0bafb071e 100644 --- a/examples/arc75/artifacts/ARC75.arc32.json +++ b/examples/arc75/artifacts/ARC75.arc32.json @@ -54,7 +54,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHZlcmlmeU1CUlBheW1lbnQocGF5bWVudDogUGF5VHhuLCBwcmVNQlI6IHVpbnQ2NCk6IHZvaWQKdmVyaWZ5TUJSUGF5bWVudDoKCXByb3RvIDIgMAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MTAKCS8vIHZlcmlmeVBheVR4bihwYXltZW50LCB7CgkvLyAgICAgICByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFtb3VudDogdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBQYXlUeG4KCWd0eG5zIFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InBheW1lbnQiLCJmaWVsZCI6InJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgLTIgLy8gcHJlTUJSOiB1aW50NjQKCS0KCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJwYXltZW50IiwiZmllbGQiOiJhbW91bnQiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUiJ9Cglhc3NlcnQKCXJldHN1YgoKLy8gc2VuZE1CUlBheW1lbnQocHJlTUJSOiB1aW50NjQpOiB2b2lkCnNlbmRNQlJQYXltZW50OgoJcHJvdG8gMSAwCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoxNwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogcHJlTUJSIC0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoxOAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MTkKCS8vIGFtb3VudDogcHJlTUJSIC0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlCglmcmFtZV9kaWcgLTEgLy8gcHJlTUJSOiB1aW50NjQKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFkZEFwcFRvV2hpdGVMaXN0KHN0cmluZyx1aW50MTYsdWludDY0LHBheSl2b2lkCiphYmlfcm91dGVfYWRkQXBwVG9XaGl0ZUxpc3Q6CgkvLyBwYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAwIChwYXltZW50KSBmb3IgYWRkQXBwVG9XaGl0ZUxpc3QgbXVzdCBiZSBhIHBheSB0cmFuc2FjdGlvbgoJYXNzZXJ0CgoJLy8gYXBwSUQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoKCS8vIGJveEluZGV4OiB1aW50MTYKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMgoJPT0KCgkvLyBhcmd1bWVudCAyIChib3hJbmRleCkgZm9yIGFkZEFwcFRvV2hpdGVMaXN0IG11c3QgYmUgYSB1aW50MTYKCWFzc2VydAoJYnRvaQoKCS8vIGFyYzogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoKCS8vIGV4ZWN1dGUgYWRkQXBwVG9XaGl0ZUxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjQscGF5KXZvaWQKCWNhbGxzdWIgYWRkQXBwVG9XaGl0ZUxpc3QKCWludCAxCglyZXR1cm4KCi8vIGFkZEFwcFRvV2hpdGVMaXN0KGFyYzogc3RyaW5nLCBib3hJbmRleDogdWludDE2LCBhcHBJRDogdWludDY0LCBwYXltZW50OiBQYXlUeG4pOiB2b2lkCi8vCi8vIEFkZCBhcHAgdG8gd2hpdGVsaXN0IGJveAovLwovLyBAcGFyYW0gYXJjIC0gVGhlIEFSQyB0aGUgd2hpdGVsaXN0IGNvcnJlc3BvbmRzIHRvCi8vIEBwYXJhbSBib3hJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgd2hpdGVsaXN0IGJveCB0byBhZGQgdGhlIGFwcCB0bwovLyBAcGFyYW0gYXBwSUQgLSBUaGUgYXBwIElEIHRvIGFkZCB0byB0aGUgd2hpdGVsaXN0Ci8vIEBwYXJhbSBwYXltZW50IC0gVGhlIHBheW1lbnQgdHJhbnNhY3Rpb24gdG8gY292ZXIgdGhlIE1CUiBjaGFuZ2UKYWRkQXBwVG9XaGl0ZUxpc3Q6Cglwcm90byA0IDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czozMwoJLy8gcHJlTUJSID0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MzQKCS8vIHdoaXRlbGlzdDogV2hpdGVsaXN0ID0geyBhY2NvdW50OiB0aGlzLnR4bi5zZW5kZXIsIGJveEluZGV4OiBib3hJbmRleCwgYXJjOiBhcmMgfQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAyNCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0Cgl0eG4gU2VuZGVyCgljYWxsc3ViICpwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglmcmFtZV9kaWcgLTIgLy8gYm94SW5kZXg6IHVpbnQxNgoJaXRvYgoJZXh0cmFjdCA2IDIKCWNhbGxzdWIgKnByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtMSAvLyBhcmM6IHN0cmluZwoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgKnByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoKCS8vICppZjBfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjM2CgkvLyB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLmV4aXN0cwoJZnJhbWVfZGlnIDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbHNlCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjM3CgkvLyB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLnZhbHVlLnB1c2goYXBwSUQpCglmcmFtZV9kaWcgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy53aGl0ZWxpc3Qod2hpdGVsaXN0KS52YWx1ZQoJYXNzZXJ0CglleHRyYWN0IDIgMAoJZnJhbWVfZGlnIC0zIC8vIGFwcElEOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJZnJhbWVfZGlnIDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWR1cAoJYm94X2RlbAoJcG9wCglzd2FwCglkdXAKCWxlbgoJaW50IDgKCS8KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJveF9wdXQKCWIgKmlmMF9lbmQKCippZjBfZWxzZToKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MzkKCS8vIG5ld1doaXRlbGlzdDogdWludDY0W10gPSBbYXBwSURdCglmcmFtZV9kaWcgLTMgLy8gYXBwSUQ6IHVpbnQ2NAoJaXRvYgoJZnJhbWVfYnVyeSAyIC8vIG5ld1doaXRlbGlzdDogdWludDY0W10KCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjQwCgkvLyB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLnZhbHVlID0gbmV3V2hpdGVsaXN0CglmcmFtZV9kaWcgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJZHVwCglib3hfZGVsCglwb3AKCWZyYW1lX2RpZyAyIC8vIG5ld1doaXRlbGlzdDogdWludDY0W10KCWR1cAoJbGVuCglpbnQgOAoJLwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJYm94X3B1dAoKKmlmMF9lbmQ6CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjQzCgkvLyB0aGlzLnZlcmlmeU1CUlBheW1lbnQocGF5bWVudCwgcHJlTUJSKQoJZnJhbWVfZGlnIDAgLy8gcHJlTUJSOiB1aW50NjQKCWZyYW1lX2RpZyAtNCAvLyBwYXltZW50OiBQYXlUeG4KCWNhbGxzdWIgdmVyaWZ5TUJSUGF5bWVudAoJcmV0c3ViCgovLyBzZXRBcHBXaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjRbXSl2b2lkCiphYmlfcm91dGVfc2V0QXBwV2hpdGVsaXN0OgoJLy8gYXBwSURzOiB1aW50NjRbXQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZXh0cmFjdCAyIDAKCgkvLyBib3hJbmRleDogdWludDE2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDIKCT09CgoJLy8gYXJndW1lbnQgMSAoYm94SW5kZXgpIGZvciBzZXRBcHBXaGl0ZWxpc3QgbXVzdCBiZSBhIHVpbnQxNgoJYXNzZXJ0CglidG9pCgoJLy8gYXJjOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBzZXRBcHBXaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjRbXSl2b2lkCgljYWxsc3ViIHNldEFwcFdoaXRlbGlzdAoJaW50IDEKCXJldHVybgoKLy8gc2V0QXBwV2hpdGVsaXN0KGFyYzogc3RyaW5nLCBib3hJbmRleDogdWludDE2LCBhcHBJRHM6IHVpbnQ2NFtdKTogdm9pZAovLwovLyBTZXRzIGEgYXBwIHdoaXRlbGlzdCBmb3IgdGhlIHNlbmRlci4gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGFkZGluZy9yZW1vdmluZwovLyBtb3JlIHRoYW4gb25lIGFwcAovLwovLyBAcGFyYW0gYm94SW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHdoaXRlbGlzdCBib3ggdG8gcHV0IHRoZSBhcHAgSURzIGluCi8vIEBwYXJhbSBhcHBJRHMgLSBBcnJheSBvZiBhcHAgSURzIHRoYXQgc2lnbmlmeSB0aGUgd2hpdGVsaXN0ZWQgYXBwcwpzZXRBcHBXaGl0ZWxpc3Q6Cglwcm90byAzIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo1NQoJLy8gcHJlTUJSID0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NTYKCS8vIHdoaXRlbGlzdDogV2hpdGVsaXN0ID0geyBhY2NvdW50OiB0aGlzLnR4bi5zZW5kZXIsIGJveEluZGV4OiBib3hJbmRleCwgYXJjOiBhcmMgfQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAyNCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0Cgl0eG4gU2VuZGVyCgljYWxsc3ViICpwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglmcmFtZV9kaWcgLTIgLy8gYm94SW5kZXg6IHVpbnQxNgoJaXRvYgoJZXh0cmFjdCA2IDIKCWNhbGxzdWIgKnByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtMSAvLyBhcmM6IHN0cmluZwoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgKnByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NTgKCS8vIHRoaXMud2hpdGVsaXN0KHdoaXRlbGlzdCkuZGVsZXRlKCkKCWZyYW1lX2RpZyAxIC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZGVsCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo2MAoJLy8gdGhpcy53aGl0ZWxpc3Qod2hpdGVsaXN0KS52YWx1ZSA9IGFwcElEcwoJZnJhbWVfZGlnIDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWR1cAoJYm94X2RlbAoJcG9wCglmcmFtZV9kaWcgLTMgLy8gYXBwSURzOiB1aW50NjRbXQoJZHVwCglsZW4KCWludCA4CgkvCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0Cglib3hfcHV0CgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NjIKCS8vIHByZU1CUiA+IHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gcHJlTUJSOiB1aW50NjQKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKmlmMV9lbHNlCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjYzCgkvLyB0aGlzLnNlbmRNQlJQYXltZW50KHByZU1CUikKCWZyYW1lX2RpZyAwIC8vIHByZU1CUjogdWludDY0CgljYWxsc3ViIHNlbmRNQlJQYXltZW50CgliICppZjFfZW5kCgoqaWYxX2Vsc2U6CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjY1CgkvLyB0aGlzLnZlcmlmeU1CUlBheW1lbnQodGhpcy50eG5Hcm91cFt0aGlzLnR4bi5ncm91cEluZGV4IC0gMV0gYXMgUGF5VHhuLCBwcmVNQlIpCglmcmFtZV9kaWcgMCAvLyBwcmVNQlI6IHVpbnQ2NAoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgcGF5Cgk9PQoJYXNzZXJ0CgoJLy8gZmFpbGVkIHRvIGNhc3QgdGhpcy50eG5Hcm91cFt0aGlzLnR4bi5ncm91cEluZGV4IC0gMV0gdG8gcGF5Cglhc3NlcnQKCWNhbGxzdWIgdmVyaWZ5TUJSUGF5bWVudAoKKmlmMV9lbmQ6CglyZXRzdWIKCi8vIGRlbGV0ZVdoaXRlbGlzdChzdHJpbmcsdWludDE2KXZvaWQKKmFiaV9yb3V0ZV9kZWxldGVXaGl0ZWxpc3Q6CgkvLyBib3hJbmRleDogdWludDE2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDIKCT09CgoJLy8gYXJndW1lbnQgMCAoYm94SW5kZXgpIGZvciBkZWxldGVXaGl0ZWxpc3QgbXVzdCBiZSBhIHVpbnQxNgoJYXNzZXJ0CglidG9pCgoJLy8gYXJjOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBkZWxldGVXaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNil2b2lkCgljYWxsc3ViIGRlbGV0ZVdoaXRlbGlzdAoJaW50IDEKCXJldHVybgoKLy8gZGVsZXRlV2hpdGVsaXN0KGFyYzogc3RyaW5nLCBib3hJbmRleDogdWludDE2KTogdm9pZAovLwovLyBEZWxldGVzIGEgYXBwIHdoaXRlbGlzdCBmb3IgdGhlIHNlbmRlcgovLwovLyBAcGFyYW0gYXJjIC0gVGhlIEFSQyB0aGUgd2hpdGVsaXN0IGNvcnJlc3BvbmRzIHRvCi8vIEBwYXJhbSBib3hJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgd2hpdGVsaXN0IGJveCB0byBkZWxldGUKZGVsZXRlV2hpdGVsaXN0OgoJcHJvdG8gMiAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NzcKCS8vIHByZU1CUiA9IHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDAgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjc4CgkvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdCA9IHsgYWNjb3VudDogdGhpcy50eG4uc2VuZGVyLCBib3hJbmRleDogYm94SW5kZXgsIGFyYzogYXJjIH0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMjQgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJdHhuIFNlbmRlcgoJY2FsbHN1YiAqcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJZnJhbWVfZGlnIC0yIC8vIGJveEluZGV4OiB1aW50MTYKCWl0b2IKCWV4dHJhY3QgNiAyCgljYWxsc3ViICpwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglmcmFtZV9kaWcgLTEgLy8gYXJjOiBzdHJpbmcKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViICpwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjgwCgkvLyB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLmRlbGV0ZSgpCglmcmFtZV9kaWcgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJYm94X2RlbAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6ODIKCS8vIHRoaXMuc2VuZE1CUlBheW1lbnQocHJlTUJSKQoJZnJhbWVfZGlnIDAgLy8gcHJlTUJSOiB1aW50NjQKCWNhbGxzdWIgc2VuZE1CUlBheW1lbnQKCXJldHN1YgoKLy8gZGVsZXRlQXBwRnJvbVdoaXRlbGlzdChzdHJpbmcsdWludDE2LHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2RlbGV0ZUFwcEZyb21XaGl0ZWxpc3Q6CgkvLyBpbmRleDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA0CglidG9pCgoJLy8gYXBwSUQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoKCS8vIGJveEluZGV4OiB1aW50MTYKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMgoJPT0KCgkvLyBhcmd1bWVudCAyIChib3hJbmRleCkgZm9yIGRlbGV0ZUFwcEZyb21XaGl0ZWxpc3QgbXVzdCBiZSBhIHVpbnQxNgoJYXNzZXJ0CglidG9pCgoJLy8gYXJjOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBkZWxldGVBcHBGcm9tV2hpdGVsaXN0KHN0cmluZyx1aW50MTYsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIGRlbGV0ZUFwcEZyb21XaGl0ZWxpc3QKCWludCAxCglyZXR1cm4KCi8vIGRlbGV0ZUFwcEZyb21XaGl0ZWxpc3QoYXJjOiBzdHJpbmcsIGJveEluZGV4OiB1aW50MTYsIGFwcElEOiB1aW50NjQsIGluZGV4OiB1aW50NjQpOiB2b2lkCi8vCi8vIERlbGV0ZXMgYSBhcHAgZnJvbSBhIHdoaXRlbGlzdCBmb3IgdGhlIHNlbmRlcgovLwovLyBAcGFyYW0gYm94SW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHdoaXRlbGlzdCBib3ggdG8gZGVsZXRlIGZyb20KLy8gQHBhcmFtIGFwcElEIC0gVGhlIGFwcCBJRCB0byBkZWxldGUgZnJvbSB0aGUgd2hpdGVsaXN0Ci8vIEBwYXJhbSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgYXBwIGluIHRoZSB3aGl0ZWxpc3QKZGVsZXRlQXBwRnJvbVdoaXRlbGlzdDoKCXByb3RvIDQgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjk0CgkvLyBwcmVNQlIgPSB0aGlzLmFwcC5hZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHByZU1CUjogdWludDY0CgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo5NQoJLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QgPSB7IGFjY291bnQ6IHRoaXMudHhuLnNlbmRlciwgYm94SW5kZXg6IGJveEluZGV4LCBhcmM6IGFyYyB9CglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDI0IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCXR4biBTZW5kZXIKCWNhbGxzdWIgKnByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtMiAvLyBib3hJbmRleDogdWludDE2CglpdG9iCglleHRyYWN0IDYgMgoJY2FsbHN1YiAqcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJZnJhbWVfZGlnIC0xIC8vIGFyYzogc3RyaW5nCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiAqcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAxIC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0CgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo5NwoJLy8gc3BsaWNlZCA9IHRoaXMud2hpdGVsaXN0KHdoaXRlbGlzdCkudmFsdWUuc3BsaWNlKGluZGV4LCAxKQoJZnJhbWVfZGlnIDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMud2hpdGVsaXN0KHdoaXRlbGlzdCkudmFsdWUKCWFzc2VydAoJZXh0cmFjdCAyIDAKCWludCAxCglmcmFtZV9kaWcgLTQgLy8gaW5kZXg6IHVpbnQ2NAoJaW50IDgKCSoKCXN0b3JlIDI0NyAvLyBzcGxpY2Ugc3RhcnQKCWludCAxNgoJc3RvcmUgMjQ2IC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMud2hpdGVsaXN0KHdoaXRlbGlzdCkudmFsdWUKCWFzc2VydAoJZXh0cmFjdCAyIDAKCWludCAwCglsb2FkIDI0NyAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAxIC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLnZhbHVlCglhc3NlcnQKCWV4dHJhY3QgMiAwCglkdXAKCWxlbgoJbG9hZCAyNDcgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDI0NiAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCA4CgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWZyYW1lX2RpZyAxIC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLnZhbHVlCglhc3NlcnQKCWV4dHJhY3QgMiAwCglsb2FkIDI0NyAvLyBzcGxpY2Ugc3RhcnQKCWxvYWQgMjQ2IC8vIHNwbGljZSBieXRlIGxlbmd0aAoJaW50IDgKCS0KCWV4dHJhY3QzCglzd2FwCglmcmFtZV9kaWcgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJZHVwCglib3hfZGVsCglwb3AKCXN3YXAKCWR1cAoJbGVuCglpbnQgOAoJLwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJYm94X3B1dAoJZnJhbWVfYnVyeSAyIC8vIHNwbGljZWQ6IHVpbnQ2NFtdCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo5OQoJLy8gYXNzZXJ0KHNwbGljZWRbMF0gPT09IGFwcElEKQoJZnJhbWVfZGlnIDIgLy8gc3BsaWNlZDogdWludDY0W10KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJZnJhbWVfZGlnIC0zIC8vIGFwcElEOiB1aW50NjQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjEwMQoJLy8gdGhpcy5zZW5kTUJSUGF5bWVudChwcmVNQlIpCglmcmFtZV9kaWcgMCAvLyBwcmVNQlI6IHVpbnQ2NAoJY2FsbHN1YiBzZW5kTUJSUGF5bWVudAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYWRkQXBwVG9XaGl0ZUxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjQscGF5KXZvaWQiCgltZXRob2QgInNldEFwcFdoaXRlbGlzdChzdHJpbmcsdWludDE2LHVpbnQ2NFtdKXZvaWQiCgltZXRob2QgImRlbGV0ZVdoaXRlbGlzdChzdHJpbmcsdWludDE2KXZvaWQiCgltZXRob2QgImRlbGV0ZUFwcEZyb21XaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjQsdWludDY0KXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FkZEFwcFRvV2hpdGVMaXN0ICphYmlfcm91dGVfc2V0QXBwV2hpdGVsaXN0ICphYmlfcm91dGVfZGVsZXRlV2hpdGVsaXN0ICphYmlfcm91dGVfZGVsZXRlQXBwRnJvbVdoaXRlbGlzdAoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycgoKKnByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQ6Cglwcm90byA0IDMKCWZyYW1lX2RpZyAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTEgLy8gZWxlbWVudAoJY29uY2F0CglmcmFtZV9kaWcgLTMgLy8gdHVwbGUgdGFpbAoJZnJhbWVfZGlnIC0yIC8vIGhlYWQgb2Zmc2V0CglyZXRzdWIKCipwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudDoKCXByb3RvIDQgMwoJZnJhbWVfZGlnIC00IC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglmcmFtZV9idXJ5IC00IC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMSAvLyBlbGVtZW50CglkdXAKCWxlbgoJZnJhbWVfZGlnIC0yIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJZnJhbWVfYnVyeSAtMiAvLyBoZWFkIG9mZnNldAoJZnJhbWVfZGlnIC0zIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMyAvLyB0dXBsZSB0YWlsCglmcmFtZV9kaWcgLTQgLy8gdHVwbGUgaGVhZAoJZnJhbWVfZGlnIC0zIC8vIHR1cGxlIHRhaWwKCWZyYW1lX2RpZyAtMiAvLyBoZWFkIG9mZnNldAoJcmV0c3Vi", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHZlcmlmeU1CUlBheW1lbnQocGF5bWVudDogUGF5VHhuLCBwcmVNQlI6IHVpbnQ2NCk6IHZvaWQKdmVyaWZ5TUJSUGF5bWVudDoKCXByb3RvIDIgMAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MTAKCS8vIHZlcmlmeVBheVR4bihwYXltZW50LCB7CgkvLyAgICAgICByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFtb3VudDogdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBQYXlUeG4KCWd0eG5zIFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InBheW1lbnQiLCJmaWVsZCI6InJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgLTIgLy8gcHJlTUJSOiB1aW50NjQKCS0KCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJwYXltZW50IiwiZmllbGQiOiJhbW91bnQiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUiJ9Cglhc3NlcnQKCXJldHN1YgoKLy8gc2VuZE1CUlBheW1lbnQocHJlTUJSOiB1aW50NjQpOiB2b2lkCnNlbmRNQlJQYXltZW50OgoJcHJvdG8gMSAwCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoxNwoJLy8gdGhpcy50eG5Db21wb3Nlci5zZW5kKAoJLy8gICAgICAgbmV3IFBheVR4bih7CgkvLyAgICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICAgIGFtb3VudDogcHJlTUJSIC0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlLAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoxOQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MjAKCS8vIGFtb3VudDogcHJlTUJSIC0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlCglmcmFtZV9kaWcgLTEgLy8gcHJlTUJSOiB1aW50NjQKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFkZEFwcFRvV2hpdGVMaXN0KHN0cmluZyx1aW50MTYsdWludDY0LHBheSl2b2lkCiphYmlfcm91dGVfYWRkQXBwVG9XaGl0ZUxpc3Q6CgkvLyBwYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAwIChwYXltZW50KSBmb3IgYWRkQXBwVG9XaGl0ZUxpc3QgbXVzdCBiZSBhIHBheSB0cmFuc2FjdGlvbgoJYXNzZXJ0CgoJLy8gYXBwSUQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoKCS8vIGJveEluZGV4OiB1aW50MTYKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMgoJPT0KCgkvLyBhcmd1bWVudCAyIChib3hJbmRleCkgZm9yIGFkZEFwcFRvV2hpdGVMaXN0IG11c3QgYmUgYSB1aW50MTYKCWFzc2VydAoJYnRvaQoKCS8vIGFyYzogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoKCS8vIGV4ZWN1dGUgYWRkQXBwVG9XaGl0ZUxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjQscGF5KXZvaWQKCWNhbGxzdWIgYWRkQXBwVG9XaGl0ZUxpc3QKCWludCAxCglyZXR1cm4KCi8vIGFkZEFwcFRvV2hpdGVMaXN0KGFyYzogc3RyaW5nLCBib3hJbmRleDogdWludDE2LCBhcHBJRDogdWludDY0LCBwYXltZW50OiBQYXlUeG4pOiB2b2lkCi8vCi8vIEFkZCBhcHAgdG8gd2hpdGVsaXN0IGJveAovLwovLyBAcGFyYW0gYXJjIC0gVGhlIEFSQyB0aGUgd2hpdGVsaXN0IGNvcnJlc3BvbmRzIHRvCi8vIEBwYXJhbSBib3hJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgd2hpdGVsaXN0IGJveCB0byBhZGQgdGhlIGFwcCB0bwovLyBAcGFyYW0gYXBwSUQgLSBUaGUgYXBwIElEIHRvIGFkZCB0byB0aGUgd2hpdGVsaXN0Ci8vIEBwYXJhbSBwYXltZW50IC0gVGhlIHBheW1lbnQgdHJhbnNhY3Rpb24gdG8gY292ZXIgdGhlIE1CUiBjaGFuZ2UKYWRkQXBwVG9XaGl0ZUxpc3Q6Cglwcm90byA0IDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czozNQoJLy8gcHJlTUJSID0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MzYKCS8vIHdoaXRlbGlzdDogV2hpdGVsaXN0ID0geyBhY2NvdW50OiB0aGlzLnR4bi5zZW5kZXIsIGJveEluZGV4OiBib3hJbmRleCwgYXJjOiBhcmMgfQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAyNCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0Cgl0eG4gU2VuZGVyCgljYWxsc3ViICpwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglmcmFtZV9kaWcgLTIgLy8gYm94SW5kZXg6IHVpbnQxNgoJaXRvYgoJZXh0cmFjdCA2IDIKCWNhbGxzdWIgKnByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtMSAvLyBhcmM6IHN0cmluZwoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgKnByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoKCS8vICppZjBfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjM4CgkvLyB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLmV4aXN0cwoJZnJhbWVfZGlnIDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbHNlCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjM5CgkvLyB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLnZhbHVlLnB1c2goYXBwSUQpCglmcmFtZV9kaWcgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy53aGl0ZWxpc3Qod2hpdGVsaXN0KS52YWx1ZQoJYXNzZXJ0CglleHRyYWN0IDIgMAoJZnJhbWVfZGlnIC0zIC8vIGFwcElEOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJZnJhbWVfZGlnIDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWR1cAoJYm94X2RlbAoJcG9wCglzd2FwCglkdXAKCWxlbgoJaW50IDgKCS8KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJveF9wdXQKCWIgKmlmMF9lbmQKCippZjBfZWxzZToKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NDEKCS8vIG5ld1doaXRlbGlzdDogdWludDY0W10gPSBbYXBwSURdCglmcmFtZV9kaWcgLTMgLy8gYXBwSUQ6IHVpbnQ2NAoJaXRvYgoJZnJhbWVfYnVyeSAyIC8vIG5ld1doaXRlbGlzdDogdWludDY0W10KCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjQyCgkvLyB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLnZhbHVlID0gbmV3V2hpdGVsaXN0CglmcmFtZV9kaWcgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJZHVwCglib3hfZGVsCglwb3AKCWZyYW1lX2RpZyAyIC8vIG5ld1doaXRlbGlzdDogdWludDY0W10KCWR1cAoJbGVuCglpbnQgOAoJLwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJYm94X3B1dAoKKmlmMF9lbmQ6CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjQ1CgkvLyB0aGlzLnZlcmlmeU1CUlBheW1lbnQocGF5bWVudCwgcHJlTUJSKQoJZnJhbWVfZGlnIDAgLy8gcHJlTUJSOiB1aW50NjQKCWZyYW1lX2RpZyAtNCAvLyBwYXltZW50OiBQYXlUeG4KCWNhbGxzdWIgdmVyaWZ5TUJSUGF5bWVudAoJcmV0c3ViCgovLyBzZXRBcHBXaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjRbXSl2b2lkCiphYmlfcm91dGVfc2V0QXBwV2hpdGVsaXN0OgoJLy8gYXBwSURzOiB1aW50NjRbXQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZXh0cmFjdCAyIDAKCgkvLyBib3hJbmRleDogdWludDE2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDIKCT09CgoJLy8gYXJndW1lbnQgMSAoYm94SW5kZXgpIGZvciBzZXRBcHBXaGl0ZWxpc3QgbXVzdCBiZSBhIHVpbnQxNgoJYXNzZXJ0CglidG9pCgoJLy8gYXJjOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBzZXRBcHBXaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjRbXSl2b2lkCgljYWxsc3ViIHNldEFwcFdoaXRlbGlzdAoJaW50IDEKCXJldHVybgoKLy8gc2V0QXBwV2hpdGVsaXN0KGFyYzogc3RyaW5nLCBib3hJbmRleDogdWludDE2LCBhcHBJRHM6IHVpbnQ2NFtdKTogdm9pZAovLwovLyBTZXRzIGEgYXBwIHdoaXRlbGlzdCBmb3IgdGhlIHNlbmRlci4gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGFkZGluZy9yZW1vdmluZwovLyBtb3JlIHRoYW4gb25lIGFwcAovLwovLyBAcGFyYW0gYm94SW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHdoaXRlbGlzdCBib3ggdG8gcHV0IHRoZSBhcHAgSURzIGluCi8vIEBwYXJhbSBhcHBJRHMgLSBBcnJheSBvZiBhcHAgSURzIHRoYXQgc2lnbmlmeSB0aGUgd2hpdGVsaXN0ZWQgYXBwcwpzZXRBcHBXaGl0ZWxpc3Q6Cglwcm90byAzIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo1NwoJLy8gcHJlTUJSID0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NTgKCS8vIHdoaXRlbGlzdDogV2hpdGVsaXN0ID0geyBhY2NvdW50OiB0aGlzLnR4bi5zZW5kZXIsIGJveEluZGV4OiBib3hJbmRleCwgYXJjOiBhcmMgfQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAyNCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0Cgl0eG4gU2VuZGVyCgljYWxsc3ViICpwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglmcmFtZV9kaWcgLTIgLy8gYm94SW5kZXg6IHVpbnQxNgoJaXRvYgoJZXh0cmFjdCA2IDIKCWNhbGxzdWIgKnByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtMSAvLyBhcmM6IHN0cmluZwoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgKnByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NjAKCS8vIHRoaXMud2hpdGVsaXN0KHdoaXRlbGlzdCkuZGVsZXRlKCkKCWZyYW1lX2RpZyAxIC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZGVsCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo2MgoJLy8gdGhpcy53aGl0ZWxpc3Qod2hpdGVsaXN0KS52YWx1ZSA9IGFwcElEcwoJZnJhbWVfZGlnIDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWR1cAoJYm94X2RlbAoJcG9wCglmcmFtZV9kaWcgLTMgLy8gYXBwSURzOiB1aW50NjRbXQoJZHVwCglsZW4KCWludCA4CgkvCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0Cglib3hfcHV0CgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NjQKCS8vIHByZU1CUiA+IHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gcHJlTUJSOiB1aW50NjQKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKmlmMV9lbHNlCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjY1CgkvLyB0aGlzLnNlbmRNQlJQYXltZW50KHByZU1CUikKCWZyYW1lX2RpZyAwIC8vIHByZU1CUjogdWludDY0CgljYWxsc3ViIHNlbmRNQlJQYXltZW50CgliICppZjFfZW5kCgoqaWYxX2Vsc2U6CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjY3CgkvLyB0aGlzLnZlcmlmeU1CUlBheW1lbnQodGhpcy50eG5Hcm91cFt0aGlzLnR4bi5ncm91cEluZGV4IC0gMV0gYXMgUGF5VHhuLCBwcmVNQlIpCglmcmFtZV9kaWcgMCAvLyBwcmVNQlI6IHVpbnQ2NAoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgcGF5Cgk9PQoJYXNzZXJ0CgoJLy8gZmFpbGVkIHRvIGNhc3QgdGhpcy50eG5Hcm91cFt0aGlzLnR4bi5ncm91cEluZGV4IC0gMV0gdG8gcGF5Cglhc3NlcnQKCWNhbGxzdWIgdmVyaWZ5TUJSUGF5bWVudAoKKmlmMV9lbmQ6CglyZXRzdWIKCi8vIGRlbGV0ZVdoaXRlbGlzdChzdHJpbmcsdWludDE2KXZvaWQKKmFiaV9yb3V0ZV9kZWxldGVXaGl0ZWxpc3Q6CgkvLyBib3hJbmRleDogdWludDE2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDIKCT09CgoJLy8gYXJndW1lbnQgMCAoYm94SW5kZXgpIGZvciBkZWxldGVXaGl0ZWxpc3QgbXVzdCBiZSBhIHVpbnQxNgoJYXNzZXJ0CglidG9pCgoJLy8gYXJjOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBkZWxldGVXaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNil2b2lkCgljYWxsc3ViIGRlbGV0ZVdoaXRlbGlzdAoJaW50IDEKCXJldHVybgoKLy8gZGVsZXRlV2hpdGVsaXN0KGFyYzogc3RyaW5nLCBib3hJbmRleDogdWludDE2KTogdm9pZAovLwovLyBEZWxldGVzIGEgYXBwIHdoaXRlbGlzdCBmb3IgdGhlIHNlbmRlcgovLwovLyBAcGFyYW0gYXJjIC0gVGhlIEFSQyB0aGUgd2hpdGVsaXN0IGNvcnJlc3BvbmRzIHRvCi8vIEBwYXJhbSBib3hJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgd2hpdGVsaXN0IGJveCB0byBkZWxldGUKZGVsZXRlV2hpdGVsaXN0OgoJcHJvdG8gMiAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NzkKCS8vIHByZU1CUiA9IHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDAgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjgwCgkvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdCA9IHsgYWNjb3VudDogdGhpcy50eG4uc2VuZGVyLCBib3hJbmRleDogYm94SW5kZXgsIGFyYzogYXJjIH0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMjQgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJdHhuIFNlbmRlcgoJY2FsbHN1YiAqcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJZnJhbWVfZGlnIC0yIC8vIGJveEluZGV4OiB1aW50MTYKCWl0b2IKCWV4dHJhY3QgNiAyCgljYWxsc3ViICpwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglmcmFtZV9kaWcgLTEgLy8gYXJjOiBzdHJpbmcKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViICpwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjgyCgkvLyB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLmRlbGV0ZSgpCglmcmFtZV9kaWcgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJYm94X2RlbAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6ODQKCS8vIHRoaXMuc2VuZE1CUlBheW1lbnQocHJlTUJSKQoJZnJhbWVfZGlnIDAgLy8gcHJlTUJSOiB1aW50NjQKCWNhbGxzdWIgc2VuZE1CUlBheW1lbnQKCXJldHN1YgoKLy8gZGVsZXRlQXBwRnJvbVdoaXRlbGlzdChzdHJpbmcsdWludDE2LHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2RlbGV0ZUFwcEZyb21XaGl0ZWxpc3Q6CgkvLyBpbmRleDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA0CglidG9pCgoJLy8gYXBwSUQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoKCS8vIGJveEluZGV4OiB1aW50MTYKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMgoJPT0KCgkvLyBhcmd1bWVudCAyIChib3hJbmRleCkgZm9yIGRlbGV0ZUFwcEZyb21XaGl0ZWxpc3QgbXVzdCBiZSBhIHVpbnQxNgoJYXNzZXJ0CglidG9pCgoJLy8gYXJjOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBkZWxldGVBcHBGcm9tV2hpdGVsaXN0KHN0cmluZyx1aW50MTYsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIGRlbGV0ZUFwcEZyb21XaGl0ZWxpc3QKCWludCAxCglyZXR1cm4KCi8vIGRlbGV0ZUFwcEZyb21XaGl0ZWxpc3QoYXJjOiBzdHJpbmcsIGJveEluZGV4OiB1aW50MTYsIGFwcElEOiB1aW50NjQsIGluZGV4OiB1aW50NjQpOiB2b2lkCi8vCi8vIERlbGV0ZXMgYSBhcHAgZnJvbSBhIHdoaXRlbGlzdCBmb3IgdGhlIHNlbmRlcgovLwovLyBAcGFyYW0gYm94SW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHdoaXRlbGlzdCBib3ggdG8gZGVsZXRlIGZyb20KLy8gQHBhcmFtIGFwcElEIC0gVGhlIGFwcCBJRCB0byBkZWxldGUgZnJvbSB0aGUgd2hpdGVsaXN0Ci8vIEBwYXJhbSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgYXBwIGluIHRoZSB3aGl0ZWxpc3QKZGVsZXRlQXBwRnJvbVdoaXRlbGlzdDoKCXByb3RvIDQgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjk2CgkvLyBwcmVNQlIgPSB0aGlzLmFwcC5hZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHByZU1CUjogdWludDY0CgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo5NwoJLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QgPSB7IGFjY291bnQ6IHRoaXMudHhuLnNlbmRlciwgYm94SW5kZXg6IGJveEluZGV4LCBhcmM6IGFyYyB9CglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDI0IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCXR4biBTZW5kZXIKCWNhbGxzdWIgKnByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtMiAvLyBib3hJbmRleDogdWludDE2CglpdG9iCglleHRyYWN0IDYgMgoJY2FsbHN1YiAqcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJZnJhbWVfZGlnIC0xIC8vIGFyYzogc3RyaW5nCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiAqcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAxIC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0CgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo5OQoJLy8gc3BsaWNlZCA9IHRoaXMud2hpdGVsaXN0KHdoaXRlbGlzdCkudmFsdWUuc3BsaWNlKGluZGV4LCAxKQoJZnJhbWVfZGlnIDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMud2hpdGVsaXN0KHdoaXRlbGlzdCkudmFsdWUKCWFzc2VydAoJZXh0cmFjdCAyIDAKCWludCAxCglmcmFtZV9kaWcgLTQgLy8gaW5kZXg6IHVpbnQ2NAoJaW50IDgKCSoKCXN0b3JlIDI0NyAvLyBzcGxpY2Ugc3RhcnQKCWludCAxNgoJc3RvcmUgMjQ2IC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIDEgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMud2hpdGVsaXN0KHdoaXRlbGlzdCkudmFsdWUKCWFzc2VydAoJZXh0cmFjdCAyIDAKCWludCAwCglsb2FkIDI0NyAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAxIC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLnZhbHVlCglhc3NlcnQKCWV4dHJhY3QgMiAwCglkdXAKCWxlbgoJbG9hZCAyNDcgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDI0NiAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCA4CgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWZyYW1lX2RpZyAxIC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLndoaXRlbGlzdCh3aGl0ZWxpc3QpLnZhbHVlCglhc3NlcnQKCWV4dHJhY3QgMiAwCglsb2FkIDI0NyAvLyBzcGxpY2Ugc3RhcnQKCWxvYWQgMjQ2IC8vIHNwbGljZSBieXRlIGxlbmd0aAoJaW50IDgKCS0KCWV4dHJhY3QzCglzd2FwCglmcmFtZV9kaWcgMSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJZHVwCglib3hfZGVsCglwb3AKCXN3YXAKCWR1cAoJbGVuCglpbnQgOAoJLwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJYm94X3B1dAoJZnJhbWVfYnVyeSAyIC8vIHNwbGljZWQ6IHVpbnQ2NFtdCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoxMDEKCS8vIGFzc2VydChzcGxpY2VkWzBdID09PSBhcHBJRCkKCWZyYW1lX2RpZyAyIC8vIHNwbGljZWQ6IHVpbnQ2NFtdCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWZyYW1lX2RpZyAtMyAvLyBhcHBJRDogdWludDY0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoxMDMKCS8vIHRoaXMuc2VuZE1CUlBheW1lbnQocHJlTUJSKQoJZnJhbWVfZGlnIDAgLy8gcHJlTUJSOiB1aW50NjQKCWNhbGxzdWIgc2VuZE1CUlBheW1lbnQKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFkZEFwcFRvV2hpdGVMaXN0KHN0cmluZyx1aW50MTYsdWludDY0LHBheSl2b2lkIgoJbWV0aG9kICJzZXRBcHBXaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjRbXSl2b2lkIgoJbWV0aG9kICJkZWxldGVXaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNil2b2lkIgoJbWV0aG9kICJkZWxldGVBcHBGcm9tV2hpdGVsaXN0KHN0cmluZyx1aW50MTYsdWludDY0LHVpbnQ2NCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hZGRBcHBUb1doaXRlTGlzdCAqYWJpX3JvdXRlX3NldEFwcFdoaXRlbGlzdCAqYWJpX3JvdXRlX2RlbGV0ZVdoaXRlbGlzdCAqYWJpX3JvdXRlX2RlbGV0ZUFwcEZyb21XaGl0ZWxpc3QKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnIKCipwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50OgoJcHJvdG8gNCAzCglmcmFtZV9kaWcgLTQgLy8gdHVwbGUgaGVhZAoJZnJhbWVfZGlnIC0xIC8vIGVsZW1lbnQKCWNvbmNhdAoJZnJhbWVfZGlnIC0zIC8vIHR1cGxlIHRhaWwKCWZyYW1lX2RpZyAtMiAvLyBoZWFkIG9mZnNldAoJcmV0c3ViCgoqcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQ6Cglwcm90byA0IDMKCWZyYW1lX2RpZyAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTEgLy8gZWxlbWVudAoJZHVwCglsZW4KCWZyYW1lX2RpZyAtMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2J1cnkgLTIgLy8gaGVhZCBvZmZzZXQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTMgLy8gdHVwbGUgdGFpbAoJZnJhbWVfZGlnIC00IC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCXJldHN1Yg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/examples/arc75/artifacts/ARC75.src_map.json b/examples/arc75/artifacts/ARC75.src_map.json index b858fe3f9..fe2f6131d 100644 --- a/examples/arc75/artifacts/ARC75.src_map.json +++ b/examples/arc75/artifacts/ARC75.src_map.json @@ -237,21 +237,21 @@ ] }, { - "teal": 66, + "teal": 68, "source": 17, "pc": [ 78 ] }, { - "teal": 67, + "teal": 69, "source": 17, "pc": [ 79 ] }, { - "teal": 68, + "teal": 70, "source": 17, "pc": [ 80, @@ -259,76 +259,76 @@ ] }, { - "teal": 72, - "source": 18, + "teal": 74, + "source": 19, "pc": [ 82, 83 ] }, { - "teal": 73, - "source": 18, + "teal": 75, + "source": 19, "pc": [ 84, 85 ] }, { - "teal": 77, - "source": 19, + "teal": 79, + "source": 20, "pc": [ 86, 87 ] }, { - "teal": 78, - "source": 19, + "teal": 80, + "source": 20, "pc": [ 88, 89 ] }, { - "teal": 79, - "source": 19, + "teal": 81, + "source": 20, "pc": [ 90, 91 ] }, { - "teal": 80, - "source": 19, + "teal": 82, + "source": 20, "pc": [ 92 ] }, { - "teal": 81, - "source": 19, + "teal": 83, + "source": 20, "pc": [ 93 ] }, { - "teal": 82, - "source": 19, + "teal": 84, + "source": 20, "pc": [ 94, 95 ] }, { - "teal": 85, + "teal": 87, "source": 17, "pc": [ 96 ] }, { - "teal": 86, + "teal": 88, "source": 17, "pc": [ 97, @@ -336,81 +336,81 @@ ] }, { - "teal": 89, + "teal": 91, "source": 17, "pc": [ 99 ] }, { - "teal": 90, + "teal": 92, "source": 16, "pc": [ 100 ] }, { - "teal": 95, - "source": 32, + "teal": 97, + "source": 34, "pc": [ 101, 102 ] }, { - "teal": 96, - "source": 32, + "teal": 98, + "source": 34, "pc": [ 103 ] }, { - "teal": 97, - "source": 32, + "teal": 99, + "source": 34, "pc": [ 104 ] }, { - "teal": 98, - "source": 32, + "teal": 100, + "source": 34, "pc": [ 105 ] }, { - "teal": 99, - "source": 32, + "teal": 101, + "source": 34, "pc": [ 106, 107 ] }, { - "teal": 100, - "source": 32, + "teal": 102, + "source": 34, "pc": [ 108 ] }, { - "teal": 101, - "source": 32, + "teal": 103, + "source": 34, "pc": [ 109 ] }, { - "teal": 104, - "source": 32, + "teal": 106, + "source": 34, "errorMessage": "argument 0 (payment) for addAppToWhiteList must be a pay transaction", "pc": [ 110 ] }, { - "teal": 107, - "source": 32, + "teal": 109, + "source": 34, "pc": [ 111, 112, @@ -418,15 +418,15 @@ ] }, { - "teal": 108, - "source": 32, + "teal": 110, + "source": 34, "pc": [ 114 ] }, { - "teal": 111, - "source": 32, + "teal": 113, + "source": 34, "pc": [ 115, 116, @@ -434,51 +434,51 @@ ] }, { - "teal": 112, - "source": 32, + "teal": 114, + "source": 34, "pc": [ 118 ] }, { - "teal": 113, - "source": 32, + "teal": 115, + "source": 34, "pc": [ 119 ] }, { - "teal": 114, - "source": 32, + "teal": 116, + "source": 34, "pc": [ 120 ] }, { - "teal": 115, - "source": 32, + "teal": 117, + "source": 34, "pc": [ 121 ] }, { - "teal": 118, - "source": 32, + "teal": 120, + "source": 34, "errorMessage": "argument 2 (boxIndex) for addAppToWhiteList must be a uint16", "pc": [ 122 ] }, { - "teal": 119, - "source": 32, + "teal": 121, + "source": 34, "pc": [ 123 ] }, { - "teal": 122, - "source": 32, + "teal": 124, + "source": 34, "pc": [ 124, 125, @@ -486,8 +486,8 @@ ] }, { - "teal": 123, - "source": 32, + "teal": 125, + "source": 34, "pc": [ 127, 128, @@ -495,8 +495,8 @@ ] }, { - "teal": 126, - "source": 32, + "teal": 128, + "source": 34, "pc": [ 130, 131, @@ -504,22 +504,22 @@ ] }, { - "teal": 127, - "source": 32, + "teal": 129, + "source": 34, "pc": [ 133 ] }, { - "teal": 128, - "source": 32, + "teal": 130, + "source": 34, "pc": [ 134 ] }, { - "teal": 139, - "source": 32, + "teal": 141, + "source": 34, "pc": [ 135, 136, @@ -527,83 +527,83 @@ ] }, { - "teal": 142, - "source": 32, + "teal": 144, + "source": 34, "pc": [ 138 ] }, { - "teal": 143, - "source": 32, + "teal": 145, + "source": 34, "pc": [ 139, 140 ] }, { - "teal": 147, - "source": 33, + "teal": 149, + "source": 35, "pc": [ 141, 142 ] }, { - "teal": 148, - "source": 33, + "teal": 150, + "source": 35, "pc": [ 143, 144 ] }, { - "teal": 149, - "source": 33, + "teal": 151, + "source": 35, "pc": [ 145 ] }, { - "teal": 150, - "source": 33, + "teal": 152, + "source": 35, "pc": [ 146, 147 ] }, { - "teal": 154, - "source": 34, + "teal": 156, + "source": 36, "pc": [ 148 ] }, { - "teal": 155, - "source": 34, + "teal": 157, + "source": 36, "pc": [ 149 ] }, { - "teal": 156, - "source": 34, + "teal": 158, + "source": 36, "pc": [ 150 ] }, { - "teal": 157, - "source": 34, + "teal": 159, + "source": 36, "pc": [ 151, 152 ] }, { - "teal": 158, - "source": 34, + "teal": 160, + "source": 36, "pc": [ 153, 154, @@ -611,23 +611,23 @@ ] }, { - "teal": 159, - "source": 34, + "teal": 161, + "source": 36, "pc": [ 156, 157 ] }, { - "teal": 160, - "source": 34, + "teal": 162, + "source": 36, "pc": [ 158 ] }, { - "teal": 161, - "source": 34, + "teal": 163, + "source": 36, "pc": [ 159, 160, @@ -635,8 +635,8 @@ ] }, { - "teal": 162, - "source": 34, + "teal": 164, + "source": 36, "pc": [ 162, 163, @@ -644,37 +644,37 @@ ] }, { - "teal": 163, - "source": 34, + "teal": 165, + "source": 36, "pc": [ 165, 166 ] }, { - "teal": 164, - "source": 34, + "teal": 166, + "source": 36, "pc": [ 167 ] }, { - "teal": 165, - "source": 34, + "teal": 167, + "source": 36, "pc": [ 168 ] }, { - "teal": 166, - "source": 34, + "teal": 168, + "source": 36, "pc": [ 169 ] }, { - "teal": 167, - "source": 34, + "teal": 169, + "source": 36, "pc": [ 170, 171, @@ -682,22 +682,22 @@ ] }, { - "teal": 168, - "source": 34, + "teal": 170, + "source": 36, "pc": [ 173 ] }, { - "teal": 169, - "source": 34, + "teal": 171, + "source": 36, "pc": [ 174 ] }, { - "teal": 170, - "source": 34, + "teal": 172, + "source": 36, "pc": [ 175, 176, @@ -705,59 +705,59 @@ ] }, { - "teal": 171, - "source": 34, + "teal": 173, + "source": 36, "pc": [ 178 ] }, { - "teal": 172, - "source": 34, + "teal": 174, + "source": 36, "pc": [ 179 ] }, { - "teal": 173, - "source": 34, + "teal": 175, + "source": 36, "pc": [ 180, 181 ] }, { - "teal": 178, - "source": 36, + "teal": 180, + "source": 38, "pc": [ 182, 183 ] }, { - "teal": 179, - "source": 36, + "teal": 181, + "source": 38, "pc": [ 184 ] }, { - "teal": 180, - "source": 36, + "teal": 182, + "source": 38, "pc": [ 185 ] }, { - "teal": 181, - "source": 36, + "teal": 183, + "source": 38, "pc": [ 186 ] }, { - "teal": 182, - "source": 36, + "teal": 184, + "source": 38, "pc": [ 187, 188, @@ -765,31 +765,31 @@ ] }, { - "teal": 187, - "source": 37, + "teal": 189, + "source": 39, "pc": [ 190, 191 ] }, { - "teal": 188, - "source": 37, + "teal": 190, + "source": 39, "pc": [ 192 ] }, { - "teal": 191, - "source": 37, + "teal": 193, + "source": 39, "errorMessage": "box value does not exist: this.whitelist(whitelist).value", "pc": [ 193 ] }, { - "teal": 192, - "source": 37, + "teal": 194, + "source": 39, "pc": [ 194, 195, @@ -797,101 +797,101 @@ ] }, { - "teal": 193, - "source": 37, + "teal": 195, + "source": 39, "pc": [ 197, 198 ] }, { - "teal": 194, - "source": 37, + "teal": 196, + "source": 39, "pc": [ 199 ] }, { - "teal": 195, - "source": 37, + "teal": 197, + "source": 39, "pc": [ 200 ] }, { - "teal": 196, - "source": 37, + "teal": 198, + "source": 39, "pc": [ 201, 202 ] }, { - "teal": 197, - "source": 37, + "teal": 199, + "source": 39, "pc": [ 203 ] }, { - "teal": 198, - "source": 37, + "teal": 200, + "source": 39, "pc": [ 204 ] }, { - "teal": 199, - "source": 37, + "teal": 201, + "source": 39, "pc": [ 205 ] }, { - "teal": 200, - "source": 37, + "teal": 202, + "source": 39, "pc": [ 206 ] }, { - "teal": 201, - "source": 37, + "teal": 203, + "source": 39, "pc": [ 207 ] }, { - "teal": 202, - "source": 37, + "teal": 204, + "source": 39, "pc": [ 208 ] }, { - "teal": 203, - "source": 37, + "teal": 205, + "source": 39, "pc": [ 209 ] }, { - "teal": 204, - "source": 37, + "teal": 206, + "source": 39, "pc": [ 210 ] }, { - "teal": 205, - "source": 37, + "teal": 207, + "source": 39, "pc": [ 211 ] }, { - "teal": 206, - "source": 37, + "teal": 208, + "source": 39, "pc": [ 212, 213, @@ -899,29 +899,29 @@ ] }, { - "teal": 207, - "source": 37, + "teal": 209, + "source": 39, "pc": [ 215 ] }, { - "teal": 208, - "source": 37, + "teal": 210, + "source": 39, "pc": [ 216 ] }, { - "teal": 209, - "source": 37, + "teal": 211, + "source": 39, "pc": [ 217 ] }, { - "teal": 210, - "source": 36, + "teal": 212, + "source": 38, "pc": [ 218, 219, @@ -929,103 +929,103 @@ ] }, { - "teal": 215, - "source": 39, + "teal": 217, + "source": 41, "pc": [ 221, 222 ] }, { - "teal": 216, - "source": 39, + "teal": 218, + "source": 41, "pc": [ 223 ] }, { - "teal": 217, - "source": 39, + "teal": 219, + "source": 41, "pc": [ 224, 225 ] }, { - "teal": 221, - "source": 40, + "teal": 223, + "source": 42, "pc": [ 226, 227 ] }, { - "teal": 222, - "source": 40, + "teal": 224, + "source": 42, "pc": [ 228 ] }, { - "teal": 223, - "source": 40, + "teal": 225, + "source": 42, "pc": [ 229 ] }, { - "teal": 224, - "source": 40, + "teal": 226, + "source": 42, "pc": [ 230 ] }, { - "teal": 225, - "source": 40, + "teal": 227, + "source": 42, "pc": [ 231, 232 ] }, { - "teal": 226, - "source": 40, + "teal": 228, + "source": 42, "pc": [ 233 ] }, { - "teal": 227, - "source": 40, + "teal": 229, + "source": 42, "pc": [ 234 ] }, { - "teal": 228, - "source": 40, + "teal": 230, + "source": 42, "pc": [ 235 ] }, { - "teal": 229, - "source": 40, + "teal": 231, + "source": 42, "pc": [ 236 ] }, { - "teal": 230, - "source": 40, + "teal": 232, + "source": 42, "pc": [ 237 ] }, { - "teal": 231, - "source": 40, + "teal": 233, + "source": 42, "pc": [ 238, 239, @@ -1033,45 +1033,45 @@ ] }, { - "teal": 232, - "source": 40, + "teal": 234, + "source": 42, "pc": [ 241 ] }, { - "teal": 233, - "source": 40, + "teal": 235, + "source": 42, "pc": [ 242 ] }, { - "teal": 234, - "source": 40, + "teal": 236, + "source": 42, "pc": [ 243 ] }, { - "teal": 239, - "source": 43, + "teal": 241, + "source": 45, "pc": [ 244, 245 ] }, { - "teal": 240, - "source": 43, + "teal": 242, + "source": 45, "pc": [ 246, 247 ] }, { - "teal": 241, - "source": 43, + "teal": 243, + "source": 45, "pc": [ 248, 249, @@ -1079,15 +1079,15 @@ ] }, { - "teal": 242, - "source": 32, + "teal": 244, + "source": 34, "pc": [ 251 ] }, { - "teal": 247, - "source": 54, + "teal": 249, + "source": 56, "pc": [ 252, 253, @@ -1095,8 +1095,8 @@ ] }, { - "teal": 248, - "source": 54, + "teal": 250, + "source": 56, "pc": [ 255, 256, @@ -1104,8 +1104,8 @@ ] }, { - "teal": 251, - "source": 54, + "teal": 253, + "source": 56, "pc": [ 258, 259, @@ -1113,51 +1113,51 @@ ] }, { - "teal": 252, - "source": 54, + "teal": 254, + "source": 56, "pc": [ 261 ] }, { - "teal": 253, - "source": 54, + "teal": 255, + "source": 56, "pc": [ 262 ] }, { - "teal": 254, - "source": 54, + "teal": 256, + "source": 56, "pc": [ 263 ] }, { - "teal": 255, - "source": 54, + "teal": 257, + "source": 56, "pc": [ 264 ] }, { - "teal": 258, - "source": 54, + "teal": 260, + "source": 56, "errorMessage": "argument 1 (boxIndex) for setAppWhitelist must be a uint16", "pc": [ 265 ] }, { - "teal": 259, - "source": 54, + "teal": 261, + "source": 56, "pc": [ 266 ] }, { - "teal": 262, - "source": 54, + "teal": 264, + "source": 56, "pc": [ 267, 268, @@ -1165,8 +1165,8 @@ ] }, { - "teal": 263, - "source": 54, + "teal": 265, + "source": 56, "pc": [ 270, 271, @@ -1174,8 +1174,8 @@ ] }, { - "teal": 266, - "source": 54, + "teal": 268, + "source": 56, "pc": [ 273, 274, @@ -1183,22 +1183,22 @@ ] }, { - "teal": 267, - "source": 54, + "teal": 269, + "source": 56, "pc": [ 276 ] }, { - "teal": 268, - "source": 54, + "teal": 270, + "source": 56, "pc": [ 277 ] }, { - "teal": 278, - "source": 54, + "teal": 280, + "source": 56, "pc": [ 278, 279, @@ -1206,82 +1206,82 @@ ] }, { - "teal": 281, - "source": 54, + "teal": 283, + "source": 56, "pc": [ 281 ] }, { - "teal": 282, - "source": 54, + "teal": 284, + "source": 56, "pc": [ 282 ] }, { - "teal": 286, - "source": 55, + "teal": 288, + "source": 57, "pc": [ 283, 284 ] }, { - "teal": 287, - "source": 55, + "teal": 289, + "source": 57, "pc": [ 285, 286 ] }, { - "teal": 288, - "source": 55, + "teal": 290, + "source": 57, "pc": [ 287 ] }, { - "teal": 289, - "source": 55, + "teal": 291, + "source": 57, "pc": [ 288, 289 ] }, { - "teal": 293, - "source": 56, + "teal": 295, + "source": 58, "pc": [ 290 ] }, { - "teal": 294, - "source": 56, + "teal": 296, + "source": 58, "pc": [ 291 ] }, { - "teal": 295, - "source": 56, + "teal": 297, + "source": 58, "pc": [ 292 ] }, { - "teal": 296, - "source": 56, + "teal": 298, + "source": 58, "pc": [ 293, 294 ] }, { - "teal": 297, - "source": 56, + "teal": 299, + "source": 58, "pc": [ 295, 296, @@ -1289,23 +1289,23 @@ ] }, { - "teal": 298, - "source": 56, + "teal": 300, + "source": 58, "pc": [ 298, 299 ] }, { - "teal": 299, - "source": 56, + "teal": 301, + "source": 58, "pc": [ 300 ] }, { - "teal": 300, - "source": 56, + "teal": 302, + "source": 58, "pc": [ 301, 302, @@ -1313,8 +1313,8 @@ ] }, { - "teal": 301, - "source": 56, + "teal": 303, + "source": 58, "pc": [ 304, 305, @@ -1322,37 +1322,37 @@ ] }, { - "teal": 302, - "source": 56, + "teal": 304, + "source": 58, "pc": [ 307, 308 ] }, { - "teal": 303, - "source": 56, + "teal": 305, + "source": 58, "pc": [ 309 ] }, { - "teal": 304, - "source": 56, + "teal": 306, + "source": 58, "pc": [ 310 ] }, { - "teal": 305, - "source": 56, + "teal": 307, + "source": 58, "pc": [ 311 ] }, { - "teal": 306, - "source": 56, + "teal": 308, + "source": 58, "pc": [ 312, 313, @@ -1360,22 +1360,22 @@ ] }, { - "teal": 307, - "source": 56, + "teal": 309, + "source": 58, "pc": [ 315 ] }, { - "teal": 308, - "source": 56, + "teal": 310, + "source": 58, "pc": [ 316 ] }, { - "teal": 309, - "source": 56, + "teal": 311, + "source": 58, "pc": [ 317, 318, @@ -1383,117 +1383,117 @@ ] }, { - "teal": 310, - "source": 56, + "teal": 312, + "source": 58, "pc": [ 320 ] }, { - "teal": 311, - "source": 56, + "teal": 313, + "source": 58, "pc": [ 321 ] }, { - "teal": 312, - "source": 56, + "teal": 314, + "source": 58, "pc": [ 322, 323 ] }, { - "teal": 316, - "source": 58, + "teal": 318, + "source": 60, "pc": [ 324, 325 ] }, { - "teal": 317, - "source": 58, + "teal": 319, + "source": 60, "pc": [ 326 ] }, { - "teal": 321, - "source": 60, + "teal": 323, + "source": 62, "pc": [ 327, 328 ] }, { - "teal": 322, - "source": 60, + "teal": 324, + "source": 62, "pc": [ 329 ] }, { - "teal": 323, - "source": 60, + "teal": 325, + "source": 62, "pc": [ 330 ] }, { - "teal": 324, - "source": 60, + "teal": 326, + "source": 62, "pc": [ 331 ] }, { - "teal": 325, - "source": 60, + "teal": 327, + "source": 62, "pc": [ 332, 333 ] }, { - "teal": 326, - "source": 60, + "teal": 328, + "source": 62, "pc": [ 334 ] }, { - "teal": 327, - "source": 60, + "teal": 329, + "source": 62, "pc": [ 335 ] }, { - "teal": 328, - "source": 60, + "teal": 330, + "source": 62, "pc": [ 336 ] }, { - "teal": 329, - "source": 60, + "teal": 331, + "source": 62, "pc": [ 337 ] }, { - "teal": 330, - "source": 60, + "teal": 332, + "source": 62, "pc": [ 338 ] }, { - "teal": 331, - "source": 60, + "teal": 333, + "source": 62, "pc": [ 339, 340, @@ -1501,67 +1501,67 @@ ] }, { - "teal": 332, - "source": 60, + "teal": 334, + "source": 62, "pc": [ 342 ] }, { - "teal": 333, - "source": 60, + "teal": 335, + "source": 62, "pc": [ 343 ] }, { - "teal": 334, - "source": 60, + "teal": 336, + "source": 62, "pc": [ 344 ] }, { - "teal": 339, - "source": 62, + "teal": 341, + "source": 64, "pc": [ 345, 346 ] }, { - "teal": 340, - "source": 62, + "teal": 342, + "source": 64, "pc": [ 347, 348 ] }, { - "teal": 341, - "source": 62, + "teal": 343, + "source": 64, "pc": [ 349, 350 ] }, { - "teal": 342, - "source": 62, + "teal": 344, + "source": 64, "pc": [ 351 ] }, { - "teal": 343, - "source": 62, + "teal": 345, + "source": 64, "pc": [ 352 ] }, { - "teal": 344, - "source": 62, + "teal": 346, + "source": 64, "pc": [ 353, 354, @@ -1569,16 +1569,16 @@ ] }, { - "teal": 349, - "source": 63, + "teal": 351, + "source": 65, "pc": [ 356, 357 ] }, { - "teal": 350, - "source": 63, + "teal": 352, + "source": 65, "pc": [ 358, 359, @@ -1586,8 +1586,8 @@ ] }, { - "teal": 351, - "source": 62, + "teal": 353, + "source": 64, "pc": [ 361, 362, @@ -1595,82 +1595,82 @@ ] }, { - "teal": 356, - "source": 65, + "teal": 358, + "source": 67, "pc": [ 364, 365 ] }, { - "teal": 357, - "source": 65, + "teal": 359, + "source": 67, "pc": [ 366, 367 ] }, { - "teal": 358, - "source": 65, + "teal": 360, + "source": 67, "pc": [ 368 ] }, { - "teal": 359, - "source": 65, + "teal": 361, + "source": 67, "pc": [ 369 ] }, { - "teal": 360, - "source": 65, + "teal": 362, + "source": 67, "pc": [ 370 ] }, { - "teal": 361, - "source": 65, + "teal": 363, + "source": 67, "pc": [ 371, 372 ] }, { - "teal": 362, - "source": 65, + "teal": 364, + "source": 67, "pc": [ 373 ] }, { - "teal": 363, - "source": 65, + "teal": 365, + "source": 67, "pc": [ 374 ] }, { - "teal": 364, - "source": 65, + "teal": 366, + "source": 67, "pc": [ 375 ] }, { - "teal": 367, - "source": 65, + "teal": 369, + "source": 67, "errorMessage": "failed to cast this.txnGroup[this.txn.groupIndex - 1] to pay", "pc": [ 376 ] }, { - "teal": 368, - "source": 65, + "teal": 370, + "source": 67, "pc": [ 377, 378, @@ -1678,15 +1678,15 @@ ] }, { - "teal": 371, - "source": 54, + "teal": 373, + "source": 56, "pc": [ 380 ] }, { - "teal": 376, - "source": 76, + "teal": 378, + "source": 78, "pc": [ 381, 382, @@ -1694,51 +1694,51 @@ ] }, { - "teal": 377, - "source": 76, + "teal": 379, + "source": 78, "pc": [ 384 ] }, { - "teal": 378, - "source": 76, + "teal": 380, + "source": 78, "pc": [ 385 ] }, { - "teal": 379, - "source": 76, + "teal": 381, + "source": 78, "pc": [ 386 ] }, { - "teal": 380, - "source": 76, + "teal": 382, + "source": 78, "pc": [ 387 ] }, { - "teal": 383, - "source": 76, + "teal": 385, + "source": 78, "errorMessage": "argument 0 (boxIndex) for deleteWhitelist must be a uint16", "pc": [ 388 ] }, { - "teal": 384, - "source": 76, + "teal": 386, + "source": 78, "pc": [ 389 ] }, { - "teal": 387, - "source": 76, + "teal": 389, + "source": 78, "pc": [ 390, 391, @@ -1746,8 +1746,8 @@ ] }, { - "teal": 388, - "source": 76, + "teal": 390, + "source": 78, "pc": [ 393, 394, @@ -1755,8 +1755,8 @@ ] }, { - "teal": 391, - "source": 76, + "teal": 393, + "source": 78, "pc": [ 396, 397, @@ -1764,22 +1764,22 @@ ] }, { - "teal": 392, - "source": 76, + "teal": 394, + "source": 78, "pc": [ 399 ] }, { - "teal": 393, - "source": 76, + "teal": 395, + "source": 78, "pc": [ 400 ] }, { - "teal": 402, - "source": 76, + "teal": 404, + "source": 78, "pc": [ 401, 402, @@ -1787,82 +1787,82 @@ ] }, { - "teal": 405, - "source": 76, + "teal": 407, + "source": 78, "pc": [ 404 ] }, { - "teal": 406, - "source": 76, + "teal": 408, + "source": 78, "pc": [ 405 ] }, { - "teal": 410, - "source": 77, + "teal": 412, + "source": 79, "pc": [ 406, 407 ] }, { - "teal": 411, - "source": 77, + "teal": 413, + "source": 79, "pc": [ 408, 409 ] }, { - "teal": 412, - "source": 77, + "teal": 414, + "source": 79, "pc": [ 410 ] }, { - "teal": 413, - "source": 77, + "teal": 415, + "source": 79, "pc": [ 411, 412 ] }, { - "teal": 417, - "source": 78, + "teal": 419, + "source": 80, "pc": [ 413 ] }, { - "teal": 418, - "source": 78, + "teal": 420, + "source": 80, "pc": [ 414 ] }, { - "teal": 419, - "source": 78, + "teal": 421, + "source": 80, "pc": [ 415 ] }, { - "teal": 420, - "source": 78, + "teal": 422, + "source": 80, "pc": [ 416, 417 ] }, { - "teal": 421, - "source": 78, + "teal": 423, + "source": 80, "pc": [ 418, 419, @@ -1870,23 +1870,23 @@ ] }, { - "teal": 422, - "source": 78, + "teal": 424, + "source": 80, "pc": [ 421, 422 ] }, { - "teal": 423, - "source": 78, + "teal": 425, + "source": 80, "pc": [ 423 ] }, { - "teal": 424, - "source": 78, + "teal": 426, + "source": 80, "pc": [ 424, 425, @@ -1894,8 +1894,8 @@ ] }, { - "teal": 425, - "source": 78, + "teal": 427, + "source": 80, "pc": [ 427, 428, @@ -1903,37 +1903,37 @@ ] }, { - "teal": 426, - "source": 78, + "teal": 428, + "source": 80, "pc": [ 430, 431 ] }, { - "teal": 427, - "source": 78, + "teal": 429, + "source": 80, "pc": [ 432 ] }, { - "teal": 428, - "source": 78, + "teal": 430, + "source": 80, "pc": [ 433 ] }, { - "teal": 429, - "source": 78, + "teal": 431, + "source": 80, "pc": [ 434 ] }, { - "teal": 430, - "source": 78, + "teal": 432, + "source": 80, "pc": [ 435, 436, @@ -1941,22 +1941,22 @@ ] }, { - "teal": 431, - "source": 78, + "teal": 433, + "source": 80, "pc": [ 438 ] }, { - "teal": 432, - "source": 78, + "teal": 434, + "source": 80, "pc": [ 439 ] }, { - "teal": 433, - "source": 78, + "teal": 435, + "source": 80, "pc": [ 440, 441, @@ -1964,53 +1964,53 @@ ] }, { - "teal": 434, - "source": 78, + "teal": 436, + "source": 80, "pc": [ 443 ] }, { - "teal": 435, - "source": 78, + "teal": 437, + "source": 80, "pc": [ 444 ] }, { - "teal": 436, - "source": 78, + "teal": 438, + "source": 80, "pc": [ 445, 446 ] }, { - "teal": 440, - "source": 80, + "teal": 442, + "source": 82, "pc": [ 447, 448 ] }, { - "teal": 441, - "source": 80, + "teal": 443, + "source": 82, "pc": [ 449 ] }, { - "teal": 445, - "source": 82, + "teal": 447, + "source": 84, "pc": [ 450, 451 ] }, { - "teal": 446, - "source": 82, + "teal": 448, + "source": 84, "pc": [ 452, 453, @@ -2018,15 +2018,15 @@ ] }, { - "teal": 447, - "source": 76, + "teal": 449, + "source": 78, "pc": [ 455 ] }, { - "teal": 452, - "source": 93, + "teal": 454, + "source": 95, "pc": [ 456, 457, @@ -2034,15 +2034,15 @@ ] }, { - "teal": 453, - "source": 93, + "teal": 455, + "source": 95, "pc": [ 459 ] }, { - "teal": 456, - "source": 93, + "teal": 458, + "source": 95, "pc": [ 460, 461, @@ -2050,15 +2050,15 @@ ] }, { - "teal": 457, - "source": 93, + "teal": 459, + "source": 95, "pc": [ 463 ] }, { - "teal": 460, - "source": 93, + "teal": 462, + "source": 95, "pc": [ 464, 465, @@ -2066,51 +2066,51 @@ ] }, { - "teal": 461, - "source": 93, + "teal": 463, + "source": 95, "pc": [ 467 ] }, { - "teal": 462, - "source": 93, + "teal": 464, + "source": 95, "pc": [ 468 ] }, { - "teal": 463, - "source": 93, + "teal": 465, + "source": 95, "pc": [ 469 ] }, { - "teal": 464, - "source": 93, + "teal": 466, + "source": 95, "pc": [ 470 ] }, { - "teal": 467, - "source": 93, + "teal": 469, + "source": 95, "errorMessage": "argument 2 (boxIndex) for deleteAppFromWhitelist must be a uint16", "pc": [ 471 ] }, { - "teal": 468, - "source": 93, + "teal": 470, + "source": 95, "pc": [ 472 ] }, { - "teal": 471, - "source": 93, + "teal": 473, + "source": 95, "pc": [ 473, 474, @@ -2118,8 +2118,8 @@ ] }, { - "teal": 472, - "source": 93, + "teal": 474, + "source": 95, "pc": [ 476, 477, @@ -2127,8 +2127,8 @@ ] }, { - "teal": 475, - "source": 93, + "teal": 477, + "source": 95, "pc": [ 479, 480, @@ -2136,22 +2136,22 @@ ] }, { - "teal": 476, - "source": 93, + "teal": 478, + "source": 95, "pc": [ 482 ] }, { - "teal": 477, - "source": 93, + "teal": 479, + "source": 95, "pc": [ 483 ] }, { - "teal": 487, - "source": 93, + "teal": 489, + "source": 95, "pc": [ 484, 485, @@ -2159,83 +2159,83 @@ ] }, { - "teal": 490, - "source": 93, + "teal": 492, + "source": 95, "pc": [ 487 ] }, { - "teal": 491, - "source": 93, + "teal": 493, + "source": 95, "pc": [ 488, 489 ] }, { - "teal": 495, - "source": 94, + "teal": 497, + "source": 96, "pc": [ 490, 491 ] }, { - "teal": 496, - "source": 94, + "teal": 498, + "source": 96, "pc": [ 492, 493 ] }, { - "teal": 497, - "source": 94, + "teal": 499, + "source": 96, "pc": [ 494 ] }, { - "teal": 498, - "source": 94, + "teal": 500, + "source": 96, "pc": [ 495, 496 ] }, { - "teal": 502, - "source": 95, + "teal": 504, + "source": 97, "pc": [ 497 ] }, { - "teal": 503, - "source": 95, + "teal": 505, + "source": 97, "pc": [ 498 ] }, { - "teal": 504, - "source": 95, + "teal": 506, + "source": 97, "pc": [ 499 ] }, { - "teal": 505, - "source": 95, + "teal": 507, + "source": 97, "pc": [ 500, 501 ] }, { - "teal": 506, - "source": 95, + "teal": 508, + "source": 97, "pc": [ 502, 503, @@ -2243,23 +2243,23 @@ ] }, { - "teal": 507, - "source": 95, + "teal": 509, + "source": 97, "pc": [ 505, 506 ] }, { - "teal": 508, - "source": 95, + "teal": 510, + "source": 97, "pc": [ 507 ] }, { - "teal": 509, - "source": 95, + "teal": 511, + "source": 97, "pc": [ 508, 509, @@ -2267,8 +2267,8 @@ ] }, { - "teal": 510, - "source": 95, + "teal": 512, + "source": 97, "pc": [ 511, 512, @@ -2276,37 +2276,37 @@ ] }, { - "teal": 511, - "source": 95, + "teal": 513, + "source": 97, "pc": [ 514, 515 ] }, { - "teal": 512, - "source": 95, + "teal": 514, + "source": 97, "pc": [ 516 ] }, { - "teal": 513, - "source": 95, + "teal": 515, + "source": 97, "pc": [ 517 ] }, { - "teal": 514, - "source": 95, + "teal": 516, + "source": 97, "pc": [ 518 ] }, { - "teal": 515, - "source": 95, + "teal": 517, + "source": 97, "pc": [ 519, 520, @@ -2314,22 +2314,22 @@ ] }, { - "teal": 516, - "source": 95, + "teal": 518, + "source": 97, "pc": [ 522 ] }, { - "teal": 517, - "source": 95, + "teal": 519, + "source": 97, "pc": [ 523 ] }, { - "teal": 518, - "source": 95, + "teal": 520, + "source": 97, "pc": [ 524, 525, @@ -2337,53 +2337,53 @@ ] }, { - "teal": 519, - "source": 95, + "teal": 521, + "source": 97, "pc": [ 527 ] }, { - "teal": 520, - "source": 95, + "teal": 522, + "source": 97, "pc": [ 528 ] }, { - "teal": 521, - "source": 95, + "teal": 523, + "source": 97, "pc": [ 529, 530 ] }, { - "teal": 525, - "source": 97, + "teal": 527, + "source": 99, "pc": [ 531, 532 ] }, { - "teal": 526, - "source": 97, + "teal": 528, + "source": 99, "pc": [ 533 ] }, { - "teal": 529, - "source": 97, + "teal": 531, + "source": 99, "errorMessage": "box value does not exist: this.whitelist(whitelist).value", "pc": [ 534 ] }, { - "teal": 530, - "source": 97, + "teal": 532, + "source": 99, "pc": [ 535, 536, @@ -2391,84 +2391,84 @@ ] }, { - "teal": 531, - "source": 97, + "teal": 533, + "source": 99, "pc": [ 538 ] }, { - "teal": 532, - "source": 97, + "teal": 534, + "source": 99, "pc": [ 539, 540 ] }, { - "teal": 533, - "source": 97, + "teal": 535, + "source": 99, "pc": [ 541 ] }, { - "teal": 534, - "source": 97, + "teal": 536, + "source": 99, "pc": [ 542 ] }, { - "teal": 535, - "source": 97, + "teal": 537, + "source": 99, "pc": [ 543, 544 ] }, { - "teal": 536, - "source": 97, + "teal": 538, + "source": 99, "pc": [ 545, 546 ] }, { - "teal": 537, - "source": 97, + "teal": 539, + "source": 99, "pc": [ 547, 548 ] }, { - "teal": 538, - "source": 97, + "teal": 540, + "source": 99, "pc": [ 549, 550 ] }, { - "teal": 539, - "source": 97, + "teal": 541, + "source": 99, "pc": [ 551 ] }, { - "teal": 542, - "source": 97, + "teal": 544, + "source": 99, "errorMessage": "box value does not exist: this.whitelist(whitelist).value", "pc": [ 552 ] }, { - "teal": 543, - "source": 97, + "teal": 545, + "source": 99, "pc": [ 553, 554, @@ -2476,53 +2476,53 @@ ] }, { - "teal": 544, - "source": 97, + "teal": 546, + "source": 99, "pc": [ 556 ] }, { - "teal": 545, - "source": 97, + "teal": 547, + "source": 99, "pc": [ 557, 558 ] }, { - "teal": 546, - "source": 97, + "teal": 548, + "source": 99, "pc": [ 559 ] }, { - "teal": 547, - "source": 97, + "teal": 549, + "source": 99, "pc": [ 560, 561 ] }, { - "teal": 548, - "source": 97, + "teal": 550, + "source": 99, "pc": [ 562 ] }, { - "teal": 551, - "source": 97, + "teal": 553, + "source": 99, "errorMessage": "box value does not exist: this.whitelist(whitelist).value", "pc": [ 563 ] }, { - "teal": 552, - "source": 97, + "teal": 554, + "source": 99, "pc": [ 564, 565, @@ -2530,103 +2530,103 @@ ] }, { - "teal": 553, - "source": 97, + "teal": 555, + "source": 99, "pc": [ 567 ] }, { - "teal": 554, - "source": 97, + "teal": 556, + "source": 99, "pc": [ 568 ] }, { - "teal": 555, - "source": 97, + "teal": 557, + "source": 99, "pc": [ 569, 570 ] }, { - "teal": 556, - "source": 97, + "teal": 558, + "source": 99, "pc": [ 571, 572 ] }, { - "teal": 557, - "source": 97, + "teal": 559, + "source": 99, "pc": [ 573 ] }, { - "teal": 558, - "source": 97, + "teal": 560, + "source": 99, "pc": [ 574 ] }, { - "teal": 559, - "source": 97, + "teal": 561, + "source": 99, "pc": [ 575 ] }, { - "teal": 560, - "source": 97, + "teal": 562, + "source": 99, "pc": [ 576 ] }, { - "teal": 561, - "source": 97, + "teal": 563, + "source": 99, "pc": [ 577 ] }, { - "teal": 562, - "source": 97, + "teal": 564, + "source": 99, "pc": [ 578 ] }, { - "teal": 563, - "source": 97, + "teal": 565, + "source": 99, "pc": [ 579, 580 ] }, { - "teal": 564, - "source": 97, + "teal": 566, + "source": 99, "pc": [ 581 ] }, { - "teal": 567, - "source": 97, + "teal": 569, + "source": 99, "errorMessage": "box value does not exist: this.whitelist(whitelist).value", "pc": [ 582 ] }, { - "teal": 568, - "source": 97, + "teal": 570, + "source": 99, "pc": [ 583, 584, @@ -2634,123 +2634,123 @@ ] }, { - "teal": 569, - "source": 97, + "teal": 571, + "source": 99, "pc": [ 586, 587 ] }, { - "teal": 570, - "source": 97, + "teal": 572, + "source": 99, "pc": [ 588, 589 ] }, { - "teal": 571, - "source": 97, + "teal": 573, + "source": 99, "pc": [ 590 ] }, { - "teal": 572, - "source": 97, + "teal": 574, + "source": 99, "pc": [ 591 ] }, { - "teal": 573, - "source": 97, + "teal": 575, + "source": 99, "pc": [ 592 ] }, { - "teal": 574, - "source": 97, + "teal": 576, + "source": 99, "pc": [ 593 ] }, { - "teal": 575, - "source": 97, + "teal": 577, + "source": 99, "pc": [ 594, 595 ] }, { - "teal": 576, - "source": 97, + "teal": 578, + "source": 99, "pc": [ 596 ] }, { - "teal": 577, - "source": 97, + "teal": 579, + "source": 99, "pc": [ 597 ] }, { - "teal": 578, - "source": 97, + "teal": 580, + "source": 99, "pc": [ 598 ] }, { - "teal": 579, - "source": 97, + "teal": 581, + "source": 99, "pc": [ 599 ] }, { - "teal": 580, - "source": 97, + "teal": 582, + "source": 99, "pc": [ 600 ] }, { - "teal": 581, - "source": 97, + "teal": 583, + "source": 99, "pc": [ 601 ] }, { - "teal": 582, - "source": 97, + "teal": 584, + "source": 99, "pc": [ 602 ] }, { - "teal": 583, - "source": 97, + "teal": 585, + "source": 99, "pc": [ 603 ] }, { - "teal": 584, - "source": 97, + "teal": 586, + "source": 99, "pc": [ 604 ] }, { - "teal": 585, - "source": 97, + "teal": 587, + "source": 99, "pc": [ 605, 606, @@ -2758,61 +2758,61 @@ ] }, { - "teal": 586, - "source": 97, + "teal": 588, + "source": 99, "pc": [ 608 ] }, { - "teal": 587, - "source": 97, + "teal": 589, + "source": 99, "pc": [ 609 ] }, { - "teal": 588, - "source": 97, + "teal": 590, + "source": 99, "pc": [ 610 ] }, { - "teal": 589, - "source": 97, + "teal": 591, + "source": 99, "pc": [ 611, 612 ] }, { - "teal": 593, - "source": 99, + "teal": 595, + "source": 101, "pc": [ 613, 614 ] }, { - "teal": 594, - "source": 99, + "teal": 596, + "source": 101, "pc": [ 615, 616 ] }, { - "teal": 595, - "source": 99, + "teal": 597, + "source": 101, "pc": [ 617, 618 ] }, { - "teal": 596, - "source": 99, + "teal": 598, + "source": 101, "pc": [ 619, 620, @@ -2820,45 +2820,45 @@ ] }, { - "teal": 597, - "source": 99, + "teal": 599, + "source": 101, "pc": [ 622 ] }, { - "teal": 598, - "source": 99, + "teal": 600, + "source": 101, "pc": [ 623, 624 ] }, { - "teal": 599, - "source": 99, + "teal": 601, + "source": 101, "pc": [ 625 ] }, { - "teal": 600, - "source": 99, + "teal": 602, + "source": 101, "pc": [ 626 ] }, { - "teal": 604, - "source": 101, + "teal": 606, + "source": 103, "pc": [ 627, 628 ] }, { - "teal": 605, - "source": 101, + "teal": 607, + "source": 103, "pc": [ 629, 630, @@ -2866,28 +2866,28 @@ ] }, { - "teal": 606, - "source": 93, + "teal": 608, + "source": 95, "pc": [ 632 ] }, { - "teal": 609, + "teal": 611, "source": 6, "pc": [ 633 ] }, { - "teal": 610, + "teal": 612, "source": 6, "pc": [ 634 ] }, { - "teal": 613, + "teal": 615, "source": 6, "pc": [ 635, @@ -2899,7 +2899,7 @@ ] }, { - "teal": 614, + "teal": 616, "source": 6, "pc": [ 641, @@ -2908,7 +2908,7 @@ ] }, { - "teal": 615, + "teal": 617, "source": 6, "pc": [ 644, @@ -2918,7 +2918,7 @@ ] }, { - "teal": 618, + "teal": 620, "source": 6, "errorMessage": "this contract does not implement the given ABI method for create NoOp", "pc": [ @@ -2926,7 +2926,7 @@ ] }, { - "teal": 621, + "teal": 623, "source": 6, "pc": [ 649, @@ -2938,7 +2938,7 @@ ] }, { - "teal": 622, + "teal": 624, "source": 6, "pc": [ 655, @@ -2950,7 +2950,7 @@ ] }, { - "teal": 623, + "teal": 625, "source": 6, "pc": [ 661, @@ -2962,7 +2962,7 @@ ] }, { - "teal": 624, + "teal": 626, "source": 6, "pc": [ 667, @@ -2974,7 +2974,7 @@ ] }, { - "teal": 625, + "teal": 627, "source": 6, "pc": [ 673, @@ -2983,7 +2983,7 @@ ] }, { - "teal": 626, + "teal": 628, "source": 6, "pc": [ 676, @@ -2999,7 +2999,7 @@ ] }, { - "teal": 629, + "teal": 631, "source": 6, "errorMessage": "this contract does not implement the given ABI method for call NoOp", "pc": [ @@ -3007,7 +3007,7 @@ ] }, { - "teal": 632, + "teal": 634, "source": 6, "pc": [ 687, @@ -3016,7 +3016,7 @@ ] }, { - "teal": 633, + "teal": 635, "source": 6, "pc": [ 690, @@ -3024,7 +3024,7 @@ ] }, { - "teal": 634, + "teal": 636, "source": 6, "pc": [ 692, @@ -3032,14 +3032,14 @@ ] }, { - "teal": 635, + "teal": 637, "source": 6, "pc": [ 694 ] }, { - "teal": 636, + "teal": 638, "source": 6, "pc": [ 695, @@ -3047,7 +3047,7 @@ ] }, { - "teal": 637, + "teal": 639, "source": 6, "pc": [ 697, @@ -3055,14 +3055,14 @@ ] }, { - "teal": 638, + "teal": 640, "source": 6, "pc": [ 699 ] }, { - "teal": 641, + "teal": 643, "source": 6, "pc": [ 700, @@ -3071,7 +3071,7 @@ ] }, { - "teal": 642, + "teal": 644, "source": 6, "pc": [ 703, @@ -3079,7 +3079,7 @@ ] }, { - "teal": 643, + "teal": 645, "source": 6, "pc": [ 705, @@ -3087,14 +3087,14 @@ ] }, { - "teal": 644, + "teal": 646, "source": 6, "pc": [ 707 ] }, { - "teal": 645, + "teal": 647, "source": 6, "pc": [ 708, @@ -3102,7 +3102,7 @@ ] }, { - "teal": 646, + "teal": 648, "source": 6, "pc": [ 710, @@ -3110,21 +3110,21 @@ ] }, { - "teal": 647, + "teal": 649, "source": 6, "pc": [ 712 ] }, { - "teal": 648, + "teal": 650, "source": 6, "pc": [ 713 ] }, { - "teal": 649, + "teal": 651, "source": 6, "pc": [ 714, @@ -3132,28 +3132,28 @@ ] }, { - "teal": 650, + "teal": 652, "source": 6, "pc": [ 716 ] }, { - "teal": 651, + "teal": 653, "source": 6, "pc": [ 717 ] }, { - "teal": 652, + "teal": 654, "source": 6, "pc": [ 718 ] }, { - "teal": 653, + "teal": 655, "source": 6, "pc": [ 719, @@ -3162,7 +3162,7 @@ ] }, { - "teal": 654, + "teal": 656, "source": 6, "pc": [ 722, @@ -3170,7 +3170,7 @@ ] }, { - "teal": 655, + "teal": 657, "source": 6, "pc": [ 724, @@ -3178,21 +3178,21 @@ ] }, { - "teal": 656, + "teal": 658, "source": 6, "pc": [ 726 ] }, { - "teal": 657, + "teal": 659, "source": 6, "pc": [ 727 ] }, { - "teal": 658, + "teal": 660, "source": 6, "pc": [ 728, @@ -3200,7 +3200,7 @@ ] }, { - "teal": 659, + "teal": 661, "source": 6, "pc": [ 730, @@ -3208,7 +3208,7 @@ ] }, { - "teal": 660, + "teal": 662, "source": 6, "pc": [ 732, @@ -3216,7 +3216,7 @@ ] }, { - "teal": 661, + "teal": 663, "source": 6, "pc": [ 734, @@ -3224,7 +3224,7 @@ ] }, { - "teal": 662, + "teal": 664, "source": 6, "pc": [ 736 diff --git a/examples/auction/auction.algo.ts b/examples/auction/auction.algo.ts index f104deb38..6f4016b60 100644 --- a/examples/auction/auction.algo.ts +++ b/examples/auction/auction.algo.ts @@ -35,11 +35,13 @@ class Auction extends Contract { this.asa.value = asset; /// Submit opt-in transaction: 0 asset transfer to self - sendAssetTransfer({ - assetReceiver: this.app.address, - xferAsset: asset, - assetAmount: 0, - }); + this.txnComposer.send( + new AssetTransferTxn({ + assetReceiver: this.app.address, + xferAsset: asset, + assetAmount: 0, + }) + ); } startAuction(startingPrice: uint64, length: uint64, axfer: AssetTransferTxn): void { @@ -58,10 +60,12 @@ class Auction extends Contract { } private pay(receiver: Address, amount: uint64): void { - sendPayment({ - receiver: receiver, - amount: amount, - }); + this.txnComposer.send( + new PayTxn({ + receiver: receiver, + amount: amount, + }) + ); } optInToApplication(): void {} @@ -100,19 +104,23 @@ class Auction extends Contract { assert(globals.latestTimestamp > this.auctionEnd.value); /// Send ASA to previous bidder - sendAssetTransfer({ - assetReceiver: this.previousBidder.value, - xferAsset: asset, - assetAmount: this.asaAmt.value, - assetCloseTo: this.previousBidder.value, - }); + this.txnComposer.send( + new AssetTransferTxn({ + assetReceiver: this.previousBidder.value, + xferAsset: asset, + assetAmount: this.asaAmt.value, + assetCloseTo: this.previousBidder.value, + }) + ); } deleteApplication(): void { - sendPayment({ - receiver: globals.creatorAddress, - closeRemainderTo: globals.creatorAddress, - amount: 0, - }); + this.txnComposer.send( + new PayTxn({ + receiver: globals.creatorAddress, + closeRemainderTo: globals.creatorAddress, + amount: 0, + }) + ); } } diff --git a/examples/auction/tealscript_artifacts/Auction.approval.teal b/examples/auction/tealscript_artifacts/Auction.approval.teal index ba355f799..941fea4aa 100644 --- a/examples/auction/tealscript_artifacts/Auction.approval.teal +++ b/examples/auction/tealscript_artifacts/Auction.approval.teal @@ -108,26 +108,28 @@ optIntoAsset: // Submit opt-in transaction: 0 asset transfer to self // examples/auction/auction.algo.ts:38 - // sendAssetTransfer({ - // assetReceiver: this.app.address, - // xferAsset: asset, - // assetAmount: 0, - // }) + // this.txnComposer.send( + // new AssetTransferTxn({ + // assetReceiver: this.app.address, + // xferAsset: asset, + // assetAmount: 0, + // }) + // ) itxn_begin int axfer itxn_field TypeEnum - // examples/auction/auction.algo.ts:39 + // examples/auction/auction.algo.ts:40 // assetReceiver: this.app.address global CurrentApplicationAddress itxn_field AssetReceiver - // examples/auction/auction.algo.ts:40 + // examples/auction/auction.algo.ts:41 // xferAsset: asset frame_dig -1 // asset: AssetID itxn_field XferAsset - // examples/auction/auction.algo.ts:41 + // examples/auction/auction.algo.ts:42 // assetAmount: 0 int 0 itxn_field AssetAmount @@ -171,7 +173,7 @@ optIntoAsset: startAuction: proto 3 0 - // examples/auction/auction.algo.ts:46 + // examples/auction/auction.algo.ts:48 // verifyAppCallTxn(this.txn, { sender: globals.creatorAddress }) // verify sender txn Sender @@ -182,7 +184,7 @@ startAuction: assert // Ensure the auction hasn't already been started - // examples/auction/auction.algo.ts:49 + // examples/auction/auction.algo.ts:51 // assert(this.auctionEnd.value === 0) byte 0x61756374696f6e456e64 // "auctionEnd" app_global_get @@ -191,7 +193,7 @@ startAuction: assert // Verify axfer - // examples/auction/auction.algo.ts:52 + // examples/auction/auction.algo.ts:54 // verifyAssetTransferTxn(axfer, { assetReceiver: this.app.address }) // verify assetReceiver frame_dig -3 // axfer: AssetTransferTxn @@ -203,14 +205,14 @@ startAuction: assert // Set global state - // examples/auction/auction.algo.ts:55 + // examples/auction/auction.algo.ts:57 // this.asaAmt.value = axfer.assetAmount byte 0x617361416d74 // "asaAmt" frame_dig -3 // axfer: AssetTransferTxn gtxns AssetAmount app_global_put - // examples/auction/auction.algo.ts:56 + // examples/auction/auction.algo.ts:58 // this.auctionEnd.value = globals.latestTimestamp + length byte 0x61756374696f6e456e64 // "auctionEnd" global LatestTimestamp @@ -218,7 +220,7 @@ startAuction: + app_global_put - // examples/auction/auction.algo.ts:57 + // examples/auction/auction.algo.ts:59 // this.previousBid.value = startingPrice byte 0x70726576696f7573426964 // "previousBid" frame_dig -1 // startingPrice: uint64 @@ -229,21 +231,23 @@ startAuction: pay: proto 2 0 - // examples/auction/auction.algo.ts:61 - // sendPayment({ - // receiver: receiver, - // amount: amount, - // }) + // examples/auction/auction.algo.ts:63 + // this.txnComposer.send( + // new PayTxn({ + // receiver: receiver, + // amount: amount, + // }) + // ) itxn_begin int pay itxn_field TypeEnum - // examples/auction/auction.algo.ts:62 + // examples/auction/auction.algo.ts:65 // receiver: receiver frame_dig -1 // receiver: Address itxn_field Receiver - // examples/auction/auction.algo.ts:63 + // examples/auction/auction.algo.ts:66 // amount: amount frame_dig -2 // amount: uint64 itxn_field Amount @@ -292,7 +296,7 @@ bid: proto 1 0 // Ensure auction hasn't ended - // examples/auction/auction.algo.ts:72 + // examples/auction/auction.algo.ts:76 // assert(globals.latestTimestamp < this.auctionEnd.value) global LatestTimestamp byte 0x61756374696f6e456e64 // "auctionEnd" @@ -301,7 +305,7 @@ bid: assert // Verify payment transaction - // examples/auction/auction.algo.ts:75 + // examples/auction/auction.algo.ts:79 // verifyPayTxn(payment, { // sender: this.txn.sender, // amount: { greaterThan: this.previousBid.value }, @@ -326,14 +330,14 @@ bid: assert // Set global state - // examples/auction/auction.algo.ts:81 + // examples/auction/auction.algo.ts:85 // this.previousBid.value = payment.amount byte 0x70726576696f7573426964 // "previousBid" frame_dig -1 // payment: PayTxn gtxns Amount app_global_put - // examples/auction/auction.algo.ts:82 + // examples/auction/auction.algo.ts:86 // this.previousBidder.value = payment.sender byte 0x70726576696f7573426964646572 // "previousBidder" frame_dig -1 // payment: PayTxn @@ -341,7 +345,7 @@ bid: app_global_put // Update claimable amount - // examples/auction/auction.algo.ts:85 + // examples/auction/auction.algo.ts:89 // this.claimableAmount(this.txn.sender).value = payment.amount txn Sender byte 0x636c61696d61626c65416d6f756e74 // "claimableAmount" @@ -365,21 +369,21 @@ claimBids: byte 0x dup - // examples/auction/auction.algo.ts:89 + // examples/auction/auction.algo.ts:93 // originalAmount = this.claimableAmount(this.txn.sender).value txn Sender byte 0x636c61696d61626c65416d6f756e74 // "claimableAmount" app_local_get frame_bury 0 // originalAmount: uint64 - // examples/auction/auction.algo.ts:90 + // examples/auction/auction.algo.ts:94 // amount = originalAmount frame_dig 0 // originalAmount: uint64 frame_bury 1 // amount: uint64 // subtract previous bid if sender is previous bidder // *if0_condition - // examples/auction/auction.algo.ts:93 + // examples/auction/auction.algo.ts:97 // this.txn.sender === this.previousBidder.value txn Sender byte 0x70726576696f7573426964646572 // "previousBidder" @@ -388,7 +392,7 @@ claimBids: bz *if0_end // *if0_consequent - // examples/auction/auction.algo.ts:93 + // examples/auction/auction.algo.ts:97 // amount = amount - this.previousBid.value frame_dig 1 // amount: uint64 byte 0x70726576696f7573426964 // "previousBid" @@ -397,13 +401,13 @@ claimBids: frame_bury 1 // amount: uint64 *if0_end: - // examples/auction/auction.algo.ts:95 + // examples/auction/auction.algo.ts:99 // this.pay(this.txn.sender, amount) frame_dig 1 // amount: uint64 txn Sender callsub pay - // examples/auction/auction.algo.ts:96 + // examples/auction/auction.algo.ts:100 // this.claimableAmount(this.txn.sender).value = originalAmount - amount txn Sender byte 0x636c61696d61626c65416d6f756e74 // "claimableAmount" @@ -428,7 +432,7 @@ claimBids: claim_asset: proto 1 0 - // examples/auction/auction.algo.ts:100 + // examples/auction/auction.algo.ts:104 // assert(globals.latestTimestamp > this.auctionEnd.value) global LatestTimestamp byte 0x61756374696f6e456e64 // "auctionEnd" @@ -437,35 +441,37 @@ claim_asset: assert // Send ASA to previous bidder - // examples/auction/auction.algo.ts:103 - // sendAssetTransfer({ - // assetReceiver: this.previousBidder.value, - // xferAsset: asset, - // assetAmount: this.asaAmt.value, - // assetCloseTo: this.previousBidder.value, - // }) + // examples/auction/auction.algo.ts:107 + // this.txnComposer.send( + // new AssetTransferTxn({ + // assetReceiver: this.previousBidder.value, + // xferAsset: asset, + // assetAmount: this.asaAmt.value, + // assetCloseTo: this.previousBidder.value, + // }) + // ) itxn_begin int axfer itxn_field TypeEnum - // examples/auction/auction.algo.ts:104 + // examples/auction/auction.algo.ts:109 // assetReceiver: this.previousBidder.value byte 0x70726576696f7573426964646572 // "previousBidder" app_global_get itxn_field AssetReceiver - // examples/auction/auction.algo.ts:105 + // examples/auction/auction.algo.ts:110 // xferAsset: asset frame_dig -1 // asset: AssetID itxn_field XferAsset - // examples/auction/auction.algo.ts:106 + // examples/auction/auction.algo.ts:111 // assetAmount: this.asaAmt.value byte 0x617361416d74 // "asaAmt" app_global_get itxn_field AssetAmount - // examples/auction/auction.algo.ts:107 + // examples/auction/auction.algo.ts:112 // assetCloseTo: this.previousBidder.value byte 0x70726576696f7573426964646572 // "previousBidder" app_global_get @@ -490,27 +496,29 @@ claim_asset: deleteApplication: proto 0 0 - // examples/auction/auction.algo.ts:112 - // sendPayment({ - // receiver: globals.creatorAddress, - // closeRemainderTo: globals.creatorAddress, - // amount: 0, - // }) + // examples/auction/auction.algo.ts:118 + // this.txnComposer.send( + // new PayTxn({ + // receiver: globals.creatorAddress, + // closeRemainderTo: globals.creatorAddress, + // amount: 0, + // }) + // ) itxn_begin int pay itxn_field TypeEnum - // examples/auction/auction.algo.ts:113 + // examples/auction/auction.algo.ts:120 // receiver: globals.creatorAddress global CreatorAddress itxn_field Receiver - // examples/auction/auction.algo.ts:114 + // examples/auction/auction.algo.ts:121 // closeRemainderTo: globals.creatorAddress global CreatorAddress itxn_field CloseRemainderTo - // examples/auction/auction.algo.ts:115 + // examples/auction/auction.algo.ts:122 // amount: 0 int 0 itxn_field Amount diff --git a/examples/auction/tealscript_artifacts/Auction.arc32.json b/examples/auction/tealscript_artifacts/Auction.arc32.json index b04555e4f..090cc3f86 100644 --- a/examples/auction/tealscript_artifacts/Auction.arc32.json +++ b/examples/auction/tealscript_artifacts/Auction.arc32.json @@ -95,7 +95,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpjYWxsX09wdEluICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX0RlbGV0ZUFwcGxpY2F0aW9uICpjcmVhdGVfTm9PcCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQKCipOT1RfSU1QTEVNRU5URUQ6CgkvLyBUaGUgcmVxdWVzdGVkIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250cmFjdC4gQXJlIHlvdSB1c2luZyB0aGUgY29ycmVjdCBPbkNvbXBsZXRlPyBEaWQgeW91IHNldCB5b3VyIGFwcCBJRD8KCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxOAoJLy8gdGhpcy5hdWN0aW9uRW5kLnZhbHVlID0gMAoJYnl0ZSAweDYxNzU2Mzc0Njk2ZjZlNDU2ZTY0IC8vICJhdWN0aW9uRW5kIgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTkKCS8vIHRoaXMucHJldmlvdXNCaWQudmFsdWUgPSAwCglieXRlIDB4NzA3MjY1NzY2OTZmNzU3MzQyNjk2NCAvLyAicHJldmlvdXNCaWQiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoyMAoJLy8gdGhpcy5hc2FBbXQudmFsdWUgPSAwCglieXRlIDB4NjE3MzYxNDE2ZDc0IC8vICJhc2FBbXQiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoyMQoJLy8gdGhpcy5hc2EudmFsdWUgPSBBc3NldElELnplcm9JbmRleAoJYnl0ZSAweDYxNzM2MSAvLyAiYXNhIgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MjQKCS8vIHRoaXMucHJldmlvdXNCaWRkZXIudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglieXRlIDB4NzA3MjY1NzY2OTZmNzU3MzQyNjk2NDY0NjU3MiAvLyAicHJldmlvdXNCaWRkZXIiCglnbG9iYWwgWmVyb0FkZHJlc3MKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIG9wdEludG9Bc3NldCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX29wdEludG9Bc3NldDoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIG9wdEludG9Bc3NldCh1aW50NjQpdm9pZAoJY2FsbHN1YiBvcHRJbnRvQXNzZXQKCWludCAxCglyZXR1cm4KCi8vIG9wdEludG9Bc3NldChhc3NldDogQXNzZXRJRCk6IHZvaWQKb3B0SW50b0Fzc2V0OgoJcHJvdG8gMSAwCgoJLy8gT25seSBhbGxvdyBhcHAgY3JlYXRvciB0byBvcHQgdGhlIGFwcCBhY2NvdW50IGludG8gYSBBU0EKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjI5CgkvLyB2ZXJpZnlBcHBDYWxsVHhuKHRoaXMudHhuLCB7IHNlbmRlcjogZ2xvYmFscy5jcmVhdG9yQWRkcmVzcyB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJdHhuIFNlbmRlcgoJZ2xvYmFsIENyZWF0b3JBZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidGhpcy50eG4iLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoiZ2xvYmFscy5jcmVhdG9yQWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyBWZXJpZnkgYSBBU0EgaGFzbid0IGFscmVhZHkgYmVlbiBvcHRlZCBpbnRvCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czozMgoJLy8gYXNzZXJ0KHRoaXMuYXNhLnZhbHVlID09PSBBc3NldElELnplcm9JbmRleCkKCWJ5dGUgMHg2MTczNjEgLy8gImFzYSIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMAoJPT0KCWFzc2VydAoKCS8vIFNhdmUgQVNBIElEIGluIGdsb2JhbCBzdGF0ZQoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MzUKCS8vIHRoaXMuYXNhLnZhbHVlID0gYXNzZXQKCWJ5dGUgMHg2MTczNjEgLy8gImFzYSIKCWZyYW1lX2RpZyAtMSAvLyBhc3NldDogQXNzZXRJRAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBTdWJtaXQgb3B0LWluIHRyYW5zYWN0aW9uOiAwIGFzc2V0IHRyYW5zZmVyIHRvIHNlbGYKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjM4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc3NldCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czozOQoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjQwCgkvLyB4ZmVyQXNzZXQ6IGFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXNzZXQ6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NDEKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gc3RhcnRBdWN0aW9uKHVpbnQ2NCx1aW50NjQsYXhmZXIpdm9pZAoqYWJpX3JvdXRlX3N0YXJ0QXVjdGlvbjoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09CgoJLy8gYXJndW1lbnQgMCAoYXhmZXIpIGZvciBzdGFydEF1Y3Rpb24gbXVzdCBiZSBhIGF4ZmVyIHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBsZW5ndGg6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHN0YXJ0aW5nUHJpY2U6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgc3RhcnRBdWN0aW9uKHVpbnQ2NCx1aW50NjQsYXhmZXIpdm9pZAoJY2FsbHN1YiBzdGFydEF1Y3Rpb24KCWludCAxCglyZXR1cm4KCi8vIHN0YXJ0QXVjdGlvbihzdGFydGluZ1ByaWNlOiB1aW50NjQsIGxlbmd0aDogdWludDY0LCBheGZlcjogQXNzZXRUcmFuc2ZlclR4bik6IHZvaWQKc3RhcnRBdWN0aW9uOgoJcHJvdG8gMyAwCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NDYKCS8vIHZlcmlmeUFwcENhbGxUeG4odGhpcy50eG4sIHsgc2VuZGVyOiBnbG9iYWxzLmNyZWF0b3JBZGRyZXNzIH0pCgkvLyB2ZXJpZnkgc2VuZGVyCgl0eG4gU2VuZGVyCglnbG9iYWwgQ3JlYXRvckFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4biIsImZpZWxkIjoic2VuZGVyIiwiZXhwZWN0ZWQiOiJnbG9iYWxzLmNyZWF0b3JBZGRyZXNzIn0KCWFzc2VydAoKCS8vIEVuc3VyZSB0aGUgYXVjdGlvbiBoYXNuJ3QgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjQ5CgkvLyBhc3NlcnQodGhpcy5hdWN0aW9uRW5kLnZhbHVlID09PSAwKQoJYnl0ZSAweDYxNzU2Mzc0Njk2ZjZlNDU2ZTY0IC8vICJhdWN0aW9uRW5kIgoJYXBwX2dsb2JhbF9nZXQKCWludCAwCgk9PQoJYXNzZXJ0CgoJLy8gVmVyaWZ5IGF4ZmVyCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo1MgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgeyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0zIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6ImF4ZmVyIiwiZmllbGQiOiJhc3NldFJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIFNldCBnbG9iYWwgc3RhdGUKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjU1CgkvLyB0aGlzLmFzYUFtdC52YWx1ZSA9IGF4ZmVyLmFzc2V0QW1vdW50CglieXRlIDB4NjE3MzYxNDE2ZDc0IC8vICJhc2FBbXQiCglmcmFtZV9kaWcgLTMgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjU2CgkvLyB0aGlzLmF1Y3Rpb25FbmQudmFsdWUgPSBnbG9iYWxzLmxhdGVzdFRpbWVzdGFtcCArIGxlbmd0aAoJYnl0ZSAweDYxNzU2Mzc0Njk2ZjZlNDU2ZTY0IC8vICJhdWN0aW9uRW5kIgoJZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAoJZnJhbWVfZGlnIC0yIC8vIGxlbmd0aDogdWludDY0CgkrCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjU3CgkvLyB0aGlzLnByZXZpb3VzQmlkLnZhbHVlID0gc3RhcnRpbmdQcmljZQoJYnl0ZSAweDcwNzI2NTc2Njk2Zjc1NzM0MjY5NjQgLy8gInByZXZpb3VzQmlkIgoJZnJhbWVfZGlnIC0xIC8vIHN0YXJ0aW5nUHJpY2U6IHVpbnQ2NAoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKLy8gcGF5KHJlY2VpdmVyOiBBZGRyZXNzLCBhbW91bnQ6IHVpbnQ2NCk6IHZvaWQKcGF5OgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgIGFtb3VudDogYW1vdW50LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjIKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjMKCS8vIGFtb3VudDogYW1vdW50CglmcmFtZV9kaWcgLTIgLy8gYW1vdW50OiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBvcHRJblRvQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9vcHRJblRvQXBwbGljYXRpb246CgkvLyBleGVjdXRlIG9wdEluVG9BcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBvcHRJblRvQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIG9wdEluVG9BcHBsaWNhdGlvbigpOiB2b2lkCm9wdEluVG9BcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoJcmV0c3ViCgovLyBiaWQocGF5KXZvaWQKKmFiaV9yb3V0ZV9iaWQ6CgkvLyBwYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAwIChwYXltZW50KSBmb3IgYmlkIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYmlkKHBheSl2b2lkCgljYWxsc3ViIGJpZAoJaW50IDEKCXJldHVybgoKLy8gYmlkKHBheW1lbnQ6IFBheVR4bik6IHZvaWQKYmlkOgoJcHJvdG8gMSAwCgoJLy8gRW5zdXJlIGF1Y3Rpb24gaGFzbid0IGVuZGVkCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo3MgoJLy8gYXNzZXJ0KGdsb2JhbHMubGF0ZXN0VGltZXN0YW1wIDwgdGhpcy5hdWN0aW9uRW5kLnZhbHVlKQoJZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAoJYnl0ZSAweDYxNzU2Mzc0Njk2ZjZlNDU2ZTY0IC8vICJhdWN0aW9uRW5kIgoJYXBwX2dsb2JhbF9nZXQKCTwKCWFzc2VydAoKCS8vIFZlcmlmeSBwYXltZW50IHRyYW5zYWN0aW9uCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo3NQoJLy8gdmVyaWZ5UGF5VHhuKHBheW1lbnQsIHsKCS8vICAgICAgIHNlbmRlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiB7IGdyZWF0ZXJUaGFuOiB0aGlzLnByZXZpb3VzQmlkLnZhbHVlIH0sCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBzZW5kZXIKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBQYXlUeG4KCWd0eG5zIFNlbmRlcgoJdHhuIFNlbmRlcgoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InBheW1lbnQiLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoidGhpcy50eG4uc2VuZGVyIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJYnl0ZSAweDcwNzI2NTc2Njk2Zjc1NzM0MjY5NjQgLy8gInByZXZpb3VzQmlkIgoJYXBwX2dsb2JhbF9nZXQKCT4KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InBheW1lbnQiLCJmaWVsZCI6ImFtb3VudCIsImNvbmRpdGlvbiI6ImdyZWF0ZXJUaGFuIiwiZXhwZWN0ZWQiOiI+dGhpcy5wcmV2aW91c0JpZC52YWx1ZSJ9Cglhc3NlcnQKCgkvLyBTZXQgZ2xvYmFsIHN0YXRlCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo4MQoJLy8gdGhpcy5wcmV2aW91c0JpZC52YWx1ZSA9IHBheW1lbnQuYW1vdW50CglieXRlIDB4NzA3MjY1NzY2OTZmNzU3MzQyNjk2NCAvLyAicHJldmlvdXNCaWQiCglmcmFtZV9kaWcgLTEgLy8gcGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6ODIKCS8vIHRoaXMucHJldmlvdXNCaWRkZXIudmFsdWUgPSBwYXltZW50LnNlbmRlcgoJYnl0ZSAweDcwNzI2NTc2Njk2Zjc1NzM0MjY5NjQ2NDY1NzIgLy8gInByZXZpb3VzQmlkZGVyIgoJZnJhbWVfZGlnIC0xIC8vIHBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgU2VuZGVyCglhcHBfZ2xvYmFsX3B1dAoKCS8vIFVwZGF0ZSBjbGFpbWFibGUgYW1vdW50CgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo4NQoJLy8gdGhpcy5jbGFpbWFibGVBbW91bnQodGhpcy50eG4uc2VuZGVyKS52YWx1ZSA9IHBheW1lbnQuYW1vdW50Cgl0eG4gU2VuZGVyCglieXRlIDB4NjM2YzYxNjk2ZDYxNjI2YzY1NDE2ZDZmNzU2ZTc0IC8vICJjbGFpbWFibGVBbW91bnQiCglmcmFtZV9kaWcgLTEgLy8gcGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWFwcF9sb2NhbF9wdXQKCXJldHN1YgoKLy8gY2xhaW1CaWRzKCl2b2lkCiphYmlfcm91dGVfY2xhaW1CaWRzOgoJLy8gZXhlY3V0ZSBjbGFpbUJpZHMoKXZvaWQKCWNhbGxzdWIgY2xhaW1CaWRzCglpbnQgMQoJcmV0dXJuCgovLyBjbGFpbUJpZHMoKTogdm9pZApjbGFpbUJpZHM6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6ODkKCS8vIG9yaWdpbmFsQW1vdW50ID0gdGhpcy5jbGFpbWFibGVBbW91bnQodGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYnl0ZSAweDYzNmM2MTY5NmQ2MTYyNmM2NTQxNmQ2Zjc1NmU3NCAvLyAiY2xhaW1hYmxlQW1vdW50IgoJYXBwX2xvY2FsX2dldAoJZnJhbWVfYnVyeSAwIC8vIG9yaWdpbmFsQW1vdW50OiB1aW50NjQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo5MAoJLy8gYW1vdW50ID0gb3JpZ2luYWxBbW91bnQKCWZyYW1lX2RpZyAwIC8vIG9yaWdpbmFsQW1vdW50OiB1aW50NjQKCWZyYW1lX2J1cnkgMSAvLyBhbW91bnQ6IHVpbnQ2NAoKCS8vIHN1YnRyYWN0IHByZXZpb3VzIGJpZCBpZiBzZW5kZXIgaXMgcHJldmlvdXMgYmlkZGVyCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6OTMKCS8vIHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy5wcmV2aW91c0JpZGRlci52YWx1ZQoJdHhuIFNlbmRlcgoJYnl0ZSAweDcwNzI2NTc2Njk2Zjc1NzM0MjY5NjQ2NDY1NzIgLy8gInByZXZpb3VzQmlkZGVyIgoJYXBwX2dsb2JhbF9nZXQKCT09CglieiAqaWYwX2VuZAoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6OTMKCS8vIGFtb3VudCA9IGFtb3VudCAtIHRoaXMucHJldmlvdXNCaWQudmFsdWUKCWZyYW1lX2RpZyAxIC8vIGFtb3VudDogdWludDY0CglieXRlIDB4NzA3MjY1NzY2OTZmNzU3MzQyNjk2NCAvLyAicHJldmlvdXNCaWQiCglhcHBfZ2xvYmFsX2dldAoJLQoJZnJhbWVfYnVyeSAxIC8vIGFtb3VudDogdWludDY0CgoqaWYwX2VuZDoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjk1CgkvLyB0aGlzLnBheSh0aGlzLnR4bi5zZW5kZXIsIGFtb3VudCkKCWZyYW1lX2RpZyAxIC8vIGFtb3VudDogdWludDY0Cgl0eG4gU2VuZGVyCgljYWxsc3ViIHBheQoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjk2CgkvLyB0aGlzLmNsYWltYWJsZUFtb3VudCh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlID0gb3JpZ2luYWxBbW91bnQgLSBhbW91bnQKCXR4biBTZW5kZXIKCWJ5dGUgMHg2MzZjNjE2OTZkNjE2MjZjNjU0MTZkNmY3NTZlNzQgLy8gImNsYWltYWJsZUFtb3VudCIKCWZyYW1lX2RpZyAwIC8vIG9yaWdpbmFsQW1vdW50OiB1aW50NjQKCWZyYW1lX2RpZyAxIC8vIGFtb3VudDogdWludDY0CgktCglhcHBfbG9jYWxfcHV0CglyZXRzdWIKCi8vIGNsYWltX2Fzc2V0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfY2xhaW1fYXNzZXQ6CgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBjbGFpbV9hc3NldCh1aW50NjQpdm9pZAoJY2FsbHN1YiBjbGFpbV9hc3NldAoJaW50IDEKCXJldHVybgoKLy8gY2xhaW1fYXNzZXQoYXNzZXQ6IEFzc2V0SUQpOiB2b2lkCmNsYWltX2Fzc2V0OgoJcHJvdG8gMSAwCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTAwCgkvLyBhc3NlcnQoZ2xvYmFscy5sYXRlc3RUaW1lc3RhbXAgPiB0aGlzLmF1Y3Rpb25FbmQudmFsdWUpCglnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCglieXRlIDB4NjE3NTYzNzQ2OTZmNmU0NTZlNjQgLy8gImF1Y3Rpb25FbmQiCglhcHBfZ2xvYmFsX2dldAoJPgoJYXNzZXJ0CgoJLy8gU2VuZCBBU0EgdG8gcHJldmlvdXMgYmlkZGVyCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMDMKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMucHJldmlvdXNCaWRkZXIudmFsdWUsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IHRoaXMuYXNhQW10LnZhbHVlLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnByZXZpb3VzQmlkZGVyLnZhbHVlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMDQKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMucHJldmlvdXNCaWRkZXIudmFsdWUKCWJ5dGUgMHg3MDcyNjU3NjY5NmY3NTczNDI2OTY0NjQ2NTcyIC8vICJwcmV2aW91c0JpZGRlciIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMDUKCS8vIHhmZXJBc3NldDogYXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBhc3NldDogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMDYKCS8vIGFzc2V0QW1vdW50OiB0aGlzLmFzYUFtdC52YWx1ZQoJYnl0ZSAweDYxNzM2MTQxNmQ3NCAvLyAiYXNhQW10IgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMDcKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy5wcmV2aW91c0JpZGRlci52YWx1ZQoJYnl0ZSAweDcwNzI2NTc2Njk2Zjc1NzM0MjY5NjQ2NDY1NzIgLy8gInByZXZpb3VzQmlkZGVyIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBkZWxldGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2RlbGV0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBkZWxldGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBkZWxldGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gZGVsZXRlQXBwbGljYXRpb24oKTogdm9pZApkZWxldGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjExMgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgcmVjZWl2ZXI6IGdsb2JhbHMuY3JlYXRvckFkZHJlc3MsCgkvLyAgICAgICBjbG9zZVJlbWFpbmRlclRvOiBnbG9iYWxzLmNyZWF0b3JBZGRyZXNzLAoJLy8gICAgICAgYW1vdW50OiAwLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTEzCgkvLyByZWNlaXZlcjogZ2xvYmFscy5jcmVhdG9yQWRkcmVzcwoJZ2xvYmFsIENyZWF0b3JBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTE0CgkvLyBjbG9zZVJlbWFpbmRlclRvOiBnbG9iYWxzLmNyZWF0b3JBZGRyZXNzCglnbG9iYWwgQ3JlYXRvckFkZHJlc3MKCWl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjExNQoJLy8gYW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgIm9wdEludG9Bc3NldCh1aW50NjQpdm9pZCIKCW1ldGhvZCAic3RhcnRBdWN0aW9uKHVpbnQ2NCx1aW50NjQsYXhmZXIpdm9pZCIKCW1ldGhvZCAiYmlkKHBheSl2b2lkIgoJbWV0aG9kICJjbGFpbUJpZHMoKXZvaWQiCgltZXRob2QgImNsYWltX2Fzc2V0KHVpbnQ2NCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9vcHRJbnRvQXNzZXQgKmFiaV9yb3V0ZV9zdGFydEF1Y3Rpb24gKmFiaV9yb3V0ZV9iaWQgKmFiaV9yb3V0ZV9jbGFpbUJpZHMgKmFiaV9yb3V0ZV9jbGFpbV9hc3NldAoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycgoKKmNhbGxfT3B0SW46CgltZXRob2QgIm9wdEluVG9BcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfb3B0SW5Ub0FwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgT3B0SW4KCWVycgoKKmNhbGxfRGVsZXRlQXBwbGljYXRpb246CgltZXRob2QgImRlbGV0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kZWxldGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIERlbGV0ZUFwcGxpY2F0aW9uCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpjYWxsX09wdEluICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX0RlbGV0ZUFwcGxpY2F0aW9uICpjcmVhdGVfTm9PcCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQKCipOT1RfSU1QTEVNRU5URUQ6CgkvLyBUaGUgcmVxdWVzdGVkIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250cmFjdC4gQXJlIHlvdSB1c2luZyB0aGUgY29ycmVjdCBPbkNvbXBsZXRlPyBEaWQgeW91IHNldCB5b3VyIGFwcCBJRD8KCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxOAoJLy8gdGhpcy5hdWN0aW9uRW5kLnZhbHVlID0gMAoJYnl0ZSAweDYxNzU2Mzc0Njk2ZjZlNDU2ZTY0IC8vICJhdWN0aW9uRW5kIgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTkKCS8vIHRoaXMucHJldmlvdXNCaWQudmFsdWUgPSAwCglieXRlIDB4NzA3MjY1NzY2OTZmNzU3MzQyNjk2NCAvLyAicHJldmlvdXNCaWQiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoyMAoJLy8gdGhpcy5hc2FBbXQudmFsdWUgPSAwCglieXRlIDB4NjE3MzYxNDE2ZDc0IC8vICJhc2FBbXQiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoyMQoJLy8gdGhpcy5hc2EudmFsdWUgPSBBc3NldElELnplcm9JbmRleAoJYnl0ZSAweDYxNzM2MSAvLyAiYXNhIgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MjQKCS8vIHRoaXMucHJldmlvdXNCaWRkZXIudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglieXRlIDB4NzA3MjY1NzY2OTZmNzU3MzQyNjk2NDY0NjU3MiAvLyAicHJldmlvdXNCaWRkZXIiCglnbG9iYWwgWmVyb0FkZHJlc3MKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIG9wdEludG9Bc3NldCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX29wdEludG9Bc3NldDoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIG9wdEludG9Bc3NldCh1aW50NjQpdm9pZAoJY2FsbHN1YiBvcHRJbnRvQXNzZXQKCWludCAxCglyZXR1cm4KCi8vIG9wdEludG9Bc3NldChhc3NldDogQXNzZXRJRCk6IHZvaWQKb3B0SW50b0Fzc2V0OgoJcHJvdG8gMSAwCgoJLy8gT25seSBhbGxvdyBhcHAgY3JlYXRvciB0byBvcHQgdGhlIGFwcCBhY2NvdW50IGludG8gYSBBU0EKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjI5CgkvLyB2ZXJpZnlBcHBDYWxsVHhuKHRoaXMudHhuLCB7IHNlbmRlcjogZ2xvYmFscy5jcmVhdG9yQWRkcmVzcyB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJdHhuIFNlbmRlcgoJZ2xvYmFsIENyZWF0b3JBZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidGhpcy50eG4iLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoiZ2xvYmFscy5jcmVhdG9yQWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyBWZXJpZnkgYSBBU0EgaGFzbid0IGFscmVhZHkgYmVlbiBvcHRlZCBpbnRvCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czozMgoJLy8gYXNzZXJ0KHRoaXMuYXNhLnZhbHVlID09PSBBc3NldElELnplcm9JbmRleCkKCWJ5dGUgMHg2MTczNjEgLy8gImFzYSIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMAoJPT0KCWFzc2VydAoKCS8vIFNhdmUgQVNBIElEIGluIGdsb2JhbCBzdGF0ZQoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MzUKCS8vIHRoaXMuYXNhLnZhbHVlID0gYXNzZXQKCWJ5dGUgMHg2MTczNjEgLy8gImFzYSIKCWZyYW1lX2RpZyAtMSAvLyBhc3NldDogQXNzZXRJRAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBTdWJtaXQgb3B0LWluIHRyYW5zYWN0aW9uOiAwIGFzc2V0IHRyYW5zZmVyIHRvIHNlbGYKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjM4CgkvLyB0aGlzLnR4bkNvbXBvc2VyLnNlbmQoCgkvLyAgICAgICBuZXcgQXNzZXRUcmFuc2ZlclR4bih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXNzZXQsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo0MAoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjQxCgkvLyB4ZmVyQXNzZXQ6IGFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXNzZXQ6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NDIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gc3RhcnRBdWN0aW9uKHVpbnQ2NCx1aW50NjQsYXhmZXIpdm9pZAoqYWJpX3JvdXRlX3N0YXJ0QXVjdGlvbjoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09CgoJLy8gYXJndW1lbnQgMCAoYXhmZXIpIGZvciBzdGFydEF1Y3Rpb24gbXVzdCBiZSBhIGF4ZmVyIHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBsZW5ndGg6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHN0YXJ0aW5nUHJpY2U6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgc3RhcnRBdWN0aW9uKHVpbnQ2NCx1aW50NjQsYXhmZXIpdm9pZAoJY2FsbHN1YiBzdGFydEF1Y3Rpb24KCWludCAxCglyZXR1cm4KCi8vIHN0YXJ0QXVjdGlvbihzdGFydGluZ1ByaWNlOiB1aW50NjQsIGxlbmd0aDogdWludDY0LCBheGZlcjogQXNzZXRUcmFuc2ZlclR4bik6IHZvaWQKc3RhcnRBdWN0aW9uOgoJcHJvdG8gMyAwCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NDgKCS8vIHZlcmlmeUFwcENhbGxUeG4odGhpcy50eG4sIHsgc2VuZGVyOiBnbG9iYWxzLmNyZWF0b3JBZGRyZXNzIH0pCgkvLyB2ZXJpZnkgc2VuZGVyCgl0eG4gU2VuZGVyCglnbG9iYWwgQ3JlYXRvckFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4biIsImZpZWxkIjoic2VuZGVyIiwiZXhwZWN0ZWQiOiJnbG9iYWxzLmNyZWF0b3JBZGRyZXNzIn0KCWFzc2VydAoKCS8vIEVuc3VyZSB0aGUgYXVjdGlvbiBoYXNuJ3QgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjUxCgkvLyBhc3NlcnQodGhpcy5hdWN0aW9uRW5kLnZhbHVlID09PSAwKQoJYnl0ZSAweDYxNzU2Mzc0Njk2ZjZlNDU2ZTY0IC8vICJhdWN0aW9uRW5kIgoJYXBwX2dsb2JhbF9nZXQKCWludCAwCgk9PQoJYXNzZXJ0CgoJLy8gVmVyaWZ5IGF4ZmVyCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo1NAoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgeyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0zIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6ImF4ZmVyIiwiZmllbGQiOiJhc3NldFJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIFNldCBnbG9iYWwgc3RhdGUKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjU3CgkvLyB0aGlzLmFzYUFtdC52YWx1ZSA9IGF4ZmVyLmFzc2V0QW1vdW50CglieXRlIDB4NjE3MzYxNDE2ZDc0IC8vICJhc2FBbXQiCglmcmFtZV9kaWcgLTMgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjU4CgkvLyB0aGlzLmF1Y3Rpb25FbmQudmFsdWUgPSBnbG9iYWxzLmxhdGVzdFRpbWVzdGFtcCArIGxlbmd0aAoJYnl0ZSAweDYxNzU2Mzc0Njk2ZjZlNDU2ZTY0IC8vICJhdWN0aW9uRW5kIgoJZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAoJZnJhbWVfZGlnIC0yIC8vIGxlbmd0aDogdWludDY0CgkrCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjU5CgkvLyB0aGlzLnByZXZpb3VzQmlkLnZhbHVlID0gc3RhcnRpbmdQcmljZQoJYnl0ZSAweDcwNzI2NTc2Njk2Zjc1NzM0MjY5NjQgLy8gInByZXZpb3VzQmlkIgoJZnJhbWVfZGlnIC0xIC8vIHN0YXJ0aW5nUHJpY2U6IHVpbnQ2NAoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKLy8gcGF5KHJlY2VpdmVyOiBBZGRyZXNzLCBhbW91bnQ6IHVpbnQ2NCk6IHZvaWQKcGF5OgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjMKCS8vIHRoaXMudHhuQ29tcG9zZXIuc2VuZCgKCS8vICAgICAgIG5ldyBQYXlUeG4oewoJLy8gICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFtb3VudDogYW1vdW50LAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjUKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjYKCS8vIGFtb3VudDogYW1vdW50CglmcmFtZV9kaWcgLTIgLy8gYW1vdW50OiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBvcHRJblRvQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9vcHRJblRvQXBwbGljYXRpb246CgkvLyBleGVjdXRlIG9wdEluVG9BcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBvcHRJblRvQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIG9wdEluVG9BcHBsaWNhdGlvbigpOiB2b2lkCm9wdEluVG9BcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoJcmV0c3ViCgovLyBiaWQocGF5KXZvaWQKKmFiaV9yb3V0ZV9iaWQ6CgkvLyBwYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAwIChwYXltZW50KSBmb3IgYmlkIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYmlkKHBheSl2b2lkCgljYWxsc3ViIGJpZAoJaW50IDEKCXJldHVybgoKLy8gYmlkKHBheW1lbnQ6IFBheVR4bik6IHZvaWQKYmlkOgoJcHJvdG8gMSAwCgoJLy8gRW5zdXJlIGF1Y3Rpb24gaGFzbid0IGVuZGVkCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo3NgoJLy8gYXNzZXJ0KGdsb2JhbHMubGF0ZXN0VGltZXN0YW1wIDwgdGhpcy5hdWN0aW9uRW5kLnZhbHVlKQoJZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAoJYnl0ZSAweDYxNzU2Mzc0Njk2ZjZlNDU2ZTY0IC8vICJhdWN0aW9uRW5kIgoJYXBwX2dsb2JhbF9nZXQKCTwKCWFzc2VydAoKCS8vIFZlcmlmeSBwYXltZW50IHRyYW5zYWN0aW9uCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo3OQoJLy8gdmVyaWZ5UGF5VHhuKHBheW1lbnQsIHsKCS8vICAgICAgIHNlbmRlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiB7IGdyZWF0ZXJUaGFuOiB0aGlzLnByZXZpb3VzQmlkLnZhbHVlIH0sCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBzZW5kZXIKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBQYXlUeG4KCWd0eG5zIFNlbmRlcgoJdHhuIFNlbmRlcgoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InBheW1lbnQiLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoidGhpcy50eG4uc2VuZGVyIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJYnl0ZSAweDcwNzI2NTc2Njk2Zjc1NzM0MjY5NjQgLy8gInByZXZpb3VzQmlkIgoJYXBwX2dsb2JhbF9nZXQKCT4KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InBheW1lbnQiLCJmaWVsZCI6ImFtb3VudCIsImNvbmRpdGlvbiI6ImdyZWF0ZXJUaGFuIiwiZXhwZWN0ZWQiOiI+dGhpcy5wcmV2aW91c0JpZC52YWx1ZSJ9Cglhc3NlcnQKCgkvLyBTZXQgZ2xvYmFsIHN0YXRlCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo4NQoJLy8gdGhpcy5wcmV2aW91c0JpZC52YWx1ZSA9IHBheW1lbnQuYW1vdW50CglieXRlIDB4NzA3MjY1NzY2OTZmNzU3MzQyNjk2NCAvLyAicHJldmlvdXNCaWQiCglmcmFtZV9kaWcgLTEgLy8gcGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6ODYKCS8vIHRoaXMucHJldmlvdXNCaWRkZXIudmFsdWUgPSBwYXltZW50LnNlbmRlcgoJYnl0ZSAweDcwNzI2NTc2Njk2Zjc1NzM0MjY5NjQ2NDY1NzIgLy8gInByZXZpb3VzQmlkZGVyIgoJZnJhbWVfZGlnIC0xIC8vIHBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgU2VuZGVyCglhcHBfZ2xvYmFsX3B1dAoKCS8vIFVwZGF0ZSBjbGFpbWFibGUgYW1vdW50CgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo4OQoJLy8gdGhpcy5jbGFpbWFibGVBbW91bnQodGhpcy50eG4uc2VuZGVyKS52YWx1ZSA9IHBheW1lbnQuYW1vdW50Cgl0eG4gU2VuZGVyCglieXRlIDB4NjM2YzYxNjk2ZDYxNjI2YzY1NDE2ZDZmNzU2ZTc0IC8vICJjbGFpbWFibGVBbW91bnQiCglmcmFtZV9kaWcgLTEgLy8gcGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWFwcF9sb2NhbF9wdXQKCXJldHN1YgoKLy8gY2xhaW1CaWRzKCl2b2lkCiphYmlfcm91dGVfY2xhaW1CaWRzOgoJLy8gZXhlY3V0ZSBjbGFpbUJpZHMoKXZvaWQKCWNhbGxzdWIgY2xhaW1CaWRzCglpbnQgMQoJcmV0dXJuCgovLyBjbGFpbUJpZHMoKTogdm9pZApjbGFpbUJpZHM6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6OTMKCS8vIG9yaWdpbmFsQW1vdW50ID0gdGhpcy5jbGFpbWFibGVBbW91bnQodGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYnl0ZSAweDYzNmM2MTY5NmQ2MTYyNmM2NTQxNmQ2Zjc1NmU3NCAvLyAiY2xhaW1hYmxlQW1vdW50IgoJYXBwX2xvY2FsX2dldAoJZnJhbWVfYnVyeSAwIC8vIG9yaWdpbmFsQW1vdW50OiB1aW50NjQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo5NAoJLy8gYW1vdW50ID0gb3JpZ2luYWxBbW91bnQKCWZyYW1lX2RpZyAwIC8vIG9yaWdpbmFsQW1vdW50OiB1aW50NjQKCWZyYW1lX2J1cnkgMSAvLyBhbW91bnQ6IHVpbnQ2NAoKCS8vIHN1YnRyYWN0IHByZXZpb3VzIGJpZCBpZiBzZW5kZXIgaXMgcHJldmlvdXMgYmlkZGVyCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6OTcKCS8vIHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy5wcmV2aW91c0JpZGRlci52YWx1ZQoJdHhuIFNlbmRlcgoJYnl0ZSAweDcwNzI2NTc2Njk2Zjc1NzM0MjY5NjQ2NDY1NzIgLy8gInByZXZpb3VzQmlkZGVyIgoJYXBwX2dsb2JhbF9nZXQKCT09CglieiAqaWYwX2VuZAoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6OTcKCS8vIGFtb3VudCA9IGFtb3VudCAtIHRoaXMucHJldmlvdXNCaWQudmFsdWUKCWZyYW1lX2RpZyAxIC8vIGFtb3VudDogdWludDY0CglieXRlIDB4NzA3MjY1NzY2OTZmNzU3MzQyNjk2NCAvLyAicHJldmlvdXNCaWQiCglhcHBfZ2xvYmFsX2dldAoJLQoJZnJhbWVfYnVyeSAxIC8vIGFtb3VudDogdWludDY0CgoqaWYwX2VuZDoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjk5CgkvLyB0aGlzLnBheSh0aGlzLnR4bi5zZW5kZXIsIGFtb3VudCkKCWZyYW1lX2RpZyAxIC8vIGFtb3VudDogdWludDY0Cgl0eG4gU2VuZGVyCgljYWxsc3ViIHBheQoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjEwMAoJLy8gdGhpcy5jbGFpbWFibGVBbW91bnQodGhpcy50eG4uc2VuZGVyKS52YWx1ZSA9IG9yaWdpbmFsQW1vdW50IC0gYW1vdW50Cgl0eG4gU2VuZGVyCglieXRlIDB4NjM2YzYxNjk2ZDYxNjI2YzY1NDE2ZDZmNzU2ZTc0IC8vICJjbGFpbWFibGVBbW91bnQiCglmcmFtZV9kaWcgMCAvLyBvcmlnaW5hbEFtb3VudDogdWludDY0CglmcmFtZV9kaWcgMSAvLyBhbW91bnQ6IHVpbnQ2NAoJLQoJYXBwX2xvY2FsX3B1dAoJcmV0c3ViCgovLyBjbGFpbV9hc3NldCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2NsYWltX2Fzc2V0OgoJLy8gYXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgY2xhaW1fYXNzZXQodWludDY0KXZvaWQKCWNhbGxzdWIgY2xhaW1fYXNzZXQKCWludCAxCglyZXR1cm4KCi8vIGNsYWltX2Fzc2V0KGFzc2V0OiBBc3NldElEKTogdm9pZApjbGFpbV9hc3NldDoKCXByb3RvIDEgMAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjEwNAoJLy8gYXNzZXJ0KGdsb2JhbHMubGF0ZXN0VGltZXN0YW1wID4gdGhpcy5hdWN0aW9uRW5kLnZhbHVlKQoJZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAoJYnl0ZSAweDYxNzU2Mzc0Njk2ZjZlNDU2ZTY0IC8vICJhdWN0aW9uRW5kIgoJYXBwX2dsb2JhbF9nZXQKCT4KCWFzc2VydAoKCS8vIFNlbmQgQVNBIHRvIHByZXZpb3VzIGJpZGRlcgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTA3CgkvLyB0aGlzLnR4bkNvbXBvc2VyLnNlbmQoCgkvLyAgICAgICBuZXcgQXNzZXRUcmFuc2ZlclR4bih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMucHJldmlvdXNCaWRkZXIudmFsdWUsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXNzZXQsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiB0aGlzLmFzYUFtdC52YWx1ZSwKCS8vICAgICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnByZXZpb3VzQmlkZGVyLnZhbHVlLAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMDkKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMucHJldmlvdXNCaWRkZXIudmFsdWUKCWJ5dGUgMHg3MDcyNjU3NjY5NmY3NTczNDI2OTY0NjQ2NTcyIC8vICJwcmV2aW91c0JpZGRlciIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMTAKCS8vIHhmZXJBc3NldDogYXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBhc3NldDogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMTEKCS8vIGFzc2V0QW1vdW50OiB0aGlzLmFzYUFtdC52YWx1ZQoJYnl0ZSAweDYxNzM2MTQxNmQ3NCAvLyAiYXNhQW10IgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMTIKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy5wcmV2aW91c0JpZGRlci52YWx1ZQoJYnl0ZSAweDcwNzI2NTc2Njk2Zjc1NzM0MjY5NjQ2NDY1NzIgLy8gInByZXZpb3VzQmlkZGVyIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBkZWxldGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2RlbGV0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBkZWxldGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBkZWxldGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gZGVsZXRlQXBwbGljYXRpb24oKTogdm9pZApkZWxldGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjExOAoJLy8gdGhpcy50eG5Db21wb3Nlci5zZW5kKAoJLy8gICAgICAgbmV3IFBheVR4bih7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBnbG9iYWxzLmNyZWF0b3JBZGRyZXNzLAoJLy8gICAgICAgICBjbG9zZVJlbWFpbmRlclRvOiBnbG9iYWxzLmNyZWF0b3JBZGRyZXNzLAoJLy8gICAgICAgICBhbW91bnQ6IDAsCgkvLyAgICAgICB9KQoJLy8gICAgICkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMjAKCS8vIHJlY2VpdmVyOiBnbG9iYWxzLmNyZWF0b3JBZGRyZXNzCglnbG9iYWwgQ3JlYXRvckFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMjEKCS8vIGNsb3NlUmVtYWluZGVyVG86IGdsb2JhbHMuY3JlYXRvckFkZHJlc3MKCWdsb2JhbCBDcmVhdG9yQWRkcmVzcwoJaXR4bl9maWVsZCBDbG9zZVJlbWFpbmRlclRvCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTIyCgkvLyBhbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAib3B0SW50b0Fzc2V0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJzdGFydEF1Y3Rpb24odWludDY0LHVpbnQ2NCxheGZlcil2b2lkIgoJbWV0aG9kICJiaWQocGF5KXZvaWQiCgltZXRob2QgImNsYWltQmlkcygpdm9pZCIKCW1ldGhvZCAiY2xhaW1fYXNzZXQodWludDY0KXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX29wdEludG9Bc3NldCAqYWJpX3JvdXRlX3N0YXJ0QXVjdGlvbiAqYWJpX3JvdXRlX2JpZCAqYWJpX3JvdXRlX2NsYWltQmlkcyAqYWJpX3JvdXRlX2NsYWltX2Fzc2V0CgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJyCgoqY2FsbF9PcHRJbjoKCW1ldGhvZCAib3B0SW5Ub0FwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9vcHRJblRvQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBPcHRJbgoJZXJyCgoqY2FsbF9EZWxldGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAiZGVsZXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2RlbGV0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgRGVsZXRlQXBwbGljYXRpb24KCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/examples/auction/tealscript_artifacts/Auction.src_map.json b/examples/auction/tealscript_artifacts/Auction.src_map.json index f6a086b30..86f0717bd 100644 --- a/examples/auction/tealscript_artifacts/Auction.src_map.json +++ b/examples/auction/tealscript_artifacts/Auction.src_map.json @@ -448,21 +448,21 @@ ] }, { - "teal": 116, + "teal": 118, "source": 38, "pc": [ 164 ] }, { - "teal": 117, + "teal": 119, "source": 38, "pc": [ 165 ] }, { - "teal": 118, + "teal": 120, "source": 38, "pc": [ 166, @@ -470,61 +470,61 @@ ] }, { - "teal": 122, - "source": 39, + "teal": 124, + "source": 40, "pc": [ 168, 169 ] }, { - "teal": 123, - "source": 39, + "teal": 125, + "source": 40, "pc": [ 170, 171 ] }, { - "teal": 127, - "source": 40, + "teal": 129, + "source": 41, "pc": [ 172, 173 ] }, { - "teal": 128, - "source": 40, + "teal": 130, + "source": 41, "pc": [ 174, 175 ] }, { - "teal": 132, - "source": 41, + "teal": 134, + "source": 42, "pc": [ 176 ] }, { - "teal": 133, - "source": 41, + "teal": 135, + "source": 42, "pc": [ 177, 178 ] }, { - "teal": 136, + "teal": 138, "source": 38, "pc": [ 179 ] }, { - "teal": 137, + "teal": 139, "source": 38, "pc": [ 180, @@ -532,81 +532,81 @@ ] }, { - "teal": 140, + "teal": 142, "source": 38, "pc": [ 182 ] }, { - "teal": 141, + "teal": 143, "source": 27, "pc": [ 183 ] }, { - "teal": 146, - "source": 45, + "teal": 148, + "source": 47, "pc": [ 184, 185 ] }, { - "teal": 147, - "source": 45, + "teal": 149, + "source": 47, "pc": [ 186 ] }, { - "teal": 148, - "source": 45, + "teal": 150, + "source": 47, "pc": [ 187 ] }, { - "teal": 149, - "source": 45, + "teal": 151, + "source": 47, "pc": [ 188 ] }, { - "teal": 150, - "source": 45, + "teal": 152, + "source": 47, "pc": [ 189, 190 ] }, { - "teal": 151, - "source": 45, + "teal": 153, + "source": 47, "pc": [ 191 ] }, { - "teal": 152, - "source": 45, + "teal": 154, + "source": 47, "pc": [ 192 ] }, { - "teal": 155, - "source": 45, + "teal": 157, + "source": 47, "errorMessage": "argument 0 (axfer) for startAuction must be a axfer transaction", "pc": [ 193 ] }, { - "teal": 158, - "source": 45, + "teal": 160, + "source": 47, "pc": [ 194, 195, @@ -614,15 +614,15 @@ ] }, { - "teal": 159, - "source": 45, + "teal": 161, + "source": 47, "pc": [ 197 ] }, { - "teal": 162, - "source": 45, + "teal": 164, + "source": 47, "pc": [ 198, 199, @@ -630,15 +630,15 @@ ] }, { - "teal": 163, - "source": 45, + "teal": 165, + "source": 47, "pc": [ 201 ] }, { - "teal": 166, - "source": 45, + "teal": 168, + "source": 47, "pc": [ 202, 203, @@ -646,22 +646,22 @@ ] }, { - "teal": 167, - "source": 45, + "teal": 169, + "source": 47, "pc": [ 205 ] }, { - "teal": 168, - "source": 45, + "teal": 170, + "source": 47, "pc": [ 206 ] }, { - "teal": 172, - "source": 45, + "teal": 174, + "source": 47, "pc": [ 207, 208, @@ -669,209 +669,209 @@ ] }, { - "teal": 177, - "source": 46, + "teal": 179, + "source": 48, "pc": [ 210, 211 ] }, { - "teal": 178, - "source": 46, + "teal": 180, + "source": 48, "pc": [ 212, 213 ] }, { - "teal": 179, - "source": 46, + "teal": 181, + "source": 48, "pc": [ 214 ] }, { - "teal": 182, - "source": 46, + "teal": 184, + "source": 48, "errorMessage": "transaction verification failed: {\"txn\":\"this.txn\",\"field\":\"sender\",\"expected\":\"globals.creatorAddress\"}", "pc": [ 215 ] }, { - "teal": 187, - "source": 49, + "teal": 189, + "source": 51, "pc": [ 216 ] }, { - "teal": 188, - "source": 49, + "teal": 190, + "source": 51, "pc": [ 217 ] }, { - "teal": 189, - "source": 49, + "teal": 191, + "source": 51, "pc": [ 218 ] }, { - "teal": 190, - "source": 49, + "teal": 192, + "source": 51, "pc": [ 219 ] }, { - "teal": 191, - "source": 49, + "teal": 193, + "source": 51, "pc": [ 220 ] }, { - "teal": 197, - "source": 52, + "teal": 199, + "source": 54, "pc": [ 221, 222 ] }, { - "teal": 198, - "source": 52, + "teal": 200, + "source": 54, "pc": [ 223, 224 ] }, { - "teal": 199, - "source": 52, + "teal": 201, + "source": 54, "pc": [ 225, 226 ] }, { - "teal": 200, - "source": 52, + "teal": 202, + "source": 54, "pc": [ 227 ] }, { - "teal": 203, - "source": 52, + "teal": 205, + "source": 54, "errorMessage": "transaction verification failed: {\"txn\":\"axfer\",\"field\":\"assetReceiver\",\"expected\":\"this.app.address\"}", "pc": [ 228 ] }, { - "teal": 208, - "source": 55, + "teal": 210, + "source": 57, "pc": [ 229 ] }, { - "teal": 209, - "source": 55, + "teal": 211, + "source": 57, "pc": [ 230, 231 ] }, { - "teal": 210, - "source": 55, + "teal": 212, + "source": 57, "pc": [ 232, 233 ] }, { - "teal": 211, - "source": 55, + "teal": 213, + "source": 57, "pc": [ 234 ] }, { - "teal": 215, - "source": 56, + "teal": 217, + "source": 58, "pc": [ 235 ] }, { - "teal": 216, - "source": 56, + "teal": 218, + "source": 58, "pc": [ 236, 237 ] }, { - "teal": 217, - "source": 56, + "teal": 219, + "source": 58, "pc": [ 238, 239 ] }, { - "teal": 218, - "source": 56, + "teal": 220, + "source": 58, "pc": [ 240 ] }, { - "teal": 219, - "source": 56, + "teal": 221, + "source": 58, "pc": [ 241 ] }, { - "teal": 223, - "source": 57, + "teal": 225, + "source": 59, "pc": [ 242 ] }, { - "teal": 224, - "source": 57, + "teal": 226, + "source": 59, "pc": [ 243, 244 ] }, { - "teal": 225, - "source": 57, + "teal": 227, + "source": 59, "pc": [ 245 ] }, { - "teal": 226, - "source": 45, + "teal": 228, + "source": 47, "pc": [ 246 ] }, { - "teal": 230, - "source": 60, + "teal": 232, + "source": 62, "pc": [ 247, 248, @@ -879,91 +879,91 @@ ] }, { - "teal": 237, - "source": 61, + "teal": 241, + "source": 63, "pc": [ 250 ] }, { - "teal": 238, - "source": 61, + "teal": 242, + "source": 63, "pc": [ 251 ] }, { - "teal": 239, - "source": 61, + "teal": 243, + "source": 63, "pc": [ 252, 253 ] }, { - "teal": 243, - "source": 62, + "teal": 247, + "source": 65, "pc": [ 254, 255 ] }, { - "teal": 244, - "source": 62, + "teal": 248, + "source": 65, "pc": [ 256, 257 ] }, { - "teal": 248, - "source": 63, + "teal": 252, + "source": 66, "pc": [ 258, 259 ] }, { - "teal": 249, - "source": 63, + "teal": 253, + "source": 66, "pc": [ 260, 261 ] }, { - "teal": 252, - "source": 61, + "teal": 256, + "source": 63, "pc": [ 262 ] }, { - "teal": 253, - "source": 61, + "teal": 257, + "source": 63, "pc": [ 263, 264 ] }, { - "teal": 256, - "source": 61, + "teal": 260, + "source": 63, "pc": [ 265 ] }, { - "teal": 257, - "source": 60, + "teal": 261, + "source": 62, "pc": [ 266 ] }, { - "teal": 262, - "source": 67, + "teal": 266, + "source": 71, "pc": [ 267, 268, @@ -971,22 +971,22 @@ ] }, { - "teal": 263, - "source": 67, + "teal": 267, + "source": 71, "pc": [ 270 ] }, { - "teal": 264, - "source": 67, + "teal": 268, + "source": 71, "pc": [ 271 ] }, { - "teal": 268, - "source": 67, + "teal": 272, + "source": 71, "pc": [ 272, 273, @@ -994,74 +994,74 @@ ] }, { - "teal": 269, - "source": 67, + "teal": 273, + "source": 71, "pc": [ 275 ] }, { - "teal": 274, - "source": 70, + "teal": 278, + "source": 74, "pc": [ 276, 277 ] }, { - "teal": 275, - "source": 70, + "teal": 279, + "source": 74, "pc": [ 278 ] }, { - "teal": 276, - "source": 70, + "teal": 280, + "source": 74, "pc": [ 279 ] }, { - "teal": 277, - "source": 70, + "teal": 281, + "source": 74, "pc": [ 280 ] }, { - "teal": 278, - "source": 70, + "teal": 282, + "source": 74, "pc": [ 281, 282 ] }, { - "teal": 279, - "source": 70, + "teal": 283, + "source": 74, "pc": [ 283 ] }, { - "teal": 280, - "source": 70, + "teal": 284, + "source": 74, "pc": [ 284 ] }, { - "teal": 283, - "source": 70, + "teal": 287, + "source": 74, "errorMessage": "argument 0 (payment) for bid must be a pay transaction", "pc": [ 285 ] }, { - "teal": 286, - "source": 70, + "teal": 290, + "source": 74, "pc": [ 286, 287, @@ -1069,22 +1069,22 @@ ] }, { - "teal": 287, - "source": 70, + "teal": 291, + "source": 74, "pc": [ 289 ] }, { - "teal": 288, - "source": 70, + "teal": 292, + "source": 74, "pc": [ 290 ] }, { - "teal": 292, - "source": 70, + "teal": 296, + "source": 74, "pc": [ 291, 292, @@ -1092,234 +1092,234 @@ ] }, { - "teal": 297, - "source": 72, + "teal": 301, + "source": 76, "pc": [ 294, 295 ] }, { - "teal": 298, - "source": 72, + "teal": 302, + "source": 76, "pc": [ 296 ] }, { - "teal": 299, - "source": 72, + "teal": 303, + "source": 76, "pc": [ 297 ] }, { - "teal": 300, - "source": 72, + "teal": 304, + "source": 76, "pc": [ 298 ] }, { - "teal": 301, - "source": 72, + "teal": 305, + "source": 76, "pc": [ 299 ] }, { - "teal": 310, - "source": 75, + "teal": 314, + "source": 79, "pc": [ 300, 301 ] }, { - "teal": 311, - "source": 76, + "teal": 315, + "source": 80, "pc": [ 302, 303 ] }, { - "teal": 312, - "source": 76, + "teal": 316, + "source": 80, "pc": [ 304, 305 ] }, { - "teal": 313, - "source": 76, + "teal": 317, + "source": 80, "pc": [ 306 ] }, { - "teal": 316, - "source": 76, + "teal": 320, + "source": 80, "errorMessage": "transaction verification failed: {\"txn\":\"payment\",\"field\":\"sender\",\"expected\":\"this.txn.sender\"}", "pc": [ 307 ] }, { - "teal": 319, - "source": 75, + "teal": 323, + "source": 79, "pc": [ 308, 309 ] }, { - "teal": 320, - "source": 77, + "teal": 324, + "source": 81, "pc": [ 310, 311 ] }, { - "teal": 321, - "source": 77, + "teal": 325, + "source": 81, "pc": [ 312 ] }, { - "teal": 322, - "source": 77, + "teal": 326, + "source": 81, "pc": [ 313 ] }, { - "teal": 323, - "source": 77, + "teal": 327, + "source": 81, "pc": [ 314 ] }, { - "teal": 326, - "source": 77, + "teal": 330, + "source": 81, "errorMessage": "transaction verification failed: {\"txn\":\"payment\",\"field\":\"amount\",\"condition\":\"greaterThan\",\"expected\":\">this.previousBid.value\"}", "pc": [ 315 ] }, { - "teal": 331, - "source": 81, + "teal": 335, + "source": 85, "pc": [ 316 ] }, { - "teal": 332, - "source": 81, + "teal": 336, + "source": 85, "pc": [ 317, 318 ] }, { - "teal": 333, - "source": 81, + "teal": 337, + "source": 85, "pc": [ 319, 320 ] }, { - "teal": 334, - "source": 81, + "teal": 338, + "source": 85, "pc": [ 321 ] }, { - "teal": 338, - "source": 82, + "teal": 342, + "source": 86, "pc": [ 322 ] }, { - "teal": 339, - "source": 82, + "teal": 343, + "source": 86, "pc": [ 323, 324 ] }, { - "teal": 340, - "source": 82, + "teal": 344, + "source": 86, "pc": [ 325, 326 ] }, { - "teal": 341, - "source": 82, + "teal": 345, + "source": 86, "pc": [ 327 ] }, { - "teal": 346, - "source": 85, + "teal": 350, + "source": 89, "pc": [ 328, 329 ] }, { - "teal": 347, - "source": 85, + "teal": 351, + "source": 89, "pc": [ 330, 331 ] }, { - "teal": 348, - "source": 85, + "teal": 352, + "source": 89, "pc": [ 332, 333 ] }, { - "teal": 349, - "source": 85, + "teal": 353, + "source": 89, "pc": [ 334, 335 ] }, { - "teal": 350, - "source": 85, + "teal": 354, + "source": 89, "pc": [ 336 ] }, { - "teal": 351, - "source": 70, + "teal": 355, + "source": 74, "pc": [ 337 ] }, { - "teal": 356, - "source": 88, + "teal": 360, + "source": 92, "pc": [ 338, 339, @@ -1327,22 +1327,22 @@ ] }, { - "teal": 357, - "source": 88, + "teal": 361, + "source": 92, "pc": [ 341 ] }, { - "teal": 358, - "source": 88, + "teal": 362, + "source": 92, "pc": [ 342 ] }, { - "teal": 362, - "source": 88, + "teal": 366, + "source": 92, "pc": [ 343, 344, @@ -1350,99 +1350,99 @@ ] }, { - "teal": 365, - "source": 88, + "teal": 369, + "source": 92, "pc": [ 346, 347 ] }, { - "teal": 366, - "source": 88, + "teal": 370, + "source": 92, "pc": [ 348 ] }, { - "teal": 370, - "source": 89, + "teal": 374, + "source": 93, "pc": [ 349, 350 ] }, { - "teal": 371, - "source": 89, + "teal": 375, + "source": 93, "pc": [ 351, 352 ] }, { - "teal": 372, - "source": 89, + "teal": 376, + "source": 93, "pc": [ 353 ] }, { - "teal": 373, - "source": 89, + "teal": 377, + "source": 93, "pc": [ 354, 355 ] }, { - "teal": 377, - "source": 90, + "teal": 381, + "source": 94, "pc": [ 356, 357 ] }, { - "teal": 378, - "source": 90, + "teal": 382, + "source": 94, "pc": [ 358, 359 ] }, { - "teal": 384, - "source": 93, + "teal": 388, + "source": 97, "pc": [ 360, 361 ] }, { - "teal": 385, - "source": 93, + "teal": 389, + "source": 97, "pc": [ 362 ] }, { - "teal": 386, - "source": 93, + "teal": 390, + "source": 97, "pc": [ 363 ] }, { - "teal": 387, - "source": 93, + "teal": 391, + "source": 97, "pc": [ 364 ] }, { - "teal": 388, - "source": 93, + "teal": 392, + "source": 97, "pc": [ 365, 366, @@ -1450,61 +1450,61 @@ ] }, { - "teal": 393, - "source": 93, + "teal": 397, + "source": 97, "pc": [ 368, 369 ] }, { - "teal": 394, - "source": 93, + "teal": 398, + "source": 97, "pc": [ 370 ] }, { - "teal": 395, - "source": 93, + "teal": 399, + "source": 97, "pc": [ 371 ] }, { - "teal": 396, - "source": 93, + "teal": 400, + "source": 97, "pc": [ 372 ] }, { - "teal": 397, - "source": 93, + "teal": 401, + "source": 97, "pc": [ 373, 374 ] }, { - "teal": 402, - "source": 95, + "teal": 406, + "source": 99, "pc": [ 375, 376 ] }, { - "teal": 403, - "source": 95, + "teal": 407, + "source": 99, "pc": [ 377, 378 ] }, { - "teal": 404, - "source": 95, + "teal": 408, + "source": 99, "pc": [ 379, 380, @@ -1512,61 +1512,61 @@ ] }, { - "teal": 408, - "source": 96, + "teal": 412, + "source": 100, "pc": [ 382, 383 ] }, { - "teal": 409, - "source": 96, + "teal": 413, + "source": 100, "pc": [ 384, 385 ] }, { - "teal": 410, - "source": 96, + "teal": 414, + "source": 100, "pc": [ 386, 387 ] }, { - "teal": 411, - "source": 96, + "teal": 415, + "source": 100, "pc": [ 388, 389 ] }, { - "teal": 412, - "source": 96, + "teal": 416, + "source": 100, "pc": [ 390 ] }, { - "teal": 413, - "source": 96, + "teal": 417, + "source": 100, "pc": [ 391 ] }, { - "teal": 414, - "source": 88, + "teal": 418, + "source": 92, "pc": [ 392 ] }, { - "teal": 419, - "source": 99, + "teal": 423, + "source": 103, "pc": [ 393, 394, @@ -1574,15 +1574,15 @@ ] }, { - "teal": 420, - "source": 99, + "teal": 424, + "source": 103, "pc": [ 396 ] }, { - "teal": 423, - "source": 99, + "teal": 427, + "source": 103, "pc": [ 397, 398, @@ -1590,22 +1590,22 @@ ] }, { - "teal": 424, - "source": 99, + "teal": 428, + "source": 103, "pc": [ 400 ] }, { - "teal": 425, - "source": 99, + "teal": 429, + "source": 103, "pc": [ 401 ] }, { - "teal": 429, - "source": 99, + "teal": 433, + "source": 103, "pc": [ 402, 403, @@ -1613,177 +1613,177 @@ ] }, { - "teal": 433, - "source": 100, + "teal": 437, + "source": 104, "pc": [ 405, 406 ] }, { - "teal": 434, - "source": 100, + "teal": 438, + "source": 104, "pc": [ 407 ] }, { - "teal": 435, - "source": 100, + "teal": 439, + "source": 104, "pc": [ 408 ] }, { - "teal": 436, - "source": 100, + "teal": 440, + "source": 104, "pc": [ 409 ] }, { - "teal": 437, - "source": 100, + "teal": 441, + "source": 104, "pc": [ 410 ] }, { - "teal": 447, - "source": 103, + "teal": 453, + "source": 107, "pc": [ 411 ] }, { - "teal": 448, - "source": 103, + "teal": 454, + "source": 107, "pc": [ 412 ] }, { - "teal": 449, - "source": 103, + "teal": 455, + "source": 107, "pc": [ 413, 414 ] }, { - "teal": 453, - "source": 104, + "teal": 459, + "source": 109, "pc": [ 415 ] }, { - "teal": 454, - "source": 104, + "teal": 460, + "source": 109, "pc": [ 416 ] }, { - "teal": 455, - "source": 104, + "teal": 461, + "source": 109, "pc": [ 417, 418 ] }, { - "teal": 459, - "source": 105, + "teal": 465, + "source": 110, "pc": [ 419, 420 ] }, { - "teal": 460, - "source": 105, + "teal": 466, + "source": 110, "pc": [ 421, 422 ] }, { - "teal": 464, - "source": 106, + "teal": 470, + "source": 111, "pc": [ 423 ] }, { - "teal": 465, - "source": 106, + "teal": 471, + "source": 111, "pc": [ 424 ] }, { - "teal": 466, - "source": 106, + "teal": 472, + "source": 111, "pc": [ 425, 426 ] }, { - "teal": 470, - "source": 107, + "teal": 476, + "source": 112, "pc": [ 427 ] }, { - "teal": 471, - "source": 107, + "teal": 477, + "source": 112, "pc": [ 428 ] }, { - "teal": 472, - "source": 107, + "teal": 478, + "source": 112, "pc": [ 429, 430 ] }, { - "teal": 475, - "source": 103, + "teal": 481, + "source": 107, "pc": [ 431 ] }, { - "teal": 476, - "source": 103, + "teal": 482, + "source": 107, "pc": [ 432, 433 ] }, { - "teal": 479, - "source": 103, + "teal": 485, + "source": 107, "pc": [ 434 ] }, { - "teal": 480, - "source": 99, + "teal": 486, + "source": 103, "pc": [ 435 ] }, { - "teal": 485, - "source": 111, + "teal": 491, + "source": 117, "pc": [ 436, 437, @@ -1791,22 +1791,22 @@ ] }, { - "teal": 486, - "source": 111, + "teal": 492, + "source": 117, "pc": [ 439 ] }, { - "teal": 487, - "source": 111, + "teal": 493, + "source": 117, "pc": [ 440 ] }, { - "teal": 491, - "source": 111, + "teal": 497, + "source": 117, "pc": [ 441, 442, @@ -1814,105 +1814,105 @@ ] }, { - "teal": 499, - "source": 112, + "teal": 507, + "source": 118, "pc": [ 444 ] }, { - "teal": 500, - "source": 112, + "teal": 508, + "source": 118, "pc": [ 445 ] }, { - "teal": 501, - "source": 112, + "teal": 509, + "source": 118, "pc": [ 446, 447 ] }, { - "teal": 505, - "source": 113, + "teal": 513, + "source": 120, "pc": [ 448, 449 ] }, { - "teal": 506, - "source": 113, + "teal": 514, + "source": 120, "pc": [ 450, 451 ] }, { - "teal": 510, - "source": 114, + "teal": 518, + "source": 121, "pc": [ 452, 453 ] }, { - "teal": 511, - "source": 114, + "teal": 519, + "source": 121, "pc": [ 454, 455 ] }, { - "teal": 515, - "source": 115, + "teal": 523, + "source": 122, "pc": [ 456 ] }, { - "teal": 516, - "source": 115, + "teal": 524, + "source": 122, "pc": [ 457, 458 ] }, { - "teal": 519, - "source": 112, + "teal": 527, + "source": 118, "pc": [ 459 ] }, { - "teal": 520, - "source": 112, + "teal": 528, + "source": 118, "pc": [ 460, 461 ] }, { - "teal": 523, - "source": 112, + "teal": 531, + "source": 118, "pc": [ 462 ] }, { - "teal": 524, - "source": 111, + "teal": 532, + "source": 117, "pc": [ 463 ] }, { - "teal": 527, + "teal": 535, "source": 4, "pc": [ 464, @@ -1924,7 +1924,7 @@ ] }, { - "teal": 528, + "teal": 536, "source": 4, "pc": [ 470, @@ -1933,7 +1933,7 @@ ] }, { - "teal": 529, + "teal": 537, "source": 4, "pc": [ 473, @@ -1943,7 +1943,7 @@ ] }, { - "teal": 532, + "teal": 540, "source": 4, "errorMessage": "this contract does not implement the given ABI method for create NoOp", "pc": [ @@ -1951,7 +1951,7 @@ ] }, { - "teal": 535, + "teal": 543, "source": 4, "pc": [ 478, @@ -1963,7 +1963,7 @@ ] }, { - "teal": 536, + "teal": 544, "source": 4, "pc": [ 484, @@ -1975,7 +1975,7 @@ ] }, { - "teal": 537, + "teal": 545, "source": 4, "pc": [ 490, @@ -1987,7 +1987,7 @@ ] }, { - "teal": 538, + "teal": 546, "source": 4, "pc": [ 496, @@ -1999,7 +1999,7 @@ ] }, { - "teal": 539, + "teal": 547, "source": 4, "pc": [ 502, @@ -2011,7 +2011,7 @@ ] }, { - "teal": 540, + "teal": 548, "source": 4, "pc": [ 508, @@ -2020,7 +2020,7 @@ ] }, { - "teal": 541, + "teal": 549, "source": 4, "pc": [ 511, @@ -2038,7 +2038,7 @@ ] }, { - "teal": 544, + "teal": 552, "source": 4, "errorMessage": "this contract does not implement the given ABI method for call NoOp", "pc": [ @@ -2046,7 +2046,7 @@ ] }, { - "teal": 547, + "teal": 555, "source": 4, "pc": [ 524, @@ -2058,7 +2058,7 @@ ] }, { - "teal": 548, + "teal": 556, "source": 4, "pc": [ 530, @@ -2067,7 +2067,7 @@ ] }, { - "teal": 549, + "teal": 557, "source": 4, "pc": [ 533, @@ -2077,7 +2077,7 @@ ] }, { - "teal": 552, + "teal": 560, "source": 4, "errorMessage": "this contract does not implement the given ABI method for call OptIn", "pc": [ @@ -2085,7 +2085,7 @@ ] }, { - "teal": 555, + "teal": 563, "source": 4, "pc": [ 538, @@ -2097,7 +2097,7 @@ ] }, { - "teal": 556, + "teal": 564, "source": 4, "pc": [ 544, @@ -2106,7 +2106,7 @@ ] }, { - "teal": 557, + "teal": 565, "source": 4, "pc": [ 547, @@ -2116,7 +2116,7 @@ ] }, { - "teal": 560, + "teal": 568, "source": 4, "errorMessage": "this contract does not implement the given ABI method for call DeleteApplication", "pc": [ diff --git a/examples/itxns/FactoryCallerClient.ts b/examples/itxns/FactoryCallerClient.ts index b360b9046..c22a784fb 100644 --- a/examples/itxns/FactoryCallerClient.ts +++ b/examples/itxns/FactoryCallerClient.ts @@ -66,7 +66,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjgzLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbG1lbnRlZCBpbiB0aGUgY29udHJhY3QsIGl0cyByZXNwZWN0aXZlIGJyYW5jaCB3aWxsIGJlICJOT1RfSU1QTEVNRU5URUQiIHdoaWNoIGp1c3QgY29udGFpbnMgImVyciIKdHhuIEFwcGxpY2F0aW9uSUQKIQppbnQgNgoqCnR4biBPbkNvbXBsZXRpb24KKwpzd2l0Y2ggY2FsbF9Ob09wIE5PVF9JTVBMRU1FTlRFRCBOT1RfSU1QTEVNRU5URUQgTk9UX0lNUExFTUVOVEVEIE5PVF9JTVBMRU1FTlRFRCBOT1RfSU1QTEVNRU5URUQgY3JlYXRlX05vT3AgTk9UX0lNUExFTUVOVEVEIE5PVF9JTVBMRU1FTlRFRCBOT1RfSU1QTEVNRU5URUQgTk9UX0lNUExFTUVOVEVEIE5PVF9JTVBMRU1FTlRFRAoKTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBtaW50QW5kR2V0QXNzZXQoKXVpbnQ2NAphYmlfcm91dGVfbWludEFuZEdldEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG1pbnRBbmRHZXRBc3NldCgpdWludDY0CgljYWxsc3ViIG1pbnRBbmRHZXRBc3NldAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIG1pbnRBbmRHZXRBc3NldCgpOiBBc3NldElECm1pbnRBbmRHZXRBc3NldDoKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXAKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjI1CgkvLyBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgTkZURmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlQXBwbGljYXRpb24+KHsKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBORlRGYWN0b3J5LmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBORlRGYWN0b3J5LmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czoyNgoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IE5GVEZhY3RvcnkuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjI3CgkvLyBhcHByb3ZhbFByb2dyYW06IE5GVEZhY3RvcnkuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUNBUUF4R0JTQkJnc3hHUWlOREFCdkFBQUFBQUFBQUFBQUFBQmhBQUFBQUFBQUFBQUFBQUNBQkJVZmZIVTJHZ0pYQWdBMkdnRlhBZ0NJQUFVV1VMQWlRNG9DQWJHQkE3SVFpLyt5Sm92K3NpVWlzaUlqc2dHenREeUpOaG9DU1JXQklCSkVOaG9CRjRnQUFpSkRpZ0lBc1lFRXNoQ0wvcklVSXJJU2kvK3lFU095QWJPSklrT0FCTGhFZXpZMkdnQ09BZi94QUlBRTBnSk1jNEFFeCtKZ3J6WWFBSTRDLzMzL3NRQT0KCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MzAKCS8vIGZhY3RvcnlBcHAgPSB0aGlzLml0eG4uY3JlYXRlZEFwcGxpY2F0aW9uSUQKCWl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKCWZyYW1lX2J1cnkgMCAvLyBmYWN0b3J5QXBwOiB1aW50NjQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjMyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBhbW91bnQ6IDIwMF8wMDAsCgkvLyAgICAgICByZWNlaXZlcjogZmFjdG9yeUFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czozMwoJLy8gYW1vdW50OiAyMDBfMDAwCglpbnQgMjAwXzAwMAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjM0CgkvLyByZWNlaXZlcjogZmFjdG9yeUFwcC5hZGRyZXNzCglmcmFtZV9kaWcgMCAvLyBmYWN0b3J5QXBwOiB1aW50NjQKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjM3CgkvLyBjcmVhdGVkQXNzZXQgPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgTkZURmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlTkZUPih7CgkvLyAgICAgICBhcHBsaWNhdGlvbklEOiBmYWN0b3J5QXBwLAoJLy8gICAgICAgbWV0aG9kQXJnczogWydNeSBORlQnLCAnTU5GVCddLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJjcmVhdGVORlQoc3RyaW5nLHN0cmluZyl1aW50NjQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MzgKCS8vIGFwcGxpY2F0aW9uSUQ6IGZhY3RvcnlBcHAKCWZyYW1lX2RpZyAwIC8vIGZhY3RvcnlBcHA6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czozOQoJLy8gbWV0aG9kQXJnczogWydNeSBORlQnLCAnTU5GVCddCglieXRlIDB4MDAwNjRkNzkyMDRlNDY1NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWJ5dGUgMHgwMDA0NGQ0ZTQ2NTQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglidG9pCglmcmFtZV9idXJ5IDEgLy8gY3JlYXRlZEFzc2V0OiB1aW50NjQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjQyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGNyZWF0ZWRBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0MwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDQKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDUKCS8vIHhmZXJBc3NldDogY3JlYXRlZEFzc2V0CglmcmFtZV9kaWcgMSAvLyBjcmVhdGVkQXNzZXQ6IHVpbnQ2NAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0OAoJLy8gc2VuZE1ldGhvZENhbGw8dHlwZW9mIE5GVEZhY3RvcnkucHJvdG90eXBlLnRyYW5zZmVyTkZUPih7CgkvLyAgICAgICBhcHBsaWNhdGlvbklEOiBmYWN0b3J5QXBwLAoJLy8gICAgICAgbWV0aG9kQXJnczogW2NyZWF0ZWRBc3NldCwgdGhpcy5hcHAuYWRkcmVzc10sCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgInRyYW5zZmVyTkZUKHVpbnQ2NCxhZGRyZXNzKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDkKCS8vIGFwcGxpY2F0aW9uSUQ6IGZhY3RvcnlBcHAKCWZyYW1lX2RpZyAwIC8vIGZhY3RvcnlBcHA6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo1MAoJLy8gbWV0aG9kQXJnczogW2NyZWF0ZWRBc3NldCwgdGhpcy5hcHAuYWRkcmVzc10KCWZyYW1lX2RpZyAxIC8vIGNyZWF0ZWRBc3NldDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NTMKCS8vIHJldHVybiBjcmVhdGVkQXNzZXQ7CglmcmFtZV9kaWcgMSAvLyBjcmVhdGVkQXNzZXQ6IHVpbnQ2NAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDEKCXJldHN1YgoKYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCmNhbGxfTm9PcDoKCW1ldGhvZCAibWludEFuZEdldEFzc2V0KCl1aW50NjQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfbWludEFuZEdldEFzc2V0CgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIG1pbnRBbmRHZXRBc3NldCgpdWludDY0CiphYmlfcm91dGVfbWludEFuZEdldEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG1pbnRBbmRHZXRBc3NldCgpdWludDY0CgljYWxsc3ViIG1pbnRBbmRHZXRBc3NldAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIG1pbnRBbmRHZXRBc3NldCgpOiBBc3NldElECm1pbnRBbmRHZXRBc3NldDoKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXAKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjI5CgkvLyBORlRGYWN0b3J5LmNyZWF0ZSgpLmNyZWF0ZUFwcGxpY2F0aW9uKCkKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MjkKCS8vIE5GVEZhY3RvcnkuY3JlYXRlKCkuY3JlYXRlQXBwbGljYXRpb24oKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIE5GVEZhY3RvcnkgY3JlYXRpb24gZmllbGRzCglieXRlIGI2NCBDaUFDQVFBeEdCU0JCZ3N4R1FpTkRBQnZBQUFBQUFBQUFBQUFBQUJoQUFBQUFBQUFBQUFBQUFDQUJCVWZmSFUyR2dKWEFnQTJHZ0ZYQWdDSUFBVVdVTEFpUTRvQ0FiR0JBN0lRaS8reUpvditzaVVpc2lJanNnR3p0RHlKTmhvQ1NSV0JJQkpFTmhvQkY0Z0FBaUpEaWdJQXNZRUVzaENML3JJVUlySVNpLyt5RVNPeUFiT0pJa09BQkxoRWV6WTJHZ0NPQWYveEFJQUUwZ0pNYzRBRXgrSmdyellhQUk0Qy8zMy9zUUE9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJYnl0ZSBiNjQgQ2c9PQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjMxCgkvLyBmYWN0b3J5QXBwID0gdGhpcy5pdHhuLmNyZWF0ZWRBcHBsaWNhdGlvbklECglpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECglmcmFtZV9idXJ5IDAgLy8gZmFjdG9yeUFwcDogdWludDY0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czozMwoJLy8gdGhpcy50eG5Db21wb3Nlci5zZW5kKAoJLy8gICAgICAgbmV3IFBheVR4bih7CgkvLyAgICAgICAgIGFtb3VudDogMjAwXzAwMCwKCS8vICAgICAgICAgcmVjZWl2ZXI6IGZhY3RvcnlBcHAuYWRkcmVzcywKCS8vICAgICAgIH0pCgkvLyAgICAgKQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MzUKCS8vIGFtb3VudDogMjAwXzAwMAoJaW50IDIwMF8wMDAKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czozNgoJLy8gcmVjZWl2ZXI6IGZhY3RvcnlBcHAuYWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gZmFjdG9yeUFwcDogdWludDY0CglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglwb3AKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0MAoJLy8gY3JlYXRlZEFzc2V0ID0gTkZURmFjdG9yeS5jYWxsKHsgYXBwbGljYXRpb25JRDogZmFjdG9yeUFwcCB9KS5jcmVhdGVORlQoJ015IE5GVCcsICdNTkZUJykKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDAKCS8vIE5GVEZhY3RvcnkuY2FsbCh7IGFwcGxpY2F0aW9uSUQ6IGZhY3RvcnlBcHAgfSkuY3JlYXRlTkZUKCdNeSBORlQnLCAnTU5GVCcpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJjcmVhdGVORlQoc3RyaW5nLHN0cmluZyl1aW50NjQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDAKCS8vIGFwcGxpY2F0aW9uSUQ6IGZhY3RvcnlBcHAKCWZyYW1lX2RpZyAwIC8vIGZhY3RvcnlBcHA6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0MAoJLy8gJ015IE5GVCcKCWJ5dGUgMHgwMDA2NGQ3OTIwNGU0NjU0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDAKCS8vICdNTkZUJwoJYnl0ZSAweDAwMDQ0ZDRlNDY1NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWJ0b2kKCWZyYW1lX2J1cnkgMSAvLyBjcmVhdGVkQXNzZXQ6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDIKCS8vIHRoaXMudHhuQ29tcG9zZXIuc2VuZCgKCS8vICAgICAgIG5ldyBBc3NldFRyYW5zZmVyVHhuKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogY3JlYXRlZEFzc2V0LAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjQ0CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0NQoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0NgoJLy8geGZlckFzc2V0OiBjcmVhdGVkQXNzZXQKCWZyYW1lX2RpZyAxIC8vIGNyZWF0ZWRBc3NldDogdWludDY0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjUwCgkvLyBORlRGYWN0b3J5LmNhbGwoeyBhcHBsaWNhdGlvbklEOiBmYWN0b3J5QXBwIH0pLnRyYW5zZmVyTkZUKGNyZWF0ZWRBc3NldCwgdGhpcy5hcHAuYWRkcmVzcykKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NTAKCS8vIE5GVEZhY3RvcnkuY2FsbCh7IGFwcGxpY2F0aW9uSUQ6IGZhY3RvcnlBcHAgfSkudHJhbnNmZXJORlQoY3JlYXRlZEFzc2V0LCB0aGlzLmFwcC5hZGRyZXNzKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAidHJhbnNmZXJORlQodWludDY0LGFkZHJlc3Mpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo1MAoJLy8gYXBwbGljYXRpb25JRDogZmFjdG9yeUFwcAoJZnJhbWVfZGlnIDAgLy8gZmFjdG9yeUFwcDogdWludDY0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjUwCgkvLyBjcmVhdGVkQXNzZXQKCWZyYW1lX2RpZyAxIC8vIGNyZWF0ZWRBc3NldDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NTAKCS8vIHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjUyCgkvLyByZXR1cm4gY3JlYXRlZEFzc2V0OwoJZnJhbWVfZGlnIDEgLy8gY3JlYXRlZEFzc2V0OiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAxCglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJtaW50QW5kR2V0QXNzZXQoKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfbWludEFuZEdldEFzc2V0CgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/examples/itxns/artifacts/FactoryCaller.approval.teal b/examples/itxns/artifacts/FactoryCaller.approval.teal index 4eb5732d7..0b7ba622b 100644 --- a/examples/itxns/artifacts/FactoryCaller.approval.teal +++ b/examples/itxns/artifacts/FactoryCaller.approval.teal @@ -43,26 +43,19 @@ mintAndGetAsset: byte 0x dup - // examples/itxns/itxns.algo.ts:25 - // sendMethodCall({ - // clearStateProgram: NFTFactory.clearProgram(), - // approvalProgram: NFTFactory.approvalProgram(), - // }) + // examples/itxns/itxns.algo.ts:29 + // NFTFactory.create().createApplication() itxn_begin int appl itxn_field TypeEnum method "createApplication()void" itxn_field ApplicationArgs - // examples/itxns/itxns.algo.ts:26 - // clearStateProgram: NFTFactory.clearProgram() - byte b64 Cg== - itxn_field ClearStateProgram - - // examples/itxns/itxns.algo.ts:27 - // approvalProgram: NFTFactory.approvalProgram() + // NFTFactory creation fields byte b64 CiACAQAxGBSBBgsxGQiNDABvAAAAAAAAAAAAAABhAAAAAAAAAAAAAACABBUffHU2GgJXAgA2GgFXAgCIAAUWULAiQ4oCAbGBA7IQi/+yJov+siUisiIjsgGztDyJNhoCSRWBIBJENhoBF4gAAiJDigIAsYEEshCL/rIUIrISi/+yESOyAbOJIkOABLhEezY2GgCOAf/xAIAE0gJMc4AEx+JgrzYaAI4C/33/sQA= itxn_field ApprovalProgram + byte b64 Cg== + itxn_field ClearStateProgram // Fee field not set, defaulting to 0 int 0 @@ -71,26 +64,28 @@ mintAndGetAsset: // Submit inner transaction itxn_submit - // examples/itxns/itxns.algo.ts:30 + // examples/itxns/itxns.algo.ts:31 // factoryApp = this.itxn.createdApplicationID itxn CreatedApplicationID frame_bury 0 // factoryApp: uint64 - // examples/itxns/itxns.algo.ts:32 - // sendPayment({ - // amount: 200_000, - // receiver: factoryApp.address, - // }) + // examples/itxns/itxns.algo.ts:33 + // this.txnComposer.send( + // new PayTxn({ + // amount: 200_000, + // receiver: factoryApp.address, + // }) + // ) itxn_begin int pay itxn_field TypeEnum - // examples/itxns/itxns.algo.ts:33 + // examples/itxns/itxns.algo.ts:35 // amount: 200_000 int 200_000 itxn_field Amount - // examples/itxns/itxns.algo.ts:34 + // examples/itxns/itxns.algo.ts:36 // receiver: factoryApp.address frame_dig 0 // factoryApp: uint64 app_params_get AppAddress @@ -104,26 +99,26 @@ mintAndGetAsset: // Submit inner transaction itxn_submit - // examples/itxns/itxns.algo.ts:37 - // createdAsset = sendMethodCall({ - // applicationID: factoryApp, - // methodArgs: ['My NFT', 'MNFT'], - // }) + // examples/itxns/itxns.algo.ts:40 + // createdAsset = NFTFactory.call({ applicationID: factoryApp }).createNFT('My NFT', 'MNFT') itxn_begin int appl itxn_field TypeEnum method "createNFT(string,string)uint64" itxn_field ApplicationArgs - // examples/itxns/itxns.algo.ts:38 + // examples/itxns/itxns.algo.ts:40 // applicationID: factoryApp frame_dig 0 // factoryApp: uint64 itxn_field ApplicationID - // examples/itxns/itxns.algo.ts:39 - // methodArgs: ['My NFT', 'MNFT'] + // examples/itxns/itxns.algo.ts:40 + // 'My NFT' byte 0x00064d79204e4654 itxn_field ApplicationArgs + + // examples/itxns/itxns.algo.ts:40 + // 'MNFT' byte 0x00044d4e4654 itxn_field ApplicationArgs @@ -142,26 +137,28 @@ mintAndGetAsset: frame_bury 1 // createdAsset: uint64 // examples/itxns/itxns.algo.ts:42 - // sendAssetTransfer({ - // assetReceiver: this.app.address, - // assetAmount: 0, - // xferAsset: createdAsset, - // }) + // this.txnComposer.send( + // new AssetTransferTxn({ + // assetReceiver: this.app.address, + // assetAmount: 0, + // xferAsset: createdAsset, + // }) + // ) itxn_begin int axfer itxn_field TypeEnum - // examples/itxns/itxns.algo.ts:43 + // examples/itxns/itxns.algo.ts:44 // assetReceiver: this.app.address global CurrentApplicationAddress itxn_field AssetReceiver - // examples/itxns/itxns.algo.ts:44 + // examples/itxns/itxns.algo.ts:45 // assetAmount: 0 int 0 itxn_field AssetAmount - // examples/itxns/itxns.algo.ts:45 + // examples/itxns/itxns.algo.ts:46 // xferAsset: createdAsset frame_dig 1 // createdAsset: uint64 itxn_field XferAsset @@ -173,27 +170,27 @@ mintAndGetAsset: // Submit inner transaction itxn_submit - // examples/itxns/itxns.algo.ts:48 - // sendMethodCall({ - // applicationID: factoryApp, - // methodArgs: [createdAsset, this.app.address], - // }) + // examples/itxns/itxns.algo.ts:50 + // NFTFactory.call({ applicationID: factoryApp }).transferNFT(createdAsset, this.app.address) itxn_begin int appl itxn_field TypeEnum method "transferNFT(uint64,address)void" itxn_field ApplicationArgs - // examples/itxns/itxns.algo.ts:49 + // examples/itxns/itxns.algo.ts:50 // applicationID: factoryApp frame_dig 0 // factoryApp: uint64 itxn_field ApplicationID // examples/itxns/itxns.algo.ts:50 - // methodArgs: [createdAsset, this.app.address] + // createdAsset frame_dig 1 // createdAsset: uint64 itob itxn_field ApplicationArgs + + // examples/itxns/itxns.algo.ts:50 + // this.app.address global CurrentApplicationAddress itxn_field ApplicationArgs @@ -204,7 +201,7 @@ mintAndGetAsset: // Submit inner transaction itxn_submit - // examples/itxns/itxns.algo.ts:53 + // examples/itxns/itxns.algo.ts:52 // return createdAsset; frame_dig 1 // createdAsset: uint64 diff --git a/examples/itxns/artifacts/FactoryCaller.arc32.json b/examples/itxns/artifacts/FactoryCaller.arc32.json index 23492400b..dc72ff1af 100644 --- a/examples/itxns/artifacts/FactoryCaller.arc32.json +++ b/examples/itxns/artifacts/FactoryCaller.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIG1pbnRBbmRHZXRBc3NldCgpdWludDY0CiphYmlfcm91dGVfbWludEFuZEdldEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG1pbnRBbmRHZXRBc3NldCgpdWludDY0CgljYWxsc3ViIG1pbnRBbmRHZXRBc3NldAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIG1pbnRBbmRHZXRBc3NldCgpOiBBc3NldElECm1pbnRBbmRHZXRBc3NldDoKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXAKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjI1CgkvLyBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgTkZURmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlQXBwbGljYXRpb24+KHsKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBORlRGYWN0b3J5LmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBORlRGYWN0b3J5LmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czoyNgoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IE5GVEZhY3RvcnkuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjI3CgkvLyBhcHByb3ZhbFByb2dyYW06IE5GVEZhY3RvcnkuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUNBUUF4R0JTQkJnc3hHUWlOREFCdkFBQUFBQUFBQUFBQUFBQmhBQUFBQUFBQUFBQUFBQUNBQkJVZmZIVTJHZ0pYQWdBMkdnRlhBZ0NJQUFVV1VMQWlRNG9DQWJHQkE3SVFpLyt5Sm92K3NpVWlzaUlqc2dHenREeUpOaG9DU1JXQklCSkVOaG9CRjRnQUFpSkRpZ0lBc1lFRXNoQ0wvcklVSXJJU2kvK3lFU095QWJPSklrT0FCTGhFZXpZMkdnQ09BZi94QUlBRTBnSk1jNEFFeCtKZ3J6WWFBSTRDLzMzL3NRQT0KCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MzAKCS8vIGZhY3RvcnlBcHAgPSB0aGlzLml0eG4uY3JlYXRlZEFwcGxpY2F0aW9uSUQKCWl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKCWZyYW1lX2J1cnkgMCAvLyBmYWN0b3J5QXBwOiB1aW50NjQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjMyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBhbW91bnQ6IDIwMF8wMDAsCgkvLyAgICAgICByZWNlaXZlcjogZmFjdG9yeUFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czozMwoJLy8gYW1vdW50OiAyMDBfMDAwCglpbnQgMjAwXzAwMAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjM0CgkvLyByZWNlaXZlcjogZmFjdG9yeUFwcC5hZGRyZXNzCglmcmFtZV9kaWcgMCAvLyBmYWN0b3J5QXBwOiB1aW50NjQKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjM3CgkvLyBjcmVhdGVkQXNzZXQgPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgTkZURmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlTkZUPih7CgkvLyAgICAgICBhcHBsaWNhdGlvbklEOiBmYWN0b3J5QXBwLAoJLy8gICAgICAgbWV0aG9kQXJnczogWydNeSBORlQnLCAnTU5GVCddLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJjcmVhdGVORlQoc3RyaW5nLHN0cmluZyl1aW50NjQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MzgKCS8vIGFwcGxpY2F0aW9uSUQ6IGZhY3RvcnlBcHAKCWZyYW1lX2RpZyAwIC8vIGZhY3RvcnlBcHA6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czozOQoJLy8gbWV0aG9kQXJnczogWydNeSBORlQnLCAnTU5GVCddCglieXRlIDB4MDAwNjRkNzkyMDRlNDY1NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWJ5dGUgMHgwMDA0NGQ0ZTQ2NTQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglidG9pCglmcmFtZV9idXJ5IDEgLy8gY3JlYXRlZEFzc2V0OiB1aW50NjQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjQyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGNyZWF0ZWRBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0MwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDQKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDUKCS8vIHhmZXJBc3NldDogY3JlYXRlZEFzc2V0CglmcmFtZV9kaWcgMSAvLyBjcmVhdGVkQXNzZXQ6IHVpbnQ2NAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0OAoJLy8gc2VuZE1ldGhvZENhbGw8dHlwZW9mIE5GVEZhY3RvcnkucHJvdG90eXBlLnRyYW5zZmVyTkZUPih7CgkvLyAgICAgICBhcHBsaWNhdGlvbklEOiBmYWN0b3J5QXBwLAoJLy8gICAgICAgbWV0aG9kQXJnczogW2NyZWF0ZWRBc3NldCwgdGhpcy5hcHAuYWRkcmVzc10sCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgInRyYW5zZmVyTkZUKHVpbnQ2NCxhZGRyZXNzKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDkKCS8vIGFwcGxpY2F0aW9uSUQ6IGZhY3RvcnlBcHAKCWZyYW1lX2RpZyAwIC8vIGZhY3RvcnlBcHA6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo1MAoJLy8gbWV0aG9kQXJnczogW2NyZWF0ZWRBc3NldCwgdGhpcy5hcHAuYWRkcmVzc10KCWZyYW1lX2RpZyAxIC8vIGNyZWF0ZWRBc3NldDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NTMKCS8vIHJldHVybiBjcmVhdGVkQXNzZXQ7CglmcmFtZV9kaWcgMSAvLyBjcmVhdGVkQXNzZXQ6IHVpbnQ2NAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDEKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgIm1pbnRBbmRHZXRBc3NldCgpdWludDY0IgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9taW50QW5kR2V0QXNzZXQKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIG1pbnRBbmRHZXRBc3NldCgpdWludDY0CiphYmlfcm91dGVfbWludEFuZEdldEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG1pbnRBbmRHZXRBc3NldCgpdWludDY0CgljYWxsc3ViIG1pbnRBbmRHZXRBc3NldAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIG1pbnRBbmRHZXRBc3NldCgpOiBBc3NldElECm1pbnRBbmRHZXRBc3NldDoKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXAKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjI5CgkvLyBORlRGYWN0b3J5LmNyZWF0ZSgpLmNyZWF0ZUFwcGxpY2F0aW9uKCkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBORlRGYWN0b3J5IGNyZWF0aW9uIGZpZWxkcwoJYnl0ZSBiNjQgQ2lBQ0FRQXhHQlNCQmdzeEdRaU5EQUJ2QUFBQUFBQUFBQUFBQUFCaEFBQUFBQUFBQUFBQUFBQ0FCQlVmZkhVMkdnSlhBZ0EyR2dGWEFnQ0lBQVVXVUxBaVE0b0NBYkdCQTdJUWkvK3lKb3Yrc2lVaXNpSWpzZ0d6dER5Sk5ob0NTUldCSUJKRU5ob0JGNGdBQWlKRGlnSUFzWUVFc2hDTC9ySVVJcklTaS8reUVTT3lBYk9KSWtPQUJMaEVlelkyR2dDT0FmL3hBSUFFMGdKTWM0QUV4K0pncnpZYUFJNEMvMzMvc1FBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czozMQoJLy8gZmFjdG9yeUFwcCA9IHRoaXMuaXR4bi5jcmVhdGVkQXBwbGljYXRpb25JRAoJaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAoJZnJhbWVfYnVyeSAwIC8vIGZhY3RvcnlBcHA6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MzMKCS8vIHRoaXMudHhuQ29tcG9zZXIuc2VuZCgKCS8vICAgICAgIG5ldyBQYXlUeG4oewoJLy8gICAgICAgICBhbW91bnQ6IDIwMF8wMDAsCgkvLyAgICAgICAgIHJlY2VpdmVyOiBmYWN0b3J5QXBwLmFkZHJlc3MsCgkvLyAgICAgICB9KQoJLy8gICAgICkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjM1CgkvLyBhbW91bnQ6IDIwMF8wMDAKCWludCAyMDBfMDAwCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MzYKCS8vIHJlY2VpdmVyOiBmYWN0b3J5QXBwLmFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGZhY3RvcnlBcHA6IHVpbnQ2NAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJcG9wCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDAKCS8vIGNyZWF0ZWRBc3NldCA9IE5GVEZhY3RvcnkuY2FsbCh7IGFwcGxpY2F0aW9uSUQ6IGZhY3RvcnlBcHAgfSkuY3JlYXRlTkZUKCdNeSBORlQnLCAnTU5GVCcpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJjcmVhdGVORlQoc3RyaW5nLHN0cmluZyl1aW50NjQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDAKCS8vIGFwcGxpY2F0aW9uSUQ6IGZhY3RvcnlBcHAKCWZyYW1lX2RpZyAwIC8vIGZhY3RvcnlBcHA6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0MAoJLy8gJ015IE5GVCcKCWJ5dGUgMHgwMDA2NGQ3OTIwNGU0NjU0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDAKCS8vICdNTkZUJwoJYnl0ZSAweDAwMDQ0ZDRlNDY1NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWJ0b2kKCWZyYW1lX2J1cnkgMSAvLyBjcmVhdGVkQXNzZXQ6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDIKCS8vIHRoaXMudHhuQ29tcG9zZXIuc2VuZCgKCS8vICAgICAgIG5ldyBBc3NldFRyYW5zZmVyVHhuKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogY3JlYXRlZEFzc2V0LAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjQ0CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0NQoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0NgoJLy8geGZlckFzc2V0OiBjcmVhdGVkQXNzZXQKCWZyYW1lX2RpZyAxIC8vIGNyZWF0ZWRBc3NldDogdWludDY0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjUwCgkvLyBORlRGYWN0b3J5LmNhbGwoeyBhcHBsaWNhdGlvbklEOiBmYWN0b3J5QXBwIH0pLnRyYW5zZmVyTkZUKGNyZWF0ZWRBc3NldCwgdGhpcy5hcHAuYWRkcmVzcykKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgInRyYW5zZmVyTkZUKHVpbnQ2NCxhZGRyZXNzKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NTAKCS8vIGFwcGxpY2F0aW9uSUQ6IGZhY3RvcnlBcHAKCWZyYW1lX2RpZyAwIC8vIGZhY3RvcnlBcHA6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo1MAoJLy8gY3JlYXRlZEFzc2V0CglmcmFtZV9kaWcgMSAvLyBjcmVhdGVkQXNzZXQ6IHVpbnQ2NAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjUwCgkvLyB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo1MgoJLy8gcmV0dXJuIGNyZWF0ZWRBc3NldDsKCWZyYW1lX2RpZyAxIC8vIGNyZWF0ZWRBc3NldDogdWludDY0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMQoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAibWludEFuZEdldEFzc2V0KCl1aW50NjQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX21pbnRBbmRHZXRBc3NldAoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/examples/itxns/artifacts/FactoryCaller.src_map.json b/examples/itxns/artifacts/FactoryCaller.src_map.json index 6426f730f..35d95a3b5 100644 --- a/examples/itxns/artifacts/FactoryCaller.src_map.json +++ b/examples/itxns/artifacts/FactoryCaller.src_map.json @@ -1,7 +1,7 @@ [ { "teal": 1, - "source": 23, + "source": 27, "pc": [ 0, 1, @@ -20,7 +20,7 @@ }, { "teal": 13, - "source": 23, + "source": 27, "pc": [ 13, 14 @@ -28,28 +28,28 @@ }, { "teal": 14, - "source": 23, + "source": 27, "pc": [ 15 ] }, { "teal": 15, - "source": 23, + "source": 27, "pc": [ 16 ] }, { "teal": 16, - "source": 23, + "source": 27, "pc": [ 17 ] }, { "teal": 17, - "source": 23, + "source": 27, "pc": [ 18, 19 @@ -57,14 +57,14 @@ }, { "teal": 18, - "source": 23, + "source": 27, "pc": [ 20 ] }, { "teal": 19, - "source": 23, + "source": 27, "pc": [ 21, 22, @@ -96,7 +96,7 @@ }, { "teal": 23, - "source": 23, + "source": 27, "errorMessage": "The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?", "pc": [ 47 @@ -104,7 +104,7 @@ }, { "teal": 28, - "source": 24, + "source": 28, "pc": [ 48, 49, @@ -116,7 +116,7 @@ }, { "teal": 31, - "source": 24, + "source": 28, "pc": [ 54, 55, @@ -125,42 +125,42 @@ }, { "teal": 32, - "source": 24, + "source": 28, "pc": [ 57 ] }, { "teal": 33, - "source": 24, + "source": 28, "pc": [ 58 ] }, { "teal": 34, - "source": 24, + "source": 28, "pc": [ 59 ] }, { "teal": 35, - "source": 24, + "source": 28, "pc": [ 60 ] }, { "teal": 36, - "source": 24, + "source": 28, "pc": [ 61 ] }, { "teal": 40, - "source": 24, + "source": 28, "pc": [ 62, 63, @@ -169,7 +169,7 @@ }, { "teal": 43, - "source": 24, + "source": 28, "pc": [ 65, 66 @@ -177,69 +177,57 @@ }, { "teal": 44, - "source": 24, + "source": 28, "pc": [ 67 ] }, { - "teal": 51, - "source": 25, + "teal": 48, + "source": 29, "pc": [ 68 ] }, { - "teal": 52, - "source": 25, + "teal": 49, + "source": 29, "pc": [ 69 ] }, { - "teal": 53, - "source": 25, + "teal": 50, + "source": 29, "pc": [ 70, 71 ] }, { - "teal": 54, - "source": 25, + "teal": 51, + "source": 29, "pc": [ 72 ] }, { - "teal": 55, - "source": 25, + "teal": 52, + "source": 29, "pc": [ 73, 74 ] }, { - "teal": 59, - "source": 26, + "teal": 55, + "source": 29, "pc": [ 75, 76, - 77 - ] - }, - { - "teal": 60, - "source": 26, - "pc": [ + 77, 78, - 79 - ] - }, - { - "teal": 64, - "source": 27, - "pc": [ + 79, 80, 81, 82, @@ -410,85 +398,97 @@ 247, 248, 249, - 250, + 250 + ] + }, + { + "teal": 56, + "source": 29, + "pc": [ 251, - 252, + 252 + ] + }, + { + "teal": 57, + "source": 29, + "pc": [ 253, 254, 255 ] }, { - "teal": 65, - "source": 27, + "teal": 58, + "source": 29, "pc": [ 256, 257 ] }, { - "teal": 68, - "source": 25, + "teal": 61, + "source": 29, "pc": [ 258 ] }, { - "teal": 69, - "source": 25, + "teal": 62, + "source": 29, "pc": [ 259, 260 ] }, { - "teal": 72, - "source": 25, + "teal": 65, + "source": 29, "pc": [ 261 ] }, { - "teal": 76, - "source": 30, + "teal": 69, + "source": 31, "pc": [ 262, 263 ] }, { - "teal": 77, - "source": 30, + "teal": 70, + "source": 31, "pc": [ 264, 265 ] }, { - "teal": 84, - "source": 32, + "teal": 79, + "source": 33, "pc": [ 266 ] }, { - "teal": 85, - "source": 32, + "teal": 80, + "source": 33, "pc": [ 267 ] }, { - "teal": 86, - "source": 32, + "teal": 81, + "source": 33, "pc": [ 268, 269 ] }, { - "teal": 90, - "source": 33, + "teal": 85, + "source": 35, "pc": [ 270, 271, @@ -497,91 +497,91 @@ ] }, { - "teal": 91, - "source": 33, + "teal": 86, + "source": 35, "pc": [ 274, 275 ] }, { - "teal": 95, - "source": 34, + "teal": 90, + "source": 36, "pc": [ 276, 277 ] }, { - "teal": 96, - "source": 34, + "teal": 91, + "source": 36, "pc": [ 278, 279 ] }, { - "teal": 97, - "source": 34, + "teal": 92, + "source": 36, "pc": [ 280 ] }, { - "teal": 98, - "source": 34, + "teal": 93, + "source": 36, "pc": [ 281, 282 ] }, { - "teal": 101, - "source": 32, + "teal": 96, + "source": 33, "pc": [ 283 ] }, { - "teal": 102, - "source": 32, + "teal": 97, + "source": 33, "pc": [ 284, 285 ] }, { - "teal": 105, - "source": 32, + "teal": 100, + "source": 33, "pc": [ 286 ] }, { - "teal": 112, - "source": 37, + "teal": 104, + "source": 40, "pc": [ 287 ] }, { - "teal": 113, - "source": 37, + "teal": 105, + "source": 40, "pc": [ 288 ] }, { - "teal": 114, - "source": 37, + "teal": 106, + "source": 40, "pc": [ 289, 290 ] }, { - "teal": 115, - "source": 37, + "teal": 107, + "source": 40, "pc": [ 291, 292, @@ -592,32 +592,32 @@ ] }, { - "teal": 116, - "source": 37, + "teal": 108, + "source": 40, "pc": [ 297, 298 ] }, { - "teal": 120, - "source": 38, + "teal": 112, + "source": 40, "pc": [ 299, 300 ] }, { - "teal": 121, - "source": 38, + "teal": 113, + "source": 40, "pc": [ 301, 302 ] }, { - "teal": 125, - "source": 39, + "teal": 117, + "source": 40, "pc": [ 303, 304, @@ -632,16 +632,16 @@ ] }, { - "teal": 126, - "source": 39, + "teal": 118, + "source": 40, "pc": [ 313, 314 ] }, { - "teal": 127, - "source": 39, + "teal": 122, + "source": 40, "pc": [ 315, 316, @@ -654,68 +654,68 @@ ] }, { - "teal": 128, - "source": 39, + "teal": 123, + "source": 40, "pc": [ 323, 324 ] }, { - "teal": 131, - "source": 37, + "teal": 126, + "source": 40, "pc": [ 325 ] }, { - "teal": 132, - "source": 37, + "teal": 127, + "source": 40, "pc": [ 326, 327 ] }, { - "teal": 135, - "source": 37, + "teal": 130, + "source": 40, "pc": [ 328 ] }, { - "teal": 136, - "source": 37, + "teal": 131, + "source": 40, "pc": [ 329, 330 ] }, { - "teal": 137, - "source": 37, + "teal": 132, + "source": 40, "pc": [ 331 ] }, { - "teal": 138, - "source": 37, + "teal": 133, + "source": 40, "pc": [ 332 ] }, { - "teal": 139, - "source": 37, + "teal": 134, + "source": 40, "pc": [ 333, 334 ] }, { - "teal": 140, - "source": 37, + "teal": 135, + "source": 40, "pc": [ 335, 336, @@ -723,29 +723,29 @@ ] }, { - "teal": 141, - "source": 37, + "teal": 136, + "source": 40, "pc": [ 338 ] }, { - "teal": 142, - "source": 37, + "teal": 137, + "source": 40, "pc": [ 339, 340 ] }, { - "teal": 150, + "teal": 147, "source": 42, "pc": [ 341 ] }, { - "teal": 151, + "teal": 148, "source": 42, "pc": [ 342, @@ -753,7 +753,7 @@ ] }, { - "teal": 152, + "teal": 149, "source": 42, "pc": [ 344, @@ -761,61 +761,61 @@ ] }, { - "teal": 156, - "source": 43, + "teal": 153, + "source": 44, "pc": [ 346, 347 ] }, { - "teal": 157, - "source": 43, + "teal": 154, + "source": 44, "pc": [ 348, 349 ] }, { - "teal": 161, - "source": 44, + "teal": 158, + "source": 45, "pc": [ 350 ] }, { - "teal": 162, - "source": 44, + "teal": 159, + "source": 45, "pc": [ 351, 352 ] }, { - "teal": 166, - "source": 45, + "teal": 163, + "source": 46, "pc": [ 353, 354 ] }, { - "teal": 167, - "source": 45, + "teal": 164, + "source": 46, "pc": [ 355, 356 ] }, { - "teal": 170, + "teal": 167, "source": 42, "pc": [ 357 ] }, { - "teal": 171, + "teal": 168, "source": 42, "pc": [ 358, @@ -823,37 +823,37 @@ ] }, { - "teal": 174, + "teal": 171, "source": 42, "pc": [ 360 ] }, { - "teal": 181, - "source": 48, + "teal": 175, + "source": 50, "pc": [ 361 ] }, { - "teal": 182, - "source": 48, + "teal": 176, + "source": 50, "pc": [ 362 ] }, { - "teal": 183, - "source": 48, + "teal": 177, + "source": 50, "pc": [ 363, 364 ] }, { - "teal": 184, - "source": 48, + "teal": 178, + "source": 50, "pc": [ 365, 366, @@ -864,31 +864,31 @@ ] }, { - "teal": 185, - "source": 48, + "teal": 179, + "source": 50, "pc": [ 371, 372 ] }, { - "teal": 189, - "source": 49, + "teal": 183, + "source": 50, "pc": [ 373, 374 ] }, { - "teal": 190, - "source": 49, + "teal": 184, + "source": 50, "pc": [ 375, 376 ] }, { - "teal": 194, + "teal": 188, "source": 50, "pc": [ 377, @@ -896,14 +896,14 @@ ] }, { - "teal": 195, + "teal": 189, "source": 50, "pc": [ 379 ] }, { - "teal": 196, + "teal": 190, "source": 50, "pc": [ 380, @@ -911,7 +911,7 @@ ] }, { - "teal": 197, + "teal": 194, "source": 50, "pc": [ 382, @@ -919,7 +919,7 @@ ] }, { - "teal": 198, + "teal": 195, "source": 50, "pc": [ 384, @@ -927,82 +927,82 @@ ] }, { - "teal": 201, - "source": 48, + "teal": 198, + "source": 50, "pc": [ 386 ] }, { - "teal": 202, - "source": 48, + "teal": 199, + "source": 50, "pc": [ 387, 388 ] }, { - "teal": 205, - "source": 48, + "teal": 202, + "source": 50, "pc": [ 389 ] }, { - "teal": 209, - "source": 53, + "teal": 206, + "source": 52, "pc": [ 390, 391 ] }, { - "teal": 212, - "source": 24, + "teal": 209, + "source": 28, "pc": [ 392, 393 ] }, { - "teal": 215, - "source": 24, + "teal": 212, + "source": 28, "pc": [ 394, 395 ] }, { - "teal": 216, - "source": 24, + "teal": 213, + "source": 28, "pc": [ 396 ] }, { - "teal": 219, - "source": 23, + "teal": 216, + "source": 27, "pc": [ 397 ] }, { - "teal": 220, - "source": 23, + "teal": 217, + "source": 27, "pc": [ 398 ] }, { - "teal": 223, - "source": 23, + "teal": 220, + "source": 27, "pc": [ 399 ] }, { - "teal": 224, - "source": 23, + "teal": 221, + "source": 27, "pc": [ 400, 401, @@ -1010,8 +1010,8 @@ ] }, { - "teal": 225, - "source": 23, + "teal": 222, + "source": 27, "pc": [ 403, 404, @@ -1020,16 +1020,16 @@ ] }, { - "teal": 228, - "source": 23, + "teal": 225, + "source": 27, "errorMessage": "this contract does not implement the given ABI method for create NoOp", "pc": [ 407 ] }, { - "teal": 231, - "source": 23, + "teal": 228, + "source": 27, "pc": [ 408, 409, @@ -1040,8 +1040,8 @@ ] }, { - "teal": 232, - "source": 23, + "teal": 229, + "source": 27, "pc": [ 414, 415, @@ -1049,8 +1049,8 @@ ] }, { - "teal": 233, - "source": 23, + "teal": 230, + "source": 27, "pc": [ 417, 418, @@ -1059,8 +1059,8 @@ ] }, { - "teal": 236, - "source": 23, + "teal": 233, + "source": 27, "errorMessage": "this contract does not implement the given ABI method for call NoOp", "pc": [ 421 diff --git a/examples/itxns/artifacts/NFTFactory.approval.teal b/examples/itxns/artifacts/NFTFactory.approval.teal index f1c26bc41..0f636e2dd 100644 --- a/examples/itxns/artifacts/NFTFactory.approval.teal +++ b/examples/itxns/artifacts/NFTFactory.approval.teal @@ -48,26 +48,28 @@ createNFT: proto 2 1 // examples/itxns/itxns.algo.ts:6 - // return sendAssetCreation({ - // configAssetName: name, - // configAssetUnitName: unitName, - // configAssetTotal: 1, - // }); + // return this.txnComposer.send( + // new AssetCreateTxn({ + // configAssetName: name, + // configAssetUnitName: unitName, + // configAssetTotal: 1, + // }) + // ); itxn_begin int acfg itxn_field TypeEnum - // examples/itxns/itxns.algo.ts:7 + // examples/itxns/itxns.algo.ts:8 // configAssetName: name frame_dig -1 // name: string itxn_field ConfigAssetName - // examples/itxns/itxns.algo.ts:8 + // examples/itxns/itxns.algo.ts:9 // configAssetUnitName: unitName frame_dig -2 // unitName: string itxn_field ConfigAssetUnitName - // examples/itxns/itxns.algo.ts:9 + // examples/itxns/itxns.algo.ts:10 // configAssetTotal: 1 int 1 itxn_field ConfigAssetTotal @@ -106,27 +108,29 @@ createNFT: transferNFT: proto 2 0 - // examples/itxns/itxns.algo.ts:14 - // sendAssetTransfer({ - // assetReceiver: receiver, - // assetAmount: 1, - // xferAsset: asset, - // }) + // examples/itxns/itxns.algo.ts:16 + // this.txnComposer.send( + // new AssetTransferTxn({ + // assetReceiver: receiver, + // assetAmount: 1, + // xferAsset: asset, + // }) + // ) itxn_begin int axfer itxn_field TypeEnum - // examples/itxns/itxns.algo.ts:15 + // examples/itxns/itxns.algo.ts:18 // assetReceiver: receiver frame_dig -2 // receiver: Address itxn_field AssetReceiver - // examples/itxns/itxns.algo.ts:16 + // examples/itxns/itxns.algo.ts:19 // assetAmount: 1 int 1 itxn_field AssetAmount - // examples/itxns/itxns.algo.ts:17 + // examples/itxns/itxns.algo.ts:20 // xferAsset: asset frame_dig -1 // asset: AssetID itxn_field XferAsset diff --git a/examples/itxns/artifacts/NFTFactory.arc32.json b/examples/itxns/artifacts/NFTFactory.arc32.json index d58184735..431dafae6 100644 --- a/examples/itxns/artifacts/NFTFactory.arc32.json +++ b/examples/itxns/artifacts/NFTFactory.arc32.json @@ -44,7 +44,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGNyZWF0ZU5GVChzdHJpbmcsc3RyaW5nKXVpbnQ2NAoqYWJpX3JvdXRlX2NyZWF0ZU5GVDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdW5pdE5hbWU6IHN0cmluZwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZXh0cmFjdCAyIDAKCgkvLyBuYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBjcmVhdGVORlQoc3RyaW5nLHN0cmluZyl1aW50NjQKCWNhbGxzdWIgY3JlYXRlTkZUCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlTkZUKG5hbWU6IHN0cmluZywgdW5pdE5hbWU6IHN0cmluZyk6IEFzc2V0SUQKY3JlYXRlTkZUOgoJcHJvdG8gMiAxCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo2CgkvLyByZXR1cm4gc2VuZEFzc2V0Q3JlYXRpb24oewoJLy8gICAgICAgY29uZmlnQXNzZXROYW1lOiBuYW1lLAoJLy8gICAgICAgY29uZmlnQXNzZXRVbml0TmFtZTogdW5pdE5hbWUsCgkvLyAgICAgICBjb25maWdBc3NldFRvdGFsOiAxLAoJLy8gICAgIH0pOwoJaXR4bl9iZWdpbgoJaW50IGFjZmcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjcKCS8vIGNvbmZpZ0Fzc2V0TmFtZTogbmFtZQoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IHN0cmluZwoJaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjgKCS8vIGNvbmZpZ0Fzc2V0VW5pdE5hbWU6IHVuaXROYW1lCglmcmFtZV9kaWcgLTIgLy8gdW5pdE5hbWU6IHN0cmluZwoJaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo5CgkvLyBjb25maWdBc3NldFRvdGFsOiAxCglpbnQgMQoJaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBDcmVhdGVkQXNzZXRJRAoJcmV0c3ViCgovLyB0cmFuc2Zlck5GVCh1aW50NjQsYWRkcmVzcyl2b2lkCiphYmlfcm91dGVfdHJhbnNmZXJORlQ6CgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChyZWNlaXZlcikgZm9yIHRyYW5zZmVyTkZUIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSB0cmFuc2Zlck5GVCh1aW50NjQsYWRkcmVzcyl2b2lkCgljYWxsc3ViIHRyYW5zZmVyTkZUCglpbnQgMQoJcmV0dXJuCgovLyB0cmFuc2Zlck5GVChhc3NldDogQXNzZXRJRCwgcmVjZWl2ZXI6IEFkZHJlc3MpOiB2b2lkCnRyYW5zZmVyTkZUOgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czoxNAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogMSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MTUKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MTYKCS8vIGFzc2V0QW1vdW50OiAxCglpbnQgMQoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MTcKCS8vIHhmZXJBc3NldDogYXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBhc3NldDogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJjcmVhdGVORlQoc3RyaW5nLHN0cmluZyl1aW50NjQiCgltZXRob2QgInRyYW5zZmVyTkZUKHVpbnQ2NCxhZGRyZXNzKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZU5GVCAqYWJpX3JvdXRlX3RyYW5zZmVyTkZUCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGNyZWF0ZU5GVChzdHJpbmcsc3RyaW5nKXVpbnQ2NAoqYWJpX3JvdXRlX2NyZWF0ZU5GVDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdW5pdE5hbWU6IHN0cmluZwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZXh0cmFjdCAyIDAKCgkvLyBuYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBjcmVhdGVORlQoc3RyaW5nLHN0cmluZyl1aW50NjQKCWNhbGxzdWIgY3JlYXRlTkZUCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlTkZUKG5hbWU6IHN0cmluZywgdW5pdE5hbWU6IHN0cmluZyk6IEFzc2V0SUQKY3JlYXRlTkZUOgoJcHJvdG8gMiAxCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo2CgkvLyByZXR1cm4gdGhpcy50eG5Db21wb3Nlci5zZW5kKAoJLy8gICAgICAgbmV3IEFzc2V0Q3JlYXRlVHhuKHsKCS8vICAgICAgICAgY29uZmlnQXNzZXROYW1lOiBuYW1lLAoJLy8gICAgICAgICBjb25maWdBc3NldFVuaXROYW1lOiB1bml0TmFtZSwKCS8vICAgICAgICAgY29uZmlnQXNzZXRUb3RhbDogMSwKCS8vICAgICAgIH0pCgkvLyAgICAgKTsKCWl0eG5fYmVnaW4KCWludCBhY2ZnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo4CgkvLyBjb25maWdBc3NldE5hbWU6IG5hbWUKCWZyYW1lX2RpZyAtMSAvLyBuYW1lOiBzdHJpbmcKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo5CgkvLyBjb25maWdBc3NldFVuaXROYW1lOiB1bml0TmFtZQoJZnJhbWVfZGlnIC0yIC8vIHVuaXROYW1lOiBzdHJpbmcKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MTAKCS8vIGNvbmZpZ0Fzc2V0VG90YWw6IDEKCWludCAxCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIENyZWF0ZWRBc3NldElECglyZXRzdWIKCi8vIHRyYW5zZmVyTkZUKHVpbnQ2NCxhZGRyZXNzKXZvaWQKKmFiaV9yb3V0ZV90cmFuc2Zlck5GVDoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHJlY2VpdmVyKSBmb3IgdHJhbnNmZXJORlQgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIHRyYW5zZmVyTkZUKHVpbnQ2NCxhZGRyZXNzKXZvaWQKCWNhbGxzdWIgdHJhbnNmZXJORlQKCWludCAxCglyZXR1cm4KCi8vIHRyYW5zZmVyTkZUKGFzc2V0OiBBc3NldElELCByZWNlaXZlcjogQWRkcmVzcyk6IHZvaWQKdHJhbnNmZXJORlQ6Cglwcm90byAyIDAKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjE2CgkvLyB0aGlzLnR4bkNvbXBvc2VyLnNlbmQoCgkvLyAgICAgICBuZXcgQXNzZXRUcmFuc2ZlclR4bih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMSwKCS8vICAgICAgICAgeGZlckFzc2V0OiBhc3NldCwKCS8vICAgICAgIH0pCgkvLyAgICAgKQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czoxOAoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czoxOQoJLy8gYXNzZXRBbW91bnQ6IDEKCWludCAxCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czoyMAoJLy8geGZlckFzc2V0OiBhc3NldAoJZnJhbWVfZGlnIC0xIC8vIGFzc2V0OiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImNyZWF0ZU5GVChzdHJpbmcsc3RyaW5nKXVpbnQ2NCIKCW1ldGhvZCAidHJhbnNmZXJORlQodWludDY0LGFkZHJlc3Mpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlTkZUICphYmlfcm91dGVfdHJhbnNmZXJORlQKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/examples/itxns/artifacts/NFTFactory.src_map.json b/examples/itxns/artifacts/NFTFactory.src_map.json index 846de209e..084a98037 100644 --- a/examples/itxns/artifacts/NFTFactory.src_map.json +++ b/examples/itxns/artifacts/NFTFactory.src_map.json @@ -197,14 +197,14 @@ ] }, { - "teal": 56, + "teal": 58, "source": 6, "pc": [ 70 ] }, { - "teal": 57, + "teal": 59, "source": 6, "pc": [ 71, @@ -212,7 +212,7 @@ ] }, { - "teal": 58, + "teal": 60, "source": 6, "pc": [ 73, @@ -220,61 +220,61 @@ ] }, { - "teal": 62, - "source": 7, + "teal": 64, + "source": 8, "pc": [ 75, 76 ] }, { - "teal": 63, - "source": 7, + "teal": 65, + "source": 8, "pc": [ 77, 78 ] }, { - "teal": 67, - "source": 8, + "teal": 69, + "source": 9, "pc": [ 79, 80 ] }, { - "teal": 68, - "source": 8, + "teal": 70, + "source": 9, "pc": [ 81, 82 ] }, { - "teal": 72, - "source": 9, + "teal": 74, + "source": 10, "pc": [ 83 ] }, { - "teal": 73, - "source": 9, + "teal": 75, + "source": 10, "pc": [ 84, 85 ] }, { - "teal": 76, + "teal": 78, "source": 6, "pc": [ 86 ] }, { - "teal": 77, + "teal": 79, "source": 6, "pc": [ 87, @@ -282,14 +282,14 @@ ] }, { - "teal": 80, + "teal": 82, "source": 6, "pc": [ 89 ] }, { - "teal": 81, + "teal": 83, "source": 6, "pc": [ 90, @@ -297,15 +297,15 @@ ] }, { - "teal": 82, + "teal": 84, "source": 5, "pc": [ 92 ] }, { - "teal": 87, - "source": 13, + "teal": 89, + "source": 15, "pc": [ 93, 94, @@ -313,45 +313,45 @@ ] }, { - "teal": 88, - "source": 13, + "teal": 90, + "source": 15, "pc": [ 96 ] }, { - "teal": 89, - "source": 13, + "teal": 91, + "source": 15, "pc": [ 97 ] }, { - "teal": 90, - "source": 13, + "teal": 92, + "source": 15, "pc": [ 98, 99 ] }, { - "teal": 91, - "source": 13, + "teal": 93, + "source": 15, "pc": [ 100 ] }, { - "teal": 94, - "source": 13, + "teal": 96, + "source": 15, "errorMessage": "argument 0 (receiver) for transferNFT must be a address", "pc": [ 101 ] }, { - "teal": 97, - "source": 13, + "teal": 99, + "source": 15, "pc": [ 102, 103, @@ -359,15 +359,15 @@ ] }, { - "teal": 98, - "source": 13, + "teal": 100, + "source": 15, "pc": [ 105 ] }, { - "teal": 101, - "source": 13, + "teal": 103, + "source": 15, "pc": [ 106, 107, @@ -375,22 +375,22 @@ ] }, { - "teal": 102, - "source": 13, + "teal": 104, + "source": 15, "pc": [ 109 ] }, { - "teal": 103, - "source": 13, + "teal": 105, + "source": 15, "pc": [ 110 ] }, { - "teal": 107, - "source": 13, + "teal": 109, + "source": 15, "pc": [ 111, 112, @@ -398,120 +398,120 @@ ] }, { - "teal": 115, - "source": 14, + "teal": 119, + "source": 16, "pc": [ 114 ] }, { - "teal": 116, - "source": 14, + "teal": 120, + "source": 16, "pc": [ 115, 116 ] }, { - "teal": 117, - "source": 14, + "teal": 121, + "source": 16, "pc": [ 117, 118 ] }, { - "teal": 121, - "source": 15, + "teal": 125, + "source": 18, "pc": [ 119, 120 ] }, { - "teal": 122, - "source": 15, + "teal": 126, + "source": 18, "pc": [ 121, 122 ] }, { - "teal": 126, - "source": 16, + "teal": 130, + "source": 19, "pc": [ 123 ] }, { - "teal": 127, - "source": 16, + "teal": 131, + "source": 19, "pc": [ 124, 125 ] }, { - "teal": 131, - "source": 17, + "teal": 135, + "source": 20, "pc": [ 126, 127 ] }, { - "teal": 132, - "source": 17, + "teal": 136, + "source": 20, "pc": [ 128, 129 ] }, { - "teal": 135, - "source": 14, + "teal": 139, + "source": 16, "pc": [ 130 ] }, { - "teal": 136, - "source": 14, + "teal": 140, + "source": 16, "pc": [ 131, 132 ] }, { - "teal": 139, - "source": 14, + "teal": 143, + "source": 16, "pc": [ 133 ] }, { - "teal": 140, - "source": 13, + "teal": 144, + "source": 15, "pc": [ 134 ] }, { - "teal": 143, + "teal": 147, "source": 4, "pc": [ 135 ] }, { - "teal": 144, + "teal": 148, "source": 4, "pc": [ 136 ] }, { - "teal": 147, + "teal": 151, "source": 4, "pc": [ 137, @@ -523,7 +523,7 @@ ] }, { - "teal": 148, + "teal": 152, "source": 4, "pc": [ 143, @@ -532,7 +532,7 @@ ] }, { - "teal": 149, + "teal": 153, "source": 4, "pc": [ 146, @@ -542,7 +542,7 @@ ] }, { - "teal": 152, + "teal": 156, "source": 4, "errorMessage": "this contract does not implement the given ABI method for create NoOp", "pc": [ @@ -550,7 +550,7 @@ ] }, { - "teal": 155, + "teal": 159, "source": 4, "pc": [ 151, @@ -562,7 +562,7 @@ ] }, { - "teal": 156, + "teal": 160, "source": 4, "pc": [ 157, @@ -574,7 +574,7 @@ ] }, { - "teal": 157, + "teal": 161, "source": 4, "pc": [ 163, @@ -583,7 +583,7 @@ ] }, { - "teal": 158, + "teal": 162, "source": 4, "pc": [ 166, @@ -595,7 +595,7 @@ ] }, { - "teal": 161, + "teal": 165, "source": 4, "errorMessage": "this contract does not implement the given ABI method for call NoOp", "pc": [ diff --git a/examples/itxns/itxns.algo.ts b/examples/itxns/itxns.algo.ts index fb73c0198..50454f6b4 100644 --- a/examples/itxns/itxns.algo.ts +++ b/examples/itxns/itxns.algo.ts @@ -3,52 +3,51 @@ import { Contract } from '../../src/lib/index'; // eslint-disable-next-line no-unused-vars class NFTFactory extends Contract { createNFT(name: string, unitName: string): AssetID { - return sendAssetCreation({ - configAssetName: name, - configAssetUnitName: unitName, - configAssetTotal: 1, - }); + return this.txnComposer.send( + new AssetCreateTxn({ + configAssetName: name, + configAssetUnitName: unitName, + configAssetTotal: 1, + }) + ); } transferNFT(asset: AssetID, receiver: Address): void { - sendAssetTransfer({ - assetReceiver: receiver, - assetAmount: 1, - xferAsset: asset, - }); + this.txnComposer.send( + new AssetTransferTxn({ + assetReceiver: receiver, + assetAmount: 1, + xferAsset: asset, + }) + ); } } // eslint-disable-next-line no-unused-vars class FactoryCaller extends Contract { mintAndGetAsset(): AssetID { - sendMethodCall({ - clearStateProgram: NFTFactory.clearProgram(), - approvalProgram: NFTFactory.approvalProgram(), - }); + NFTFactory.create().createApplication(); const factoryApp = this.itxn.createdApplicationID; - sendPayment({ - amount: 200_000, - receiver: factoryApp.address, - }); - - const createdAsset = sendMethodCall({ - applicationID: factoryApp, - methodArgs: ['My NFT', 'MNFT'], - }); - - sendAssetTransfer({ - assetReceiver: this.app.address, - assetAmount: 0, - xferAsset: createdAsset, - }); - - sendMethodCall({ - applicationID: factoryApp, - methodArgs: [createdAsset, this.app.address], - }); + this.txnComposer.send( + new PayTxn({ + amount: 200_000, + receiver: factoryApp.address, + }) + ); + + const createdAsset = NFTFactory.call({ applicationID: factoryApp }).createNFT('My NFT', 'MNFT'); + + this.txnComposer.send( + new AssetTransferTxn({ + assetReceiver: this.app.address, + assetAmount: 0, + xferAsset: createdAsset, + }) + ); + + NFTFactory.call({ applicationID: factoryApp }).transferNFT(createdAsset, this.app.address); return createdAsset; } diff --git a/src/lib/compiler.ts b/src/lib/compiler.ts index 7af512e46..18f614984 100644 --- a/src/lib/compiler.ts +++ b/src/lib/compiler.ts @@ -1025,12 +1025,12 @@ export default class Compiler { } if (type.getText() === 'Txn') return { kind: 'base', type: 'txn' }; - if (type.getText() === 'Required') return { kind: 'base', type: 'pay' }; - if (type.getText() === 'Required') return { kind: 'base', type: 'axfer' }; + if (type.getText() === 'PayTxn') return { kind: 'base', type: 'pay' }; + if (type.getText() === 'AssetTransferTxn') return { kind: 'base', type: 'axfer' }; if (type.getText() === 'AppCallTxn') return { kind: 'base', type: 'appl' }; - if (type.getText() === 'Required') return { kind: 'base', type: 'keyreg' }; - if (type.getText() === 'Required') return { kind: 'base', type: 'acfg' }; - if (type.getText() === 'Required') return { kind: 'base', type: 'afrz' }; + if (type.getText() === 'KeyRegTxn') return { kind: 'base', type: 'keyreg' }; + if (type.getText() === 'AssetConfigTxn') return { kind: 'base', type: 'acfg' }; + if (type.getText() === 'AssetFreezeTxn') return { kind: 'base', type: 'afrz' }; const aliasedTypeNode = this.getAliasedTypeNode(type); @@ -1054,7 +1054,7 @@ export default class Compiler { } as { [key: string]: string }; if (txnTypes[typeString]) return { kind: 'base', type: txnTypes[typeString] }; - if (typeString.startsWith('methodcall')) { + if (typeString.startsWith('methodcall') && !typeString.startsWith('methodcalltxn')) { const typeArgs = type.getAliasTypeArguments(); let args: TypeInfo[] = []; const returns = StackType.void; @@ -5669,6 +5669,41 @@ export default class Compiler { * @param newValue New value to assign to the chain expression */ private processThisBase(chain: ExpressionChainNode[], newValue?: ts.Node) { + // if this is a txnComposer call + if ( + chain[0] && + chain[0].isKind(ts.SyntaxKind.PropertyAccessExpression) && + chain[0].getNameNode().getText() === 'txnComposer' + ) { + if (!chain[2].isKind(ts.SyntaxKind.CallExpression)) throw new Error('Unsupported method'); + if (!chain[1].isKind(ts.SyntaxKind.PropertyAccessExpression)) throw new Error('Unsupported method'); + + const method = chain[1].getNameNode().getText(); + + if (['send', 'beginGroup', 'addToGroup'].includes(method)) { + const arg = chain[2].getArguments()[0]; + + if (!arg.isKind(ts.SyntaxKind.NewExpression)) throw Error('Argument to send must be a new transaction'); + const txnParams = arg.getArguments()[0]; + if (!txnParams.isKind(ts.SyntaxKind.ObjectLiteralExpression)) { + throw Error('Transaction params must be an object literal'); + } + const { returnType, argTypes, name } = this.methodTypeArgsToTypes(arg.getTypeArguments()); + + this.newProcessTransaction(chain[2], txnParams, { + methodArgTypes: argTypes, + methodReturnType: returnType, + useNext: method === 'addToGroup', + send: method === 'send', + }); + } else if (method === 'sendGroup') { + this.pushVoid(chain[2], 'itxn_submit'); + } + + chain.splice(0, 3); + return; + } + // If this is a pendingGroup call (ie. `this.pendingGroup.submit()`) if ( chain[0] && @@ -5973,6 +6008,257 @@ export default class Compiler { } } + private newProcessTransaction( + node: ts.Node, + fields: ts.ObjectLiteralExpression | undefined, + optionalParams?: { + methodName?: string; + methodArgs?: ts.Node[]; + methodArgTypes?: TypeInfo[]; + methodReturnType?: TypeInfo; + useNext?: boolean; + send?: boolean; + createdContract?: string; + } + ) { + let txnArgCount = 0; + const argTypeStrings = optionalParams?.methodArgTypes?.map((t) => typeInfoToABIString(t)) || []; + + const preProcessMethodArgs = (args: ts.Node[]) => { + args.forEach((e, i: number) => { + if (TXN_TYPES.includes(argTypeStrings[i])) { + if (e.isKind(ts.SyntaxKind.NewExpression)) { + const typeArgs = e.getTypeArguments(); + const firstTypeArg = typeArgs[0]; + + let methodArgTypes: TypeInfo[] | undefined; + let methodReturnType: TypeInfo | undefined; + if (firstTypeArg?.isKind(ts.SyntaxKind.TupleType)) { + methodArgTypes = firstTypeArg.getElements().map((t) => this.getTypeInfo(t.getType())); + } + + this.newProcessTransaction(e, e.getArguments()[0] as ts.ObjectLiteralExpression, { + methodArgTypes, + methodReturnType, + useNext: optionalParams?.useNext || txnArgCount > 0, + }); + } + + txnArgCount += 1; + } + }); + }; + + fields?.getProperties().forEach((p) => { + if (!p.isKind(ts.SyntaxKind.PropertyAssignment)) throw Error(); + const key = p.getNameNode()?.getText(); + + if (key === 'methodArgs') { + const init = p.getInitializer(); + if (!init?.isKind(ts.SyntaxKind.ArrayLiteralExpression)) throw new Error('methodArgs must be an array'); + + preProcessMethodArgs(init.getElements()); + } + }); + + if (optionalParams?.methodArgs) preProcessMethodArgs(optionalParams.methodArgs); + + const fieldsParent = fields?.getParent(); + + let txnType: TransactionType | undefined; + let isAssetCreate = false; + + if (optionalParams?.methodName) txnType = TransactionType.ApplicationCallTx; + else if (fieldsParent?.isKind(ts.SyntaxKind.NewExpression)) { + const className = fieldsParent.getExpression().getText(); + + if (className === 'AssetCreateTxn') isAssetCreate = true; + + const txnClassMapping = { + PayTxn: 'pay', + AssetTransferTxn: 'axfer', + KeyRegTxn: 'keyreg', + MethodCallTxn: 'appl', + AssetConfigTxn: 'acfg', + AssetCreateTxn: 'acfg', + AppCallTxn: 'appl', + AssetFreezeTxn: 'afrz', + }; + + txnType = txnClassMapping[className as keyof typeof txnClassMapping] as TransactionType; + } + + if (txnType === undefined) throw Error('Unknown transaction type'); + + if (txnArgCount > 0) this.addSourceComment(node, true); + this.pushVoid(node, `itxn_${optionalParams?.useNext || txnArgCount > 0 ? 'next' : 'begin'}`); + + this.pushLines(node, `int ${txnType}`, 'itxn_field TypeEnum'); + + let methodName = optionalParams?.methodName; + + if (methodName === undefined && txnType === TransactionType.ApplicationCallTx) { + const nameProp = fields + ?.getProperties() + .find((p) => p.isKind(ts.SyntaxKind.PropertyAssignment) && p.getNameNode()?.getText() === 'name'); + + if (nameProp) { + if (!nameProp.isKind(ts.SyntaxKind.PropertyAssignment)) throw Error(); + const init = nameProp.getInitializer(); + if (!init?.isKind(ts.SyntaxKind.StringLiteral)) throw Error(); + + methodName = init.getLiteralText(); + } + } + + if (methodName) { + const argsString = (optionalParams?.methodArgTypes || []) + ?.map((t) => typeInfoToABIString(t)) + .join(',') + // any[] is used for default lifecycle methods, which we want to remove + .replace('any[]', ''); + + this.pushVoid( + node, + `method "${methodName}(${argsString})${typeInfoToABIString( + optionalParams?.methodReturnType || StackType.void, + true + )}"` + ); + this.pushVoid(node, 'itxn_field ApplicationArgs'); + } + + if (optionalParams?.createdContract) { + this.pushVoid(node, `// ${optionalParams.createdContract} creation fields`); + this.pushLines(node, `PENDING_COMPILE_APPROVAL: ${optionalParams.createdContract}`, 'itxn_field ApprovalProgram'); + this.pushLines(node, `PENDING_COMPILE_CLEAR: ${optionalParams.createdContract}`, 'itxn_field ClearStateProgram'); + this.pushLines(node, `PENDING_SCHEMA_GLOBAL_INT: ${optionalParams.createdContract}`, 'itxn_field GlobalNumUint'); + this.pushLines( + node, + `PENDING_SCHEMA_GLOBAL_BYTES: ${optionalParams.createdContract}`, + 'itxn_field GlobalNumByteSlice' + ); + this.pushLines(node, `PENDING_SCHEMA_LOCAL_INT: ${optionalParams.createdContract}`, 'itxn_field LocalNumUint'); + this.pushLines( + node, + `PENDING_SCHEMA_LOCAL_BYTES: ${optionalParams.createdContract}`, + 'itxn_field LocalNumByteSlice' + ); + } + + const processMethodArgs = (args: ts.Node[]) => { + let accountIndex = 1; + let appIndex = 1; + let assetIndex = 0; + + args.forEach((e, i: number) => { + this.addSourceComment(e, true); + if (argTypeStrings[i] === 'account') { + this.processNode(e); + this.pushVoid(e, 'itxn_field Accounts'); + this.pushVoid(e, `int ${accountIndex}`); + this.pushVoid(e, 'itob'); + accountIndex += 1; + } else if (argTypeStrings[i] === 'asset') { + this.processNode(e); + this.pushVoid(e, 'itxn_field Assets'); + this.pushVoid(e, `int ${assetIndex}`); + this.pushVoid(e, 'itob'); + assetIndex += 1; + // if it's an appl but NOT a method call + } else if (argTypeStrings[i] === 'appl' && !e.isKind(ts.SyntaxKind.NewExpression)) { + this.processNode(e); + this.pushVoid(e, 'itxn_field Applications'); + this.pushVoid(e, `int ${appIndex}`); + this.pushVoid(e, 'itob'); + appIndex += 1; + } else if (argTypeStrings[i] === 'uint64') { + this.processNode(e); + typeComparison(this.lastType, optionalParams!.methodArgTypes![i]); + this.pushVoid(e, 'itob'); + } else if (TXN_TYPES.includes(argTypeStrings[i])) { + return; + } else { + const prevTypeHint = this.typeHint; + this.typeHint = optionalParams!.methodArgTypes![i]; + this.processNode(e); + this.checkEncoding(e, optionalParams!.methodArgTypes![i]); + this.typeHint = prevTypeHint; + } + this.pushVoid(e, 'itxn_field ApplicationArgs'); + }); + }; + + fields?.getProperties().forEach((p) => { + if (!p.isKind(ts.SyntaxKind.PropertyAssignment)) throw Error(); + const key = p.getNameNode()?.getText(); + const init = p.getInitializer(); + + if (key === undefined) throw new Error('Key must be defined'); + + if (key === 'name' && txnType === TransactionType.ApplicationCallTx) { + return; + } + + this.addSourceComment(p, true); + this.pushComments(p); + + if ( + (key === 'approvalProgram' || key === 'clearStateProgram') && + init?.isKind(ts.SyntaxKind.ArrayLiteralExpression) + ) { + init.getElements().forEach((e) => { + this.processNode(e); + this.pushVoid(e, `itxn_field ${capitalizeFirstChar(key)}Pages`); + }); + } else if (key === 'onCompletion') { + if (!p.isKind(ts.SyntaxKind.PropertyAssignment) || !init?.isKind(ts.SyntaxKind.PropertyAccessExpression)) { + throw new Error('Must use OnCompletion enum'); + } + + const oc = init.getNameNode().getText() as OnComplete; + this.pushVoid(p.getInitializer()!, `int ${ON_COMPLETES.indexOf(oc)} // ${oc}`); + this.pushVoid(p, 'itxn_field OnCompletion'); + } else if (key === 'methodArgs') { + if (!p.isKind(ts.SyntaxKind.PropertyAssignment) || !init?.isKind(ts.SyntaxKind.ArrayLiteralExpression)) { + throw new Error('methodArgs must be an array'); + } + processMethodArgs(init.getElements()); + } else if (p.isKind(ts.SyntaxKind.PropertyAssignment) && init?.isKind(ts.SyntaxKind.ArrayLiteralExpression)) { + init.getElements().forEach((e) => { + this.processNode(e); + this.pushVoid(e, `itxn_field ${capitalizeFirstChar(key)}`); + }); + } else if (p.isKind(ts.SyntaxKind.PropertyAssignment)) { + this.processNode(p.getInitializer()!); + this.pushVoid(p, `itxn_field ${capitalizeFirstChar(key)}`); + } + }); + + if (optionalParams?.methodArgs) processMethodArgs(optionalParams.methodArgs); + + if ( + !fields + ?.getProperties() + .map((p) => p.isKind(ts.SyntaxKind.PropertyAssignment) && p.getNameNode()?.getText()) + .includes('fee') + ) { + this.pushLines(node, '// Fee field not set, defaulting to 0', 'int 0', 'itxn_field Fee'); + } + + if (optionalParams?.send) { + this.pushLines(node, '// Submit inner transaction', 'itxn_submit'); + + if (optionalParams?.methodReturnType && !equalTypes(optionalParams.methodReturnType, StackType.void)) { + this.pushLines(node, 'itxn NumLogs', 'int 1', '-', 'itxnas Logs', 'extract 4 0'); + this.checkDecoding(node, optionalParams.methodReturnType); + this.lastType = optionalParams.methodReturnType; + } else if (isAssetCreate) { + this.push(node, 'itxn CreatedAssetID', ForeignType.Asset); + } + } + } + private methodTypeArgsToTypes(typeArgs: ts.TypeNode[]) { let argTypes: TypeInfo[] = []; let name: string | undefined; @@ -6101,6 +6387,38 @@ export default class Compiler { ); chain.splice(0, 3); + break; + case 'create': + case 'call': + if (!chain[1].isKind(ts.SyntaxKind.CallExpression)) throw Error(`call must be a function call`); + if (!chain[2].isKind(ts.SyntaxKind.PropertyAccessExpression)) throw Error(`call must be a function call`); + if (!chain[3].isKind(ts.SyntaxKind.CallExpression)) throw Error(`call must be a function call`); + + // eslint-disable-next-line no-case-declarations + const methodName = chain[2].getName(); + + // eslint-disable-next-line no-case-declarations + const methodSig = chain[2].getType().getCallSignatures()[0]; + + // eslint-disable-next-line no-case-declarations + const methodArgTypes = methodSig + .getParameters() + .map((param) => this.getTypeInfo(param.getDeclarations()[0].getType())); + + // eslint-disable-next-line no-case-declarations + const methodReturnType = this.getTypeInfo(methodSig.getReturnType()); + + this.newProcessTransaction(chain[3], chain[1].getArguments()[0] as ts.ObjectLiteralExpression, { + methodArgTypes, + methodReturnType, + methodName, + methodArgs: chain[3].getArguments(), + send: true, + createdContract: propName === 'create' ? base.getText() : undefined, + }); + + chain.splice(0, 4); + break; default: throw Error(`Unknown contract property ${propName}`); @@ -6861,6 +7179,13 @@ export default class Compiler { if (this.currentProgram === 'clear') throw Error('Inner transactions not allowed in clear state program'); if (this.currentProgram === 'lsig') throw Error('Inner transaction not allowed in logic signatures'); + if (fields.isKind(ts.SyntaxKind.NewExpression)) { + // eslint-disable-next-line no-param-reassign + name = fields.getExpression().getText(); + // eslint-disable-next-line no-param-reassign + [fields] = fields.getArguments(); + } + if (!fields.isKind(ts.SyntaxKind.ObjectLiteralExpression)) throw new Error('Transaction fields must be an object literal'); @@ -6910,29 +7235,36 @@ declare type AssetFreezeTxn = Required; switch (method.replace('generic ', '')) { case 'pay': case 'Payment': + case 'PayTxn': txnType = TransactionType.PaymentTx; break; case 'axfer': case 'AssetTransfer': + case 'AssetTransferTxn': txnType = TransactionType.AssetTransferTx; break; case 'appl': case 'MethodCall': case 'AppCall': + case 'AppCallTxn': txnType = TransactionType.ApplicationCallTx; break; case 'acfg': case 'AssetCreation': case 'AssetConfig': + case 'AssetConfigTxn': + case 'AssetCreateTxn': txnType = TransactionType.AssetConfigTx; break; case 'afrz': case 'AssetFreeze': + case 'AssetFreezeTxn': txnType = TransactionType.AssetFreezeTx; break; case 'keyreg': case 'OfflineKeyRegistration': case 'OnlineKeyRegistration': + case 'KeyRegTxn': txnType = TransactionType.KeyRegistrationTx; break; default: diff --git a/src/lib/contract.ts b/src/lib/contract.ts index 6fcd0fab4..de65f4c2a 100644 --- a/src/lib/contract.ts +++ b/src/lib/contract.ts @@ -38,6 +38,63 @@ export class PendingGroup { submit(): void {} } +export class TxnComposer { + send< + ArgTypes, + ReturnType, + InnerTxn extends + | Txn + | PayTxn + | AssetConfigTxn + | AppCallTxn + | AssetTransferParams + | AssetFreezeParams + | KeyRegTxn + | MethodCallTxn + | AssetCreateTxn, + >( + txn: InnerTxn + ): InnerTxn extends AssetCreateTxn + ? AssetID + : InnerTxn extends MethodCallTxn + ? ReturnType + : void { + return {} as any; + } + + beginGroup< + ArgTypes, + ReturnType, + InnerTxn extends + | Txn + | PayTxn + | AssetConfigTxn + | AppCallTxn + | AssetTransferParams + | AssetFreezeParams + | KeyRegTxn + | MethodCallTxn + | AssetCreateTxn, + >(txn: InnerTxn): void {} + + addToGroup< + ArgTypes, + ReturnType, + InnerTxn extends + | Txn + | PayTxn + | AssetConfigTxn + | AppCallTxn + | AssetTransferParams + | AssetFreezeParams + | KeyRegTxn + | MethodCallTxn + | AssetCreateTxn, + >(txn: InnerTxn): void {} + + sendGroup(): void {} +} + type ItxnParams = AppOnChainTransactionParams & Partial & Partial & @@ -54,6 +111,20 @@ export default abstract class Contract { static clearProgram: () => bytes; + static call( + this: ContractClass, + txnParams?: Omit + ): InstanceType { + return {} as any; + } + + static create( + this: ContractClass, + txnParams?: Omit, 'applicationID'> + ): InstanceType { + return {} as any; + } + static schema: { global: { numUint: number; @@ -81,6 +152,8 @@ export default abstract class Contract { pendingGroup!: PendingGroup; + txnComposer!: TxnComposer; + /** * The method called when creating the application. The default create method will * allow the contract to be created via a bare NoOp appcall and throw an error if called diff --git a/src/lib/optimize.ts b/src/lib/optimize.ts index 28fe49b47..9bbeb8f20 100644 --- a/src/lib/optimize.ts +++ b/src/lib/optimize.ts @@ -116,6 +116,16 @@ export function optimizeOpcodes(inputTeal: TEALInfo[]): TEALInfo[] { const gitxnField = teal.split(' ')[1]; pushTeal(`gitxn ${index} ${gitxnField}`, node); optimized = true; + } else if ( + teal.startsWith('itxn_field GlobalNumUint') || + teal.startsWith('itxn_field LocalNumUint') || + teal.startsWith('itxn_field GlobalNumByteSlice') || + teal.startsWith('itxn_field LocalNumByteSlice') + ) { + if (outputTeal.at(-1)?.teal.startsWith('int 0')) { + popTeal(); + optimized = true; + } } else if (teal.startsWith('replace3')) { if (outputTeal.at(-1)?.teal.startsWith('byte 0x') && outputTeal.at(-2)?.teal.startsWith('int ')) { const bytes = outputTeal.at(-1)!; @@ -299,7 +309,12 @@ export function optimizeOpcodes(inputTeal: TEALInfo[]): TEALInfo[] { optimized = true; } - } else if (teal.startsWith('+') || teal.startsWith('-') || teal.startsWith('*') || teal.startsWith('/')) { + } else if ( + teal.startsWith('+') || + teal.startsWith('-') || + teal.startsWith('*') || + (teal.startsWith('/') && !teal.startsWith('//')) + ) { const aLine = outputTeal.at(-2)?.teal; const bLine = outputTeal.at(-1)?.teal; diff --git a/tests/contracts/abi.algo.ts b/tests/contracts/abi.algo.ts index 1e506687e..8865731a8 100644 --- a/tests/contracts/abi.algo.ts +++ b/tests/contracts/abi.algo.ts @@ -1390,11 +1390,13 @@ class ABITestStaticArrayLength extends Contract { class ABITestArrayInMethodCall extends Contract { arrayInMethodCall() { - sendMethodCall<[[uint64, uint64], Address, uint64, boolean], void>({ - applicationID: AppID.fromUint64(0), - name: 'foo', - methodArgs: [[1, 2], this.txn.sender, 3, false], - }); + this.txnComposer.send( + new MethodCallTxn<[[uint64, uint64], Address, uint64, boolean], void>({ + applicationID: AppID.fromUint64(0), + name: 'foo', + methodArgs: [[1, 2], this.txn.sender, 3, false], + }) + ); } } diff --git a/tests/contracts/artifacts/ABITestAccessStaticArrayInBoxInVariable.approval.teal b/tests/contracts/artifacts/ABITestAccessStaticArrayInBoxInVariable.approval.teal index 97d519d0b..a07854caa 100644 --- a/tests/contracts/artifacts/ABITestAccessStaticArrayInBoxInVariable.approval.teal +++ b/tests/contracts/artifacts/ABITestAccessStaticArrayInBoxInVariable.approval.teal @@ -39,23 +39,23 @@ switch *call_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEM accessStaticArrayInBoxInVariable: proto 0 1 - // tests/contracts/abi.algo.ts:1516 + // tests/contracts/abi.algo.ts:1518 // this.bKey.create() byte 0x7374616b657273 // "stakers" int 120 box_create pop - // tests/contracts/abi.algo.ts:1517 - // val = this.bKey.value[i] // tests/contracts/abi.algo.ts:1519 + // val = this.bKey.value[i] + // tests/contracts/abi.algo.ts:1521 // val.u64 = 1 byte 0x7374616b657273 // "stakers" int 0 byte 0x0000000000000001 box_replace - // tests/contracts/abi.algo.ts:1521 + // tests/contracts/abi.algo.ts:1523 // return val.u64; byte 0x7374616b657273 // "stakers" int 0 diff --git a/tests/contracts/artifacts/ABITestAccessStaticArrayInBoxInVariable.arc32.json b/tests/contracts/artifacts/ABITestAccessStaticArrayInBoxInVariable.arc32.json index 93b3c1a4b..625575d88 100644 --- a/tests/contracts/artifacts/ABITestAccessStaticArrayInBoxInVariable.arc32.json +++ b/tests/contracts/artifacts/ABITestAccessStaticArrayInBoxInVariable.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGFjY2Vzc1N0YXRpY0FycmF5SW5Cb3hJblZhcmlhYmxlKCl1aW50NjQKKmFiaV9yb3V0ZV9hY2Nlc3NTdGF0aWNBcnJheUluQm94SW5WYXJpYWJsZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBhY2Nlc3NTdGF0aWNBcnJheUluQm94SW5WYXJpYWJsZSgpdWludDY0CgljYWxsc3ViIGFjY2Vzc1N0YXRpY0FycmF5SW5Cb3hJblZhcmlhYmxlCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYWNjZXNzU3RhdGljQXJyYXlJbkJveEluVmFyaWFibGUoKTogdWludDY0CmFjY2Vzc1N0YXRpY0FycmF5SW5Cb3hJblZhcmlhYmxlOgoJcHJvdG8gMCAxCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MTYKCS8vIHRoaXMuYktleS5jcmVhdGUoKQoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJaW50IDEyMAoJYm94X2NyZWF0ZQoJcG9wCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MTcKCS8vIHZhbCA9IHRoaXMuYktleS52YWx1ZVtpXQoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MTkKCS8vIHZhbC51NjQgPSAxCglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCglpbnQgMAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEKCWJveF9yZXBsYWNlCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MjEKCS8vIHJldHVybiB2YWwudTY0OwoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJaW50IDAKCWludCA4Cglib3hfZXh0cmFjdAoJYnRvaQoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYWNjZXNzU3RhdGljQXJyYXlJbkJveEluVmFyaWFibGUoKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYWNjZXNzU3RhdGljQXJyYXlJbkJveEluVmFyaWFibGUKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGFjY2Vzc1N0YXRpY0FycmF5SW5Cb3hJblZhcmlhYmxlKCl1aW50NjQKKmFiaV9yb3V0ZV9hY2Nlc3NTdGF0aWNBcnJheUluQm94SW5WYXJpYWJsZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBhY2Nlc3NTdGF0aWNBcnJheUluQm94SW5WYXJpYWJsZSgpdWludDY0CgljYWxsc3ViIGFjY2Vzc1N0YXRpY0FycmF5SW5Cb3hJblZhcmlhYmxlCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYWNjZXNzU3RhdGljQXJyYXlJbkJveEluVmFyaWFibGUoKTogdWludDY0CmFjY2Vzc1N0YXRpY0FycmF5SW5Cb3hJblZhcmlhYmxlOgoJcHJvdG8gMCAxCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MTgKCS8vIHRoaXMuYktleS5jcmVhdGUoKQoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJaW50IDEyMAoJYm94X2NyZWF0ZQoJcG9wCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MTkKCS8vIHZhbCA9IHRoaXMuYktleS52YWx1ZVtpXQoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MjEKCS8vIHZhbC51NjQgPSAxCglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCglpbnQgMAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEKCWJveF9yZXBsYWNlCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MjMKCS8vIHJldHVybiB2YWwudTY0OwoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJaW50IDAKCWludCA4Cglib3hfZXh0cmFjdAoJYnRvaQoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYWNjZXNzU3RhdGljQXJyYXlJbkJveEluVmFyaWFibGUoKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYWNjZXNzU3RhdGljQXJyYXlJbkJveEluVmFyaWFibGUKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestArrayInMethodCall.approval.teal b/tests/contracts/artifacts/ABITestArrayInMethodCall.approval.teal index d7b3d4741..55421fdad 100644 --- a/tests/contracts/artifacts/ABITestArrayInMethodCall.approval.teal +++ b/tests/contracts/artifacts/ABITestArrayInMethodCall.approval.teal @@ -34,30 +34,43 @@ arrayInMethodCall: proto 0 0 // tests/contracts/abi.algo.ts:1393 - // sendMethodCall<[[uint64, uint64], Address, uint64, boolean], void>({ - // applicationID: AppID.fromUint64(0), - // name: 'foo', - // methodArgs: [[1, 2], this.txn.sender, 3, false], - // }) + // this.txnComposer.send( + // new MethodCallTxn<[[uint64, uint64], Address, uint64, boolean], void>({ + // applicationID: AppID.fromUint64(0), + // name: 'foo', + // methodArgs: [[1, 2], this.txn.sender, 3, false], + // }) + // ) itxn_begin int appl itxn_field TypeEnum method "foo((uint64,uint64),address,uint64,bool)void" itxn_field ApplicationArgs - // tests/contracts/abi.algo.ts:1394 + // tests/contracts/abi.algo.ts:1395 // applicationID: AppID.fromUint64(0) int 0 itxn_field ApplicationID - // tests/contracts/abi.algo.ts:1396 + // tests/contracts/abi.algo.ts:1397 // methodArgs: [[1, 2], this.txn.sender, 3, false] + // tests/contracts/abi.algo.ts:1397 + // [1, 2] byte 0x00000000000000010000000000000002 itxn_field ApplicationArgs + + // tests/contracts/abi.algo.ts:1397 + // this.txn.sender txn Sender itxn_field ApplicationArgs + + // tests/contracts/abi.algo.ts:1397 + // 3 byte 0x0000000000000003 itxn_field ApplicationArgs + + // tests/contracts/abi.algo.ts:1397 + // false int 0 byte 0x00 int 0 diff --git a/tests/contracts/artifacts/ABITestArrayInMethodCall.arc32.json b/tests/contracts/artifacts/ABITestArrayInMethodCall.arc32.json index 4151faf3d..d42f2d3b7 100644 --- a/tests/contracts/artifacts/ABITestArrayInMethodCall.arc32.json +++ b/tests/contracts/artifacts/ABITestArrayInMethodCall.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGFycmF5SW5NZXRob2RDYWxsKCl2b2lkCiphYmlfcm91dGVfYXJyYXlJbk1ldGhvZENhbGw6CgkvLyBleGVjdXRlIGFycmF5SW5NZXRob2RDYWxsKCl2b2lkCgljYWxsc3ViIGFycmF5SW5NZXRob2RDYWxsCglpbnQgMQoJcmV0dXJuCgovLyBhcnJheUluTWV0aG9kQ2FsbCgpOiB2b2lkCmFycmF5SW5NZXRob2RDYWxsOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEzOTMKCS8vIHNlbmRNZXRob2RDYWxsPFtbdWludDY0LCB1aW50NjRdLCBBZGRyZXNzLCB1aW50NjQsIGJvb2xlYW5dLCB2b2lkPih7CgkvLyAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KDApLAoJLy8gICAgICAgbmFtZTogJ2ZvbycsCgkvLyAgICAgICBtZXRob2RBcmdzOiBbWzEsIDJdLCB0aGlzLnR4bi5zZW5kZXIsIDMsIGZhbHNlXSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiZm9vKCh1aW50NjQsdWludDY0KSxhZGRyZXNzLHVpbnQ2NCxib29sKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzk0CgkvLyBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KDApCglpbnQgMAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEzOTYKCS8vIG1ldGhvZEFyZ3M6IFtbMSwgMl0sIHRoaXMudHhuLnNlbmRlciwgMywgZmFsc2VdCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDMKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglpbnQgMAoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJyYXlJbk1ldGhvZENhbGwoKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FycmF5SW5NZXRob2RDYWxsCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGFycmF5SW5NZXRob2RDYWxsKCl2b2lkCiphYmlfcm91dGVfYXJyYXlJbk1ldGhvZENhbGw6CgkvLyBleGVjdXRlIGFycmF5SW5NZXRob2RDYWxsKCl2b2lkCgljYWxsc3ViIGFycmF5SW5NZXRob2RDYWxsCglpbnQgMQoJcmV0dXJuCgovLyBhcnJheUluTWV0aG9kQ2FsbCgpOiB2b2lkCmFycmF5SW5NZXRob2RDYWxsOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEzOTMKCS8vIHRoaXMudHhuQ29tcG9zZXIuc2VuZCgKCS8vICAgICAgIG5ldyBNZXRob2RDYWxsVHhuPFtbdWludDY0LCB1aW50NjRdLCBBZGRyZXNzLCB1aW50NjQsIGJvb2xlYW5dLCB2b2lkPih7CgkvLyAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQoMCksCgkvLyAgICAgICAgIG5hbWU6ICdmb28nLAoJLy8gICAgICAgICBtZXRob2RBcmdzOiBbWzEsIDJdLCB0aGlzLnR4bi5zZW5kZXIsIDMsIGZhbHNlXSwKCS8vICAgICAgIH0pCgkvLyAgICAgKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiZm9vKCh1aW50NjQsdWludDY0KSxhZGRyZXNzLHVpbnQ2NCxib29sKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzk1CgkvLyBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KDApCglpbnQgMAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEzOTcKCS8vIG1ldGhvZEFyZ3M6IFtbMSwgMl0sIHRoaXMudHhuLnNlbmRlciwgMywgZmFsc2VdCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTM5NwoJLy8gWzEsIDJdCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEzOTcKCS8vIHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTM5NwoJLy8gMwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDMKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEzOTcKCS8vIGZhbHNlCglpbnQgMAoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJyYXlJbk1ldGhvZENhbGwoKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FycmF5SW5NZXRob2RDYWxsCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestBoolInNestedTuple.approval.teal b/tests/contracts/artifacts/ABITestBoolInNestedTuple.approval.teal index 3364879cb..7eb38665a 100644 --- a/tests/contracts/artifacts/ABITestBoolInNestedTuple.approval.teal +++ b/tests/contracts/artifacts/ABITestBoolInNestedTuple.approval.teal @@ -45,7 +45,7 @@ boolInNestedTuple: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/abi.algo.ts:1442 + // tests/contracts/abi.algo.ts:1444 // a: [[uint64, uint64, uint64], boolean, boolean] = [[0, 0, 0], true, false] byte 0x000000000000000000000000000000000000000000000000 byte 0x00 @@ -58,7 +58,7 @@ boolInNestedTuple: concat frame_bury 0 // a: [[uint64, uint64, uint64], boolean, boolean] - // tests/contracts/abi.algo.ts:1444 + // tests/contracts/abi.algo.ts:1446 // a[1] = false frame_dig 0 // a: [[uint64, uint64, uint64], boolean, boolean] store 255 // full array @@ -68,7 +68,7 @@ boolInNestedTuple: setbit frame_bury 0 // a: [[uint64, uint64, uint64], boolean, boolean] - // tests/contracts/abi.algo.ts:1445 + // tests/contracts/abi.algo.ts:1447 // a[2] = true frame_dig 0 // a: [[uint64, uint64, uint64], boolean, boolean] store 255 // full array @@ -78,7 +78,7 @@ boolInNestedTuple: setbit frame_bury 0 // a: [[uint64, uint64, uint64], boolean, boolean] - // tests/contracts/abi.algo.ts:1447 + // tests/contracts/abi.algo.ts:1449 // return a[2]; frame_dig 0 // a: [[uint64, uint64, uint64], boolean, boolean] store 255 // full array diff --git a/tests/contracts/artifacts/ABITestBoolInNestedTuple.arc32.json b/tests/contracts/artifacts/ABITestBoolInNestedTuple.arc32.json index 64f07aa11..0b1bd3f17 100644 --- a/tests/contracts/artifacts/ABITestBoolInNestedTuple.arc32.json +++ b/tests/contracts/artifacts/ABITestBoolInNestedTuple.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGJvb2xJbk5lc3RlZFR1cGxlKClib29sCiphYmlfcm91dGVfYm9vbEluTmVzdGVkVHVwbGU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYm9vbEluTmVzdGVkVHVwbGUoKWJvb2wKCWNhbGxzdWIgYm9vbEluTmVzdGVkVHVwbGUKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYm9vbEluTmVzdGVkVHVwbGUoKTogYm9vbGVhbgpib29sSW5OZXN0ZWRUdXBsZToKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NDIKCS8vIGE6IFtbdWludDY0LCB1aW50NjQsIHVpbnQ2NF0sIGJvb2xlYW4sIGJvb2xlYW5dID0gW1swLCAwLCAwXSwgdHJ1ZSwgZmFsc2VdCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglpbnQgMQoJc2V0Yml0CglpbnQgMQoJaW50IDAKCXNldGJpdAoJY29uY2F0CglmcmFtZV9idXJ5IDAgLy8gYTogW1t1aW50NjQsIHVpbnQ2NCwgdWludDY0XSwgYm9vbGVhbiwgYm9vbGVhbl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQ0NAoJLy8gYVsxXSA9IGZhbHNlCglmcmFtZV9kaWcgMCAvLyBhOiBbW3VpbnQ2NCwgdWludDY0LCB1aW50NjRdLCBib29sZWFuLCBib29sZWFuXQoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxOTIKCWludCAwCglzZXRiaXQKCWZyYW1lX2J1cnkgMCAvLyBhOiBbW3VpbnQ2NCwgdWludDY0LCB1aW50NjRdLCBib29sZWFuLCBib29sZWFuXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDQ1CgkvLyBhWzJdID0gdHJ1ZQoJZnJhbWVfZGlnIDAgLy8gYTogW1t1aW50NjQsIHVpbnQ2NCwgdWludDY0XSwgYm9vbGVhbiwgYm9vbGVhbl0KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTkzCglpbnQgMQoJc2V0Yml0CglmcmFtZV9idXJ5IDAgLy8gYTogW1t1aW50NjQsIHVpbnQ2NCwgdWludDY0XSwgYm9vbGVhbiwgYm9vbGVhbl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQ0NwoJLy8gcmV0dXJuIGFbMl07CglmcmFtZV9kaWcgMCAvLyBhOiBbW3VpbnQ2NCwgdWludDY0LCB1aW50NjRdLCBib29sZWFuLCBib29sZWFuXQoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxOTMKCWdldGJpdAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYm9vbEluTmVzdGVkVHVwbGUoKWJvb2wiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2Jvb2xJbk5lc3RlZFR1cGxlCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGJvb2xJbk5lc3RlZFR1cGxlKClib29sCiphYmlfcm91dGVfYm9vbEluTmVzdGVkVHVwbGU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYm9vbEluTmVzdGVkVHVwbGUoKWJvb2wKCWNhbGxzdWIgYm9vbEluTmVzdGVkVHVwbGUKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYm9vbEluTmVzdGVkVHVwbGUoKTogYm9vbGVhbgpib29sSW5OZXN0ZWRUdXBsZToKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NDQKCS8vIGE6IFtbdWludDY0LCB1aW50NjQsIHVpbnQ2NF0sIGJvb2xlYW4sIGJvb2xlYW5dID0gW1swLCAwLCAwXSwgdHJ1ZSwgZmFsc2VdCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglpbnQgMQoJc2V0Yml0CglpbnQgMQoJaW50IDAKCXNldGJpdAoJY29uY2F0CglmcmFtZV9idXJ5IDAgLy8gYTogW1t1aW50NjQsIHVpbnQ2NCwgdWludDY0XSwgYm9vbGVhbiwgYm9vbGVhbl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQ0NgoJLy8gYVsxXSA9IGZhbHNlCglmcmFtZV9kaWcgMCAvLyBhOiBbW3VpbnQ2NCwgdWludDY0LCB1aW50NjRdLCBib29sZWFuLCBib29sZWFuXQoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxOTIKCWludCAwCglzZXRiaXQKCWZyYW1lX2J1cnkgMCAvLyBhOiBbW3VpbnQ2NCwgdWludDY0LCB1aW50NjRdLCBib29sZWFuLCBib29sZWFuXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDQ3CgkvLyBhWzJdID0gdHJ1ZQoJZnJhbWVfZGlnIDAgLy8gYTogW1t1aW50NjQsIHVpbnQ2NCwgdWludDY0XSwgYm9vbGVhbiwgYm9vbGVhbl0KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTkzCglpbnQgMQoJc2V0Yml0CglmcmFtZV9idXJ5IDAgLy8gYTogW1t1aW50NjQsIHVpbnQ2NCwgdWludDY0XSwgYm9vbGVhbiwgYm9vbGVhbl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQ0OQoJLy8gcmV0dXJuIGFbMl07CglmcmFtZV9kaWcgMCAvLyBhOiBbW3VpbnQ2NCwgdWludDY0LCB1aW50NjRdLCBib29sZWFuLCBib29sZWFuXQoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxOTMKCWdldGJpdAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYm9vbEluTmVzdGVkVHVwbGUoKWJvb2wiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2Jvb2xJbk5lc3RlZFR1cGxlCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestForOfBreak.approval.teal b/tests/contracts/artifacts/ABITestForOfBreak.approval.teal index b8e6474f9..d4255b78a 100644 --- a/tests/contracts/artifacts/ABITestForOfBreak.approval.teal +++ b/tests/contracts/artifacts/ABITestForOfBreak.approval.teal @@ -43,12 +43,12 @@ forOfBreak: byte 0x dupn 4 - // tests/contracts/abi.algo.ts:1498 + // tests/contracts/abi.algo.ts:1500 // a: StaticArray = [1, 2, 3] byte 0x000000000000000100000000000000020000000000000003 frame_bury 0 // a: StaticArray - // tests/contracts/abi.algo.ts:1499 + // tests/contracts/abi.algo.ts:1501 // sum = 0 int 0 frame_bury 1 // sum: uint64 @@ -63,7 +63,7 @@ forOfBreak: *forOf_0: // *if0_condition - // tests/contracts/abi.algo.ts:1504 + // tests/contracts/abi.algo.ts:1506 // sum > 2 frame_dig 1 // sum: uint64 int 2 @@ -74,7 +74,7 @@ forOfBreak: b *forOf_0_end *if0_end: - // tests/contracts/abi.algo.ts:1505 + // tests/contracts/abi.algo.ts:1507 // sum += v frame_dig 1 // sum: uint64 frame_dig 3 // v: uint64 @@ -100,7 +100,7 @@ forOfBreak: b *forOf_0 *forOf_0_end: - // tests/contracts/abi.algo.ts:1507 + // tests/contracts/abi.algo.ts:1509 // return sum; frame_dig 1 // sum: uint64 diff --git a/tests/contracts/artifacts/ABITestForOfBreak.arc32.json b/tests/contracts/artifacts/ABITestForOfBreak.arc32.json index 8e5999123..2b7dafd34 100644 --- a/tests/contracts/artifacts/ABITestForOfBreak.arc32.json +++ b/tests/contracts/artifacts/ABITestForOfBreak.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGZvck9mQnJlYWsoKXVpbnQ2NAoqYWJpX3JvdXRlX2Zvck9mQnJlYWs6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgZm9yT2ZCcmVhaygpdWludDY0CgljYWxsc3ViIGZvck9mQnJlYWsKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBmb3JPZkJyZWFrKCk6IHVpbnQ2NApmb3JPZkJyZWFrOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDk4CgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzEsIDIsIDNdCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCglmcmFtZV9idXJ5IDAgLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDk5CgkvLyBzdW0gPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIHN1bTogdWludDY0CglmcmFtZV9kaWcgMCAvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+CglkdXAKCWZyYW1lX2J1cnkgMiAvLyBjb3B5IG9mIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWV4dHJhY3QgMCA4CglidG9pCglmcmFtZV9idXJ5IDMgLy8gdjogdWludDY0CglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCgoqZm9yT2ZfMDoKCS8vICppZjBfY29uZGl0aW9uCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTUwNAoJLy8gc3VtID4gMgoJZnJhbWVfZGlnIDEgLy8gc3VtOiB1aW50NjQKCWludCAyCgk+CglieiAqaWYwX2VuZAoKCS8vICppZjBfY29uc2VxdWVudAoJYiAqZm9yT2ZfMF9lbmQKCippZjBfZW5kOgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MDUKCS8vIHN1bSArPSB2CglmcmFtZV9kaWcgMSAvLyBzdW06IHVpbnQ2NAoJZnJhbWVfZGlnIDMgLy8gdjogdWludDY0CgkrCglmcmFtZV9idXJ5IDEgLy8gc3VtOiB1aW50NjQKCipmb3JPZl8wX2NvbnRpbnVlOgoJLy8gaW5jcmVtZW50IG9mZnNldCBhbmQgbG9vcCBpZiBub3Qgb3V0IG9mIGJvdW5kcwoJZnJhbWVfZGlnIDQgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludCA4CgkrCglkdXAKCWludCAyNCAvLyBvZmZzZXQgb2YgbGFzdCBlbGVtZW50Cgk8CglieiAqZm9yT2ZfMF9lbmQKCWZyYW1lX2J1cnkgNCAvLyB0aGUgb2Zmc2V0IHdlIGFyZSBleHRyYWN0aW5nIHRoZSBuZXh0IGVsZW1lbnQgZnJvbQoJZnJhbWVfZGlnIDIgLy8gY29weSBvZiB0aGUgYXJyYXkgd2UgYXJlIGl0ZXJhdGluZyBvdmVyCglmcmFtZV9kaWcgNCAvLyB0aGUgb2Zmc2V0IHdlIGFyZSBleHRyYWN0aW5nIHRoZSBuZXh0IGVsZW1lbnQgZnJvbQoJaW50IDgKCWV4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMyAvLyB2OiB1aW50NjQKCWIgKmZvck9mXzAKCipmb3JPZl8wX2VuZDoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTA3CgkvLyByZXR1cm4gc3VtOwoJZnJhbWVfZGlnIDEgLy8gc3VtOiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJmb3JPZkJyZWFrKCl1aW50NjQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2Zvck9mQnJlYWsKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGZvck9mQnJlYWsoKXVpbnQ2NAoqYWJpX3JvdXRlX2Zvck9mQnJlYWs6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgZm9yT2ZCcmVhaygpdWludDY0CgljYWxsc3ViIGZvck9mQnJlYWsKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBmb3JPZkJyZWFrKCk6IHVpbnQ2NApmb3JPZkJyZWFrOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTAwCgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzEsIDIsIDNdCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCglmcmFtZV9idXJ5IDAgLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTAxCgkvLyBzdW0gPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIHN1bTogdWludDY0CglmcmFtZV9kaWcgMCAvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+CglkdXAKCWZyYW1lX2J1cnkgMiAvLyBjb3B5IG9mIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWV4dHJhY3QgMCA4CglidG9pCglmcmFtZV9idXJ5IDMgLy8gdjogdWludDY0CglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCgoqZm9yT2ZfMDoKCS8vICppZjBfY29uZGl0aW9uCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTUwNgoJLy8gc3VtID4gMgoJZnJhbWVfZGlnIDEgLy8gc3VtOiB1aW50NjQKCWludCAyCgk+CglieiAqaWYwX2VuZAoKCS8vICppZjBfY29uc2VxdWVudAoJYiAqZm9yT2ZfMF9lbmQKCippZjBfZW5kOgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MDcKCS8vIHN1bSArPSB2CglmcmFtZV9kaWcgMSAvLyBzdW06IHVpbnQ2NAoJZnJhbWVfZGlnIDMgLy8gdjogdWludDY0CgkrCglmcmFtZV9idXJ5IDEgLy8gc3VtOiB1aW50NjQKCipmb3JPZl8wX2NvbnRpbnVlOgoJLy8gaW5jcmVtZW50IG9mZnNldCBhbmQgbG9vcCBpZiBub3Qgb3V0IG9mIGJvdW5kcwoJZnJhbWVfZGlnIDQgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludCA4CgkrCglkdXAKCWludCAyNCAvLyBvZmZzZXQgb2YgbGFzdCBlbGVtZW50Cgk8CglieiAqZm9yT2ZfMF9lbmQKCWZyYW1lX2J1cnkgNCAvLyB0aGUgb2Zmc2V0IHdlIGFyZSBleHRyYWN0aW5nIHRoZSBuZXh0IGVsZW1lbnQgZnJvbQoJZnJhbWVfZGlnIDIgLy8gY29weSBvZiB0aGUgYXJyYXkgd2UgYXJlIGl0ZXJhdGluZyBvdmVyCglmcmFtZV9kaWcgNCAvLyB0aGUgb2Zmc2V0IHdlIGFyZSBleHRyYWN0aW5nIHRoZSBuZXh0IGVsZW1lbnQgZnJvbQoJaW50IDgKCWV4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMyAvLyB2OiB1aW50NjQKCWIgKmZvck9mXzAKCipmb3JPZl8wX2VuZDoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTA5CgkvLyByZXR1cm4gc3VtOwoJZnJhbWVfZGlnIDEgLy8gc3VtOiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJmb3JPZkJyZWFrKCl1aW50NjQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2Zvck9mQnJlYWsKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestForOfContinue.approval.teal b/tests/contracts/artifacts/ABITestForOfContinue.approval.teal index 68c575722..8c72eeccf 100644 --- a/tests/contracts/artifacts/ABITestForOfContinue.approval.teal +++ b/tests/contracts/artifacts/ABITestForOfContinue.approval.teal @@ -43,12 +43,12 @@ forOfContinue: byte 0x dupn 4 - // tests/contracts/abi.algo.ts:1483 + // tests/contracts/abi.algo.ts:1485 // a: StaticArray = [1, 2, 3] byte 0x000000000000000100000000000000020000000000000003 frame_bury 0 // a: StaticArray - // tests/contracts/abi.algo.ts:1484 + // tests/contracts/abi.algo.ts:1486 // sum = 0 int 0 frame_bury 1 // sum: uint64 @@ -63,7 +63,7 @@ forOfContinue: *forOf_0: // *if0_condition - // tests/contracts/abi.algo.ts:1489 + // tests/contracts/abi.algo.ts:1491 // sum > 2 frame_dig 1 // sum: uint64 int 2 @@ -74,7 +74,7 @@ forOfContinue: b *forOf_0_continue *if0_end: - // tests/contracts/abi.algo.ts:1490 + // tests/contracts/abi.algo.ts:1492 // sum += v frame_dig 1 // sum: uint64 frame_dig 3 // v: uint64 @@ -100,7 +100,7 @@ forOfContinue: b *forOf_0 *forOf_0_end: - // tests/contracts/abi.algo.ts:1492 + // tests/contracts/abi.algo.ts:1494 // return sum; frame_dig 1 // sum: uint64 diff --git a/tests/contracts/artifacts/ABITestForOfContinue.arc32.json b/tests/contracts/artifacts/ABITestForOfContinue.arc32.json index 2e9a867bb..b12c54bda 100644 --- a/tests/contracts/artifacts/ABITestForOfContinue.arc32.json +++ b/tests/contracts/artifacts/ABITestForOfContinue.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGZvck9mQ29udGludWUoKXVpbnQ2NAoqYWJpX3JvdXRlX2Zvck9mQ29udGludWU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgZm9yT2ZDb250aW51ZSgpdWludDY0CgljYWxsc3ViIGZvck9mQ29udGludWUKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBmb3JPZkNvbnRpbnVlKCk6IHVpbnQ2NApmb3JPZkNvbnRpbnVlOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDgzCgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzEsIDIsIDNdCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCglmcmFtZV9idXJ5IDAgLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDg0CgkvLyBzdW0gPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIHN1bTogdWludDY0CglmcmFtZV9kaWcgMCAvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+CglkdXAKCWZyYW1lX2J1cnkgMiAvLyBjb3B5IG9mIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWV4dHJhY3QgMCA4CglidG9pCglmcmFtZV9idXJ5IDMgLy8gdjogdWludDY0CglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCgoqZm9yT2ZfMDoKCS8vICppZjBfY29uZGl0aW9uCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQ4OQoJLy8gc3VtID4gMgoJZnJhbWVfZGlnIDEgLy8gc3VtOiB1aW50NjQKCWludCAyCgk+CglieiAqaWYwX2VuZAoKCS8vICppZjBfY29uc2VxdWVudAoJYiAqZm9yT2ZfMF9jb250aW51ZQoKKmlmMF9lbmQ6CgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQ5MAoJLy8gc3VtICs9IHYKCWZyYW1lX2RpZyAxIC8vIHN1bTogdWludDY0CglmcmFtZV9kaWcgMyAvLyB2OiB1aW50NjQKCSsKCWZyYW1lX2J1cnkgMSAvLyBzdW06IHVpbnQ2NAoKKmZvck9mXzBfY29udGludWU6CgkvLyBpbmNyZW1lbnQgb2Zmc2V0IGFuZCBsb29wIGlmIG5vdCBvdXQgb2YgYm91bmRzCglmcmFtZV9kaWcgNCAvLyB0aGUgb2Zmc2V0IHdlIGFyZSBleHRyYWN0aW5nIHRoZSBuZXh0IGVsZW1lbnQgZnJvbQoJaW50IDgKCSsKCWR1cAoJaW50IDI0IC8vIG9mZnNldCBvZiBsYXN0IGVsZW1lbnQKCTwKCWJ6ICpmb3JPZl8wX2VuZAoJZnJhbWVfYnVyeSA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglmcmFtZV9kaWcgMiAvLyBjb3B5IG9mIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWZyYW1lX2RpZyA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnQgOAoJZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAzIC8vIHY6IHVpbnQ2NAoJYiAqZm9yT2ZfMAoKKmZvck9mXzBfZW5kOgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0OTIKCS8vIHJldHVybiBzdW07CglmcmFtZV9kaWcgMSAvLyBzdW06IHVpbnQ2NAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDQKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImZvck9mQ29udGludWUoKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfZm9yT2ZDb250aW51ZQoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGZvck9mQ29udGludWUoKXVpbnQ2NAoqYWJpX3JvdXRlX2Zvck9mQ29udGludWU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgZm9yT2ZDb250aW51ZSgpdWludDY0CgljYWxsc3ViIGZvck9mQ29udGludWUKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBmb3JPZkNvbnRpbnVlKCk6IHVpbnQ2NApmb3JPZkNvbnRpbnVlOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDg1CgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzEsIDIsIDNdCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCglmcmFtZV9idXJ5IDAgLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDg2CgkvLyBzdW0gPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIHN1bTogdWludDY0CglmcmFtZV9kaWcgMCAvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+CglkdXAKCWZyYW1lX2J1cnkgMiAvLyBjb3B5IG9mIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWV4dHJhY3QgMCA4CglidG9pCglmcmFtZV9idXJ5IDMgLy8gdjogdWludDY0CglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCgoqZm9yT2ZfMDoKCS8vICppZjBfY29uZGl0aW9uCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQ5MQoJLy8gc3VtID4gMgoJZnJhbWVfZGlnIDEgLy8gc3VtOiB1aW50NjQKCWludCAyCgk+CglieiAqaWYwX2VuZAoKCS8vICppZjBfY29uc2VxdWVudAoJYiAqZm9yT2ZfMF9jb250aW51ZQoKKmlmMF9lbmQ6CgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQ5MgoJLy8gc3VtICs9IHYKCWZyYW1lX2RpZyAxIC8vIHN1bTogdWludDY0CglmcmFtZV9kaWcgMyAvLyB2OiB1aW50NjQKCSsKCWZyYW1lX2J1cnkgMSAvLyBzdW06IHVpbnQ2NAoKKmZvck9mXzBfY29udGludWU6CgkvLyBpbmNyZW1lbnQgb2Zmc2V0IGFuZCBsb29wIGlmIG5vdCBvdXQgb2YgYm91bmRzCglmcmFtZV9kaWcgNCAvLyB0aGUgb2Zmc2V0IHdlIGFyZSBleHRyYWN0aW5nIHRoZSBuZXh0IGVsZW1lbnQgZnJvbQoJaW50IDgKCSsKCWR1cAoJaW50IDI0IC8vIG9mZnNldCBvZiBsYXN0IGVsZW1lbnQKCTwKCWJ6ICpmb3JPZl8wX2VuZAoJZnJhbWVfYnVyeSA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglmcmFtZV9kaWcgMiAvLyBjb3B5IG9mIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWZyYW1lX2RpZyA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnQgOAoJZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAzIC8vIHY6IHVpbnQ2NAoJYiAqZm9yT2ZfMAoKKmZvck9mXzBfZW5kOgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0OTQKCS8vIHJldHVybiBzdW07CglmcmFtZV9kaWcgMSAvLyBzdW06IHVpbnQ2NAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDQKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImZvck9mQ29udGludWUoKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfZm9yT2ZDb250aW51ZQoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestLargeNestedStaticForOfInBox.approval.teal b/tests/contracts/artifacts/ABITestLargeNestedStaticForOfInBox.approval.teal index 2282729ec..07307810d 100644 --- a/tests/contracts/artifacts/ABITestLargeNestedStaticForOfInBox.approval.teal +++ b/tests/contracts/artifacts/ABITestLargeNestedStaticForOfInBox.approval.teal @@ -43,7 +43,7 @@ largeNestedStaticForOfInBox: byte 0x dupn 4 - // tests/contracts/abi.algo.ts:1468 + // tests/contracts/abi.algo.ts:1470 // increaseOpcodeBudget() itxn_begin int appl @@ -58,19 +58,19 @@ largeNestedStaticForOfInBox: itxn_field OnCompletion itxn_submit - // tests/contracts/abi.algo.ts:1469 + // tests/contracts/abi.algo.ts:1471 // this.bKey.create() byte 0x624b6579 // "bKey" int 4192 box_create pop - // tests/contracts/abi.algo.ts:1470 + // tests/contracts/abi.algo.ts:1472 // sum = 0 int 0 frame_bury 0 // sum: uint64 - // tests/contracts/abi.algo.ts:1473 + // tests/contracts/abi.algo.ts:1475 // this.bKey.value[1] int 32 // headOffset int 4160 @@ -88,7 +88,7 @@ largeNestedStaticForOfInBox: frame_bury 4 // v: uint512 *forOf_0: - // tests/contracts/abi.algo.ts:1474 + // tests/contracts/abi.algo.ts:1476 // sum += 1 frame_dig 0 // sum: uint64 int 1 @@ -113,7 +113,7 @@ largeNestedStaticForOfInBox: b *forOf_0 *forOf_0_end: - // tests/contracts/abi.algo.ts:1477 + // tests/contracts/abi.algo.ts:1479 // return sum; frame_dig 0 // sum: uint64 diff --git a/tests/contracts/artifacts/ABITestLargeNestedStaticForOfInBox.arc32.json b/tests/contracts/artifacts/ABITestLargeNestedStaticForOfInBox.arc32.json index 2f87f56cb..112020c4f 100644 --- a/tests/contracts/artifacts/ABITestLargeNestedStaticForOfInBox.arc32.json +++ b/tests/contracts/artifacts/ABITestLargeNestedStaticForOfInBox.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGxhcmdlTmVzdGVkU3RhdGljRm9yT2ZJbkJveCgpdWludDY0CiphYmlfcm91dGVfbGFyZ2VOZXN0ZWRTdGF0aWNGb3JPZkluQm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGxhcmdlTmVzdGVkU3RhdGljRm9yT2ZJbkJveCgpdWludDY0CgljYWxsc3ViIGxhcmdlTmVzdGVkU3RhdGljRm9yT2ZJbkJveAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGxhcmdlTmVzdGVkU3RhdGljRm9yT2ZJbkJveCgpOiB1aW50NjQKbGFyZ2VOZXN0ZWRTdGF0aWNGb3JPZkluQm94OgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDY4CgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NjkKCS8vIHRoaXMuYktleS5jcmVhdGUoKQoJYnl0ZSAweDYyNGI2NTc5IC8vICJiS2V5IgoJaW50IDQxOTIKCWJveF9jcmVhdGUKCXBvcAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDcwCgkvLyBzdW0gPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAwIC8vIHN1bTogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NzMKCS8vIHRoaXMuYktleS52YWx1ZVsxXQoJaW50IDMyIC8vIGhlYWRPZmZzZXQKCWludCA0MTYwCglieXRlIDB4NjI0YjY1NzkgLy8gImJLZXkiCglmcmFtZV9idXJ5IDEgLy8ga2V5IGZvciB0aGUgYm94IHRoYXQgY29udGFpbnMgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJc3dhcAoJZHVwCglmcmFtZV9idXJ5IDIgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCSsKCWZyYW1lX2J1cnkgMyAvLyB0aGUgb2Zmc2V0IG9mIHRoZSBsYXN0IGVsZW1lbnQKCWJ5dGUgMHg2MjRiNjU3OSAvLyAiYktleSIgLy8ga2V5IGZvciB0aGUgYm94IHRoYXQgY29udGFpbnMgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZnJhbWVfZGlnIDIgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludCA2NAoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgNCAvLyB2OiB1aW50NTEyCgoqZm9yT2ZfMDoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDc0CgkvLyBzdW0gKz0gMQoJZnJhbWVfZGlnIDAgLy8gc3VtOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDAgLy8gc3VtOiB1aW50NjQKCipmb3JPZl8wX2NvbnRpbnVlOgoJLy8gaW5jcmVtZW50IG9mZnNldCBhbmQgbG9vcCBpZiBub3Qgb3V0IG9mIGJvdW5kcwoJZnJhbWVfZGlnIDIgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludCA2NAoJKwoJZHVwCglmcmFtZV9kaWcgMyAvLyB0aGUgb2Zmc2V0IG9mIHRoZSBsYXN0IGVsZW1lbnQKCTwKCWJ6ICpmb3JPZl8wX2VuZAoJZnJhbWVfYnVyeSAyIC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglieXRlIDB4NjI0YjY1NzkgLy8gImJLZXkiIC8vIGtleSBmb3IgdGhlIGJveCB0aGF0IGNvbnRhaW5zIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWZyYW1lX2RpZyAyIC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnQgNjQKCWJveF9leHRyYWN0CglmcmFtZV9idXJ5IDQgLy8gdjogdWludDUxMgoJYiAqZm9yT2ZfMAoKKmZvck9mXzBfZW5kOgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NzcKCS8vIHJldHVybiBzdW07CglmcmFtZV9kaWcgMCAvLyBzdW06IHVpbnQ2NAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDQKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImxhcmdlTmVzdGVkU3RhdGljRm9yT2ZJbkJveCgpdWludDY0IgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9sYXJnZU5lc3RlZFN0YXRpY0Zvck9mSW5Cb3gKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGxhcmdlTmVzdGVkU3RhdGljRm9yT2ZJbkJveCgpdWludDY0CiphYmlfcm91dGVfbGFyZ2VOZXN0ZWRTdGF0aWNGb3JPZkluQm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGxhcmdlTmVzdGVkU3RhdGljRm9yT2ZJbkJveCgpdWludDY0CgljYWxsc3ViIGxhcmdlTmVzdGVkU3RhdGljRm9yT2ZJbkJveAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGxhcmdlTmVzdGVkU3RhdGljRm9yT2ZJbkJveCgpOiB1aW50NjQKbGFyZ2VOZXN0ZWRTdGF0aWNGb3JPZkluQm94OgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDcwCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NzEKCS8vIHRoaXMuYktleS5jcmVhdGUoKQoJYnl0ZSAweDYyNGI2NTc5IC8vICJiS2V5IgoJaW50IDQxOTIKCWJveF9jcmVhdGUKCXBvcAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDcyCgkvLyBzdW0gPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAwIC8vIHN1bTogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NzUKCS8vIHRoaXMuYktleS52YWx1ZVsxXQoJaW50IDMyIC8vIGhlYWRPZmZzZXQKCWludCA0MTYwCglieXRlIDB4NjI0YjY1NzkgLy8gImJLZXkiCglmcmFtZV9idXJ5IDEgLy8ga2V5IGZvciB0aGUgYm94IHRoYXQgY29udGFpbnMgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJc3dhcAoJZHVwCglmcmFtZV9idXJ5IDIgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCSsKCWZyYW1lX2J1cnkgMyAvLyB0aGUgb2Zmc2V0IG9mIHRoZSBsYXN0IGVsZW1lbnQKCWJ5dGUgMHg2MjRiNjU3OSAvLyAiYktleSIgLy8ga2V5IGZvciB0aGUgYm94IHRoYXQgY29udGFpbnMgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZnJhbWVfZGlnIDIgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludCA2NAoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgNCAvLyB2OiB1aW50NTEyCgoqZm9yT2ZfMDoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDc2CgkvLyBzdW0gKz0gMQoJZnJhbWVfZGlnIDAgLy8gc3VtOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDAgLy8gc3VtOiB1aW50NjQKCipmb3JPZl8wX2NvbnRpbnVlOgoJLy8gaW5jcmVtZW50IG9mZnNldCBhbmQgbG9vcCBpZiBub3Qgb3V0IG9mIGJvdW5kcwoJZnJhbWVfZGlnIDIgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludCA2NAoJKwoJZHVwCglmcmFtZV9kaWcgMyAvLyB0aGUgb2Zmc2V0IG9mIHRoZSBsYXN0IGVsZW1lbnQKCTwKCWJ6ICpmb3JPZl8wX2VuZAoJZnJhbWVfYnVyeSAyIC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglieXRlIDB4NjI0YjY1NzkgLy8gImJLZXkiIC8vIGtleSBmb3IgdGhlIGJveCB0aGF0IGNvbnRhaW5zIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWZyYW1lX2RpZyAyIC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnQgNjQKCWJveF9leHRyYWN0CglmcmFtZV9idXJ5IDQgLy8gdjogdWludDUxMgoJYiAqZm9yT2ZfMAoKKmZvck9mXzBfZW5kOgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NzkKCS8vIHJldHVybiBzdW07CglmcmFtZV9kaWcgMCAvLyBzdW06IHVpbnQ2NAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDQKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImxhcmdlTmVzdGVkU3RhdGljRm9yT2ZJbkJveCgpdWludDY0IgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9sYXJnZU5lc3RlZFN0YXRpY0Zvck9mSW5Cb3gKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestNestedArrayLengthInObject.approval.teal b/tests/contracts/artifacts/ABITestNestedArrayLengthInObject.approval.teal index 8e5412a20..eff7fd052 100644 --- a/tests/contracts/artifacts/ABITestNestedArrayLengthInObject.approval.teal +++ b/tests/contracts/artifacts/ABITestNestedArrayLengthInObject.approval.teal @@ -42,12 +42,12 @@ nestedArrayLengthInObject: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/abi.algo.ts:1426 + // tests/contracts/abi.algo.ts:1428 // a: { foo: StaticArray } = { foo: [11, 22, 33, 44, 55] } byte 0x0b16212c37 frame_bury 0 // a: { foo: StaticArray } - // tests/contracts/abi.algo.ts:1428 + // tests/contracts/abi.algo.ts:1430 // return a.foo.length; frame_dig 0 // a: { foo: StaticArray } int 5 diff --git a/tests/contracts/artifacts/ABITestNestedArrayLengthInObject.arc32.json b/tests/contracts/artifacts/ABITestNestedArrayLengthInObject.arc32.json index 87e17feab..fc26817af 100644 --- a/tests/contracts/artifacts/ABITestNestedArrayLengthInObject.arc32.json +++ b/tests/contracts/artifacts/ABITestNestedArrayLengthInObject.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3QoKXVpbnQ2NAoqYWJpX3JvdXRlX25lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3Q6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgbmVzdGVkQXJyYXlMZW5ndGhJbk9iamVjdCgpdWludDY0CgljYWxsc3ViIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3QKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBuZXN0ZWRBcnJheUxlbmd0aEluT2JqZWN0KCk6IHVpbnQ2NApuZXN0ZWRBcnJheUxlbmd0aEluT2JqZWN0OgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQyNgoJLy8gYTogeyBmb286IFN0YXRpY0FycmF5PHVpbnQ4LCA1PiB9ID0geyBmb286IFsxMSwgMjIsIDMzLCA0NCwgNTVdIH0KCWJ5dGUgMHgwYjE2MjEyYzM3CglmcmFtZV9idXJ5IDAgLy8gYTogeyBmb286IFN0YXRpY0FycmF5PHVpbnQ4LCA1PiB9CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0MjgKCS8vIHJldHVybiBhLmZvby5sZW5ndGg7CglmcmFtZV9kaWcgMCAvLyBhOiB7IGZvbzogU3RhdGljQXJyYXk8dWludDgsIDU+IH0KCWludCA1CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJuZXN0ZWRBcnJheUxlbmd0aEluT2JqZWN0KCl1aW50NjQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX25lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3QKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3QoKXVpbnQ2NAoqYWJpX3JvdXRlX25lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3Q6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgbmVzdGVkQXJyYXlMZW5ndGhJbk9iamVjdCgpdWludDY0CgljYWxsc3ViIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3QKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBuZXN0ZWRBcnJheUxlbmd0aEluT2JqZWN0KCk6IHVpbnQ2NApuZXN0ZWRBcnJheUxlbmd0aEluT2JqZWN0OgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQyOAoJLy8gYTogeyBmb286IFN0YXRpY0FycmF5PHVpbnQ4LCA1PiB9ID0geyBmb286IFsxMSwgMjIsIDMzLCA0NCwgNTVdIH0KCWJ5dGUgMHgwYjE2MjEyYzM3CglmcmFtZV9idXJ5IDAgLy8gYTogeyBmb286IFN0YXRpY0FycmF5PHVpbnQ4LCA1PiB9CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0MzAKCS8vIHJldHVybiBhLmZvby5sZW5ndGg7CglmcmFtZV9kaWcgMCAvLyBhOiB7IGZvbzogU3RhdGljQXJyYXk8dWludDgsIDU+IH0KCWludCA1CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJuZXN0ZWRBcnJheUxlbmd0aEluT2JqZWN0KCl1aW50NjQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX25lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3QKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestNestedArrayLengthInObjectVariable.approval.teal b/tests/contracts/artifacts/ABITestNestedArrayLengthInObjectVariable.approval.teal index 5dcf52454..d643b5b9d 100644 --- a/tests/contracts/artifacts/ABITestNestedArrayLengthInObjectVariable.approval.teal +++ b/tests/contracts/artifacts/ABITestNestedArrayLengthInObjectVariable.approval.teal @@ -42,12 +42,12 @@ nestedArrayLengthInObjectVariable: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/abi.algo.ts:1434 + // tests/contracts/abi.algo.ts:1436 // a: { foo: StaticArray } = { foo: [11, 22, 33, 44, 55] } byte 0x0b16212c37 frame_bury 0 // a: { foo: StaticArray } - // tests/contracts/abi.algo.ts:1437 + // tests/contracts/abi.algo.ts:1439 // return b.length; int 5 diff --git a/tests/contracts/artifacts/ABITestNestedArrayLengthInObjectVariable.arc32.json b/tests/contracts/artifacts/ABITestNestedArrayLengthInObjectVariable.arc32.json index e35fa9f81..bc381ec2a 100644 --- a/tests/contracts/artifacts/ABITestNestedArrayLengthInObjectVariable.arc32.json +++ b/tests/contracts/artifacts/ABITestNestedArrayLengthInObjectVariable.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3RWYXJpYWJsZSgpdWludDY0CiphYmlfcm91dGVfbmVzdGVkQXJyYXlMZW5ndGhJbk9iamVjdFZhcmlhYmxlOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3RWYXJpYWJsZSgpdWludDY0CgljYWxsc3ViIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3RWYXJpYWJsZQoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3RWYXJpYWJsZSgpOiB1aW50NjQKbmVzdGVkQXJyYXlMZW5ndGhJbk9iamVjdFZhcmlhYmxlOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQzNAoJLy8gYTogeyBmb286IFN0YXRpY0FycmF5PHVpbnQ4LCA1PiB9ID0geyBmb286IFsxMSwgMjIsIDMzLCA0NCwgNTVdIH0KCWJ5dGUgMHgwYjE2MjEyYzM3CglmcmFtZV9idXJ5IDAgLy8gYTogeyBmb286IFN0YXRpY0FycmF5PHVpbnQ4LCA1PiB9CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0MzcKCS8vIHJldHVybiBiLmxlbmd0aDsKCWludCA1CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJuZXN0ZWRBcnJheUxlbmd0aEluT2JqZWN0VmFyaWFibGUoKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfbmVzdGVkQXJyYXlMZW5ndGhJbk9iamVjdFZhcmlhYmxlCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3RWYXJpYWJsZSgpdWludDY0CiphYmlfcm91dGVfbmVzdGVkQXJyYXlMZW5ndGhJbk9iamVjdFZhcmlhYmxlOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3RWYXJpYWJsZSgpdWludDY0CgljYWxsc3ViIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3RWYXJpYWJsZQoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIG5lc3RlZEFycmF5TGVuZ3RoSW5PYmplY3RWYXJpYWJsZSgpOiB1aW50NjQKbmVzdGVkQXJyYXlMZW5ndGhJbk9iamVjdFZhcmlhYmxlOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQzNgoJLy8gYTogeyBmb286IFN0YXRpY0FycmF5PHVpbnQ4LCA1PiB9ID0geyBmb286IFsxMSwgMjIsIDMzLCA0NCwgNTVdIH0KCWJ5dGUgMHgwYjE2MjEyYzM3CglmcmFtZV9idXJ5IDAgLy8gYTogeyBmb286IFN0YXRpY0FycmF5PHVpbnQ4LCA1PiB9CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0MzkKCS8vIHJldHVybiBiLmxlbmd0aDsKCWludCA1CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJuZXN0ZWRBcnJheUxlbmd0aEluT2JqZWN0VmFyaWFibGUoKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfbmVzdGVkQXJyYXlMZW5ndGhJbk9iamVjdFZhcmlhYmxlCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestNestedStaticArrayLength.approval.teal b/tests/contracts/artifacts/ABITestNestedStaticArrayLength.approval.teal index 542b81a31..5c97019f8 100644 --- a/tests/contracts/artifacts/ABITestNestedStaticArrayLength.approval.teal +++ b/tests/contracts/artifacts/ABITestNestedStaticArrayLength.approval.teal @@ -42,7 +42,7 @@ nestedStaticArrayLength: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/abi.algo.ts:1414 + // tests/contracts/abi.algo.ts:1416 // a: StaticArray, 3> = [ // [11, 22, 33, 44, 55], // [66, 77, 88, 99, 100], @@ -51,7 +51,7 @@ nestedStaticArrayLength: byte 0x0b16212c37424d5863646566676869 frame_bury 0 // a: StaticArray, 3> - // tests/contracts/abi.algo.ts:1420 + // tests/contracts/abi.algo.ts:1422 // return a[0].length; frame_dig 0 // a: StaticArray, 3> int 5 diff --git a/tests/contracts/artifacts/ABITestNestedStaticArrayLength.arc32.json b/tests/contracts/artifacts/ABITestNestedStaticArrayLength.arc32.json index 0a39a5893..c8d003d64 100644 --- a/tests/contracts/artifacts/ABITestNestedStaticArrayLength.arc32.json +++ b/tests/contracts/artifacts/ABITestNestedStaticArrayLength.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIG5lc3RlZFN0YXRpY0FycmF5TGVuZ3RoKCl1aW50NjQKKmFiaV9yb3V0ZV9uZXN0ZWRTdGF0aWNBcnJheUxlbmd0aDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBuZXN0ZWRTdGF0aWNBcnJheUxlbmd0aCgpdWludDY0CgljYWxsc3ViIG5lc3RlZFN0YXRpY0FycmF5TGVuZ3RoCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gbmVzdGVkU3RhdGljQXJyYXlMZW5ndGgoKTogdWludDY0Cm5lc3RlZFN0YXRpY0FycmF5TGVuZ3RoOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQxNAoJLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDgsIDU+LCAzPiA9IFsKCS8vICAgICAgIFsxMSwgMjIsIDMzLCA0NCwgNTVdLAoJLy8gICAgICAgWzY2LCA3NywgODgsIDk5LCAxMDBdLAoJLy8gICAgICAgWzEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1XSwKCS8vICAgICBdCglieXRlIDB4MGIxNjIxMmMzNzQyNGQ1ODYzNjQ2NTY2Njc2ODY5CglmcmFtZV9idXJ5IDAgLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDgsIDU+LCAzPgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDIwCgkvLyByZXR1cm4gYVswXS5sZW5ndGg7CglmcmFtZV9kaWcgMCAvLyBhOiBTdGF0aWNBcnJheTxTdGF0aWNBcnJheTx1aW50OCwgNT4sIDM+CglpbnQgNQoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAibmVzdGVkU3RhdGljQXJyYXlMZW5ndGgoKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfbmVzdGVkU3RhdGljQXJyYXlMZW5ndGgKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIG5lc3RlZFN0YXRpY0FycmF5TGVuZ3RoKCl1aW50NjQKKmFiaV9yb3V0ZV9uZXN0ZWRTdGF0aWNBcnJheUxlbmd0aDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBuZXN0ZWRTdGF0aWNBcnJheUxlbmd0aCgpdWludDY0CgljYWxsc3ViIG5lc3RlZFN0YXRpY0FycmF5TGVuZ3RoCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gbmVzdGVkU3RhdGljQXJyYXlMZW5ndGgoKTogdWludDY0Cm5lc3RlZFN0YXRpY0FycmF5TGVuZ3RoOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQxNgoJLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDgsIDU+LCAzPiA9IFsKCS8vICAgICAgIFsxMSwgMjIsIDMzLCA0NCwgNTVdLAoJLy8gICAgICAgWzY2LCA3NywgODgsIDk5LCAxMDBdLAoJLy8gICAgICAgWzEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1XSwKCS8vICAgICBdCglieXRlIDB4MGIxNjIxMmMzNzQyNGQ1ODYzNjQ2NTY2Njc2ODY5CglmcmFtZV9idXJ5IDAgLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDgsIDU+LCAzPgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDIyCgkvLyByZXR1cm4gYVswXS5sZW5ndGg7CglmcmFtZV9kaWcgMCAvLyBhOiBTdGF0aWNBcnJheTxTdGF0aWNBcnJheTx1aW50OCwgNT4sIDM+CglpbnQgNQoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAibmVzdGVkU3RhdGljQXJyYXlMZW5ndGgoKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfbmVzdGVkU3RhdGljQXJyYXlMZW5ndGgKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestObjectInArgs.approval.teal b/tests/contracts/artifacts/ABITestObjectInArgs.approval.teal index b3cbdfaae..48d703dbd 100644 --- a/tests/contracts/artifacts/ABITestObjectInArgs.approval.teal +++ b/tests/contracts/artifacts/ABITestObjectInArgs.approval.teal @@ -26,7 +26,7 @@ switch *call_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEM privateMethod: proto 2 1 - // tests/contracts/abi.algo.ts:1404 + // tests/contracts/abi.algo.ts:1406 // return obj.bar + obj.foo; frame_dig -2 // obj: ObjectInArgsType extract 8 8 @@ -54,7 +54,7 @@ privateMethod: objectInArgs: proto 0 1 - // tests/contracts/abi.algo.ts:1408 + // tests/contracts/abi.algo.ts:1410 // return this.privateMethod(this.txn.sender, { foo: 1, bar: 2 }); byte 0x00000000000000010000000000000002 txn Sender diff --git a/tests/contracts/artifacts/ABITestObjectInArgs.arc32.json b/tests/contracts/artifacts/ABITestObjectInArgs.arc32.json index a4be66056..3548ed7b6 100644 --- a/tests/contracts/artifacts/ABITestObjectInArgs.arc32.json +++ b/tests/contracts/artifacts/ABITestObjectInArgs.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHByaXZhdGVNZXRob2QoYTogQWRkcmVzcywgb2JqOiBPYmplY3RJbkFyZ3NUeXBlKTogdWludDY0CnByaXZhdGVNZXRob2Q6Cglwcm90byAyIDEKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQwNAoJLy8gcmV0dXJuIG9iai5iYXIgKyBvYmouZm9vOwoJZnJhbWVfZGlnIC0yIC8vIG9iajogT2JqZWN0SW5BcmdzVHlwZQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyAtMiAvLyBvYmo6IE9iamVjdEluQXJnc1R5cGUKCWV4dHJhY3QgMCA4CglidG9pCgkrCglyZXRzdWIKCi8vIG9iamVjdEluQXJncygpdWludDY0CiphYmlfcm91dGVfb2JqZWN0SW5BcmdzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG9iamVjdEluQXJncygpdWludDY0CgljYWxsc3ViIG9iamVjdEluQXJncwoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIG9iamVjdEluQXJncygpOiB1aW50NjQKb2JqZWN0SW5BcmdzOgoJcHJvdG8gMCAxCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0MDgKCS8vIHJldHVybiB0aGlzLnByaXZhdGVNZXRob2QodGhpcy50eG4uc2VuZGVyLCB7IGZvbzogMSwgYmFyOiAyIH0pOwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyCgl0eG4gU2VuZGVyCgljYWxsc3ViIHByaXZhdGVNZXRob2QKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgIm9iamVjdEluQXJncygpdWludDY0IgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9vYmplY3RJbkFyZ3MKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHByaXZhdGVNZXRob2QoYTogQWRkcmVzcywgb2JqOiBPYmplY3RJbkFyZ3NUeXBlKTogdWludDY0CnByaXZhdGVNZXRob2Q6Cglwcm90byAyIDEKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQwNgoJLy8gcmV0dXJuIG9iai5iYXIgKyBvYmouZm9vOwoJZnJhbWVfZGlnIC0yIC8vIG9iajogT2JqZWN0SW5BcmdzVHlwZQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyAtMiAvLyBvYmo6IE9iamVjdEluQXJnc1R5cGUKCWV4dHJhY3QgMCA4CglidG9pCgkrCglyZXRzdWIKCi8vIG9iamVjdEluQXJncygpdWludDY0CiphYmlfcm91dGVfb2JqZWN0SW5BcmdzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG9iamVjdEluQXJncygpdWludDY0CgljYWxsc3ViIG9iamVjdEluQXJncwoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIG9iamVjdEluQXJncygpOiB1aW50NjQKb2JqZWN0SW5BcmdzOgoJcHJvdG8gMCAxCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0MTAKCS8vIHJldHVybiB0aGlzLnByaXZhdGVNZXRob2QodGhpcy50eG4uc2VuZGVyLCB7IGZvbzogMSwgYmFyOiAyIH0pOwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyCgl0eG4gU2VuZGVyCgljYWxsc3ViIHByaXZhdGVNZXRob2QKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgIm9iamVjdEluQXJncygpdWludDY0IgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9vYmplY3RJbkFyZ3MKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestRefTypes.approval.teal b/tests/contracts/artifacts/ABITestRefTypes.approval.teal index 54e396d7b..34a616470 100644 --- a/tests/contracts/artifacts/ABITestRefTypes.approval.teal +++ b/tests/contracts/artifacts/ABITestRefTypes.approval.teal @@ -48,7 +48,7 @@ switch *call_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEM refTypes: proto 3 0 - // tests/contracts/abi.algo.ts:1526 + // tests/contracts/abi.algo.ts:1528 // assert(!acct.isOptedInToAsset(asa)) frame_dig -1 // acct: AccountReference frame_dig -3 // asa: AssetReference @@ -58,7 +58,7 @@ refTypes: ! assert - // tests/contracts/abi.algo.ts:1527 + // tests/contracts/abi.algo.ts:1529 // assert(!app.address.isOptedInToAsset(asa)) frame_dig -2 // app: AppReference app_params_get AppAddress diff --git a/tests/contracts/artifacts/ABITestRefTypes.arc32.json b/tests/contracts/artifacts/ABITestRefTypes.arc32.json index 7bc798dd6..b0e3cdd35 100644 --- a/tests/contracts/artifacts/ABITestRefTypes.arc32.json +++ b/tests/contracts/artifacts/ABITestRefTypes.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHJlZlR5cGVzKGFjY291bnQsYXBwbGljYXRpb24sYXNzZXQpdm9pZAoqYWJpX3JvdXRlX3JlZlR5cGVzOgoJLy8gYXNhOiBhc3NldAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoJdHhuYXMgQXNzZXRzCgoJLy8gYXBwOiBhcHBsaWNhdGlvbgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoJdHhuYXMgQXBwbGljYXRpb25zCgoJLy8gYWNjdDogYWNjb3VudAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCgkvLyBleGVjdXRlIHJlZlR5cGVzKGFjY291bnQsYXBwbGljYXRpb24sYXNzZXQpdm9pZAoJY2FsbHN1YiByZWZUeXBlcwoJaW50IDEKCXJldHVybgoKLy8gcmVmVHlwZXMoYWNjdDogQWNjb3VudFJlZmVyZW5jZSwgYXBwOiBBcHBSZWZlcmVuY2UsIGFzYTogQXNzZXRSZWZlcmVuY2UpOiB2b2lkCnJlZlR5cGVzOgoJcHJvdG8gMyAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MjYKCS8vIGFzc2VydCghYWNjdC5pc09wdGVkSW5Ub0Fzc2V0KGFzYSkpCglmcmFtZV9kaWcgLTEgLy8gYWNjdDogQWNjb3VudFJlZmVyZW5jZQoJZnJhbWVfZGlnIC0zIC8vIGFzYTogQXNzZXRSZWZlcmVuY2UKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTUyNwoJLy8gYXNzZXJ0KCFhcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzYSkpCglmcmFtZV9kaWcgLTIgLy8gYXBwOiBBcHBSZWZlcmVuY2UKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJZnJhbWVfZGlnIC0zIC8vIGFzYTogQXNzZXRSZWZlcmVuY2UKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglhc3NlcnQKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgInJlZlR5cGVzKGFjY291bnQsYXBwbGljYXRpb24sYXNzZXQpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfcmVmVHlwZXMKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHJlZlR5cGVzKGFjY291bnQsYXBwbGljYXRpb24sYXNzZXQpdm9pZAoqYWJpX3JvdXRlX3JlZlR5cGVzOgoJLy8gYXNhOiBhc3NldAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoJdHhuYXMgQXNzZXRzCgoJLy8gYXBwOiBhcHBsaWNhdGlvbgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoJdHhuYXMgQXBwbGljYXRpb25zCgoJLy8gYWNjdDogYWNjb3VudAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCgkvLyBleGVjdXRlIHJlZlR5cGVzKGFjY291bnQsYXBwbGljYXRpb24sYXNzZXQpdm9pZAoJY2FsbHN1YiByZWZUeXBlcwoJaW50IDEKCXJldHVybgoKLy8gcmVmVHlwZXMoYWNjdDogQWNjb3VudFJlZmVyZW5jZSwgYXBwOiBBcHBSZWZlcmVuY2UsIGFzYTogQXNzZXRSZWZlcmVuY2UpOiB2b2lkCnJlZlR5cGVzOgoJcHJvdG8gMyAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MjgKCS8vIGFzc2VydCghYWNjdC5pc09wdGVkSW5Ub0Fzc2V0KGFzYSkpCglmcmFtZV9kaWcgLTEgLy8gYWNjdDogQWNjb3VudFJlZmVyZW5jZQoJZnJhbWVfZGlnIC0zIC8vIGFzYTogQXNzZXRSZWZlcmVuY2UKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTUyOQoJLy8gYXNzZXJ0KCFhcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzYSkpCglmcmFtZV9kaWcgLTIgLy8gYXBwOiBBcHBSZWZlcmVuY2UKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJZnJhbWVfZGlnIC0zIC8vIGFzYTogQXNzZXRSZWZlcmVuY2UKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglhc3NlcnQKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgInJlZlR5cGVzKGFjY291bnQsYXBwbGljYXRpb24sYXNzZXQpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfcmVmVHlwZXMKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestStaticForOf.approval.teal b/tests/contracts/artifacts/ABITestStaticForOf.approval.teal index cfbad0a6f..c89f8b050 100644 --- a/tests/contracts/artifacts/ABITestStaticForOf.approval.teal +++ b/tests/contracts/artifacts/ABITestStaticForOf.approval.teal @@ -43,12 +43,12 @@ staticForOf: byte 0x dupn 4 - // tests/contracts/abi.algo.ts:1453 + // tests/contracts/abi.algo.ts:1455 // a: StaticArray = [1, 2, 3] byte 0x000000000000000100000000000000020000000000000003 frame_bury 0 // a: StaticArray - // tests/contracts/abi.algo.ts:1454 + // tests/contracts/abi.algo.ts:1456 // sum = 0 int 0 frame_bury 1 // sum: uint64 @@ -62,7 +62,7 @@ staticForOf: frame_bury 4 // the offset we are extracting the next element from *forOf_0: - // tests/contracts/abi.algo.ts:1458 + // tests/contracts/abi.algo.ts:1460 // sum += v frame_dig 1 // sum: uint64 frame_dig 3 // v: uint64 @@ -88,7 +88,7 @@ staticForOf: b *forOf_0 *forOf_0_end: - // tests/contracts/abi.algo.ts:1460 + // tests/contracts/abi.algo.ts:1462 // return sum; frame_dig 1 // sum: uint64 diff --git a/tests/contracts/artifacts/ABITestStaticForOf.arc32.json b/tests/contracts/artifacts/ABITestStaticForOf.arc32.json index de712391f..4e1a2000d 100644 --- a/tests/contracts/artifacts/ABITestStaticForOf.arc32.json +++ b/tests/contracts/artifacts/ABITestStaticForOf.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHN0YXRpY0Zvck9mKCl1aW50NjQKKmFiaV9yb3V0ZV9zdGF0aWNGb3JPZjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBzdGF0aWNGb3JPZigpdWludDY0CgljYWxsc3ViIHN0YXRpY0Zvck9mCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gc3RhdGljRm9yT2YoKTogdWludDY0CnN0YXRpY0Zvck9mOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDUzCgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzEsIDIsIDNdCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCglmcmFtZV9idXJ5IDAgLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDU0CgkvLyBzdW0gPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIHN1bTogdWludDY0CglmcmFtZV9kaWcgMCAvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+CglkdXAKCWZyYW1lX2J1cnkgMiAvLyBjb3B5IG9mIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWV4dHJhY3QgMCA4CglidG9pCglmcmFtZV9idXJ5IDMgLy8gdjogdWludDY0CglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCgoqZm9yT2ZfMDoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDU4CgkvLyBzdW0gKz0gdgoJZnJhbWVfZGlnIDEgLy8gc3VtOiB1aW50NjQKCWZyYW1lX2RpZyAzIC8vIHY6IHVpbnQ2NAoJKwoJZnJhbWVfYnVyeSAxIC8vIHN1bTogdWludDY0CgoqZm9yT2ZfMF9jb250aW51ZToKCS8vIGluY3JlbWVudCBvZmZzZXQgYW5kIGxvb3AgaWYgbm90IG91dCBvZiBib3VuZHMKCWZyYW1lX2RpZyA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnQgOAoJKwoJZHVwCglpbnQgMjQgLy8gb2Zmc2V0IG9mIGxhc3QgZWxlbWVudAoJPAoJYnogKmZvck9mXzBfZW5kCglmcmFtZV9idXJ5IDQgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWZyYW1lX2RpZyAyIC8vIGNvcHkgb2YgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZnJhbWVfZGlnIDQgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludCA4CglleHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDMgLy8gdjogdWludDY0CgliICpmb3JPZl8wCgoqZm9yT2ZfMF9lbmQ6CgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQ2MAoJLy8gcmV0dXJuIHN1bTsKCWZyYW1lX2RpZyAxIC8vIHN1bTogdWludDY0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gNAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAic3RhdGljRm9yT2YoKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfc3RhdGljRm9yT2YKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHN0YXRpY0Zvck9mKCl1aW50NjQKKmFiaV9yb3V0ZV9zdGF0aWNGb3JPZjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBzdGF0aWNGb3JPZigpdWludDY0CgljYWxsc3ViIHN0YXRpY0Zvck9mCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gc3RhdGljRm9yT2YoKTogdWludDY0CnN0YXRpY0Zvck9mOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDU1CgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzEsIDIsIDNdCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCglmcmFtZV9idXJ5IDAgLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDU2CgkvLyBzdW0gPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIHN1bTogdWludDY0CglmcmFtZV9kaWcgMCAvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+CglkdXAKCWZyYW1lX2J1cnkgMiAvLyBjb3B5IG9mIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWV4dHJhY3QgMCA4CglidG9pCglmcmFtZV9idXJ5IDMgLy8gdjogdWludDY0CglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCgoqZm9yT2ZfMDoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDYwCgkvLyBzdW0gKz0gdgoJZnJhbWVfZGlnIDEgLy8gc3VtOiB1aW50NjQKCWZyYW1lX2RpZyAzIC8vIHY6IHVpbnQ2NAoJKwoJZnJhbWVfYnVyeSAxIC8vIHN1bTogdWludDY0CgoqZm9yT2ZfMF9jb250aW51ZToKCS8vIGluY3JlbWVudCBvZmZzZXQgYW5kIGxvb3AgaWYgbm90IG91dCBvZiBib3VuZHMKCWZyYW1lX2RpZyA0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnQgOAoJKwoJZHVwCglpbnQgMjQgLy8gb2Zmc2V0IG9mIGxhc3QgZWxlbWVudAoJPAoJYnogKmZvck9mXzBfZW5kCglmcmFtZV9idXJ5IDQgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWZyYW1lX2RpZyAyIC8vIGNvcHkgb2YgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZnJhbWVfZGlnIDQgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludCA4CglleHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDMgLy8gdjogdWludDY0CgliICpmb3JPZl8wCgoqZm9yT2ZfMF9lbmQ6CgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTQ2MgoJLy8gcmV0dXJuIHN1bTsKCWZyYW1lX2RpZyAxIC8vIHN1bTogdWludDY0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gNAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAic3RhdGljRm9yT2YoKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfc3RhdGljRm9yT2YKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestStaticTypeInBox.approval.teal b/tests/contracts/artifacts/ABITestStaticTypeInBox.approval.teal index 8f01f1dfc..bbd7a9225 100644 --- a/tests/contracts/artifacts/ABITestStaticTypeInBox.approval.teal +++ b/tests/contracts/artifacts/ABITestStaticTypeInBox.approval.teal @@ -33,13 +33,13 @@ switch *call_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEM staticTypeInBox: proto 0 0 - // tests/contracts/abi.algo.ts:1535 + // tests/contracts/abi.algo.ts:1537 // this.bMap(this.txn.sender).value = this.txn.sender txn Sender txn Sender box_put - // tests/contracts/abi.algo.ts:1536 + // tests/contracts/abi.algo.ts:1538 // assert(this.bMap(this.txn.sender).value.isInLedger) txn Sender box_get diff --git a/tests/contracts/artifacts/ABITestStaticTypeInBox.arc32.json b/tests/contracts/artifacts/ABITestStaticTypeInBox.arc32.json index 01a3e732d..af030338e 100644 --- a/tests/contracts/artifacts/ABITestStaticTypeInBox.arc32.json +++ b/tests/contracts/artifacts/ABITestStaticTypeInBox.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHN0YXRpY1R5cGVJbkJveCgpdm9pZAoqYWJpX3JvdXRlX3N0YXRpY1R5cGVJbkJveDoKCS8vIGV4ZWN1dGUgc3RhdGljVHlwZUluQm94KCl2b2lkCgljYWxsc3ViIHN0YXRpY1R5cGVJbkJveAoJaW50IDEKCXJldHVybgoKLy8gc3RhdGljVHlwZUluQm94KCk6IHZvaWQKc3RhdGljVHlwZUluQm94OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MzUKCS8vIHRoaXMuYk1hcCh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCgl0eG4gU2VuZGVyCglib3hfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MzYKCS8vIGFzc2VydCh0aGlzLmJNYXAodGhpcy50eG4uc2VuZGVyKS52YWx1ZS5pc0luTGVkZ2VyKQoJdHhuIFNlbmRlcgoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5iTWFwKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCWFzc2VydAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglzd2FwCglwb3AKCWFzc2VydAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAic3RhdGljVHlwZUluQm94KCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9zdGF0aWNUeXBlSW5Cb3gKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHN0YXRpY1R5cGVJbkJveCgpdm9pZAoqYWJpX3JvdXRlX3N0YXRpY1R5cGVJbkJveDoKCS8vIGV4ZWN1dGUgc3RhdGljVHlwZUluQm94KCl2b2lkCgljYWxsc3ViIHN0YXRpY1R5cGVJbkJveAoJaW50IDEKCXJldHVybgoKLy8gc3RhdGljVHlwZUluQm94KCk6IHZvaWQKc3RhdGljVHlwZUluQm94OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MzcKCS8vIHRoaXMuYk1hcCh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCgl0eG4gU2VuZGVyCglib3hfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MzgKCS8vIGFzc2VydCh0aGlzLmJNYXAodGhpcy50eG4uc2VuZGVyKS52YWx1ZS5pc0luTGVkZ2VyKQoJdHhuIFNlbmRlcgoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5iTWFwKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCWFzc2VydAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglzd2FwCglwb3AKCWFzc2VydAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAic3RhdGljVHlwZUluQm94KCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9zdGF0aWNUeXBlSW5Cb3gKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ABITestStoragePropertyReferenceInBox.approval.teal b/tests/contracts/artifacts/ABITestStoragePropertyReferenceInBox.approval.teal index 4976d7d28..e5aba5f11 100644 --- a/tests/contracts/artifacts/ABITestStoragePropertyReferenceInBox.approval.teal +++ b/tests/contracts/artifacts/ABITestStoragePropertyReferenceInBox.approval.teal @@ -42,7 +42,7 @@ storagePropertyReferenceInBox: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/abi.algo.ts:1544 + // tests/contracts/abi.algo.ts:1546 // this.bMap('bMap').value = { foo: this.txn.sender, bar: { baz: 1337 } } byte 0x0004624d6170 txn Sender @@ -50,7 +50,7 @@ storagePropertyReferenceInBox: concat box_put - // tests/contracts/abi.algo.ts:1545 + // tests/contracts/abi.algo.ts:1547 // v = this.bMap('bMap').value.bar.baz byte 0x0004624d6170 int 32 @@ -59,7 +59,7 @@ storagePropertyReferenceInBox: btoi frame_bury 0 // v: uint64 - // tests/contracts/abi.algo.ts:1546 + // tests/contracts/abi.algo.ts:1548 // return v; frame_dig 0 // v: uint64 diff --git a/tests/contracts/artifacts/ABITestStoragePropertyReferenceInBox.arc32.json b/tests/contracts/artifacts/ABITestStoragePropertyReferenceInBox.arc32.json index f3765e927..132dae27e 100644 --- a/tests/contracts/artifacts/ABITestStoragePropertyReferenceInBox.arc32.json +++ b/tests/contracts/artifacts/ABITestStoragePropertyReferenceInBox.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHN0b3JhZ2VQcm9wZXJ0eVJlZmVyZW5jZUluQm94KCl1aW50NjQKKmFiaV9yb3V0ZV9zdG9yYWdlUHJvcGVydHlSZWZlcmVuY2VJbkJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBzdG9yYWdlUHJvcGVydHlSZWZlcmVuY2VJbkJveCgpdWludDY0CgljYWxsc3ViIHN0b3JhZ2VQcm9wZXJ0eVJlZmVyZW5jZUluQm94CglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gc3RvcmFnZVByb3BlcnR5UmVmZXJlbmNlSW5Cb3goKTogdWludDY0CnN0b3JhZ2VQcm9wZXJ0eVJlZmVyZW5jZUluQm94OgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTU0NAoJLy8gdGhpcy5iTWFwKCdiTWFwJykudmFsdWUgPSB7IGZvbzogdGhpcy50eG4uc2VuZGVyLCBiYXI6IHsgYmF6OiAxMzM3IH0gfQoJYnl0ZSAweDAwMDQ2MjRkNjE3MAoJdHhuIFNlbmRlcgoJYnl0ZSAweDAwMDAwMDAwMDAwMDA1MzkKCWNvbmNhdAoJYm94X3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTQ1CgkvLyB2ID0gdGhpcy5iTWFwKCdiTWFwJykudmFsdWUuYmFyLmJhegoJYnl0ZSAweDAwMDQ2MjRkNjE3MAoJaW50IDMyCglpbnQgOAoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMCAvLyB2OiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTU0NgoJLy8gcmV0dXJuIHY7CglmcmFtZV9kaWcgMCAvLyB2OiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgInN0b3JhZ2VQcm9wZXJ0eVJlZmVyZW5jZUluQm94KCl1aW50NjQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3N0b3JhZ2VQcm9wZXJ0eVJlZmVyZW5jZUluQm94CgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHN0b3JhZ2VQcm9wZXJ0eVJlZmVyZW5jZUluQm94KCl1aW50NjQKKmFiaV9yb3V0ZV9zdG9yYWdlUHJvcGVydHlSZWZlcmVuY2VJbkJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBzdG9yYWdlUHJvcGVydHlSZWZlcmVuY2VJbkJveCgpdWludDY0CgljYWxsc3ViIHN0b3JhZ2VQcm9wZXJ0eVJlZmVyZW5jZUluQm94CglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gc3RvcmFnZVByb3BlcnR5UmVmZXJlbmNlSW5Cb3goKTogdWludDY0CnN0b3JhZ2VQcm9wZXJ0eVJlZmVyZW5jZUluQm94OgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTU0NgoJLy8gdGhpcy5iTWFwKCdiTWFwJykudmFsdWUgPSB7IGZvbzogdGhpcy50eG4uc2VuZGVyLCBiYXI6IHsgYmF6OiAxMzM3IH0gfQoJYnl0ZSAweDAwMDQ2MjRkNjE3MAoJdHhuIFNlbmRlcgoJYnl0ZSAweDAwMDAwMDAwMDAwMDA1MzkKCWNvbmNhdAoJYm94X3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTQ3CgkvLyB2ID0gdGhpcy5iTWFwKCdiTWFwJykudmFsdWUuYmFyLmJhegoJYnl0ZSAweDAwMDQ2MjRkNjE3MAoJaW50IDMyCglpbnQgOAoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMCAvLyB2OiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTU0OAoJLy8gcmV0dXJuIHY7CglmcmFtZV9kaWcgMCAvLyB2OiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludCAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgInN0b3JhZ2VQcm9wZXJ0eVJlZmVyZW5jZUluQm94KCl1aW50NjQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3N0b3JhZ2VQcm9wZXJ0eVJlZmVyZW5jZUluQm94CgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/GeneralTest.approval.teal b/tests/contracts/artifacts/GeneralTest.approval.teal index 4d214d7c3..759619131 100644 --- a/tests/contracts/artifacts/GeneralTest.approval.teal +++ b/tests/contracts/artifacts/GeneralTest.approval.teal @@ -265,7 +265,7 @@ submitPendingGroup: proto 0 0 // tests/contracts/general.algo.ts:99 - // this.pendingGroup.addPayment({ amount: 0, receiver: this.app.address, isFirstTxn: true }) + // this.txnComposer.beginGroup(new PayTxn({ amount: 0, receiver: this.app.address })) itxn_begin int pay itxn_field TypeEnum @@ -285,7 +285,7 @@ submitPendingGroup: itxn_field Fee // tests/contracts/general.algo.ts:100 - // this.pendingGroup.addPayment({ amount: 0, receiver: this.app.address, note: 'foo' }) + // this.txnComposer.addToGroup(new PayTxn({ amount: 0, receiver: this.app.address, note: 'foo' })) itxn_next int pay itxn_field TypeEnum @@ -310,7 +310,7 @@ submitPendingGroup: itxn_field Fee // tests/contracts/general.algo.ts:101 - // this.pendingGroup.submit() + // this.txnComposer.sendGroup() itxn_submit retsub @@ -326,27 +326,29 @@ methodWithTxnArgs: proto 0 0 // tests/contracts/general.algo.ts:105 - // sendMethodCall<[PayTxn, MethodCall<[uint64], void>], void>({ - // name: 'foo', - // methodArgs: [ - // { amount: 100_000, receiver: this.txn.sender }, - // { - // name: 'bar', - // applicationID: AppID.fromUint64(1337), - // methodArgs: [1], - // }, - // ], - // }) + // this.txnComposer.send( + // new MethodCallTxn<[PayTxn, AppCallTxn], void>({ + // name: 'foo', + // methodArgs: [ + // new PayTxn({ amount: 100_000, receiver: this.txn.sender }), + // new MethodCallTxn<[uint64], void>({ + // name: 'bar', + // applicationID: AppID.fromUint64(1337), + // methodArgs: [1], + // }), + // ], + // }) + // ) itxn_begin int pay itxn_field TypeEnum - // tests/contracts/general.algo.ts:108 + // tests/contracts/general.algo.ts:109 // amount: 100_000 int 100_000 itxn_field Amount - // tests/contracts/general.algo.ts:108 + // tests/contracts/general.algo.ts:109 // receiver: this.txn.sender txn Sender itxn_field Receiver @@ -360,34 +362,59 @@ methodWithTxnArgs: method "bar(uint64)void" itxn_field ApplicationArgs - // tests/contracts/general.algo.ts:111 + // tests/contracts/general.algo.ts:112 // applicationID: AppID.fromUint64(1337) int 1337 itxn_field ApplicationID - // tests/contracts/general.algo.ts:112 + // tests/contracts/general.algo.ts:113 // methodArgs: [1] + // tests/contracts/general.algo.ts:113 + // 1 byte 0x0000000000000001 itxn_field ApplicationArgs // Fee field not set, defaulting to 0 int 0 itxn_field Fee + + // tests/contracts/general.algo.ts:105 + // this.txnComposer.send( + // new MethodCallTxn<[PayTxn, AppCallTxn], void>({ + // name: 'foo', + // methodArgs: [ + // new PayTxn({ amount: 100_000, receiver: this.txn.sender }), + // new MethodCallTxn<[uint64], void>({ + // name: 'bar', + // applicationID: AppID.fromUint64(1337), + // methodArgs: [1], + // }), + // ], + // }) + // ) itxn_next int appl itxn_field TypeEnum method "foo(pay,appl)void" itxn_field ApplicationArgs - // tests/contracts/general.algo.ts:107 + // tests/contracts/general.algo.ts:108 // methodArgs: [ - // { amount: 100_000, receiver: this.txn.sender }, - // { - // name: 'bar', - // applicationID: AppID.fromUint64(1337), - // methodArgs: [1], - // }, - // ] + // new PayTxn({ amount: 100_000, receiver: this.txn.sender }), + // new MethodCallTxn<[uint64], void>({ + // name: 'bar', + // applicationID: AppID.fromUint64(1337), + // methodArgs: [1], + // }), + // ] + // tests/contracts/general.algo.ts:109 + // new PayTxn({ amount: 100_000, receiver: this.txn.sender }) + // tests/contracts/general.algo.ts:110 + // new MethodCallTxn<[uint64], void>({ + // name: 'bar', + // applicationID: AppID.fromUint64(1337), + // methodArgs: [1], + // }) // Fee field not set, defaulting to 0 int 0 itxn_field Fee @@ -407,7 +434,7 @@ methodWithTxnArgs: shift: proto 0 0 - // tests/contracts/general.algo.ts:119 + // tests/contracts/general.algo.ts:121 // assert(1 << 2 === 4) int 1 int 2 @@ -416,7 +443,7 @@ shift: == assert - // tests/contracts/general.algo.ts:120 + // tests/contracts/general.algo.ts:122 // assert(4 >> 1 === 2) int 4 int 1 @@ -437,7 +464,7 @@ shift: fromBytes: proto 0 0 - // tests/contracts/general.algo.ts:124 + // tests/contracts/general.algo.ts:126 // assert(Address.fromBytes('abc').minBalance) byte 0x616263 // "abc" acct_params_get AcctMinBalance @@ -456,14 +483,14 @@ fromBytes: fromUint64: proto 0 0 - // tests/contracts/general.algo.ts:128 + // tests/contracts/general.algo.ts:130 // log(AppID.fromUint64(123).creator) int 123 app_params_get AppCreator pop log - // tests/contracts/general.algo.ts:129 + // tests/contracts/general.algo.ts:131 // log(AssetID.fromUint64(123).creator) int 123 asset_params_get AssetCreator @@ -486,23 +513,23 @@ bzeroFunction: byte 0x dupn 2 - // tests/contracts/general.algo.ts:134 + // tests/contracts/general.algo.ts:136 // x: bytes = bzero(2) byte 0x0000 frame_bury 0 // x: bytes - // tests/contracts/general.algo.ts:135 + // tests/contracts/general.algo.ts:137 // y: bytes = bzero(n) int 1 bzero frame_bury 1 // y: bytes - // tests/contracts/general.algo.ts:136 + // tests/contracts/general.algo.ts:138 // z: [uint64, uint<8>] = bzero<[uint64, uint<8>]>() byte 0x000000000000000000 frame_bury 2 // z: [uint64, uint<8>] - // tests/contracts/general.algo.ts:137 + // tests/contracts/general.algo.ts:139 // assert(len(x + y + z) === 12) byte 0x0000 // x: bytes frame_dig 1 // y: bytes @@ -526,7 +553,7 @@ bzeroFunction: events: proto 0 0 - // tests/contracts/general.algo.ts:152 + // tests/contracts/general.algo.ts:154 // this.myEvent.log({ app: this.app, num: 1 }) byte 0x87528196 // myEvent(uint64,uint64) txna Applications 0 @@ -565,7 +592,7 @@ events: letOptimization: proto 1 1 - // tests/contracts/general.algo.ts:156 + // tests/contracts/general.algo.ts:158 // assert(a[0]) frame_dig -1 // a: uint64[] store 255 // full array @@ -574,12 +601,12 @@ letOptimization: btoi assert - // tests/contracts/general.algo.ts:158 + // tests/contracts/general.algo.ts:160 // b = [1, 2, 3] byte 0x000000000000000100000000000000020000000000000003 frame_bury -1 // b: uint64[] - // tests/contracts/general.algo.ts:160 + // tests/contracts/general.algo.ts:162 // return b; frame_dig -1 // a: uint64[] retsub @@ -595,55 +622,45 @@ letOptimization: staticContractProperties: proto 0 0 - // tests/contracts/general.algo.ts:164 - // sendAppCall({ - // onCompletion: OnCompletion.NoOp, - // approvalProgram: DummyContract.approvalProgram(), - // clearStateProgram: DummyContract.clearProgram(), - // localNumByteSlice: DummyContract.schema.local.numByteSlice, - // localNumUint: DummyContract.schema.local.numUint, - // globalNumByteSlice: DummyContract.schema.global.numByteSlice, - // globalNumUint: DummyContract.schema.global.numUint, - // }) + // tests/contracts/general.algo.ts:166 + // this.txnComposer.send( + // new AppCallTxn({ + // onCompletion: OnCompletion.NoOp, + // approvalProgram: DummyContract.approvalProgram(), + // clearStateProgram: DummyContract.clearProgram(), + // localNumByteSlice: DummyContract.schema.local.numByteSlice, + // localNumUint: DummyContract.schema.local.numUint, + // globalNumByteSlice: DummyContract.schema.global.numByteSlice, + // globalNumUint: DummyContract.schema.global.numUint, + // }) + // ) itxn_begin int appl itxn_field TypeEnum - // tests/contracts/general.algo.ts:165 + // tests/contracts/general.algo.ts:168 // onCompletion: OnCompletion.NoOp int 0 // NoOp itxn_field OnCompletion - // tests/contracts/general.algo.ts:166 + // tests/contracts/general.algo.ts:169 // approvalProgram: DummyContract.approvalProgram() byte b64 CjEYFIEGCzEZCI0MAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAIEBQ4AEuER7NjYaAI4B//AA itxn_field ApprovalProgram - // tests/contracts/general.algo.ts:167 + // tests/contracts/general.algo.ts:170 // clearStateProgram: DummyContract.clearProgram() byte b64 Cg== itxn_field ClearStateProgram - // tests/contracts/general.algo.ts:168 + // tests/contracts/general.algo.ts:171 // localNumByteSlice: DummyContract.schema.local.numByteSlice - int 0 - itxn_field LocalNumByteSlice - - // tests/contracts/general.algo.ts:169 + // tests/contracts/general.algo.ts:172 // localNumUint: DummyContract.schema.local.numUint - int 0 - itxn_field LocalNumUint - - // tests/contracts/general.algo.ts:170 + // tests/contracts/general.algo.ts:173 // globalNumByteSlice: DummyContract.schema.global.numByteSlice - int 0 - itxn_field GlobalNumByteSlice - - // tests/contracts/general.algo.ts:171 + // tests/contracts/general.algo.ts:174 // globalNumUint: DummyContract.schema.global.numUint - int 0 - itxn_field GlobalNumUint - // Fee field not set, defaulting to 0 int 0 itxn_field Fee @@ -663,7 +680,7 @@ staticContractProperties: numberToString: proto 0 0 - // tests/contracts/general.algo.ts:178 + // tests/contracts/general.algo.ts:182 // assert(n.toString() === s) int 1 callsub *itoa @@ -683,7 +700,7 @@ numberToString: methodOnParens: proto 0 0 - // tests/contracts/general.algo.ts:182 + // tests/contracts/general.algo.ts:186 // assert((1 + 2).toString() === '3') int 3 callsub *itoa @@ -703,7 +720,7 @@ methodOnParens: stringSubstring: proto 0 0 - // tests/contracts/general.algo.ts:187 + // tests/contracts/general.algo.ts:191 // assert(s.substring(1, 3) === 'bc') byte "abcdef" substring 1 3 @@ -727,24 +744,24 @@ idProperty: byte 0x dup - // tests/contracts/general.algo.ts:191 + // tests/contracts/general.algo.ts:195 // app = AppID.zeroIndex int 0 frame_bury 0 // app: uint64 - // tests/contracts/general.algo.ts:192 + // tests/contracts/general.algo.ts:196 // assert(AppID.fromUint64(app.id) === app) int 0 // app: uint64 dup == assert - // tests/contracts/general.algo.ts:194 + // tests/contracts/general.algo.ts:198 // asa = AssetID.zeroIndex int 0 frame_bury 1 // asa: uint64 - // tests/contracts/general.algo.ts:195 + // tests/contracts/general.algo.ts:199 // assert(AssetID.fromUint64(asa.id) === asa) int 0 // asa: uint64 dup @@ -763,12 +780,12 @@ idProperty: scratchSlot: proto 0 0 - // tests/contracts/general.algo.ts:199 + // tests/contracts/general.algo.ts:203 // this.scratch.value = 1337 int 1337 store 0 - // tests/contracts/general.algo.ts:200 + // tests/contracts/general.algo.ts:204 // assert(this.scratch.value === 1337) load 0 int 1337 @@ -791,30 +808,30 @@ ecdsa: byte 0x dupn 7 - // tests/contracts/general.algo.ts:204 + // tests/contracts/general.algo.ts:208 // ecdsaVerify('Secp256k1', '' as bytes32, '' as bytes32, '' as bytes32, '' as bytes32, '' as bytes32) byte 0x0000000000000000000000000000000000000000000000000000000000000000 // "" dupn 4 ecdsa_verify Secp256k1 - // tests/contracts/general.algo.ts:205 + // tests/contracts/general.algo.ts:209 // d = ecdsaPkDecompress('Secp256k1', '' as bytes<33>) byte 0x000000000000000000000000000000000000000000000000000000000000000000 // "" ecdsa_pk_decompress Secp256k1 frame_bury 2 // d y component: byte[] frame_bury 3 // d x component: byte[] - // tests/contracts/general.algo.ts:206 + // tests/contracts/general.algo.ts:210 // log(d.y) frame_dig 2 // d y component: byte[] log - // tests/contracts/general.algo.ts:207 + // tests/contracts/general.algo.ts:211 // log(d.x) frame_dig 3 // d x component: byte[] log - // tests/contracts/general.algo.ts:209 + // tests/contracts/general.algo.ts:213 // r = ecdsaPkRecover('Secp256k1', '' as bytes32, 1, '' as bytes32, '' as bytes32) byte 0x0000000000000000000000000000000000000000000000000000000000000000 // "" int 1 @@ -824,12 +841,12 @@ ecdsa: frame_bury 6 // r y component: byte[] frame_bury 7 // r x component: byte[] - // tests/contracts/general.algo.ts:210 + // tests/contracts/general.algo.ts:214 // log(r.y) frame_dig 6 // r y component: byte[] log - // tests/contracts/general.algo.ts:211 + // tests/contracts/general.algo.ts:215 // log(r.x) frame_dig 7 // r x component: byte[] log @@ -846,7 +863,7 @@ ecdsa: verifyTxnTypes: proto 0 0 - // tests/contracts/general.algo.ts:215 + // tests/contracts/general.algo.ts:219 // verifyPayTxn(this.txnGroup[0], { // amount: { greaterThan: 0 }, // }) @@ -868,7 +885,7 @@ verifyTxnTypes: // transaction verification failed: {"txn":"this.txnGroup[0]","field":"amount","condition":"greaterThan","expected":">0"} assert - // tests/contracts/general.algo.ts:219 + // tests/contracts/general.algo.ts:223 // verifyAppCallTxn(this.txnGroup[0], { // applicationID: AppID.fromUint64(0), // applicationArgs: { @@ -920,7 +937,7 @@ verifyTxnTypes: // transaction verification failed: {"txn":{"txnText":"this.txnGroup[0]"},"field":"applicationArgs 1","condition":"includedIn","expected":"['bar', 'baz']"} assert - // tests/contracts/general.algo.ts:229 + // tests/contracts/general.algo.ts:233 // verifyAssetTransferTxn(this.txnGroup[0], { // assetReceiver: this.app.address, // }) @@ -942,7 +959,7 @@ verifyTxnTypes: // transaction verification failed: {"txn":"this.txnGroup[0]","field":"assetReceiver","expected":"this.app.address"} assert - // tests/contracts/general.algo.ts:233 + // tests/contracts/general.algo.ts:237 // verifyAssetConfigTxn(this.txnGroup[0], { // configAsset: AssetID.fromUint64(0), // }) @@ -964,7 +981,7 @@ verifyTxnTypes: // transaction verification failed: {"txn":"this.txnGroup[0]","field":"configAsset","expected":"AssetID.fromUint64(0)"} assert - // tests/contracts/general.algo.ts:237 + // tests/contracts/general.algo.ts:241 // verifyKeyRegTxn(this.txnGroup[0], { // voteFirst: 1337, // }) @@ -1001,19 +1018,19 @@ stringPlusEquals: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/general.algo.ts:243 + // tests/contracts/general.algo.ts:247 // s = 'foo' byte 0x666f6f // "foo" frame_bury 0 // s: byte[] - // tests/contracts/general.algo.ts:244 + // tests/contracts/general.algo.ts:248 // s += 'bar' frame_dig 0 // s: byte[] byte 0x626172 // "bar" concat frame_bury 0 // s: byte[] - // tests/contracts/general.algo.ts:245 + // tests/contracts/general.algo.ts:249 // assert(s === 'foobar') frame_dig 0 // s: byte[] byte 0x666f6f626172 // "foobar" @@ -1043,7 +1060,7 @@ stringPlusEquals: importedProgram: proto 0 1 - // tests/contracts/general.algo.ts:249 + // tests/contracts/general.algo.ts:253 // return IfTest.approvalProgram(); byte b64 CiAEAQACICYJBBUffHUCaWYEZWxzZQNlbmQAA2ZvbwdlbHNlIGlmCWVsc2UgaWYgMQllbHNlIGlmIDIxGBSBBgsxGQiNDAMkAAAAAAAAAAAAAAMWAAAAAAAAAAAAAAAoNhoBSRUiEkQjU4gADEkVFlcGAkxQULAiQ4oBAYv/QQACKYkriSg2GgFJFSISRCNTiAAMSRUWVwYCTFBQsCJDigEBi/9BAAUpiUIAAiqJiSg2GgJJFSISRCNTNhoBSRUiEkQjU4gADEkVFlcGAkxQULAiQ4oCAYv/QQAFKYlCAAiL/kEAAycGiSuJKDYaAkkVIhJEI1M2GgFJFSISRCNTiAAMSRUWVwYCTFBQsCJDigIBi/9BAAUpiUIADYv+QQAGJwaJQgACKomJKDYaA0kVIhJEI1M2GgJJFSISRCNTNhoBSRUiEkQjU4gADEkVFlcGAkxQULAiQ4oDAYv/QQAFKYlCABOL/kEABicHiUIACIv9QQADJwiJK4koNhoDSRUiEkQjUzYaAkkVIhJEI1M2GgFJFSISRCNTiAAMSRUWVwYCTFBQsCJDigMBi/9BAAUpiUIAGIv+QQAGJweJQgANi/1BAAYnCIlCAAIqiYkoNhoCSRUiEkQjUzYaAUkVIhJEI1OIAAxJFRZXBgJMUFCwIkOKAgGL/0EAFov+QQAMgAluZXN0ZWQgaWaJKYlCAAIqiYkoNhoBSRUiEkQjU4gADEkVFlcGAkxQULAiQ4oBAYv/QQAFKYlCAAIqiYkoNhoCSRUiEkQjUzYaAUkVIhJEI1OIAAUWULAiQ4oCAYv/QQAEIkIAC4v+QQAEJEIAAoEDiSg2GgFXAgCIAAUWULAiQ4oBAYv/JwSpQQACIokkiSg2GgFXAgCIAAUWULAiQ4oBAYv/JwSpQQAEIkIAASSJNhoBSRUkEkQXiAACIkOKAQCL/ycEqUEAAycFsIk2GgJJFSQSRBc2GgFJFSQSRBeIAAIiQ4oCAIv/i/4OQQADJwWwiTYaAkkVJRJENhoBSRUlEkSIAAIiQ4oCAIv/i/6mQQADJwWwiSg2GgJJFSISRCNTNhoBSRUiEkQjU4gADEkVFlcGAkxQULAiQ4oCAYv/QQAZi/5BAA2AB2EgYW5kIGKJQgAEgAFhiUIAFov+QQAHgAFiiUIACoAHbmVpdGhlcomJIkOABLhEezY2GgCOAf/xAIAEQ27BwoAEHHoNXoAEXg+2z4AEXhxsUIAEWNC6koAEXS9PAoAEhFcp2YAEj+dsqIAEGjx4eIAEdLzIaIAEQhL5BYAEld2uv4AEMUe4ZoAEQol/YYAEU0vitzYaAI4P/GD8hvyw/Ov9Kv16/c7+E/49/nL+kP6w/s3+8/8XAA== retsub @@ -1059,7 +1076,7 @@ importedProgram: callPrivateDefinedLater: proto 0 0 - // tests/contracts/general.algo.ts:253 + // tests/contracts/general.algo.ts:257 // log(this.privateMethod('hello')) byte 0x68656c6c6f // "hello" callsub privateMethod @@ -1070,7 +1087,7 @@ callPrivateDefinedLater: privateMethod: proto 1 1 - // tests/contracts/general.algo.ts:257 + // tests/contracts/general.algo.ts:261 // return msg; frame_dig -1 // msg: string retsub @@ -1100,7 +1117,7 @@ privateMethod: interalPublicMethod: proto 2 1 - // tests/contracts/general.algo.ts:261 + // tests/contracts/general.algo.ts:265 // return a + b; frame_dig -1 // a: uint64 frame_dig -2 // b: uint64 @@ -1118,7 +1135,7 @@ interalPublicMethod: callInternalPublicMethod: proto 0 0 - // tests/contracts/general.algo.ts:265 + // tests/contracts/general.algo.ts:269 // assert(this.interalPublicMethod(1, 2) === 3) int 2 int 1 @@ -1139,7 +1156,7 @@ callInternalPublicMethod: appLoadScratch: proto 0 0 - // tests/contracts/general.algo.ts:269 + // tests/contracts/general.algo.ts:273 // log(this.txnGroup[1].loadScratch(2) as bytes) gload 1 2 log @@ -1177,7 +1194,7 @@ appLoadScratch: uintNWithUnderscore: proto 0 1 - // tests/contracts/general.algo.ts:273 + // tests/contracts/general.algo.ts:277 // return 123_456; byte 0x000000000000000000000000000000000000000000000000000000000001e240 retsub @@ -1196,7 +1213,7 @@ opUp: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/general.algo.ts:277 + // tests/contracts/general.algo.ts:281 // increaseOpcodeBudget() itxn_begin int appl @@ -1211,26 +1228,26 @@ opUp: itxn_field OnCompletion itxn_submit - // tests/contracts/general.algo.ts:278 + // tests/contracts/general.algo.ts:282 // for (let i = 1; i < 75; i += 1) int 1 frame_bury 0 // i: uint64 *for_0: - // tests/contracts/general.algo.ts:278 + // tests/contracts/general.algo.ts:282 // i < 75 frame_dig 0 // i: uint64 int 75 < bz *for_0_end - // tests/contracts/general.algo.ts:279 + // tests/contracts/general.algo.ts:283 // assert(i) frame_dig 0 // i: uint64 assert *for_0_continue: - // tests/contracts/general.algo.ts:278 + // tests/contracts/general.algo.ts:282 // i += 1 frame_dig 0 // i: uint64 int 1 @@ -1266,13 +1283,13 @@ returnValueOnAssignment: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/general.algo.ts:284 + // tests/contracts/general.algo.ts:288 // message = 'hi' byte 0x6869 // "hi" frame_bury 0 // message: byte[] // *if0_condition - // tests/contracts/general.algo.ts:286 + // tests/contracts/general.algo.ts:290 // this.txn.sender === this.app.address txn Sender global CurrentApplicationAddress @@ -1280,13 +1297,13 @@ returnValueOnAssignment: bz *if0_end // *if0_consequent - // tests/contracts/general.algo.ts:287 + // tests/contracts/general.algo.ts:291 // message = 'in block' byte 0x696e20626c6f636b // "in block" frame_bury 0 // message: byte[] *if0_end: - // tests/contracts/general.algo.ts:290 + // tests/contracts/general.algo.ts:294 // return (message = 'bye'); byte 0x627965 // "bye" dup @@ -1316,12 +1333,12 @@ returnArrayValueOnAssignment: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/general.algo.ts:294 + // tests/contracts/general.algo.ts:298 // a: StaticArray = [1, 2, 3] byte 0x000000000000000100000000000000020000000000000003 frame_bury 0 // a: StaticArray - // tests/contracts/general.algo.ts:296 + // tests/contracts/general.algo.ts:300 // return (a[0] = 4); frame_dig 0 // a: StaticArray int 0 @@ -1354,13 +1371,13 @@ returnArrayValueOnAssignment: returnStorageValueOnAssignment: proto 0 1 - // tests/contracts/general.algo.ts:300 + // tests/contracts/general.algo.ts:304 // this.gKey.value = 1 byte 0x674b6579 // "gKey" int 1 app_global_put - // tests/contracts/general.algo.ts:302 + // tests/contracts/general.algo.ts:306 // return (this.gKey.value = 2); byte 0x674b6579 // "gKey" int 2 @@ -1390,12 +1407,12 @@ returnOperatorAssignmentValue: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/general.algo.ts:306 + // tests/contracts/general.algo.ts:310 // a = 1 int 1 frame_bury 0 // a: uint64 - // tests/contracts/general.algo.ts:308 + // tests/contracts/general.algo.ts:312 // return (a += 2); frame_dig 0 // a: uint64 int 2 @@ -1429,12 +1446,12 @@ returnArrayValueOnOperatorAssignment: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/general.algo.ts:312 + // tests/contracts/general.algo.ts:316 // a: StaticArray = [1, 2, 3] byte 0x000000000000000100000000000000020000000000000003 frame_bury 0 // a: StaticArray - // tests/contracts/general.algo.ts:314 + // tests/contracts/general.algo.ts:318 // return (a[0] += 4); frame_dig 0 // a: StaticArray int 0 @@ -1471,13 +1488,13 @@ returnArrayValueOnOperatorAssignment: returnArrayInStorageValueOnOperatorAssignment: proto 0 1 - // tests/contracts/general.algo.ts:318 + // tests/contracts/general.algo.ts:322 // this.storageArray.value = [1, 2, 3] byte 0x73746f726167654172726179 // "storageArray" byte 0x000000000000000100000000000000020000000000000003 app_global_put - // tests/contracts/general.algo.ts:320 + // tests/contracts/general.algo.ts:324 // return (this.storageArray.value[0] += 4); byte 0x73746f726167654172726179 // "storageArray" app_global_get @@ -1509,21 +1526,21 @@ returnArrayInStorageValueOnOperatorAssignment: consts: proto 0 0 - // tests/contracts/general.algo.ts:324 + // tests/contracts/general.algo.ts:328 // assert(STRING_CONST === 'foo') byte "foo" byte 0x666f6f // "foo" == assert - // tests/contracts/general.algo.ts:325 + // tests/contracts/general.algo.ts:329 // assert(NUM_CONST === 123) int 123 dup == assert - // tests/contracts/general.algo.ts:326 + // tests/contracts/general.algo.ts:330 // assert(NESTED_CONST === 123) int 123 dup @@ -1542,7 +1559,7 @@ consts: assertWithMessage: proto 0 0 - // tests/contracts/general.algo.ts:330 + // tests/contracts/general.algo.ts:334 // assert(false, 'this is false') int 0 @@ -1561,32 +1578,32 @@ assertWithMessage: opcodeAliases: proto 0 0 - // tests/contracts/general.algo.ts:334 + // tests/contracts/general.algo.ts:338 // extractUint16(bzero(64), 0) byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 int 0 extract_uint16 - // tests/contracts/general.algo.ts:335 + // tests/contracts/general.algo.ts:339 // extractUint32(bzero(64), 0) byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 int 0 extract_uint32 - // tests/contracts/general.algo.ts:336 + // tests/contracts/general.algo.ts:340 // extractUint64(bzero(64), 0) byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 int 0 extract_uint64 - // tests/contracts/general.algo.ts:337 + // tests/contracts/general.algo.ts:341 // ed25519VerifyBare(bzero(64), bzero(64), bzero(32)) byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 dup byte 0x0000000000000000000000000000000000000000000000000000000000000000 ed25519verify_bare - // tests/contracts/general.algo.ts:338 + // tests/contracts/general.algo.ts:342 // ed25519Verify(bzero(64), bzero(64), bzero(32)) byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 dup @@ -1609,7 +1626,7 @@ vrfVerifyOp: byte 0x dupn 3 - // tests/contracts/general.algo.ts:342 + // tests/contracts/general.algo.ts:346 // increaseOpcodeBudget() itxn_begin int appl @@ -1624,7 +1641,7 @@ vrfVerifyOp: itxn_field OnCompletion itxn_submit - // tests/contracts/general.algo.ts:343 + // tests/contracts/general.algo.ts:347 // increaseOpcodeBudget() itxn_begin int appl @@ -1639,7 +1656,7 @@ vrfVerifyOp: itxn_field OnCompletion itxn_submit - // tests/contracts/general.algo.ts:344 + // tests/contracts/general.algo.ts:348 // increaseOpcodeBudget() itxn_begin int appl @@ -1654,7 +1671,7 @@ vrfVerifyOp: itxn_field OnCompletion itxn_submit - // tests/contracts/general.algo.ts:345 + // tests/contracts/general.algo.ts:349 // increaseOpcodeBudget() itxn_begin int appl @@ -1669,7 +1686,7 @@ vrfVerifyOp: itxn_field OnCompletion itxn_submit - // tests/contracts/general.algo.ts:346 + // tests/contracts/general.algo.ts:350 // increaseOpcodeBudget() itxn_begin int appl @@ -1684,7 +1701,7 @@ vrfVerifyOp: itxn_field OnCompletion itxn_submit - // tests/contracts/general.algo.ts:347 + // tests/contracts/general.algo.ts:351 // increaseOpcodeBudget() itxn_begin int appl @@ -1699,7 +1716,7 @@ vrfVerifyOp: itxn_field OnCompletion itxn_submit - // tests/contracts/general.algo.ts:348 + // tests/contracts/general.algo.ts:352 // increaseOpcodeBudget() itxn_begin int appl @@ -1714,7 +1731,7 @@ vrfVerifyOp: itxn_field OnCompletion itxn_submit - // tests/contracts/general.algo.ts:349 + // tests/contracts/general.algo.ts:353 // increaseOpcodeBudget() itxn_begin int appl @@ -1729,7 +1746,7 @@ vrfVerifyOp: itxn_field OnCompletion itxn_submit - // tests/contracts/general.algo.ts:350 + // tests/contracts/general.algo.ts:354 // increaseOpcodeBudget() itxn_begin int appl @@ -1744,7 +1761,7 @@ vrfVerifyOp: itxn_field OnCompletion itxn_submit - // tests/contracts/general.algo.ts:352 + // tests/contracts/general.algo.ts:356 // r = vrfVefiry('VrfAlgorand', bzero(32) as bytes, bzero(80), bzero(32)) byte 0x0000000000000000000000000000000000000000000000000000000000000000 byte 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -1753,13 +1770,13 @@ vrfVerifyOp: frame_bury 2 // r verified: bool frame_bury 3 // r output: byte[] - // tests/contracts/general.algo.ts:353 + // tests/contracts/general.algo.ts:357 // assert(!r.verified) frame_dig 2 // r verified: bool ! assert - // tests/contracts/general.algo.ts:354 + // tests/contracts/general.algo.ts:358 // log(r.output) frame_dig 3 // r output: byte[] log @@ -1779,40 +1796,40 @@ ecMath: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/general.algo.ts:358 + // tests/contracts/general.algo.ts:362 // ecScalarMul('BN254g1', '', '') byte 0x // "" dup ec_scalar_mul BN254g1 - // tests/contracts/general.algo.ts:359 + // tests/contracts/general.algo.ts:363 // ecPairingCheck('BN254g1', '', '') byte 0x // "" dup ec_pairing_check BN254g1 - // tests/contracts/general.algo.ts:360 + // tests/contracts/general.algo.ts:364 // scalars: bytes32[] = [bzero(32), bzero(32)] byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 frame_bury 0 // scalars: bytes32[] - // tests/contracts/general.algo.ts:361 + // tests/contracts/general.algo.ts:365 // ecMultiScalarMul('BN254g1', '', scalars) byte 0x // "" byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 // scalars: bytes32[] ec_multi_scalar_mul BN254g1 - // tests/contracts/general.algo.ts:362 + // tests/contracts/general.algo.ts:366 // ecSubgroupCheck('BN254g1', '') byte 0x // "" ec_subgroup_check BN254g1 - // tests/contracts/general.algo.ts:363 + // tests/contracts/general.algo.ts:367 // ecMapTo('BN254g1', '') byte 0x // "" ec_map_to BN254g1 - // tests/contracts/general.algo.ts:364 + // tests/contracts/general.algo.ts:368 // ecAdd('BN254g1', '', '') byte 0x // "" dup @@ -1833,17 +1850,17 @@ gitxn: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/general.algo.ts:368 + // tests/contracts/general.algo.ts:372 // log(this.lastInnerGroup[0].sender) gitxn 0 Sender log - // tests/contracts/general.algo.ts:370 + // tests/contracts/general.algo.ts:374 // anotherTxn = this.lastInnerGroup[1] int 1 frame_bury 0 // anotherTxn: gitxn - // tests/contracts/general.algo.ts:372 + // tests/contracts/general.algo.ts:376 // log(anotherTxn.sender) gitxn 1 Sender log @@ -1860,7 +1877,7 @@ gitxn: getSetBytes: proto 0 0 - // tests/contracts/general.algo.ts:376 + // tests/contracts/general.algo.ts:380 // log(setbit('foo', 0, true)) byte 0x666f6f // "foo" int 0 @@ -1868,19 +1885,19 @@ getSetBytes: setbit log - // tests/contracts/general.algo.ts:377 + // tests/contracts/general.algo.ts:381 // getbit('foo', 0) byte 0x666f6f // "foo" int 0 getbit - // tests/contracts/general.algo.ts:378 + // tests/contracts/general.algo.ts:382 // getbyte('foo', 0) byte 0x666f6f // "foo" int 0 getbyte - // tests/contracts/general.algo.ts:379 + // tests/contracts/general.algo.ts:383 // setbyte('foo', 0, 1) byte 0x666f6f // "foo" int 0 @@ -1899,7 +1916,7 @@ getSetBytes: getSetUint64: proto 0 0 - // tests/contracts/general.algo.ts:383 + // tests/contracts/general.algo.ts:387 // assert(setbit(123, 0, true)) int 123 int 0 @@ -1907,7 +1924,7 @@ getSetUint64: setbit assert - // tests/contracts/general.algo.ts:384 + // tests/contracts/general.algo.ts:388 // getbit(123, 0) int 123 int 0 @@ -1925,7 +1942,7 @@ getSetUint64: blockOp: proto 0 0 - // tests/contracts/general.algo.ts:388 + // tests/contracts/general.algo.ts:392 // log(blocks[globals.round - 1].seed) global Round int 1 @@ -1933,7 +1950,7 @@ blockOp: block BlkSeed log - // tests/contracts/general.algo.ts:389 + // tests/contracts/general.algo.ts:393 // assert(blocks[globals.round - 1].timestamp) global Round int 1 @@ -1953,7 +1970,7 @@ blockOp: b64: proto 0 0 - // tests/contracts/general.algo.ts:393 + // tests/contracts/general.algo.ts:397 // log(base64Decode('StdEncoding', '')) byte 0x // "" base64_decode StdEncoding @@ -1971,21 +1988,21 @@ b64: json: proto 0 0 - // tests/contracts/general.algo.ts:397 + // tests/contracts/general.algo.ts:401 // log(jsonRef('JSONObject', '', '')) byte 0x // "" dup json_ref JSONObject log - // tests/contracts/general.algo.ts:398 + // tests/contracts/general.algo.ts:402 // log(jsonRef('JSONString', '', '')) byte 0x // "" dup json_ref JSONString log - // tests/contracts/general.algo.ts:399 + // tests/contracts/general.algo.ts:403 // assert(jsonRef('JSONUint64', '', '')) byte 0x // "" dup @@ -2004,12 +2021,12 @@ json: bitlenOp: proto 0 0 - // tests/contracts/general.algo.ts:403 + // tests/contracts/general.algo.ts:407 // bitlen(123) int 123 bitlen - // tests/contracts/general.algo.ts:404 + // tests/contracts/general.algo.ts:408 // bitlen('foo') byte 0x666f6f // "foo" bitlen @@ -2026,7 +2043,7 @@ bitlenOp: computedConst: proto 0 0 - // tests/contracts/general.algo.ts:408 + // tests/contracts/general.algo.ts:412 // assert(COMPUTED_CONST) int 246 assert @@ -2043,7 +2060,7 @@ computedConst: multiComputedConst: proto 0 0 - // tests/contracts/general.algo.ts:412 + // tests/contracts/general.algo.ts:416 // assert(MUTLI_COMPUTED_CONST) int 30381 assert @@ -2060,28 +2077,28 @@ multiComputedConst: readSchema: proto 0 0 - // tests/contracts/general.algo.ts:416 + // tests/contracts/general.algo.ts:420 // assert(SchemaContract.schema.global.numUint === 1) int 1 dup == assert - // tests/contracts/general.algo.ts:417 + // tests/contracts/general.algo.ts:421 // assert(SchemaContract.schema.global.numByteSlice === 2) int 2 dup == assert - // tests/contracts/general.algo.ts:418 + // tests/contracts/general.algo.ts:422 // assert(SchemaContract.schema.local.numUint === 3) int 3 dup == assert - // tests/contracts/general.algo.ts:419 + // tests/contracts/general.algo.ts:423 // assert(SchemaContract.schema.local.numByteSlice === 4) int 4 dup @@ -2109,7 +2126,7 @@ readSchema: comparisonOr: proto 0 1 - // tests/contracts/general.algo.ts:423 + // tests/contracts/general.algo.ts:427 // return this.txn.sender === globals.zeroAddress || this.txn.sender === globals.zeroAddress; txn Sender global ZeroAddress @@ -2159,20 +2176,20 @@ txnArgsMethod: callTxnArgsMethod: proto 0 0 - // tests/contracts/general.algo.ts:430 - // sendMethodCall({ - // methodArgs: [{ receiver: this.app.address, amount: 0 }], - // }) + // tests/contracts/general.algo.ts:434 + // GeneralTest.call({ applicationID: AppID.fromUint64(1337) }).txnArgsMethod( + // new PayTxn({ receiver: this.app.address, amount: 0 }) + // ) itxn_begin int pay itxn_field TypeEnum - // tests/contracts/general.algo.ts:431 + // tests/contracts/general.algo.ts:435 // receiver: this.app.address global CurrentApplicationAddress itxn_field Receiver - // tests/contracts/general.algo.ts:431 + // tests/contracts/general.algo.ts:435 // amount: 0 int 0 itxn_field Amount @@ -2180,14 +2197,24 @@ callTxnArgsMethod: // Fee field not set, defaulting to 0 int 0 itxn_field Fee + + // tests/contracts/general.algo.ts:434 + // GeneralTest.call({ applicationID: AppID.fromUint64(1337) }).txnArgsMethod( + // new PayTxn({ receiver: this.app.address, amount: 0 }) + // ) itxn_next int appl itxn_field TypeEnum method "txnArgsMethod(pay)void" itxn_field ApplicationArgs - // tests/contracts/general.algo.ts:431 - // methodArgs: [{ receiver: this.app.address, amount: 0 }] + // tests/contracts/general.algo.ts:434 + // applicationID: AppID.fromUint64(1337) + int 1337 + itxn_field ApplicationID + + // tests/contracts/general.algo.ts:435 + // new PayTxn({ receiver: this.app.address, amount: 0 }) // Fee field not set, defaulting to 0 int 0 itxn_field Fee @@ -2217,7 +2244,7 @@ callTxnArgsMethod: staticValueLen: proto 1 0 - // tests/contracts/general.algo.ts:436 + // tests/contracts/general.algo.ts:440 // assert(len(x)) int 32 assert @@ -2234,7 +2261,7 @@ staticValueLen: staticTypeLen: proto 0 0 - // tests/contracts/general.algo.ts:440 + // tests/contracts/general.algo.ts:444 // assert(len()) int 32 assert @@ -2251,13 +2278,13 @@ staticTypeLen: dynamicScratchSlot: proto 0 0 - // tests/contracts/general.algo.ts:444 + // tests/contracts/general.algo.ts:448 // this.dynamicScratch(1).value = 1337 int 1 int 1337 stores - // tests/contracts/general.algo.ts:445 + // tests/contracts/general.algo.ts:449 // assert(this.dynamicScratch(1).value === 1337) int 1 loads @@ -2277,19 +2304,19 @@ dynamicScratchSlot: incrementScratchSlot: proto 0 0 - // tests/contracts/general.algo.ts:449 + // tests/contracts/general.algo.ts:453 // this.scratch.value = 1337 int 1337 store 0 - // tests/contracts/general.algo.ts:450 + // tests/contracts/general.algo.ts:454 // this.scratch.value += 1 load 0 int 1 + store 0 - // tests/contracts/general.algo.ts:451 + // tests/contracts/general.algo.ts:455 // assert(this.scratch.value === 1338) load 0 int 1338 @@ -2308,13 +2335,13 @@ incrementScratchSlot: incrementDynamicScratchSlot: proto 0 0 - // tests/contracts/general.algo.ts:455 + // tests/contracts/general.algo.ts:459 // this.dynamicScratch(2).value = 1337 int 2 int 1337 stores - // tests/contracts/general.algo.ts:456 + // tests/contracts/general.algo.ts:460 // this.dynamicScratch(2).value += 1 int 2 loads @@ -2324,7 +2351,7 @@ incrementDynamicScratchSlot: swap stores - // tests/contracts/general.algo.ts:457 + // tests/contracts/general.algo.ts:461 // assert(this.dynamicScratch(2).value === 1338) int 2 loads @@ -2347,12 +2374,12 @@ fromAddress: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // tests/contracts/general.algo.ts:461 + // tests/contracts/general.algo.ts:465 // a = Address.fromAddress('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ') addr AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ frame_bury 0 // a: address - // tests/contracts/general.algo.ts:462 + // tests/contracts/general.algo.ts:466 // assert(a === Address.zeroAddress) frame_dig 0 // a: address global ZeroAddress @@ -2385,7 +2412,7 @@ earlyReturn: byte 0x // *if1_condition - // tests/contracts/general.algo.ts:466 + // tests/contracts/general.algo.ts:470 // a === 1 frame_dig -1 // a: uint64 int 1 @@ -2393,20 +2420,20 @@ earlyReturn: bz *if1_end // *if1_consequent - // tests/contracts/general.algo.ts:467 + // tests/contracts/general.algo.ts:471 // return 2; int 2 b *earlyReturn*return *if1_end: - // tests/contracts/general.algo.ts:469 + // tests/contracts/general.algo.ts:473 // b = a + 1 frame_dig -1 // a: uint64 int 1 + frame_bury 0 // b: uint64 - // tests/contracts/general.algo.ts:470 + // tests/contracts/general.algo.ts:474 // return b; frame_dig 0 // b: uint64 @@ -2426,19 +2453,23 @@ earlyReturn: assetMethodArgs: proto 0 0 - // tests/contracts/general.algo.ts:474 - // sendMethodCall<[AssetReference], void>({ - // name: 'foo', - // methodArgs: [AssetID.fromUint64(1)], - // }) + // tests/contracts/general.algo.ts:478 + // this.txnComposer.send( + // new MethodCallTxn<[AssetReference], void>({ + // name: 'foo', + // methodArgs: [AssetID.fromUint64(1)], + // }) + // ) itxn_begin int appl itxn_field TypeEnum method "foo(asset)void" itxn_field ApplicationArgs - // tests/contracts/general.algo.ts:476 + // tests/contracts/general.algo.ts:481 // methodArgs: [AssetID.fromUint64(1)] + // tests/contracts/general.algo.ts:481 + // AssetID.fromUint64(1) int 1 itxn_field Assets byte 0x0000000000000000 @@ -2463,16 +2494,18 @@ assetMethodArgs: multipleProgramPages: proto 0 0 - // tests/contracts/general.algo.ts:485 - // sendAppCall({ - // approvalProgram: [this.pageOne.value, this.pageTwo.value], - // clearStateProgram: [this.pageOne.value, this.pageTwo.value], - // }) + // tests/contracts/general.algo.ts:491 + // this.txnComposer.send( + // new AppCallTxn({ + // approvalProgram: [this.pageOne.value, this.pageTwo.value], + // clearStateProgram: [this.pageOne.value, this.pageTwo.value], + // }) + // ) itxn_begin int appl itxn_field TypeEnum - // tests/contracts/general.algo.ts:486 + // tests/contracts/general.algo.ts:493 // approvalProgram: [this.pageOne.value, this.pageTwo.value] byte 0x706167654f6e65 // "pageOne" box_get @@ -2487,7 +2520,7 @@ multipleProgramPages: assert itxn_field ApprovalProgramPages - // tests/contracts/general.algo.ts:487 + // tests/contracts/general.algo.ts:494 // clearStateProgram: [this.pageOne.value, this.pageTwo.value] byte 0x706167654f6e65 // "pageOne" box_get @@ -2521,7 +2554,7 @@ multipleProgramPages: assertComment: proto 0 0 - // tests/contracts/general.algo.ts:492 + // tests/contracts/general.algo.ts:500 // assert(false, 'this is false') int 0 diff --git a/tests/contracts/artifacts/GeneralTest.arc32.json b/tests/contracts/artifacts/GeneralTest.arc32.json index e16a0fb29..7aa74fc0a 100644 --- a/tests/contracts/artifacts/GeneralTest.arc32.json +++ b/tests/contracts/artifacts/GeneralTest.arc32.json @@ -378,7 +378,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHR4blR5cGVFbnVtKCl2b2lkCiphYmlfcm91dGVfdHhuVHlwZUVudW06CgkvLyBleGVjdXRlIHR4blR5cGVFbnVtKCl2b2lkCgljYWxsc3ViIHR4blR5cGVFbnVtCglpbnQgMQoJcmV0dXJuCgovLyB0eG5UeXBlRW51bSgpOiB2b2lkCnR4blR5cGVFbnVtOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo2MQoJLy8gYXNzZXJ0KHRoaXMudHhuR3JvdXBbMF0udHlwZUVudW0gPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwpCglpbnQgMAoJZ3R4bnMgVHlwZUVudW0KCWludCBhcHBsCgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIHR4bkdyb3VwTGVuZ3RoKCl2b2lkCiphYmlfcm91dGVfdHhuR3JvdXBMZW5ndGg6CgkvLyBleGVjdXRlIHR4bkdyb3VwTGVuZ3RoKCl2b2lkCgljYWxsc3ViIHR4bkdyb3VwTGVuZ3RoCglpbnQgMQoJcmV0dXJuCgovLyB0eG5Hcm91cExlbmd0aCgpOiB2b2lkCnR4bkdyb3VwTGVuZ3RoOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo2NQoJLy8gYXNzZXJ0KHRoaXMudHhuR3JvdXAubGVuZ3RoID09PSAxKQoJZ2xvYmFsIEdyb3VwU2l6ZQoJaW50IDEKCT09Cglhc3NlcnQKCXJldHN1YgoKLy8gYXNzZXJ0cyhib29sLGJvb2wpdm9pZAoqYWJpX3JvdXRlX2Fzc2VydHM6CgkvLyBhcmcyOiBib29sCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDEKCT09CgoJLy8gYXJndW1lbnQgMCAoYXJnMikgZm9yIGFzc2VydHMgbXVzdCBiZSBhIGJvb2wKCWFzc2VydAoJaW50IDAKCWdldGJpdAoKCS8vIGFyZzE6IGJvb2wKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMQoJPT0KCgkvLyBhcmd1bWVudCAxIChhcmcxKSBmb3IgYXNzZXJ0cyBtdXN0IGJlIGEgYm9vbAoJYXNzZXJ0CglpbnQgMAoJZ2V0Yml0CgoJLy8gZXhlY3V0ZSBhc3NlcnRzKGJvb2wsYm9vbCl2b2lkCgljYWxsc3ViIGFzc2VydHMKCWludCAxCglyZXR1cm4KCi8vIGFzc2VydHMoYXJnMTogYm9vbGVhbiwgYXJnMjogYm9vbGVhbik6IHZvaWQKYXNzZXJ0czoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NjkKCS8vIGFzc2VydHMoYXJnMSwgYXJnMiwgYXJnMSA9PT0gYXJnMikKCWZyYW1lX2RpZyAtMSAvLyBhcmcxOiBib29sZWFuCgoJLy8gYXNzZXJ0cyBmYWlsZWQ6IGFzc2VydHMoYXJnMSwgYXJnMiwgYXJnMSA9PT0gYXJnMikKCWFzc2VydAoJZnJhbWVfZGlnIC0yIC8vIGFyZzI6IGJvb2xlYW4KCgkvLyBhc3NlcnRzIGZhaWxlZDogYXNzZXJ0cyhhcmcxLCBhcmcyLCBhcmcxID09PSBhcmcyKQoJYXNzZXJ0CglmcmFtZV9kaWcgLTEgLy8gYXJnMTogYm9vbGVhbgoJZnJhbWVfZGlnIC0yIC8vIGFyZzI6IGJvb2xlYW4KCT09CgoJLy8gYXNzZXJ0cyBmYWlsZWQ6IGFzc2VydHMoYXJnMSwgYXJnMiwgYXJnMSA9PT0gYXJnMikKCWFzc2VydAoJcmV0c3ViCgovLyB2ZXJpZnlUeG5Gcm9tQXJnKHBheSl2b2lkCiphYmlfcm91dGVfdmVyaWZ5VHhuRnJvbUFyZzoKCS8vIHNvbWVQYXk6IHBheQoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgcGF5Cgk9PQoKCS8vIGFyZ3VtZW50IDAgKHNvbWVQYXkpIGZvciB2ZXJpZnlUeG5Gcm9tQXJnIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgdmVyaWZ5VHhuRnJvbUFyZyhwYXkpdm9pZAoJY2FsbHN1YiB2ZXJpZnlUeG5Gcm9tQXJnCglpbnQgMQoJcmV0dXJuCgovLyB2ZXJpZnlUeG5Gcm9tQXJnKHNvbWVQYXk6IFBheVR4bik6IHZvaWQKdmVyaWZ5VHhuRnJvbUFyZzoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NzMKCS8vIHZlcmlmeVR4bihzb21lUGF5LCB7IHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLCBhbW91bnQ6IDEwMF8wMDAgfSkKCS8vIHZlcmlmeSByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHNvbWVQYXk6IFBheVR4bgoJZ3R4bnMgUmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoic29tZVBheSIsImZpZWxkIjoicmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIHNvbWVQYXk6IFBheVR4bgoJZ3R4bnMgQW1vdW50CglpbnQgMTAwXzAwMAoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InNvbWVQYXkiLCJmaWVsZCI6ImFtb3VudCIsImV4cGVjdGVkIjoiMTAwXzAwMCJ9Cglhc3NlcnQKCXJldHN1YgoKLy8gdmVyaWZ5VHhuRnJvbVR4bkdyb3VwKCl2b2lkCiphYmlfcm91dGVfdmVyaWZ5VHhuRnJvbVR4bkdyb3VwOgoJLy8gZXhlY3V0ZSB2ZXJpZnlUeG5Gcm9tVHhuR3JvdXAoKXZvaWQKCWNhbGxzdWIgdmVyaWZ5VHhuRnJvbVR4bkdyb3VwCglpbnQgMQoJcmV0dXJuCgovLyB2ZXJpZnlUeG5Gcm9tVHhuR3JvdXAoKTogdm9pZAp2ZXJpZnlUeG5Gcm9tVHhuR3JvdXA6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjc3CgkvLyB2ZXJpZnlUeG4odGhpcy50eG5Hcm91cFswXSwgeyBzZW5kZXI6IHRoaXMudHhuLnNlbmRlciB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJaW50IDAKCWd0eG5zIFNlbmRlcgoJdHhuIFNlbmRlcgoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InRoaXMudHhuR3JvdXBbMF0iLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoidGhpcy50eG4uc2VuZGVyIn0KCWFzc2VydAoJcmV0c3ViCgovLyB2ZXJpZnlUeG5Db25kaXRpb24oKXZvaWQKKmFiaV9yb3V0ZV92ZXJpZnlUeG5Db25kaXRpb246CgkvLyBleGVjdXRlIHZlcmlmeVR4bkNvbmRpdGlvbigpdm9pZAoJY2FsbHN1YiB2ZXJpZnlUeG5Db25kaXRpb24KCWludCAxCglyZXR1cm4KCi8vIHZlcmlmeVR4bkNvbmRpdGlvbigpOiB2b2lkCnZlcmlmeVR4bkNvbmRpdGlvbjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6ODEKCS8vIHZlcmlmeVR4bih0aGlzLnR4biwgewoJLy8gICAgICAgYXBwbGljYXRpb25JRDogeyBncmVhdGVyVGhhbjogMSB9LAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXBwbGljYXRpb25JRAoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAxCgk+CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4biIsImZpZWxkIjoiYXBwbGljYXRpb25JRCIsImNvbmRpdGlvbiI6ImdyZWF0ZXJUaGFuIiwiZXhwZWN0ZWQiOiI+MSJ9Cglhc3NlcnQKCXJldHN1YgoKLy8gdmVyaWZ5VHhuSW5jbHVkZWRJbigpdm9pZAoqYWJpX3JvdXRlX3ZlcmlmeVR4bkluY2x1ZGVkSW46CgkvLyBleGVjdXRlIHZlcmlmeVR4bkluY2x1ZGVkSW4oKXZvaWQKCWNhbGxzdWIgdmVyaWZ5VHhuSW5jbHVkZWRJbgoJaW50IDEKCXJldHVybgoKLy8gdmVyaWZ5VHhuSW5jbHVkZWRJbigpOiB2b2lkCnZlcmlmeVR4bkluY2x1ZGVkSW46Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjg3CgkvLyB2ZXJpZnlUeG4odGhpcy50eG4sIHsKCS8vICAgICAgIHNlbmRlcjogeyBpbmNsdWRlZEluOiBbdGhpcy50eG4uc2VuZGVyXSB9LAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgc2VuZGVyCgl0eG4gU2VuZGVyCgl0eG4gU2VuZGVyCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjp7InR4blRleHQiOiJ0aGlzLnR4biJ9LCJmaWVsZCI6InNlbmRlciIsImNvbmRpdGlvbiI6ImluY2x1ZGVkSW4iLCJleHBlY3RlZCI6Ilt0aGlzLnR4bi5zZW5kZXJdIn0KCWFzc2VydAoJcmV0c3ViCgovLyB2ZXJpZnlUeG5Ob3RJbmNsdWRlZEluKCl2b2lkCiphYmlfcm91dGVfdmVyaWZ5VHhuTm90SW5jbHVkZWRJbjoKCS8vIGV4ZWN1dGUgdmVyaWZ5VHhuTm90SW5jbHVkZWRJbigpdm9pZAoJY2FsbHN1YiB2ZXJpZnlUeG5Ob3RJbmNsdWRlZEluCglpbnQgMQoJcmV0dXJuCgovLyB2ZXJpZnlUeG5Ob3RJbmNsdWRlZEluKCk6IHZvaWQKdmVyaWZ5VHhuTm90SW5jbHVkZWRJbjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6OTMKCS8vIHZlcmlmeVR4bih0aGlzLnR4biwgewoJLy8gICAgICAgc2VuZGVyOiB7IG5vdEluY2x1ZGVkSW46IFtnbG9iYWxzLnplcm9BZGRyZXNzXSB9LAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgc2VuZGVyCgl0eG4gU2VuZGVyCglnbG9iYWwgWmVyb0FkZHJlc3MKCSE9CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOnsidHhuVGV4dCI6InRoaXMudHhuIn0sImZpZWxkIjoic2VuZGVyIiwiY29uZGl0aW9uIjoibm90SW5jbHVkZWRJbiIsImV4cGVjdGVkIjoiW2dsb2JhbHMuemVyb0FkZHJlc3NdIn0KCWFzc2VydAoJcmV0c3ViCgovLyBzdWJtaXRQZW5kaW5nR3JvdXAoKXZvaWQKKmFiaV9yb3V0ZV9zdWJtaXRQZW5kaW5nR3JvdXA6CgkvLyBleGVjdXRlIHN1Ym1pdFBlbmRpbmdHcm91cCgpdm9pZAoJY2FsbHN1YiBzdWJtaXRQZW5kaW5nR3JvdXAKCWludCAxCglyZXR1cm4KCi8vIHN1Ym1pdFBlbmRpbmdHcm91cCgpOiB2b2lkCnN1Ym1pdFBlbmRpbmdHcm91cDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6OTkKCS8vIHRoaXMucGVuZGluZ0dyb3VwLmFkZFBheW1lbnQoeyBhbW91bnQ6IDAsIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLCBpc0ZpcnN0VHhuOiB0cnVlIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo5OQoJLy8gYW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjk5CgkvLyByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEwMAoJLy8gdGhpcy5wZW5kaW5nR3JvdXAuYWRkUGF5bWVudCh7IGFtb3VudDogMCwgcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsIG5vdGU6ICdmb28nIH0pCglpdHhuX25leHQKCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEwMAoJLy8gYW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEwMAoJLy8gcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMDAKCS8vIG5vdGU6ICdmb28nCglieXRlIDB4NjY2ZjZmIC8vICJmb28iCglpdHhuX2ZpZWxkIE5vdGUKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEwMQoJLy8gdGhpcy5wZW5kaW5nR3JvdXAuc3VibWl0KCkKCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIG1ldGhvZFdpdGhUeG5BcmdzKCl2b2lkCiphYmlfcm91dGVfbWV0aG9kV2l0aFR4bkFyZ3M6CgkvLyBleGVjdXRlIG1ldGhvZFdpdGhUeG5BcmdzKCl2b2lkCgljYWxsc3ViIG1ldGhvZFdpdGhUeG5BcmdzCglpbnQgMQoJcmV0dXJuCgovLyBtZXRob2RXaXRoVHhuQXJncygpOiB2b2lkCm1ldGhvZFdpdGhUeG5BcmdzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMDUKCS8vIHNlbmRNZXRob2RDYWxsPFtQYXlUeG4sIE1ldGhvZENhbGw8W3VpbnQ2NF0sIHZvaWQ+XSwgdm9pZD4oewoJLy8gICAgICAgbmFtZTogJ2ZvbycsCgkvLyAgICAgICBtZXRob2RBcmdzOiBbCgkvLyAgICAgICAgIHsgYW1vdW50OiAxMDBfMDAwLCByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyIH0sCgkvLyAgICAgICAgIHsKCS8vICAgICAgICAgICBuYW1lOiAnYmFyJywKCS8vICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KDEzMzcpLAoJLy8gICAgICAgICAgIG1ldGhvZEFyZ3M6IFsxXSwKCS8vICAgICAgICAgfSwKCS8vICAgICAgIF0sCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEwOAoJLy8gYW1vdW50OiAxMDBfMDAwCglpbnQgMTAwXzAwMAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEwOAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9uZXh0CglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJiYXIodWludDY0KXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTExCgkvLyBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KDEzMzcpCglpbnQgMTMzNwoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMTIKCS8vIG1ldGhvZEFyZ3M6IFsxXQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglpdHhuX25leHQKCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgImZvbyhwYXksYXBwbCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEwNwoJLy8gbWV0aG9kQXJnczogWwoJLy8gICAgICAgICB7IGFtb3VudDogMTAwXzAwMCwgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciB9LAoJLy8gICAgICAgICB7CgkvLyAgICAgICAgICAgbmFtZTogJ2JhcicsCgkvLyAgICAgICAgICAgYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NCgxMzM3KSwKCS8vICAgICAgICAgICBtZXRob2RBcmdzOiBbMV0sCgkvLyAgICAgICAgIH0sCgkvLyAgICAgICBdCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHNoaWZ0KCl2b2lkCiphYmlfcm91dGVfc2hpZnQ6CgkvLyBleGVjdXRlIHNoaWZ0KCl2b2lkCgljYWxsc3ViIHNoaWZ0CglpbnQgMQoJcmV0dXJuCgovLyBzaGlmdCgpOiB2b2lkCnNoaWZ0OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMTkKCS8vIGFzc2VydCgxIDw8IDIgPT09IDQpCglpbnQgMQoJaW50IDIKCXNobAoJaW50IDQKCT09Cglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEyMAoJLy8gYXNzZXJ0KDQgPj4gMSA9PT0gMikKCWludCA0CglpbnQgMQoJc2hyCglpbnQgMgoJPT0KCWFzc2VydAoJcmV0c3ViCgovLyBmcm9tQnl0ZXMoKXZvaWQKKmFiaV9yb3V0ZV9mcm9tQnl0ZXM6CgkvLyBleGVjdXRlIGZyb21CeXRlcygpdm9pZAoJY2FsbHN1YiBmcm9tQnl0ZXMKCWludCAxCglyZXR1cm4KCi8vIGZyb21CeXRlcygpOiB2b2lkCmZyb21CeXRlczoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTI0CgkvLyBhc3NlcnQoQWRkcmVzcy5mcm9tQnl0ZXMoJ2FiYycpLm1pbkJhbGFuY2UpCglieXRlIDB4NjE2MjYzIC8vICJhYmMiCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJYXNzZXJ0CglyZXRzdWIKCi8vIGZyb21VaW50NjQoKXZvaWQKKmFiaV9yb3V0ZV9mcm9tVWludDY0OgoJLy8gZXhlY3V0ZSBmcm9tVWludDY0KCl2b2lkCgljYWxsc3ViIGZyb21VaW50NjQKCWludCAxCglyZXR1cm4KCi8vIGZyb21VaW50NjQoKTogdm9pZApmcm9tVWludDY0OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMjgKCS8vIGxvZyhBcHBJRC5mcm9tVWludDY0KDEyMykuY3JlYXRvcikKCWludCAxMjMKCWFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKCXBvcAoJbG9nCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMjkKCS8vIGxvZyhBc3NldElELmZyb21VaW50NjQoMTIzKS5jcmVhdG9yKQoJaW50IDEyMwoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJbG9nCglyZXRzdWIKCi8vIGJ6ZXJvRnVuY3Rpb24oKXZvaWQKKmFiaV9yb3V0ZV9iemVyb0Z1bmN0aW9uOgoJLy8gZXhlY3V0ZSBiemVyb0Z1bmN0aW9uKCl2b2lkCgljYWxsc3ViIGJ6ZXJvRnVuY3Rpb24KCWludCAxCglyZXR1cm4KCi8vIGJ6ZXJvRnVuY3Rpb24oKTogdm9pZApiemVyb0Z1bmN0aW9uOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTM0CgkvLyB4OiBieXRlcyA9IGJ6ZXJvKDIpCglieXRlIDB4MDAwMAoJZnJhbWVfYnVyeSAwIC8vIHg6IGJ5dGVzCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMzUKCS8vIHk6IGJ5dGVzID0gYnplcm8obikKCWludCAxCgliemVybwoJZnJhbWVfYnVyeSAxIC8vIHk6IGJ5dGVzCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMzYKCS8vIHo6IFt1aW50NjQsIHVpbnQ8OD5dID0gYnplcm88W3VpbnQ2NCwgdWludDw4Pl0+KCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAKCWZyYW1lX2J1cnkgMiAvLyB6OiBbdWludDY0LCB1aW50PDg+XQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTM3CgkvLyBhc3NlcnQobGVuKHggKyB5ICsgeikgPT09IDEyKQoJYnl0ZSAweDAwMDAgLy8geDogYnl0ZXMKCWZyYW1lX2RpZyAxIC8vIHk6IGJ5dGVzCgljb25jYXQKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAgLy8gejogW3VpbnQ2NCwgdWludDw4Pl0KCWNvbmNhdAoJbGVuCglpbnQgMTIKCT09Cglhc3NlcnQKCXJldHN1YgoKLy8gZXZlbnRzKCl2b2lkCiphYmlfcm91dGVfZXZlbnRzOgoJLy8gZXhlY3V0ZSBldmVudHMoKXZvaWQKCWNhbGxzdWIgZXZlbnRzCglpbnQgMQoJcmV0dXJuCgovLyBldmVudHMoKTogdm9pZApldmVudHM6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE1MgoJLy8gdGhpcy5teUV2ZW50LmxvZyh7IGFwcDogdGhpcy5hcHAsIG51bTogMSB9KQoJYnl0ZSAweDg3NTI4MTk2IC8vIG15RXZlbnQodWludDY0LHVpbnQ2NCkKCXR4bmEgQXBwbGljYXRpb25zIDAKCWl0b2IKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxCgljb25jYXQKCWNvbmNhdAoJbG9nCglyZXRzdWIKCi8vIGxldE9wdGltaXphdGlvbih1aW50NjRbXSl1aW50NjRbXQoqYWJpX3JvdXRlX2xldE9wdGltaXphdGlvbjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYTogdWludDY0W10KCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSBsZXRPcHRpbWl6YXRpb24odWludDY0W10pdWludDY0W10KCWNhbGxzdWIgbGV0T3B0aW1pemF0aW9uCglkdXAKCWxlbgoJaW50IDgKCS8KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBsZXRPcHRpbWl6YXRpb24oYTogdWludDY0W10pOiB1aW50NjRbXQpsZXRPcHRpbWl6YXRpb246Cglwcm90byAxIDEKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE1NgoJLy8gYXNzZXJ0KGFbMF0pCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJYXNzZXJ0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxNTgKCS8vIGIgPSBbMSwgMiwgM10KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDMKCWZyYW1lX2J1cnkgLTEgLy8gYjogdWludDY0W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE2MAoJLy8gcmV0dXJuIGI7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCXJldHN1YgoKLy8gc3RhdGljQ29udHJhY3RQcm9wZXJ0aWVzKCl2b2lkCiphYmlfcm91dGVfc3RhdGljQ29udHJhY3RQcm9wZXJ0aWVzOgoJLy8gZXhlY3V0ZSBzdGF0aWNDb250cmFjdFByb3BlcnRpZXMoKXZvaWQKCWNhbGxzdWIgc3RhdGljQ29udHJhY3RQcm9wZXJ0aWVzCglpbnQgMQoJcmV0dXJuCgovLyBzdGF0aWNDb250cmFjdFByb3BlcnRpZXMoKTogdm9pZApzdGF0aWNDb250cmFjdFByb3BlcnRpZXM6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE2NAoJLy8gc2VuZEFwcENhbGwoewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uTm9PcCwKCS8vICAgICAgIGFwcHJvdmFsUHJvZ3JhbTogRHVtbXlDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBEdW1teUNvbnRyYWN0LmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgICAgbG9jYWxOdW1CeXRlU2xpY2U6IER1bW15Q29udHJhY3Quc2NoZW1hLmxvY2FsLm51bUJ5dGVTbGljZSwKCS8vICAgICAgIGxvY2FsTnVtVWludDogRHVtbXlDb250cmFjdC5zY2hlbWEubG9jYWwubnVtVWludCwKCS8vICAgICAgIGdsb2JhbE51bUJ5dGVTbGljZTogRHVtbXlDb250cmFjdC5zY2hlbWEuZ2xvYmFsLm51bUJ5dGVTbGljZSwKCS8vICAgICAgIGdsb2JhbE51bVVpbnQ6IER1bW15Q29udHJhY3Quc2NoZW1hLmdsb2JhbC5udW1VaW50LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTY1CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5Ob09wCglpbnQgMCAvLyBOb09wCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTY2CgkvLyBhcHByb3ZhbFByb2dyYW06IER1bW15Q29udHJhY3QuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENqRVlGSUVHQ3pFWkNJME1BQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFJRUJRNEFFdUVSN05qWWFBSTRCLy9BQQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE2NwoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IER1bW15Q29udHJhY3QuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE2OAoJLy8gbG9jYWxOdW1CeXRlU2xpY2U6IER1bW15Q29udHJhY3Quc2NoZW1hLmxvY2FsLm51bUJ5dGVTbGljZQoJaW50IDAKCWl0eG5fZmllbGQgTG9jYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE2OQoJLy8gbG9jYWxOdW1VaW50OiBEdW1teUNvbnRyYWN0LnNjaGVtYS5sb2NhbC5udW1VaW50CglpbnQgMAoJaXR4bl9maWVsZCBMb2NhbE51bVVpbnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE3MAoJLy8gZ2xvYmFsTnVtQnl0ZVNsaWNlOiBEdW1teUNvbnRyYWN0LnNjaGVtYS5nbG9iYWwubnVtQnl0ZVNsaWNlCglpbnQgMAoJaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE3MQoJLy8gZ2xvYmFsTnVtVWludDogRHVtbXlDb250cmFjdC5zY2hlbWEuZ2xvYmFsLm51bVVpbnQKCWludCAwCglpdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIG51bWJlclRvU3RyaW5nKCl2b2lkCiphYmlfcm91dGVfbnVtYmVyVG9TdHJpbmc6CgkvLyBleGVjdXRlIG51bWJlclRvU3RyaW5nKCl2b2lkCgljYWxsc3ViIG51bWJlclRvU3RyaW5nCglpbnQgMQoJcmV0dXJuCgovLyBudW1iZXJUb1N0cmluZygpOiB2b2lkCm51bWJlclRvU3RyaW5nOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxNzgKCS8vIGFzc2VydChuLnRvU3RyaW5nKCkgPT09IHMpCglpbnQgMQoJY2FsbHN1YiAqaXRvYQoJYnl0ZSAiMSIKCT09Cglhc3NlcnQKCXJldHN1YgoKLy8gbWV0aG9kT25QYXJlbnMoKXZvaWQKKmFiaV9yb3V0ZV9tZXRob2RPblBhcmVuczoKCS8vIGV4ZWN1dGUgbWV0aG9kT25QYXJlbnMoKXZvaWQKCWNhbGxzdWIgbWV0aG9kT25QYXJlbnMKCWludCAxCglyZXR1cm4KCi8vIG1ldGhvZE9uUGFyZW5zKCk6IHZvaWQKbWV0aG9kT25QYXJlbnM6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE4MgoJLy8gYXNzZXJ0KCgxICsgMikudG9TdHJpbmcoKSA9PT0gJzMnKQoJaW50IDMKCWNhbGxzdWIgKml0b2EKCWJ5dGUgMHgzMyAvLyAiMyIKCT09Cglhc3NlcnQKCXJldHN1YgoKLy8gc3RyaW5nU3Vic3RyaW5nKCl2b2lkCiphYmlfcm91dGVfc3RyaW5nU3Vic3RyaW5nOgoJLy8gZXhlY3V0ZSBzdHJpbmdTdWJzdHJpbmcoKXZvaWQKCWNhbGxzdWIgc3RyaW5nU3Vic3RyaW5nCglpbnQgMQoJcmV0dXJuCgovLyBzdHJpbmdTdWJzdHJpbmcoKTogdm9pZApzdHJpbmdTdWJzdHJpbmc6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE4NwoJLy8gYXNzZXJ0KHMuc3Vic3RyaW5nKDEsIDMpID09PSAnYmMnKQoJYnl0ZSAiYWJjZGVmIgoJc3Vic3RyaW5nIDEgMwoJYnl0ZSAweDYyNjMgLy8gImJjIgoJPT0KCWFzc2VydAoJcmV0c3ViCgovLyBpZFByb3BlcnR5KCl2b2lkCiphYmlfcm91dGVfaWRQcm9wZXJ0eToKCS8vIGV4ZWN1dGUgaWRQcm9wZXJ0eSgpdm9pZAoJY2FsbHN1YiBpZFByb3BlcnR5CglpbnQgMQoJcmV0dXJuCgovLyBpZFByb3BlcnR5KCk6IHZvaWQKaWRQcm9wZXJ0eToKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE5MQoJLy8gYXBwID0gQXBwSUQuemVyb0luZGV4CglpbnQgMAoJZnJhbWVfYnVyeSAwIC8vIGFwcDogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxOTIKCS8vIGFzc2VydChBcHBJRC5mcm9tVWludDY0KGFwcC5pZCkgPT09IGFwcCkKCWludCAwIC8vIGFwcDogdWludDY0CglkdXAKCT09Cglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE5NAoJLy8gYXNhID0gQXNzZXRJRC56ZXJvSW5kZXgKCWludCAwCglmcmFtZV9idXJ5IDEgLy8gYXNhOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE5NQoJLy8gYXNzZXJ0KEFzc2V0SUQuZnJvbVVpbnQ2NChhc2EuaWQpID09PSBhc2EpCglpbnQgMCAvLyBhc2E6IHVpbnQ2NAoJZHVwCgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIHNjcmF0Y2hTbG90KCl2b2lkCiphYmlfcm91dGVfc2NyYXRjaFNsb3Q6CgkvLyBleGVjdXRlIHNjcmF0Y2hTbG90KCl2b2lkCgljYWxsc3ViIHNjcmF0Y2hTbG90CglpbnQgMQoJcmV0dXJuCgovLyBzY3JhdGNoU2xvdCgpOiB2b2lkCnNjcmF0Y2hTbG90OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxOTkKCS8vIHRoaXMuc2NyYXRjaC52YWx1ZSA9IDEzMzcKCWludCAxMzM3CglzdG9yZSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyMDAKCS8vIGFzc2VydCh0aGlzLnNjcmF0Y2gudmFsdWUgPT09IDEzMzcpCglsb2FkIDAKCWludCAxMzM3Cgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIGVjZHNhKCl2b2lkCiphYmlfcm91dGVfZWNkc2E6CgkvLyBleGVjdXRlIGVjZHNhKCl2b2lkCgljYWxsc3ViIGVjZHNhCglpbnQgMQoJcmV0dXJuCgovLyBlY2RzYSgpOiB2b2lkCmVjZHNhOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjA0CgkvLyBlY2RzYVZlcmlmeSgnU2VjcDI1NmsxJywgJycgYXMgYnl0ZXMzMiwgJycgYXMgYnl0ZXMzMiwgJycgYXMgYnl0ZXMzMiwgJycgYXMgYnl0ZXMzMiwgJycgYXMgYnl0ZXMzMikKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC8vICIiCglkdXBuIDQKCWVjZHNhX3ZlcmlmeSBTZWNwMjU2azEKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjIwNQoJLy8gZCA9IGVjZHNhUGtEZWNvbXByZXNzKCdTZWNwMjU2azEnLCAnJyBhcyBieXRlczwzMz4pCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC8vICIiCgllY2RzYV9wa19kZWNvbXByZXNzIFNlY3AyNTZrMQoJZnJhbWVfYnVyeSAyIC8vIGQgeSBjb21wb25lbnQ6IGJ5dGVbXQoJZnJhbWVfYnVyeSAzIC8vIGQgeCBjb21wb25lbnQ6IGJ5dGVbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjA2CgkvLyBsb2coZC55KQoJZnJhbWVfZGlnIDIgLy8gZCB5IGNvbXBvbmVudDogYnl0ZVtdCglsb2cKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjIwNwoJLy8gbG9nKGQueCkKCWZyYW1lX2RpZyAzIC8vIGQgeCBjb21wb25lbnQ6IGJ5dGVbXQoJbG9nCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyMDkKCS8vIHIgPSBlY2RzYVBrUmVjb3ZlcignU2VjcDI1NmsxJywgJycgYXMgYnl0ZXMzMiwgMSwgJycgYXMgYnl0ZXMzMiwgJycgYXMgYnl0ZXMzMikKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC8vICIiCglpbnQgMQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLy8gIiIKCWR1cAoJZWNkc2FfcGtfcmVjb3ZlciBTZWNwMjU2azEKCWZyYW1lX2J1cnkgNiAvLyByIHkgY29tcG9uZW50OiBieXRlW10KCWZyYW1lX2J1cnkgNyAvLyByIHggY29tcG9uZW50OiBieXRlW10KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjIxMAoJLy8gbG9nKHIueSkKCWZyYW1lX2RpZyA2IC8vIHIgeSBjb21wb25lbnQ6IGJ5dGVbXQoJbG9nCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyMTEKCS8vIGxvZyhyLngpCglmcmFtZV9kaWcgNyAvLyByIHggY29tcG9uZW50OiBieXRlW10KCWxvZwoJcmV0c3ViCgovLyB2ZXJpZnlUeG5UeXBlcygpdm9pZAoqYWJpX3JvdXRlX3ZlcmlmeVR4blR5cGVzOgoJLy8gZXhlY3V0ZSB2ZXJpZnlUeG5UeXBlcygpdm9pZAoJY2FsbHN1YiB2ZXJpZnlUeG5UeXBlcwoJaW50IDEKCXJldHVybgoKLy8gdmVyaWZ5VHhuVHlwZXMoKTogdm9pZAp2ZXJpZnlUeG5UeXBlczoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjE1CgkvLyB2ZXJpZnlQYXlUeG4odGhpcy50eG5Hcm91cFswXSwgewoJLy8gICAgICAgYW1vdW50OiB7IGdyZWF0ZXJUaGFuOiAwIH0sCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBwYXkKCWludCAwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InRoaXMudHhuR3JvdXBbMF0iLCJmaWVsZCI6InR5cGVFbnVtIiwiZXhwZWN0ZWQiOiJwYXkifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFtb3VudAoJaW50IDAKCWd0eG5zIEFtb3VudAoJaW50IDAKCT4KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InRoaXMudHhuR3JvdXBbMF0iLCJmaWVsZCI6ImFtb3VudCIsImNvbmRpdGlvbiI6ImdyZWF0ZXJUaGFuIiwiZXhwZWN0ZWQiOiI+MCJ9Cglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjIxOQoJLy8gdmVyaWZ5QXBwQ2FsbFR4bih0aGlzLnR4bkdyb3VwWzBdLCB7CgkvLyAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KDApLAoJLy8gICAgICAgYXBwbGljYXRpb25BcmdzOiB7CgkvLyAgICAgICAgIDA6ICdmb28nLAoJLy8gICAgICAgICAxOiB7CgkvLyAgICAgICAgICAgaW5jbHVkZWRJbjogWydiYXInLCAnYmF6J10sCgkvLyAgICAgICAgIH0sCgkvLyAgICAgICB9LAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXBwbAoJaW50IDAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXBwbAoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InRoaXMudHhuR3JvdXBbMF0iLCJmaWVsZCI6InR5cGVFbnVtIiwiZXhwZWN0ZWQiOiJhcHBsIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhcHBsaWNhdGlvbklECglpbnQgMAoJZ3R4bnMgQXBwbGljYXRpb25JRAoJaW50IDAKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4bkdyb3VwWzBdIiwiZmllbGQiOiJhcHBsaWNhdGlvbklEIiwiZXhwZWN0ZWQiOiJBcHBJRC5mcm9tVWludDY0KDApIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhcHBsaWNhdGlvbkFyZ3MKCS8vIHZlcmlmeSBhcHBsaWNhdGlvbkFyZ3MgMAoJaW50IDAKCWd0eG5zIEFwcGxpY2F0aW9uQXJncyAwCglieXRlIDB4NjY2ZjZmIC8vICJmb28iCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidGhpcy50eG5Hcm91cFswXSIsImZpZWxkIjoiYXBwbGljYXRpb25BcmdzIiwiaW5kZXgiOiIwIiwiZXhwZWN0ZWQiOiInZm9vJyJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYXBwbGljYXRpb25BcmdzIDEKCWludCAwCglndHhucyBBcHBsaWNhdGlvbkFyZ3MgMQoJYnl0ZSAweDYyNjE3MiAvLyAiYmFyIgoJPT0KCWludCAwCglndHhucyBBcHBsaWNhdGlvbkFyZ3MgMQoJYnl0ZSAweDYyNjE3YSAvLyAiYmF6IgoJPT0KCXx8CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOnsidHhuVGV4dCI6InRoaXMudHhuR3JvdXBbMF0ifSwiZmllbGQiOiJhcHBsaWNhdGlvbkFyZ3MgMSIsImNvbmRpdGlvbiI6ImluY2x1ZGVkSW4iLCJleHBlY3RlZCI6IlsnYmFyJywgJ2JheiddIn0KCWFzc2VydAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjI5CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKHRoaXMudHhuR3JvdXBbMF0sIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBheGZlcgoJaW50IDAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4bkdyb3VwWzBdIiwiZmllbGQiOiJ0eXBlRW51bSIsImV4cGVjdGVkIjoiYXhmZXIifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWludCAwCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InRoaXMudHhuR3JvdXBbMF0iLCJmaWVsZCI6ImFzc2V0UmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyMzMKCS8vIHZlcmlmeUFzc2V0Q29uZmlnVHhuKHRoaXMudHhuR3JvdXBbMF0sIHsKCS8vICAgICAgIGNvbmZpZ0Fzc2V0OiBBc3NldElELmZyb21VaW50NjQoMCksCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhY2ZnCglpbnQgMAoJZ3R4bnMgVHlwZUVudW0KCWludCBhY2ZnCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidGhpcy50eG5Hcm91cFswXSIsImZpZWxkIjoidHlwZUVudW0iLCJleHBlY3RlZCI6ImFjZmcifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGNvbmZpZ0Fzc2V0CglpbnQgMAoJZ3R4bnMgQ29uZmlnQXNzZXQKCWludCAwCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidGhpcy50eG5Hcm91cFswXSIsImZpZWxkIjoiY29uZmlnQXNzZXQiLCJleHBlY3RlZCI6IkFzc2V0SUQuZnJvbVVpbnQ2NCgwKSJ9Cglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjIzNwoJLy8gdmVyaWZ5S2V5UmVnVHhuKHRoaXMudHhuR3JvdXBbMF0sIHsKCS8vICAgICAgIHZvdGVGaXJzdDogMTMzNywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGtleXJlZwoJaW50IDAKCWd0eG5zIFR5cGVFbnVtCglpbnQga2V5cmVnCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidGhpcy50eG5Hcm91cFswXSIsImZpZWxkIjoidHlwZUVudW0iLCJleHBlY3RlZCI6ImtleXJlZyJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgdm90ZUZpcnN0CglpbnQgMAoJZ3R4bnMgVm90ZUZpcnN0CglpbnQgMTMzNwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InRoaXMudHhuR3JvdXBbMF0iLCJmaWVsZCI6InZvdGVGaXJzdCIsImV4cGVjdGVkIjoiMTMzNyJ9Cglhc3NlcnQKCXJldHN1YgoKLy8gc3RyaW5nUGx1c0VxdWFscygpdm9pZAoqYWJpX3JvdXRlX3N0cmluZ1BsdXNFcXVhbHM6CgkvLyBleGVjdXRlIHN0cmluZ1BsdXNFcXVhbHMoKXZvaWQKCWNhbGxzdWIgc3RyaW5nUGx1c0VxdWFscwoJaW50IDEKCXJldHVybgoKLy8gc3RyaW5nUGx1c0VxdWFscygpOiB2b2lkCnN0cmluZ1BsdXNFcXVhbHM6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjQzCgkvLyBzID0gJ2ZvbycKCWJ5dGUgMHg2NjZmNmYgLy8gImZvbyIKCWZyYW1lX2J1cnkgMCAvLyBzOiBieXRlW10KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI0NAoJLy8gcyArPSAnYmFyJwoJZnJhbWVfZGlnIDAgLy8gczogYnl0ZVtdCglieXRlIDB4NjI2MTcyIC8vICJiYXIiCgljb25jYXQKCWZyYW1lX2J1cnkgMCAvLyBzOiBieXRlW10KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI0NQoJLy8gYXNzZXJ0KHMgPT09ICdmb29iYXInKQoJZnJhbWVfZGlnIDAgLy8gczogYnl0ZVtdCglieXRlIDB4NjY2ZjZmNjI2MTcyIC8vICJmb29iYXIiCgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIGltcG9ydGVkUHJvZ3JhbSgpYnl0ZVtdCiphYmlfcm91dGVfaW1wb3J0ZWRQcm9ncmFtOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGltcG9ydGVkUHJvZ3JhbSgpYnl0ZVtdCgljYWxsc3ViIGltcG9ydGVkUHJvZ3JhbQoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBpbXBvcnRlZFByb2dyYW0oKTogYnl0ZXMKaW1wb3J0ZWRQcm9ncmFtOgoJcHJvdG8gMCAxCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyNDkKCS8vIHJldHVybiBJZlRlc3QuYXBwcm92YWxQcm9ncmFtKCk7CglieXRlIGI2NCBDaUFFQVFBQ0lDWUpCQlVmZkhVQ2FXWUVaV3h6WlFObGJtUUFBMlp2YndkbGJITmxJR2xtQ1dWc2MyVWdhV1lnTVFsbGJITmxJR2xtSURJeEdCU0JCZ3N4R1FpTkRBTWtBQUFBQUFBQUFBQUFBQU1XQUFBQUFBQUFBQUFBQUFBb05ob0JTUlVpRWtRalU0Z0FERWtWRmxjR0FreFFVTEFpUTRvQkFZdi9RUUFDS1lrcmlTZzJHZ0ZKRlNJU1JDTlRpQUFNU1JVV1Z3WUNURkJRc0NKRGlnRUJpLzlCQUFVcGlVSUFBaXFKaVNnMkdnSkpGU0lTUkNOVE5ob0JTUlVpRWtRalU0Z0FERWtWRmxjR0FreFFVTEFpUTRvQ0FZdi9RUUFGS1lsQ0FBaUwva0VBQXljR2lTdUpLRFlhQWtrVkloSkVJMU0yR2dGSkZTSVNSQ05UaUFBTVNSVVdWd1lDVEZCUXNDSkRpZ0lCaS85QkFBVXBpVUlBRFl2K1FRQUdKd2FKUWdBQ0tvbUpLRFlhQTBrVkloSkVJMU0yR2dKSkZTSVNSQ05UTmhvQlNSVWlFa1FqVTRnQURFa1ZGbGNHQWt4UVVMQWlRNG9EQVl2L1FRQUZLWWxDQUJPTC9rRUFCaWNIaVVJQUNJdjlRUUFESndpSks0a29OaG9EU1JVaUVrUWpVellhQWtrVkloSkVJMU0yR2dGSkZTSVNSQ05UaUFBTVNSVVdWd1lDVEZCUXNDSkRpZ01CaS85QkFBVXBpVUlBR0l2K1FRQUdKd2VKUWdBTmkvMUJBQVluQ0lsQ0FBSXFpWWtvTmhvQ1NSVWlFa1FqVXpZYUFVa1ZJaEpFSTFPSUFBeEpGUlpYQmdKTVVGQ3dJa09LQWdHTC8wRUFGb3YrUVFBTWdBbHVaWE4wWldRZ2FXYUpLWWxDQUFJcWlZa29OaG9CU1JVaUVrUWpVNGdBREVrVkZsY0dBa3hRVUxBaVE0b0JBWXYvUVFBRktZbENBQUlxaVlrb05ob0NTUlVpRWtRalV6WWFBVWtWSWhKRUkxT0lBQVVXVUxBaVE0b0NBWXYvUVFBRUlrSUFDNHYrUVFBRUpFSUFBb0VEaVNnMkdnRlhBZ0NJQUFVV1VMQWlRNG9CQVl2L0p3U3BRUUFDSW9ra2lTZzJHZ0ZYQWdDSUFBVVdVTEFpUTRvQkFZdi9Kd1NwUVFBRUlrSUFBU1NKTmhvQlNSVWtFa1FYaUFBQ0lrT0tBUUNML3ljRXFVRUFBeWNGc0lrMkdnSkpGU1FTUkJjMkdnRkpGU1FTUkJlSUFBSWlRNG9DQUl2L2kvNE9RUUFESndXd2lUWWFBa2tWSlJKRU5ob0JTUlVsRWtTSUFBSWlRNG9DQUl2L2kvNm1RUUFESndXd2lTZzJHZ0pKRlNJU1JDTlROaG9CU1JVaUVrUWpVNGdBREVrVkZsY0dBa3hRVUxBaVE0b0NBWXYvUVFBWmkvNUJBQTJBQjJFZ1lXNWtJR0tKUWdBRWdBRmhpVUlBRm92K1FRQUhnQUZpaVVJQUNvQUhibVZwZEdobGNvbUpJa09BQkxoRWV6WTJHZ0NPQWYveEFJQUVRMjdCd29BRUhIb05Yb0FFWGcrMno0QUVYaHhzVUlBRVdOQzZrb0FFWFM5UEFvQUVoRmNwMllBRWorZHNxSUFFR2p4NGVJQUVkTHpJYUlBRVFoTDVCWUFFbGQydXY0QUVNVWU0Wm9BRVFvbC9ZWUFFVTB2aXR6WWFBSTRQL0dEOGh2eXcvT3Y5S3YxNi9jNytFLzQ5L25MK2tQNncvczMrOC84WEFBPT0KCXJldHN1YgoKLy8gY2FsbFByaXZhdGVEZWZpbmVkTGF0ZXIoKXZvaWQKKmFiaV9yb3V0ZV9jYWxsUHJpdmF0ZURlZmluZWRMYXRlcjoKCS8vIGV4ZWN1dGUgY2FsbFByaXZhdGVEZWZpbmVkTGF0ZXIoKXZvaWQKCWNhbGxzdWIgY2FsbFByaXZhdGVEZWZpbmVkTGF0ZXIKCWludCAxCglyZXR1cm4KCi8vIGNhbGxQcml2YXRlRGVmaW5lZExhdGVyKCk6IHZvaWQKY2FsbFByaXZhdGVEZWZpbmVkTGF0ZXI6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI1MwoJLy8gbG9nKHRoaXMucHJpdmF0ZU1ldGhvZCgnaGVsbG8nKSkKCWJ5dGUgMHg2ODY1NmM2YzZmIC8vICJoZWxsbyIKCWNhbGxzdWIgcHJpdmF0ZU1ldGhvZAoJbG9nCglyZXRzdWIKCi8vIHByaXZhdGVNZXRob2QobXNnOiBzdHJpbmcpOiBzdHJpbmcKcHJpdmF0ZU1ldGhvZDoKCXByb3RvIDEgMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjU3CgkvLyByZXR1cm4gbXNnOwoJZnJhbWVfZGlnIC0xIC8vIG1zZzogc3RyaW5nCglyZXRzdWIKCi8vIGludGVyYWxQdWJsaWNNZXRob2QodWludDY0LHVpbnQ2NCl1aW50NjQKKmFiaV9yb3V0ZV9pbnRlcmFsUHVibGljTWV0aG9kOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBiOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyBhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGludGVyYWxQdWJsaWNNZXRob2QodWludDY0LHVpbnQ2NCl1aW50NjQKCWNhbGxzdWIgaW50ZXJhbFB1YmxpY01ldGhvZAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGludGVyYWxQdWJsaWNNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQKaW50ZXJhbFB1YmxpY01ldGhvZDoKCXByb3RvIDIgMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjYxCgkvLyByZXR1cm4gYSArIGI7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgkrCglyZXRzdWIKCi8vIGNhbGxJbnRlcm5hbFB1YmxpY01ldGhvZCgpdm9pZAoqYWJpX3JvdXRlX2NhbGxJbnRlcm5hbFB1YmxpY01ldGhvZDoKCS8vIGV4ZWN1dGUgY2FsbEludGVybmFsUHVibGljTWV0aG9kKCl2b2lkCgljYWxsc3ViIGNhbGxJbnRlcm5hbFB1YmxpY01ldGhvZAoJaW50IDEKCXJldHVybgoKLy8gY2FsbEludGVybmFsUHVibGljTWV0aG9kKCk6IHZvaWQKY2FsbEludGVybmFsUHVibGljTWV0aG9kOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyNjUKCS8vIGFzc2VydCh0aGlzLmludGVyYWxQdWJsaWNNZXRob2QoMSwgMikgPT09IDMpCglpbnQgMgoJaW50IDEKCWNhbGxzdWIgaW50ZXJhbFB1YmxpY01ldGhvZAoJaW50IDMKCT09Cglhc3NlcnQKCXJldHN1YgoKLy8gYXBwTG9hZFNjcmF0Y2goKXZvaWQKKmFiaV9yb3V0ZV9hcHBMb2FkU2NyYXRjaDoKCS8vIGV4ZWN1dGUgYXBwTG9hZFNjcmF0Y2goKXZvaWQKCWNhbGxzdWIgYXBwTG9hZFNjcmF0Y2gKCWludCAxCglyZXR1cm4KCi8vIGFwcExvYWRTY3JhdGNoKCk6IHZvaWQKYXBwTG9hZFNjcmF0Y2g6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI2OQoJLy8gbG9nKHRoaXMudHhuR3JvdXBbMV0ubG9hZFNjcmF0Y2goMikgYXMgYnl0ZXMpCglnbG9hZCAxIDIKCWxvZwoJcmV0c3ViCgovLyB1aW50TldpdGhVbmRlcnNjb3JlKCl1aW50MjU2CiphYmlfcm91dGVfdWludE5XaXRoVW5kZXJzY29yZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSB1aW50TldpdGhVbmRlcnNjb3JlKCl1aW50MjU2CgljYWxsc3ViIHVpbnROV2l0aFVuZGVyc2NvcmUKCWR1cAoJYml0bGVuCglpbnQgMjU2Cgk8PQoKCS8vIHVpbnROV2l0aFVuZGVyc2NvcmUgcmV0dXJuIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyB1aW50TldpdGhVbmRlcnNjb3JlKCk6IHVpbnQyNTYKdWludE5XaXRoVW5kZXJzY29yZToKCXByb3RvIDAgMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjczCgkvLyByZXR1cm4gPHVpbnQyNTY+MTIzXzQ1NjsKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFlMjQwCglyZXRzdWIKCi8vIG9wVXAoKXZvaWQKKmFiaV9yb3V0ZV9vcFVwOgoJLy8gZXhlY3V0ZSBvcFVwKCl2b2lkCgljYWxsc3ViIG9wVXAKCWludCAxCglyZXR1cm4KCi8vIG9wVXAoKTogdm9pZApvcFVwOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI3NwoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6Mjc4CgkvLyBmb3IgKGxldCBpID0gMTsgaSA8IDc1OyBpICs9IDEpCglpbnQgMQoJZnJhbWVfYnVyeSAwIC8vIGk6IHVpbnQ2NAoKKmZvcl8wOgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyNzgKCS8vIGkgPCA3NQoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpbnQgNzUKCTwKCWJ6ICpmb3JfMF9lbmQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI3OQoJLy8gYXNzZXJ0KGkpCglmcmFtZV9kaWcgMCAvLyBpOiB1aW50NjQKCWFzc2VydAoKKmZvcl8wX2NvbnRpbnVlOgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyNzgKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAwIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzAKCipmb3JfMF9lbmQ6CglyZXRzdWIKCi8vIHJldHVyblZhbHVlT25Bc3NpZ25tZW50KClzdHJpbmcKKmFiaV9yb3V0ZV9yZXR1cm5WYWx1ZU9uQXNzaWdubWVudDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSByZXR1cm5WYWx1ZU9uQXNzaWdubWVudCgpc3RyaW5nCgljYWxsc3ViIHJldHVyblZhbHVlT25Bc3NpZ25tZW50CglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIHJldHVyblZhbHVlT25Bc3NpZ25tZW50KCk6IHN0cmluZwpyZXR1cm5WYWx1ZU9uQXNzaWdubWVudDoKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyODQKCS8vIG1lc3NhZ2UgPSAnaGknCglieXRlIDB4Njg2OSAvLyAiaGkiCglmcmFtZV9idXJ5IDAgLy8gbWVzc2FnZTogYnl0ZVtdCgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6Mjg2CgkvLyB0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMuYXBwLmFkZHJlc3MKCXR4biBTZW5kZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6Mjg3CgkvLyBtZXNzYWdlID0gJ2luIGJsb2NrJwoJYnl0ZSAweDY5NmUyMDYyNmM2ZjYzNmIgLy8gImluIGJsb2NrIgoJZnJhbWVfYnVyeSAwIC8vIG1lc3NhZ2U6IGJ5dGVbXQoKKmlmMF9lbmQ6CgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI5MAoJLy8gcmV0dXJuIChtZXNzYWdlID0gJ2J5ZScpOwoJYnl0ZSAweDYyNzk2NSAvLyAiYnllIgoJZHVwCglmcmFtZV9idXJ5IDAgLy8gbWVzc2FnZTogYnl0ZVtdCgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIHJldHVybkFycmF5VmFsdWVPbkFzc2lnbm1lbnQoKXVpbnQ2NAoqYWJpX3JvdXRlX3JldHVybkFycmF5VmFsdWVPbkFzc2lnbm1lbnQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgcmV0dXJuQXJyYXlWYWx1ZU9uQXNzaWdubWVudCgpdWludDY0CgljYWxsc3ViIHJldHVybkFycmF5VmFsdWVPbkFzc2lnbm1lbnQKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyByZXR1cm5BcnJheVZhbHVlT25Bc3NpZ25tZW50KCk6IHVpbnQ2NApyZXR1cm5BcnJheVZhbHVlT25Bc3NpZ25tZW50OgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI5NAoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsxLCAyLCAzXQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMwoJZnJhbWVfYnVyeSAwIC8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI5NgoJLy8gcmV0dXJuIChhWzBdID0gNCk7CglmcmFtZV9kaWcgMCAvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+CglpbnQgMAoJaW50IDQKCWR1cAoJc3RvcmUgMjQ1IC8vIGFzc2lnbm1lbnQgdmFsdWUKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDAgLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPgoJbG9hZCAyNDUgLy8gYXNzaWdubWVudCB2YWx1ZQoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyByZXR1cm5TdG9yYWdlVmFsdWVPbkFzc2lnbm1lbnQoKXVpbnQ2NAoqYWJpX3JvdXRlX3JldHVyblN0b3JhZ2VWYWx1ZU9uQXNzaWdubWVudDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSByZXR1cm5TdG9yYWdlVmFsdWVPbkFzc2lnbm1lbnQoKXVpbnQ2NAoJY2FsbHN1YiByZXR1cm5TdG9yYWdlVmFsdWVPbkFzc2lnbm1lbnQKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyByZXR1cm5TdG9yYWdlVmFsdWVPbkFzc2lnbm1lbnQoKTogdWludDY0CnJldHVyblN0b3JhZ2VWYWx1ZU9uQXNzaWdubWVudDoKCXByb3RvIDAgMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzAwCgkvLyB0aGlzLmdLZXkudmFsdWUgPSAxCglieXRlIDB4Njc0YjY1NzkgLy8gImdLZXkiCglpbnQgMQoJYXBwX2dsb2JhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMwMgoJLy8gcmV0dXJuICh0aGlzLmdLZXkudmFsdWUgPSAyKTsKCWJ5dGUgMHg2NzRiNjU3OSAvLyAiZ0tleSIKCWludCAyCglkdXAKCXN0b3JlIDI0NSAvLyBhc3NpZ25tZW50IHZhbHVlCglhcHBfZ2xvYmFsX3B1dAoJbG9hZCAyNDUgLy8gYXNzaWdubWVudCB2YWx1ZQoJcmV0c3ViCgovLyByZXR1cm5PcGVyYXRvckFzc2lnbm1lbnRWYWx1ZSgpdWludDY0CiphYmlfcm91dGVfcmV0dXJuT3BlcmF0b3JBc3NpZ25tZW50VmFsdWU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgcmV0dXJuT3BlcmF0b3JBc3NpZ25tZW50VmFsdWUoKXVpbnQ2NAoJY2FsbHN1YiByZXR1cm5PcGVyYXRvckFzc2lnbm1lbnRWYWx1ZQoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIHJldHVybk9wZXJhdG9yQXNzaWdubWVudFZhbHVlKCk6IHVpbnQ2NApyZXR1cm5PcGVyYXRvckFzc2lnbm1lbnRWYWx1ZToKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozMDYKCS8vIGEgPSAxCglpbnQgMQoJZnJhbWVfYnVyeSAwIC8vIGE6IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzA4CgkvLyByZXR1cm4gKGEgKz0gMik7CglmcmFtZV9kaWcgMCAvLyBhOiB1aW50NjQKCWludCAyCgkrCglkdXAKCXN0b3JlIDI0NSAvLyBhc3NpZ25tZW50IHZhbHVlCglmcmFtZV9idXJ5IDAgLy8gYTogdWludDY0Cglsb2FkIDI0NSAvLyBhc3NpZ25tZW50IHZhbHVlCgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIHJldHVybkFycmF5VmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCgpdWludDY0CiphYmlfcm91dGVfcmV0dXJuQXJyYXlWYWx1ZU9uT3BlcmF0b3JBc3NpZ25tZW50OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIHJldHVybkFycmF5VmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCgpdWludDY0CgljYWxsc3ViIHJldHVybkFycmF5VmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIHJldHVybkFycmF5VmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCgpOiB1aW50NjQKcmV0dXJuQXJyYXlWYWx1ZU9uT3BlcmF0b3JBc3NpZ25tZW50OgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMxMgoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsxLCAyLCAzXQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMwoJZnJhbWVfYnVyeSAwIC8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMxNAoJLy8gcmV0dXJuIChhWzBdICs9IDQpOwoJZnJhbWVfZGlnIDAgLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPgoJaW50IDAKCWZyYW1lX2RpZyAwIC8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4KCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZHVwCglzdG9yZSAyNDUgLy8gYXNzaWdubWVudCB2YWx1ZQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMCAvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+Cglsb2FkIDI0NSAvLyBhc3NpZ25tZW50IHZhbHVlCgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIHJldHVybkFycmF5SW5TdG9yYWdlVmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCgpdWludDY0CiphYmlfcm91dGVfcmV0dXJuQXJyYXlJblN0b3JhZ2VWYWx1ZU9uT3BlcmF0b3JBc3NpZ25tZW50OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIHJldHVybkFycmF5SW5TdG9yYWdlVmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCgpdWludDY0CgljYWxsc3ViIHJldHVybkFycmF5SW5TdG9yYWdlVmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIHJldHVybkFycmF5SW5TdG9yYWdlVmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCgpOiB1aW50NjQKcmV0dXJuQXJyYXlJblN0b3JhZ2VWYWx1ZU9uT3BlcmF0b3JBc3NpZ25tZW50OgoJcHJvdG8gMCAxCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozMTgKCS8vIHRoaXMuc3RvcmFnZUFycmF5LnZhbHVlID0gWzEsIDIsIDNdCglieXRlIDB4NzM3NDZmNzI2MTY3NjU0MTcyNzI2MTc5IC8vICJzdG9yYWdlQXJyYXkiCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzIwCgkvLyByZXR1cm4gKHRoaXMuc3RvcmFnZUFycmF5LnZhbHVlWzBdICs9IDQpOwoJYnl0ZSAweDczNzQ2ZjcyNjE2NzY1NDE3MjcyNjE3OSAvLyAic3RvcmFnZUFycmF5IgoJYXBwX2dsb2JhbF9nZXQKCWludCAwCglieXRlIDB4NzM3NDZmNzI2MTY3NjU0MTcyNzI2MTc5IC8vICJzdG9yYWdlQXJyYXkiCglhcHBfZ2xvYmFsX2dldAoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglkdXAKCXN0b3JlIDI0NSAvLyBhc3NpZ25tZW50IHZhbHVlCglpdG9iCglyZXBsYWNlMwoJYnl0ZSAweDczNzQ2ZjcyNjE2NzY1NDE3MjcyNjE3OSAvLyAic3RvcmFnZUFycmF5IgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCWxvYWQgMjQ1IC8vIGFzc2lnbm1lbnQgdmFsdWUKCXJldHN1YgoKLy8gY29uc3RzKCl2b2lkCiphYmlfcm91dGVfY29uc3RzOgoJLy8gZXhlY3V0ZSBjb25zdHMoKXZvaWQKCWNhbGxzdWIgY29uc3RzCglpbnQgMQoJcmV0dXJuCgovLyBjb25zdHMoKTogdm9pZApjb25zdHM6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMyNAoJLy8gYXNzZXJ0KFNUUklOR19DT05TVCA9PT0gJ2ZvbycpCglieXRlICJmb28iCglieXRlIDB4NjY2ZjZmIC8vICJmb28iCgk9PQoJYXNzZXJ0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozMjUKCS8vIGFzc2VydChOVU1fQ09OU1QgPT09IDEyMykKCWludCAxMjMKCWR1cAoJPT0KCWFzc2VydAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzI2CgkvLyBhc3NlcnQoTkVTVEVEX0NPTlNUID09PSAxMjMpCglpbnQgMTIzCglkdXAKCT09Cglhc3NlcnQKCXJldHN1YgoKLy8gYXNzZXJ0V2l0aE1lc3NhZ2UoKXZvaWQKKmFiaV9yb3V0ZV9hc3NlcnRXaXRoTWVzc2FnZToKCS8vIGV4ZWN1dGUgYXNzZXJ0V2l0aE1lc3NhZ2UoKXZvaWQKCWNhbGxzdWIgYXNzZXJ0V2l0aE1lc3NhZ2UKCWludCAxCglyZXR1cm4KCi8vIGFzc2VydFdpdGhNZXNzYWdlKCk6IHZvaWQKYXNzZXJ0V2l0aE1lc3NhZ2U6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMzMAoJLy8gYXNzZXJ0KGZhbHNlLCAndGhpcyBpcyBmYWxzZScpCglpbnQgMAoKCS8vIHRoaXMgaXMgZmFsc2UKCWFzc2VydAoJcmV0c3ViCgovLyBvcGNvZGVBbGlhc2VzKCl2b2lkCiphYmlfcm91dGVfb3Bjb2RlQWxpYXNlczoKCS8vIGV4ZWN1dGUgb3Bjb2RlQWxpYXNlcygpdm9pZAoJY2FsbHN1YiBvcGNvZGVBbGlhc2VzCglpbnQgMQoJcmV0dXJuCgovLyBvcGNvZGVBbGlhc2VzKCk6IHZvaWQKb3Bjb2RlQWxpYXNlczoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzM0CgkvLyBleHRyYWN0VWludDE2KGJ6ZXJvKDY0KSwgMCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJaW50IDAKCWV4dHJhY3RfdWludDE2CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozMzUKCS8vIGV4dHJhY3RVaW50MzIoYnplcm8oNjQpLCAwKQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglpbnQgMAoJZXh0cmFjdF91aW50MzIKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMzNgoJLy8gZXh0cmFjdFVpbnQ2NChiemVybyg2NCksIDApCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWludCAwCglleHRyYWN0X3VpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzM3CgkvLyBlZDI1NTE5VmVyaWZ5QmFyZShiemVybyg2NCksIGJ6ZXJvKDY0KSwgYnplcm8oMzIpKQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglkdXAKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCgllZDI1NTE5dmVyaWZ5X2JhcmUKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMzOAoJLy8gZWQyNTUxOVZlcmlmeShiemVybyg2NCksIGJ6ZXJvKDY0KSwgYnplcm8oMzIpKQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglkdXAKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCgllZDI1NTE5dmVyaWZ5CglyZXRzdWIKCi8vIHZyZlZlcmlmeU9wKCl2b2lkCiphYmlfcm91dGVfdnJmVmVyaWZ5T3A6CgkvLyBleGVjdXRlIHZyZlZlcmlmeU9wKCl2b2lkCgljYWxsc3ViIHZyZlZlcmlmeU9wCglpbnQgMQoJcmV0dXJuCgovLyB2cmZWZXJpZnlPcCgpOiB2b2lkCnZyZlZlcmlmeU9wOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzQyCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNDMKCS8vIGluY3JlYXNlT3Bjb2RlQnVkZ2V0KCkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWJ5dGUgYjY0IENvRUIgLy8gI3ByYWdtYSB2ZXJzaW9uIDEwOyBpbnQgMQoJZHVwCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoJaXR4bl9zdWJtaXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM0NAoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzQ1CgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNDYKCS8vIGluY3JlYXNlT3Bjb2RlQnVkZ2V0KCkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWJ5dGUgYjY0IENvRUIgLy8gI3ByYWdtYSB2ZXJzaW9uIDEwOyBpbnQgMQoJZHVwCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoJaXR4bl9zdWJtaXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM0NwoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzQ4CgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNDkKCS8vIGluY3JlYXNlT3Bjb2RlQnVkZ2V0KCkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWJ5dGUgYjY0IENvRUIgLy8gI3ByYWdtYSB2ZXJzaW9uIDEwOyBpbnQgMQoJZHVwCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoJaXR4bl9zdWJtaXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM1MAoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzUyCgkvLyByID0gdnJmVmVmaXJ5KCdWcmZBbGdvcmFuZCcsIGJ6ZXJvKDMyKSBhcyBieXRlcywgYnplcm8oODApLCBiemVybygzMikpCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCgl2cmZfdmVyaWZ5IFZyZkFsZ29yYW5kCglmcmFtZV9idXJ5IDIgLy8gciB2ZXJpZmllZDogYm9vbAoJZnJhbWVfYnVyeSAzIC8vIHIgb3V0cHV0OiBieXRlW10KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM1MwoJLy8gYXNzZXJ0KCFyLnZlcmlmaWVkKQoJZnJhbWVfZGlnIDIgLy8gciB2ZXJpZmllZDogYm9vbAoJIQoJYXNzZXJ0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNTQKCS8vIGxvZyhyLm91dHB1dCkKCWZyYW1lX2RpZyAzIC8vIHIgb3V0cHV0OiBieXRlW10KCWxvZwoJcmV0c3ViCgovLyBlY01hdGgoKXZvaWQKKmFiaV9yb3V0ZV9lY01hdGg6CgkvLyBleGVjdXRlIGVjTWF0aCgpdm9pZAoJY2FsbHN1YiBlY01hdGgKCWludCAxCglyZXR1cm4KCi8vIGVjTWF0aCgpOiB2b2lkCmVjTWF0aDoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNTgKCS8vIGVjU2NhbGFyTXVsKCdCTjI1NGcxJywgJycsICcnKQoJYnl0ZSAweCAvLyAiIgoJZHVwCgllY19zY2FsYXJfbXVsIEJOMjU0ZzEKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM1OQoJLy8gZWNQYWlyaW5nQ2hlY2soJ0JOMjU0ZzEnLCAnJywgJycpCglieXRlIDB4IC8vICIiCglkdXAKCWVjX3BhaXJpbmdfY2hlY2sgQk4yNTRnMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzYwCgkvLyBzY2FsYXJzOiBieXRlczMyW10gPSBbYnplcm8oMzIpLCBiemVybygzMildCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWZyYW1lX2J1cnkgMCAvLyBzY2FsYXJzOiBieXRlczMyW10KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM2MQoJLy8gZWNNdWx0aVNjYWxhck11bCgnQk4yNTRnMScsICcnLCBzY2FsYXJzKQoJYnl0ZSAweCAvLyAiIgoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC8vIHNjYWxhcnM6IGJ5dGVzMzJbXQoJZWNfbXVsdGlfc2NhbGFyX211bCBCTjI1NGcxCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNjIKCS8vIGVjU3ViZ3JvdXBDaGVjaygnQk4yNTRnMScsICcnKQoJYnl0ZSAweCAvLyAiIgoJZWNfc3ViZ3JvdXBfY2hlY2sgQk4yNTRnMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzYzCgkvLyBlY01hcFRvKCdCTjI1NGcxJywgJycpCglieXRlIDB4IC8vICIiCgllY19tYXBfdG8gQk4yNTRnMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzY0CgkvLyBlY0FkZCgnQk4yNTRnMScsICcnLCAnJykKCWJ5dGUgMHggLy8gIiIKCWR1cAoJZWNfYWRkIEJOMjU0ZzEKCXJldHN1YgoKLy8gZ2l0eG4oKXZvaWQKKmFiaV9yb3V0ZV9naXR4bjoKCS8vIGV4ZWN1dGUgZ2l0eG4oKXZvaWQKCWNhbGxzdWIgZ2l0eG4KCWludCAxCglyZXR1cm4KCi8vIGdpdHhuKCk6IHZvaWQKZ2l0eG46Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzY4CgkvLyBsb2codGhpcy5sYXN0SW5uZXJHcm91cFswXS5zZW5kZXIpCglnaXR4biAwIFNlbmRlcgoJbG9nCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNzAKCS8vIGFub3RoZXJUeG4gPSB0aGlzLmxhc3RJbm5lckdyb3VwWzFdCglpbnQgMQoJZnJhbWVfYnVyeSAwIC8vIGFub3RoZXJUeG46IGdpdHhuCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNzIKCS8vIGxvZyhhbm90aGVyVHhuLnNlbmRlcikKCWdpdHhuIDEgU2VuZGVyCglsb2cKCXJldHN1YgoKLy8gZ2V0U2V0Qnl0ZXMoKXZvaWQKKmFiaV9yb3V0ZV9nZXRTZXRCeXRlczoKCS8vIGV4ZWN1dGUgZ2V0U2V0Qnl0ZXMoKXZvaWQKCWNhbGxzdWIgZ2V0U2V0Qnl0ZXMKCWludCAxCglyZXR1cm4KCi8vIGdldFNldEJ5dGVzKCk6IHZvaWQKZ2V0U2V0Qnl0ZXM6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM3NgoJLy8gbG9nKHNldGJpdCgnZm9vJywgMCwgdHJ1ZSkpCglieXRlIDB4NjY2ZjZmIC8vICJmb28iCglpbnQgMAoJaW50IDEKCXNldGJpdAoJbG9nCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNzcKCS8vIGdldGJpdCgnZm9vJywgMCkKCWJ5dGUgMHg2NjZmNmYgLy8gImZvbyIKCWludCAwCglnZXRiaXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM3OAoJLy8gZ2V0Ynl0ZSgnZm9vJywgMCkKCWJ5dGUgMHg2NjZmNmYgLy8gImZvbyIKCWludCAwCglnZXRieXRlCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNzkKCS8vIHNldGJ5dGUoJ2ZvbycsIDAsIDEpCglieXRlIDB4NjY2ZjZmIC8vICJmb28iCglpbnQgMAoJaW50IDEKCXNldGJ5dGUKCXJldHN1YgoKLy8gZ2V0U2V0VWludDY0KCl2b2lkCiphYmlfcm91dGVfZ2V0U2V0VWludDY0OgoJLy8gZXhlY3V0ZSBnZXRTZXRVaW50NjQoKXZvaWQKCWNhbGxzdWIgZ2V0U2V0VWludDY0CglpbnQgMQoJcmV0dXJuCgovLyBnZXRTZXRVaW50NjQoKTogdm9pZApnZXRTZXRVaW50NjQ6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM4MwoJLy8gYXNzZXJ0KHNldGJpdCgxMjMsIDAsIHRydWUpKQoJaW50IDEyMwoJaW50IDAKCWludCAxCglzZXRiaXQKCWFzc2VydAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6Mzg0CgkvLyBnZXRiaXQoMTIzLCAwKQoJaW50IDEyMwoJaW50IDAKCWdldGJpdAoJcmV0c3ViCgovLyBibG9ja09wKCl2b2lkCiphYmlfcm91dGVfYmxvY2tPcDoKCS8vIGV4ZWN1dGUgYmxvY2tPcCgpdm9pZAoJY2FsbHN1YiBibG9ja09wCglpbnQgMQoJcmV0dXJuCgovLyBibG9ja09wKCk6IHZvaWQKYmxvY2tPcDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6Mzg4CgkvLyBsb2coYmxvY2tzW2dsb2JhbHMucm91bmQgLSAxXS5zZWVkKQoJZ2xvYmFsIFJvdW5kCglpbnQgMQoJLQoJYmxvY2sgQmxrU2VlZAoJbG9nCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozODkKCS8vIGFzc2VydChibG9ja3NbZ2xvYmFscy5yb3VuZCAtIDFdLnRpbWVzdGFtcCkKCWdsb2JhbCBSb3VuZAoJaW50IDEKCS0KCWJsb2NrIEJsa1RpbWVzdGFtcAoJYXNzZXJ0CglyZXRzdWIKCi8vIGI2NCgpdm9pZAoqYWJpX3JvdXRlX2I2NDoKCS8vIGV4ZWN1dGUgYjY0KCl2b2lkCgljYWxsc3ViIGI2NAoJaW50IDEKCXJldHVybgoKLy8gYjY0KCk6IHZvaWQKYjY0OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozOTMKCS8vIGxvZyhiYXNlNjREZWNvZGUoJ1N0ZEVuY29kaW5nJywgJycpKQoJYnl0ZSAweCAvLyAiIgoJYmFzZTY0X2RlY29kZSBTdGRFbmNvZGluZwoJbG9nCglyZXRzdWIKCi8vIGpzb24oKXZvaWQKKmFiaV9yb3V0ZV9qc29uOgoJLy8gZXhlY3V0ZSBqc29uKCl2b2lkCgljYWxsc3ViIGpzb24KCWludCAxCglyZXR1cm4KCi8vIGpzb24oKTogdm9pZApqc29uOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozOTcKCS8vIGxvZyhqc29uUmVmKCdKU09OT2JqZWN0JywgJycsICcnKSkKCWJ5dGUgMHggLy8gIiIKCWR1cAoJanNvbl9yZWYgSlNPTk9iamVjdAoJbG9nCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozOTgKCS8vIGxvZyhqc29uUmVmKCdKU09OU3RyaW5nJywgJycsICcnKSkKCWJ5dGUgMHggLy8gIiIKCWR1cAoJanNvbl9yZWYgSlNPTlN0cmluZwoJbG9nCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozOTkKCS8vIGFzc2VydChqc29uUmVmKCdKU09OVWludDY0JywgJycsICcnKSkKCWJ5dGUgMHggLy8gIiIKCWR1cAoJanNvbl9yZWYgSlNPTlVpbnQ2NAoJYXNzZXJ0CglyZXRzdWIKCi8vIGJpdGxlbk9wKCl2b2lkCiphYmlfcm91dGVfYml0bGVuT3A6CgkvLyBleGVjdXRlIGJpdGxlbk9wKCl2b2lkCgljYWxsc3ViIGJpdGxlbk9wCglpbnQgMQoJcmV0dXJuCgovLyBiaXRsZW5PcCgpOiB2b2lkCmJpdGxlbk9wOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0MDMKCS8vIGJpdGxlbigxMjMpCglpbnQgMTIzCgliaXRsZW4KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQwNAoJLy8gYml0bGVuKCdmb28nKQoJYnl0ZSAweDY2NmY2ZiAvLyAiZm9vIgoJYml0bGVuCglyZXRzdWIKCi8vIGNvbXB1dGVkQ29uc3QoKXZvaWQKKmFiaV9yb3V0ZV9jb21wdXRlZENvbnN0OgoJLy8gZXhlY3V0ZSBjb21wdXRlZENvbnN0KCl2b2lkCgljYWxsc3ViIGNvbXB1dGVkQ29uc3QKCWludCAxCglyZXR1cm4KCi8vIGNvbXB1dGVkQ29uc3QoKTogdm9pZApjb21wdXRlZENvbnN0OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0MDgKCS8vIGFzc2VydChDT01QVVRFRF9DT05TVCkKCWludCAyNDYKCWFzc2VydAoJcmV0c3ViCgovLyBtdWx0aUNvbXB1dGVkQ29uc3QoKXZvaWQKKmFiaV9yb3V0ZV9tdWx0aUNvbXB1dGVkQ29uc3Q6CgkvLyBleGVjdXRlIG11bHRpQ29tcHV0ZWRDb25zdCgpdm9pZAoJY2FsbHN1YiBtdWx0aUNvbXB1dGVkQ29uc3QKCWludCAxCglyZXR1cm4KCi8vIG11bHRpQ29tcHV0ZWRDb25zdCgpOiB2b2lkCm11bHRpQ29tcHV0ZWRDb25zdDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDEyCgkvLyBhc3NlcnQoTVVUTElfQ09NUFVURURfQ09OU1QpCglpbnQgMzAzODEKCWFzc2VydAoJcmV0c3ViCgovLyByZWFkU2NoZW1hKCl2b2lkCiphYmlfcm91dGVfcmVhZFNjaGVtYToKCS8vIGV4ZWN1dGUgcmVhZFNjaGVtYSgpdm9pZAoJY2FsbHN1YiByZWFkU2NoZW1hCglpbnQgMQoJcmV0dXJuCgovLyByZWFkU2NoZW1hKCk6IHZvaWQKcmVhZFNjaGVtYToKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDE2CgkvLyBhc3NlcnQoU2NoZW1hQ29udHJhY3Quc2NoZW1hLmdsb2JhbC5udW1VaW50ID09PSAxKQoJaW50IDEKCWR1cAoJPT0KCWFzc2VydAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDE3CgkvLyBhc3NlcnQoU2NoZW1hQ29udHJhY3Quc2NoZW1hLmdsb2JhbC5udW1CeXRlU2xpY2UgPT09IDIpCglpbnQgMgoJZHVwCgk9PQoJYXNzZXJ0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0MTgKCS8vIGFzc2VydChTY2hlbWFDb250cmFjdC5zY2hlbWEubG9jYWwubnVtVWludCA9PT0gMykKCWludCAzCglkdXAKCT09Cglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQxOQoJLy8gYXNzZXJ0KFNjaGVtYUNvbnRyYWN0LnNjaGVtYS5sb2NhbC5udW1CeXRlU2xpY2UgPT09IDQpCglpbnQgNAoJZHVwCgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIGNvbXBhcmlzb25PcigpYm9vbAoqYWJpX3JvdXRlX2NvbXBhcmlzb25PcjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBjb21wYXJpc29uT3IoKWJvb2wKCWNhbGxzdWIgY29tcGFyaXNvbk9yCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGNvbXBhcmlzb25PcigpOiBib29sZWFuCmNvbXBhcmlzb25PcjoKCXByb3RvIDAgMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDIzCgkvLyByZXR1cm4gdGhpcy50eG4uc2VuZGVyID09PSBnbG9iYWxzLnplcm9BZGRyZXNzIHx8IHRoaXMudHhuLnNlbmRlciA9PT0gZ2xvYmFscy56ZXJvQWRkcmVzczsKCXR4biBTZW5kZXIKCWdsb2JhbCBaZXJvQWRkcmVzcwoJPT0KCWR1cAoJYm56ICpza2lwX29yMAoJdHhuIFNlbmRlcgoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoJfHwKCipza2lwX29yMDoKCXJldHN1YgoKLy8gdHhuQXJnc01ldGhvZChwYXkpdm9pZAoqYWJpX3JvdXRlX3R4bkFyZ3NNZXRob2Q6CgkvLyBfcGF5MTogcGF5Cgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBwYXkKCT09CgoJLy8gYXJndW1lbnQgMCAoX3BheTEpIGZvciB0eG5BcmdzTWV0aG9kIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgdHhuQXJnc01ldGhvZChwYXkpdm9pZAoJY2FsbHN1YiB0eG5BcmdzTWV0aG9kCglpbnQgMQoJcmV0dXJuCgovLyB0eG5BcmdzTWV0aG9kKF9wYXkxOiBQYXlUeG4pOiB2b2lkCnR4bkFyZ3NNZXRob2Q6Cglwcm90byAxIDAKCXJldHN1YgoKLy8gY2FsbFR4bkFyZ3NNZXRob2QoKXZvaWQKKmFiaV9yb3V0ZV9jYWxsVHhuQXJnc01ldGhvZDoKCS8vIGV4ZWN1dGUgY2FsbFR4bkFyZ3NNZXRob2QoKXZvaWQKCWNhbGxzdWIgY2FsbFR4bkFyZ3NNZXRob2QKCWludCAxCglyZXR1cm4KCi8vIGNhbGxUeG5BcmdzTWV0aG9kKCk6IHZvaWQKY2FsbFR4bkFyZ3NNZXRob2Q6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQzMAoJLy8gc2VuZE1ldGhvZENhbGw8dHlwZW9mIEdlbmVyYWxUZXN0LnByb3RvdHlwZS50eG5BcmdzTWV0aG9kPih7CgkvLyAgICAgICBtZXRob2RBcmdzOiBbeyByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywgYW1vdW50OiAwIH1dLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0MzEKCS8vIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDMxCgkvLyBhbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9uZXh0CglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJ0eG5BcmdzTWV0aG9kKHBheSl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQzMQoJLy8gbWV0aG9kQXJnczogW3sgcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsIGFtb3VudDogMCB9XQoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBzdGF0aWNWYWx1ZUxlbih1aW50MjU2KXZvaWQKKmFiaV9yb3V0ZV9zdGF0aWNWYWx1ZUxlbjoKCS8vIHg6IHVpbnQyNTYKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMCAoeCkgZm9yIHN0YXRpY1ZhbHVlTGVuIG11c3QgYmUgYSB1aW50MjU2Cglhc3NlcnQKCgkvLyBleGVjdXRlIHN0YXRpY1ZhbHVlTGVuKHVpbnQyNTYpdm9pZAoJY2FsbHN1YiBzdGF0aWNWYWx1ZUxlbgoJaW50IDEKCXJldHVybgoKLy8gc3RhdGljVmFsdWVMZW4oeDogdWludDI1Nik6IHZvaWQKc3RhdGljVmFsdWVMZW46Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQzNgoJLy8gYXNzZXJ0KGxlbih4KSkKCWludCAzMgoJYXNzZXJ0CglyZXRzdWIKCi8vIHN0YXRpY1R5cGVMZW4oKXZvaWQKKmFiaV9yb3V0ZV9zdGF0aWNUeXBlTGVuOgoJLy8gZXhlY3V0ZSBzdGF0aWNUeXBlTGVuKCl2b2lkCgljYWxsc3ViIHN0YXRpY1R5cGVMZW4KCWludCAxCglyZXR1cm4KCi8vIHN0YXRpY1R5cGVMZW4oKTogdm9pZApzdGF0aWNUeXBlTGVuOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NDAKCS8vIGFzc2VydChsZW48dWludDI1Nj4oKSkKCWludCAzMgoJYXNzZXJ0CglyZXRzdWIKCi8vIGR5bmFtaWNTY3JhdGNoU2xvdCgpdm9pZAoqYWJpX3JvdXRlX2R5bmFtaWNTY3JhdGNoU2xvdDoKCS8vIGV4ZWN1dGUgZHluYW1pY1NjcmF0Y2hTbG90KCl2b2lkCgljYWxsc3ViIGR5bmFtaWNTY3JhdGNoU2xvdAoJaW50IDEKCXJldHVybgoKLy8gZHluYW1pY1NjcmF0Y2hTbG90KCk6IHZvaWQKZHluYW1pY1NjcmF0Y2hTbG90OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NDQKCS8vIHRoaXMuZHluYW1pY1NjcmF0Y2goMSkudmFsdWUgPSAxMzM3CglpbnQgMQoJaW50IDEzMzcKCXN0b3JlcwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDQ1CgkvLyBhc3NlcnQodGhpcy5keW5hbWljU2NyYXRjaCgxKS52YWx1ZSA9PT0gMTMzNykKCWludCAxCglsb2FkcwoJaW50IDEzMzcKCT09Cglhc3NlcnQKCXJldHN1YgoKLy8gaW5jcmVtZW50U2NyYXRjaFNsb3QoKXZvaWQKKmFiaV9yb3V0ZV9pbmNyZW1lbnRTY3JhdGNoU2xvdDoKCS8vIGV4ZWN1dGUgaW5jcmVtZW50U2NyYXRjaFNsb3QoKXZvaWQKCWNhbGxzdWIgaW5jcmVtZW50U2NyYXRjaFNsb3QKCWludCAxCglyZXR1cm4KCi8vIGluY3JlbWVudFNjcmF0Y2hTbG90KCk6IHZvaWQKaW5jcmVtZW50U2NyYXRjaFNsb3Q6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ0OQoJLy8gdGhpcy5zY3JhdGNoLnZhbHVlID0gMTMzNwoJaW50IDEzMzcKCXN0b3JlIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ1MAoJLy8gdGhpcy5zY3JhdGNoLnZhbHVlICs9IDEKCWxvYWQgMAoJaW50IDEKCSsKCXN0b3JlIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ1MQoJLy8gYXNzZXJ0KHRoaXMuc2NyYXRjaC52YWx1ZSA9PT0gMTMzOCkKCWxvYWQgMAoJaW50IDEzMzgKCT09Cglhc3NlcnQKCXJldHN1YgoKLy8gaW5jcmVtZW50RHluYW1pY1NjcmF0Y2hTbG90KCl2b2lkCiphYmlfcm91dGVfaW5jcmVtZW50RHluYW1pY1NjcmF0Y2hTbG90OgoJLy8gZXhlY3V0ZSBpbmNyZW1lbnREeW5hbWljU2NyYXRjaFNsb3QoKXZvaWQKCWNhbGxzdWIgaW5jcmVtZW50RHluYW1pY1NjcmF0Y2hTbG90CglpbnQgMQoJcmV0dXJuCgovLyBpbmNyZW1lbnREeW5hbWljU2NyYXRjaFNsb3QoKTogdm9pZAppbmNyZW1lbnREeW5hbWljU2NyYXRjaFNsb3Q6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ1NQoJLy8gdGhpcy5keW5hbWljU2NyYXRjaCgyKS52YWx1ZSA9IDEzMzcKCWludCAyCglpbnQgMTMzNwoJc3RvcmVzCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NTYKCS8vIHRoaXMuZHluYW1pY1NjcmF0Y2goMikudmFsdWUgKz0gMQoJaW50IDIKCWxvYWRzCglpbnQgMQoJKwoJaW50IDIKCXN3YXAKCXN0b3JlcwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDU3CgkvLyBhc3NlcnQodGhpcy5keW5hbWljU2NyYXRjaCgyKS52YWx1ZSA9PT0gMTMzOCkKCWludCAyCglsb2FkcwoJaW50IDEzMzgKCT09Cglhc3NlcnQKCXJldHN1YgoKLy8gZnJvbUFkZHJlc3MoKXZvaWQKKmFiaV9yb3V0ZV9mcm9tQWRkcmVzczoKCS8vIGV4ZWN1dGUgZnJvbUFkZHJlc3MoKXZvaWQKCWNhbGxzdWIgZnJvbUFkZHJlc3MKCWludCAxCglyZXR1cm4KCi8vIGZyb21BZGRyZXNzKCk6IHZvaWQKZnJvbUFkZHJlc3M6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDYxCgkvLyBhID0gQWRkcmVzcy5mcm9tQWRkcmVzcygnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVk1SEZLUScpCglhZGRyIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZNUhGS1EKCWZyYW1lX2J1cnkgMCAvLyBhOiBhZGRyZXNzCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NjIKCS8vIGFzc2VydChhID09PSBBZGRyZXNzLnplcm9BZGRyZXNzKQoJZnJhbWVfZGlnIDAgLy8gYTogYWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIGVhcmx5UmV0dXJuKHVpbnQ2NCl1aW50NjQKKmFiaV9yb3V0ZV9lYXJseVJldHVybjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBlYXJseVJldHVybih1aW50NjQpdWludDY0CgljYWxsc3ViIGVhcmx5UmV0dXJuCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZWFybHlSZXR1cm4oYTogdWludDY0KTogdWludDY0CmVhcmx5UmV0dXJuOgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NjYKCS8vIGEgPT09IDEKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWludCAxCgk9PQoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDY3CgkvLyByZXR1cm4gMjsKCWludCAyCgliICplYXJseVJldHVybipyZXR1cm4KCippZjFfZW5kOgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NjkKCS8vIGIgPSBhICsgMQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMCAvLyBiOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ3MAoJLy8gcmV0dXJuIGI7CglmcmFtZV9kaWcgMCAvLyBiOiB1aW50NjQKCiplYXJseVJldHVybipyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXNzZXRNZXRob2RBcmdzKCl2b2lkCiphYmlfcm91dGVfYXNzZXRNZXRob2RBcmdzOgoJLy8gZXhlY3V0ZSBhc3NldE1ldGhvZEFyZ3MoKXZvaWQKCWNhbGxzdWIgYXNzZXRNZXRob2RBcmdzCglpbnQgMQoJcmV0dXJuCgovLyBhc3NldE1ldGhvZEFyZ3MoKTogdm9pZAphc3NldE1ldGhvZEFyZ3M6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ3NAoJLy8gc2VuZE1ldGhvZENhbGw8W0Fzc2V0UmVmZXJlbmNlXSwgdm9pZD4oewoJLy8gICAgICAgbmFtZTogJ2ZvbycsCgkvLyAgICAgICBtZXRob2RBcmdzOiBbQXNzZXRJRC5mcm9tVWludDY0KDEpXSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiZm9vKGFzc2V0KXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDc2CgkvLyBtZXRob2RBcmdzOiBbQXNzZXRJRC5mcm9tVWludDY0KDEpXQoJaW50IDEKCWl0eG5fZmllbGQgQXNzZXRzCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIG11bHRpcGxlUHJvZ3JhbVBhZ2VzKCl2b2lkCiphYmlfcm91dGVfbXVsdGlwbGVQcm9ncmFtUGFnZXM6CgkvLyBleGVjdXRlIG11bHRpcGxlUHJvZ3JhbVBhZ2VzKCl2b2lkCgljYWxsc3ViIG11bHRpcGxlUHJvZ3JhbVBhZ2VzCglpbnQgMQoJcmV0dXJuCgovLyBtdWx0aXBsZVByb2dyYW1QYWdlcygpOiB2b2lkCm11bHRpcGxlUHJvZ3JhbVBhZ2VzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0ODUKCS8vIHNlbmRBcHBDYWxsKHsKCS8vICAgICAgIGFwcHJvdmFsUHJvZ3JhbTogW3RoaXMucGFnZU9uZS52YWx1ZSwgdGhpcy5wYWdlVHdvLnZhbHVlXSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBbdGhpcy5wYWdlT25lLnZhbHVlLCB0aGlzLnBhZ2VUd28udmFsdWVdLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDg2CgkvLyBhcHByb3ZhbFByb2dyYW06IFt0aGlzLnBhZ2VPbmUudmFsdWUsIHRoaXMucGFnZVR3by52YWx1ZV0KCWJ5dGUgMHg3MDYxNjc2NTRmNmU2NSAvLyAicGFnZU9uZSIKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMucGFnZU9uZS52YWx1ZQoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCglieXRlIDB4NzA2MTY3NjU1NDc3NmYgLy8gInBhZ2VUd28iCglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLnBhZ2VUd28udmFsdWUKCWFzc2VydAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDg3CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogW3RoaXMucGFnZU9uZS52YWx1ZSwgdGhpcy5wYWdlVHdvLnZhbHVlXQoJYnl0ZSAweDcwNjE2NzY1NGY2ZTY1IC8vICJwYWdlT25lIgoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5wYWdlT25lLnZhbHVlCglhc3NlcnQKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwoJYnl0ZSAweDcwNjE2NzY1NTQ3NzZmIC8vICJwYWdlVHdvIgoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5wYWdlVHdvLnZhbHVlCglhc3NlcnQKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXNzZXJ0Q29tbWVudCgpdm9pZAoqYWJpX3JvdXRlX2Fzc2VydENvbW1lbnQ6CgkvLyBleGVjdXRlIGFzc2VydENvbW1lbnQoKXZvaWQKCWNhbGxzdWIgYXNzZXJ0Q29tbWVudAoJaW50IDEKCXJldHVybgoKLy8gYXNzZXJ0Q29tbWVudCgpOiB2b2lkCmFzc2VydENvbW1lbnQ6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ5MgoJLy8gYXNzZXJ0KGZhbHNlLCAndGhpcyBpcyBmYWxzZScpCglpbnQgMAoKCS8vIHRoaXMgaXMgZmFsc2UKCWFzc2VydAoJcmV0c3ViCgovLyB0aHJvd0Vycm9yTWVzc2FnZSgpdm9pZAoqYWJpX3JvdXRlX3Rocm93RXJyb3JNZXNzYWdlOgoJLy8gZXhlY3V0ZSB0aHJvd0Vycm9yTWVzc2FnZSgpdm9pZAoJY2FsbHN1YiB0aHJvd0Vycm9yTWVzc2FnZQoJaW50IDEKCXJldHVybgoKLy8gdGhyb3dFcnJvck1lc3NhZ2UoKTogdm9pZAp0aHJvd0Vycm9yTWVzc2FnZToKCXByb3RvIDAgMAoKCS8vIHRoaXMgaXMgYW4gZXJyb3IKCWVycgoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAidHhuVHlwZUVudW0oKXZvaWQiCgltZXRob2QgInR4bkdyb3VwTGVuZ3RoKCl2b2lkIgoJbWV0aG9kICJhc3NlcnRzKGJvb2wsYm9vbCl2b2lkIgoJbWV0aG9kICJ2ZXJpZnlUeG5Gcm9tQXJnKHBheSl2b2lkIgoJbWV0aG9kICJ2ZXJpZnlUeG5Gcm9tVHhuR3JvdXAoKXZvaWQiCgltZXRob2QgInZlcmlmeVR4bkNvbmRpdGlvbigpdm9pZCIKCW1ldGhvZCAidmVyaWZ5VHhuSW5jbHVkZWRJbigpdm9pZCIKCW1ldGhvZCAidmVyaWZ5VHhuTm90SW5jbHVkZWRJbigpdm9pZCIKCW1ldGhvZCAic3VibWl0UGVuZGluZ0dyb3VwKCl2b2lkIgoJbWV0aG9kICJtZXRob2RXaXRoVHhuQXJncygpdm9pZCIKCW1ldGhvZCAic2hpZnQoKXZvaWQiCgltZXRob2QgImZyb21CeXRlcygpdm9pZCIKCW1ldGhvZCAiZnJvbVVpbnQ2NCgpdm9pZCIKCW1ldGhvZCAiYnplcm9GdW5jdGlvbigpdm9pZCIKCW1ldGhvZCAiZXZlbnRzKCl2b2lkIgoJbWV0aG9kICJsZXRPcHRpbWl6YXRpb24odWludDY0W10pdWludDY0W10iCgltZXRob2QgInN0YXRpY0NvbnRyYWN0UHJvcGVydGllcygpdm9pZCIKCW1ldGhvZCAibnVtYmVyVG9TdHJpbmcoKXZvaWQiCgltZXRob2QgIm1ldGhvZE9uUGFyZW5zKCl2b2lkIgoJbWV0aG9kICJzdHJpbmdTdWJzdHJpbmcoKXZvaWQiCgltZXRob2QgImlkUHJvcGVydHkoKXZvaWQiCgltZXRob2QgInNjcmF0Y2hTbG90KCl2b2lkIgoJbWV0aG9kICJlY2RzYSgpdm9pZCIKCW1ldGhvZCAidmVyaWZ5VHhuVHlwZXMoKXZvaWQiCgltZXRob2QgInN0cmluZ1BsdXNFcXVhbHMoKXZvaWQiCgltZXRob2QgImltcG9ydGVkUHJvZ3JhbSgpYnl0ZVtdIgoJbWV0aG9kICJjYWxsUHJpdmF0ZURlZmluZWRMYXRlcigpdm9pZCIKCW1ldGhvZCAiaW50ZXJhbFB1YmxpY01ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKCW1ldGhvZCAiY2FsbEludGVybmFsUHVibGljTWV0aG9kKCl2b2lkIgoJbWV0aG9kICJhcHBMb2FkU2NyYXRjaCgpdm9pZCIKCW1ldGhvZCAidWludE5XaXRoVW5kZXJzY29yZSgpdWludDI1NiIKCW1ldGhvZCAib3BVcCgpdm9pZCIKCW1ldGhvZCAicmV0dXJuVmFsdWVPbkFzc2lnbm1lbnQoKXN0cmluZyIKCW1ldGhvZCAicmV0dXJuQXJyYXlWYWx1ZU9uQXNzaWdubWVudCgpdWludDY0IgoJbWV0aG9kICJyZXR1cm5TdG9yYWdlVmFsdWVPbkFzc2lnbm1lbnQoKXVpbnQ2NCIKCW1ldGhvZCAicmV0dXJuT3BlcmF0b3JBc3NpZ25tZW50VmFsdWUoKXVpbnQ2NCIKCW1ldGhvZCAicmV0dXJuQXJyYXlWYWx1ZU9uT3BlcmF0b3JBc3NpZ25tZW50KCl1aW50NjQiCgltZXRob2QgInJldHVybkFycmF5SW5TdG9yYWdlVmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCgpdWludDY0IgoJbWV0aG9kICJjb25zdHMoKXZvaWQiCgltZXRob2QgImFzc2VydFdpdGhNZXNzYWdlKCl2b2lkIgoJbWV0aG9kICJvcGNvZGVBbGlhc2VzKCl2b2lkIgoJbWV0aG9kICJ2cmZWZXJpZnlPcCgpdm9pZCIKCW1ldGhvZCAiZWNNYXRoKCl2b2lkIgoJbWV0aG9kICJnaXR4bigpdm9pZCIKCW1ldGhvZCAiZ2V0U2V0Qnl0ZXMoKXZvaWQiCgltZXRob2QgImdldFNldFVpbnQ2NCgpdm9pZCIKCW1ldGhvZCAiYmxvY2tPcCgpdm9pZCIKCW1ldGhvZCAiYjY0KCl2b2lkIgoJbWV0aG9kICJqc29uKCl2b2lkIgoJbWV0aG9kICJiaXRsZW5PcCgpdm9pZCIKCW1ldGhvZCAiY29tcHV0ZWRDb25zdCgpdm9pZCIKCW1ldGhvZCAibXVsdGlDb21wdXRlZENvbnN0KCl2b2lkIgoJbWV0aG9kICJyZWFkU2NoZW1hKCl2b2lkIgoJbWV0aG9kICJjb21wYXJpc29uT3IoKWJvb2wiCgltZXRob2QgInR4bkFyZ3NNZXRob2QocGF5KXZvaWQiCgltZXRob2QgImNhbGxUeG5BcmdzTWV0aG9kKCl2b2lkIgoJbWV0aG9kICJzdGF0aWNWYWx1ZUxlbih1aW50MjU2KXZvaWQiCgltZXRob2QgInN0YXRpY1R5cGVMZW4oKXZvaWQiCgltZXRob2QgImR5bmFtaWNTY3JhdGNoU2xvdCgpdm9pZCIKCW1ldGhvZCAiaW5jcmVtZW50U2NyYXRjaFNsb3QoKXZvaWQiCgltZXRob2QgImluY3JlbWVudER5bmFtaWNTY3JhdGNoU2xvdCgpdm9pZCIKCW1ldGhvZCAiZnJvbUFkZHJlc3MoKXZvaWQiCgltZXRob2QgImVhcmx5UmV0dXJuKHVpbnQ2NCl1aW50NjQiCgltZXRob2QgImFzc2V0TWV0aG9kQXJncygpdm9pZCIKCW1ldGhvZCAibXVsdGlwbGVQcm9ncmFtUGFnZXMoKXZvaWQiCgltZXRob2QgImFzc2VydENvbW1lbnQoKXZvaWQiCgltZXRob2QgInRocm93RXJyb3JNZXNzYWdlKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV90eG5UeXBlRW51bSAqYWJpX3JvdXRlX3R4bkdyb3VwTGVuZ3RoICphYmlfcm91dGVfYXNzZXJ0cyAqYWJpX3JvdXRlX3ZlcmlmeVR4bkZyb21BcmcgKmFiaV9yb3V0ZV92ZXJpZnlUeG5Gcm9tVHhuR3JvdXAgKmFiaV9yb3V0ZV92ZXJpZnlUeG5Db25kaXRpb24gKmFiaV9yb3V0ZV92ZXJpZnlUeG5JbmNsdWRlZEluICphYmlfcm91dGVfdmVyaWZ5VHhuTm90SW5jbHVkZWRJbiAqYWJpX3JvdXRlX3N1Ym1pdFBlbmRpbmdHcm91cCAqYWJpX3JvdXRlX21ldGhvZFdpdGhUeG5BcmdzICphYmlfcm91dGVfc2hpZnQgKmFiaV9yb3V0ZV9mcm9tQnl0ZXMgKmFiaV9yb3V0ZV9mcm9tVWludDY0ICphYmlfcm91dGVfYnplcm9GdW5jdGlvbiAqYWJpX3JvdXRlX2V2ZW50cyAqYWJpX3JvdXRlX2xldE9wdGltaXphdGlvbiAqYWJpX3JvdXRlX3N0YXRpY0NvbnRyYWN0UHJvcGVydGllcyAqYWJpX3JvdXRlX251bWJlclRvU3RyaW5nICphYmlfcm91dGVfbWV0aG9kT25QYXJlbnMgKmFiaV9yb3V0ZV9zdHJpbmdTdWJzdHJpbmcgKmFiaV9yb3V0ZV9pZFByb3BlcnR5ICphYmlfcm91dGVfc2NyYXRjaFNsb3QgKmFiaV9yb3V0ZV9lY2RzYSAqYWJpX3JvdXRlX3ZlcmlmeVR4blR5cGVzICphYmlfcm91dGVfc3RyaW5nUGx1c0VxdWFscyAqYWJpX3JvdXRlX2ltcG9ydGVkUHJvZ3JhbSAqYWJpX3JvdXRlX2NhbGxQcml2YXRlRGVmaW5lZExhdGVyICphYmlfcm91dGVfaW50ZXJhbFB1YmxpY01ldGhvZCAqYWJpX3JvdXRlX2NhbGxJbnRlcm5hbFB1YmxpY01ldGhvZCAqYWJpX3JvdXRlX2FwcExvYWRTY3JhdGNoICphYmlfcm91dGVfdWludE5XaXRoVW5kZXJzY29yZSAqYWJpX3JvdXRlX29wVXAgKmFiaV9yb3V0ZV9yZXR1cm5WYWx1ZU9uQXNzaWdubWVudCAqYWJpX3JvdXRlX3JldHVybkFycmF5VmFsdWVPbkFzc2lnbm1lbnQgKmFiaV9yb3V0ZV9yZXR1cm5TdG9yYWdlVmFsdWVPbkFzc2lnbm1lbnQgKmFiaV9yb3V0ZV9yZXR1cm5PcGVyYXRvckFzc2lnbm1lbnRWYWx1ZSAqYWJpX3JvdXRlX3JldHVybkFycmF5VmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCAqYWJpX3JvdXRlX3JldHVybkFycmF5SW5TdG9yYWdlVmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCAqYWJpX3JvdXRlX2NvbnN0cyAqYWJpX3JvdXRlX2Fzc2VydFdpdGhNZXNzYWdlICphYmlfcm91dGVfb3Bjb2RlQWxpYXNlcyAqYWJpX3JvdXRlX3ZyZlZlcmlmeU9wICphYmlfcm91dGVfZWNNYXRoICphYmlfcm91dGVfZ2l0eG4gKmFiaV9yb3V0ZV9nZXRTZXRCeXRlcyAqYWJpX3JvdXRlX2dldFNldFVpbnQ2NCAqYWJpX3JvdXRlX2Jsb2NrT3AgKmFiaV9yb3V0ZV9iNjQgKmFiaV9yb3V0ZV9qc29uICphYmlfcm91dGVfYml0bGVuT3AgKmFiaV9yb3V0ZV9jb21wdXRlZENvbnN0ICphYmlfcm91dGVfbXVsdGlDb21wdXRlZENvbnN0ICphYmlfcm91dGVfcmVhZFNjaGVtYSAqYWJpX3JvdXRlX2NvbXBhcmlzb25PciAqYWJpX3JvdXRlX3R4bkFyZ3NNZXRob2QgKmFiaV9yb3V0ZV9jYWxsVHhuQXJnc01ldGhvZCAqYWJpX3JvdXRlX3N0YXRpY1ZhbHVlTGVuICphYmlfcm91dGVfc3RhdGljVHlwZUxlbiAqYWJpX3JvdXRlX2R5bmFtaWNTY3JhdGNoU2xvdCAqYWJpX3JvdXRlX2luY3JlbWVudFNjcmF0Y2hTbG90ICphYmlfcm91dGVfaW5jcmVtZW50RHluYW1pY1NjcmF0Y2hTbG90ICphYmlfcm91dGVfZnJvbUFkZHJlc3MgKmFiaV9yb3V0ZV9lYXJseVJldHVybiAqYWJpX3JvdXRlX2Fzc2V0TWV0aG9kQXJncyAqYWJpX3JvdXRlX211bHRpcGxlUHJvZ3JhbVBhZ2VzICphYmlfcm91dGVfYXNzZXJ0Q29tbWVudCAqYWJpX3JvdXRlX3Rocm93RXJyb3JNZXNzYWdlCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJyCgoqaW50VG9Bc2NpaToKCXByb3RvIDEgMQoJYnl0ZSAweDMwMzEzMjMzMzQzNTM2MzczODM5IC8vICIwMTIzNDU2Nzg5IgoJZnJhbWVfZGlnIC0xIC8vIGk6IHVpbnQ2NAoJaW50IDEKCWV4dHJhY3QzCglyZXRzdWIKCQoKKml0b2E6Cglwcm90byAxIDEKCWZyYW1lX2RpZyAtMSAvLyBpOiB1aW50NjQKCWludCAwCgk9PQoJYnogKml0b2FfaWZfZW5kCglieXRlIDB4MzAKCXJldHN1YgoKKml0b2FfaWZfZW5kOgoJZnJhbWVfZGlnIC0xIC8vIGk6IHVpbnQ2NAoJaW50IDEwCgkvCglpbnQgMAoJPgoJYnogKml0b2FfdGVybmFyeV9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIGk6IHVpbnQ2NAoJaW50IDEwCgkvCgljYWxsc3ViICppdG9hCgliICppdG9hX3Rlcm5hcnlfZW5kCgoqaXRvYV90ZXJuYXJ5X2ZhbHNlOgoJYnl0ZSAweCAvLyAiIgoKKml0b2FfdGVybmFyeV9lbmQ6CglmcmFtZV9kaWcgLTEgLy8gaTogdWludDY0CglpbnQgMTAKCSUKCWNhbGxzdWIgKmludFRvQXNjaWkKCWNvbmNhdAoJcmV0c3Vi", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHR4blR5cGVFbnVtKCl2b2lkCiphYmlfcm91dGVfdHhuVHlwZUVudW06CgkvLyBleGVjdXRlIHR4blR5cGVFbnVtKCl2b2lkCgljYWxsc3ViIHR4blR5cGVFbnVtCglpbnQgMQoJcmV0dXJuCgovLyB0eG5UeXBlRW51bSgpOiB2b2lkCnR4blR5cGVFbnVtOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo2MQoJLy8gYXNzZXJ0KHRoaXMudHhuR3JvdXBbMF0udHlwZUVudW0gPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwpCglpbnQgMAoJZ3R4bnMgVHlwZUVudW0KCWludCBhcHBsCgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIHR4bkdyb3VwTGVuZ3RoKCl2b2lkCiphYmlfcm91dGVfdHhuR3JvdXBMZW5ndGg6CgkvLyBleGVjdXRlIHR4bkdyb3VwTGVuZ3RoKCl2b2lkCgljYWxsc3ViIHR4bkdyb3VwTGVuZ3RoCglpbnQgMQoJcmV0dXJuCgovLyB0eG5Hcm91cExlbmd0aCgpOiB2b2lkCnR4bkdyb3VwTGVuZ3RoOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo2NQoJLy8gYXNzZXJ0KHRoaXMudHhuR3JvdXAubGVuZ3RoID09PSAxKQoJZ2xvYmFsIEdyb3VwU2l6ZQoJaW50IDEKCT09Cglhc3NlcnQKCXJldHN1YgoKLy8gYXNzZXJ0cyhib29sLGJvb2wpdm9pZAoqYWJpX3JvdXRlX2Fzc2VydHM6CgkvLyBhcmcyOiBib29sCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDEKCT09CgoJLy8gYXJndW1lbnQgMCAoYXJnMikgZm9yIGFzc2VydHMgbXVzdCBiZSBhIGJvb2wKCWFzc2VydAoJaW50IDAKCWdldGJpdAoKCS8vIGFyZzE6IGJvb2wKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMQoJPT0KCgkvLyBhcmd1bWVudCAxIChhcmcxKSBmb3IgYXNzZXJ0cyBtdXN0IGJlIGEgYm9vbAoJYXNzZXJ0CglpbnQgMAoJZ2V0Yml0CgoJLy8gZXhlY3V0ZSBhc3NlcnRzKGJvb2wsYm9vbCl2b2lkCgljYWxsc3ViIGFzc2VydHMKCWludCAxCglyZXR1cm4KCi8vIGFzc2VydHMoYXJnMTogYm9vbGVhbiwgYXJnMjogYm9vbGVhbik6IHZvaWQKYXNzZXJ0czoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NjkKCS8vIGFzc2VydHMoYXJnMSwgYXJnMiwgYXJnMSA9PT0gYXJnMikKCWZyYW1lX2RpZyAtMSAvLyBhcmcxOiBib29sZWFuCgoJLy8gYXNzZXJ0cyBmYWlsZWQ6IGFzc2VydHMoYXJnMSwgYXJnMiwgYXJnMSA9PT0gYXJnMikKCWFzc2VydAoJZnJhbWVfZGlnIC0yIC8vIGFyZzI6IGJvb2xlYW4KCgkvLyBhc3NlcnRzIGZhaWxlZDogYXNzZXJ0cyhhcmcxLCBhcmcyLCBhcmcxID09PSBhcmcyKQoJYXNzZXJ0CglmcmFtZV9kaWcgLTEgLy8gYXJnMTogYm9vbGVhbgoJZnJhbWVfZGlnIC0yIC8vIGFyZzI6IGJvb2xlYW4KCT09CgoJLy8gYXNzZXJ0cyBmYWlsZWQ6IGFzc2VydHMoYXJnMSwgYXJnMiwgYXJnMSA9PT0gYXJnMikKCWFzc2VydAoJcmV0c3ViCgovLyB2ZXJpZnlUeG5Gcm9tQXJnKHBheSl2b2lkCiphYmlfcm91dGVfdmVyaWZ5VHhuRnJvbUFyZzoKCS8vIHNvbWVQYXk6IHBheQoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgcGF5Cgk9PQoKCS8vIGFyZ3VtZW50IDAgKHNvbWVQYXkpIGZvciB2ZXJpZnlUeG5Gcm9tQXJnIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgdmVyaWZ5VHhuRnJvbUFyZyhwYXkpdm9pZAoJY2FsbHN1YiB2ZXJpZnlUeG5Gcm9tQXJnCglpbnQgMQoJcmV0dXJuCgovLyB2ZXJpZnlUeG5Gcm9tQXJnKHNvbWVQYXk6IFBheVR4bik6IHZvaWQKdmVyaWZ5VHhuRnJvbUFyZzoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NzMKCS8vIHZlcmlmeVR4bihzb21lUGF5LCB7IHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLCBhbW91bnQ6IDEwMF8wMDAgfSkKCS8vIHZlcmlmeSByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHNvbWVQYXk6IFBheVR4bgoJZ3R4bnMgUmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoic29tZVBheSIsImZpZWxkIjoicmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIHNvbWVQYXk6IFBheVR4bgoJZ3R4bnMgQW1vdW50CglpbnQgMTAwXzAwMAoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InNvbWVQYXkiLCJmaWVsZCI6ImFtb3VudCIsImV4cGVjdGVkIjoiMTAwXzAwMCJ9Cglhc3NlcnQKCXJldHN1YgoKLy8gdmVyaWZ5VHhuRnJvbVR4bkdyb3VwKCl2b2lkCiphYmlfcm91dGVfdmVyaWZ5VHhuRnJvbVR4bkdyb3VwOgoJLy8gZXhlY3V0ZSB2ZXJpZnlUeG5Gcm9tVHhuR3JvdXAoKXZvaWQKCWNhbGxzdWIgdmVyaWZ5VHhuRnJvbVR4bkdyb3VwCglpbnQgMQoJcmV0dXJuCgovLyB2ZXJpZnlUeG5Gcm9tVHhuR3JvdXAoKTogdm9pZAp2ZXJpZnlUeG5Gcm9tVHhuR3JvdXA6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjc3CgkvLyB2ZXJpZnlUeG4odGhpcy50eG5Hcm91cFswXSwgeyBzZW5kZXI6IHRoaXMudHhuLnNlbmRlciB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJaW50IDAKCWd0eG5zIFNlbmRlcgoJdHhuIFNlbmRlcgoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InRoaXMudHhuR3JvdXBbMF0iLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoidGhpcy50eG4uc2VuZGVyIn0KCWFzc2VydAoJcmV0c3ViCgovLyB2ZXJpZnlUeG5Db25kaXRpb24oKXZvaWQKKmFiaV9yb3V0ZV92ZXJpZnlUeG5Db25kaXRpb246CgkvLyBleGVjdXRlIHZlcmlmeVR4bkNvbmRpdGlvbigpdm9pZAoJY2FsbHN1YiB2ZXJpZnlUeG5Db25kaXRpb24KCWludCAxCglyZXR1cm4KCi8vIHZlcmlmeVR4bkNvbmRpdGlvbigpOiB2b2lkCnZlcmlmeVR4bkNvbmRpdGlvbjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6ODEKCS8vIHZlcmlmeVR4bih0aGlzLnR4biwgewoJLy8gICAgICAgYXBwbGljYXRpb25JRDogeyBncmVhdGVyVGhhbjogMSB9LAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXBwbGljYXRpb25JRAoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAxCgk+CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4biIsImZpZWxkIjoiYXBwbGljYXRpb25JRCIsImNvbmRpdGlvbiI6ImdyZWF0ZXJUaGFuIiwiZXhwZWN0ZWQiOiI+MSJ9Cglhc3NlcnQKCXJldHN1YgoKLy8gdmVyaWZ5VHhuSW5jbHVkZWRJbigpdm9pZAoqYWJpX3JvdXRlX3ZlcmlmeVR4bkluY2x1ZGVkSW46CgkvLyBleGVjdXRlIHZlcmlmeVR4bkluY2x1ZGVkSW4oKXZvaWQKCWNhbGxzdWIgdmVyaWZ5VHhuSW5jbHVkZWRJbgoJaW50IDEKCXJldHVybgoKLy8gdmVyaWZ5VHhuSW5jbHVkZWRJbigpOiB2b2lkCnZlcmlmeVR4bkluY2x1ZGVkSW46Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjg3CgkvLyB2ZXJpZnlUeG4odGhpcy50eG4sIHsKCS8vICAgICAgIHNlbmRlcjogeyBpbmNsdWRlZEluOiBbdGhpcy50eG4uc2VuZGVyXSB9LAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgc2VuZGVyCgl0eG4gU2VuZGVyCgl0eG4gU2VuZGVyCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjp7InR4blRleHQiOiJ0aGlzLnR4biJ9LCJmaWVsZCI6InNlbmRlciIsImNvbmRpdGlvbiI6ImluY2x1ZGVkSW4iLCJleHBlY3RlZCI6Ilt0aGlzLnR4bi5zZW5kZXJdIn0KCWFzc2VydAoJcmV0c3ViCgovLyB2ZXJpZnlUeG5Ob3RJbmNsdWRlZEluKCl2b2lkCiphYmlfcm91dGVfdmVyaWZ5VHhuTm90SW5jbHVkZWRJbjoKCS8vIGV4ZWN1dGUgdmVyaWZ5VHhuTm90SW5jbHVkZWRJbigpdm9pZAoJY2FsbHN1YiB2ZXJpZnlUeG5Ob3RJbmNsdWRlZEluCglpbnQgMQoJcmV0dXJuCgovLyB2ZXJpZnlUeG5Ob3RJbmNsdWRlZEluKCk6IHZvaWQKdmVyaWZ5VHhuTm90SW5jbHVkZWRJbjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6OTMKCS8vIHZlcmlmeVR4bih0aGlzLnR4biwgewoJLy8gICAgICAgc2VuZGVyOiB7IG5vdEluY2x1ZGVkSW46IFtnbG9iYWxzLnplcm9BZGRyZXNzXSB9LAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgc2VuZGVyCgl0eG4gU2VuZGVyCglnbG9iYWwgWmVyb0FkZHJlc3MKCSE9CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOnsidHhuVGV4dCI6InRoaXMudHhuIn0sImZpZWxkIjoic2VuZGVyIiwiY29uZGl0aW9uIjoibm90SW5jbHVkZWRJbiIsImV4cGVjdGVkIjoiW2dsb2JhbHMuemVyb0FkZHJlc3NdIn0KCWFzc2VydAoJcmV0c3ViCgovLyBzdWJtaXRQZW5kaW5nR3JvdXAoKXZvaWQKKmFiaV9yb3V0ZV9zdWJtaXRQZW5kaW5nR3JvdXA6CgkvLyBleGVjdXRlIHN1Ym1pdFBlbmRpbmdHcm91cCgpdm9pZAoJY2FsbHN1YiBzdWJtaXRQZW5kaW5nR3JvdXAKCWludCAxCglyZXR1cm4KCi8vIHN1Ym1pdFBlbmRpbmdHcm91cCgpOiB2b2lkCnN1Ym1pdFBlbmRpbmdHcm91cDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6OTkKCS8vIHRoaXMudHhuQ29tcG9zZXIuYmVnaW5Hcm91cChuZXcgUGF5VHhuKHsgYW1vdW50OiAwLCByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcyB9KSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjk5CgkvLyBhbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6OTkKCS8vIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTAwCgkvLyB0aGlzLnR4bkNvbXBvc2VyLmFkZFRvR3JvdXAobmV3IFBheVR4bih7IGFtb3VudDogMCwgcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsIG5vdGU6ICdmb28nIH0pKQoJaXR4bl9uZXh0CglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMDAKCS8vIGFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMDAKCS8vIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTAwCgkvLyBub3RlOiAnZm9vJwoJYnl0ZSAweDY2NmY2ZiAvLyAiZm9vIgoJaXR4bl9maWVsZCBOb3RlCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMDEKCS8vIHRoaXMudHhuQ29tcG9zZXIuc2VuZEdyb3VwKCkKCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIG1ldGhvZFdpdGhUeG5BcmdzKCl2b2lkCiphYmlfcm91dGVfbWV0aG9kV2l0aFR4bkFyZ3M6CgkvLyBleGVjdXRlIG1ldGhvZFdpdGhUeG5BcmdzKCl2b2lkCgljYWxsc3ViIG1ldGhvZFdpdGhUeG5BcmdzCglpbnQgMQoJcmV0dXJuCgovLyBtZXRob2RXaXRoVHhuQXJncygpOiB2b2lkCm1ldGhvZFdpdGhUeG5BcmdzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMDUKCS8vIHRoaXMudHhuQ29tcG9zZXIuc2VuZCgKCS8vICAgICAgIG5ldyBNZXRob2RDYWxsVHhuPFtQYXlUeG4sIEFwcENhbGxUeG5dLCB2b2lkPih7CgkvLyAgICAgICAgIG5hbWU6ICdmb28nLAoJLy8gICAgICAgICBtZXRob2RBcmdzOiBbCgkvLyAgICAgICAgICAgbmV3IFBheVR4bih7IGFtb3VudDogMTAwXzAwMCwgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciB9KSwKCS8vICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbFR4bjxbdWludDY0XSwgdm9pZD4oewoJLy8gICAgICAgICAgICAgbmFtZTogJ2JhcicsCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KDEzMzcpLAoJLy8gICAgICAgICAgICAgbWV0aG9kQXJnczogWzFdLAoJLy8gICAgICAgICAgIH0pLAoJLy8gICAgICAgICBdLAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMDkKCS8vIGFtb3VudDogMTAwXzAwMAoJaW50IDEwMF8wMDAKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMDkKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fbmV4dAoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiYmFyKHVpbnQ2NCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjExMgoJLy8gYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NCgxMzM3KQoJaW50IDEzMzcKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTEzCgkvLyBtZXRob2RBcmdzOiBbMV0KCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTEzCgkvLyAxCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMQoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEwNQoJLy8gdGhpcy50eG5Db21wb3Nlci5zZW5kKAoJLy8gICAgICAgbmV3IE1ldGhvZENhbGxUeG48W1BheVR4biwgQXBwQ2FsbFR4bl0sIHZvaWQ+KHsKCS8vICAgICAgICAgbmFtZTogJ2ZvbycsCgkvLyAgICAgICAgIG1ldGhvZEFyZ3M6IFsKCS8vICAgICAgICAgICBuZXcgUGF5VHhuKHsgYW1vdW50OiAxMDBfMDAwLCByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyIH0pLAoJLy8gICAgICAgICAgIG5ldyBNZXRob2RDYWxsVHhuPFt1aW50NjRdLCB2b2lkPih7CgkvLyAgICAgICAgICAgICBuYW1lOiAnYmFyJywKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQoMTMzNyksCgkvLyAgICAgICAgICAgICBtZXRob2RBcmdzOiBbMV0sCgkvLyAgICAgICAgICAgfSksCgkvLyAgICAgICAgIF0sCgkvLyAgICAgICB9KQoJLy8gICAgICkKCWl0eG5fbmV4dAoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiZm9vKHBheSxhcHBsKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTA4CgkvLyBtZXRob2RBcmdzOiBbCgkvLyAgICAgICAgICAgbmV3IFBheVR4bih7IGFtb3VudDogMTAwXzAwMCwgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciB9KSwKCS8vICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbFR4bjxbdWludDY0XSwgdm9pZD4oewoJLy8gICAgICAgICAgICAgbmFtZTogJ2JhcicsCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KDEzMzcpLAoJLy8gICAgICAgICAgICAgbWV0aG9kQXJnczogWzFdLAoJLy8gICAgICAgICAgIH0pLAoJLy8gICAgICAgICBdCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEwOQoJLy8gbmV3IFBheVR4bih7IGFtb3VudDogMTAwXzAwMCwgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciB9KQoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMTAKCS8vIG5ldyBNZXRob2RDYWxsVHhuPFt1aW50NjRdLCB2b2lkPih7CgkvLyAgICAgICAgICAgICBuYW1lOiAnYmFyJywKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQoMTMzNyksCgkvLyAgICAgICAgICAgICBtZXRob2RBcmdzOiBbMV0sCgkvLyAgICAgICAgICAgfSkKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gc2hpZnQoKXZvaWQKKmFiaV9yb3V0ZV9zaGlmdDoKCS8vIGV4ZWN1dGUgc2hpZnQoKXZvaWQKCWNhbGxzdWIgc2hpZnQKCWludCAxCglyZXR1cm4KCi8vIHNoaWZ0KCk6IHZvaWQKc2hpZnQ6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEyMQoJLy8gYXNzZXJ0KDEgPDwgMiA9PT0gNCkKCWludCAxCglpbnQgMgoJc2hsCglpbnQgNAoJPT0KCWFzc2VydAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTIyCgkvLyBhc3NlcnQoNCA+PiAxID09PSAyKQoJaW50IDQKCWludCAxCglzaHIKCWludCAyCgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIGZyb21CeXRlcygpdm9pZAoqYWJpX3JvdXRlX2Zyb21CeXRlczoKCS8vIGV4ZWN1dGUgZnJvbUJ5dGVzKCl2b2lkCgljYWxsc3ViIGZyb21CeXRlcwoJaW50IDEKCXJldHVybgoKLy8gZnJvbUJ5dGVzKCk6IHZvaWQKZnJvbUJ5dGVzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMjYKCS8vIGFzc2VydChBZGRyZXNzLmZyb21CeXRlcygnYWJjJykubWluQmFsYW5jZSkKCWJ5dGUgMHg2MTYyNjMgLy8gImFiYyIKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglhc3NlcnQKCXJldHN1YgoKLy8gZnJvbVVpbnQ2NCgpdm9pZAoqYWJpX3JvdXRlX2Zyb21VaW50NjQ6CgkvLyBleGVjdXRlIGZyb21VaW50NjQoKXZvaWQKCWNhbGxzdWIgZnJvbVVpbnQ2NAoJaW50IDEKCXJldHVybgoKLy8gZnJvbVVpbnQ2NCgpOiB2b2lkCmZyb21VaW50NjQ6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEzMAoJLy8gbG9nKEFwcElELmZyb21VaW50NjQoMTIzKS5jcmVhdG9yKQoJaW50IDEyMwoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCglsb2cKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEzMQoJLy8gbG9nKEFzc2V0SUQuZnJvbVVpbnQ2NCgxMjMpLmNyZWF0b3IpCglpbnQgMTIzCglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglsb2cKCXJldHN1YgoKLy8gYnplcm9GdW5jdGlvbigpdm9pZAoqYWJpX3JvdXRlX2J6ZXJvRnVuY3Rpb246CgkvLyBleGVjdXRlIGJ6ZXJvRnVuY3Rpb24oKXZvaWQKCWNhbGxzdWIgYnplcm9GdW5jdGlvbgoJaW50IDEKCXJldHVybgoKLy8gYnplcm9GdW5jdGlvbigpOiB2b2lkCmJ6ZXJvRnVuY3Rpb246Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMzYKCS8vIHg6IGJ5dGVzID0gYnplcm8oMikKCWJ5dGUgMHgwMDAwCglmcmFtZV9idXJ5IDAgLy8geDogYnl0ZXMKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEzNwoJLy8geTogYnl0ZXMgPSBiemVybyhuKQoJaW50IDEKCWJ6ZXJvCglmcmFtZV9idXJ5IDEgLy8geTogYnl0ZXMKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjEzOAoJLy8gejogW3VpbnQ2NCwgdWludDw4Pl0gPSBiemVybzxbdWludDY0LCB1aW50PDg+XT4oKQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMAoJZnJhbWVfYnVyeSAyIC8vIHo6IFt1aW50NjQsIHVpbnQ8OD5dCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxMzkKCS8vIGFzc2VydChsZW4oeCArIHkgKyB6KSA9PT0gMTIpCglieXRlIDB4MDAwMCAvLyB4OiBieXRlcwoJZnJhbWVfZGlnIDEgLy8geTogYnl0ZXMKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMCAvLyB6OiBbdWludDY0LCB1aW50PDg+XQoJY29uY2F0CglsZW4KCWludCAxMgoJPT0KCWFzc2VydAoJcmV0c3ViCgovLyBldmVudHMoKXZvaWQKKmFiaV9yb3V0ZV9ldmVudHM6CgkvLyBleGVjdXRlIGV2ZW50cygpdm9pZAoJY2FsbHN1YiBldmVudHMKCWludCAxCglyZXR1cm4KCi8vIGV2ZW50cygpOiB2b2lkCmV2ZW50czoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTU0CgkvLyB0aGlzLm15RXZlbnQubG9nKHsgYXBwOiB0aGlzLmFwcCwgbnVtOiAxIH0pCglieXRlIDB4ODc1MjgxOTYgLy8gbXlFdmVudCh1aW50NjQsdWludDY0KQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJaXRvYgoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEKCWNvbmNhdAoJY29uY2F0Cglsb2cKCXJldHN1YgoKLy8gbGV0T3B0aW1pemF0aW9uKHVpbnQ2NFtdKXVpbnQ2NFtdCiphYmlfcm91dGVfbGV0T3B0aW1pemF0aW9uOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhOiB1aW50NjRbXQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCgkvLyBleGVjdXRlIGxldE9wdGltaXphdGlvbih1aW50NjRbXSl1aW50NjRbXQoJY2FsbHN1YiBsZXRPcHRpbWl6YXRpb24KCWR1cAoJbGVuCglpbnQgOAoJLwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGxldE9wdGltaXphdGlvbihhOiB1aW50NjRbXSk6IHVpbnQ2NFtdCmxldE9wdGltaXphdGlvbjoKCXByb3RvIDEgMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTU4CgkvLyBhc3NlcnQoYVswXSkKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE2MAoJLy8gYiA9IFsxLCAyLCAzXQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMwoJZnJhbWVfYnVyeSAtMSAvLyBiOiB1aW50NjRbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTYyCgkvLyByZXR1cm4gYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJcmV0c3ViCgovLyBzdGF0aWNDb250cmFjdFByb3BlcnRpZXMoKXZvaWQKKmFiaV9yb3V0ZV9zdGF0aWNDb250cmFjdFByb3BlcnRpZXM6CgkvLyBleGVjdXRlIHN0YXRpY0NvbnRyYWN0UHJvcGVydGllcygpdm9pZAoJY2FsbHN1YiBzdGF0aWNDb250cmFjdFByb3BlcnRpZXMKCWludCAxCglyZXR1cm4KCi8vIHN0YXRpY0NvbnRyYWN0UHJvcGVydGllcygpOiB2b2lkCnN0YXRpY0NvbnRyYWN0UHJvcGVydGllczoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTY2CgkvLyB0aGlzLnR4bkNvbXBvc2VyLnNlbmQoCgkvLyAgICAgICBuZXcgQXBwQ2FsbFR4bih7CgkvLyAgICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLk5vT3AsCgkvLyAgICAgICAgIGFwcHJvdmFsUHJvZ3JhbTogRHVtbXlDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IER1bW15Q29udHJhY3QuY2xlYXJQcm9ncmFtKCksCgkvLyAgICAgICAgIGxvY2FsTnVtQnl0ZVNsaWNlOiBEdW1teUNvbnRyYWN0LnNjaGVtYS5sb2NhbC5udW1CeXRlU2xpY2UsCgkvLyAgICAgICAgIGxvY2FsTnVtVWludDogRHVtbXlDb250cmFjdC5zY2hlbWEubG9jYWwubnVtVWludCwKCS8vICAgICAgICAgZ2xvYmFsTnVtQnl0ZVNsaWNlOiBEdW1teUNvbnRyYWN0LnNjaGVtYS5nbG9iYWwubnVtQnl0ZVNsaWNlLAoJLy8gICAgICAgICBnbG9iYWxOdW1VaW50OiBEdW1teUNvbnRyYWN0LnNjaGVtYS5nbG9iYWwubnVtVWludCwKCS8vICAgICAgIH0pCgkvLyAgICAgKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE2OAoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uTm9PcAoJaW50IDAgLy8gTm9PcAoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjE2OQoJLy8gYXBwcm92YWxQcm9ncmFtOiBEdW1teUNvbnRyYWN0LmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDakVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBSUVCUTRBRXVFUjdOallhQUk0Qi8vQUEKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxNzAKCS8vIGNsZWFyU3RhdGVQcm9ncmFtOiBEdW1teUNvbnRyYWN0LmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxNzEKCS8vIGxvY2FsTnVtQnl0ZVNsaWNlOiBEdW1teUNvbnRyYWN0LnNjaGVtYS5sb2NhbC5udW1CeXRlU2xpY2UKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTcyCgkvLyBsb2NhbE51bVVpbnQ6IER1bW15Q29udHJhY3Quc2NoZW1hLmxvY2FsLm51bVVpbnQKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTczCgkvLyBnbG9iYWxOdW1CeXRlU2xpY2U6IER1bW15Q29udHJhY3Quc2NoZW1hLmdsb2JhbC5udW1CeXRlU2xpY2UKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTc0CgkvLyBnbG9iYWxOdW1VaW50OiBEdW1teUNvbnRyYWN0LnNjaGVtYS5nbG9iYWwubnVtVWludAoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBudW1iZXJUb1N0cmluZygpdm9pZAoqYWJpX3JvdXRlX251bWJlclRvU3RyaW5nOgoJLy8gZXhlY3V0ZSBudW1iZXJUb1N0cmluZygpdm9pZAoJY2FsbHN1YiBudW1iZXJUb1N0cmluZwoJaW50IDEKCXJldHVybgoKLy8gbnVtYmVyVG9TdHJpbmcoKTogdm9pZApudW1iZXJUb1N0cmluZzoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTgyCgkvLyBhc3NlcnQobi50b1N0cmluZygpID09PSBzKQoJaW50IDEKCWNhbGxzdWIgKml0b2EKCWJ5dGUgIjEiCgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIG1ldGhvZE9uUGFyZW5zKCl2b2lkCiphYmlfcm91dGVfbWV0aG9kT25QYXJlbnM6CgkvLyBleGVjdXRlIG1ldGhvZE9uUGFyZW5zKCl2b2lkCgljYWxsc3ViIG1ldGhvZE9uUGFyZW5zCglpbnQgMQoJcmV0dXJuCgovLyBtZXRob2RPblBhcmVucygpOiB2b2lkCm1ldGhvZE9uUGFyZW5zOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxODYKCS8vIGFzc2VydCgoMSArIDIpLnRvU3RyaW5nKCkgPT09ICczJykKCWludCAzCgljYWxsc3ViICppdG9hCglieXRlIDB4MzMgLy8gIjMiCgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIHN0cmluZ1N1YnN0cmluZygpdm9pZAoqYWJpX3JvdXRlX3N0cmluZ1N1YnN0cmluZzoKCS8vIGV4ZWN1dGUgc3RyaW5nU3Vic3RyaW5nKCl2b2lkCgljYWxsc3ViIHN0cmluZ1N1YnN0cmluZwoJaW50IDEKCXJldHVybgoKLy8gc3RyaW5nU3Vic3RyaW5nKCk6IHZvaWQKc3RyaW5nU3Vic3RyaW5nOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxOTEKCS8vIGFzc2VydChzLnN1YnN0cmluZygxLCAzKSA9PT0gJ2JjJykKCWJ5dGUgImFiY2RlZiIKCXN1YnN0cmluZyAxIDMKCWJ5dGUgMHg2MjYzIC8vICJiYyIKCT09Cglhc3NlcnQKCXJldHN1YgoKLy8gaWRQcm9wZXJ0eSgpdm9pZAoqYWJpX3JvdXRlX2lkUHJvcGVydHk6CgkvLyBleGVjdXRlIGlkUHJvcGVydHkoKXZvaWQKCWNhbGxzdWIgaWRQcm9wZXJ0eQoJaW50IDEKCXJldHVybgoKLy8gaWRQcm9wZXJ0eSgpOiB2b2lkCmlkUHJvcGVydHk6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxOTUKCS8vIGFwcCA9IEFwcElELnplcm9JbmRleAoJaW50IDAKCWZyYW1lX2J1cnkgMCAvLyBhcHA6IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MTk2CgkvLyBhc3NlcnQoQXBwSUQuZnJvbVVpbnQ2NChhcHAuaWQpID09PSBhcHApCglpbnQgMCAvLyBhcHA6IHVpbnQ2NAoJZHVwCgk9PQoJYXNzZXJ0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxOTgKCS8vIGFzYSA9IEFzc2V0SUQuemVyb0luZGV4CglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIGFzYTogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoxOTkKCS8vIGFzc2VydChBc3NldElELmZyb21VaW50NjQoYXNhLmlkKSA9PT0gYXNhKQoJaW50IDAgLy8gYXNhOiB1aW50NjQKCWR1cAoJPT0KCWFzc2VydAoJcmV0c3ViCgovLyBzY3JhdGNoU2xvdCgpdm9pZAoqYWJpX3JvdXRlX3NjcmF0Y2hTbG90OgoJLy8gZXhlY3V0ZSBzY3JhdGNoU2xvdCgpdm9pZAoJY2FsbHN1YiBzY3JhdGNoU2xvdAoJaW50IDEKCXJldHVybgoKLy8gc2NyYXRjaFNsb3QoKTogdm9pZApzY3JhdGNoU2xvdDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjAzCgkvLyB0aGlzLnNjcmF0Y2gudmFsdWUgPSAxMzM3CglpbnQgMTMzNwoJc3RvcmUgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjA0CgkvLyBhc3NlcnQodGhpcy5zY3JhdGNoLnZhbHVlID09PSAxMzM3KQoJbG9hZCAwCglpbnQgMTMzNwoJPT0KCWFzc2VydAoJcmV0c3ViCgovLyBlY2RzYSgpdm9pZAoqYWJpX3JvdXRlX2VjZHNhOgoJLy8gZXhlY3V0ZSBlY2RzYSgpdm9pZAoJY2FsbHN1YiBlY2RzYQoJaW50IDEKCXJldHVybgoKLy8gZWNkc2EoKTogdm9pZAplY2RzYToKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDcKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjIwOAoJLy8gZWNkc2FWZXJpZnkoJ1NlY3AyNTZrMScsICcnIGFzIGJ5dGVzMzIsICcnIGFzIGJ5dGVzMzIsICcnIGFzIGJ5dGVzMzIsICcnIGFzIGJ5dGVzMzIsICcnIGFzIGJ5dGVzMzIpCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAvLyAiIgoJZHVwbiA0CgllY2RzYV92ZXJpZnkgU2VjcDI1NmsxCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyMDkKCS8vIGQgPSBlY2RzYVBrRGVjb21wcmVzcygnU2VjcDI1NmsxJywgJycgYXMgYnl0ZXM8MzM+KQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAvLyAiIgoJZWNkc2FfcGtfZGVjb21wcmVzcyBTZWNwMjU2azEKCWZyYW1lX2J1cnkgMiAvLyBkIHkgY29tcG9uZW50OiBieXRlW10KCWZyYW1lX2J1cnkgMyAvLyBkIHggY29tcG9uZW50OiBieXRlW10KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjIxMAoJLy8gbG9nKGQueSkKCWZyYW1lX2RpZyAyIC8vIGQgeSBjb21wb25lbnQ6IGJ5dGVbXQoJbG9nCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyMTEKCS8vIGxvZyhkLngpCglmcmFtZV9kaWcgMyAvLyBkIHggY29tcG9uZW50OiBieXRlW10KCWxvZwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjEzCgkvLyByID0gZWNkc2FQa1JlY292ZXIoJ1NlY3AyNTZrMScsICcnIGFzIGJ5dGVzMzIsIDEsICcnIGFzIGJ5dGVzMzIsICcnIGFzIGJ5dGVzMzIpCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAvLyAiIgoJaW50IDEKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC8vICIiCglkdXAKCWVjZHNhX3BrX3JlY292ZXIgU2VjcDI1NmsxCglmcmFtZV9idXJ5IDYgLy8gciB5IGNvbXBvbmVudDogYnl0ZVtdCglmcmFtZV9idXJ5IDcgLy8gciB4IGNvbXBvbmVudDogYnl0ZVtdCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyMTQKCS8vIGxvZyhyLnkpCglmcmFtZV9kaWcgNiAvLyByIHkgY29tcG9uZW50OiBieXRlW10KCWxvZwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjE1CgkvLyBsb2coci54KQoJZnJhbWVfZGlnIDcgLy8gciB4IGNvbXBvbmVudDogYnl0ZVtdCglsb2cKCXJldHN1YgoKLy8gdmVyaWZ5VHhuVHlwZXMoKXZvaWQKKmFiaV9yb3V0ZV92ZXJpZnlUeG5UeXBlczoKCS8vIGV4ZWN1dGUgdmVyaWZ5VHhuVHlwZXMoKXZvaWQKCWNhbGxzdWIgdmVyaWZ5VHhuVHlwZXMKCWludCAxCglyZXR1cm4KCi8vIHZlcmlmeVR4blR5cGVzKCk6IHZvaWQKdmVyaWZ5VHhuVHlwZXM6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjIxOQoJLy8gdmVyaWZ5UGF5VHhuKHRoaXMudHhuR3JvdXBbMF0sIHsKCS8vICAgICAgIGFtb3VudDogeyBncmVhdGVyVGhhbjogMCB9LAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgcGF5CglpbnQgMAoJZ3R4bnMgVHlwZUVudW0KCWludCBwYXkKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4bkdyb3VwWzBdIiwiZmllbGQiOiJ0eXBlRW51bSIsImV4cGVjdGVkIjoicGF5In0KCWFzc2VydAoKCS8vIHZlcmlmeSBhbW91bnQKCWludCAwCglndHhucyBBbW91bnQKCWludCAwCgk+CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4bkdyb3VwWzBdIiwiZmllbGQiOiJhbW91bnQiLCJjb25kaXRpb24iOiJncmVhdGVyVGhhbiIsImV4cGVjdGVkIjoiPjAifQoJYXNzZXJ0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyMjMKCS8vIHZlcmlmeUFwcENhbGxUeG4odGhpcy50eG5Hcm91cFswXSwgewoJLy8gICAgICAgYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NCgwKSwKCS8vICAgICAgIGFwcGxpY2F0aW9uQXJnczogewoJLy8gICAgICAgICAwOiAnZm9vJywKCS8vICAgICAgICAgMTogewoJLy8gICAgICAgICAgIGluY2x1ZGVkSW46IFsnYmFyJywgJ2JheiddLAoJLy8gICAgICAgICB9LAoJLy8gICAgICAgfSwKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFwcGwKCWludCAwCglndHhucyBUeXBlRW51bQoJaW50IGFwcGwKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4bkdyb3VwWzBdIiwiZmllbGQiOiJ0eXBlRW51bSIsImV4cGVjdGVkIjoiYXBwbCJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYXBwbGljYXRpb25JRAoJaW50IDAKCWd0eG5zIEFwcGxpY2F0aW9uSUQKCWludCAwCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidGhpcy50eG5Hcm91cFswXSIsImZpZWxkIjoiYXBwbGljYXRpb25JRCIsImV4cGVjdGVkIjoiQXBwSUQuZnJvbVVpbnQ2NCgwKSJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYXBwbGljYXRpb25BcmdzCgkvLyB2ZXJpZnkgYXBwbGljYXRpb25BcmdzIDAKCWludCAwCglndHhucyBBcHBsaWNhdGlvbkFyZ3MgMAoJYnl0ZSAweDY2NmY2ZiAvLyAiZm9vIgoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InRoaXMudHhuR3JvdXBbMF0iLCJmaWVsZCI6ImFwcGxpY2F0aW9uQXJncyIsImluZGV4IjoiMCIsImV4cGVjdGVkIjoiJ2ZvbycifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFwcGxpY2F0aW9uQXJncyAxCglpbnQgMAoJZ3R4bnMgQXBwbGljYXRpb25BcmdzIDEKCWJ5dGUgMHg2MjYxNzIgLy8gImJhciIKCT09CglpbnQgMAoJZ3R4bnMgQXBwbGljYXRpb25BcmdzIDEKCWJ5dGUgMHg2MjYxN2EgLy8gImJheiIKCT09Cgl8fAoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjp7InR4blRleHQiOiJ0aGlzLnR4bkdyb3VwWzBdIn0sImZpZWxkIjoiYXBwbGljYXRpb25BcmdzIDEiLCJjb25kaXRpb24iOiJpbmNsdWRlZEluIiwiZXhwZWN0ZWQiOiJbJ2JhcicsICdiYXonXSJ9Cglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjIzMwoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bih0aGlzLnR4bkdyb3VwWzBdLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXhmZXIKCWludCAwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidGhpcy50eG5Hcm91cFswXSIsImZpZWxkIjoidHlwZUVudW0iLCJleHBlY3RlZCI6ImF4ZmVyIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglpbnQgMAoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4bkdyb3VwWzBdIiwiZmllbGQiOiJhc3NldFJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjM3CgkvLyB2ZXJpZnlBc3NldENvbmZpZ1R4bih0aGlzLnR4bkdyb3VwWzBdLCB7CgkvLyAgICAgICBjb25maWdBc3NldDogQXNzZXRJRC5mcm9tVWludDY0KDApLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYWNmZwoJaW50IDAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYWNmZwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InRoaXMudHhuR3JvdXBbMF0iLCJmaWVsZCI6InR5cGVFbnVtIiwiZXhwZWN0ZWQiOiJhY2ZnIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBjb25maWdBc3NldAoJaW50IDAKCWd0eG5zIENvbmZpZ0Fzc2V0CglpbnQgMAoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InRoaXMudHhuR3JvdXBbMF0iLCJmaWVsZCI6ImNvbmZpZ0Fzc2V0IiwiZXhwZWN0ZWQiOiJBc3NldElELmZyb21VaW50NjQoMCkifQoJYXNzZXJ0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyNDEKCS8vIHZlcmlmeUtleVJlZ1R4bih0aGlzLnR4bkdyb3VwWzBdLCB7CgkvLyAgICAgICB2b3RlRmlyc3Q6IDEzMzcsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBrZXlyZWcKCWludCAwCglndHhucyBUeXBlRW51bQoJaW50IGtleXJlZwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InRoaXMudHhuR3JvdXBbMF0iLCJmaWVsZCI6InR5cGVFbnVtIiwiZXhwZWN0ZWQiOiJrZXlyZWcifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IHZvdGVGaXJzdAoJaW50IDAKCWd0eG5zIFZvdGVGaXJzdAoJaW50IDEzMzcKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0aGlzLnR4bkdyb3VwWzBdIiwiZmllbGQiOiJ2b3RlRmlyc3QiLCJleHBlY3RlZCI6IjEzMzcifQoJYXNzZXJ0CglyZXRzdWIKCi8vIHN0cmluZ1BsdXNFcXVhbHMoKXZvaWQKKmFiaV9yb3V0ZV9zdHJpbmdQbHVzRXF1YWxzOgoJLy8gZXhlY3V0ZSBzdHJpbmdQbHVzRXF1YWxzKCl2b2lkCgljYWxsc3ViIHN0cmluZ1BsdXNFcXVhbHMKCWludCAxCglyZXR1cm4KCi8vIHN0cmluZ1BsdXNFcXVhbHMoKTogdm9pZApzdHJpbmdQbHVzRXF1YWxzOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI0NwoJLy8gcyA9ICdmb28nCglieXRlIDB4NjY2ZjZmIC8vICJmb28iCglmcmFtZV9idXJ5IDAgLy8gczogYnl0ZVtdCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyNDgKCS8vIHMgKz0gJ2JhcicKCWZyYW1lX2RpZyAwIC8vIHM6IGJ5dGVbXQoJYnl0ZSAweDYyNjE3MiAvLyAiYmFyIgoJY29uY2F0CglmcmFtZV9idXJ5IDAgLy8gczogYnl0ZVtdCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyNDkKCS8vIGFzc2VydChzID09PSAnZm9vYmFyJykKCWZyYW1lX2RpZyAwIC8vIHM6IGJ5dGVbXQoJYnl0ZSAweDY2NmY2ZjYyNjE3MiAvLyAiZm9vYmFyIgoJPT0KCWFzc2VydAoJcmV0c3ViCgovLyBpbXBvcnRlZFByb2dyYW0oKWJ5dGVbXQoqYWJpX3JvdXRlX2ltcG9ydGVkUHJvZ3JhbToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBpbXBvcnRlZFByb2dyYW0oKWJ5dGVbXQoJY2FsbHN1YiBpbXBvcnRlZFByb2dyYW0KCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gaW1wb3J0ZWRQcm9ncmFtKCk6IGJ5dGVzCmltcG9ydGVkUHJvZ3JhbToKCXByb3RvIDAgMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjUzCgkvLyByZXR1cm4gSWZUZXN0LmFwcHJvdmFsUHJvZ3JhbSgpOwoJYnl0ZSBiNjQgQ2lBRUFRQUNJQ1lKQkJVZmZIVUNhV1lFWld4elpRTmxibVFBQTJadmJ3ZGxiSE5sSUdsbUNXVnNjMlVnYVdZZ01RbGxiSE5sSUdsbUlESXhHQlNCQmdzeEdRaU5EQU1rQUFBQUFBQUFBQUFBQUFNV0FBQUFBQUFBQUFBQUFBQW9OaG9CU1JVaUVrUWpVNGdBREVrVkZsY0dBa3hRVUxBaVE0b0JBWXYvUVFBQ0tZa3JpU2cyR2dGSkZTSVNSQ05UaUFBTVNSVVdWd1lDVEZCUXNDSkRpZ0VCaS85QkFBVXBpVUlBQWlxSmlTZzJHZ0pKRlNJU1JDTlROaG9CU1JVaUVrUWpVNGdBREVrVkZsY0dBa3hRVUxBaVE0b0NBWXYvUVFBRktZbENBQWlML2tFQUF5Y0dpU3VKS0RZYUFra1ZJaEpFSTFNMkdnRkpGU0lTUkNOVGlBQU1TUlVXVndZQ1RGQlFzQ0pEaWdJQmkvOUJBQVVwaVVJQURZditRUUFHSndhSlFnQUNLb21KS0RZYUEwa1ZJaEpFSTFNMkdnSkpGU0lTUkNOVE5ob0JTUlVpRWtRalU0Z0FERWtWRmxjR0FreFFVTEFpUTRvREFZdi9RUUFGS1lsQ0FCT0wva0VBQmljSGlVSUFDSXY5UVFBREp3aUpLNGtvTmhvRFNSVWlFa1FqVXpZYUFra1ZJaEpFSTFNMkdnRkpGU0lTUkNOVGlBQU1TUlVXVndZQ1RGQlFzQ0pEaWdNQmkvOUJBQVVwaVVJQUdJditRUUFHSndlSlFnQU5pLzFCQUFZbkNJbENBQUlxaVlrb05ob0NTUlVpRWtRalV6WWFBVWtWSWhKRUkxT0lBQXhKRlJaWEJnSk1VRkN3SWtPS0FnR0wvMEVBRm92K1FRQU1nQWx1WlhOMFpXUWdhV2FKS1lsQ0FBSXFpWWtvTmhvQlNSVWlFa1FqVTRnQURFa1ZGbGNHQWt4UVVMQWlRNG9CQVl2L1FRQUZLWWxDQUFJcWlZa29OaG9DU1JVaUVrUWpVellhQVVrVkloSkVJMU9JQUFVV1VMQWlRNG9DQVl2L1FRQUVJa0lBQzR2K1FRQUVKRUlBQW9FRGlTZzJHZ0ZYQWdDSUFBVVdVTEFpUTRvQkFZdi9Kd1NwUVFBQ0lva2tpU2cyR2dGWEFnQ0lBQVVXVUxBaVE0b0JBWXYvSndTcFFRQUVJa0lBQVNTSk5ob0JTUlVrRWtRWGlBQUNJa09LQVFDTC95Y0VxVUVBQXljRnNJazJHZ0pKRlNRU1JCYzJHZ0ZKRlNRU1JCZUlBQUlpUTRvQ0FJdi9pLzRPUVFBREp3V3dpVFlhQWtrVkpSSkVOaG9CU1JVbEVrU0lBQUlpUTRvQ0FJdi9pLzZtUVFBREp3V3dpU2cyR2dKSkZTSVNSQ05UTmhvQlNSVWlFa1FqVTRnQURFa1ZGbGNHQWt4UVVMQWlRNG9DQVl2L1FRQVppLzVCQUEyQUIyRWdZVzVrSUdLSlFnQUVnQUZoaVVJQUZvditRUUFIZ0FGaWlVSUFDb0FIYm1WcGRHaGxjb21KSWtPQUJMaEVlelkyR2dDT0FmL3hBSUFFUTI3QndvQUVISG9OWG9BRVhnKzJ6NEFFWGh4c1VJQUVXTkM2a29BRVhTOVBBb0FFaEZjcDJZQUVqK2RzcUlBRUdqeDRlSUFFZEx6SWFJQUVRaEw1QllBRWxkMnV2NEFFTVVlNFpvQUVRb2wvWVlBRVUwdml0ellhQUk0UC9HRDhodnl3L092OUt2MTYvYzcrRS80OS9uTCtrUDZ3L3MzKzgvOFhBQT09CglyZXRzdWIKCi8vIGNhbGxQcml2YXRlRGVmaW5lZExhdGVyKCl2b2lkCiphYmlfcm91dGVfY2FsbFByaXZhdGVEZWZpbmVkTGF0ZXI6CgkvLyBleGVjdXRlIGNhbGxQcml2YXRlRGVmaW5lZExhdGVyKCl2b2lkCgljYWxsc3ViIGNhbGxQcml2YXRlRGVmaW5lZExhdGVyCglpbnQgMQoJcmV0dXJuCgovLyBjYWxsUHJpdmF0ZURlZmluZWRMYXRlcigpOiB2b2lkCmNhbGxQcml2YXRlRGVmaW5lZExhdGVyOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyNTcKCS8vIGxvZyh0aGlzLnByaXZhdGVNZXRob2QoJ2hlbGxvJykpCglieXRlIDB4Njg2NTZjNmM2ZiAvLyAiaGVsbG8iCgljYWxsc3ViIHByaXZhdGVNZXRob2QKCWxvZwoJcmV0c3ViCgovLyBwcml2YXRlTWV0aG9kKG1zZzogc3RyaW5nKTogc3RyaW5nCnByaXZhdGVNZXRob2Q6Cglwcm90byAxIDEKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI2MQoJLy8gcmV0dXJuIG1zZzsKCWZyYW1lX2RpZyAtMSAvLyBtc2c6IHN0cmluZwoJcmV0c3ViCgovLyBpbnRlcmFsUHVibGljTWV0aG9kKHVpbnQ2NCx1aW50NjQpdWludDY0CiphYmlfcm91dGVfaW50ZXJhbFB1YmxpY01ldGhvZDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYjogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBpbnRlcmFsUHVibGljTWV0aG9kKHVpbnQ2NCx1aW50NjQpdWludDY0CgljYWxsc3ViIGludGVyYWxQdWJsaWNNZXRob2QKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBpbnRlcmFsUHVibGljTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0CmludGVyYWxQdWJsaWNNZXRob2Q6Cglwcm90byAyIDEKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI2NQoJLy8gcmV0dXJuIGEgKyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJKwoJcmV0c3ViCgovLyBjYWxsSW50ZXJuYWxQdWJsaWNNZXRob2QoKXZvaWQKKmFiaV9yb3V0ZV9jYWxsSW50ZXJuYWxQdWJsaWNNZXRob2Q6CgkvLyBleGVjdXRlIGNhbGxJbnRlcm5hbFB1YmxpY01ldGhvZCgpdm9pZAoJY2FsbHN1YiBjYWxsSW50ZXJuYWxQdWJsaWNNZXRob2QKCWludCAxCglyZXR1cm4KCi8vIGNhbGxJbnRlcm5hbFB1YmxpY01ldGhvZCgpOiB2b2lkCmNhbGxJbnRlcm5hbFB1YmxpY01ldGhvZDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjY5CgkvLyBhc3NlcnQodGhpcy5pbnRlcmFsUHVibGljTWV0aG9kKDEsIDIpID09PSAzKQoJaW50IDIKCWludCAxCgljYWxsc3ViIGludGVyYWxQdWJsaWNNZXRob2QKCWludCAzCgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIGFwcExvYWRTY3JhdGNoKCl2b2lkCiphYmlfcm91dGVfYXBwTG9hZFNjcmF0Y2g6CgkvLyBleGVjdXRlIGFwcExvYWRTY3JhdGNoKCl2b2lkCgljYWxsc3ViIGFwcExvYWRTY3JhdGNoCglpbnQgMQoJcmV0dXJuCgovLyBhcHBMb2FkU2NyYXRjaCgpOiB2b2lkCmFwcExvYWRTY3JhdGNoOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyNzMKCS8vIGxvZyh0aGlzLnR4bkdyb3VwWzFdLmxvYWRTY3JhdGNoKDIpIGFzIGJ5dGVzKQoJZ2xvYWQgMSAyCglsb2cKCXJldHN1YgoKLy8gdWludE5XaXRoVW5kZXJzY29yZSgpdWludDI1NgoqYWJpX3JvdXRlX3VpbnROV2l0aFVuZGVyc2NvcmU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgdWludE5XaXRoVW5kZXJzY29yZSgpdWludDI1NgoJY2FsbHN1YiB1aW50TldpdGhVbmRlcnNjb3JlCglkdXAKCWJpdGxlbgoJaW50IDI1NgoJPD0KCgkvLyB1aW50TldpdGhVbmRlcnNjb3JlIHJldHVybiB2YWx1ZSBvdmVyZmxvd2VkIDI1NiBiaXRzCglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDMyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gdWludE5XaXRoVW5kZXJzY29yZSgpOiB1aW50MjU2CnVpbnROV2l0aFVuZGVyc2NvcmU6Cglwcm90byAwIDEKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI3NwoJLy8gcmV0dXJuIDx1aW50MjU2PjEyM180NTY7CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxZTI0MAoJcmV0c3ViCgovLyBvcFVwKCl2b2lkCiphYmlfcm91dGVfb3BVcDoKCS8vIGV4ZWN1dGUgb3BVcCgpdm9pZAoJY2FsbHN1YiBvcFVwCglpbnQgMQoJcmV0dXJuCgovLyBvcFVwKCk6IHZvaWQKb3BVcDoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyODEKCS8vIGluY3JlYXNlT3Bjb2RlQnVkZ2V0KCkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWJ5dGUgYjY0IENvRUIgLy8gI3ByYWdtYSB2ZXJzaW9uIDEwOyBpbnQgMQoJZHVwCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoJaXR4bl9zdWJtaXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI4MgoJLy8gZm9yIChsZXQgaSA9IDE7IGkgPCA3NTsgaSArPSAxKQoJaW50IDEKCWZyYW1lX2J1cnkgMCAvLyBpOiB1aW50NjQKCipmb3JfMDoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjgyCgkvLyBpIDwgNzUKCWZyYW1lX2RpZyAwIC8vIGk6IHVpbnQ2NAoJaW50IDc1Cgk8CglieiAqZm9yXzBfZW5kCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyODMKCS8vIGFzc2VydChpKQoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0Cglhc3NlcnQKCipmb3JfMF9jb250aW51ZToKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MjgyCgkvLyBpICs9IDEKCWZyYW1lX2RpZyAwIC8vIGk6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMCAvLyBpOiB1aW50NjQKCWIgKmZvcl8wCgoqZm9yXzBfZW5kOgoJcmV0c3ViCgovLyByZXR1cm5WYWx1ZU9uQXNzaWdubWVudCgpc3RyaW5nCiphYmlfcm91dGVfcmV0dXJuVmFsdWVPbkFzc2lnbm1lbnQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgcmV0dXJuVmFsdWVPbkFzc2lnbm1lbnQoKXN0cmluZwoJY2FsbHN1YiByZXR1cm5WYWx1ZU9uQXNzaWdubWVudAoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyByZXR1cm5WYWx1ZU9uQXNzaWdubWVudCgpOiBzdHJpbmcKcmV0dXJuVmFsdWVPbkFzc2lnbm1lbnQ6Cglwcm90byAwIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6Mjg4CgkvLyBtZXNzYWdlID0gJ2hpJwoJYnl0ZSAweDY4NjkgLy8gImhpIgoJZnJhbWVfYnVyeSAwIC8vIG1lc3NhZ2U6IGJ5dGVbXQoKCS8vICppZjBfY29uZGl0aW9uCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI5MAoJLy8gdGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5hZGRyZXNzCgl0eG4gU2VuZGVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjI5MQoJLy8gbWVzc2FnZSA9ICdpbiBibG9jaycKCWJ5dGUgMHg2OTZlMjA2MjZjNmY2MzZiIC8vICJpbiBibG9jayIKCWZyYW1lX2J1cnkgMCAvLyBtZXNzYWdlOiBieXRlW10KCippZjBfZW5kOgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyOTQKCS8vIHJldHVybiAobWVzc2FnZSA9ICdieWUnKTsKCWJ5dGUgMHg2Mjc5NjUgLy8gImJ5ZSIKCWR1cAoJZnJhbWVfYnVyeSAwIC8vIG1lc3NhZ2U6IGJ5dGVbXQoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyByZXR1cm5BcnJheVZhbHVlT25Bc3NpZ25tZW50KCl1aW50NjQKKmFiaV9yb3V0ZV9yZXR1cm5BcnJheVZhbHVlT25Bc3NpZ25tZW50OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIHJldHVybkFycmF5VmFsdWVPbkFzc2lnbm1lbnQoKXVpbnQ2NAoJY2FsbHN1YiByZXR1cm5BcnJheVZhbHVlT25Bc3NpZ25tZW50CglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gcmV0dXJuQXJyYXlWYWx1ZU9uQXNzaWdubWVudCgpOiB1aW50NjQKcmV0dXJuQXJyYXlWYWx1ZU9uQXNzaWdubWVudDoKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czoyOTgKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMSwgMiwgM10KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDMKCWZyYW1lX2J1cnkgMCAvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozMDAKCS8vIHJldHVybiAoYVswXSA9IDQpOwoJZnJhbWVfZGlnIDAgLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPgoJaW50IDAKCWludCA0CglkdXAKCXN0b3JlIDI0NSAvLyBhc3NpZ25tZW50IHZhbHVlCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAwIC8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4KCWxvYWQgMjQ1IC8vIGFzc2lnbm1lbnQgdmFsdWUKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gcmV0dXJuU3RvcmFnZVZhbHVlT25Bc3NpZ25tZW50KCl1aW50NjQKKmFiaV9yb3V0ZV9yZXR1cm5TdG9yYWdlVmFsdWVPbkFzc2lnbm1lbnQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgcmV0dXJuU3RvcmFnZVZhbHVlT25Bc3NpZ25tZW50KCl1aW50NjQKCWNhbGxzdWIgcmV0dXJuU3RvcmFnZVZhbHVlT25Bc3NpZ25tZW50CglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gcmV0dXJuU3RvcmFnZVZhbHVlT25Bc3NpZ25tZW50KCk6IHVpbnQ2NApyZXR1cm5TdG9yYWdlVmFsdWVPbkFzc2lnbm1lbnQ6Cglwcm90byAwIDEKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMwNAoJLy8gdGhpcy5nS2V5LnZhbHVlID0gMQoJYnl0ZSAweDY3NGI2NTc5IC8vICJnS2V5IgoJaW50IDEKCWFwcF9nbG9iYWxfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozMDYKCS8vIHJldHVybiAodGhpcy5nS2V5LnZhbHVlID0gMik7CglieXRlIDB4Njc0YjY1NzkgLy8gImdLZXkiCglpbnQgMgoJZHVwCglzdG9yZSAyNDUgLy8gYXNzaWdubWVudCB2YWx1ZQoJYXBwX2dsb2JhbF9wdXQKCWxvYWQgMjQ1IC8vIGFzc2lnbm1lbnQgdmFsdWUKCXJldHN1YgoKLy8gcmV0dXJuT3BlcmF0b3JBc3NpZ25tZW50VmFsdWUoKXVpbnQ2NAoqYWJpX3JvdXRlX3JldHVybk9wZXJhdG9yQXNzaWdubWVudFZhbHVlOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIHJldHVybk9wZXJhdG9yQXNzaWdubWVudFZhbHVlKCl1aW50NjQKCWNhbGxzdWIgcmV0dXJuT3BlcmF0b3JBc3NpZ25tZW50VmFsdWUKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyByZXR1cm5PcGVyYXRvckFzc2lnbm1lbnRWYWx1ZSgpOiB1aW50NjQKcmV0dXJuT3BlcmF0b3JBc3NpZ25tZW50VmFsdWU6Cglwcm90byAwIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzEwCgkvLyBhID0gMQoJaW50IDEKCWZyYW1lX2J1cnkgMCAvLyBhOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMxMgoJLy8gcmV0dXJuIChhICs9IDIpOwoJZnJhbWVfZGlnIDAgLy8gYTogdWludDY0CglpbnQgMgoJKwoJZHVwCglzdG9yZSAyNDUgLy8gYXNzaWdubWVudCB2YWx1ZQoJZnJhbWVfYnVyeSAwIC8vIGE6IHVpbnQ2NAoJbG9hZCAyNDUgLy8gYXNzaWdubWVudCB2YWx1ZQoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyByZXR1cm5BcnJheVZhbHVlT25PcGVyYXRvckFzc2lnbm1lbnQoKXVpbnQ2NAoqYWJpX3JvdXRlX3JldHVybkFycmF5VmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSByZXR1cm5BcnJheVZhbHVlT25PcGVyYXRvckFzc2lnbm1lbnQoKXVpbnQ2NAoJY2FsbHN1YiByZXR1cm5BcnJheVZhbHVlT25PcGVyYXRvckFzc2lnbm1lbnQKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyByZXR1cm5BcnJheVZhbHVlT25PcGVyYXRvckFzc2lnbm1lbnQoKTogdWludDY0CnJldHVybkFycmF5VmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudDoKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozMTYKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMSwgMiwgM10KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDMKCWZyYW1lX2J1cnkgMCAvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozMTgKCS8vIHJldHVybiAoYVswXSArPSA0KTsKCWZyYW1lX2RpZyAwIC8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4KCWludCAwCglmcmFtZV9kaWcgMCAvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWR1cAoJc3RvcmUgMjQ1IC8vIGFzc2lnbm1lbnQgdmFsdWUKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDAgLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPgoJbG9hZCAyNDUgLy8gYXNzaWdubWVudCB2YWx1ZQoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyByZXR1cm5BcnJheUluU3RvcmFnZVZhbHVlT25PcGVyYXRvckFzc2lnbm1lbnQoKXVpbnQ2NAoqYWJpX3JvdXRlX3JldHVybkFycmF5SW5TdG9yYWdlVmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSByZXR1cm5BcnJheUluU3RvcmFnZVZhbHVlT25PcGVyYXRvckFzc2lnbm1lbnQoKXVpbnQ2NAoJY2FsbHN1YiByZXR1cm5BcnJheUluU3RvcmFnZVZhbHVlT25PcGVyYXRvckFzc2lnbm1lbnQKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyByZXR1cm5BcnJheUluU3RvcmFnZVZhbHVlT25PcGVyYXRvckFzc2lnbm1lbnQoKTogdWludDY0CnJldHVybkFycmF5SW5TdG9yYWdlVmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudDoKCXByb3RvIDAgMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzIyCgkvLyB0aGlzLnN0b3JhZ2VBcnJheS52YWx1ZSA9IFsxLCAyLCAzXQoJYnl0ZSAweDczNzQ2ZjcyNjE2NzY1NDE3MjcyNjE3OSAvLyAic3RvcmFnZUFycmF5IgoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMwoJYXBwX2dsb2JhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMyNAoJLy8gcmV0dXJuICh0aGlzLnN0b3JhZ2VBcnJheS52YWx1ZVswXSArPSA0KTsKCWJ5dGUgMHg3Mzc0NmY3MjYxNjc2NTQxNzI3MjYxNzkgLy8gInN0b3JhZ2VBcnJheSIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMAoJYnl0ZSAweDczNzQ2ZjcyNjE2NzY1NDE3MjcyNjE3OSAvLyAic3RvcmFnZUFycmF5IgoJYXBwX2dsb2JhbF9nZXQKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZHVwCglzdG9yZSAyNDUgLy8gYXNzaWdubWVudCB2YWx1ZQoJaXRvYgoJcmVwbGFjZTMKCWJ5dGUgMHg3Mzc0NmY3MjYxNjc2NTQxNzI3MjYxNzkgLy8gInN0b3JhZ2VBcnJheSIKCXN3YXAKCWFwcF9nbG9iYWxfcHV0Cglsb2FkIDI0NSAvLyBhc3NpZ25tZW50IHZhbHVlCglyZXRzdWIKCi8vIGNvbnN0cygpdm9pZAoqYWJpX3JvdXRlX2NvbnN0czoKCS8vIGV4ZWN1dGUgY29uc3RzKCl2b2lkCgljYWxsc3ViIGNvbnN0cwoJaW50IDEKCXJldHVybgoKLy8gY29uc3RzKCk6IHZvaWQKY29uc3RzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozMjgKCS8vIGFzc2VydChTVFJJTkdfQ09OU1QgPT09ICdmb28nKQoJYnl0ZSAiZm9vIgoJYnl0ZSAweDY2NmY2ZiAvLyAiZm9vIgoJPT0KCWFzc2VydAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzI5CgkvLyBhc3NlcnQoTlVNX0NPTlNUID09PSAxMjMpCglpbnQgMTIzCglkdXAKCT09Cglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMzMAoJLy8gYXNzZXJ0KE5FU1RFRF9DT05TVCA9PT0gMTIzKQoJaW50IDEyMwoJZHVwCgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIGFzc2VydFdpdGhNZXNzYWdlKCl2b2lkCiphYmlfcm91dGVfYXNzZXJ0V2l0aE1lc3NhZ2U6CgkvLyBleGVjdXRlIGFzc2VydFdpdGhNZXNzYWdlKCl2b2lkCgljYWxsc3ViIGFzc2VydFdpdGhNZXNzYWdlCglpbnQgMQoJcmV0dXJuCgovLyBhc3NlcnRXaXRoTWVzc2FnZSgpOiB2b2lkCmFzc2VydFdpdGhNZXNzYWdlOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozMzQKCS8vIGFzc2VydChmYWxzZSwgJ3RoaXMgaXMgZmFsc2UnKQoJaW50IDAKCgkvLyB0aGlzIGlzIGZhbHNlCglhc3NlcnQKCXJldHN1YgoKLy8gb3Bjb2RlQWxpYXNlcygpdm9pZAoqYWJpX3JvdXRlX29wY29kZUFsaWFzZXM6CgkvLyBleGVjdXRlIG9wY29kZUFsaWFzZXMoKXZvaWQKCWNhbGxzdWIgb3Bjb2RlQWxpYXNlcwoJaW50IDEKCXJldHVybgoKLy8gb3Bjb2RlQWxpYXNlcygpOiB2b2lkCm9wY29kZUFsaWFzZXM6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjMzOAoJLy8gZXh0cmFjdFVpbnQxNihiemVybyg2NCksIDApCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWludCAwCglleHRyYWN0X3VpbnQxNgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzM5CgkvLyBleHRyYWN0VWludDMyKGJ6ZXJvKDY0KSwgMCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJaW50IDAKCWV4dHJhY3RfdWludDMyCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNDAKCS8vIGV4dHJhY3RVaW50NjQoYnplcm8oNjQpLCAwKQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglpbnQgMAoJZXh0cmFjdF91aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM0MQoJLy8gZWQyNTUxOVZlcmlmeUJhcmUoYnplcm8oNjQpLCBiemVybyg2NCksIGJ6ZXJvKDMyKSkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJZHVwCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJZWQyNTUxOXZlcmlmeV9iYXJlCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNDIKCS8vIGVkMjU1MTlWZXJpZnkoYnplcm8oNjQpLCBiemVybyg2NCksIGJ6ZXJvKDMyKSkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJZHVwCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJZWQyNTUxOXZlcmlmeQoJcmV0c3ViCgovLyB2cmZWZXJpZnlPcCgpdm9pZAoqYWJpX3JvdXRlX3ZyZlZlcmlmeU9wOgoJLy8gZXhlY3V0ZSB2cmZWZXJpZnlPcCgpdm9pZAoJY2FsbHN1YiB2cmZWZXJpZnlPcAoJaW50IDEKCXJldHVybgoKLy8gdnJmVmVyaWZ5T3AoKTogdm9pZAp2cmZWZXJpZnlPcDoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDMKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM0NgoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzQ3CgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNDgKCS8vIGluY3JlYXNlT3Bjb2RlQnVkZ2V0KCkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWJ5dGUgYjY0IENvRUIgLy8gI3ByYWdtYSB2ZXJzaW9uIDEwOyBpbnQgMQoJZHVwCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoJaXR4bl9zdWJtaXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM0OQoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzUwCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNTEKCS8vIGluY3JlYXNlT3Bjb2RlQnVkZ2V0KCkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWJ5dGUgYjY0IENvRUIgLy8gI3ByYWdtYSB2ZXJzaW9uIDEwOyBpbnQgMQoJZHVwCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoJaXR4bl9zdWJtaXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM1MgoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzUzCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNTQKCS8vIGluY3JlYXNlT3Bjb2RlQnVkZ2V0KCkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWJ5dGUgYjY0IENvRUIgLy8gI3ByYWdtYSB2ZXJzaW9uIDEwOyBpbnQgMQoJZHVwCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoJaXR4bl9zdWJtaXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM1NgoJLy8gciA9IHZyZlZlZmlyeSgnVnJmQWxnb3JhbmQnLCBiemVybygzMikgYXMgYnl0ZXMsIGJ6ZXJvKDgwKSwgYnplcm8oMzIpKQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJdnJmX3ZlcmlmeSBWcmZBbGdvcmFuZAoJZnJhbWVfYnVyeSAyIC8vIHIgdmVyaWZpZWQ6IGJvb2wKCWZyYW1lX2J1cnkgMyAvLyByIG91dHB1dDogYnl0ZVtdCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNTcKCS8vIGFzc2VydCghci52ZXJpZmllZCkKCWZyYW1lX2RpZyAyIC8vIHIgdmVyaWZpZWQ6IGJvb2wKCSEKCWFzc2VydAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzU4CgkvLyBsb2coci5vdXRwdXQpCglmcmFtZV9kaWcgMyAvLyByIG91dHB1dDogYnl0ZVtdCglsb2cKCXJldHN1YgoKLy8gZWNNYXRoKCl2b2lkCiphYmlfcm91dGVfZWNNYXRoOgoJLy8gZXhlY3V0ZSBlY01hdGgoKXZvaWQKCWNhbGxzdWIgZWNNYXRoCglpbnQgMQoJcmV0dXJuCgovLyBlY01hdGgoKTogdm9pZAplY01hdGg6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzYyCgkvLyBlY1NjYWxhck11bCgnQk4yNTRnMScsICcnLCAnJykKCWJ5dGUgMHggLy8gIiIKCWR1cAoJZWNfc2NhbGFyX211bCBCTjI1NGcxCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNjMKCS8vIGVjUGFpcmluZ0NoZWNrKCdCTjI1NGcxJywgJycsICcnKQoJYnl0ZSAweCAvLyAiIgoJZHVwCgllY19wYWlyaW5nX2NoZWNrIEJOMjU0ZzEKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM2NAoJLy8gc2NhbGFyczogYnl0ZXMzMltdID0gW2J6ZXJvKDMyKSwgYnplcm8oMzIpXQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglmcmFtZV9idXJ5IDAgLy8gc2NhbGFyczogYnl0ZXMzMltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozNjUKCS8vIGVjTXVsdGlTY2FsYXJNdWwoJ0JOMjU0ZzEnLCAnJywgc2NhbGFycykKCWJ5dGUgMHggLy8gIiIKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAvLyBzY2FsYXJzOiBieXRlczMyW10KCWVjX211bHRpX3NjYWxhcl9tdWwgQk4yNTRnMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzY2CgkvLyBlY1N1Ymdyb3VwQ2hlY2soJ0JOMjU0ZzEnLCAnJykKCWJ5dGUgMHggLy8gIiIKCWVjX3N1Ymdyb3VwX2NoZWNrIEJOMjU0ZzEKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM2NwoJLy8gZWNNYXBUbygnQk4yNTRnMScsICcnKQoJYnl0ZSAweCAvLyAiIgoJZWNfbWFwX3RvIEJOMjU0ZzEKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM2OAoJLy8gZWNBZGQoJ0JOMjU0ZzEnLCAnJywgJycpCglieXRlIDB4IC8vICIiCglkdXAKCWVjX2FkZCBCTjI1NGcxCglyZXRzdWIKCi8vIGdpdHhuKCl2b2lkCiphYmlfcm91dGVfZ2l0eG46CgkvLyBleGVjdXRlIGdpdHhuKCl2b2lkCgljYWxsc3ViIGdpdHhuCglpbnQgMQoJcmV0dXJuCgovLyBnaXR4bigpOiB2b2lkCmdpdHhuOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM3MgoJLy8gbG9nKHRoaXMubGFzdElubmVyR3JvdXBbMF0uc2VuZGVyKQoJZ2l0eG4gMCBTZW5kZXIKCWxvZwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6Mzc0CgkvLyBhbm90aGVyVHhuID0gdGhpcy5sYXN0SW5uZXJHcm91cFsxXQoJaW50IDEKCWZyYW1lX2J1cnkgMCAvLyBhbm90aGVyVHhuOiBnaXR4bgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6Mzc2CgkvLyBsb2coYW5vdGhlclR4bi5zZW5kZXIpCglnaXR4biAxIFNlbmRlcgoJbG9nCglyZXRzdWIKCi8vIGdldFNldEJ5dGVzKCl2b2lkCiphYmlfcm91dGVfZ2V0U2V0Qnl0ZXM6CgkvLyBleGVjdXRlIGdldFNldEJ5dGVzKCl2b2lkCgljYWxsc3ViIGdldFNldEJ5dGVzCglpbnQgMQoJcmV0dXJuCgovLyBnZXRTZXRCeXRlcygpOiB2b2lkCmdldFNldEJ5dGVzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozODAKCS8vIGxvZyhzZXRiaXQoJ2ZvbycsIDAsIHRydWUpKQoJYnl0ZSAweDY2NmY2ZiAvLyAiZm9vIgoJaW50IDAKCWludCAxCglzZXRiaXQKCWxvZwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzgxCgkvLyBnZXRiaXQoJ2ZvbycsIDApCglieXRlIDB4NjY2ZjZmIC8vICJmb28iCglpbnQgMAoJZ2V0Yml0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozODIKCS8vIGdldGJ5dGUoJ2ZvbycsIDApCglieXRlIDB4NjY2ZjZmIC8vICJmb28iCglpbnQgMAoJZ2V0Ynl0ZQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzgzCgkvLyBzZXRieXRlKCdmb28nLCAwLCAxKQoJYnl0ZSAweDY2NmY2ZiAvLyAiZm9vIgoJaW50IDAKCWludCAxCglzZXRieXRlCglyZXRzdWIKCi8vIGdldFNldFVpbnQ2NCgpdm9pZAoqYWJpX3JvdXRlX2dldFNldFVpbnQ2NDoKCS8vIGV4ZWN1dGUgZ2V0U2V0VWludDY0KCl2b2lkCgljYWxsc3ViIGdldFNldFVpbnQ2NAoJaW50IDEKCXJldHVybgoKLy8gZ2V0U2V0VWludDY0KCk6IHZvaWQKZ2V0U2V0VWludDY0OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czozODcKCS8vIGFzc2VydChzZXRiaXQoMTIzLCAwLCB0cnVlKSkKCWludCAxMjMKCWludCAwCglpbnQgMQoJc2V0Yml0Cglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM4OAoJLy8gZ2V0Yml0KDEyMywgMCkKCWludCAxMjMKCWludCAwCglnZXRiaXQKCXJldHN1YgoKLy8gYmxvY2tPcCgpdm9pZAoqYWJpX3JvdXRlX2Jsb2NrT3A6CgkvLyBleGVjdXRlIGJsb2NrT3AoKXZvaWQKCWNhbGxzdWIgYmxvY2tPcAoJaW50IDEKCXJldHVybgoKLy8gYmxvY2tPcCgpOiB2b2lkCmJsb2NrT3A6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjM5MgoJLy8gbG9nKGJsb2Nrc1tnbG9iYWxzLnJvdW5kIC0gMV0uc2VlZCkKCWdsb2JhbCBSb3VuZAoJaW50IDEKCS0KCWJsb2NrIEJsa1NlZWQKCWxvZwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6MzkzCgkvLyBhc3NlcnQoYmxvY2tzW2dsb2JhbHMucm91bmQgLSAxXS50aW1lc3RhbXApCglnbG9iYWwgUm91bmQKCWludCAxCgktCglibG9jayBCbGtUaW1lc3RhbXAKCWFzc2VydAoJcmV0c3ViCgovLyBiNjQoKXZvaWQKKmFiaV9yb3V0ZV9iNjQ6CgkvLyBleGVjdXRlIGI2NCgpdm9pZAoJY2FsbHN1YiBiNjQKCWludCAxCglyZXR1cm4KCi8vIGI2NCgpOiB2b2lkCmI2NDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6Mzk3CgkvLyBsb2coYmFzZTY0RGVjb2RlKCdTdGRFbmNvZGluZycsICcnKSkKCWJ5dGUgMHggLy8gIiIKCWJhc2U2NF9kZWNvZGUgU3RkRW5jb2RpbmcKCWxvZwoJcmV0c3ViCgovLyBqc29uKCl2b2lkCiphYmlfcm91dGVfanNvbjoKCS8vIGV4ZWN1dGUganNvbigpdm9pZAoJY2FsbHN1YiBqc29uCglpbnQgMQoJcmV0dXJuCgovLyBqc29uKCk6IHZvaWQKanNvbjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDAxCgkvLyBsb2coanNvblJlZignSlNPTk9iamVjdCcsICcnLCAnJykpCglieXRlIDB4IC8vICIiCglkdXAKCWpzb25fcmVmIEpTT05PYmplY3QKCWxvZwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDAyCgkvLyBsb2coanNvblJlZignSlNPTlN0cmluZycsICcnLCAnJykpCglieXRlIDB4IC8vICIiCglkdXAKCWpzb25fcmVmIEpTT05TdHJpbmcKCWxvZwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDAzCgkvLyBhc3NlcnQoanNvblJlZignSlNPTlVpbnQ2NCcsICcnLCAnJykpCglieXRlIDB4IC8vICIiCglkdXAKCWpzb25fcmVmIEpTT05VaW50NjQKCWFzc2VydAoJcmV0c3ViCgovLyBiaXRsZW5PcCgpdm9pZAoqYWJpX3JvdXRlX2JpdGxlbk9wOgoJLy8gZXhlY3V0ZSBiaXRsZW5PcCgpdm9pZAoJY2FsbHN1YiBiaXRsZW5PcAoJaW50IDEKCXJldHVybgoKLy8gYml0bGVuT3AoKTogdm9pZApiaXRsZW5PcDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDA3CgkvLyBiaXRsZW4oMTIzKQoJaW50IDEyMwoJYml0bGVuCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0MDgKCS8vIGJpdGxlbignZm9vJykKCWJ5dGUgMHg2NjZmNmYgLy8gImZvbyIKCWJpdGxlbgoJcmV0c3ViCgovLyBjb21wdXRlZENvbnN0KCl2b2lkCiphYmlfcm91dGVfY29tcHV0ZWRDb25zdDoKCS8vIGV4ZWN1dGUgY29tcHV0ZWRDb25zdCgpdm9pZAoJY2FsbHN1YiBjb21wdXRlZENvbnN0CglpbnQgMQoJcmV0dXJuCgovLyBjb21wdXRlZENvbnN0KCk6IHZvaWQKY29tcHV0ZWRDb25zdDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDEyCgkvLyBhc3NlcnQoQ09NUFVURURfQ09OU1QpCglpbnQgMjQ2Cglhc3NlcnQKCXJldHN1YgoKLy8gbXVsdGlDb21wdXRlZENvbnN0KCl2b2lkCiphYmlfcm91dGVfbXVsdGlDb21wdXRlZENvbnN0OgoJLy8gZXhlY3V0ZSBtdWx0aUNvbXB1dGVkQ29uc3QoKXZvaWQKCWNhbGxzdWIgbXVsdGlDb21wdXRlZENvbnN0CglpbnQgMQoJcmV0dXJuCgovLyBtdWx0aUNvbXB1dGVkQ29uc3QoKTogdm9pZAptdWx0aUNvbXB1dGVkQ29uc3Q6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQxNgoJLy8gYXNzZXJ0KE1VVExJX0NPTVBVVEVEX0NPTlNUKQoJaW50IDMwMzgxCglhc3NlcnQKCXJldHN1YgoKLy8gcmVhZFNjaGVtYSgpdm9pZAoqYWJpX3JvdXRlX3JlYWRTY2hlbWE6CgkvLyBleGVjdXRlIHJlYWRTY2hlbWEoKXZvaWQKCWNhbGxzdWIgcmVhZFNjaGVtYQoJaW50IDEKCXJldHVybgoKLy8gcmVhZFNjaGVtYSgpOiB2b2lkCnJlYWRTY2hlbWE6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQyMAoJLy8gYXNzZXJ0KFNjaGVtYUNvbnRyYWN0LnNjaGVtYS5nbG9iYWwubnVtVWludCA9PT0gMSkKCWludCAxCglkdXAKCT09Cglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQyMQoJLy8gYXNzZXJ0KFNjaGVtYUNvbnRyYWN0LnNjaGVtYS5nbG9iYWwubnVtQnl0ZVNsaWNlID09PSAyKQoJaW50IDIKCWR1cAoJPT0KCWFzc2VydAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDIyCgkvLyBhc3NlcnQoU2NoZW1hQ29udHJhY3Quc2NoZW1hLmxvY2FsLm51bVVpbnQgPT09IDMpCglpbnQgMwoJZHVwCgk9PQoJYXNzZXJ0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0MjMKCS8vIGFzc2VydChTY2hlbWFDb250cmFjdC5zY2hlbWEubG9jYWwubnVtQnl0ZVNsaWNlID09PSA0KQoJaW50IDQKCWR1cAoJPT0KCWFzc2VydAoJcmV0c3ViCgovLyBjb21wYXJpc29uT3IoKWJvb2wKKmFiaV9yb3V0ZV9jb21wYXJpc29uT3I6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgY29tcGFyaXNvbk9yKClib29sCgljYWxsc3ViIGNvbXBhcmlzb25PcgoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBjb21wYXJpc29uT3IoKTogYm9vbGVhbgpjb21wYXJpc29uT3I6Cglwcm90byAwIDEKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQyNwoJLy8gcmV0dXJuIHRoaXMudHhuLnNlbmRlciA9PT0gZ2xvYmFscy56ZXJvQWRkcmVzcyB8fCB0aGlzLnR4bi5zZW5kZXIgPT09IGdsb2JhbHMuemVyb0FkZHJlc3M7Cgl0eG4gU2VuZGVyCglnbG9iYWwgWmVyb0FkZHJlc3MKCT09CglkdXAKCWJueiAqc2tpcF9vcjAKCXR4biBTZW5kZXIKCWdsb2JhbCBaZXJvQWRkcmVzcwoJPT0KCXx8Cgoqc2tpcF9vcjA6CglyZXRzdWIKCi8vIHR4bkFyZ3NNZXRob2QocGF5KXZvaWQKKmFiaV9yb3V0ZV90eG5BcmdzTWV0aG9kOgoJLy8gX3BheTE6IHBheQoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgcGF5Cgk9PQoKCS8vIGFyZ3VtZW50IDAgKF9wYXkxKSBmb3IgdHhuQXJnc01ldGhvZCBtdXN0IGJlIGEgcGF5IHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBleGVjdXRlIHR4bkFyZ3NNZXRob2QocGF5KXZvaWQKCWNhbGxzdWIgdHhuQXJnc01ldGhvZAoJaW50IDEKCXJldHVybgoKLy8gdHhuQXJnc01ldGhvZChfcGF5MTogUGF5VHhuKTogdm9pZAp0eG5BcmdzTWV0aG9kOgoJcHJvdG8gMSAwCglyZXRzdWIKCi8vIGNhbGxUeG5BcmdzTWV0aG9kKCl2b2lkCiphYmlfcm91dGVfY2FsbFR4bkFyZ3NNZXRob2Q6CgkvLyBleGVjdXRlIGNhbGxUeG5BcmdzTWV0aG9kKCl2b2lkCgljYWxsc3ViIGNhbGxUeG5BcmdzTWV0aG9kCglpbnQgMQoJcmV0dXJuCgovLyBjYWxsVHhuQXJnc01ldGhvZCgpOiB2b2lkCmNhbGxUeG5BcmdzTWV0aG9kOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0MzQKCS8vIEdlbmVyYWxUZXN0LmNhbGwoeyBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KDEzMzcpIH0pLnR4bkFyZ3NNZXRob2QoCgkvLyAgICAgICBuZXcgUGF5VHhuKHsgcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsIGFtb3VudDogMCB9KQoJLy8gICAgICkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQzNQoJLy8gcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0MzUKCS8vIGFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0MzQKCS8vIEdlbmVyYWxUZXN0LmNhbGwoeyBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KDEzMzcpIH0pLnR4bkFyZ3NNZXRob2QoCgkvLyAgICAgICBuZXcgUGF5VHhuKHsgcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsIGFtb3VudDogMCB9KQoJLy8gICAgICkKCWl0eG5fbmV4dAoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAidHhuQXJnc01ldGhvZChwYXkpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0MzQKCS8vIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQoMTMzNykKCWludCAxMzM3CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQzNQoJLy8gbmV3IFBheVR4bih7IHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLCBhbW91bnQ6IDAgfSkKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gc3RhdGljVmFsdWVMZW4odWludDI1Nil2b2lkCiphYmlfcm91dGVfc3RhdGljVmFsdWVMZW46CgkvLyB4OiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHgpIGZvciBzdGF0aWNWYWx1ZUxlbiBtdXN0IGJlIGEgdWludDI1NgoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBzdGF0aWNWYWx1ZUxlbih1aW50MjU2KXZvaWQKCWNhbGxzdWIgc3RhdGljVmFsdWVMZW4KCWludCAxCglyZXR1cm4KCi8vIHN0YXRpY1ZhbHVlTGVuKHg6IHVpbnQyNTYpOiB2b2lkCnN0YXRpY1ZhbHVlTGVuOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NDAKCS8vIGFzc2VydChsZW4oeCkpCglpbnQgMzIKCWFzc2VydAoJcmV0c3ViCgovLyBzdGF0aWNUeXBlTGVuKCl2b2lkCiphYmlfcm91dGVfc3RhdGljVHlwZUxlbjoKCS8vIGV4ZWN1dGUgc3RhdGljVHlwZUxlbigpdm9pZAoJY2FsbHN1YiBzdGF0aWNUeXBlTGVuCglpbnQgMQoJcmV0dXJuCgovLyBzdGF0aWNUeXBlTGVuKCk6IHZvaWQKc3RhdGljVHlwZUxlbjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDQ0CgkvLyBhc3NlcnQobGVuPHVpbnQyNTY+KCkpCglpbnQgMzIKCWFzc2VydAoJcmV0c3ViCgovLyBkeW5hbWljU2NyYXRjaFNsb3QoKXZvaWQKKmFiaV9yb3V0ZV9keW5hbWljU2NyYXRjaFNsb3Q6CgkvLyBleGVjdXRlIGR5bmFtaWNTY3JhdGNoU2xvdCgpdm9pZAoJY2FsbHN1YiBkeW5hbWljU2NyYXRjaFNsb3QKCWludCAxCglyZXR1cm4KCi8vIGR5bmFtaWNTY3JhdGNoU2xvdCgpOiB2b2lkCmR5bmFtaWNTY3JhdGNoU2xvdDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDQ4CgkvLyB0aGlzLmR5bmFtaWNTY3JhdGNoKDEpLnZhbHVlID0gMTMzNwoJaW50IDEKCWludCAxMzM3CglzdG9yZXMKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ0OQoJLy8gYXNzZXJ0KHRoaXMuZHluYW1pY1NjcmF0Y2goMSkudmFsdWUgPT09IDEzMzcpCglpbnQgMQoJbG9hZHMKCWludCAxMzM3Cgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIGluY3JlbWVudFNjcmF0Y2hTbG90KCl2b2lkCiphYmlfcm91dGVfaW5jcmVtZW50U2NyYXRjaFNsb3Q6CgkvLyBleGVjdXRlIGluY3JlbWVudFNjcmF0Y2hTbG90KCl2b2lkCgljYWxsc3ViIGluY3JlbWVudFNjcmF0Y2hTbG90CglpbnQgMQoJcmV0dXJuCgovLyBpbmNyZW1lbnRTY3JhdGNoU2xvdCgpOiB2b2lkCmluY3JlbWVudFNjcmF0Y2hTbG90OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NTMKCS8vIHRoaXMuc2NyYXRjaC52YWx1ZSA9IDEzMzcKCWludCAxMzM3CglzdG9yZSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NTQKCS8vIHRoaXMuc2NyYXRjaC52YWx1ZSArPSAxCglsb2FkIDAKCWludCAxCgkrCglzdG9yZSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NTUKCS8vIGFzc2VydCh0aGlzLnNjcmF0Y2gudmFsdWUgPT09IDEzMzgpCglsb2FkIDAKCWludCAxMzM4Cgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIGluY3JlbWVudER5bmFtaWNTY3JhdGNoU2xvdCgpdm9pZAoqYWJpX3JvdXRlX2luY3JlbWVudER5bmFtaWNTY3JhdGNoU2xvdDoKCS8vIGV4ZWN1dGUgaW5jcmVtZW50RHluYW1pY1NjcmF0Y2hTbG90KCl2b2lkCgljYWxsc3ViIGluY3JlbWVudER5bmFtaWNTY3JhdGNoU2xvdAoJaW50IDEKCXJldHVybgoKLy8gaW5jcmVtZW50RHluYW1pY1NjcmF0Y2hTbG90KCk6IHZvaWQKaW5jcmVtZW50RHluYW1pY1NjcmF0Y2hTbG90OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NTkKCS8vIHRoaXMuZHluYW1pY1NjcmF0Y2goMikudmFsdWUgPSAxMzM3CglpbnQgMgoJaW50IDEzMzcKCXN0b3JlcwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDYwCgkvLyB0aGlzLmR5bmFtaWNTY3JhdGNoKDIpLnZhbHVlICs9IDEKCWludCAyCglsb2FkcwoJaW50IDEKCSsKCWludCAyCglzd2FwCglzdG9yZXMKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ2MQoJLy8gYXNzZXJ0KHRoaXMuZHluYW1pY1NjcmF0Y2goMikudmFsdWUgPT09IDEzMzgpCglpbnQgMgoJbG9hZHMKCWludCAxMzM4Cgk9PQoJYXNzZXJ0CglyZXRzdWIKCi8vIGZyb21BZGRyZXNzKCl2b2lkCiphYmlfcm91dGVfZnJvbUFkZHJlc3M6CgkvLyBleGVjdXRlIGZyb21BZGRyZXNzKCl2b2lkCgljYWxsc3ViIGZyb21BZGRyZXNzCglpbnQgMQoJcmV0dXJuCgovLyBmcm9tQWRkcmVzcygpOiB2b2lkCmZyb21BZGRyZXNzOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ2NQoJLy8gYSA9IEFkZHJlc3MuZnJvbUFkZHJlc3MoJ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZNUhGS1EnKQoJYWRkciBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBWTVIRktRCglmcmFtZV9idXJ5IDAgLy8gYTogYWRkcmVzcwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDY2CgkvLyBhc3NlcnQoYSA9PT0gQWRkcmVzcy56ZXJvQWRkcmVzcykKCWZyYW1lX2RpZyAwIC8vIGE6IGFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJPT0KCWFzc2VydAoJcmV0c3ViCgovLyBlYXJseVJldHVybih1aW50NjQpdWludDY0CiphYmlfcm91dGVfZWFybHlSZXR1cm46CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGE6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZWFybHlSZXR1cm4odWludDY0KXVpbnQ2NAoJY2FsbHN1YiBlYXJseVJldHVybgoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGVhcmx5UmV0dXJuKGE6IHVpbnQ2NCk6IHVpbnQ2NAplYXJseVJldHVybjoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDcwCgkvLyBhID09PSAxCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglpbnQgMQoJPT0KCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ3MQoJLy8gcmV0dXJuIDI7CglpbnQgMgoJYiAqZWFybHlSZXR1cm4qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDczCgkvLyBiID0gYSArIDEKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDAgLy8gYjogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NzQKCS8vIHJldHVybiBiOwoJZnJhbWVfZGlnIDAgLy8gYjogdWludDY0CgoqZWFybHlSZXR1cm4qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIGFzc2V0TWV0aG9kQXJncygpdm9pZAoqYWJpX3JvdXRlX2Fzc2V0TWV0aG9kQXJnczoKCS8vIGV4ZWN1dGUgYXNzZXRNZXRob2RBcmdzKCl2b2lkCgljYWxsc3ViIGFzc2V0TWV0aG9kQXJncwoJaW50IDEKCXJldHVybgoKLy8gYXNzZXRNZXRob2RBcmdzKCk6IHZvaWQKYXNzZXRNZXRob2RBcmdzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0NzgKCS8vIHRoaXMudHhuQ29tcG9zZXIuc2VuZCgKCS8vICAgICAgIG5ldyBNZXRob2RDYWxsVHhuPFtBc3NldFJlZmVyZW5jZV0sIHZvaWQ+KHsKCS8vICAgICAgICAgbmFtZTogJ2ZvbycsCgkvLyAgICAgICAgIG1ldGhvZEFyZ3M6IFtBc3NldElELmZyb21VaW50NjQoMSldLAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJmb28oYXNzZXQpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvY29udHJhY3RzL2dlbmVyYWwuYWxnby50czo0ODEKCS8vIG1ldGhvZEFyZ3M6IFtBc3NldElELmZyb21VaW50NjQoMSldCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ4MQoJLy8gQXNzZXRJRC5mcm9tVWludDY0KDEpCglpbnQgMQoJaXR4bl9maWVsZCBBc3NldHMKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gbXVsdGlwbGVQcm9ncmFtUGFnZXMoKXZvaWQKKmFiaV9yb3V0ZV9tdWx0aXBsZVByb2dyYW1QYWdlczoKCS8vIGV4ZWN1dGUgbXVsdGlwbGVQcm9ncmFtUGFnZXMoKXZvaWQKCWNhbGxzdWIgbXVsdGlwbGVQcm9ncmFtUGFnZXMKCWludCAxCglyZXR1cm4KCi8vIG11bHRpcGxlUHJvZ3JhbVBhZ2VzKCk6IHZvaWQKbXVsdGlwbGVQcm9ncmFtUGFnZXM6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjQ5MQoJLy8gdGhpcy50eG5Db21wb3Nlci5zZW5kKAoJLy8gICAgICAgbmV3IEFwcENhbGxUeG4oewoJLy8gICAgICAgICBhcHByb3ZhbFByb2dyYW06IFt0aGlzLnBhZ2VPbmUudmFsdWUsIHRoaXMucGFnZVR3by52YWx1ZV0sCgkvLyAgICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBbdGhpcy5wYWdlT25lLnZhbHVlLCB0aGlzLnBhZ2VUd28udmFsdWVdLAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDkzCgkvLyBhcHByb3ZhbFByb2dyYW06IFt0aGlzLnBhZ2VPbmUudmFsdWUsIHRoaXMucGFnZVR3by52YWx1ZV0KCWJ5dGUgMHg3MDYxNjc2NTRmNmU2NSAvLyAicGFnZU9uZSIKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMucGFnZU9uZS52YWx1ZQoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCglieXRlIDB4NzA2MTY3NjU1NDc3NmYgLy8gInBhZ2VUd28iCglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLnBhZ2VUd28udmFsdWUKCWFzc2VydAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9nZW5lcmFsLmFsZ28udHM6NDk0CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogW3RoaXMucGFnZU9uZS52YWx1ZSwgdGhpcy5wYWdlVHdvLnZhbHVlXQoJYnl0ZSAweDcwNjE2NzY1NGY2ZTY1IC8vICJwYWdlT25lIgoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5wYWdlT25lLnZhbHVlCglhc3NlcnQKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwoJYnl0ZSAweDcwNjE2NzY1NTQ3NzZmIC8vICJwYWdlVHdvIgoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5wYWdlVHdvLnZhbHVlCglhc3NlcnQKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXNzZXJ0Q29tbWVudCgpdm9pZAoqYWJpX3JvdXRlX2Fzc2VydENvbW1lbnQ6CgkvLyBleGVjdXRlIGFzc2VydENvbW1lbnQoKXZvaWQKCWNhbGxzdWIgYXNzZXJ0Q29tbWVudAoJaW50IDEKCXJldHVybgoKLy8gYXNzZXJ0Q29tbWVudCgpOiB2b2lkCmFzc2VydENvbW1lbnQ6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvZ2VuZXJhbC5hbGdvLnRzOjUwMAoJLy8gYXNzZXJ0KGZhbHNlLCAndGhpcyBpcyBmYWxzZScpCglpbnQgMAoKCS8vIHRoaXMgaXMgZmFsc2UKCWFzc2VydAoJcmV0c3ViCgovLyB0aHJvd0Vycm9yTWVzc2FnZSgpdm9pZAoqYWJpX3JvdXRlX3Rocm93RXJyb3JNZXNzYWdlOgoJLy8gZXhlY3V0ZSB0aHJvd0Vycm9yTWVzc2FnZSgpdm9pZAoJY2FsbHN1YiB0aHJvd0Vycm9yTWVzc2FnZQoJaW50IDEKCXJldHVybgoKLy8gdGhyb3dFcnJvck1lc3NhZ2UoKTogdm9pZAp0aHJvd0Vycm9yTWVzc2FnZToKCXByb3RvIDAgMAoKCS8vIHRoaXMgaXMgYW4gZXJyb3IKCWVycgoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAidHhuVHlwZUVudW0oKXZvaWQiCgltZXRob2QgInR4bkdyb3VwTGVuZ3RoKCl2b2lkIgoJbWV0aG9kICJhc3NlcnRzKGJvb2wsYm9vbCl2b2lkIgoJbWV0aG9kICJ2ZXJpZnlUeG5Gcm9tQXJnKHBheSl2b2lkIgoJbWV0aG9kICJ2ZXJpZnlUeG5Gcm9tVHhuR3JvdXAoKXZvaWQiCgltZXRob2QgInZlcmlmeVR4bkNvbmRpdGlvbigpdm9pZCIKCW1ldGhvZCAidmVyaWZ5VHhuSW5jbHVkZWRJbigpdm9pZCIKCW1ldGhvZCAidmVyaWZ5VHhuTm90SW5jbHVkZWRJbigpdm9pZCIKCW1ldGhvZCAic3VibWl0UGVuZGluZ0dyb3VwKCl2b2lkIgoJbWV0aG9kICJtZXRob2RXaXRoVHhuQXJncygpdm9pZCIKCW1ldGhvZCAic2hpZnQoKXZvaWQiCgltZXRob2QgImZyb21CeXRlcygpdm9pZCIKCW1ldGhvZCAiZnJvbVVpbnQ2NCgpdm9pZCIKCW1ldGhvZCAiYnplcm9GdW5jdGlvbigpdm9pZCIKCW1ldGhvZCAiZXZlbnRzKCl2b2lkIgoJbWV0aG9kICJsZXRPcHRpbWl6YXRpb24odWludDY0W10pdWludDY0W10iCgltZXRob2QgInN0YXRpY0NvbnRyYWN0UHJvcGVydGllcygpdm9pZCIKCW1ldGhvZCAibnVtYmVyVG9TdHJpbmcoKXZvaWQiCgltZXRob2QgIm1ldGhvZE9uUGFyZW5zKCl2b2lkIgoJbWV0aG9kICJzdHJpbmdTdWJzdHJpbmcoKXZvaWQiCgltZXRob2QgImlkUHJvcGVydHkoKXZvaWQiCgltZXRob2QgInNjcmF0Y2hTbG90KCl2b2lkIgoJbWV0aG9kICJlY2RzYSgpdm9pZCIKCW1ldGhvZCAidmVyaWZ5VHhuVHlwZXMoKXZvaWQiCgltZXRob2QgInN0cmluZ1BsdXNFcXVhbHMoKXZvaWQiCgltZXRob2QgImltcG9ydGVkUHJvZ3JhbSgpYnl0ZVtdIgoJbWV0aG9kICJjYWxsUHJpdmF0ZURlZmluZWRMYXRlcigpdm9pZCIKCW1ldGhvZCAiaW50ZXJhbFB1YmxpY01ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKCW1ldGhvZCAiY2FsbEludGVybmFsUHVibGljTWV0aG9kKCl2b2lkIgoJbWV0aG9kICJhcHBMb2FkU2NyYXRjaCgpdm9pZCIKCW1ldGhvZCAidWludE5XaXRoVW5kZXJzY29yZSgpdWludDI1NiIKCW1ldGhvZCAib3BVcCgpdm9pZCIKCW1ldGhvZCAicmV0dXJuVmFsdWVPbkFzc2lnbm1lbnQoKXN0cmluZyIKCW1ldGhvZCAicmV0dXJuQXJyYXlWYWx1ZU9uQXNzaWdubWVudCgpdWludDY0IgoJbWV0aG9kICJyZXR1cm5TdG9yYWdlVmFsdWVPbkFzc2lnbm1lbnQoKXVpbnQ2NCIKCW1ldGhvZCAicmV0dXJuT3BlcmF0b3JBc3NpZ25tZW50VmFsdWUoKXVpbnQ2NCIKCW1ldGhvZCAicmV0dXJuQXJyYXlWYWx1ZU9uT3BlcmF0b3JBc3NpZ25tZW50KCl1aW50NjQiCgltZXRob2QgInJldHVybkFycmF5SW5TdG9yYWdlVmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCgpdWludDY0IgoJbWV0aG9kICJjb25zdHMoKXZvaWQiCgltZXRob2QgImFzc2VydFdpdGhNZXNzYWdlKCl2b2lkIgoJbWV0aG9kICJvcGNvZGVBbGlhc2VzKCl2b2lkIgoJbWV0aG9kICJ2cmZWZXJpZnlPcCgpdm9pZCIKCW1ldGhvZCAiZWNNYXRoKCl2b2lkIgoJbWV0aG9kICJnaXR4bigpdm9pZCIKCW1ldGhvZCAiZ2V0U2V0Qnl0ZXMoKXZvaWQiCgltZXRob2QgImdldFNldFVpbnQ2NCgpdm9pZCIKCW1ldGhvZCAiYmxvY2tPcCgpdm9pZCIKCW1ldGhvZCAiYjY0KCl2b2lkIgoJbWV0aG9kICJqc29uKCl2b2lkIgoJbWV0aG9kICJiaXRsZW5PcCgpdm9pZCIKCW1ldGhvZCAiY29tcHV0ZWRDb25zdCgpdm9pZCIKCW1ldGhvZCAibXVsdGlDb21wdXRlZENvbnN0KCl2b2lkIgoJbWV0aG9kICJyZWFkU2NoZW1hKCl2b2lkIgoJbWV0aG9kICJjb21wYXJpc29uT3IoKWJvb2wiCgltZXRob2QgInR4bkFyZ3NNZXRob2QocGF5KXZvaWQiCgltZXRob2QgImNhbGxUeG5BcmdzTWV0aG9kKCl2b2lkIgoJbWV0aG9kICJzdGF0aWNWYWx1ZUxlbih1aW50MjU2KXZvaWQiCgltZXRob2QgInN0YXRpY1R5cGVMZW4oKXZvaWQiCgltZXRob2QgImR5bmFtaWNTY3JhdGNoU2xvdCgpdm9pZCIKCW1ldGhvZCAiaW5jcmVtZW50U2NyYXRjaFNsb3QoKXZvaWQiCgltZXRob2QgImluY3JlbWVudER5bmFtaWNTY3JhdGNoU2xvdCgpdm9pZCIKCW1ldGhvZCAiZnJvbUFkZHJlc3MoKXZvaWQiCgltZXRob2QgImVhcmx5UmV0dXJuKHVpbnQ2NCl1aW50NjQiCgltZXRob2QgImFzc2V0TWV0aG9kQXJncygpdm9pZCIKCW1ldGhvZCAibXVsdGlwbGVQcm9ncmFtUGFnZXMoKXZvaWQiCgltZXRob2QgImFzc2VydENvbW1lbnQoKXZvaWQiCgltZXRob2QgInRocm93RXJyb3JNZXNzYWdlKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV90eG5UeXBlRW51bSAqYWJpX3JvdXRlX3R4bkdyb3VwTGVuZ3RoICphYmlfcm91dGVfYXNzZXJ0cyAqYWJpX3JvdXRlX3ZlcmlmeVR4bkZyb21BcmcgKmFiaV9yb3V0ZV92ZXJpZnlUeG5Gcm9tVHhuR3JvdXAgKmFiaV9yb3V0ZV92ZXJpZnlUeG5Db25kaXRpb24gKmFiaV9yb3V0ZV92ZXJpZnlUeG5JbmNsdWRlZEluICphYmlfcm91dGVfdmVyaWZ5VHhuTm90SW5jbHVkZWRJbiAqYWJpX3JvdXRlX3N1Ym1pdFBlbmRpbmdHcm91cCAqYWJpX3JvdXRlX21ldGhvZFdpdGhUeG5BcmdzICphYmlfcm91dGVfc2hpZnQgKmFiaV9yb3V0ZV9mcm9tQnl0ZXMgKmFiaV9yb3V0ZV9mcm9tVWludDY0ICphYmlfcm91dGVfYnplcm9GdW5jdGlvbiAqYWJpX3JvdXRlX2V2ZW50cyAqYWJpX3JvdXRlX2xldE9wdGltaXphdGlvbiAqYWJpX3JvdXRlX3N0YXRpY0NvbnRyYWN0UHJvcGVydGllcyAqYWJpX3JvdXRlX251bWJlclRvU3RyaW5nICphYmlfcm91dGVfbWV0aG9kT25QYXJlbnMgKmFiaV9yb3V0ZV9zdHJpbmdTdWJzdHJpbmcgKmFiaV9yb3V0ZV9pZFByb3BlcnR5ICphYmlfcm91dGVfc2NyYXRjaFNsb3QgKmFiaV9yb3V0ZV9lY2RzYSAqYWJpX3JvdXRlX3ZlcmlmeVR4blR5cGVzICphYmlfcm91dGVfc3RyaW5nUGx1c0VxdWFscyAqYWJpX3JvdXRlX2ltcG9ydGVkUHJvZ3JhbSAqYWJpX3JvdXRlX2NhbGxQcml2YXRlRGVmaW5lZExhdGVyICphYmlfcm91dGVfaW50ZXJhbFB1YmxpY01ldGhvZCAqYWJpX3JvdXRlX2NhbGxJbnRlcm5hbFB1YmxpY01ldGhvZCAqYWJpX3JvdXRlX2FwcExvYWRTY3JhdGNoICphYmlfcm91dGVfdWludE5XaXRoVW5kZXJzY29yZSAqYWJpX3JvdXRlX29wVXAgKmFiaV9yb3V0ZV9yZXR1cm5WYWx1ZU9uQXNzaWdubWVudCAqYWJpX3JvdXRlX3JldHVybkFycmF5VmFsdWVPbkFzc2lnbm1lbnQgKmFiaV9yb3V0ZV9yZXR1cm5TdG9yYWdlVmFsdWVPbkFzc2lnbm1lbnQgKmFiaV9yb3V0ZV9yZXR1cm5PcGVyYXRvckFzc2lnbm1lbnRWYWx1ZSAqYWJpX3JvdXRlX3JldHVybkFycmF5VmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCAqYWJpX3JvdXRlX3JldHVybkFycmF5SW5TdG9yYWdlVmFsdWVPbk9wZXJhdG9yQXNzaWdubWVudCAqYWJpX3JvdXRlX2NvbnN0cyAqYWJpX3JvdXRlX2Fzc2VydFdpdGhNZXNzYWdlICphYmlfcm91dGVfb3Bjb2RlQWxpYXNlcyAqYWJpX3JvdXRlX3ZyZlZlcmlmeU9wICphYmlfcm91dGVfZWNNYXRoICphYmlfcm91dGVfZ2l0eG4gKmFiaV9yb3V0ZV9nZXRTZXRCeXRlcyAqYWJpX3JvdXRlX2dldFNldFVpbnQ2NCAqYWJpX3JvdXRlX2Jsb2NrT3AgKmFiaV9yb3V0ZV9iNjQgKmFiaV9yb3V0ZV9qc29uICphYmlfcm91dGVfYml0bGVuT3AgKmFiaV9yb3V0ZV9jb21wdXRlZENvbnN0ICphYmlfcm91dGVfbXVsdGlDb21wdXRlZENvbnN0ICphYmlfcm91dGVfcmVhZFNjaGVtYSAqYWJpX3JvdXRlX2NvbXBhcmlzb25PciAqYWJpX3JvdXRlX3R4bkFyZ3NNZXRob2QgKmFiaV9yb3V0ZV9jYWxsVHhuQXJnc01ldGhvZCAqYWJpX3JvdXRlX3N0YXRpY1ZhbHVlTGVuICphYmlfcm91dGVfc3RhdGljVHlwZUxlbiAqYWJpX3JvdXRlX2R5bmFtaWNTY3JhdGNoU2xvdCAqYWJpX3JvdXRlX2luY3JlbWVudFNjcmF0Y2hTbG90ICphYmlfcm91dGVfaW5jcmVtZW50RHluYW1pY1NjcmF0Y2hTbG90ICphYmlfcm91dGVfZnJvbUFkZHJlc3MgKmFiaV9yb3V0ZV9lYXJseVJldHVybiAqYWJpX3JvdXRlX2Fzc2V0TWV0aG9kQXJncyAqYWJpX3JvdXRlX211bHRpcGxlUHJvZ3JhbVBhZ2VzICphYmlfcm91dGVfYXNzZXJ0Q29tbWVudCAqYWJpX3JvdXRlX3Rocm93RXJyb3JNZXNzYWdlCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJyCgoqaW50VG9Bc2NpaToKCXByb3RvIDEgMQoJYnl0ZSAweDMwMzEzMjMzMzQzNTM2MzczODM5IC8vICIwMTIzNDU2Nzg5IgoJZnJhbWVfZGlnIC0xIC8vIGk6IHVpbnQ2NAoJaW50IDEKCWV4dHJhY3QzCglyZXRzdWIKCQoKKml0b2E6Cglwcm90byAxIDEKCWZyYW1lX2RpZyAtMSAvLyBpOiB1aW50NjQKCWludCAwCgk9PQoJYnogKml0b2FfaWZfZW5kCglieXRlIDB4MzAKCXJldHN1YgoKKml0b2FfaWZfZW5kOgoJZnJhbWVfZGlnIC0xIC8vIGk6IHVpbnQ2NAoJaW50IDEwCgkvCglpbnQgMAoJPgoJYnogKml0b2FfdGVybmFyeV9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIGk6IHVpbnQ2NAoJaW50IDEwCgkvCgljYWxsc3ViICppdG9hCgliICppdG9hX3Rlcm5hcnlfZW5kCgoqaXRvYV90ZXJuYXJ5X2ZhbHNlOgoJYnl0ZSAweCAvLyAiIgoKKml0b2FfdGVybmFyeV9lbmQ6CglmcmFtZV9kaWcgLTEgLy8gaTogdWludDY0CglpbnQgMTAKCSUKCWNhbGxzdWIgKmludFRvQXNjaWkKCWNvbmNhdAoJcmV0c3Vi", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/artifacts/ItxnsTest.approval.teal b/tests/contracts/artifacts/ItxnsTest.approval.teal index eb135633e..755e9c0fc 100644 --- a/tests/contracts/artifacts/ItxnsTest.approval.teal +++ b/tests/contracts/artifacts/ItxnsTest.approval.teal @@ -34,44 +34,46 @@ payment: proto 0 0 // tests/contracts/itxns.algo.ts:6 - // sendPayment({ - // amount: 100, - // receiver: this.app.address, - // closeRemainderTo: globals.zeroAddress, - // sender: this.app.address, - // rekeyTo: globals.zeroAddress, - // note: 'Hello World!', - // }) + // this.txnComposer.send( + // new PayTxn({ + // amount: 100, + // receiver: this.app.address, + // closeRemainderTo: globals.zeroAddress, + // sender: this.app.address, + // rekeyTo: globals.zeroAddress, + // note: 'Hello World!', + // }) + // ) itxn_begin int pay itxn_field TypeEnum - // tests/contracts/itxns.algo.ts:7 + // tests/contracts/itxns.algo.ts:8 // amount: 100 int 100 itxn_field Amount - // tests/contracts/itxns.algo.ts:8 + // tests/contracts/itxns.algo.ts:9 // receiver: this.app.address global CurrentApplicationAddress itxn_field Receiver - // tests/contracts/itxns.algo.ts:9 + // tests/contracts/itxns.algo.ts:10 // closeRemainderTo: globals.zeroAddress global ZeroAddress itxn_field CloseRemainderTo - // tests/contracts/itxns.algo.ts:10 + // tests/contracts/itxns.algo.ts:11 // sender: this.app.address global CurrentApplicationAddress itxn_field Sender - // tests/contracts/itxns.algo.ts:11 + // tests/contracts/itxns.algo.ts:12 // rekeyTo: globals.zeroAddress global ZeroAddress itxn_field RekeyTo - // tests/contracts/itxns.algo.ts:12 + // tests/contracts/itxns.algo.ts:13 // note: 'Hello World!' byte 0x48656c6c6f20576f726c6421 // "Hello World!" itxn_field Note @@ -101,69 +103,71 @@ payment: assetCreation: proto 0 1 - // tests/contracts/itxns.algo.ts:17 - // return sendAssetCreation({ - // configAssetName: 'name', - // configAssetUnitName: 'unit', - // configAssetTotal: 1, - // configAssetManager: this.app.address, - // configAssetReserve: this.app.address, - // configAssetFreeze: this.app.address, - // configAssetClawback: this.app.address, - // configAssetDefaultFrozen: 0, - // configAssetURL: 'url', - // configAssetMetadataHash: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', - // }); + // tests/contracts/itxns.algo.ts:19 + // return this.txnComposer.send( + // new AssetCreateTxn({ + // configAssetName: 'name', + // configAssetUnitName: 'unit', + // configAssetTotal: 1, + // configAssetManager: this.app.address, + // configAssetReserve: this.app.address, + // configAssetFreeze: this.app.address, + // configAssetClawback: this.app.address, + // configAssetDefaultFrozen: 0, + // configAssetURL: 'url', + // configAssetMetadataHash: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + // }) + // ); itxn_begin int acfg itxn_field TypeEnum - // tests/contracts/itxns.algo.ts:18 + // tests/contracts/itxns.algo.ts:21 // configAssetName: 'name' byte 0x6e616d65 // "name" itxn_field ConfigAssetName - // tests/contracts/itxns.algo.ts:19 + // tests/contracts/itxns.algo.ts:22 // configAssetUnitName: 'unit' byte 0x756e6974 // "unit" itxn_field ConfigAssetUnitName - // tests/contracts/itxns.algo.ts:20 + // tests/contracts/itxns.algo.ts:23 // configAssetTotal: 1 int 1 itxn_field ConfigAssetTotal - // tests/contracts/itxns.algo.ts:21 + // tests/contracts/itxns.algo.ts:24 // configAssetManager: this.app.address global CurrentApplicationAddress itxn_field ConfigAssetManager - // tests/contracts/itxns.algo.ts:22 + // tests/contracts/itxns.algo.ts:25 // configAssetReserve: this.app.address global CurrentApplicationAddress itxn_field ConfigAssetReserve - // tests/contracts/itxns.algo.ts:23 + // tests/contracts/itxns.algo.ts:26 // configAssetFreeze: this.app.address global CurrentApplicationAddress itxn_field ConfigAssetFreeze - // tests/contracts/itxns.algo.ts:24 + // tests/contracts/itxns.algo.ts:27 // configAssetClawback: this.app.address global CurrentApplicationAddress itxn_field ConfigAssetClawback - // tests/contracts/itxns.algo.ts:25 + // tests/contracts/itxns.algo.ts:28 // configAssetDefaultFrozen: 0 int 0 itxn_field ConfigAssetDefaultFrozen - // tests/contracts/itxns.algo.ts:26 + // tests/contracts/itxns.algo.ts:29 // configAssetURL: 'url' byte 0x75726c // "url" itxn_field ConfigAssetURL - // tests/contracts/itxns.algo.ts:27 + // tests/contracts/itxns.algo.ts:30 // configAssetMetadataHash: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' byte 0x6161616161616161616161616161616161616161616161616161616161616161 // "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" itxn_field ConfigAssetMetadataHash @@ -188,83 +192,85 @@ assetCreation: appCall: proto 0 0 - // tests/contracts/itxns.algo.ts:32 - // sendAppCall({ - // accounts: [this.app.address], - // applicationArgs: ['arg1', 'arg2'], - // applicationID: this.app, - // applications: [this.app], - // approvalProgram: 'approval', - // assets: [AssetID.zeroIndex], - // clearStateProgram: 'clear', - // globalNumByteSlice: 1, - // globalNumUint: 1, - // localNumByteSlice: 1, - // localNumUint: 1, - // note: 'note', - // }) + // tests/contracts/itxns.algo.ts:36 + // this.txnComposer.send( + // new AppCallTxn({ + // accounts: [this.app.address], + // applicationArgs: ['arg1', 'arg2'], + // applicationID: this.app, + // applications: [this.app], + // approvalProgram: 'approval', + // assets: [AssetID.zeroIndex], + // clearStateProgram: 'clear', + // globalNumByteSlice: 1, + // globalNumUint: 1, + // localNumByteSlice: 1, + // localNumUint: 1, + // note: 'note', + // }) + // ) itxn_begin int appl itxn_field TypeEnum - // tests/contracts/itxns.algo.ts:33 + // tests/contracts/itxns.algo.ts:38 // accounts: [this.app.address] global CurrentApplicationAddress itxn_field Accounts - // tests/contracts/itxns.algo.ts:34 + // tests/contracts/itxns.algo.ts:39 // applicationArgs: ['arg1', 'arg2'] byte 0x61726731 // "arg1" itxn_field ApplicationArgs byte 0x61726732 // "arg2" itxn_field ApplicationArgs - // tests/contracts/itxns.algo.ts:35 + // tests/contracts/itxns.algo.ts:40 // applicationID: this.app txna Applications 0 itxn_field ApplicationID - // tests/contracts/itxns.algo.ts:36 + // tests/contracts/itxns.algo.ts:41 // applications: [this.app] txna Applications 0 itxn_field Applications - // tests/contracts/itxns.algo.ts:37 + // tests/contracts/itxns.algo.ts:42 // approvalProgram: 'approval' byte 0x617070726f76616c // "approval" itxn_field ApprovalProgram - // tests/contracts/itxns.algo.ts:38 + // tests/contracts/itxns.algo.ts:43 // assets: [AssetID.zeroIndex] int 0 itxn_field Assets - // tests/contracts/itxns.algo.ts:39 + // tests/contracts/itxns.algo.ts:44 // clearStateProgram: 'clear' byte 0x636c656172 // "clear" itxn_field ClearStateProgram - // tests/contracts/itxns.algo.ts:40 + // tests/contracts/itxns.algo.ts:45 // globalNumByteSlice: 1 int 1 itxn_field GlobalNumByteSlice - // tests/contracts/itxns.algo.ts:41 + // tests/contracts/itxns.algo.ts:46 // globalNumUint: 1 int 1 itxn_field GlobalNumUint - // tests/contracts/itxns.algo.ts:42 + // tests/contracts/itxns.algo.ts:47 // localNumByteSlice: 1 int 1 itxn_field LocalNumByteSlice - // tests/contracts/itxns.algo.ts:43 + // tests/contracts/itxns.algo.ts:48 // localNumUint: 1 int 1 itxn_field LocalNumUint - // tests/contracts/itxns.algo.ts:44 + // tests/contracts/itxns.algo.ts:49 // note: 'note' byte 0x6e6f7465 // "note" itxn_field Note @@ -288,39 +294,41 @@ appCall: assetConfig: proto 0 0 - // tests/contracts/itxns.algo.ts:49 - // sendAssetConfig({ - // configAsset: AssetID.zeroIndex, - // configAssetManager: this.app.address, - // configAssetReserve: this.app.address, - // configAssetFreeze: this.app.address, - // configAssetClawback: this.app.address, - // }) + // tests/contracts/itxns.algo.ts:55 + // this.txnComposer.send( + // new AssetConfigTxn({ + // configAsset: AssetID.zeroIndex, + // configAssetManager: this.app.address, + // configAssetReserve: this.app.address, + // configAssetFreeze: this.app.address, + // configAssetClawback: this.app.address, + // }) + // ) itxn_begin int acfg itxn_field TypeEnum - // tests/contracts/itxns.algo.ts:50 + // tests/contracts/itxns.algo.ts:57 // configAsset: AssetID.zeroIndex int 0 itxn_field ConfigAsset - // tests/contracts/itxns.algo.ts:51 + // tests/contracts/itxns.algo.ts:58 // configAssetManager: this.app.address global CurrentApplicationAddress itxn_field ConfigAssetManager - // tests/contracts/itxns.algo.ts:52 + // tests/contracts/itxns.algo.ts:59 // configAssetReserve: this.app.address global CurrentApplicationAddress itxn_field ConfigAssetReserve - // tests/contracts/itxns.algo.ts:53 + // tests/contracts/itxns.algo.ts:60 // configAssetFreeze: this.app.address global CurrentApplicationAddress itxn_field ConfigAssetFreeze - // tests/contracts/itxns.algo.ts:54 + // tests/contracts/itxns.algo.ts:61 // configAssetClawback: this.app.address global CurrentApplicationAddress itxn_field ConfigAssetClawback @@ -344,27 +352,29 @@ assetConfig: assetFreeze: proto 0 0 - // tests/contracts/itxns.algo.ts:59 - // sendAssetFreeze({ - // freezeAssetFrozen: true, - // freezeAssetAccount: this.app.address, - // freezeAsset: AssetID.zeroIndex, - // }) + // tests/contracts/itxns.algo.ts:67 + // this.txnComposer.send( + // new AssetFreezeTxn({ + // freezeAssetFrozen: true, + // freezeAssetAccount: this.app.address, + // freezeAsset: AssetID.zeroIndex, + // }) + // ) itxn_begin int afrz itxn_field TypeEnum - // tests/contracts/itxns.algo.ts:60 + // tests/contracts/itxns.algo.ts:69 // freezeAssetFrozen: true int 1 itxn_field FreezeAssetFrozen - // tests/contracts/itxns.algo.ts:61 + // tests/contracts/itxns.algo.ts:70 // freezeAssetAccount: this.app.address global CurrentApplicationAddress itxn_field FreezeAssetAccount - // tests/contracts/itxns.algo.ts:62 + // tests/contracts/itxns.algo.ts:71 // freezeAsset: AssetID.zeroIndex int 0 itxn_field FreezeAsset @@ -388,39 +398,41 @@ assetFreeze: assetTransfer: proto 0 0 - // tests/contracts/itxns.algo.ts:67 - // sendAssetTransfer({ - // assetAmount: 1, - // assetCloseTo: this.app.address, - // assetReceiver: this.app.address, - // assetSender: this.app.address, - // xferAsset: AssetID.zeroIndex, - // }) + // tests/contracts/itxns.algo.ts:77 + // this.txnComposer.send( + // new AssetTransferTxn({ + // assetAmount: 1, + // assetCloseTo: this.app.address, + // assetReceiver: this.app.address, + // assetSender: this.app.address, + // xferAsset: AssetID.zeroIndex, + // }) + // ) itxn_begin int axfer itxn_field TypeEnum - // tests/contracts/itxns.algo.ts:68 + // tests/contracts/itxns.algo.ts:79 // assetAmount: 1 int 1 itxn_field AssetAmount - // tests/contracts/itxns.algo.ts:69 + // tests/contracts/itxns.algo.ts:80 // assetCloseTo: this.app.address global CurrentApplicationAddress itxn_field AssetCloseTo - // tests/contracts/itxns.algo.ts:70 + // tests/contracts/itxns.algo.ts:81 // assetReceiver: this.app.address global CurrentApplicationAddress itxn_field AssetReceiver - // tests/contracts/itxns.algo.ts:71 + // tests/contracts/itxns.algo.ts:82 // assetSender: this.app.address global CurrentApplicationAddress itxn_field AssetSender - // tests/contracts/itxns.algo.ts:72 + // tests/contracts/itxns.algo.ts:83 // xferAsset: AssetID.zeroIndex int 0 itxn_field XferAsset @@ -450,22 +462,29 @@ assetTransfer: methodCall: proto 0 1 - // tests/contracts/itxns.algo.ts:77 - // return sendMethodCall<[AppID, AssetID], AssetID>({ - // name: 'method', - // methodArgs: [this.app, AssetID.zeroIndex], - // }); + // tests/contracts/itxns.algo.ts:89 + // return this.txnComposer.send( + // new MethodCallTxn<[AppID, AssetID], AssetID>({ + // name: 'method', + // methodArgs: [this.app, AssetID.zeroIndex], + // }) + // ); itxn_begin int appl itxn_field TypeEnum method "method(uint64,uint64)uint64" itxn_field ApplicationArgs - // tests/contracts/itxns.algo.ts:79 + // tests/contracts/itxns.algo.ts:92 // methodArgs: [this.app, AssetID.zeroIndex] + // tests/contracts/itxns.algo.ts:92 + // this.app txna Applications 0 itob itxn_field ApplicationArgs + + // tests/contracts/itxns.algo.ts:92 + // AssetID.zeroIndex byte 0x0000000000000000 itxn_field ApplicationArgs @@ -494,45 +513,47 @@ methodCall: onlineKeyRegistration: proto 0 0 - // tests/contracts/itxns.algo.ts:84 - // sendOnlineKeyRegistration({ - // selectionPK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', - // stateProofPK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', - // voteFirst: 1, - // voteKeyDilution: 1, - // voteLast: 1, - // votePK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', - // }) + // tests/contracts/itxns.algo.ts:98 + // this.txnComposer.send( + // new KeyRegTxn({ + // selectionPK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + // stateProofPK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + // voteFirst: 1, + // voteKeyDilution: 1, + // voteLast: 1, + // votePK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + // }) + // ) itxn_begin int keyreg itxn_field TypeEnum - // tests/contracts/itxns.algo.ts:85 + // tests/contracts/itxns.algo.ts:100 // selectionPK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' byte 0x6161616161616161616161616161616161616161616161616161616161616161 // "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" itxn_field SelectionPK - // tests/contracts/itxns.algo.ts:86 + // tests/contracts/itxns.algo.ts:101 // stateProofPK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' byte 0x6161616161616161616161616161616161616161616161616161616161616161 // "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" itxn_field StateProofPK - // tests/contracts/itxns.algo.ts:87 + // tests/contracts/itxns.algo.ts:102 // voteFirst: 1 int 1 itxn_field VoteFirst - // tests/contracts/itxns.algo.ts:88 + // tests/contracts/itxns.algo.ts:103 // voteKeyDilution: 1 int 1 itxn_field VoteKeyDilution - // tests/contracts/itxns.algo.ts:89 + // tests/contracts/itxns.algo.ts:104 // voteLast: 1 int 1 itxn_field VoteLast - // tests/contracts/itxns.algo.ts:90 + // tests/contracts/itxns.algo.ts:105 // votePK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' byte 0x6161616161616161616161616161616161616161616161616161616161616161 // "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" itxn_field VotePK @@ -556,8 +577,8 @@ onlineKeyRegistration: offlineKeyRegistration: proto 0 0 - // tests/contracts/itxns.algo.ts:95 - // sendOfflineKeyRegistration({}) + // tests/contracts/itxns.algo.ts:111 + // this.txnComposer.send(new KeyRegTxn({})) itxn_begin int keyreg itxn_field TypeEnum @@ -581,16 +602,18 @@ offlineKeyRegistration: innerGeneric: proto 0 0 - // tests/contracts/itxns.algo.ts:99 - // sendMethodCall<[InnerTxn], void>({ - // name: 'foo', - // methodArgs: [{ configAssetTotal: 1 }], - // }) + // tests/contracts/itxns.algo.ts:115 + // this.txnComposer.send( + // new MethodCallTxn<[Txn], void>({ + // name: 'foo', + // methodArgs: [new AssetCreateTxn({ configAssetTotal: 1 })], + // }) + // ) itxn_begin int acfg itxn_field TypeEnum - // tests/contracts/itxns.algo.ts:101 + // tests/contracts/itxns.algo.ts:118 // configAssetTotal: 1 int 1 itxn_field ConfigAssetTotal @@ -598,14 +621,24 @@ innerGeneric: // Fee field not set, defaulting to 0 int 0 itxn_field Fee + + // tests/contracts/itxns.algo.ts:115 + // this.txnComposer.send( + // new MethodCallTxn<[Txn], void>({ + // name: 'foo', + // methodArgs: [new AssetCreateTxn({ configAssetTotal: 1 })], + // }) + // ) itxn_next int appl itxn_field TypeEnum method "foo(txn)void" itxn_field ApplicationArgs - // tests/contracts/itxns.algo.ts:101 - // methodArgs: [{ configAssetTotal: 1 }] + // tests/contracts/itxns.algo.ts:118 + // methodArgs: [new AssetCreateTxn({ configAssetTotal: 1 })] + // tests/contracts/itxns.algo.ts:118 + // new AssetCreateTxn({ configAssetTotal: 1 }) // Fee field not set, defaulting to 0 int 0 itxn_field Fee diff --git a/tests/contracts/artifacts/ItxnsTest.arc32.json b/tests/contracts/artifacts/ItxnsTest.arc32.json index 15ad815fb..6d87570f6 100644 --- a/tests/contracts/artifacts/ItxnsTest.arc32.json +++ b/tests/contracts/artifacts/ItxnsTest.arc32.json @@ -84,7 +84,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHBheW1lbnQoKXZvaWQKKmFiaV9yb3V0ZV9wYXltZW50OgoJLy8gZXhlY3V0ZSBwYXltZW50KCl2b2lkCgljYWxsc3ViIHBheW1lbnQKCWludCAxCglyZXR1cm4KCi8vIHBheW1lbnQoKTogdm9pZApwYXltZW50OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgYW1vdW50OiAxMDAsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGNsb3NlUmVtYWluZGVyVG86IGdsb2JhbHMuemVyb0FkZHJlc3MsCgkvLyAgICAgICBzZW5kZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICByZWtleVRvOiBnbG9iYWxzLnplcm9BZGRyZXNzLAoJLy8gICAgICAgbm90ZTogJ0hlbGxvIFdvcmxkIScsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo3CgkvLyBhbW91bnQ6IDEwMAoJaW50IDEwMAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo4CgkvLyByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo5CgkvLyBjbG9zZVJlbWFpbmRlclRvOiBnbG9iYWxzLnplcm9BZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwCgkvLyBzZW5kZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjExCgkvLyByZWtleVRvOiBnbG9iYWxzLnplcm9BZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWl0eG5fZmllbGQgUmVrZXlUbwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEyCgkvLyBub3RlOiAnSGVsbG8gV29ybGQhJwoJYnl0ZSAweDQ4NjU2YzZjNmYyMDU3NmY3MjZjNjQyMSAvLyAiSGVsbG8gV29ybGQhIgoJaXR4bl9maWVsZCBOb3RlCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhc3NldENyZWF0aW9uKCl1aW50NjQKKmFiaV9yb3V0ZV9hc3NldENyZWF0aW9uOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGFzc2V0Q3JlYXRpb24oKXVpbnQ2NAoJY2FsbHN1YiBhc3NldENyZWF0aW9uCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXNzZXRDcmVhdGlvbigpOiBBc3NldElECmFzc2V0Q3JlYXRpb246Cglwcm90byAwIDEKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxNwoJLy8gcmV0dXJuIHNlbmRBc3NldENyZWF0aW9uKHsKCS8vICAgICAgIGNvbmZpZ0Fzc2V0TmFtZTogJ25hbWUnLAoJLy8gICAgICAgY29uZmlnQXNzZXRVbml0TmFtZTogJ3VuaXQnLAoJLy8gICAgICAgY29uZmlnQXNzZXRUb3RhbDogMSwKCS8vICAgICAgIGNvbmZpZ0Fzc2V0TWFuYWdlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGNvbmZpZ0Fzc2V0UmVzZXJ2ZTogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGNvbmZpZ0Fzc2V0RnJlZXplOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgY29uZmlnQXNzZXRDbGF3YmFjazogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGNvbmZpZ0Fzc2V0RGVmYXVsdEZyb3plbjogMCwKCS8vICAgICAgIGNvbmZpZ0Fzc2V0VVJMOiAndXJsJywKCS8vICAgICAgIGNvbmZpZ0Fzc2V0TWV0YWRhdGFIYXNoOiAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnLAoJLy8gICAgIH0pOwoJaXR4bl9iZWdpbgoJaW50IGFjZmcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxOAoJLy8gY29uZmlnQXNzZXROYW1lOiAnbmFtZScKCWJ5dGUgMHg2ZTYxNmQ2NSAvLyAibmFtZSIKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MTkKCS8vIGNvbmZpZ0Fzc2V0VW5pdE5hbWU6ICd1bml0JwoJYnl0ZSAweDc1NmU2OTc0IC8vICJ1bml0IgoJaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjAKCS8vIGNvbmZpZ0Fzc2V0VG90YWw6IDEKCWludCAxCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyMQoJLy8gY29uZmlnQXNzZXRNYW5hZ2VyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyMgoJLy8gY29uZmlnQXNzZXRSZXNlcnZlOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyMwoJLy8gY29uZmlnQXNzZXRGcmVlemU6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjQKCS8vIGNvbmZpZ0Fzc2V0Q2xhd2JhY2s6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyNQoJLy8gY29uZmlnQXNzZXREZWZhdWx0RnJvemVuOiAwCglpbnQgMAoJaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyNgoJLy8gY29uZmlnQXNzZXRVUkw6ICd1cmwnCglieXRlIDB4NzU3MjZjIC8vICJ1cmwiCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjcKCS8vIGNvbmZpZ0Fzc2V0TWV0YWRhdGFIYXNoOiAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnCglieXRlIDB4NjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSAvLyAiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWV0YWRhdGFIYXNoCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBDcmVhdGVkQXNzZXRJRAoJcmV0c3ViCgovLyBhcHBDYWxsKCl2b2lkCiphYmlfcm91dGVfYXBwQ2FsbDoKCS8vIGV4ZWN1dGUgYXBwQ2FsbCgpdm9pZAoJY2FsbHN1YiBhcHBDYWxsCglpbnQgMQoJcmV0dXJuCgovLyBhcHBDYWxsKCk6IHZvaWQKYXBwQ2FsbDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjMyCgkvLyBzZW5kQXBwQ2FsbCh7CgkvLyAgICAgICBhY2NvdW50czogW3RoaXMuYXBwLmFkZHJlc3NdLAoJLy8gICAgICAgYXBwbGljYXRpb25BcmdzOiBbJ2FyZzEnLCAnYXJnMiddLAoJLy8gICAgICAgYXBwbGljYXRpb25JRDogdGhpcy5hcHAsCgkvLyAgICAgICBhcHBsaWNhdGlvbnM6IFt0aGlzLmFwcF0sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06ICdhcHByb3ZhbCcsCgkvLyAgICAgICBhc3NldHM6IFtBc3NldElELnplcm9JbmRleF0sCgkvLyAgICAgICBjbGVhclN0YXRlUHJvZ3JhbTogJ2NsZWFyJywKCS8vICAgICAgIGdsb2JhbE51bUJ5dGVTbGljZTogMSwKCS8vICAgICAgIGdsb2JhbE51bVVpbnQ6IDEsCgkvLyAgICAgICBsb2NhbE51bUJ5dGVTbGljZTogMSwKCS8vICAgICAgIGxvY2FsTnVtVWludDogMSwKCS8vICAgICAgIG5vdGU6ICdub3RlJywKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czozMwoJLy8gYWNjb3VudHM6IFt0aGlzLmFwcC5hZGRyZXNzXQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQWNjb3VudHMKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czozNAoJLy8gYXBwbGljYXRpb25BcmdzOiBbJ2FyZzEnLCAnYXJnMiddCglieXRlIDB4NjE3MjY3MzEgLy8gImFyZzEiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJYnl0ZSAweDYxNzI2NzMyIC8vICJhcmcyIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czozNQoJLy8gYXBwbGljYXRpb25JRDogdGhpcy5hcHAKCXR4bmEgQXBwbGljYXRpb25zIDAKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjM2CgkvLyBhcHBsaWNhdGlvbnM6IFt0aGlzLmFwcF0KCXR4bmEgQXBwbGljYXRpb25zIDAKCWl0eG5fZmllbGQgQXBwbGljYXRpb25zCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MzcKCS8vIGFwcHJvdmFsUHJvZ3JhbTogJ2FwcHJvdmFsJwoJYnl0ZSAweDYxNzA3MDcyNmY3NjYxNmMgLy8gImFwcHJvdmFsIgoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czozOAoJLy8gYXNzZXRzOiBbQXNzZXRJRC56ZXJvSW5kZXhdCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldHMKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czozOQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06ICdjbGVhcicKCWJ5dGUgMHg2MzZjNjU2MTcyIC8vICJjbGVhciIKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0MAoJLy8gZ2xvYmFsTnVtQnl0ZVNsaWNlOiAxCglpbnQgMQoJaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0MQoJLy8gZ2xvYmFsTnVtVWludDogMQoJaW50IDEKCWl0eG5fZmllbGQgR2xvYmFsTnVtVWludAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjQyCgkvLyBsb2NhbE51bUJ5dGVTbGljZTogMQoJaW50IDEKCWl0eG5fZmllbGQgTG9jYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0MwoJLy8gbG9jYWxOdW1VaW50OiAxCglpbnQgMQoJaXR4bl9maWVsZCBMb2NhbE51bVVpbnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0NAoJLy8gbm90ZTogJ25vdGUnCglieXRlIDB4NmU2Zjc0NjUgLy8gIm5vdGUiCglpdHhuX2ZpZWxkIE5vdGUKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFzc2V0Q29uZmlnKCl2b2lkCiphYmlfcm91dGVfYXNzZXRDb25maWc6CgkvLyBleGVjdXRlIGFzc2V0Q29uZmlnKCl2b2lkCgljYWxsc3ViIGFzc2V0Q29uZmlnCglpbnQgMQoJcmV0dXJuCgovLyBhc3NldENvbmZpZygpOiB2b2lkCmFzc2V0Q29uZmlnOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NDkKCS8vIHNlbmRBc3NldENvbmZpZyh7CgkvLyAgICAgICBjb25maWdBc3NldDogQXNzZXRJRC56ZXJvSW5kZXgsCgkvLyAgICAgICBjb25maWdBc3NldE1hbmFnZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICBjb25maWdBc3NldFJlc2VydmU6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICBjb25maWdBc3NldEZyZWV6ZTogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGNvbmZpZ0Fzc2V0Q2xhd2JhY2s6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhY2ZnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTAKCS8vIGNvbmZpZ0Fzc2V0OiBBc3NldElELnplcm9JbmRleAoJaW50IDAKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo1MQoJLy8gY29uZmlnQXNzZXRNYW5hZ2VyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo1MgoJLy8gY29uZmlnQXNzZXRSZXNlcnZlOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo1MwoJLy8gY29uZmlnQXNzZXRGcmVlemU6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTQKCS8vIGNvbmZpZ0Fzc2V0Q2xhd2JhY2s6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFzc2V0RnJlZXplKCl2b2lkCiphYmlfcm91dGVfYXNzZXRGcmVlemU6CgkvLyBleGVjdXRlIGFzc2V0RnJlZXplKCl2b2lkCgljYWxsc3ViIGFzc2V0RnJlZXplCglpbnQgMQoJcmV0dXJuCgovLyBhc3NldEZyZWV6ZSgpOiB2b2lkCmFzc2V0RnJlZXplOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTkKCS8vIHNlbmRBc3NldEZyZWV6ZSh7CgkvLyAgICAgICBmcmVlemVBc3NldEZyb3plbjogdHJ1ZSwKCS8vICAgICAgIGZyZWV6ZUFzc2V0QWNjb3VudDogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGZyZWV6ZUFzc2V0OiBBc3NldElELnplcm9JbmRleCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFmcnoKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo2MAoJLy8gZnJlZXplQXNzZXRGcm96ZW46IHRydWUKCWludCAxCglpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NjEKCS8vIGZyZWV6ZUFzc2V0QWNjb3VudDogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgRnJlZXplQXNzZXRBY2NvdW50CgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NjIKCS8vIGZyZWV6ZUFzc2V0OiBBc3NldElELnplcm9JbmRleAoJaW50IDAKCWl0eG5fZmllbGQgRnJlZXplQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFzc2V0VHJhbnNmZXIoKXZvaWQKKmFiaV9yb3V0ZV9hc3NldFRyYW5zZmVyOgoJLy8gZXhlY3V0ZSBhc3NldFRyYW5zZmVyKCl2b2lkCgljYWxsc3ViIGFzc2V0VHJhbnNmZXIKCWludCAxCglyZXR1cm4KCi8vIGFzc2V0VHJhbnNmZXIoKTogdm9pZAphc3NldFRyYW5zZmVyOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0QW1vdW50OiAxLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0U2VuZGVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgeGZlckFzc2V0OiBBc3NldElELnplcm9JbmRleCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NjgKCS8vIGFzc2V0QW1vdW50OiAxCglpbnQgMQoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjY5CgkvLyBhc3NldENsb3NlVG86IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjcwCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NzEKCS8vIGFzc2V0U2VuZGVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFNlbmRlcgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjcyCgkvLyB4ZmVyQXNzZXQ6IEFzc2V0SUQuemVyb0luZGV4CglpbnQgMAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIG1ldGhvZENhbGwoKXVpbnQ2NAoqYWJpX3JvdXRlX21ldGhvZENhbGw6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgbWV0aG9kQ2FsbCgpdWludDY0CgljYWxsc3ViIG1ldGhvZENhbGwKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBtZXRob2RDYWxsKCk6IEFzc2V0SUQKbWV0aG9kQ2FsbDoKCXByb3RvIDAgMQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjc3CgkvLyByZXR1cm4gc2VuZE1ldGhvZENhbGw8W0FwcElELCBBc3NldElEXSwgQXNzZXRJRD4oewoJLy8gICAgICAgbmFtZTogJ21ldGhvZCcsCgkvLyAgICAgICBtZXRob2RBcmdzOiBbdGhpcy5hcHAsIEFzc2V0SUQuemVyb0luZGV4XSwKCS8vICAgICB9KTsKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgIm1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NzkKCS8vIG1ldGhvZEFyZ3M6IFt0aGlzLmFwcCwgQXNzZXRJRC56ZXJvSW5kZXhdCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglidG9pCglyZXRzdWIKCi8vIG9ubGluZUtleVJlZ2lzdHJhdGlvbigpdm9pZAoqYWJpX3JvdXRlX29ubGluZUtleVJlZ2lzdHJhdGlvbjoKCS8vIGV4ZWN1dGUgb25saW5lS2V5UmVnaXN0cmF0aW9uKCl2b2lkCgljYWxsc3ViIG9ubGluZUtleVJlZ2lzdHJhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gb25saW5lS2V5UmVnaXN0cmF0aW9uKCk6IHZvaWQKb25saW5lS2V5UmVnaXN0cmF0aW9uOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODQKCS8vIHNlbmRPbmxpbmVLZXlSZWdpc3RyYXRpb24oewoJLy8gICAgICAgc2VsZWN0aW9uUEs6ICdhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYScsCgkvLyAgICAgICBzdGF0ZVByb29mUEs6ICdhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYScsCgkvLyAgICAgICB2b3RlRmlyc3Q6IDEsCgkvLyAgICAgICB2b3RlS2V5RGlsdXRpb246IDEsCgkvLyAgICAgICB2b3RlTGFzdDogMSwKCS8vICAgICAgIHZvdGVQSzogJ2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJywKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGtleXJlZwoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjg1CgkvLyBzZWxlY3Rpb25QSzogJ2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJwoJYnl0ZSAweDYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEgLy8gImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIgoJaXR4bl9maWVsZCBTZWxlY3Rpb25QSwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjg2CgkvLyBzdGF0ZVByb29mUEs6ICdhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYScKCWJ5dGUgMHg2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIC8vICJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSIKCWl0eG5fZmllbGQgU3RhdGVQcm9vZlBLCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODcKCS8vIHZvdGVGaXJzdDogMQoJaW50IDEKCWl0eG5fZmllbGQgVm90ZUZpcnN0CgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODgKCS8vIHZvdGVLZXlEaWx1dGlvbjogMQoJaW50IDEKCWl0eG5fZmllbGQgVm90ZUtleURpbHV0aW9uCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODkKCS8vIHZvdGVMYXN0OiAxCglpbnQgMQoJaXR4bl9maWVsZCBWb3RlTGFzdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjkwCgkvLyB2b3RlUEs6ICdhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYScKCWJ5dGUgMHg2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIC8vICJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSIKCWl0eG5fZmllbGQgVm90ZVBLCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBvZmZsaW5lS2V5UmVnaXN0cmF0aW9uKCl2b2lkCiphYmlfcm91dGVfb2ZmbGluZUtleVJlZ2lzdHJhdGlvbjoKCS8vIGV4ZWN1dGUgb2ZmbGluZUtleVJlZ2lzdHJhdGlvbigpdm9pZAoJY2FsbHN1YiBvZmZsaW5lS2V5UmVnaXN0cmF0aW9uCglpbnQgMQoJcmV0dXJuCgovLyBvZmZsaW5lS2V5UmVnaXN0cmF0aW9uKCk6IHZvaWQKb2ZmbGluZUtleVJlZ2lzdHJhdGlvbjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjk1CgkvLyBzZW5kT2ZmbGluZUtleVJlZ2lzdHJhdGlvbih7fSkKCWl0eG5fYmVnaW4KCWludCBrZXlyZWcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGlubmVyR2VuZXJpYygpdm9pZAoqYWJpX3JvdXRlX2lubmVyR2VuZXJpYzoKCS8vIGV4ZWN1dGUgaW5uZXJHZW5lcmljKCl2b2lkCgljYWxsc3ViIGlubmVyR2VuZXJpYwoJaW50IDEKCXJldHVybgoKLy8gaW5uZXJHZW5lcmljKCk6IHZvaWQKaW5uZXJHZW5lcmljOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6OTkKCS8vIHNlbmRNZXRob2RDYWxsPFtJbm5lclR4bjxJbm5lckFzc2V0Q3JlYXRpb24+XSwgdm9pZD4oewoJLy8gICAgICAgbmFtZTogJ2ZvbycsCgkvLyAgICAgICBtZXRob2RBcmdzOiBbeyBjb25maWdBc3NldFRvdGFsOiAxIH1dLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYWNmZwoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwMQoJLy8gY29uZmlnQXNzZXRUb3RhbDogMQoJaW50IDEKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9uZXh0CglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJmb28odHhuKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwMQoJLy8gbWV0aG9kQXJnczogW3sgY29uZmlnQXNzZXRUb3RhbDogMSB9XQoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50IDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAicGF5bWVudCgpdm9pZCIKCW1ldGhvZCAiYXNzZXRDcmVhdGlvbigpdWludDY0IgoJbWV0aG9kICJhcHBDYWxsKCl2b2lkIgoJbWV0aG9kICJhc3NldENvbmZpZygpdm9pZCIKCW1ldGhvZCAiYXNzZXRGcmVlemUoKXZvaWQiCgltZXRob2QgImFzc2V0VHJhbnNmZXIoKXZvaWQiCgltZXRob2QgIm1ldGhvZENhbGwoKXVpbnQ2NCIKCW1ldGhvZCAib25saW5lS2V5UmVnaXN0cmF0aW9uKCl2b2lkIgoJbWV0aG9kICJvZmZsaW5lS2V5UmVnaXN0cmF0aW9uKCl2b2lkIgoJbWV0aG9kICJpbm5lckdlbmVyaWMoKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3BheW1lbnQgKmFiaV9yb3V0ZV9hc3NldENyZWF0aW9uICphYmlfcm91dGVfYXBwQ2FsbCAqYWJpX3JvdXRlX2Fzc2V0Q29uZmlnICphYmlfcm91dGVfYXNzZXRGcmVlemUgKmFiaV9yb3V0ZV9hc3NldFRyYW5zZmVyICphYmlfcm91dGVfbWV0aG9kQ2FsbCAqYWJpX3JvdXRlX29ubGluZUtleVJlZ2lzdHJhdGlvbiAqYWJpX3JvdXRlX29mZmxpbmVLZXlSZWdpc3RyYXRpb24gKmFiaV9yb3V0ZV9pbm5lckdlbmVyaWMKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkyLjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHBheW1lbnQoKXZvaWQKKmFiaV9yb3V0ZV9wYXltZW50OgoJLy8gZXhlY3V0ZSBwYXltZW50KCl2b2lkCgljYWxsc3ViIHBheW1lbnQKCWludCAxCglyZXR1cm4KCi8vIHBheW1lbnQoKTogdm9pZApwYXltZW50OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NgoJLy8gdGhpcy50eG5Db21wb3Nlci5zZW5kKAoJLy8gICAgICAgbmV3IFBheVR4bih7CgkvLyAgICAgICAgIGFtb3VudDogMTAwLAoJLy8gICAgICAgICByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgICAgY2xvc2VSZW1haW5kZXJUbzogZ2xvYmFscy56ZXJvQWRkcmVzcywKCS8vICAgICAgICAgc2VuZGVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgICByZWtleVRvOiBnbG9iYWxzLnplcm9BZGRyZXNzLAoJLy8gICAgICAgICBub3RlOiAnSGVsbG8gV29ybGQhJywKCS8vICAgICAgIH0pCgkvLyAgICAgKQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjgKCS8vIGFtb3VudDogMTAwCglpbnQgMTAwCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjkKCS8vIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwCgkvLyBjbG9zZVJlbWFpbmRlclRvOiBnbG9iYWxzLnplcm9BZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjExCgkvLyBzZW5kZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEyCgkvLyByZWtleVRvOiBnbG9iYWxzLnplcm9BZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWl0eG5fZmllbGQgUmVrZXlUbwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEzCgkvLyBub3RlOiAnSGVsbG8gV29ybGQhJwoJYnl0ZSAweDQ4NjU2YzZjNmYyMDU3NmY3MjZjNjQyMSAvLyAiSGVsbG8gV29ybGQhIgoJaXR4bl9maWVsZCBOb3RlCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhc3NldENyZWF0aW9uKCl1aW50NjQKKmFiaV9yb3V0ZV9hc3NldENyZWF0aW9uOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGFzc2V0Q3JlYXRpb24oKXVpbnQ2NAoJY2FsbHN1YiBhc3NldENyZWF0aW9uCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXNzZXRDcmVhdGlvbigpOiBBc3NldElECmFzc2V0Q3JlYXRpb246Cglwcm90byAwIDEKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxOQoJLy8gcmV0dXJuIHRoaXMudHhuQ29tcG9zZXIuc2VuZCgKCS8vICAgICAgIG5ldyBBc3NldENyZWF0ZVR4bih7CgkvLyAgICAgICAgIGNvbmZpZ0Fzc2V0TmFtZTogJ25hbWUnLAoJLy8gICAgICAgICBjb25maWdBc3NldFVuaXROYW1lOiAndW5pdCcsCgkvLyAgICAgICAgIGNvbmZpZ0Fzc2V0VG90YWw6IDEsCgkvLyAgICAgICAgIGNvbmZpZ0Fzc2V0TWFuYWdlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgICAgY29uZmlnQXNzZXRSZXNlcnZlOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgICBjb25maWdBc3NldEZyZWV6ZTogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgICAgY29uZmlnQXNzZXRDbGF3YmFjazogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgICAgY29uZmlnQXNzZXREZWZhdWx0RnJvemVuOiAwLAoJLy8gICAgICAgICBjb25maWdBc3NldFVSTDogJ3VybCcsCgkvLyAgICAgICAgIGNvbmZpZ0Fzc2V0TWV0YWRhdGFIYXNoOiAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnLAoJLy8gICAgICAgfSkKCS8vICAgICApOwoJaXR4bl9iZWdpbgoJaW50IGFjZmcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyMQoJLy8gY29uZmlnQXNzZXROYW1lOiAnbmFtZScKCWJ5dGUgMHg2ZTYxNmQ2NSAvLyAibmFtZSIKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjIKCS8vIGNvbmZpZ0Fzc2V0VW5pdE5hbWU6ICd1bml0JwoJYnl0ZSAweDc1NmU2OTc0IC8vICJ1bml0IgoJaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjMKCS8vIGNvbmZpZ0Fzc2V0VG90YWw6IDEKCWludCAxCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyNAoJLy8gY29uZmlnQXNzZXRNYW5hZ2VyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyNQoJLy8gY29uZmlnQXNzZXRSZXNlcnZlOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyNgoJLy8gY29uZmlnQXNzZXRGcmVlemU6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjcKCS8vIGNvbmZpZ0Fzc2V0Q2xhd2JhY2s6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyOAoJLy8gY29uZmlnQXNzZXREZWZhdWx0RnJvemVuOiAwCglpbnQgMAoJaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyOQoJLy8gY29uZmlnQXNzZXRVUkw6ICd1cmwnCglieXRlIDB4NzU3MjZjIC8vICJ1cmwiCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MzAKCS8vIGNvbmZpZ0Fzc2V0TWV0YWRhdGFIYXNoOiAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnCglieXRlIDB4NjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSAvLyAiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWV0YWRhdGFIYXNoCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBDcmVhdGVkQXNzZXRJRAoJcmV0c3ViCgovLyBhcHBDYWxsKCl2b2lkCiphYmlfcm91dGVfYXBwQ2FsbDoKCS8vIGV4ZWN1dGUgYXBwQ2FsbCgpdm9pZAoJY2FsbHN1YiBhcHBDYWxsCglpbnQgMQoJcmV0dXJuCgovLyBhcHBDYWxsKCk6IHZvaWQKYXBwQ2FsbDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjM2CgkvLyB0aGlzLnR4bkNvbXBvc2VyLnNlbmQoCgkvLyAgICAgICBuZXcgQXBwQ2FsbFR4bih7CgkvLyAgICAgICAgIGFjY291bnRzOiBbdGhpcy5hcHAuYWRkcmVzc10sCgkvLyAgICAgICAgIGFwcGxpY2F0aW9uQXJnczogWydhcmcxJywgJ2FyZzInXSwKCS8vICAgICAgICAgYXBwbGljYXRpb25JRDogdGhpcy5hcHAsCgkvLyAgICAgICAgIGFwcGxpY2F0aW9uczogW3RoaXMuYXBwXSwKCS8vICAgICAgICAgYXBwcm92YWxQcm9ncmFtOiAnYXBwcm92YWwnLAoJLy8gICAgICAgICBhc3NldHM6IFtBc3NldElELnplcm9JbmRleF0sCgkvLyAgICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiAnY2xlYXInLAoJLy8gICAgICAgICBnbG9iYWxOdW1CeXRlU2xpY2U6IDEsCgkvLyAgICAgICAgIGdsb2JhbE51bVVpbnQ6IDEsCgkvLyAgICAgICAgIGxvY2FsTnVtQnl0ZVNsaWNlOiAxLAoJLy8gICAgICAgICBsb2NhbE51bVVpbnQ6IDEsCgkvLyAgICAgICAgIG5vdGU6ICdub3RlJywKCS8vICAgICAgIH0pCgkvLyAgICAgKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czozOAoJLy8gYWNjb3VudHM6IFt0aGlzLmFwcC5hZGRyZXNzXQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQWNjb3VudHMKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czozOQoJLy8gYXBwbGljYXRpb25BcmdzOiBbJ2FyZzEnLCAnYXJnMiddCglieXRlIDB4NjE3MjY3MzEgLy8gImFyZzEiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJYnl0ZSAweDYxNzI2NzMyIC8vICJhcmcyIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0MAoJLy8gYXBwbGljYXRpb25JRDogdGhpcy5hcHAKCXR4bmEgQXBwbGljYXRpb25zIDAKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjQxCgkvLyBhcHBsaWNhdGlvbnM6IFt0aGlzLmFwcF0KCXR4bmEgQXBwbGljYXRpb25zIDAKCWl0eG5fZmllbGQgQXBwbGljYXRpb25zCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NDIKCS8vIGFwcHJvdmFsUHJvZ3JhbTogJ2FwcHJvdmFsJwoJYnl0ZSAweDYxNzA3MDcyNmY3NjYxNmMgLy8gImFwcHJvdmFsIgoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0MwoJLy8gYXNzZXRzOiBbQXNzZXRJRC56ZXJvSW5kZXhdCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldHMKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0NAoJLy8gY2xlYXJTdGF0ZVByb2dyYW06ICdjbGVhcicKCWJ5dGUgMHg2MzZjNjU2MTcyIC8vICJjbGVhciIKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0NQoJLy8gZ2xvYmFsTnVtQnl0ZVNsaWNlOiAxCglpbnQgMQoJaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0NgoJLy8gZ2xvYmFsTnVtVWludDogMQoJaW50IDEKCWl0eG5fZmllbGQgR2xvYmFsTnVtVWludAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjQ3CgkvLyBsb2NhbE51bUJ5dGVTbGljZTogMQoJaW50IDEKCWl0eG5fZmllbGQgTG9jYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0OAoJLy8gbG9jYWxOdW1VaW50OiAxCglpbnQgMQoJaXR4bl9maWVsZCBMb2NhbE51bVVpbnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0OQoJLy8gbm90ZTogJ25vdGUnCglieXRlIDB4NmU2Zjc0NjUgLy8gIm5vdGUiCglpdHhuX2ZpZWxkIE5vdGUKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFzc2V0Q29uZmlnKCl2b2lkCiphYmlfcm91dGVfYXNzZXRDb25maWc6CgkvLyBleGVjdXRlIGFzc2V0Q29uZmlnKCl2b2lkCgljYWxsc3ViIGFzc2V0Q29uZmlnCglpbnQgMQoJcmV0dXJuCgovLyBhc3NldENvbmZpZygpOiB2b2lkCmFzc2V0Q29uZmlnOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTUKCS8vIHRoaXMudHhuQ29tcG9zZXIuc2VuZCgKCS8vICAgICAgIG5ldyBBc3NldENvbmZpZ1R4bih7CgkvLyAgICAgICAgIGNvbmZpZ0Fzc2V0OiBBc3NldElELnplcm9JbmRleCwKCS8vICAgICAgICAgY29uZmlnQXNzZXRNYW5hZ2VyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgICBjb25maWdBc3NldFJlc2VydmU6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICAgIGNvbmZpZ0Fzc2V0RnJlZXplOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgICBjb25maWdBc3NldENsYXdiYWNrOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgYWNmZwoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjU3CgkvLyBjb25maWdBc3NldDogQXNzZXRJRC56ZXJvSW5kZXgKCWludCAwCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTgKCS8vIGNvbmZpZ0Fzc2V0TWFuYWdlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTkKCS8vIGNvbmZpZ0Fzc2V0UmVzZXJ2ZTogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NjAKCS8vIGNvbmZpZ0Fzc2V0RnJlZXplOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjYxCgkvLyBjb25maWdBc3NldENsYXdiYWNrOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhc3NldEZyZWV6ZSgpdm9pZAoqYWJpX3JvdXRlX2Fzc2V0RnJlZXplOgoJLy8gZXhlY3V0ZSBhc3NldEZyZWV6ZSgpdm9pZAoJY2FsbHN1YiBhc3NldEZyZWV6ZQoJaW50IDEKCXJldHVybgoKLy8gYXNzZXRGcmVlemUoKTogdm9pZAphc3NldEZyZWV6ZToKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjY3CgkvLyB0aGlzLnR4bkNvbXBvc2VyLnNlbmQoCgkvLyAgICAgICBuZXcgQXNzZXRGcmVlemVUeG4oewoJLy8gICAgICAgICBmcmVlemVBc3NldEZyb3plbjogdHJ1ZSwKCS8vICAgICAgICAgZnJlZXplQXNzZXRBY2NvdW50OiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgICBmcmVlemVBc3NldDogQXNzZXRJRC56ZXJvSW5kZXgsCgkvLyAgICAgICB9KQoJLy8gICAgICkKCWl0eG5fYmVnaW4KCWludCBhZnJ6CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NjkKCS8vIGZyZWV6ZUFzc2V0RnJvemVuOiB0cnVlCglpbnQgMQoJaXR4bl9maWVsZCBGcmVlemVBc3NldEZyb3plbgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjcwCgkvLyBmcmVlemVBc3NldEFjY291bnQ6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0QWNjb3VudAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjcxCgkvLyBmcmVlemVBc3NldDogQXNzZXRJRC56ZXJvSW5kZXgKCWludCAwCglpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhc3NldFRyYW5zZmVyKCl2b2lkCiphYmlfcm91dGVfYXNzZXRUcmFuc2ZlcjoKCS8vIGV4ZWN1dGUgYXNzZXRUcmFuc2Zlcigpdm9pZAoJY2FsbHN1YiBhc3NldFRyYW5zZmVyCglpbnQgMQoJcmV0dXJuCgovLyBhc3NldFRyYW5zZmVyKCk6IHZvaWQKYXNzZXRUcmFuc2ZlcjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjc3CgkvLyB0aGlzLnR4bkNvbXBvc2VyLnNlbmQoCgkvLyAgICAgICBuZXcgQXNzZXRUcmFuc2ZlclR4bih7CgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAxLAoJLy8gICAgICAgICBhc3NldENsb3NlVG86IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICAgIGFzc2V0U2VuZGVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IEFzc2V0SUQuemVyb0luZGV4LAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo3OQoJLy8gYXNzZXRBbW91bnQ6IDEKCWludCAxCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo4MgoJLy8gYXNzZXRTZW5kZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODMKCS8vIHhmZXJBc3NldDogQXNzZXRJRC56ZXJvSW5kZXgKCWludCAwCglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gbWV0aG9kQ2FsbCgpdWludDY0CiphYmlfcm91dGVfbWV0aG9kQ2FsbDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBtZXRob2RDYWxsKCl1aW50NjQKCWNhbGxzdWIgbWV0aG9kQ2FsbAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIG1ldGhvZENhbGwoKTogQXNzZXRJRAptZXRob2RDYWxsOgoJcHJvdG8gMCAxCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODkKCS8vIHJldHVybiB0aGlzLnR4bkNvbXBvc2VyLnNlbmQoCgkvLyAgICAgICBuZXcgTWV0aG9kQ2FsbFR4bjxbQXBwSUQsIEFzc2V0SURdLCBBc3NldElEPih7CgkvLyAgICAgICAgIG5hbWU6ICdtZXRob2QnLAoJLy8gICAgICAgICBtZXRob2RBcmdzOiBbdGhpcy5hcHAsIEFzc2V0SUQuemVyb0luZGV4XSwKCS8vICAgICAgIH0pCgkvLyAgICAgKTsKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgIm1ldGhvZCh1aW50NjQsdWludDY0KXVpbnQ2NCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6OTIKCS8vIG1ldGhvZEFyZ3M6IFt0aGlzLmFwcCwgQXNzZXRJRC56ZXJvSW5kZXhdCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo5MgoJLy8gdGhpcy5hcHAKCXR4bmEgQXBwbGljYXRpb25zIDAKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6OTIKCS8vIEFzc2V0SUQuemVyb0luZGV4CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWJ0b2kKCXJldHN1YgoKLy8gb25saW5lS2V5UmVnaXN0cmF0aW9uKCl2b2lkCiphYmlfcm91dGVfb25saW5lS2V5UmVnaXN0cmF0aW9uOgoJLy8gZXhlY3V0ZSBvbmxpbmVLZXlSZWdpc3RyYXRpb24oKXZvaWQKCWNhbGxzdWIgb25saW5lS2V5UmVnaXN0cmF0aW9uCglpbnQgMQoJcmV0dXJuCgovLyBvbmxpbmVLZXlSZWdpc3RyYXRpb24oKTogdm9pZApvbmxpbmVLZXlSZWdpc3RyYXRpb246Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo5OAoJLy8gdGhpcy50eG5Db21wb3Nlci5zZW5kKAoJLy8gICAgICAgbmV3IEtleVJlZ1R4bih7CgkvLyAgICAgICAgIHNlbGVjdGlvblBLOiAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnLAoJLy8gICAgICAgICBzdGF0ZVByb29mUEs6ICdhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYScsCgkvLyAgICAgICAgIHZvdGVGaXJzdDogMSwKCS8vICAgICAgICAgdm90ZUtleURpbHV0aW9uOiAxLAoJLy8gICAgICAgICB2b3RlTGFzdDogMSwKCS8vICAgICAgICAgdm90ZVBLOiAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnLAoJLy8gICAgICAgfSkKCS8vICAgICApCglpdHhuX2JlZ2luCglpbnQga2V5cmVnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MTAwCgkvLyBzZWxlY3Rpb25QSzogJ2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJwoJYnl0ZSAweDYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEgLy8gImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIgoJaXR4bl9maWVsZCBTZWxlY3Rpb25QSwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwMQoJLy8gc3RhdGVQcm9vZlBLOiAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnCglieXRlIDB4NjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSAvLyAiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiCglpdHhuX2ZpZWxkIFN0YXRlUHJvb2ZQSwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwMgoJLy8gdm90ZUZpcnN0OiAxCglpbnQgMQoJaXR4bl9maWVsZCBWb3RlRmlyc3QKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMDMKCS8vIHZvdGVLZXlEaWx1dGlvbjogMQoJaW50IDEKCWl0eG5fZmllbGQgVm90ZUtleURpbHV0aW9uCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MTA0CgkvLyB2b3RlTGFzdDogMQoJaW50IDEKCWl0eG5fZmllbGQgVm90ZUxhc3QKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMDUKCS8vIHZvdGVQSzogJ2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJwoJYnl0ZSAweDYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEgLy8gImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIgoJaXR4bl9maWVsZCBWb3RlUEsKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIG9mZmxpbmVLZXlSZWdpc3RyYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9vZmZsaW5lS2V5UmVnaXN0cmF0aW9uOgoJLy8gZXhlY3V0ZSBvZmZsaW5lS2V5UmVnaXN0cmF0aW9uKCl2b2lkCgljYWxsc3ViIG9mZmxpbmVLZXlSZWdpc3RyYXRpb24KCWludCAxCglyZXR1cm4KCi8vIG9mZmxpbmVLZXlSZWdpc3RyYXRpb24oKTogdm9pZApvZmZsaW5lS2V5UmVnaXN0cmF0aW9uOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MTExCgkvLyB0aGlzLnR4bkNvbXBvc2VyLnNlbmQobmV3IEtleVJlZ1R4bih7fSkpCglpdHhuX2JlZ2luCglpbnQga2V5cmVnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBpbm5lckdlbmVyaWMoKXZvaWQKKmFiaV9yb3V0ZV9pbm5lckdlbmVyaWM6CgkvLyBleGVjdXRlIGlubmVyR2VuZXJpYygpdm9pZAoJY2FsbHN1YiBpbm5lckdlbmVyaWMKCWludCAxCglyZXR1cm4KCi8vIGlubmVyR2VuZXJpYygpOiB2b2lkCmlubmVyR2VuZXJpYzoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjExNQoJLy8gdGhpcy50eG5Db21wb3Nlci5zZW5kKAoJLy8gICAgICAgbmV3IE1ldGhvZENhbGxUeG48W1R4bl0sIHZvaWQ+KHsKCS8vICAgICAgICAgbmFtZTogJ2ZvbycsCgkvLyAgICAgICAgIG1ldGhvZEFyZ3M6IFtuZXcgQXNzZXRDcmVhdGVUeG4oeyBjb25maWdBc3NldFRvdGFsOiAxIH0pXSwKCS8vICAgICAgIH0pCgkvLyAgICAgKQoJaXR4bl9iZWdpbgoJaW50IGFjZmcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMTgKCS8vIGNvbmZpZ0Fzc2V0VG90YWw6IDEKCWludCAxCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMTUKCS8vIHRoaXMudHhuQ29tcG9zZXIuc2VuZCgKCS8vICAgICAgIG5ldyBNZXRob2RDYWxsVHhuPFtUeG5dLCB2b2lkPih7CgkvLyAgICAgICAgIG5hbWU6ICdmb28nLAoJLy8gICAgICAgICBtZXRob2RBcmdzOiBbbmV3IEFzc2V0Q3JlYXRlVHhuKHsgY29uZmlnQXNzZXRUb3RhbDogMSB9KV0sCgkvLyAgICAgICB9KQoJLy8gICAgICkKCWl0eG5fbmV4dAoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiZm9vKHR4bil2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMTgKCS8vIG1ldGhvZEFyZ3M6IFtuZXcgQXNzZXRDcmVhdGVUeG4oeyBjb25maWdBc3NldFRvdGFsOiAxIH0pXQoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MTE4CgkvLyBuZXcgQXNzZXRDcmVhdGVUeG4oeyBjb25maWdBc3NldFRvdGFsOiAxIH0pCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJwYXltZW50KCl2b2lkIgoJbWV0aG9kICJhc3NldENyZWF0aW9uKCl1aW50NjQiCgltZXRob2QgImFwcENhbGwoKXZvaWQiCgltZXRob2QgImFzc2V0Q29uZmlnKCl2b2lkIgoJbWV0aG9kICJhc3NldEZyZWV6ZSgpdm9pZCIKCW1ldGhvZCAiYXNzZXRUcmFuc2Zlcigpdm9pZCIKCW1ldGhvZCAibWV0aG9kQ2FsbCgpdWludDY0IgoJbWV0aG9kICJvbmxpbmVLZXlSZWdpc3RyYXRpb24oKXZvaWQiCgltZXRob2QgIm9mZmxpbmVLZXlSZWdpc3RyYXRpb24oKXZvaWQiCgltZXRob2QgImlubmVyR2VuZXJpYygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfcGF5bWVudCAqYWJpX3JvdXRlX2Fzc2V0Q3JlYXRpb24gKmFiaV9yb3V0ZV9hcHBDYWxsICphYmlfcm91dGVfYXNzZXRDb25maWcgKmFiaV9yb3V0ZV9hc3NldEZyZWV6ZSAqYWJpX3JvdXRlX2Fzc2V0VHJhbnNmZXIgKmFiaV9yb3V0ZV9tZXRob2RDYWxsICphYmlfcm91dGVfb25saW5lS2V5UmVnaXN0cmF0aW9uICphYmlfcm91dGVfb2ZmbGluZUtleVJlZ2lzdHJhdGlvbiAqYWJpX3JvdXRlX2lubmVyR2VuZXJpYwoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/contracts/general.algo.ts b/tests/contracts/general.algo.ts index c9d290741..54781e35f 100644 --- a/tests/contracts/general.algo.ts +++ b/tests/contracts/general.algo.ts @@ -96,23 +96,25 @@ class GeneralTest extends Contract { } submitPendingGroup(): void { - this.pendingGroup.addPayment({ amount: 0, receiver: this.app.address, isFirstTxn: true }); - this.pendingGroup.addPayment({ amount: 0, receiver: this.app.address, note: 'foo' }); - this.pendingGroup.submit(); + this.txnComposer.beginGroup(new PayTxn({ amount: 0, receiver: this.app.address })); + this.txnComposer.addToGroup(new PayTxn({ amount: 0, receiver: this.app.address, note: 'foo' })); + this.txnComposer.sendGroup(); } methodWithTxnArgs(): void { - sendMethodCall<[PayTxn, MethodCall<[uint64], void>], void>({ - name: 'foo', - methodArgs: [ - { amount: 100_000, receiver: this.txn.sender }, - { - name: 'bar', - applicationID: AppID.fromUint64(1337), - methodArgs: [1], - }, - ], - }); + this.txnComposer.send( + new MethodCallTxn<[PayTxn, AppCallTxn], void>({ + name: 'foo', + methodArgs: [ + new PayTxn({ amount: 100_000, receiver: this.txn.sender }), + new MethodCallTxn<[uint64], void>({ + name: 'bar', + applicationID: AppID.fromUint64(1337), + methodArgs: [1], + }), + ], + }) + ); } shift(): void { @@ -161,15 +163,17 @@ class GeneralTest extends Contract { } staticContractProperties(): void { - sendAppCall({ - onCompletion: OnCompletion.NoOp, - approvalProgram: DummyContract.approvalProgram(), - clearStateProgram: DummyContract.clearProgram(), - localNumByteSlice: DummyContract.schema.local.numByteSlice, - localNumUint: DummyContract.schema.local.numUint, - globalNumByteSlice: DummyContract.schema.global.numByteSlice, - globalNumUint: DummyContract.schema.global.numUint, - }); + this.txnComposer.send( + new AppCallTxn({ + onCompletion: OnCompletion.NoOp, + approvalProgram: DummyContract.approvalProgram(), + clearStateProgram: DummyContract.clearProgram(), + localNumByteSlice: DummyContract.schema.local.numByteSlice, + localNumUint: DummyContract.schema.local.numUint, + globalNumByteSlice: DummyContract.schema.global.numByteSlice, + globalNumUint: DummyContract.schema.global.numUint, + }) + ); } numberToString(): void { @@ -427,9 +431,9 @@ class GeneralTest extends Contract { txnArgsMethod(_pay1: PayTxn): void {} callTxnArgsMethod(): void { - sendMethodCall({ - methodArgs: [{ receiver: this.app.address, amount: 0 }], - }); + GeneralTest.call({ applicationID: AppID.fromUint64(1337) }).txnArgsMethod( + new PayTxn({ receiver: this.app.address, amount: 0 }) + ); } staticValueLen(x: uint256): void { @@ -471,10 +475,12 @@ class GeneralTest extends Contract { } assetMethodArgs(): void { - sendMethodCall<[AssetReference], void>({ - name: 'foo', - methodArgs: [AssetID.fromUint64(1)], - }); + this.txnComposer.send( + new MethodCallTxn<[AssetReference], void>({ + name: 'foo', + methodArgs: [AssetID.fromUint64(1)], + }) + ); } pageOne = BoxKey(); @@ -482,10 +488,12 @@ class GeneralTest extends Contract { pageTwo = BoxKey(); multipleProgramPages(): void { - sendAppCall({ - approvalProgram: [this.pageOne.value, this.pageTwo.value], - clearStateProgram: [this.pageOne.value, this.pageTwo.value], - }); + this.txnComposer.send( + new AppCallTxn({ + approvalProgram: [this.pageOne.value, this.pageTwo.value], + clearStateProgram: [this.pageOne.value, this.pageTwo.value], + }) + ); } assertComment() { diff --git a/tests/contracts/itxns.algo.ts b/tests/contracts/itxns.algo.ts index 459b3b1a4..bf655dea4 100644 --- a/tests/contracts/itxns.algo.ts +++ b/tests/contracts/itxns.algo.ts @@ -3,102 +3,120 @@ import { Contract } from '../../src/lib/index'; // eslint-disable-next-line no-unused-vars class ItxnsTest extends Contract { payment(): void { - sendPayment({ - amount: 100, - receiver: this.app.address, - closeRemainderTo: globals.zeroAddress, - sender: this.app.address, - rekeyTo: globals.zeroAddress, - note: 'Hello World!', - }); + this.txnComposer.send( + new PayTxn({ + amount: 100, + receiver: this.app.address, + closeRemainderTo: globals.zeroAddress, + sender: this.app.address, + rekeyTo: globals.zeroAddress, + note: 'Hello World!', + }) + ); } assetCreation(): AssetID { - return sendAssetCreation({ - configAssetName: 'name', - configAssetUnitName: 'unit', - configAssetTotal: 1, - configAssetManager: this.app.address, - configAssetReserve: this.app.address, - configAssetFreeze: this.app.address, - configAssetClawback: this.app.address, - configAssetDefaultFrozen: 0, - configAssetURL: 'url', - configAssetMetadataHash: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', - }); + return this.txnComposer.send( + new AssetCreateTxn({ + configAssetName: 'name', + configAssetUnitName: 'unit', + configAssetTotal: 1, + configAssetManager: this.app.address, + configAssetReserve: this.app.address, + configAssetFreeze: this.app.address, + configAssetClawback: this.app.address, + configAssetDefaultFrozen: 0, + configAssetURL: 'url', + configAssetMetadataHash: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + }) + ); } appCall(): void { - sendAppCall({ - accounts: [this.app.address], - applicationArgs: ['arg1', 'arg2'], - applicationID: this.app, - applications: [this.app], - approvalProgram: 'approval', - assets: [AssetID.zeroIndex], - clearStateProgram: 'clear', - globalNumByteSlice: 1, - globalNumUint: 1, - localNumByteSlice: 1, - localNumUint: 1, - note: 'note', - }); + this.txnComposer.send( + new AppCallTxn({ + accounts: [this.app.address], + applicationArgs: ['arg1', 'arg2'], + applicationID: this.app, + applications: [this.app], + approvalProgram: 'approval', + assets: [AssetID.zeroIndex], + clearStateProgram: 'clear', + globalNumByteSlice: 1, + globalNumUint: 1, + localNumByteSlice: 1, + localNumUint: 1, + note: 'note', + }) + ); } assetConfig(): void { - sendAssetConfig({ - configAsset: AssetID.zeroIndex, - configAssetManager: this.app.address, - configAssetReserve: this.app.address, - configAssetFreeze: this.app.address, - configAssetClawback: this.app.address, - }); + this.txnComposer.send( + new AssetConfigTxn({ + configAsset: AssetID.zeroIndex, + configAssetManager: this.app.address, + configAssetReserve: this.app.address, + configAssetFreeze: this.app.address, + configAssetClawback: this.app.address, + }) + ); } assetFreeze(): void { - sendAssetFreeze({ - freezeAssetFrozen: true, - freezeAssetAccount: this.app.address, - freezeAsset: AssetID.zeroIndex, - }); + this.txnComposer.send( + new AssetFreezeTxn({ + freezeAssetFrozen: true, + freezeAssetAccount: this.app.address, + freezeAsset: AssetID.zeroIndex, + }) + ); } assetTransfer(): void { - sendAssetTransfer({ - assetAmount: 1, - assetCloseTo: this.app.address, - assetReceiver: this.app.address, - assetSender: this.app.address, - xferAsset: AssetID.zeroIndex, - }); + this.txnComposer.send( + new AssetTransferTxn({ + assetAmount: 1, + assetCloseTo: this.app.address, + assetReceiver: this.app.address, + assetSender: this.app.address, + xferAsset: AssetID.zeroIndex, + }) + ); } methodCall(): AssetID { - return sendMethodCall<[AppID, AssetID], AssetID>({ - name: 'method', - methodArgs: [this.app, AssetID.zeroIndex], - }); + return this.txnComposer.send( + new MethodCallTxn<[AppID, AssetID], AssetID>({ + name: 'method', + methodArgs: [this.app, AssetID.zeroIndex], + }) + ); } onlineKeyRegistration(): void { - sendOnlineKeyRegistration({ - selectionPK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', - stateProofPK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', - voteFirst: 1, - voteKeyDilution: 1, - voteLast: 1, - votePK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', - }); + this.txnComposer.send( + new KeyRegTxn({ + selectionPK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + stateProofPK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + voteFirst: 1, + voteKeyDilution: 1, + voteLast: 1, + votePK: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + }) + ); } offlineKeyRegistration(): void { - sendOfflineKeyRegistration({}); + this.txnComposer.send(new KeyRegTxn({})); } innerGeneric(): void { - sendMethodCall<[InnerTxn], void>({ - name: 'foo', - methodArgs: [{ configAssetTotal: 1 }], - }); + this.txnComposer.send( + new MethodCallTxn<[Txn], void>({ + name: 'foo', + methodArgs: [new AssetCreateTxn({ configAssetTotal: 1 })], + }) + ); } } diff --git a/types/global.d.ts b/types/global.d.ts index 1a5244bbf..857279e45 100644 --- a/types/global.d.ts +++ b/types/global.d.ts @@ -764,9 +764,9 @@ interface AppParams extends CommonTransactionParams { } interface KeyRegParams extends CommonTransactionParams { - votePk?: bytes; + votePK?: bytes; selectionPK?: bytes; - stateProofPk?: bytes; + stateProofPK?: bytes; voteFirst?: uint64; voteLast?: uint64; voteKeyDilution?: uint64; @@ -781,12 +781,49 @@ interface OnlineKeyRegParams extends CommonTransactionParams { voteKeyDilution: uint64; } -declare type PayTxn = Required; -declare type AssetTransferTxn = Required; -declare type AppCallTxn = AppOnChainTransactionParams & Required; -declare type KeyRegTxn = Required; -declare type AssetConfigTxn = Required; -declare type AssetFreezeTxn = Required; +interface PayTxn extends Required {} +// eslint-disable-next-line no-redeclare +class PayTxn { + constructor(params: PaymentParams); +} + +interface AssetTransferTxn extends Required {} +// eslint-disable-next-line no-redeclare +class AssetTransferTxn { + constructor(params: AssetTransferParams); +} + +interface AppCallTxn extends AppOnChainTransactionParams, Required {} +// eslint-disable-next-line no-redeclare +class AppCallTxn { + constructor(params: AppParams); +} + +interface KeyRegTxn extends Required {} +// eslint-disable-next-line no-redeclare +class KeyRegTxn { + constructor(params: KeyRegParams); +} + +interface AssetConfigTxn extends Required {} +// eslint-disable-next-line no-redeclare +class AssetConfigTxn { + constructor(params: AssetConfigParams); +} + +interface AssetFreezeTxn extends Required {} +// eslint-disable-next-line no-redeclare +class AssetFreezeTxn { + constructor(params: AssetFreezeParams); +} + +class AssetCreateTxn { + constructor(params: AssetCreateParams); +} + +class MethodCallTxn { + constructor(params: MethodCallParams); +} type SendMethodCallArgs = { [K in keyof T]: T[K] extends PayTxn