From 10043d468238519cf59ad0bbbe83894b2fe95ba8 Mon Sep 17 00:00:00 2001 From: Michael T Chuang Date: Mon, 1 Jul 2024 14:00:51 -0700 Subject: [PATCH 1/6] feat: add in simulate function for ATC and EmptyTransactionSigner --- examples/pom.xml | 10 +- examples/reti/StakingPool.approval.teal | 4366 +++ examples/reti/StakingPool.arc32.json | 421 + examples/reti/StakingPool.arc4.json | 254 + examples/reti/StakingPool.clear.teal | 1 + examples/reti/StakingPool.src_map.json | 18868 +++++++++++ examples/reti/ValidatorRegistry.approval.teal | 6162 ++++ examples/reti/ValidatorRegistry.arc32.json | 806 + examples/reti/ValidatorRegistry.arc4.json | 579 + examples/reti/ValidatorRegistry.clear.teal | 1 + examples/reti/ValidatorRegistry.src_map.json | 27582 ++++++++++++++++ .../com/algorand/examples/ExampleUtils.java | 8 + .../main/java/com/algorand/examples/Reti.java | 393 + pom.xml | 2 +- .../AtomicTransactionComposer.java | 135 +- .../transaction/EmptyTransactionSigner.java | 62 + .../transaction/SignedTransaction.java | 2 +- .../v2/client/model/ABIMethodResult.java | 84 + 18 files changed, 59726 insertions(+), 10 deletions(-) create mode 100644 examples/reti/StakingPool.approval.teal create mode 100644 examples/reti/StakingPool.arc32.json create mode 100644 examples/reti/StakingPool.arc4.json create mode 100644 examples/reti/StakingPool.clear.teal create mode 100644 examples/reti/StakingPool.src_map.json create mode 100644 examples/reti/ValidatorRegistry.approval.teal create mode 100755 examples/reti/ValidatorRegistry.arc32.json create mode 100755 examples/reti/ValidatorRegistry.arc4.json create mode 100644 examples/reti/ValidatorRegistry.clear.teal create mode 100755 examples/reti/ValidatorRegistry.src_map.json create mode 100644 examples/src/main/java/com/algorand/examples/Reti.java create mode 100644 src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java create mode 100644 src/main/java/com/algorand/algosdk/v2/client/model/ABIMethodResult.java diff --git a/examples/pom.xml b/examples/pom.xml index 3b06f5d04..f824dac96 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -95,7 +95,7 @@ com.algorand algosdk - 2.0.0 + 2.5.1 @@ -114,6 +114,14 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + 16 + 16 + + diff --git a/examples/reti/StakingPool.approval.teal b/examples/reti/StakingPool.approval.teal new file mode 100644 index 000000000..a49c56377 --- /dev/null +++ b/examples/reti/StakingPool.approval.teal @@ -0,0 +1,4366 @@ +#pragma version 10 + +// This TEAL was generated by TEALScript v0.96.0 +// https://github.com/algorandfoundation/TEALScript + +// This contract is compliant with and/or implements the following ARCs: [ ARC4 ] + +// The following ten lines of TEAL handle initial program flow +// This pattern is used to make it easy for anyone to parse the start of the program and determine if a specific action is allowed +// Here, action refers to the OnComplete in combination with whether the app is being created or called +// Every possible action for this contract is represented in the switch statement +// If the action is not implemented in the contract, its respective branch will be "*NOT_IMPLEMENTED" which just contains "err" +txn ApplicationID +! +int 6 +* +txn OnCompletion ++ +switch *call_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *call_UpdateApplication *NOT_IMPLEMENTED *create_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED + +*NOT_IMPLEMENTED: + // The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID? + err + +// updateApplication()void +*abi_route_updateApplication: + // execute updateApplication()void + callsub updateApplication + int 1 + return + +// updateApplication(): void +updateApplication: + proto 0 0 + + // contracts/stakingPool.algo.ts:92 + // assert( + // this.txn.sender === Address.fromAddress('LZ4V2IRVLCXFJK4REJV4TAGEKEYTA2GMR6TC2344OB3L3AF3MWXZ6ZAFIQ'), + // 'Temporary: contract is upgradeable but only during testing and only from a development account', + // ) + txn Sender + addr LZ4V2IRVLCXFJK4REJV4TAGEKEYTA2GMR6TC2344OB3L3AF3MWXZ6ZAFIQ + == + + // Temporary: contract is upgradeable but only during testing and only from a development account + assert + retsub + +// createApplication(uint64,uint64,uint64,uint64)void +*abi_route_createApplication: + // minEntryStake: uint64 + txna ApplicationArgs 4 + btoi + + // poolId: uint64 + txna ApplicationArgs 3 + btoi + + // validatorId: uint64 + txna ApplicationArgs 2 + btoi + + // creatingContractId: uint64 + txna ApplicationArgs 1 + btoi + + // execute createApplication(uint64,uint64,uint64,uint64)void + callsub createApplication + int 1 + return + +// createApplication(creatingContractId: AppID, validatorId: uint64, poolId: uint64, minEntryStake: uint64): void +// +// Initialize the staking pool w/ owner and manager, but can only be created by the validator contract. +// @param {uint64} creatingContractId - id of contract that constructed us - the validator application (single global instance) +// @param {uint64} validatorId - id of validator we're a staking pool of +// @param {uint64} poolId - which pool id are we +// @param {uint64} minEntryStake - minimum amount to be in pool, but also minimum amount balance can't go below (without removing all!) +createApplication: + proto 4 0 + + // *if0_condition + // contracts/stakingPool.algo.ts:106 + // creatingContractId === AppID.fromUint64(0) + frame_dig -1 // creatingContractId: AppID + int 0 + == + bz *if0_else + + // *if0_consequent + // contracts/stakingPool.algo.ts:108 + // assert(validatorId === 0) + frame_dig -2 // validatorId: uint64 + int 0 + == + assert + + // contracts/stakingPool.algo.ts:109 + // assert(poolId === 0) + frame_dig -3 // poolId: uint64 + int 0 + == + assert + b *if0_end + +*if0_else: + // contracts/stakingPool.algo.ts:111 + // assert(validatorId !== 0) + frame_dig -2 // validatorId: uint64 + int 0 + != + assert + + // contracts/stakingPool.algo.ts:112 + // assert(poolId !== 0) + frame_dig -3 // poolId: uint64 + int 0 + != + assert + +*if0_end: + // contracts/stakingPool.algo.ts:114 + // assert(minEntryStake >= MIN_ALGO_STAKE_PER_POOL, 'staking pool must have minimum entry of 1 algo') + frame_dig -4 // minEntryStake: uint64 + int 1000000 + >= + + // staking pool must have minimum entry of 1 algo + assert + + // contracts/stakingPool.algo.ts:115 + // this.creatingValidatorContractAppId.value = creatingContractId + byte 0x63726561746f72417070 // "creatorApp" + frame_dig -1 // creatingContractId: AppID + app_global_put + + // contracts/stakingPool.algo.ts:116 + // this.validatorId.value = validatorId + byte 0x76616c696461746f724964 // "validatorId" + frame_dig -2 // validatorId: uint64 + app_global_put + + // contracts/stakingPool.algo.ts:117 + // this.poolId.value = poolId + byte 0x706f6f6c4964 // "poolId" + frame_dig -3 // poolId: uint64 + app_global_put + + // contracts/stakingPool.algo.ts:118 + // this.numStakers.value = 0 + byte 0x6e756d5374616b657273 // "numStakers" + int 0 + app_global_put + + // contracts/stakingPool.algo.ts:119 + // this.totalAlgoStaked.value = 0 + byte 0x7374616b6564 // "staked" + int 0 + app_global_put + + // contracts/stakingPool.algo.ts:120 + // this.minEntryStake.value = minEntryStake + byte 0x6d696e456e7472795374616b65 // "minEntryStake" + frame_dig -4 // minEntryStake: uint64 + app_global_put + + // contracts/stakingPool.algo.ts:121 + // this.lastPayout.value = globals.round + byte 0x6c6173745061796f7574 // "lastPayout" + global Round + app_global_put + + // contracts/stakingPool.algo.ts:122 + // this.epochNumber.value = 0 + byte 0x65706f63684e756d626572 // "epochNumber" + int 0 + app_global_put + + // contracts/stakingPool.algo.ts:124 + // this.setRoundsPerDay() + callsub setRoundsPerDay + + // contracts/stakingPool.algo.ts:125 + // this.binRoundStart.value = globals.round - (globals.round % this.roundsPerDay.value) + byte 0x62696e526f756e645374617274 // "binRoundStart" + global Round + global Round + byte 0x726f756e6473506572446179 // "roundsPerDay" + app_global_get + % + - + app_global_put + + // contracts/stakingPool.algo.ts:126 + // this.stakeAccumulator.value = 0 as uint128 + byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" + byte 0x00000000000000000000000000000000 + app_global_put + + // contracts/stakingPool.algo.ts:127 + // this.rewardAccumulator.value = 0 + byte 0x726577617264416363756d756c61746f72 // "rewardAccumulator" + int 0 + app_global_put + + // contracts/stakingPool.algo.ts:128 + // this.weightedMovingAverage.value = 0 as uint128 + byte 0x65776d61 // "ewma" + byte 0x00000000000000000000000000000000 + app_global_put + retsub + +// gas()void +*abi_route_gas: + // execute gas()void + callsub gas + int 1 + return + +// gas(): void +// +// gas is a dummy no-op call that can be used to pool-up resource references and opcode cost +gas: + proto 0 0 + retsub + +// costForBoxStorage(totalNumBytes: uint64): uint64 +costForBoxStorage: + proto 1 1 + + // contracts/stakingPool.algo.ts:140 + // return SCBOX_PERBOX + totalNumBytes * SCBOX_PERBYTE + int 2500 + frame_dig -1 // totalNumBytes: uint64 + int 400 + * + + + retsub + +// initStorage(pay)void +*abi_route_initStorage: + // mbrPayment: pay + txn GroupIndex + int 1 + - + dup + gtxns TypeEnum + int pay + == + + // argument 0 (mbrPayment) for initStorage must be a pay transaction + assert + + // execute initStorage(pay)void + callsub initStorage + int 1 + return + +// initStorage(mbrPayment: PayTxn): void +// +// Called after we're created and then funded, so we can create our large stakers ledger storage +// Caller has to get MBR amounts from ValidatorRegistry to know how much to fund us to cover the box storage cost +// If this is pool 1 AND the validator has specified a reward token, opt-in to that token +// so that the validator can seed the pool with future rewards of that token. +// @param mbrPayment payment from caller which covers mbr increase of new staking pools' storage +initStorage: + proto 1 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 3 + + // contracts/stakingPool.algo.ts:151 + // assert(!this.stakers.exists, 'staking pool already initialized') + byte 0x7374616b657273 // "stakers" + box_len + swap + pop + ! + + // staking pool already initialized + assert + + // contracts/stakingPool.algo.ts:154 + // validatorConfig = sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [this.validatorId.value], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:155 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:156 + // methodArgs: [this.validatorId.value] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + frame_bury 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + + // contracts/stakingPool.algo.ts:158 + // isTokenEligible = validatorConfig.rewardTokenId !== 0 + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 153 8 + btoi + int 0 + != + frame_bury 1 // isTokenEligible: bool + + // contracts/stakingPool.algo.ts:159 + // extraMBR = isTokenEligible && this.poolId.value === 1 ? ASSET_HOLDING_FEE : 0 + frame_dig 1 // isTokenEligible: bool + dup + bz *skip_and0 + byte 0x706f6f6c4964 // "poolId" + app_global_get + int 1 + == + && + +*skip_and0: + bz *ternary0_false + int 100000 + b *ternary0_end + +*ternary0_false: + int 0 + +*ternary0_end: + frame_bury 2 // extraMBR: uint64 + + // contracts/stakingPool.algo.ts:160 + // PoolInitMbr = + // ALGORAND_ACCOUNT_MIN_BALANCE + + // extraMBR + + // this.costForBoxStorage(7 /* 'stakers' name */ + len() * MAX_STAKERS_PER_POOL) + int 100000 + frame_dig 2 // extraMBR: uint64 + + + int 12807 + callsub costForBoxStorage + + + frame_bury 3 // PoolInitMbr: uint64 + + // contracts/stakingPool.algo.ts:166 + // verifyPayTxn(mbrPayment, { receiver: this.app.address, amount: PoolInitMbr }) + // verify receiver + frame_dig -1 // mbrPayment: PayTxn + gtxns Receiver + global CurrentApplicationAddress + == + + // transaction verification failed: {"txn":"mbrPayment","field":"receiver","expected":"this.app.address"} + assert + + // verify amount + frame_dig -1 // mbrPayment: PayTxn + gtxns Amount + frame_dig 3 // PoolInitMbr: uint64 + == + + // transaction verification failed: {"txn":"mbrPayment","field":"amount","expected":"PoolInitMbr"} + assert + + // contracts/stakingPool.algo.ts:167 + // this.stakers.create() + byte 0x7374616b657273 // "stakers" + int 12800 + box_create + pop + + // *if1_condition + // contracts/stakingPool.algo.ts:169 + // isTokenEligible && this.poolId.value === 1 + frame_dig 1 // isTokenEligible: bool + dup + bz *skip_and1 + byte 0x706f6f6c4964 // "poolId" + app_global_get + int 1 + == + && + +*skip_and1: + bz *if1_end + + // *if1_consequent + // contracts/stakingPool.algo.ts:171 + // sendAssetTransfer({ + // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId), + // assetReceiver: this.app.address, + // assetAmount: 0, + // }) + itxn_begin + int axfer + itxn_field TypeEnum + + // contracts/stakingPool.algo.ts:172 + // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId) + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 153 8 + btoi + itxn_field XferAsset + + // contracts/stakingPool.algo.ts:173 + // assetReceiver: this.app.address + global CurrentApplicationAddress + itxn_field AssetReceiver + + // contracts/stakingPool.algo.ts:174 + // assetAmount: 0 + int 0 + itxn_field AssetAmount + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + +*if1_end: + retsub + +// addStake(pay,address)uint64 +*abi_route_addStake: + // The ABI return prefix + byte 0x151f7c75 + + // staker: address + txna ApplicationArgs 1 + dup + len + int 32 + == + + // argument 0 (staker) for addStake must be a address + assert + + // stakedAmountPayment: pay + txn GroupIndex + int 1 + - + dup + gtxns TypeEnum + int pay + == + + // argument 1 (stakedAmountPayment) for addStake must be a pay transaction + assert + + // execute addStake(pay,address)uint64 + callsub addStake + itob + concat + log + int 1 + return + +// addStake(stakedAmountPayment: PayTxn, staker: Address): uint64 +// +// Adds stake to the given account. +// Can ONLY be called by the validator contract that created us +// Must receive payment from the validator contract for amount being staked. +// +// @param {PayTxn} stakedAmountPayment prior payment coming from validator contract to us on behalf of staker. +// @param {Address} staker - The account adding new stake +// @throws {Error} - Throws an error if the staking pool is full. +// @returns {uint64} new 'entry round' round number of stake add +addStake: + proto 2 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 4 + + // contracts/stakingPool.algo.ts:190 + // assert(this.stakers.exists, 'staking pool must be initialized first') + byte 0x7374616b657273 // "stakers" + box_len + swap + pop + + // staking pool must be initialized first + assert + + // contracts/stakingPool.algo.ts:193 + // assert( + // this.txn.sender === this.creatingValidatorContractAppId.value.address, + // 'stake can only be added via the validator contract', + // ) + txn Sender + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + app_params_get AppAddress + pop + == + + // stake can only be added via the validator contract + assert + + // contracts/stakingPool.algo.ts:197 + // assert(staker !== globals.zeroAddress) + frame_dig -2 // staker: Address + global ZeroAddress + != + assert + + // contracts/stakingPool.algo.ts:200 + // this.checkIfBinClosed() + callsub checkIfBinClosed + + // contracts/stakingPool.algo.ts:204 + // verifyPayTxn(stakedAmountPayment, { + // sender: this.creatingValidatorContractAppId.value.address, + // receiver: this.app.address, + // amount: stakedAmountPayment.amount, + // }) + // verify sender + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Sender + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + app_params_get AppAddress + pop + == + + // transaction verification failed: {"txn":"stakedAmountPayment","field":"sender","expected":"this.creatingValidatorContractAppId.value.address"} + assert + + // verify receiver + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Receiver + global CurrentApplicationAddress + == + + // transaction verification failed: {"txn":"stakedAmountPayment","field":"receiver","expected":"this.app.address"} + assert + + // verify amount + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Amount + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Amount + == + + // transaction verification failed: {"txn":"stakedAmountPayment","field":"amount","expected":"stakedAmountPayment.amount"} + assert + + // contracts/stakingPool.algo.ts:213 + // entryRound = globals.round + ALGORAND_STAKING_BLOCK_DELAY + global Round + int 320 + + + frame_bury 0 // entryRound: uint64 + + // contracts/stakingPool.algo.ts:214 + // firstEmpty = 0 + int 0 + frame_bury 1 // firstEmpty: uint64 + + // contracts/stakingPool.algo.ts:216 + // this.totalAlgoStaked.value += stakedAmountPayment.amount + byte 0x7374616b6564 // "staked" + app_global_get + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Amount + + + byte 0x7374616b6564 // "staked" + swap + app_global_put + + // contracts/stakingPool.algo.ts:218 + // roundsLeftInBin = this.binRoundStart.value + this.roundsPerDay.value - globals.round + byte 0x62696e526f756e645374617274 // "binRoundStart" + app_global_get + byte 0x726f756e6473506572446179 // "roundsPerDay" + app_global_get + + + global Round + - + frame_bury 2 // roundsLeftInBin: uint64 + + // contracts/stakingPool.algo.ts:219 + // this.stakeAccumulator.value = + // this.stakeAccumulator.value + (stakedAmountPayment.amount as uint128) * (roundsLeftInBin as uint128) + byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" + dup + app_global_get + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Amount + itob + frame_dig 2 // roundsLeftInBin: uint64 + itob + b* + b+ + dup + bitlen + int 128 + <= + + // this.stakeAccumulator.value + (stakedAmountPayment.amount as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits + assert + byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + b& + dup + len + dup + int 16 + - + swap + substring3 + app_global_put + + // contracts/stakingPool.algo.ts:223 + // for (let i = 0; i < this.stakers.value.length; i += 1) + int 0 + frame_bury 3 // i: uint64 + +*for_0: + // contracts/stakingPool.algo.ts:223 + // i < this.stakers.value.length + frame_dig 3 // i: uint64 + int 200 + < + bz *for_0_end + + // *if2_condition + // contracts/stakingPool.algo.ts:224 + // globals.opcodeBudget < 300 + global OpcodeBudget + int 300 + < + bz *if2_end + + // *if2_consequent + // contracts/stakingPool.algo.ts:225 + // increaseOpcodeBudget() + itxn_begin + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + byte b64 CoEB // #pragma version 10; int 1 + dup + itxn_field ApprovalProgram + itxn_field ClearStateProgram + int DeleteApplication + itxn_field OnCompletion + itxn_submit + +*if2_end: + // contracts/stakingPool.algo.ts:227 + // cmpStaker = clone(this.stakers.value[i]) + frame_dig 3 // i: uint64 + int 64 + * // acc * typeLength + int 64 + byte 0x7374616b657273 // "stakers" + cover 2 + box_extract + frame_bury 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // *if3_condition + // contracts/stakingPool.algo.ts:228 + // cmpStaker.account === staker + frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 0 32 + frame_dig -2 // staker: Address + == + bz *if3_end + + // *if3_consequent + // contracts/stakingPool.algo.ts:230 + // cmpStaker.balance += stakedAmountPayment.amount + frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) + int 32 // headOffset + frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Amount + + + itob + replace3 + frame_bury 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:231 + // cmpStaker.entryRound = entryRound + frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) + int 56 // headOffset + frame_dig 0 // entryRound: uint64 + itob + replace3 + frame_bury 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:234 + // this.stakers.value[i] = cmpStaker + frame_dig 3 // i: uint64 + int 64 + * // acc * typeLength + frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) + byte 0x7374616b657273 // "stakers" + cover 2 + box_replace + + // contracts/stakingPool.algo.ts:236 + // return entryRound + frame_dig 0 // entryRound: uint64 + b *addStake*return + +*if3_end: + // *if4_condition + // contracts/stakingPool.algo.ts:238 + // firstEmpty === 0 && cmpStaker.account === globals.zeroAddress + frame_dig 1 // firstEmpty: uint64 + int 0 + == + dup + bz *skip_and2 + frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 0 32 + global ZeroAddress + == + && + +*skip_and2: + bz *if4_end + + // *if4_consequent + // contracts/stakingPool.algo.ts:239 + // firstEmpty = i + 1 + frame_dig 3 // i: uint64 + int 1 + + + frame_bury 1 // firstEmpty: uint64 + +*if4_end: + +*for_0_continue: + // contracts/stakingPool.algo.ts:223 + // i += 1 + frame_dig 3 // i: uint64 + int 1 + + + frame_bury 3 // i: uint64 + b *for_0 + +*for_0_end: + // *if5_condition + // contracts/stakingPool.algo.ts:243 + // firstEmpty === 0 + frame_dig 1 // firstEmpty: uint64 + int 0 + == + bz *if5_end + + // *if5_consequent + // Staking pool full + err + +*if5_end: + // contracts/stakingPool.algo.ts:250 + // assert(stakedAmountPayment.amount >= this.minEntryStake.value, 'must stake at least the minimum for this pool') + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Amount + byte 0x6d696e456e7472795374616b65 // "minEntryStake" + app_global_get + >= + + // must stake at least the minimum for this pool + assert + + // contracts/stakingPool.algo.ts:252 + // assert(this.stakers.value[firstEmpty - 1].account === globals.zeroAddress) + frame_dig 1 // firstEmpty: uint64 + int 1 + - + int 64 + * // acc * typeLength + int 0 + + + int 32 + byte 0x7374616b657273 // "stakers" + cover 2 + box_extract + global ZeroAddress + == + assert + + // contracts/stakingPool.algo.ts:253 + // this.stakers.value[firstEmpty - 1] = { + // account: staker, + // balance: stakedAmountPayment.amount, + // totalRewarded: 0, + // rewardTokenBalance: 0, + // entryRound: entryRound, + // } + frame_dig 1 // firstEmpty: uint64 + int 1 + - + int 64 + * // acc * typeLength + frame_dig -2 // staker: Address + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Amount + itob + concat + byte 0x0000000000000000 + concat + byte 0x0000000000000000 + concat + frame_dig 0 // entryRound: uint64 + itob + concat + byte 0x7374616b657273 // "stakers" + cover 2 + box_replace + + // contracts/stakingPool.algo.ts:260 + // this.numStakers.value += 1 + byte 0x6e756d5374616b657273 // "numStakers" + app_global_get + int 1 + + + byte 0x6e756d5374616b657273 // "numStakers" + swap + app_global_put + + // contracts/stakingPool.algo.ts:261 + // return entryRound + frame_dig 0 // entryRound: uint64 + +*addStake*return: + // set the subroutine return value + frame_bury 0 + + // pop all local variables from the stack + popn 4 + retsub + +// removeStake(address,uint64)void +*abi_route_removeStake: + // amountToUnstake: uint64 + txna ApplicationArgs 2 + btoi + + // staker: address + txna ApplicationArgs 1 + dup + len + int 32 + == + + // argument 1 (staker) for removeStake must be a address + assert + + // execute removeStake(address,uint64)void + callsub removeStake + int 1 + return + +// removeStake(staker: Address, amountToUnstake: uint64): void +// +// Removes stake on behalf of caller (removing own stake). If any token rewards exist, those are always sent in +// full. Also notifies the validator contract for this pools validator of the staker / balance changes. +// +// @param {Address} staker - account to remove. normally same as sender, but the validator owner or manager can also call +// this to remove the specified staker explicitly. The removed stake MUST only go to the staker of course. This is +// so a validator can shut down a poool and refund the stakers. It can also be used to kick out stakers who no longer +// meet the gating requirements (determined by the node daemon). +// @param {uint64} amountToUnstake - The amount of stake to be removed. Specify 0 to remove all stake. +// @throws {Error} If the account has insufficient balance or if the account is not found. +removeStake: + proto 2 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 6 + + // *if6_condition + // contracts/stakingPool.algo.ts:278 + // staker !== this.txn.sender + frame_dig -1 // staker: Address + txn Sender + != + bz *if6_end + + // *if6_consequent + // contracts/stakingPool.algo.ts:279 + // assert( + // this.isOwnerOrManagerCaller(), + // 'If staker is not sender in removeStake call, then sender MUST be owner or manager of validator', + // ) + callsub isOwnerOrManagerCaller + + // If staker is not sender in removeStake call, then sender MUST be owner or manager of validator + assert + +*if6_end: + // contracts/stakingPool.algo.ts:285 + // this.checkIfBinClosed() + callsub checkIfBinClosed + + // contracts/stakingPool.algo.ts:287 + // for (let i = 0; i < this.stakers.value.length; i += 1) + int 0 + frame_bury 0 // i: uint64 + +*for_1: + // contracts/stakingPool.algo.ts:287 + // i < this.stakers.value.length + frame_dig 0 // i: uint64 + int 200 + < + bz *for_1_end + + // *if7_condition + // contracts/stakingPool.algo.ts:288 + // globals.opcodeBudget < 300 + global OpcodeBudget + int 300 + < + bz *if7_end + + // *if7_consequent + // contracts/stakingPool.algo.ts:289 + // increaseOpcodeBudget() + itxn_begin + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + byte b64 CoEB // #pragma version 10; int 1 + dup + itxn_field ApprovalProgram + itxn_field ClearStateProgram + int DeleteApplication + itxn_field OnCompletion + itxn_submit + +*if7_end: + // contracts/stakingPool.algo.ts:291 + // cmpStaker = clone(this.stakers.value[i]) + frame_dig 0 // i: uint64 + int 64 + * // acc * typeLength + int 64 + byte 0x7374616b657273 // "stakers" + cover 2 + box_extract + frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // *if8_condition + // contracts/stakingPool.algo.ts:292 + // cmpStaker.account === staker + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 0 32 + frame_dig -1 // staker: Address + == + bz *if8_end + + // *if8_consequent + // *if9_condition + // contracts/stakingPool.algo.ts:293 + // amountToUnstake === 0 + frame_dig -2 // amountToUnstake: uint64 + int 0 + == + bz *if9_end + + // *if9_consequent + // contracts/stakingPool.algo.ts:295 + // amountToUnstake = cmpStaker.balance + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + frame_bury -2 // amountToUnstake: uint64 + +*if9_end: + // *if10_condition + // contracts/stakingPool.algo.ts:297 + // cmpStaker.balance < amountToUnstake + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + frame_dig -2 // amountToUnstake: uint64 + < + bz *if10_end + + // *if10_consequent + // Insufficient balance + err + +*if10_end: + // contracts/stakingPool.algo.ts:300 + // cmpStaker.balance -= amountToUnstake + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + int 32 // headOffset + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + frame_dig -2 // amountToUnstake: uint64 + - + itob + replace3 + frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:301 + // this.totalAlgoStaked.value -= amountToUnstake + byte 0x7374616b6564 // "staked" + app_global_get + frame_dig -2 // amountToUnstake: uint64 + - + byte 0x7374616b6564 // "staked" + swap + app_global_put + + // contracts/stakingPool.algo.ts:303 + // amountRewardTokenRemoved = 0 + int 0 + frame_bury 2 // amountRewardTokenRemoved: uint64 + + // *if11_condition + // contracts/stakingPool.algo.ts:304 + // cmpStaker.rewardTokenBalance > 0 + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 48 8 + btoi + int 0 + > + bz *if11_end + + // *if11_consequent + // *if12_condition + // contracts/stakingPool.algo.ts:306 + // this.poolId.value === 1 + byte 0x706f6f6c4964 // "poolId" + app_global_get + int 1 + == + bz *if12_else + + // *if12_consequent + // contracts/stakingPool.algo.ts:307 + // validatorConfig = sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [this.validatorId.value], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:308 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:309 + // methodArgs: [this.validatorId.value] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + frame_bury 3 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + + // contracts/stakingPool.algo.ts:315 + // sendAssetTransfer({ + // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId), + // assetReceiver: staker, + // assetAmount: cmpStaker.rewardTokenBalance, + // }) + itxn_begin + int axfer + itxn_field TypeEnum + + // contracts/stakingPool.algo.ts:316 + // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId) + frame_dig 3 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 153 8 + btoi + itxn_field XferAsset + + // contracts/stakingPool.algo.ts:317 + // assetReceiver: staker + frame_dig -1 // staker: Address + itxn_field AssetReceiver + + // contracts/stakingPool.algo.ts:318 + // assetAmount: cmpStaker.rewardTokenBalance + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 48 8 + btoi + itxn_field AssetAmount + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/stakingPool.algo.ts:320 + // amountRewardTokenRemoved = cmpStaker.rewardTokenBalance + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 48 8 + btoi + frame_bury 2 // amountRewardTokenRemoved: uint64 + + // contracts/stakingPool.algo.ts:321 + // cmpStaker.rewardTokenBalance = 0 + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + byte 0x0000000000000000 + replace2 48 + frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + b *if12_end + +*if12_else: + // contracts/stakingPool.algo.ts:326 + // amountRewardTokenRemoved = cmpStaker.rewardTokenBalance + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 48 8 + btoi + frame_bury 2 // amountRewardTokenRemoved: uint64 + + // contracts/stakingPool.algo.ts:327 + // cmpStaker.rewardTokenBalance = 0 + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + byte 0x0000000000000000 + replace2 48 + frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + +*if12_end: + +*if11_end: + // contracts/stakingPool.algo.ts:332 + // assert( + // cmpStaker.balance === 0 || cmpStaker.balance >= this.minEntryStake.value, + // 'cannot reduce balance below minimum allowed stake unless all is removed', + // ) + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + int 0 + == + dup + bnz *skip_or0 + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + byte 0x6d696e456e7472795374616b65 // "minEntryStake" + app_global_get + >= + || + +*skip_or0: + // cannot reduce balance below minimum allowed stake unless all is removed + assert + + // contracts/stakingPool.algo.ts:340 + // sendPayment({ + // amount: amountToUnstake, + // receiver: staker, + // note: 'unstaked', + // }) + itxn_begin + int pay + itxn_field TypeEnum + + // contracts/stakingPool.algo.ts:341 + // amount: amountToUnstake + frame_dig -2 // amountToUnstake: uint64 + itxn_field Amount + + // contracts/stakingPool.algo.ts:342 + // receiver: staker + frame_dig -1 // staker: Address + itxn_field Receiver + + // contracts/stakingPool.algo.ts:343 + // note: 'unstaked' + byte 0x756e7374616b6564 // "unstaked" + itxn_field Note + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/stakingPool.algo.ts:345 + // stakerRemoved = false + int 0 + frame_bury 4 // stakerRemoved: bool + + // *if13_condition + // contracts/stakingPool.algo.ts:346 + // cmpStaker.balance === 0 + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + int 0 + == + bz *if13_end + + // *if13_consequent + // contracts/stakingPool.algo.ts:348 + // this.numStakers.value -= 1 + byte 0x6e756d5374616b657273 // "numStakers" + app_global_get + int 1 + - + byte 0x6e756d5374616b657273 // "numStakers" + swap + app_global_put + + // contracts/stakingPool.algo.ts:349 + // cmpStaker.account = globals.zeroAddress + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + int 0 + global ZeroAddress + replace3 + frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:350 + // cmpStaker.totalRewarded = 0 + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + byte 0x0000000000000000 + replace2 40 + frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:351 + // cmpStaker.rewardTokenBalance = 0 + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + byte 0x0000000000000000 + replace2 48 + frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:352 + // stakerRemoved = true + int 1 + frame_bury 4 // stakerRemoved: bool + +*if13_end: + // contracts/stakingPool.algo.ts:355 + // this.stakers.value[i] = cmpStaker + frame_dig 0 // i: uint64 + int 64 + * // acc * typeLength + frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) + byte 0x7374616b657273 // "stakers" + cover 2 + box_replace + + // contracts/stakingPool.algo.ts:357 + // roundsLeftInBin = this.binRoundStart.value + this.roundsPerDay.value - globals.round + byte 0x62696e526f756e645374617274 // "binRoundStart" + app_global_get + byte 0x726f756e6473506572446179 // "roundsPerDay" + app_global_get + + + global Round + - + frame_bury 5 // roundsLeftInBin: uint64 + + // contracts/stakingPool.algo.ts:358 + // subtractAmount: uint128 = (amountToUnstake as uint128) * (roundsLeftInBin as uint128) + frame_dig -2 // amountToUnstake: uint64 + itob + frame_dig 5 // roundsLeftInBin: uint64 + itob + b* + dup + bitlen + int 128 + <= + + // (amountToUnstake as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits + assert + byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + b& + dup + len + dup + int 16 + - + swap + substring3 + frame_bury 6 // subtractAmount: uint128 + + // contracts/stakingPool.algo.ts:359 + // this.stakeAccumulator.value = this.stakeAccumulator.value - subtractAmount + byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" + dup + app_global_get + frame_dig 6 // subtractAmount: uint128 + b- + dup + bitlen + int 128 + <= + + // this.stakeAccumulator.value - subtractAmount overflowed 128 bits + assert + byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + b& + dup + len + dup + int 16 + - + swap + substring3 + app_global_put + + // contracts/stakingPool.algo.ts:364 + // sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [ + // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, + // staker, + // amountToUnstake, + // amountRewardTokenRemoved, + // stakerRemoved, + // ], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:365 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:366 + // methodArgs: [ + // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, + // staker, + // amountToUnstake, + // amountRewardTokenRemoved, + // stakerRemoved, + // ] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + byte 0x706f6f6c4964 // "poolId" + app_global_get + itob + concat + txna Applications 0 + itob + concat + itxn_field ApplicationArgs + frame_dig -1 // staker: Address + itxn_field ApplicationArgs + frame_dig -2 // amountToUnstake: uint64 + itob + itxn_field ApplicationArgs + frame_dig 2 // amountRewardTokenRemoved: uint64 + itob + itxn_field ApplicationArgs + frame_dig 4 // stakerRemoved: bool + byte 0x00 + int 0 + uncover 2 + setbit + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/stakingPool.algo.ts:374 + // return + retsub + +*if8_end: + +*for_1_continue: + // contracts/stakingPool.algo.ts:287 + // i += 1 + frame_dig 0 // i: uint64 + int 1 + + + frame_bury 0 // i: uint64 + b *for_1 + +*for_1_end: + // account not found + err + retsub + +// claimTokens()void +*abi_route_claimTokens: + // execute claimTokens()void + callsub claimTokens + int 1 + return + +// claimTokens(): void +// +// Claims all the available reward tokens a staker has available, sending their entire balance to the staker from +// pool 1 (either directly, or via validator->pool1 to pay it out) +// Also notifies the validator contract for this pools validator of the staker / balance changes. +claimTokens: + proto 0 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 4 + + // contracts/stakingPool.algo.ts:389 + // staker = this.txn.sender + txn Sender + frame_bury 0 // staker: address + + // contracts/stakingPool.algo.ts:391 + // for (let i = 0; i < this.stakers.value.length; i += 1) + int 0 + frame_bury 1 // i: uint64 + +*for_2: + // contracts/stakingPool.algo.ts:391 + // i < this.stakers.value.length + frame_dig 1 // i: uint64 + int 200 + < + bz *for_2_end + + // *if14_condition + // contracts/stakingPool.algo.ts:392 + // globals.opcodeBudget < 300 + global OpcodeBudget + int 300 + < + bz *if14_end + + // *if14_consequent + // contracts/stakingPool.algo.ts:393 + // increaseOpcodeBudget() + itxn_begin + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + byte b64 CoEB // #pragma version 10; int 1 + dup + itxn_field ApprovalProgram + itxn_field ClearStateProgram + int DeleteApplication + itxn_field OnCompletion + itxn_submit + +*if14_end: + // contracts/stakingPool.algo.ts:395 + // cmpStaker = clone(this.stakers.value[i]) + frame_dig 1 // i: uint64 + int 64 + * // acc * typeLength + int 64 + byte 0x7374616b657273 // "stakers" + cover 2 + box_extract + frame_bury 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // *if15_condition + // contracts/stakingPool.algo.ts:396 + // cmpStaker.account === staker + frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 0 32 + frame_dig 0 // staker: address + == + bz *if15_end + + // *if15_consequent + // *if16_condition + // contracts/stakingPool.algo.ts:397 + // cmpStaker.rewardTokenBalance === 0 + frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 48 8 + btoi + int 0 + == + bz *if16_end + + // *if16_consequent + // contracts/stakingPool.algo.ts:398 + // return + retsub + +*if16_end: + // contracts/stakingPool.algo.ts:400 + // amountRewardTokenRemoved = 0 + int 0 + frame_bury 3 // amountRewardTokenRemoved: uint64 + + // *if17_condition + // contracts/stakingPool.algo.ts:402 + // this.poolId.value === 1 + byte 0x706f6f6c4964 // "poolId" + app_global_get + int 1 + == + bz *if17_else + + // *if17_consequent + // contracts/stakingPool.algo.ts:403 + // validatorConfig = sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [this.validatorId.value], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:404 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:405 + // methodArgs: [this.validatorId.value] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + frame_bury 4 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + + // contracts/stakingPool.algo.ts:410 + // sendAssetTransfer({ + // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId), + // assetReceiver: staker, + // assetAmount: cmpStaker.rewardTokenBalance, + // }) + itxn_begin + int axfer + itxn_field TypeEnum + + // contracts/stakingPool.algo.ts:411 + // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId) + frame_dig 4 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 153 8 + btoi + itxn_field XferAsset + + // contracts/stakingPool.algo.ts:412 + // assetReceiver: staker + frame_dig 0 // staker: address + itxn_field AssetReceiver + + // contracts/stakingPool.algo.ts:413 + // assetAmount: cmpStaker.rewardTokenBalance + frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 48 8 + btoi + itxn_field AssetAmount + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/stakingPool.algo.ts:415 + // amountRewardTokenRemoved = cmpStaker.rewardTokenBalance + frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 48 8 + btoi + frame_bury 3 // amountRewardTokenRemoved: uint64 + + // contracts/stakingPool.algo.ts:416 + // cmpStaker.rewardTokenBalance = 0 + frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) + byte 0x0000000000000000 + replace2 48 + frame_bury 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) + b *if17_end + +*if17_else: + // contracts/stakingPool.algo.ts:421 + // amountRewardTokenRemoved = cmpStaker.rewardTokenBalance + frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 48 8 + btoi + frame_bury 3 // amountRewardTokenRemoved: uint64 + + // contracts/stakingPool.algo.ts:422 + // cmpStaker.rewardTokenBalance = 0 + frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) + byte 0x0000000000000000 + replace2 48 + frame_bury 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) + +*if17_end: + // contracts/stakingPool.algo.ts:426 + // this.stakers.value[i] = cmpStaker + frame_dig 1 // i: uint64 + int 64 + * // acc * typeLength + frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) + byte 0x7374616b657273 // "stakers" + cover 2 + box_replace + + // contracts/stakingPool.algo.ts:431 + // sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [ + // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, + // staker, + // 0, // no algo removed + // amountRewardTokenRemoved, + // false, // staker isn't being removed. + // ], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:432 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:433 + // methodArgs: [ + // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, + // staker, + // 0, // no algo removed + // amountRewardTokenRemoved, + // false, // staker isn't being removed. + // ] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + byte 0x706f6f6c4964 // "poolId" + app_global_get + itob + concat + txna Applications 0 + itob + concat + itxn_field ApplicationArgs + frame_dig 0 // staker: address + itxn_field ApplicationArgs + byte 0x0000000000000000 + itxn_field ApplicationArgs + frame_dig 3 // amountRewardTokenRemoved: uint64 + itob + itxn_field ApplicationArgs + int 0 + byte 0x00 + int 0 + uncover 2 + setbit + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/stakingPool.algo.ts:441 + // return + retsub + +*if15_end: + +*for_2_continue: + // contracts/stakingPool.algo.ts:391 + // i += 1 + frame_dig 1 // i: uint64 + int 1 + + + frame_bury 1 // i: uint64 + b *for_2 + +*for_2_end: + // account not found + err + retsub + +// getStakerInfo(address)(address,uint64,uint64,uint64,uint64) +*abi_route_getStakerInfo: + // The ABI return prefix + byte 0x151f7c75 + + // staker: address + txna ApplicationArgs 1 + dup + len + int 32 + == + + // argument 0 (staker) for getStakerInfo must be a address + assert + + // execute getStakerInfo(address)(address,uint64,uint64,uint64,uint64) + callsub getStakerInfo + concat + log + int 1 + return + +// getStakerInfo(staker: Address): StakedInfo +// +// Retrieves the staked information for a given staker. +// +// @param {Address} staker - The address of the staker. +// @returns {StakedInfo} - The staked information for the given staker. +// @throws {Error} - If the staker's account is not found. +getStakerInfo: + proto 1 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // contracts/stakingPool.algo.ts:456 + // for (let i = 0; i < this.stakers.value.length; i += 1) + int 0 + frame_bury 0 // i: uint64 + +*for_3: + // contracts/stakingPool.algo.ts:456 + // i < this.stakers.value.length + frame_dig 0 // i: uint64 + int 200 + < + bz *for_3_end + + // *if18_condition + // contracts/stakingPool.algo.ts:457 + // globals.opcodeBudget < 200 + global OpcodeBudget + int 200 + < + bz *if18_end + + // *if18_consequent + // contracts/stakingPool.algo.ts:458 + // increaseOpcodeBudget() + itxn_begin + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + byte b64 CoEB // #pragma version 10; int 1 + dup + itxn_field ApprovalProgram + itxn_field ClearStateProgram + int DeleteApplication + itxn_field OnCompletion + itxn_submit + +*if18_end: + // *if19_condition + // contracts/stakingPool.algo.ts:460 + // this.stakers.value[i].account === staker + frame_dig 0 // i: uint64 + int 64 + * // acc * typeLength + int 0 + + + int 32 + byte 0x7374616b657273 // "stakers" + cover 2 + box_extract + frame_dig -1 // staker: Address + == + bz *if19_end + + // *if19_consequent + // contracts/stakingPool.algo.ts:461 + // return this.stakers.value[i] + frame_dig 0 // i: uint64 + int 64 + * // acc * typeLength + int 64 + byte 0x7374616b657273 // "stakers" + cover 2 + box_extract + b *getStakerInfo*return + +*if19_end: + +*for_3_continue: + // contracts/stakingPool.algo.ts:456 + // i += 1 + frame_dig 0 // i: uint64 + int 1 + + + frame_bury 0 // i: uint64 + b *for_3 + +*for_3_end: + // account not found + err + +*getStakerInfo*return: + // set the subroutine return value + frame_bury 0 + retsub + +// payTokenReward(address,uint64,uint64)void +*abi_route_payTokenReward: + // amountToSend: uint64 + txna ApplicationArgs 3 + btoi + + // rewardToken: uint64 + txna ApplicationArgs 2 + btoi + + // staker: address + txna ApplicationArgs 1 + dup + len + int 32 + == + + // argument 2 (staker) for payTokenReward must be a address + assert + + // execute payTokenReward(address,uint64,uint64)void + callsub payTokenReward + int 1 + return + +// payTokenReward(staker: Address, rewardToken: uint64, amountToSend: uint64): void +// +// [Internal protocol method] Remove a specified amount of 'community token' rewards for a staker. +// This can ONLY be called by our validator and only if we're pool 1 - with the token. +// Note: this can also be called by validator as part of OWNER wanting to send the reward tokens +// somewhere else (ie if they're sunsetting their validator and need the reward tokens back). +// It's up to the validator to ensure that the balance in rewardTokenHeldBack is honored. +// @param staker - the staker account to send rewards to +// @param rewardToken - id of reward token (to avoid re-entrancy in calling validator back to get id) +// @param amountToSend - amount to send the staker (there is significant trust here(!) - also why only validator can call us +payTokenReward: + proto 3 0 + + // contracts/stakingPool.algo.ts:479 + // assert( + // this.txn.sender === this.creatingValidatorContractAppId.value.address, + // 'this can only be called via the validator contract', + // ) + txn Sender + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + app_params_get AppAddress + pop + == + + // this can only be called via the validator contract + assert + + // contracts/stakingPool.algo.ts:483 + // assert(this.poolId.value === 1, 'must be pool 1 in order to be called to pay out token rewards') + byte 0x706f6f6c4964 // "poolId" + app_global_get + int 1 + == + + // must be pool 1 in order to be called to pay out token rewards + assert + + // contracts/stakingPool.algo.ts:484 + // assert(rewardToken !== 0, 'can only claim token rewards from validator that has them') + frame_dig -2 // rewardToken: uint64 + int 0 + != + + // can only claim token rewards from validator that has them + assert + + // contracts/stakingPool.algo.ts:487 + // sendAssetTransfer({ + // xferAsset: AssetID.fromUint64(rewardToken), + // assetReceiver: staker, + // assetAmount: amountToSend, + // }) + itxn_begin + int axfer + itxn_field TypeEnum + + // contracts/stakingPool.algo.ts:488 + // xferAsset: AssetID.fromUint64(rewardToken) + frame_dig -2 // rewardToken: uint64 + itxn_field XferAsset + + // contracts/stakingPool.algo.ts:489 + // assetReceiver: staker + frame_dig -1 // staker: Address + itxn_field AssetReceiver + + // contracts/stakingPool.algo.ts:490 + // assetAmount: amountToSend + frame_dig -3 // amountToSend: uint64 + itxn_field AssetAmount + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + retsub + +// updateAlgodVer(string)void +*abi_route_updateAlgodVer: + // algodVer: string + txna ApplicationArgs 1 + extract 2 0 + + // execute updateAlgodVer(string)void + callsub updateAlgodVer + int 1 + return + +// updateAlgodVer(algodVer: string): void +// +// Update the (honor system) algod version for the node associated to this pool. The node management daemon +// should compare its current nodes version to the version stored in global state, updating when different. +// The reti node daemon composes its own version string using format: +// {major}.{minor}.{build} {branch} [{commit hash}], +// ie: 3.22.0 rel/stable [6b508975] +// [ ONLY OWNER OR MANAGER CAN CALL ] +// @param {string} algodVer - string representing the algorand node daemon version (reti node daemon composes its own meta version) +updateAlgodVer: + proto 1 0 + + // contracts/stakingPool.algo.ts:504 + // assert(this.isOwnerOrManagerCaller(), 'can only be called by owner or manager of validator') + callsub isOwnerOrManagerCaller + + // can only be called by owner or manager of validator + assert + + // contracts/stakingPool.algo.ts:505 + // this.algodVer.value = algodVer + byte 0x616c676f64566572 // "algodVer" + frame_dig -1 // algodVer: string + app_global_put + retsub + +// epochBalanceUpdate()void +*abi_route_epochBalanceUpdate: + // execute epochBalanceUpdate()void + callsub epochBalanceUpdate + int 1 + return + +// epochBalanceUpdate(): void +// +// Updates the balance of stakers in the pool based on the received 'rewards' (current balance vs known staked balance) +// stakers outstanding balance is adjusted based on their % of stake and time in the current epoch - so that balance +// compounds over time and staker can remove that amount at will. +// The validator is paid their percentage each epoch payout. +// +// Note: ANYONE can call this. +epochBalanceUpdate: + proto 0 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 37 + + // contracts/stakingPool.algo.ts:518 + // validatorConfig = sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [this.validatorId.value], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:519 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:520 + // methodArgs: [this.validatorId.value] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + frame_bury 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + + // contracts/stakingPool.algo.ts:527 + // epochRoundLength = validatorConfig.epochRoundLength as uint64 + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 169 4 + btoi + frame_bury 1 // epochRoundLength: uint64 + + // contracts/stakingPool.algo.ts:528 + // curRound = globals.round + global Round + frame_bury 2 // curRound: uint64 + + // contracts/stakingPool.algo.ts:529 + // thisEpochBegin = curRound - (curRound % epochRoundLength) + frame_dig 2 // curRound: uint64 + frame_dig 2 // curRound: uint64 + frame_dig 1 // epochRoundLength: uint64 + % + - + frame_bury 3 // thisEpochBegin: uint64 + + // *if20_condition + // contracts/stakingPool.algo.ts:532 + // this.lastPayout.exists + txna Applications 0 + byte 0x6c6173745061796f7574 // "lastPayout" + app_global_get_ex + swap + pop + bz *if20_end + + // *if20_consequent + // contracts/stakingPool.algo.ts:533 + // lastPayoutEpoch = this.lastPayout.value - (this.lastPayout.value % epochRoundLength) + byte 0x6c6173745061796f7574 // "lastPayout" + app_global_get + byte 0x6c6173745061796f7574 // "lastPayout" + app_global_get + frame_dig 1 // epochRoundLength: uint64 + % + - + frame_bury 4 // lastPayoutEpoch: uint64 + + // contracts/stakingPool.algo.ts:537 + // assert(lastPayoutEpoch !== thisEpochBegin, "can't call epochBalanceUpdate in same epoch as prior call") + frame_dig 4 // lastPayoutEpoch: uint64 + frame_dig 3 // thisEpochBegin: uint64 + != + + // can't call epochBalanceUpdate in same epoch as prior call + assert + +*if20_end: + // contracts/stakingPool.algo.ts:540 + // this.checkIfBinClosed() + callsub checkIfBinClosed + + // contracts/stakingPool.algo.ts:543 + // this.lastPayout.value = curRound + byte 0x6c6173745061796f7574 // "lastPayout" + frame_dig 2 // curRound: uint64 + app_global_put + + // contracts/stakingPool.algo.ts:544 + // this.epochNumber.value += 1 + byte 0x65706f63684e756d626572 // "epochNumber" + app_global_get + int 1 + + + byte 0x65706f63684e756d626572 // "epochNumber" + swap + app_global_put + + // contracts/stakingPool.algo.ts:549 + // isTokenEligible = validatorConfig.rewardTokenId !== 0 + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 153 8 + btoi + int 0 + != + frame_bury 5 // isTokenEligible: bool + + // contracts/stakingPool.algo.ts:550 + // poolOneAppID = this.app.id + txna Applications 0 + frame_bury 6 // poolOneAppID: uint64 + + // contracts/stakingPool.algo.ts:551 + // poolOneAddress = this.app.address + global CurrentApplicationAddress + frame_bury 7 // poolOneAddress: address + + // *if21_condition + // contracts/stakingPool.algo.ts:556 + // isTokenEligible + frame_dig 5 // isTokenEligible: bool + bz *if21_end + + // *if21_consequent + // *if22_condition + // contracts/stakingPool.algo.ts:557 + // this.poolId.value !== 1 + byte 0x706f6f6c4964 // "poolId" + app_global_get + int 1 + != + bz *if22_end + + // *if22_consequent + // contracts/stakingPool.algo.ts:559 + // poolOneAppID = sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [this.validatorId.value, 1], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "getPoolAppId(uint64,uint64)uint64" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:560 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:561 + // methodArgs: [this.validatorId.value, 1] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + itxn_field ApplicationArgs + byte 0x0000000000000001 + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + btoi + frame_bury 6 // poolOneAppID: uint64 + + // contracts/stakingPool.algo.ts:563 + // poolOneAddress = AppID.fromUint64(poolOneAppID).address + frame_dig 6 // poolOneAppID: uint64 + app_params_get AppAddress + pop + frame_bury 7 // poolOneAddress: address + +*if22_end: + // *if23_condition + // contracts/stakingPool.algo.ts:568 + // this.poolId.value === 1 + byte 0x706f6f6c4964 // "poolId" + app_global_get + int 1 + == + bz *if23_else + + // *if23_consequent + // contracts/stakingPool.algo.ts:569 + // tokenPayoutRatio = sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [this.validatorId.value], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "setTokenPayoutRatio(uint64)(uint64[24],uint64)" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:570 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:571 + // methodArgs: [this.validatorId.value] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + frame_bury 8 // tokenPayoutRatio: PoolTokenPayoutRatio + b *if23_end + +*if23_else: + // contracts/stakingPool.algo.ts:575 + // tokenPayoutRatio = sendMethodCall({ + // applicationID: AppID.fromUint64(poolOneAppID), + // methodArgs: [{ id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "proxiedSetTokenPayoutRatio((uint64,uint64,uint64))(uint64[24],uint64)" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:576 + // applicationID: AppID.fromUint64(poolOneAppID) + frame_dig 6 // poolOneAppID: uint64 + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:577 + // methodArgs: [{ id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + byte 0x706f6f6c4964 // "poolId" + app_global_get + itob + concat + txna Applications 0 + itob + concat + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + frame_bury 8 // tokenPayoutRatio: PoolTokenPayoutRatio + +*if23_end: + +*if21_end: + // contracts/stakingPool.algo.ts:584 + // validatorState = sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [this.validatorId.value], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "getValidatorState(uint64)(uint16,uint64,uint64,uint64)" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:585 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:586 + // methodArgs: [this.validatorId.value] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + frame_bury 9 // validatorState: (uint16,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:588 + // rewardTokenHeldBack = validatorState.rewardTokenHeldBack + frame_dig 9 // validatorState: (uint16,uint64,uint64,uint64) + extract 18 8 + btoi + frame_bury 10 // rewardTokenHeldBack: uint64 + + // contracts/stakingPool.algo.ts:594 + // algoRewardAvail = this.app.address.balance - this.totalAlgoStaked.value - this.app.address.minBalance + global CurrentApplicationAddress + acct_params_get AcctBalance + pop + byte 0x7374616b6564 // "staked" + app_global_get + - + global CurrentApplicationAddress + acct_params_get AcctMinBalance + pop + - + frame_bury 11 // algoRewardAvail: uint64 + + // contracts/stakingPool.algo.ts:595 + // isPoolSaturated = false + int 0 + frame_bury 12 // isPoolSaturated: bool + + // contracts/stakingPool.algo.ts:596 + // algoSaturationAmt = this.algoSaturationLevel() + callsub algoSaturationLevel + frame_bury 13 // algoSaturationAmt: uint64 + + // *if24_condition + // contracts/stakingPool.algo.ts:604 + // validatorState.totalAlgoStaked > algoSaturationAmt + frame_dig 9 // validatorState: (uint16,uint64,uint64,uint64) + extract 10 8 + btoi + frame_dig 13 // algoSaturationAmt: uint64 + > + bz *if24_end + + // *if24_consequent + // contracts/stakingPool.algo.ts:605 + // isPoolSaturated = true + int 1 + frame_bury 12 // isPoolSaturated: bool + +*if24_end: + // contracts/stakingPool.algo.ts:611 + // tokenRewardAvail = 0 + int 0 + frame_bury 14 // tokenRewardAvail: uint64 + + // contracts/stakingPool.algo.ts:612 + // tokenRewardPaidOut = 0 + int 0 + frame_bury 15 // tokenRewardPaidOut: uint64 + + // contracts/stakingPool.algo.ts:613 + // validatorCommissionPaidOut = 0 + int 0 + frame_bury 16 // validatorCommissionPaidOut: uint64 + + // contracts/stakingPool.algo.ts:614 + // excessToFeeSink = 0 + int 0 + frame_bury 17 // excessToFeeSink: uint64 + + // *if25_condition + // contracts/stakingPool.algo.ts:615 + // isTokenEligible + frame_dig 5 // isTokenEligible: bool + bz *if25_end + + // *if25_consequent + // contracts/stakingPool.algo.ts:616 + // tokenRewardBal = + // poolOneAddress.assetBalance(AssetID.fromUint64(validatorConfig.rewardTokenId)) - rewardTokenHeldBack + frame_dig 7 // poolOneAddress: address + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 153 8 + btoi + asset_holding_get AssetBalance + pop + frame_dig 10 // rewardTokenHeldBack: uint64 + - + frame_bury 18 // tokenRewardBal: uint64 + + // *if26_condition + // contracts/stakingPool.algo.ts:621 + // tokenRewardBal >= validatorConfig.rewardPerPayout + frame_dig 18 // tokenRewardBal: uint64 + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 161 8 + btoi + >= + bz *if26_end + + // *if26_consequent + // contracts/stakingPool.algo.ts:627 + // ourPoolPctOfWhole = tokenPayoutRatio.poolPctOfWhole[this.poolId.value - 1] + frame_dig 8 // tokenPayoutRatio: PoolTokenPayoutRatio + int 0 + byte 0x706f6f6c4964 // "poolId" + app_global_get + int 1 + - + int 8 + * // acc * typeLength + + + int 8 + extract3 + btoi + frame_bury 19 // ourPoolPctOfWhole: uint64 + + // contracts/stakingPool.algo.ts:630 + // tokenRewardAvail = wideRatio([validatorConfig.rewardPerPayout, ourPoolPctOfWhole], [1_000_000]) + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 161 8 + btoi + frame_dig 19 // ourPoolPctOfWhole: uint64 + mulw + int 0 + int 1_000_000 + divmodw + pop + pop + swap + ! + + // wideRatio failed + assert + frame_bury 14 // tokenRewardAvail: uint64 + +*if26_end: + +*if25_end: + // *if27_condition + // contracts/stakingPool.algo.ts:633 + // tokenRewardAvail === 0 + frame_dig 14 // tokenRewardAvail: uint64 + int 0 + == + bz *if27_end + + // *if27_consequent + // *if28_condition + // contracts/stakingPool.algo.ts:638 + // algoRewardAvail < 1_000_000 + frame_dig 11 // algoRewardAvail: uint64 + int 1_000_000 + < + bz *if28_end + + // *if28_consequent + // contracts/stakingPool.algo.ts:639 + // log('!token&&!noalgo to pay') + byte 0x21746f6b656e2626216e6f616c676f20746f20706179 // "!token&&!noalgo to pay" + log + + // contracts/stakingPool.algo.ts:640 + // return + retsub + +*if28_end: + +*if27_end: + // *if29_condition + // contracts/stakingPool.algo.ts:644 + // isPoolSaturated + frame_dig 12 // isPoolSaturated: bool + bz *if29_elseif1_condition + + // *if29_consequent + // contracts/stakingPool.algo.ts:647 + // diminishedReward = wideRatio([algoRewardAvail, algoSaturationAmt], [validatorState.totalAlgoStaked]) + frame_dig 11 // algoRewardAvail: uint64 + frame_dig 13 // algoSaturationAmt: uint64 + mulw + int 0 + frame_dig 9 // validatorState: (uint16,uint64,uint64,uint64) + extract 10 8 + btoi + divmodw + pop + pop + swap + ! + + // wideRatio failed + assert + frame_bury 20 // diminishedReward: uint64 + + // contracts/stakingPool.algo.ts:649 + // excessToFeeSink = algoRewardAvail - diminishedReward + frame_dig 11 // algoRewardAvail: uint64 + frame_dig 20 // diminishedReward: uint64 + - + frame_bury 17 // excessToFeeSink: uint64 + + // contracts/stakingPool.algo.ts:650 + // sendPayment({ + // amount: excessToFeeSink, + // receiver: this.getFeeSink(), + // note: 'pool saturated, excess to fee sink', + // }) + itxn_begin + int pay + itxn_field TypeEnum + + // contracts/stakingPool.algo.ts:651 + // amount: excessToFeeSink + frame_dig 17 // excessToFeeSink: uint64 + itxn_field Amount + + // contracts/stakingPool.algo.ts:652 + // receiver: this.getFeeSink() + callsub getFeeSink + itxn_field Receiver + + // contracts/stakingPool.algo.ts:653 + // note: 'pool saturated, excess to fee sink' + byte 0x706f6f6c207361747572617465642c2065786365737320746f206665652073696e6b // "pool saturated, excess to fee sink" + itxn_field Note + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/stakingPool.algo.ts:656 + // algoRewardAvail = diminishedReward + frame_dig 20 // diminishedReward: uint64 + frame_bury 11 // algoRewardAvail: uint64 + b *if29_end + +*if29_elseif1_condition: + // contracts/stakingPool.algo.ts:657 + // validatorConfig.percentToValidator !== 0 + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 173 4 + btoi + int 0 + != + bz *if29_end + + // *if29_elseif1_consequent + // contracts/stakingPool.algo.ts:660 + // validatorCommissionPaidOut = wideRatio( + // [algoRewardAvail, validatorConfig.percentToValidator as uint64], + // [1_000_000], + // ) + frame_dig 11 // algoRewardAvail: uint64 + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 173 4 + btoi + mulw + int 0 + int 1_000_000 + divmodw + pop + pop + swap + ! + + // wideRatio failed + assert + frame_bury 16 // validatorCommissionPaidOut: uint64 + + // contracts/stakingPool.algo.ts:666 + // algoRewardAvail -= validatorCommissionPaidOut + frame_dig 11 // algoRewardAvail: uint64 + frame_dig 16 // validatorCommissionPaidOut: uint64 + - + frame_bury 11 // algoRewardAvail: uint64 + + // *if30_condition + // contracts/stakingPool.algo.ts:673 + // validatorCommissionPaidOut > 0 + frame_dig 16 // validatorCommissionPaidOut: uint64 + int 0 + > + bz *if30_end + + // *if30_consequent + // contracts/stakingPool.algo.ts:676 + // managerTopOff = 0 + int 0 + frame_bury 21 // managerTopOff: uint64 + + // *if31_condition + // contracts/stakingPool.algo.ts:678 + // validatorConfig.manager !== validatorConfig.validatorCommissionAddress && + // validatorConfig.manager.balance - validatorConfig.manager.minBalance < 2_100_000 + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 40 32 + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 177 32 + != + dup + bz *skip_and3 + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 40 32 + acct_params_get AcctBalance + pop + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 40 32 + acct_params_get AcctMinBalance + pop + - + int 2_100_000 + < + && + +*skip_and3: + bz *if31_end + + // *if31_consequent + // contracts/stakingPool.algo.ts:681 + // managerTopOff = validatorCommissionPaidOut < 2_100_000 ? validatorCommissionPaidOut : 2_100_000 + frame_dig 16 // validatorCommissionPaidOut: uint64 + int 2_100_000 + < + bz *ternary1_false + frame_dig 16 // validatorCommissionPaidOut: uint64 + b *ternary1_end + +*ternary1_false: + int 2_100_000 + +*ternary1_end: + frame_bury 21 // managerTopOff: uint64 + + // contracts/stakingPool.algo.ts:682 + // sendPayment({ + // amount: managerTopOff, + // receiver: validatorConfig.manager, + // note: 'validator reward to manager for funding epoch updates', + // }) + itxn_begin + int pay + itxn_field TypeEnum + + // contracts/stakingPool.algo.ts:683 + // amount: managerTopOff + frame_dig 21 // managerTopOff: uint64 + itxn_field Amount + + // contracts/stakingPool.algo.ts:684 + // receiver: validatorConfig.manager + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 40 32 + itxn_field Receiver + + // contracts/stakingPool.algo.ts:685 + // note: 'validator reward to manager for funding epoch updates' + byte 0x76616c696461746f722072657761726420746f206d616e6167657220666f722066756e64696e672065706f63682075706461746573 // "validator reward to manager for funding epoch updates" + itxn_field Note + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + +*if31_end: + // *if32_condition + // contracts/stakingPool.algo.ts:688 + // validatorCommissionPaidOut - managerTopOff > 0 + frame_dig 16 // validatorCommissionPaidOut: uint64 + frame_dig 21 // managerTopOff: uint64 + - + int 0 + > + bz *if32_end + + // *if32_consequent + // contracts/stakingPool.algo.ts:689 + // sendPayment({ + // amount: validatorCommissionPaidOut - managerTopOff, + // receiver: validatorConfig.validatorCommissionAddress, + // note: 'validator reward', + // }) + itxn_begin + int pay + itxn_field TypeEnum + + // contracts/stakingPool.algo.ts:690 + // amount: validatorCommissionPaidOut - managerTopOff + frame_dig 16 // validatorCommissionPaidOut: uint64 + frame_dig 21 // managerTopOff: uint64 + - + itxn_field Amount + + // contracts/stakingPool.algo.ts:691 + // receiver: validatorConfig.validatorCommissionAddress + frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 177 32 + itxn_field Receiver + + // contracts/stakingPool.algo.ts:692 + // note: 'validator reward' + byte 0x76616c696461746f7220726577617264 // "validator reward" + itxn_field Note + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + +*if32_end: + +*if30_end: + +*if29_end: + // contracts/stakingPool.algo.ts:704 + // increasedStake = 0 + int 0 + frame_bury 22 // increasedStake: uint64 + + // *if33_condition + // contracts/stakingPool.algo.ts:728 + // algoRewardAvail !== 0 || tokenRewardAvail !== 0 + frame_dig 11 // algoRewardAvail: uint64 + int 0 + != + dup + bnz *skip_or1 + frame_dig 14 // tokenRewardAvail: uint64 + int 0 + != + || + +*skip_or1: + bz *if33_end + + // *if33_consequent + // contracts/stakingPool.algo.ts:729 + // partialStakersTotalStake: uint64 = 0 + int 0 + frame_bury 23 // partialStakersTotalStake: uint64 + + // contracts/stakingPool.algo.ts:730 + // origAlgoReward = algoRewardAvail + frame_dig 11 // algoRewardAvail: uint64 + frame_bury 24 // origAlgoReward: uint64 + + // contracts/stakingPool.algo.ts:731 + // for (let i = 0; i < this.stakers.value.length; i += 1) + int 0 + frame_bury 25 // i: uint64 + +*for_4: + // contracts/stakingPool.algo.ts:731 + // i < this.stakers.value.length + frame_dig 25 // i: uint64 + int 200 + < + bz *for_4_end + + // *if34_condition + // contracts/stakingPool.algo.ts:732 + // globals.opcodeBudget < 400 + global OpcodeBudget + int 400 + < + bz *if34_end + + // *if34_consequent + // contracts/stakingPool.algo.ts:733 + // increaseOpcodeBudget() + itxn_begin + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + byte b64 CoEB // #pragma version 10; int 1 + dup + itxn_field ApprovalProgram + itxn_field ClearStateProgram + int DeleteApplication + itxn_field OnCompletion + itxn_submit + +*if34_end: + // contracts/stakingPool.algo.ts:735 + // cmpStaker = clone(this.stakers.value[i]) + frame_dig 25 // i: uint64 + int 64 + * // acc * typeLength + int 64 + byte 0x7374616b657273 // "stakers" + cover 2 + box_extract + frame_bury 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // *if35_condition + // contracts/stakingPool.algo.ts:736 + // cmpStaker.account !== globals.zeroAddress + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 0 32 + global ZeroAddress + != + bz *if35_end + + // *if35_consequent + // *if36_condition + // contracts/stakingPool.algo.ts:737 + // cmpStaker.entryRound >= thisEpochBegin + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 56 8 + btoi + frame_dig 3 // thisEpochBegin: uint64 + >= + bz *if36_else + + // *if36_consequent + // contracts/stakingPool.algo.ts:740 + // partialStakersTotalStake += cmpStaker.balance + frame_dig 23 // partialStakersTotalStake: uint64 + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + + + frame_bury 23 // partialStakersTotalStake: uint64 + b *if36_end + +*if36_else: + // contracts/stakingPool.algo.ts:744 + // timeInPool = thisEpochBegin - cmpStaker.entryRound + frame_dig 3 // thisEpochBegin: uint64 + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 56 8 + btoi + - + frame_bury 27 // timeInPool: uint64 + + // *if37_condition + // contracts/stakingPool.algo.ts:748 + // timeInPool < epochRoundLength + frame_dig 27 // timeInPool: uint64 + frame_dig 1 // epochRoundLength: uint64 + < + bz *if37_end + + // *if37_consequent + // contracts/stakingPool.algo.ts:749 + // partialStakersTotalStake += cmpStaker.balance + frame_dig 23 // partialStakersTotalStake: uint64 + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + + + frame_bury 23 // partialStakersTotalStake: uint64 + + // contracts/stakingPool.algo.ts:750 + // timePercentage = (timeInPool * 1000) / epochRoundLength + frame_dig 27 // timeInPool: uint64 + int 1000 + * + frame_dig 1 // epochRoundLength: uint64 + / + frame_bury 28 // timePercentage: uint64 + + // *if38_condition + // contracts/stakingPool.algo.ts:752 + // tokenRewardAvail > 0 + frame_dig 14 // tokenRewardAvail: uint64 + int 0 + > + bz *if38_end + + // *if38_consequent + // contracts/stakingPool.algo.ts:754 + // stakerTokenReward = wideRatio( + // [cmpStaker.balance, tokenRewardAvail, timePercentage], + // [this.totalAlgoStaked.value, 1000], + // ) + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + frame_dig 14 // tokenRewardAvail: uint64 + mulw + frame_dig 28 // timePercentage: uint64 + uncover 2 + dig 1 + * + cover 2 + mulw + cover 2 + + + swap + byte 0x7374616b6564 // "staked" + app_global_get + int 1000 + mulw + divmodw + pop + pop + swap + ! + + // wideRatio failed + assert + frame_bury 29 // stakerTokenReward: uint64 + + // contracts/stakingPool.algo.ts:761 + // tokenRewardAvail -= stakerTokenReward + frame_dig 14 // tokenRewardAvail: uint64 + frame_dig 29 // stakerTokenReward: uint64 + - + frame_bury 14 // tokenRewardAvail: uint64 + + // contracts/stakingPool.algo.ts:762 + // cmpStaker.rewardTokenBalance += stakerTokenReward + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + int 48 // headOffset + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 48 8 + btoi + frame_dig 29 // stakerTokenReward: uint64 + + + itob + replace3 + frame_bury 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:763 + // tokenRewardPaidOut += stakerTokenReward + frame_dig 15 // tokenRewardPaidOut: uint64 + frame_dig 29 // stakerTokenReward: uint64 + + + frame_bury 15 // tokenRewardPaidOut: uint64 + +*if38_end: + // contracts/stakingPool.algo.ts:766 + // stakerReward = wideRatio( + // [cmpStaker.balance, origAlgoReward, timePercentage], + // [this.totalAlgoStaked.value, 1000], + // ) + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + frame_dig 24 // origAlgoReward: uint64 + mulw + frame_dig 28 // timePercentage: uint64 + uncover 2 + dig 1 + * + cover 2 + mulw + cover 2 + + + swap + byte 0x7374616b6564 // "staked" + app_global_get + int 1000 + mulw + divmodw + pop + pop + swap + ! + + // wideRatio failed + assert + frame_bury 30 // stakerReward: uint64 + + // contracts/stakingPool.algo.ts:772 + // algoRewardAvail -= stakerReward + frame_dig 11 // algoRewardAvail: uint64 + frame_dig 30 // stakerReward: uint64 + - + frame_bury 11 // algoRewardAvail: uint64 + + // contracts/stakingPool.algo.ts:775 + // cmpStaker.balance += stakerReward + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + int 32 // headOffset + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + frame_dig 30 // stakerReward: uint64 + + + itob + replace3 + frame_bury 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:776 + // cmpStaker.totalRewarded += stakerReward + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + int 40 // headOffset + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 40 8 + btoi + frame_dig 30 // stakerReward: uint64 + + + itob + replace3 + frame_bury 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:777 + // increasedStake += stakerReward + frame_dig 22 // increasedStake: uint64 + frame_dig 30 // stakerReward: uint64 + + + frame_bury 22 // increasedStake: uint64 + + // contracts/stakingPool.algo.ts:779 + // this.stakers.value[i] = cmpStaker + frame_dig 25 // i: uint64 + int 64 + * // acc * typeLength + frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) + byte 0x7374616b657273 // "stakers" + cover 2 + box_replace + +*if37_end: + +*if36_end: + +*if35_end: + +*for_4_continue: + // contracts/stakingPool.algo.ts:731 + // i += 1 + frame_dig 25 // i: uint64 + int 1 + + + frame_bury 25 // i: uint64 + b *for_4 + +*for_4_end: + // contracts/stakingPool.algo.ts:787 + // newPoolTotalStake = this.totalAlgoStaked.value - partialStakersTotalStake + byte 0x7374616b6564 // "staked" + app_global_get + frame_dig 23 // partialStakersTotalStake: uint64 + - + frame_bury 31 // newPoolTotalStake: uint64 + + // *if39_condition + // contracts/stakingPool.algo.ts:791 + // newPoolTotalStake > 0 + frame_dig 31 // newPoolTotalStake: uint64 + int 0 + > + bz *if39_end + + // *if39_consequent + // contracts/stakingPool.algo.ts:793 + // for (let i = 0; i < this.stakers.value.length; i += 1) + int 0 + frame_bury 32 // i: uint64 + +*for_5: + // contracts/stakingPool.algo.ts:793 + // i < this.stakers.value.length + frame_dig 32 // i: uint64 + int 200 + < + bz *for_5_end + + // *if40_condition + // contracts/stakingPool.algo.ts:794 + // globals.opcodeBudget < 200 + global OpcodeBudget + int 200 + < + bz *if40_end + + // *if40_consequent + // contracts/stakingPool.algo.ts:795 + // increaseOpcodeBudget() + itxn_begin + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + byte b64 CoEB // #pragma version 10; int 1 + dup + itxn_field ApprovalProgram + itxn_field ClearStateProgram + int DeleteApplication + itxn_field OnCompletion + itxn_submit + +*if40_end: + // contracts/stakingPool.algo.ts:797 + // cmpStaker = clone(this.stakers.value[i]) + frame_dig 32 // i: uint64 + int 64 + * // acc * typeLength + int 64 + byte 0x7374616b657273 // "stakers" + cover 2 + box_extract + frame_bury 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // *if41_condition + // contracts/stakingPool.algo.ts:798 + // cmpStaker.account !== globals.zeroAddress && cmpStaker.entryRound < thisEpochBegin + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 0 32 + global ZeroAddress + != + dup + bz *skip_and4 + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 56 8 + btoi + frame_dig 3 // thisEpochBegin: uint64 + < + && + +*skip_and4: + bz *if41_end + + // *if41_consequent + // contracts/stakingPool.algo.ts:799 + // timeInPool = thisEpochBegin - cmpStaker.entryRound + frame_dig 3 // thisEpochBegin: uint64 + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 56 8 + btoi + - + frame_bury 34 // timeInPool: uint64 + + // *if42_condition + // contracts/stakingPool.algo.ts:801 + // timeInPool >= epochRoundLength + frame_dig 34 // timeInPool: uint64 + frame_dig 1 // epochRoundLength: uint64 + >= + bz *if42_end + + // *if42_consequent + // *if43_condition + // contracts/stakingPool.algo.ts:806 + // tokenRewardAvail > 0 + frame_dig 14 // tokenRewardAvail: uint64 + int 0 + > + bz *if43_end + + // *if43_consequent + // contracts/stakingPool.algo.ts:807 + // stakerTokenReward = wideRatio( + // [cmpStaker.balance, tokenRewardAvail], + // [newPoolTotalStake], + // ) + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + frame_dig 14 // tokenRewardAvail: uint64 + mulw + int 0 + frame_dig 31 // newPoolTotalStake: uint64 + divmodw + pop + pop + swap + ! + + // wideRatio failed + assert + frame_bury 35 // stakerTokenReward: uint64 + + // contracts/stakingPool.algo.ts:813 + // cmpStaker.rewardTokenBalance += stakerTokenReward + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + int 48 // headOffset + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 48 8 + btoi + frame_dig 35 // stakerTokenReward: uint64 + + + itob + replace3 + frame_bury 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:814 + // tokenRewardPaidOut += stakerTokenReward + frame_dig 15 // tokenRewardPaidOut: uint64 + frame_dig 35 // stakerTokenReward: uint64 + + + frame_bury 15 // tokenRewardPaidOut: uint64 + +*if43_end: + // *if44_condition + // contracts/stakingPool.algo.ts:816 + // algoRewardAvail > 0 + frame_dig 11 // algoRewardAvail: uint64 + int 0 + > + bz *if44_end + + // *if44_consequent + // contracts/stakingPool.algo.ts:817 + // stakerReward = wideRatio( + // [cmpStaker.balance, algoRewardAvail], + // [newPoolTotalStake], + // ) + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + frame_dig 11 // algoRewardAvail: uint64 + mulw + int 0 + frame_dig 31 // newPoolTotalStake: uint64 + divmodw + pop + pop + swap + ! + + // wideRatio failed + assert + frame_bury 36 // stakerReward: uint64 + + // contracts/stakingPool.algo.ts:823 + // cmpStaker.balance += stakerReward + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + int 32 // headOffset + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 32 8 + btoi + frame_dig 36 // stakerReward: uint64 + + + itob + replace3 + frame_bury 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:824 + // cmpStaker.totalRewarded += stakerReward + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + int 40 // headOffset + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + extract 40 8 + btoi + frame_dig 36 // stakerReward: uint64 + + + itob + replace3 + frame_bury 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + + // contracts/stakingPool.algo.ts:825 + // increasedStake += stakerReward + frame_dig 22 // increasedStake: uint64 + frame_dig 36 // stakerReward: uint64 + + + frame_bury 22 // increasedStake: uint64 + +*if44_end: + // contracts/stakingPool.algo.ts:829 + // this.stakers.value[i] = cmpStaker + frame_dig 32 // i: uint64 + int 64 + * // acc * typeLength + frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) + byte 0x7374616b657273 // "stakers" + cover 2 + box_replace + +*if42_end: + +*if41_end: + +*for_5_continue: + // contracts/stakingPool.algo.ts:793 + // i += 1 + frame_dig 32 // i: uint64 + int 1 + + + frame_bury 32 // i: uint64 + b *for_5 + +*for_5_end: + +*if39_end: + +*if33_end: + // contracts/stakingPool.algo.ts:839 + // roundsLeftInBin = this.binRoundStart.value + this.roundsPerDay.value - globals.round + byte 0x62696e526f756e645374617274 // "binRoundStart" + app_global_get + byte 0x726f756e6473506572446179 // "roundsPerDay" + app_global_get + + + global Round + - + frame_bury 37 // roundsLeftInBin: uint64 + + // contracts/stakingPool.algo.ts:840 + // this.totalAlgoStaked.value += increasedStake + byte 0x7374616b6564 // "staked" + app_global_get + frame_dig 22 // increasedStake: uint64 + + + byte 0x7374616b6564 // "staked" + swap + app_global_put + + // contracts/stakingPool.algo.ts:841 + // this.stakeAccumulator.value = + // this.stakeAccumulator.value + (increasedStake as uint128) * (roundsLeftInBin as uint128) + byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" + dup + app_global_get + frame_dig 22 // increasedStake: uint64 + itob + frame_dig 37 // roundsLeftInBin: uint64 + itob + b* + b+ + dup + bitlen + int 128 + <= + + // this.stakeAccumulator.value + (increasedStake as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits + assert + byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + b& + dup + len + dup + int 16 + - + swap + substring3 + app_global_put + + // contracts/stakingPool.algo.ts:843 + // this.rewardAccumulator.value = this.rewardAccumulator.value + increasedStake + byte 0x726577617264416363756d756c61746f72 // "rewardAccumulator" + dup + app_global_get + frame_dig 22 // increasedStake: uint64 + + + app_global_put + + // contracts/stakingPool.algo.ts:849 + // sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [ + // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, + // increasedStake, + // tokenRewardPaidOut, + // validatorCommissionPaidOut, + // excessToFeeSink, + // ], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "stakeUpdatedViaRewards((uint64,uint64,uint64),uint64,uint64,uint64,uint64)void" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:850 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:851 + // methodArgs: [ + // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, + // increasedStake, + // tokenRewardPaidOut, + // validatorCommissionPaidOut, + // excessToFeeSink, + // ] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + byte 0x706f6f6c4964 // "poolId" + app_global_get + itob + concat + txna Applications 0 + itob + concat + itxn_field ApplicationArgs + frame_dig 22 // increasedStake: uint64 + itob + itxn_field ApplicationArgs + frame_dig 15 // tokenRewardPaidOut: uint64 + itob + itxn_field ApplicationArgs + frame_dig 16 // validatorCommissionPaidOut: uint64 + itob + itxn_field ApplicationArgs + frame_dig 17 // excessToFeeSink: uint64 + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + retsub + +// goOnline(pay,byte[],byte[],byte[],uint64,uint64,uint64)void +*abi_route_goOnline: + // voteKeyDilution: uint64 + txna ApplicationArgs 6 + btoi + + // voteLast: uint64 + txna ApplicationArgs 5 + btoi + + // voteFirst: uint64 + txna ApplicationArgs 4 + btoi + + // stateProofPK: byte[] + txna ApplicationArgs 3 + extract 2 0 + + // selectionPK: byte[] + txna ApplicationArgs 2 + extract 2 0 + + // votePK: byte[] + txna ApplicationArgs 1 + extract 2 0 + + // feePayment: pay + txn GroupIndex + int 1 + - + dup + gtxns TypeEnum + int pay + == + + // argument 6 (feePayment) for goOnline must be a pay transaction + assert + + // execute goOnline(pay,byte[],byte[],byte[],uint64,uint64,uint64)void + callsub goOnline + int 1 + return + +// goOnline(feePayment: PayTxn, votePK: bytes, selectionPK: bytes, stateProofPK: bytes, voteFirst: uint64, voteLast: uint64, voteKeyDilution: uint64): void +// +// Registers a staking pool key online against a participation key. +// [ ONLY OWNER OR MANAGER CAN CALL ] +// +// @param {PayTxn} feePayment - payment to cover extra fee of going online if offline - or 0 if not renewal +// @param {bytes} votePK - The vote public key. +// @param {bytes} selectionPK - The selection public key. +// @param {bytes} stateProofPK - The state proof public key. +// @param {uint64} voteFirst - The first vote index. +// @param {uint64} voteLast - The last vote index. +// @param {uint64} voteKeyDilution - The vote key dilution value. +// @throws {Error} Will throw an error if the caller is not the owner or a manager. +goOnline: + proto 7 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // contracts/stakingPool.algo.ts:883 + // assert(this.isOwnerOrManagerCaller(), 'can only be called by owner or manager of validator') + callsub isOwnerOrManagerCaller + + // can only be called by owner or manager of validator + assert + + // contracts/stakingPool.algo.ts:884 + // extraFee = this.getGoOnlineFee() + callsub getGoOnlineFee + frame_bury 0 // extraFee: uint64 + + // contracts/stakingPool.algo.ts:885 + // verifyPayTxn(feePayment, { receiver: this.app.address, amount: extraFee }) + // verify receiver + frame_dig -1 // feePayment: PayTxn + gtxns Receiver + global CurrentApplicationAddress + == + + // transaction verification failed: {"txn":"feePayment","field":"receiver","expected":"this.app.address"} + assert + + // verify amount + frame_dig -1 // feePayment: PayTxn + gtxns Amount + frame_dig 0 // extraFee: uint64 + == + + // transaction verification failed: {"txn":"feePayment","field":"amount","expected":"extraFee"} + assert + + // contracts/stakingPool.algo.ts:886 + // sendOnlineKeyRegistration({ + // votePK: votePK, + // selectionPK: selectionPK, + // stateProofPK: stateProofPK, + // voteFirst: voteFirst, + // voteLast: voteLast, + // voteKeyDilution: voteKeyDilution, + // fee: this.getGoOnlineFee(), + // }) + itxn_begin + int keyreg + itxn_field TypeEnum + + // contracts/stakingPool.algo.ts:887 + // votePK: votePK + frame_dig -2 // votePK: bytes + itxn_field VotePK + + // contracts/stakingPool.algo.ts:888 + // selectionPK: selectionPK + frame_dig -3 // selectionPK: bytes + itxn_field SelectionPK + + // contracts/stakingPool.algo.ts:889 + // stateProofPK: stateProofPK + frame_dig -4 // stateProofPK: bytes + itxn_field StateProofPK + + // contracts/stakingPool.algo.ts:890 + // voteFirst: voteFirst + frame_dig -5 // voteFirst: uint64 + itxn_field VoteFirst + + // contracts/stakingPool.algo.ts:891 + // voteLast: voteLast + frame_dig -6 // voteLast: uint64 + itxn_field VoteLast + + // contracts/stakingPool.algo.ts:892 + // voteKeyDilution: voteKeyDilution + frame_dig -7 // voteKeyDilution: uint64 + itxn_field VoteKeyDilution + + // contracts/stakingPool.algo.ts:893 + // fee: this.getGoOnlineFee() + callsub getGoOnlineFee + itxn_field Fee + + // Submit inner transaction + itxn_submit + retsub + +// goOffline()void +*abi_route_goOffline: + // execute goOffline()void + callsub goOffline + int 1 + return + +// goOffline(): void +// +// Marks a staking pool key OFFLINE. +// [ ONLY OWNER OR MANAGER CAN CALL ] +goOffline: + proto 0 0 + + // *if45_condition + // contracts/stakingPool.algo.ts:905 + // this.txn.sender !== this.creatingValidatorContractAppId.value.address + txn Sender + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + app_params_get AppAddress + pop + != + bz *if45_end + + // *if45_consequent + // contracts/stakingPool.algo.ts:906 + // assert(this.isOwnerOrManagerCaller(), 'can only be called by owner or manager of validator') + callsub isOwnerOrManagerCaller + + // can only be called by owner or manager of validator + assert + +*if45_end: + // contracts/stakingPool.algo.ts:909 + // sendOfflineKeyRegistration({}) + itxn_begin + int keyreg + itxn_field TypeEnum + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + retsub + +// linkToNFD(uint64,string)void +*abi_route_linkToNFD: + // nfdName: string + txna ApplicationArgs 2 + extract 2 0 + + // nfdAppId: uint64 + txna ApplicationArgs 1 + btoi + + // execute linkToNFD(uint64,string)void + callsub linkToNFD + int 1 + return + +// linkToNFD(nfdAppId: uint64, nfdName: string): void +linkToNFD: + proto 2 0 + + // contracts/stakingPool.algo.ts:916 + // assert(this.isOwnerOrManagerCaller(), 'can only be called by owner or manager of validator') + callsub isOwnerOrManagerCaller + + // can only be called by owner or manager of validator + assert + + // contracts/stakingPool.algo.ts:918 + // sendAppCall({ + // applicationID: AppID.fromUint64(this.nfdRegistryAppId), + // applicationArgs: ['verify_nfd_addr', nfdName, itob(nfdAppId), rawBytes(this.app.address)], + // applications: [AppID.fromUint64(nfdAppId)], + // }) + itxn_begin + int appl + itxn_field TypeEnum + + // contracts/stakingPool.algo.ts:919 + // applicationID: AppID.fromUint64(this.nfdRegistryAppId) + pushint TMPL_nfdRegistryAppId + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:920 + // applicationArgs: ['verify_nfd_addr', nfdName, itob(nfdAppId), rawBytes(this.app.address)] + byte 0x7665726966795f6e66645f61646472 // "verify_nfd_addr" + itxn_field ApplicationArgs + frame_dig -2 // nfdName: string + itxn_field ApplicationArgs + frame_dig -1 // nfdAppId: uint64 + itob + itxn_field ApplicationArgs + global CurrentApplicationAddress + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:921 + // applications: [AppID.fromUint64(nfdAppId)] + frame_dig -1 // nfdAppId: uint64 + itxn_field Applications + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + retsub + +// proxiedSetTokenPayoutRatio((uint64,uint64,uint64))(uint64[24],uint64) +*abi_route_proxiedSetTokenPayoutRatio: + // The ABI return prefix + byte 0x151f7c75 + + // poolKey: (uint64,uint64,uint64) + txna ApplicationArgs 1 + dup + len + int 24 + == + + // argument 0 (poolKey) for proxiedSetTokenPayoutRatio must be a (uint64,uint64,uint64) + assert + + // execute proxiedSetTokenPayoutRatio((uint64,uint64,uint64))(uint64[24],uint64) + callsub proxiedSetTokenPayoutRatio + concat + log + int 1 + return + +// proxiedSetTokenPayoutRatio(poolKey: ValidatorPoolKey): PoolTokenPayoutRatio +// +// proxiedSetTokenPayoutRatio is meant to be called by pools != 1 - calling US, pool #1 +// We need to verify that we are in fact being called by another of OUR pools (not us) +// and then we'll call the validator on their behalf to update the token payouts +// @param poolKey - ValidatorPoolKey tuple +proxiedSetTokenPayoutRatio: + proto 1 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // contracts/stakingPool.algo.ts:932 + // assert(this.validatorId.value === poolKey.id, 'caller must be part of same validator set!') + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + == + + // caller must be part of same validator set! + assert + + // contracts/stakingPool.algo.ts:933 + // assert(this.poolId.value === 1, 'callee must be pool 1') + byte 0x706f6f6c4964 // "poolId" + app_global_get + int 1 + == + + // callee must be pool 1 + assert + + // contracts/stakingPool.algo.ts:934 + // assert(poolKey.poolId !== 1, 'caller must NOT be pool 1') + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + != + + // caller must NOT be pool 1 + assert + + // contracts/stakingPool.algo.ts:936 + // callerPoolAppID = sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [poolKey.id, poolKey.poolId], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "getPoolAppId(uint64,uint64)uint64" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:937 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:938 + // methodArgs: [poolKey.id, poolKey.poolId] + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + itxn_field ApplicationArgs + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + btoi + frame_bury 0 // callerPoolAppID: uint64 + + // contracts/stakingPool.algo.ts:940 + // assert(callerPoolAppID === poolKey.poolAppId) + frame_dig 0 // callerPoolAppID: uint64 + frame_dig -1 // poolKey: ValidatorPoolKey + extract 16 8 + btoi + == + assert + + // contracts/stakingPool.algo.ts:941 + // assert(this.txn.sender === AppID.fromUint64(poolKey.poolAppId).address) + txn Sender + frame_dig -1 // poolKey: ValidatorPoolKey + extract 16 8 + btoi + app_params_get AppAddress + pop + == + assert + + // contracts/stakingPool.algo.ts:943 + // return sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [this.validatorId.value], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "setTokenPayoutRatio(uint64)(uint64[24],uint64)" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:944 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:945 + // methodArgs: [this.validatorId.value] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + + // set the subroutine return value + frame_bury 0 + retsub + +// isOwnerOrManagerCaller(): boolean +isOwnerOrManagerCaller: + proto 0 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // contracts/stakingPool.algo.ts:950 + // OwnerAndManager = sendMethodCall({ + // applicationID: this.creatingValidatorContractAppId.value, + // methodArgs: [this.validatorId.value], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "getValidatorOwnerAndManager(uint64)(address,address)" + itxn_field ApplicationArgs + + // contracts/stakingPool.algo.ts:951 + // applicationID: this.creatingValidatorContractAppId.value + byte 0x63726561746f72417070 // "creatorApp" + app_global_get + itxn_field ApplicationID + + // contracts/stakingPool.algo.ts:952 + // methodArgs: [this.validatorId.value] + byte 0x76616c696461746f724964 // "validatorId" + app_global_get + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + frame_bury 0 // OwnerAndManager: (address,address) + + // contracts/stakingPool.algo.ts:954 + // return this.txn.sender === OwnerAndManager[0] || this.txn.sender === OwnerAndManager[1] + txn Sender + frame_dig 0 // OwnerAndManager: (address,address) + extract 0 32 + == + dup + bnz *skip_or2 + txn Sender + frame_dig 0 // OwnerAndManager: (address,address) + extract 32 32 + == + || + +*skip_or2: + // set the subroutine return value + frame_bury 0 + retsub + +// getFeeSink(): Address +getFeeSink: + proto 0 1 + + // contracts/stakingPool.algo.ts:958 + // return this.feeSinkAddr + pushbytes TMPL_feeSinkAddr + retsub + +// algoSaturationLevel(): uint64 +// +// Returns the maximum allowed stake per validator based on a percentage of all current online stake before +// the validator is considered saturated - where rewards are diminished. +algoSaturationLevel: + proto 0 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // contracts/stakingPool.algo.ts:968 + // online = this.getCurrentOnlineStake() + callsub getCurrentOnlineStake + frame_bury 0 // online: uint64 + + // contracts/stakingPool.algo.ts:970 + // return wideRatio([online, MAX_VALIDATOR_SOFT_PCT_OF_ONLINE_1DECIMAL], [1000]) + frame_dig 0 // online: uint64 + int 100 + mulw + int 0 + int 1000 + divmodw + pop + pop + swap + ! + + // wideRatio failed + assert + + // set the subroutine return value + frame_bury 0 + retsub + +// getGoOnlineFee(): uint64 +getGoOnlineFee: + proto 0 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // contracts/stakingPool.algo.ts:977 + // isOnline = false + int 0 + frame_bury 0 // isOnline: bool + + // *if46_condition + // contracts/stakingPool.algo.ts:978 + // !isOnline + frame_dig 0 // isOnline: bool + ! + bz *if46_end + + // *if46_consequent + // contracts/stakingPool.algo.ts:981 + // return 2_000_000 + int 2_000_000 + b *getGoOnlineFee*return + +*if46_end: + // contracts/stakingPool.algo.ts:983 + // return 0 + int 0 + +*getGoOnlineFee*return: + // set the subroutine return value + frame_bury 0 + retsub + +// getCurrentOnlineStake(): uint64 +getCurrentOnlineStake: + proto 0 1 + + // contracts/stakingPool.algo.ts:989 + // return 2_000_000_000_000_000 + int 2_000_000_000_000_000 + retsub + +// checkIfBinClosed(): void +// +// Checks if the current round is in a 'new calculation bin' (approximately daily) +checkIfBinClosed: + proto 0 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 4 + + // contracts/stakingPool.algo.ts:996 + // currentBinSize = this.roundsPerDay.value as uint128 + byte 0x726f756e6473506572446179 // "roundsPerDay" + app_global_get + itob + frame_bury 0 // currentBinSize: unsafe uint128 + + // *if47_condition + // contracts/stakingPool.algo.ts:997 + // globals.round >= this.binRoundStart.value + (currentBinSize as uint64) + global Round + byte 0x62696e526f756e645374617274 // "binRoundStart" + app_global_get + frame_dig 0 // currentBinSize: unsafe uint128 + dup + bitlen + int 64 + <= + + // currentBinSize as uint64 overflowed 64 bits + assert + byte 0xFFFFFFFFFFFFFFFF + b& + dup + len + dup + int 8 + - + swap + substring3 + btoi + + + >= + bz *if47_end + + // *if47_consequent + // *if48_condition + // contracts/stakingPool.algo.ts:998 + // globals.opcodeBudget < 300 + global OpcodeBudget + int 300 + < + bz *if48_end + + // *if48_consequent + // contracts/stakingPool.algo.ts:999 + // increaseOpcodeBudget() + itxn_begin + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + byte b64 CoEB // #pragma version 10; int 1 + dup + itxn_field ApprovalProgram + itxn_field ClearStateProgram + int DeleteApplication + itxn_field OnCompletion + itxn_submit + +*if48_end: + // contracts/stakingPool.algo.ts:1001 + // approxRoundsPerYear: uint128 = currentBinSize * (365 as uint128) + frame_dig 0 // currentBinSize: unsafe uint128 + byte 0x0000000000000000000000000000016d + b* + dup + bitlen + int 128 + <= + + // currentBinSize * (365 as uint128) overflowed 128 bits + assert + byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + b& + dup + len + dup + int 16 + - + swap + substring3 + frame_bury 1 // approxRoundsPerYear: uint128 + + // contracts/stakingPool.algo.ts:1002 + // avgStake: uint128 = this.stakeAccumulator.value / currentBinSize + byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" + app_global_get + frame_dig 0 // currentBinSize: unsafe uint128 + b/ + dup + bitlen + int 128 + <= + + // this.stakeAccumulator.value / currentBinSize overflowed 128 bits + assert + byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + b& + dup + len + dup + int 16 + - + swap + substring3 + frame_bury 2 // avgStake: uint128 + + // *if49_condition + // contracts/stakingPool.algo.ts:1003 + // avgStake !== 0 + frame_dig 2 // avgStake: uint128 + byte 0x00000000000000000000000000000000 + b!= + bz *if49_end + + // *if49_consequent + // contracts/stakingPool.algo.ts:1007 + // apr: uint128 = + // (((this.rewardAccumulator.value as uint128) * (10000 as uint128)) / avgStake) * + // (approxRoundsPerYear / currentBinSize) + byte 0x726577617264416363756d756c61746f72 // "rewardAccumulator" + app_global_get + itob + byte 0x00000000000000000000000000002710 + b* + frame_dig 2 // avgStake: uint128 + b/ + frame_dig 1 // approxRoundsPerYear: uint128 + frame_dig 0 // currentBinSize: unsafe uint128 + b/ + b* + dup + bitlen + int 128 + <= + + // (((this.rewardAccumulator.value as uint128) * (10000 as uint128)) / avgStake) *\n (approxRoundsPerYear / currentBinSize) overflowed 128 bits + assert + byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + b& + dup + len + dup + int 16 + - + swap + substring3 + frame_bury 3 // apr: uint128 + + // contracts/stakingPool.algo.ts:1011 + // alpha: uint128 = 10 as uint128 + byte 0x0000000000000000000000000000000a + frame_bury 4 // alpha: unsafe uint128 + + // *if50_condition + // contracts/stakingPool.algo.ts:1013 + // avgStake > 300000000000 + frame_dig 2 // avgStake: uint128 + byte 0x000000000000000000000045d964b800 + b> + bz *if50_end + + // *if50_consequent + // contracts/stakingPool.algo.ts:1014 + // alpha = 90 as uint128 + byte 0x0000000000000000000000000000005a + frame_bury 4 // alpha: unsafe uint128 + +*if50_end: + // contracts/stakingPool.algo.ts:1016 + // this.weightedMovingAverage.value = + // (this.weightedMovingAverage.value * ((100 as uint128) - alpha)) / (100 as uint128) + + // (apr * alpha) / (100 as uint128) + byte 0x65776d61 // "ewma" + dup + app_global_get + byte 0x00000000000000000000000000000064 + frame_dig 4 // alpha: unsafe uint128 + b- + b* + byte 0x00000000000000000000000000000064 + b/ + frame_dig 3 // apr: uint128 + frame_dig 4 // alpha: unsafe uint128 + b* + byte 0x00000000000000000000000000000064 + b/ + b+ + dup + bitlen + int 128 + <= + + // (this.weightedMovingAverage.value * ((100 as uint128) - alpha)) / (100 as uint128) +\n (apr * alpha) / (100 as uint128) overflowed 128 bits + assert + byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + b& + dup + len + dup + int 16 + - + swap + substring3 + app_global_put + +*if49_end: + // contracts/stakingPool.algo.ts:1022 + // this.setRoundsPerDay() + callsub setRoundsPerDay + + // contracts/stakingPool.algo.ts:1023 + // this.stakeAccumulator.value = (this.totalAlgoStaked.value as uint128) * (this.roundsPerDay.value as uint128) + byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" + byte 0x7374616b6564 // "staked" + app_global_get + itob + byte 0x726f756e6473506572446179 // "roundsPerDay" + app_global_get + itob + b* + dup + bitlen + int 128 + <= + + // (this.totalAlgoStaked.value as uint128) * (this.roundsPerDay.value as uint128) overflowed 128 bits + assert + byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + b& + dup + len + dup + int 16 + - + swap + substring3 + app_global_put + + // contracts/stakingPool.algo.ts:1024 + // this.rewardAccumulator.value = 0 + byte 0x726577617264416363756d756c61746f72 // "rewardAccumulator" + int 0 + app_global_put + + // contracts/stakingPool.algo.ts:1025 + // this.binRoundStart.value = globals.round - (globals.round % this.roundsPerDay.value) + byte 0x62696e526f756e645374617274 // "binRoundStart" + global Round + global Round + byte 0x726f756e6473506572446179 // "roundsPerDay" + app_global_get + % + - + app_global_put + +*if47_end: + retsub + +// setRoundsPerDay(): void +setRoundsPerDay: + proto 0 0 + + // contracts/stakingPool.algo.ts:1030 + // this.roundsPerDay.value = AVG_ROUNDS_PER_DAY + byte 0x726f756e6473506572446179 // "roundsPerDay" + int 30857 + app_global_put + retsub + +*create_NoOp: + method "createApplication(uint64,uint64,uint64,uint64)void" + txna ApplicationArgs 0 + match *abi_route_createApplication + + // this contract does not implement the given ABI method for create NoOp + err + +*call_NoOp: + method "gas()void" + method "initStorage(pay)void" + method "addStake(pay,address)uint64" + method "removeStake(address,uint64)void" + method "claimTokens()void" + method "getStakerInfo(address)(address,uint64,uint64,uint64,uint64)" + method "payTokenReward(address,uint64,uint64)void" + method "updateAlgodVer(string)void" + method "epochBalanceUpdate()void" + method "goOnline(pay,byte[],byte[],byte[],uint64,uint64,uint64)void" + method "goOffline()void" + method "linkToNFD(uint64,string)void" + method "proxiedSetTokenPayoutRatio((uint64,uint64,uint64))(uint64[24],uint64)" + txna ApplicationArgs 0 + match *abi_route_gas *abi_route_initStorage *abi_route_addStake *abi_route_removeStake *abi_route_claimTokens *abi_route_getStakerInfo *abi_route_payTokenReward *abi_route_updateAlgodVer *abi_route_epochBalanceUpdate *abi_route_goOnline *abi_route_goOffline *abi_route_linkToNFD *abi_route_proxiedSetTokenPayoutRatio + + // this contract does not implement the given ABI method for call NoOp + err + +*call_UpdateApplication: + method "updateApplication()void" + txna ApplicationArgs 0 + match *abi_route_updateApplication + + // this contract does not implement the given ABI method for call UpdateApplication + err \ No newline at end of file diff --git a/examples/reti/StakingPool.arc32.json b/examples/reti/StakingPool.arc32.json new file mode 100644 index 000000000..f21f66c54 --- /dev/null +++ b/examples/reti/StakingPool.arc32.json @@ -0,0 +1,421 @@ +{ + "hints": { + "updateApplication()void": { + "call_config": { + "update_application": "CALL" + } + }, + "createApplication(uint64,uint64,uint64,uint64)void": { + "call_config": { + "no_op": "CREATE" + } + }, + "gas()void": { + "call_config": { + "no_op": "CALL" + } + }, + "initStorage(pay)void": { + "call_config": { + "no_op": "CALL" + } + }, + "addStake(pay,address)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "removeStake(address,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "claimTokens()void": { + "call_config": { + "no_op": "CALL" + } + }, + "getStakerInfo(address)(address,uint64,uint64,uint64,uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "payTokenReward(address,uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "updateAlgodVer(string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "epochBalanceUpdate()void": { + "call_config": { + "no_op": "CALL" + } + }, + "goOnline(pay,byte[],byte[],byte[],uint64,uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "goOffline()void": { + "call_config": { + "no_op": "CALL" + } + }, + "linkToNFD(uint64,string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "proxiedSetTokenPayoutRatio((uint64,uint64,uint64))(uint64[24],uint64)": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "no_op": "NEVER", + "opt_in": "NEVER", + "close_out": "NEVER", + "update_application": "NEVER", + "delete_application": "NEVER" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": { + "creatingValidatorContractAppId": { + "type": "uint64", + "key": "creatorApp" + }, + "validatorId": { + "type": "uint64", + "key": "validatorId" + }, + "poolId": { + "type": "uint64", + "key": "poolId" + }, + "numStakers": { + "type": "uint64", + "key": "numStakers" + }, + "totalAlgoStaked": { + "type": "uint64", + "key": "staked" + }, + "minEntryStake": { + "type": "uint64", + "key": "minEntryStake" + }, + "lastPayout": { + "type": "uint64", + "key": "lastPayout" + }, + "epochNumber": { + "type": "uint64", + "key": "epochNumber" + }, + "algodVer": { + "type": "bytes", + "key": "algodVer" + }, + "roundsPerDay": { + "type": "uint64", + "key": "roundsPerDay" + }, + "binRoundStart": { + "type": "uint64", + "key": "binRoundStart" + }, + "stakeAccumulator": { + "type": "bytes", + "key": "stakeAccumulator" + }, + "rewardAccumulator": { + "type": "uint64", + "key": "rewardAccumulator" + }, + "weightedMovingAverage": { + "type": "bytes", + "key": "ewma" + } + }, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 3, + "num_uints": 11 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjk2LjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCS8vIFRoZSByZXF1ZXN0ZWQgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRyYWN0LiBBcmUgeW91IHVzaW5nIHRoZSBjb3JyZWN0IE9uQ29tcGxldGU/IERpZCB5b3Ugc2V0IHlvdXIgYXBwIElEPwoJZXJyCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiB1cGRhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKTogdm9pZAp1cGRhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkyCgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IEFkZHJlc3MuZnJvbUFkZHJlc3MoJ0xaNFYySVJWTENYRkpLNFJFSlY0VEFHRUtFWVRBMkdNUjZUQzIzNDRPQjNMM0FGM01XWFo2WkFGSVEnKSwKCS8vICAgICAgICAgICAgICdUZW1wb3Jhcnk6IGNvbnRyYWN0IGlzIHVwZ3JhZGVhYmxlIGJ1dCBvbmx5IGR1cmluZyB0ZXN0aW5nIGFuZCBvbmx5IGZyb20gYSBkZXZlbG9wbWVudCBhY2NvdW50JywKCS8vICAgICAgICAgKQoJdHhuIFNlbmRlcgoJYWRkciBMWjRWMklSVkxDWEZKSzRSRUpWNFRBR0VLRVlUQTJHTVI2VEMyMzQ0T0IzTDNBRjNNV1haNlpBRklRCgk9PQoKCS8vIFRlbXBvcmFyeTogY29udHJhY3QgaXMgdXBncmFkZWFibGUgYnV0IG9ubHkgZHVyaW5nIHRlc3RpbmcgYW5kIG9ubHkgZnJvbSBhIGRldmVsb3BtZW50IGFjY291bnQKCWFzc2VydAoJcmV0c3ViCgovLyBjcmVhdGVBcHBsaWNhdGlvbih1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gbWluRW50cnlTdGFrZTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA0CglidG9pCgoJLy8gcG9vbElkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gY3JlYXRpbmdDb250cmFjdElkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGNyZWF0ZUFwcGxpY2F0aW9uKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIGNyZWF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyBjcmVhdGVBcHBsaWNhdGlvbihjcmVhdGluZ0NvbnRyYWN0SWQ6IEFwcElELCB2YWxpZGF0b3JJZDogdWludDY0LCBwb29sSWQ6IHVpbnQ2NCwgbWluRW50cnlTdGFrZTogdWludDY0KTogdm9pZAovLwovLyBJbml0aWFsaXplIHRoZSBzdGFraW5nIHBvb2wgdy8gb3duZXIgYW5kIG1hbmFnZXIsIGJ1dCBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSB2YWxpZGF0b3IgY29udHJhY3QuCi8vIEBwYXJhbSB7dWludDY0fSBjcmVhdGluZ0NvbnRyYWN0SWQgLSBpZCBvZiBjb250cmFjdCB0aGF0IGNvbnN0cnVjdGVkIHVzIC0gdGhlIHZhbGlkYXRvciBhcHBsaWNhdGlvbiAoc2luZ2xlIGdsb2JhbCBpbnN0YW5jZSkKLy8gQHBhcmFtIHt1aW50NjR9IHZhbGlkYXRvcklkIC0gaWQgb2YgdmFsaWRhdG9yIHdlJ3JlIGEgc3Rha2luZyBwb29sIG9mCi8vIEBwYXJhbSB7dWludDY0fSBwb29sSWQgLSB3aGljaCBwb29sIGlkIGFyZSB3ZQovLyBAcGFyYW0ge3VpbnQ2NH0gbWluRW50cnlTdGFrZSAtIG1pbmltdW0gYW1vdW50IHRvIGJlIGluIHBvb2wsIGJ1dCBhbHNvIG1pbmltdW0gYW1vdW50IGJhbGFuY2UgY2FuJ3QgZ28gYmVsb3cgKHdpdGhvdXQgcmVtb3ZpbmcgYWxsISkKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byA0IDAKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTA2CgkvLyBjcmVhdGluZ0NvbnRyYWN0SWQgPT09IEFwcElELmZyb21VaW50NjQoMCkKCWZyYW1lX2RpZyAtMSAvLyBjcmVhdGluZ0NvbnRyYWN0SWQ6IEFwcElECglpbnQgMAoJPT0KCWJ6ICppZjBfZWxzZQoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTA4CgkvLyBhc3NlcnQodmFsaWRhdG9ySWQgPT09IDApCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJaW50IDAKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMDkKCS8vIGFzc2VydChwb29sSWQgPT09IDApCglmcmFtZV9kaWcgLTMgLy8gcG9vbElkOiB1aW50NjQKCWludCAwCgk9PQoJYXNzZXJ0CgliICppZjBfZW5kCgoqaWYwX2Vsc2U6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMTEKCS8vIGFzc2VydCh2YWxpZGF0b3JJZCAhPT0gMCkKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogdWludDY0CglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjExMgoJLy8gYXNzZXJ0KHBvb2xJZCAhPT0gMCkKCWZyYW1lX2RpZyAtMyAvLyBwb29sSWQ6IHVpbnQ2NAoJaW50IDAKCSE9Cglhc3NlcnQKCippZjBfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTE0CgkvLyBhc3NlcnQobWluRW50cnlTdGFrZSA+PSBNSU5fQUxHT19TVEFLRV9QRVJfUE9PTCwgJ3N0YWtpbmcgcG9vbCBtdXN0IGhhdmUgbWluaW11bSBlbnRyeSBvZiAxIGFsZ28nKQoJZnJhbWVfZGlnIC00IC8vIG1pbkVudHJ5U3Rha2U6IHVpbnQ2NAoJaW50IDEwMDAwMDAKCT49CgoJLy8gc3Rha2luZyBwb29sIG11c3QgaGF2ZSBtaW5pbXVtIGVudHJ5IG9mIDEgYWxnbwoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTE1CgkvLyB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZSA9IGNyZWF0aW5nQ29udHJhY3RJZAoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJZnJhbWVfZGlnIC0xIC8vIGNyZWF0aW5nQ29udHJhY3RJZDogQXBwSUQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTE2CgkvLyB0aGlzLnZhbGlkYXRvcklkLnZhbHVlID0gdmFsaWRhdG9ySWQKCWJ5dGUgMHg3NjYxNmM2OTY0NjE3NDZmNzI0OTY0IC8vICJ2YWxpZGF0b3JJZCIKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogdWludDY0CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjExNwoJLy8gdGhpcy5wb29sSWQudmFsdWUgPSBwb29sSWQKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWZyYW1lX2RpZyAtMyAvLyBwb29sSWQ6IHVpbnQ2NAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMTgKCS8vIHRoaXMubnVtU3Rha2Vycy52YWx1ZSA9IDAKCWJ5dGUgMHg2ZTc1NmQ1Mzc0NjE2YjY1NzI3MyAvLyAibnVtU3Rha2VycyIKCWludCAwCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjExOQoJLy8gdGhpcy50b3RhbEFsZ29TdGFrZWQudmFsdWUgPSAwCglieXRlIDB4NzM3NDYxNmI2NTY0IC8vICJzdGFrZWQiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMjAKCS8vIHRoaXMubWluRW50cnlTdGFrZS52YWx1ZSA9IG1pbkVudHJ5U3Rha2UKCWJ5dGUgMHg2ZDY5NmU0NTZlNzQ3Mjc5NTM3NDYxNmI2NSAvLyAibWluRW50cnlTdGFrZSIKCWZyYW1lX2RpZyAtNCAvLyBtaW5FbnRyeVN0YWtlOiB1aW50NjQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTIxCgkvLyB0aGlzLmxhc3RQYXlvdXQudmFsdWUgPSBnbG9iYWxzLnJvdW5kCglieXRlIDB4NmM2MTczNzQ1MDYxNzk2Zjc1NzQgLy8gImxhc3RQYXlvdXQiCglnbG9iYWwgUm91bmQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTIyCgkvLyB0aGlzLmVwb2NoTnVtYmVyLnZhbHVlID0gMAoJYnl0ZSAweDY1NzA2ZjYzNjg0ZTc1NmQ2MjY1NzIgLy8gImVwb2NoTnVtYmVyIgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTI0CgkvLyB0aGlzLnNldFJvdW5kc1BlckRheSgpCgljYWxsc3ViIHNldFJvdW5kc1BlckRheQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEyNQoJLy8gdGhpcy5iaW5Sb3VuZFN0YXJ0LnZhbHVlID0gZ2xvYmFscy5yb3VuZCAtIChnbG9iYWxzLnJvdW5kICUgdGhpcy5yb3VuZHNQZXJEYXkudmFsdWUpCglieXRlIDB4NjI2OTZlNTI2Zjc1NmU2NDUzNzQ2MTcyNzQgLy8gImJpblJvdW5kU3RhcnQiCglnbG9iYWwgUm91bmQKCWdsb2JhbCBSb3VuZAoJYnl0ZSAweDcyNmY3NTZlNjQ3MzUwNjU3MjQ0NjE3OSAvLyAicm91bmRzUGVyRGF5IgoJYXBwX2dsb2JhbF9nZXQKCSUKCS0KCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTI2CgkvLyB0aGlzLnN0YWtlQWNjdW11bGF0b3IudmFsdWUgPSAwIGFzIHVpbnQxMjgKCWJ5dGUgMHg3Mzc0NjE2YjY1NDE2MzYzNzU2ZDc1NmM2MTc0NmY3MiAvLyAic3Rha2VBY2N1bXVsYXRvciIKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMjcKCS8vIHRoaXMucmV3YXJkQWNjdW11bGF0b3IudmFsdWUgPSAwCglieXRlIDB4NzI2NTc3NjE3MjY0NDE2MzYzNzU2ZDc1NmM2MTc0NmY3MiAvLyAicmV3YXJkQWNjdW11bGF0b3IiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMjgKCS8vIHRoaXMud2VpZ2h0ZWRNb3ZpbmdBdmVyYWdlLnZhbHVlID0gMCBhcyB1aW50MTI4CglieXRlIDB4NjU3NzZkNjEgLy8gImV3bWEiCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIGdhcygpdm9pZAoqYWJpX3JvdXRlX2dhczoKCS8vIGV4ZWN1dGUgZ2FzKCl2b2lkCgljYWxsc3ViIGdhcwoJaW50IDEKCXJldHVybgoKLy8gZ2FzKCk6IHZvaWQKLy8KLy8gZ2FzIGlzIGEgZHVtbXkgbm8tb3AgY2FsbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBvb2wtdXAgcmVzb3VyY2UgcmVmZXJlbmNlcyBhbmQgb3Bjb2RlIGNvc3QKZ2FzOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGNvc3RGb3JCb3hTdG9yYWdlKHRvdGFsTnVtQnl0ZXM6IHVpbnQ2NCk6IHVpbnQ2NApjb3N0Rm9yQm94U3RvcmFnZToKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE0MAoJLy8gcmV0dXJuIFNDQk9YX1BFUkJPWCArIHRvdGFsTnVtQnl0ZXMgKiBTQ0JPWF9QRVJCWVRFCglpbnQgMjUwMAoJZnJhbWVfZGlnIC0xIC8vIHRvdGFsTnVtQnl0ZXM6IHVpbnQ2NAoJaW50IDQwMAoJKgoJKwoJcmV0c3ViCgovLyBpbml0U3RvcmFnZShwYXkpdm9pZAoqYWJpX3JvdXRlX2luaXRTdG9yYWdlOgoJLy8gbWJyUGF5bWVudDogcGF5Cgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBwYXkKCT09CgoJLy8gYXJndW1lbnQgMCAobWJyUGF5bWVudCkgZm9yIGluaXRTdG9yYWdlIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgaW5pdFN0b3JhZ2UocGF5KXZvaWQKCWNhbGxzdWIgaW5pdFN0b3JhZ2UKCWludCAxCglyZXR1cm4KCi8vIGluaXRTdG9yYWdlKG1iclBheW1lbnQ6IFBheVR4bik6IHZvaWQKLy8KLy8gQ2FsbGVkIGFmdGVyIHdlJ3JlIGNyZWF0ZWQgYW5kIHRoZW4gZnVuZGVkLCBzbyB3ZSBjYW4gY3JlYXRlIG91ciBsYXJnZSBzdGFrZXJzIGxlZGdlciBzdG9yYWdlCi8vIENhbGxlciBoYXMgdG8gZ2V0IE1CUiBhbW91bnRzIGZyb20gVmFsaWRhdG9yUmVnaXN0cnkgdG8ga25vdyBob3cgbXVjaCB0byBmdW5kIHVzIHRvIGNvdmVyIHRoZSBib3ggc3RvcmFnZSBjb3N0Ci8vIElmIHRoaXMgaXMgcG9vbCAxIEFORCB0aGUgdmFsaWRhdG9yIGhhcyBzcGVjaWZpZWQgYSByZXdhcmQgdG9rZW4sIG9wdC1pbiB0byB0aGF0IHRva2VuCi8vIHNvIHRoYXQgdGhlIHZhbGlkYXRvciBjYW4gc2VlZCB0aGUgcG9vbCB3aXRoIGZ1dHVyZSByZXdhcmRzIG9mIHRoYXQgdG9rZW4uCi8vIEBwYXJhbSBtYnJQYXltZW50IHBheW1lbnQgZnJvbSBjYWxsZXIgd2hpY2ggY292ZXJzIG1iciBpbmNyZWFzZSBvZiBuZXcgc3Rha2luZyBwb29scycgc3RvcmFnZQppbml0U3RvcmFnZToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDMKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNTEKCS8vIGFzc2VydCghdGhpcy5zdGFrZXJzLmV4aXN0cywgJ3N0YWtpbmcgcG9vbCBhbHJlYWR5IGluaXRpYWxpemVkJykKCWJ5dGUgMHg3Mzc0NjE2YjY1NzI3MyAvLyAic3Rha2VycyIKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoKCS8vIHN0YWtpbmcgcG9vbCBhbHJlYWR5IGluaXRpYWxpemVkCglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNTQKCS8vIHZhbGlkYXRvckNvbmZpZyA9IHNlbmRNZXRob2RDYWxsPHR5cGVvZiBWYWxpZGF0b3JSZWdpc3RyeS5wcm90b3R5cGUuZ2V0VmFsaWRhdG9yQ29uZmlnPih7CgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZSwKCS8vICAgICAgICAgICAgIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgImdldFZhbGlkYXRvckNvbmZpZyh1aW50NjQpKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNTUKCS8vIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTU2CgkvLyBtZXRob2RBcmdzOiBbdGhpcy52YWxpZGF0b3JJZC52YWx1ZV0KCWJ5dGUgMHg3NjYxNmM2OTY0NjE3NDZmNzI0OTY0IC8vICJ2YWxpZGF0b3JJZCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCWl0eG4gTnVtTG9ncwoJaW50IDEKCS0KCWl0eG5hcyBMb2dzCglleHRyYWN0IDQgMAoJZnJhbWVfYnVyeSAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTU4CgkvLyBpc1Rva2VuRWxpZ2libGUgPSB2YWxpZGF0b3JDb25maWcucmV3YXJkVG9rZW5JZCAhPT0gMAoJZnJhbWVfZGlnIDAgLy8gdmFsaWRhdG9yQ29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMTUzIDgKCWJ0b2kKCWludCAwCgkhPQoJZnJhbWVfYnVyeSAxIC8vIGlzVG9rZW5FbGlnaWJsZTogYm9vbAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE1OQoJLy8gZXh0cmFNQlIgPSBpc1Rva2VuRWxpZ2libGUgJiYgdGhpcy5wb29sSWQudmFsdWUgPT09IDEgPyBBU1NFVF9IT0xESU5HX0ZFRSA6IDAKCWZyYW1lX2RpZyAxIC8vIGlzVG9rZW5FbGlnaWJsZTogYm9vbAoJZHVwCglieiAqc2tpcF9hbmQwCglieXRlIDB4NzA2ZjZmNmM0OTY0IC8vICJwb29sSWQiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCT09CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJaW50IDEwMDAwMAoJYiAqdGVybmFyeTBfZW5kCgoqdGVybmFyeTBfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkwX2VuZDoKCWZyYW1lX2J1cnkgMiAvLyBleHRyYU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTYwCgkvLyBQb29sSW5pdE1iciA9CgkvLyAgICAgICAgICAgICBBTEdPUkFORF9BQ0NPVU5UX01JTl9CQUxBTkNFICsKCS8vICAgICAgICAgICAgIGV4dHJhTUJSICsKCS8vICAgICAgICAgICAgIHRoaXMuY29zdEZvckJveFN0b3JhZ2UoNyAvKiAnc3Rha2VycycgbmFtZSAqLyArIGxlbjxTdGFrZWRJbmZvPigpICogTUFYX1NUQUtFUlNfUEVSX1BPT0wpCglpbnQgMTAwMDAwCglmcmFtZV9kaWcgMiAvLyBleHRyYU1CUjogdWludDY0CgkrCglpbnQgMTI4MDcKCWNhbGxzdWIgY29zdEZvckJveFN0b3JhZ2UKCSsKCWZyYW1lX2J1cnkgMyAvLyBQb29sSW5pdE1icjogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTY2CgkvLyB2ZXJpZnlQYXlUeG4obWJyUGF5bWVudCwgeyByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywgYW1vdW50OiBQb29sSW5pdE1iciB9KQoJLy8gdmVyaWZ5IHJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5bWVudDogUGF5VHhuCglndHhucyBSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJtYnJQYXltZW50IiwiZmllbGQiOiJyZWNlaXZlciIsImV4cGVjdGVkIjoidGhpcy5hcHAuYWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYW1vdW50CglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWZyYW1lX2RpZyAzIC8vIFBvb2xJbml0TWJyOiB1aW50NjQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJtYnJQYXltZW50IiwiZmllbGQiOiJhbW91bnQiLCJleHBlY3RlZCI6IlBvb2xJbml0TWJyIn0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE2NwoJLy8gdGhpcy5zdGFrZXJzLmNyZWF0ZSgpCglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCglpbnQgMTI4MDAKCWJveF9jcmVhdGUKCXBvcAoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNjkKCS8vIGlzVG9rZW5FbGlnaWJsZSAmJiB0aGlzLnBvb2xJZC52YWx1ZSA9PT0gMQoJZnJhbWVfZGlnIDEgLy8gaXNUb2tlbkVsaWdpYmxlOiBib29sCglkdXAKCWJ6ICpza2lwX2FuZDEKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJPT0KCSYmCgoqc2tpcF9hbmQxOgoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE3MQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICAgICAgICAgIHhmZXJBc3NldDogQXNzZXRJRC5mcm9tVWludDY0KHZhbGlkYXRvckNvbmZpZy5yZXdhcmRUb2tlbklkKSwKCS8vICAgICAgICAgICAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgICAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE3MgoJLy8geGZlckFzc2V0OiBBc3NldElELmZyb21VaW50NjQodmFsaWRhdG9yQ29uZmlnLnJld2FyZFRva2VuSWQpCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxNTMgOAoJYnRvaQoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNzMKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNzQKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjFfZW5kOgoJcmV0c3ViCgovLyBhZGRTdGFrZShwYXksYWRkcmVzcyl1aW50NjQKKmFiaV9yb3V0ZV9hZGRTdGFrZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3Rha2VyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHN0YWtlcikgZm9yIGFkZFN0YWtlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBzdGFrZWRBbW91bnRQYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAxIChzdGFrZWRBbW91bnRQYXltZW50KSBmb3IgYWRkU3Rha2UgbXVzdCBiZSBhIHBheSB0cmFuc2FjdGlvbgoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhZGRTdGFrZShwYXksYWRkcmVzcyl1aW50NjQKCWNhbGxzdWIgYWRkU3Rha2UKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhZGRTdGFrZShzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4sIHN0YWtlcjogQWRkcmVzcyk6IHVpbnQ2NAovLwovLyBBZGRzIHN0YWtlIHRvIHRoZSBnaXZlbiBhY2NvdW50LgovLyBDYW4gT05MWSBiZSBjYWxsZWQgYnkgdGhlIHZhbGlkYXRvciBjb250cmFjdCB0aGF0IGNyZWF0ZWQgdXMKLy8gTXVzdCByZWNlaXZlIHBheW1lbnQgZnJvbSB0aGUgdmFsaWRhdG9yIGNvbnRyYWN0IGZvciBhbW91bnQgYmVpbmcgc3Rha2VkLgovLwovLyBAcGFyYW0ge1BheVR4bn0gc3Rha2VkQW1vdW50UGF5bWVudCBwcmlvciBwYXltZW50IGNvbWluZyBmcm9tIHZhbGlkYXRvciBjb250cmFjdCB0byB1cyBvbiBiZWhhbGYgb2Ygc3Rha2VyLgovLyBAcGFyYW0ge0FkZHJlc3N9IHN0YWtlciAtIFRoZSBhY2NvdW50IGFkZGluZyBuZXcgc3Rha2UKLy8gQHRocm93cyB7RXJyb3J9IC0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzdGFraW5nIHBvb2wgaXMgZnVsbC4KLy8gQHJldHVybnMge3VpbnQ2NH0gbmV3ICdlbnRyeSByb3VuZCcgcm91bmQgbnVtYmVyIG9mIHN0YWtlIGFkZAphZGRTdGFrZToKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxOTAKCS8vIGFzc2VydCh0aGlzLnN0YWtlcnMuZXhpc3RzLCAnc3Rha2luZyBwb29sIG11c3QgYmUgaW5pdGlhbGl6ZWQgZmlyc3QnKQoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJYm94X2xlbgoJc3dhcAoJcG9wCgoJLy8gc3Rha2luZyBwb29sIG11c3QgYmUgaW5pdGlhbGl6ZWQgZmlyc3QKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE5MwoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgdGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZS5hZGRyZXNzLAoJLy8gICAgICAgICAgICAgJ3N0YWtlIGNhbiBvbmx5IGJlIGFkZGVkIHZpYSB0aGUgdmFsaWRhdG9yIGNvbnRyYWN0JywKCS8vICAgICAgICAgKQoJdHhuIFNlbmRlcgoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJPT0KCgkvLyBzdGFrZSBjYW4gb25seSBiZSBhZGRlZCB2aWEgdGhlIHZhbGlkYXRvciBjb250cmFjdAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTk3CgkvLyBhc3NlcnQoc3Rha2VyICE9PSBnbG9iYWxzLnplcm9BZGRyZXNzKQoJZnJhbWVfZGlnIC0yIC8vIHN0YWtlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjAwCgkvLyB0aGlzLmNoZWNrSWZCaW5DbG9zZWQoKQoJY2FsbHN1YiBjaGVja0lmQmluQ2xvc2VkCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjA0CgkvLyB2ZXJpZnlQYXlUeG4oc3Rha2VkQW1vdW50UGF5bWVudCwgewoJLy8gICAgICAgICAgICAgc2VuZGVyOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZS5hZGRyZXNzLAoJLy8gICAgICAgICAgICAgcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICAgICAgICBhbW91bnQ6IHN0YWtlZEFtb3VudFBheW1lbnQuYW1vdW50LAoJLy8gICAgICAgICB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgU2VuZGVyCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJcG9wCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoic3Rha2VkQW1vdW50UGF5bWVudCIsImZpZWxkIjoic2VuZGVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZS5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIHZlcmlmeSByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgUmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoic3Rha2VkQW1vdW50UGF5bWVudCIsImZpZWxkIjoicmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgQW1vdW50CglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJzdGFrZWRBbW91bnRQYXltZW50IiwiZmllbGQiOiJhbW91bnQiLCJleHBlY3RlZCI6InN0YWtlZEFtb3VudFBheW1lbnQuYW1vdW50In0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjIxMwoJLy8gZW50cnlSb3VuZCA9IGdsb2JhbHMucm91bmQgKyBBTEdPUkFORF9TVEFLSU5HX0JMT0NLX0RFTEFZCglnbG9iYWwgUm91bmQKCWludCAzMjAKCSsKCWZyYW1lX2J1cnkgMCAvLyBlbnRyeVJvdW5kOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMTQKCS8vIGZpcnN0RW1wdHkgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIGZpcnN0RW1wdHk6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjIxNgoJLy8gdGhpcy50b3RhbEFsZ29TdGFrZWQudmFsdWUgKz0gc3Rha2VkQW1vdW50UGF5bWVudC5hbW91bnQKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCSsKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCXN3YXAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjE4CgkvLyByb3VuZHNMZWZ0SW5CaW4gPSB0aGlzLmJpblJvdW5kU3RhcnQudmFsdWUgKyB0aGlzLnJvdW5kc1BlckRheS52YWx1ZSAtIGdsb2JhbHMucm91bmQKCWJ5dGUgMHg2MjY5NmU1MjZmNzU2ZTY0NTM3NDYxNzI3NCAvLyAiYmluUm91bmRTdGFydCIKCWFwcF9nbG9iYWxfZ2V0CglieXRlIDB4NzI2Zjc1NmU2NDczNTA2NTcyNDQ2MTc5IC8vICJyb3VuZHNQZXJEYXkiCglhcHBfZ2xvYmFsX2dldAoJKwoJZ2xvYmFsIFJvdW5kCgktCglmcmFtZV9idXJ5IDIgLy8gcm91bmRzTGVmdEluQmluOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMTkKCS8vIHRoaXMuc3Rha2VBY2N1bXVsYXRvci52YWx1ZSA9CgkvLyAgICAgICAgICAgICB0aGlzLnN0YWtlQWNjdW11bGF0b3IudmFsdWUgKyAoc3Rha2VkQW1vdW50UGF5bWVudC5hbW91bnQgYXMgdWludDEyOCkgKiAocm91bmRzTGVmdEluQmluIGFzIHVpbnQxMjgpCglieXRlIDB4NzM3NDYxNmI2NTQxNjM2Mzc1NmQ3NTZjNjE3NDZmNzIgLy8gInN0YWtlQWNjdW11bGF0b3IiCglkdXAKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWl0b2IKCWZyYW1lX2RpZyAyIC8vIHJvdW5kc0xlZnRJbkJpbjogdWludDY0CglpdG9iCgliKgoJYisKCWR1cAoJYml0bGVuCglpbnQgMTI4Cgk8PQoKCS8vIHRoaXMuc3Rha2VBY2N1bXVsYXRvci52YWx1ZSArIChzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCBhcyB1aW50MTI4KSAqIChyb3VuZHNMZWZ0SW5CaW4gYXMgdWludDEyOCkgb3ZlcmZsb3dlZCAxMjggYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMTYKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjIzCgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3Rha2Vycy52YWx1ZS5sZW5ndGg7IGkgKz0gMSkKCWludCAwCglmcmFtZV9idXJ5IDMgLy8gaTogdWludDY0CgoqZm9yXzA6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMjMKCS8vIGkgPCB0aGlzLnN0YWtlcnMudmFsdWUubGVuZ3RoCglmcmFtZV9kaWcgMyAvLyBpOiB1aW50NjQKCWludCAyMDAKCTwKCWJ6ICpmb3JfMF9lbmQKCgkvLyAqaWYyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjI0CgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDMwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDMwMAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjIyNQoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMl9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMjcKCS8vIGNtcFN0YWtlciA9IGNsb25lKHRoaXMuc3Rha2Vycy52YWx1ZVtpXSkKCWZyYW1lX2RpZyAzIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA2NAoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjI4CgkvLyBjbXBTdGFrZXIuYWNjb3VudCA9PT0gc3Rha2VyCglmcmFtZV9kaWcgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMCAzMgoJZnJhbWVfZGlnIC0yIC8vIHN0YWtlcjogQWRkcmVzcwoJPT0KCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMzAKCS8vIGNtcFN0YWtlci5iYWxhbmNlICs9IHN0YWtlZEFtb3VudFBheW1lbnQuYW1vdW50CglmcmFtZV9kaWcgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWludCAzMiAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgQW1vdW50CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSA0IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjIzMQoJLy8gY21wU3Rha2VyLmVudHJ5Um91bmQgPSBlbnRyeVJvdW5kCglmcmFtZV9kaWcgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWludCA1NiAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgMCAvLyBlbnRyeVJvdW5kOiB1aW50NjQKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDQgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjM0CgkvLyB0aGlzLnN0YWtlcnMudmFsdWVbaV0gPSBjbXBTdGFrZXIKCWZyYW1lX2RpZyAzIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWZyYW1lX2RpZyA0IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMzYKCS8vIHJldHVybiBlbnRyeVJvdW5kCglmcmFtZV9kaWcgMCAvLyBlbnRyeVJvdW5kOiB1aW50NjQKCWIgKmFkZFN0YWtlKnJldHVybgoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjM4CgkvLyBmaXJzdEVtcHR5ID09PSAwICYmIGNtcFN0YWtlci5hY2NvdW50ID09PSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgMSAvLyBmaXJzdEVtcHR5OiB1aW50NjQKCWludCAwCgk9PQoJZHVwCglieiAqc2tpcF9hbmQyCglmcmFtZV9kaWcgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMCAzMgoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoJJiYKCipza2lwX2FuZDI6CglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjM5CgkvLyBmaXJzdEVtcHR5ID0gaSArIDEKCWZyYW1lX2RpZyAzIC8vIGk6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMSAvLyBmaXJzdEVtcHR5OiB1aW50NjQKCippZjRfZW5kOgoKKmZvcl8wX2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjIzCgkvLyBpICs9IDEKCWZyYW1lX2RpZyAzIC8vIGk6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMyAvLyBpOiB1aW50NjQKCWIgKmZvcl8wCgoqZm9yXzBfZW5kOgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjI0MwoJLy8gZmlyc3RFbXB0eSA9PT0gMAoJZnJhbWVfZGlnIDEgLy8gZmlyc3RFbXB0eTogdWludDY0CglpbnQgMAoJPT0KCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBTdGFraW5nIHBvb2wgZnVsbAoJZXJyCgoqaWY1X2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjI1MAoJLy8gYXNzZXJ0KHN0YWtlZEFtb3VudFBheW1lbnQuYW1vdW50ID49IHRoaXMubWluRW50cnlTdGFrZS52YWx1ZSwgJ211c3Qgc3Rha2UgYXQgbGVhc3QgdGhlIG1pbmltdW0gZm9yIHRoaXMgcG9vbCcpCglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWJ5dGUgMHg2ZDY5NmU0NTZlNzQ3Mjc5NTM3NDYxNmI2NSAvLyAibWluRW50cnlTdGFrZSIKCWFwcF9nbG9iYWxfZ2V0Cgk+PQoKCS8vIG11c3Qgc3Rha2UgYXQgbGVhc3QgdGhlIG1pbmltdW0gZm9yIHRoaXMgcG9vbAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjUyCgkvLyBhc3NlcnQodGhpcy5zdGFrZXJzLnZhbHVlW2ZpcnN0RW1wdHkgLSAxXS5hY2NvdW50ID09PSBnbG9iYWxzLnplcm9BZGRyZXNzKQoJZnJhbWVfZGlnIDEgLy8gZmlyc3RFbXB0eTogdWludDY0CglpbnQgMQoJLQoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCAwCgkrCglpbnQgMzIKCWJ5dGUgMHg3Mzc0NjE2YjY1NzI3MyAvLyAic3Rha2VycyIKCWNvdmVyIDIKCWJveF9leHRyYWN0CglnbG9iYWwgWmVyb0FkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyNTMKCS8vIHRoaXMuc3Rha2Vycy52YWx1ZVtmaXJzdEVtcHR5IC0gMV0gPSB7CgkvLyAgICAgICAgICAgICBhY2NvdW50OiBzdGFrZXIsCgkvLyAgICAgICAgICAgICBiYWxhbmNlOiBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCwKCS8vICAgICAgICAgICAgIHRvdGFsUmV3YXJkZWQ6IDAsCgkvLyAgICAgICAgICAgICByZXdhcmRUb2tlbkJhbGFuY2U6IDAsCgkvLyAgICAgICAgICAgICBlbnRyeVJvdW5kOiBlbnRyeVJvdW5kLAoJLy8gICAgICAgICB9CglmcmFtZV9kaWcgMSAvLyBmaXJzdEVtcHR5OiB1aW50NjQKCWludCAxCgktCglpbnQgNjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJZnJhbWVfZGlnIC0yIC8vIHN0YWtlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgQW1vdW50CglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCgljb25jYXQKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCgljb25jYXQKCWZyYW1lX2RpZyAwIC8vIGVudHJ5Um91bmQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0CglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjI2MAoJLy8gdGhpcy5udW1TdGFrZXJzLnZhbHVlICs9IDEKCWJ5dGUgMHg2ZTc1NmQ1Mzc0NjE2YjY1NzI3MyAvLyAibnVtU3Rha2VycyIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJKwoJYnl0ZSAweDZlNzU2ZDUzNzQ2MTZiNjU3MjczIC8vICJudW1TdGFrZXJzIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyNjEKCS8vIHJldHVybiBlbnRyeVJvdW5kCglmcmFtZV9kaWcgMCAvLyBlbnRyeVJvdW5kOiB1aW50NjQKCiphZGRTdGFrZSpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA0CglyZXRzdWIKCi8vIHJlbW92ZVN0YWtlKGFkZHJlc3MsdWludDY0KXZvaWQKKmFiaV9yb3V0ZV9yZW1vdmVTdGFrZToKCS8vIGFtb3VudFRvVW5zdGFrZTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gc3Rha2VyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDEgKHN0YWtlcikgZm9yIHJlbW92ZVN0YWtlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIHJlbW92ZVN0YWtlKGFkZHJlc3MsdWludDY0KXZvaWQKCWNhbGxzdWIgcmVtb3ZlU3Rha2UKCWludCAxCglyZXR1cm4KCi8vIHJlbW92ZVN0YWtlKHN0YWtlcjogQWRkcmVzcywgYW1vdW50VG9VbnN0YWtlOiB1aW50NjQpOiB2b2lkCi8vCi8vIFJlbW92ZXMgc3Rha2Ugb24gYmVoYWxmIG9mIGNhbGxlciAocmVtb3Zpbmcgb3duIHN0YWtlKS4gIElmIGFueSB0b2tlbiByZXdhcmRzIGV4aXN0LCB0aG9zZSBhcmUgYWx3YXlzIHNlbnQgaW4KLy8gZnVsbC4gQWxzbyBub3RpZmllcyB0aGUgdmFsaWRhdG9yIGNvbnRyYWN0IGZvciB0aGlzIHBvb2xzIHZhbGlkYXRvciBvZiB0aGUgc3Rha2VyIC8gYmFsYW5jZSBjaGFuZ2VzLgovLwovLyBAcGFyYW0ge0FkZHJlc3N9IHN0YWtlciAtIGFjY291bnQgdG8gcmVtb3ZlLiAgbm9ybWFsbHkgc2FtZSBhcyBzZW5kZXIsIGJ1dCB0aGUgdmFsaWRhdG9yIG93bmVyIG9yIG1hbmFnZXIgY2FuIGFsc28gY2FsbAovLyB0aGlzIHRvIHJlbW92ZSB0aGUgc3BlY2lmaWVkIHN0YWtlciBleHBsaWNpdGx5LiBUaGUgcmVtb3ZlZCBzdGFrZSBNVVNUIG9ubHkgZ28gdG8gdGhlIHN0YWtlciBvZiBjb3Vyc2UuICBUaGlzIGlzCi8vIHNvIGEgdmFsaWRhdG9yIGNhbiBzaHV0IGRvd24gYSBwb29vbCBhbmQgcmVmdW5kIHRoZSBzdGFrZXJzLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBraWNrIG91dCBzdGFrZXJzIHdobyBubyBsb25nZXIKLy8gbWVldCB0aGUgZ2F0aW5nIHJlcXVpcmVtZW50cyAoZGV0ZXJtaW5lZCBieSB0aGUgbm9kZSBkYWVtb24pLgovLyBAcGFyYW0ge3VpbnQ2NH0gYW1vdW50VG9VbnN0YWtlIC0gVGhlIGFtb3VudCBvZiBzdGFrZSB0byBiZSByZW1vdmVkLiAgU3BlY2lmeSAwIHRvIHJlbW92ZSBhbGwgc3Rha2UuCi8vIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYWNjb3VudCBoYXMgaW5zdWZmaWNpZW50IGJhbGFuY2Ugb3IgaWYgdGhlIGFjY291bnQgaXMgbm90IGZvdW5kLgpyZW1vdmVTdGFrZToKCXByb3RvIDIgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDYKCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mjc4CgkvLyBzdGFrZXIgIT09IHRoaXMudHhuLnNlbmRlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJdHhuIFNlbmRlcgoJIT0KCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyNzkKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgICAgICB0aGlzLmlzT3duZXJPck1hbmFnZXJDYWxsZXIoKSwKCS8vICAgICAgICAgICAgICAgICAnSWYgc3Rha2VyIGlzIG5vdCBzZW5kZXIgaW4gcmVtb3ZlU3Rha2UgY2FsbCwgdGhlbiBzZW5kZXIgTVVTVCBiZSBvd25lciBvciBtYW5hZ2VyIG9mIHZhbGlkYXRvcicsCgkvLyAgICAgICAgICAgICApCgljYWxsc3ViIGlzT3duZXJPck1hbmFnZXJDYWxsZXIKCgkvLyBJZiBzdGFrZXIgaXMgbm90IHNlbmRlciBpbiByZW1vdmVTdGFrZSBjYWxsLCB0aGVuIHNlbmRlciBNVVNUIGJlIG93bmVyIG9yIG1hbmFnZXIgb2YgdmFsaWRhdG9yCglhc3NlcnQKCippZjZfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mjg1CgkvLyB0aGlzLmNoZWNrSWZCaW5DbG9zZWQoKQoJY2FsbHN1YiBjaGVja0lmQmluQ2xvc2VkCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mjg3CgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3Rha2Vycy52YWx1ZS5sZW5ndGg7IGkgKz0gMSkKCWludCAwCglmcmFtZV9idXJ5IDAgLy8gaTogdWludDY0CgoqZm9yXzE6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyODcKCS8vIGkgPCB0aGlzLnN0YWtlcnMudmFsdWUubGVuZ3RoCglmcmFtZV9kaWcgMCAvLyBpOiB1aW50NjQKCWludCAyMDAKCTwKCWJ6ICpmb3JfMV9lbmQKCgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mjg4CgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDMwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDMwMAoJPAoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjI4OQoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyOTEKCS8vIGNtcFN0YWtlciA9IGNsb25lKHRoaXMuc3Rha2Vycy52YWx1ZVtpXSkKCWZyYW1lX2RpZyAwIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA2NAoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjkyCgkvLyBjbXBTdGFrZXIuYWNjb3VudCA9PT0gc3Rha2VyCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMCAzMgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJPT0KCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjkzCgkvLyBhbW91bnRUb1Vuc3Rha2UgPT09IDAKCWZyYW1lX2RpZyAtMiAvLyBhbW91bnRUb1Vuc3Rha2U6IHVpbnQ2NAoJaW50IDAKCT09CglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mjk1CgkvLyBhbW91bnRUb1Vuc3Rha2UgPSBjbXBTdGFrZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDMyIDgKCWJ0b2kKCWZyYW1lX2J1cnkgLTIgLy8gYW1vdW50VG9VbnN0YWtlOiB1aW50NjQKCippZjlfZW5kOgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyOTcKCS8vIGNtcFN0YWtlci5iYWxhbmNlIDwgYW1vdW50VG9VbnN0YWtlCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJZnJhbWVfZGlnIC0yIC8vIGFtb3VudFRvVW5zdGFrZTogdWludDY0Cgk8CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBJbnN1ZmZpY2llbnQgYmFsYW5jZQoJZXJyCgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMDAKCS8vIGNtcFN0YWtlci5iYWxhbmNlIC09IGFtb3VudFRvVW5zdGFrZQoJZnJhbWVfZGlnIDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglpbnQgMzIgLy8gaGVhZE9mZnNldAoJZnJhbWVfZGlnIDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDMyIDgKCWJ0b2kKCWZyYW1lX2RpZyAtMiAvLyBhbW91bnRUb1Vuc3Rha2U6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMDEKCS8vIHRoaXMudG90YWxBbGdvU3Rha2VkLnZhbHVlIC09IGFtb3VudFRvVW5zdGFrZQoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJYXBwX2dsb2JhbF9nZXQKCWZyYW1lX2RpZyAtMiAvLyBhbW91bnRUb1Vuc3Rha2U6IHVpbnQ2NAoJLQoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMDMKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IDAKCWludCAwCglmcmFtZV9idXJ5IDIgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjMwNAoJLy8gY21wU3Rha2VyLnJld2FyZFRva2VuQmFsYW5jZSA+IDAKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglpbnQgMAoJPgoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMDYKCS8vIHRoaXMucG9vbElkLnZhbHVlID09PSAxCglieXRlIDB4NzA2ZjZmNmM0OTY0IC8vICJwb29sSWQiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCT09CglieiAqaWYxMl9lbHNlCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzA3CgkvLyB2YWxpZGF0b3JDb25maWcgPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLmdldFZhbGlkYXRvckNvbmZpZz4oewoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJnZXRWYWxpZGF0b3JDb25maWcodWludDY0KSh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzA4CgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjMwOQoJLy8gbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMyAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjMxNQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhmZXJBc3NldDogQXNzZXRJRC5mcm9tVWludDY0KHZhbGlkYXRvckNvbmZpZy5yZXdhcmRUb2tlbklkKSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldFJlY2VpdmVyOiBzdGFrZXIsCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXRBbW91bnQ6IGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UsCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzE2CgkvLyB4ZmVyQXNzZXQ6IEFzc2V0SUQuZnJvbVVpbnQ2NCh2YWxpZGF0b3JDb25maWcucmV3YXJkVG9rZW5JZCkKCWZyYW1lX2RpZyAzIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE1MyA4CglidG9pCglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjMxNwoJLy8gYXNzZXRSZWNlaXZlcjogc3Rha2VyCglmcmFtZV9kaWcgLTEgLy8gc3Rha2VyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMTgKCS8vIGFzc2V0QW1vdW50OiBjbXBTdGFrZXIucmV3YXJkVG9rZW5CYWxhbmNlCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgNDggOAoJYnRvaQoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMjAKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglmcmFtZV9idXJ5IDIgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMjEKCS8vIGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UgPSAwCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglyZXBsYWNlMiA0OAoJZnJhbWVfYnVyeSAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYiAqaWYxMl9lbmQKCippZjEyX2Vsc2U6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMjYKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglmcmFtZV9idXJ5IDIgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMjcKCS8vIGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UgPSAwCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglyZXBsYWNlMiA0OAoJZnJhbWVfYnVyeSAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKKmlmMTJfZW5kOgoKKmlmMTFfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzMyCgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICAgICAgICAgIGNtcFN0YWtlci5iYWxhbmNlID09PSAwIHx8IGNtcFN0YWtlci5iYWxhbmNlID49IHRoaXMubWluRW50cnlTdGFrZS52YWx1ZSwKCS8vICAgICAgICAgICAgICAgICAgICAgJ2Nhbm5vdCByZWR1Y2UgYmFsYW5jZSBiZWxvdyBtaW5pbXVtIGFsbG93ZWQgc3Rha2UgdW5sZXNzIGFsbCBpcyByZW1vdmVkJywKCS8vICAgICAgICAgICAgICAgICApCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJaW50IDAKCT09CglkdXAKCWJueiAqc2tpcF9vcjAKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAzMiA4CglidG9pCglieXRlIDB4NmQ2OTZlNDU2ZTc0NzI3OTUzNzQ2MTZiNjUgLy8gIm1pbkVudHJ5U3Rha2UiCglhcHBfZ2xvYmFsX2dldAoJPj0KCXx8Cgoqc2tpcF9vcjA6CgkvLyBjYW5ub3QgcmVkdWNlIGJhbGFuY2UgYmVsb3cgbWluaW11bSBhbGxvd2VkIHN0YWtlIHVubGVzcyBhbGwgaXMgcmVtb3ZlZAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzQwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogYW1vdW50VG9VbnN0YWtlLAoJLy8gICAgICAgICAgICAgICAgICAgICByZWNlaXZlcjogc3Rha2VyLAoJLy8gICAgICAgICAgICAgICAgICAgICBub3RlOiAndW5zdGFrZWQnLAoJLy8gICAgICAgICAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzQxCgkvLyBhbW91bnQ6IGFtb3VudFRvVW5zdGFrZQoJZnJhbWVfZGlnIC0yIC8vIGFtb3VudFRvVW5zdGFrZTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM0MgoJLy8gcmVjZWl2ZXI6IHN0YWtlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM0MwoJLy8gbm90ZTogJ3Vuc3Rha2VkJwoJYnl0ZSAweDc1NmU3Mzc0NjE2YjY1NjQgLy8gInVuc3Rha2VkIgoJaXR4bl9maWVsZCBOb3RlCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM0NQoJLy8gc3Rha2VyUmVtb3ZlZCA9IGZhbHNlCglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIHN0YWtlclJlbW92ZWQ6IGJvb2wKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM0NgoJLy8gY21wU3Rha2VyLmJhbGFuY2UgPT09IDAKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAzMiA4CglidG9pCglpbnQgMAoJPT0KCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM0OAoJLy8gdGhpcy5udW1TdGFrZXJzLnZhbHVlIC09IDEKCWJ5dGUgMHg2ZTc1NmQ1Mzc0NjE2YjY1NzI3MyAvLyAibnVtU3Rha2VycyIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJLQoJYnl0ZSAweDZlNzU2ZDUzNzQ2MTZiNjU3MjczIC8vICJudW1TdGFrZXJzIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozNDkKCS8vIGNtcFN0YWtlci5hY2NvdW50ID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglpbnQgMAoJZ2xvYmFsIFplcm9BZGRyZXNzCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM1MAoJLy8gY21wU3Rha2VyLnRvdGFsUmV3YXJkZWQgPSAwCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglyZXBsYWNlMiA0MAoJZnJhbWVfYnVyeSAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM1MQoJLy8gY21wU3Rha2VyLnJld2FyZFRva2VuQmFsYW5jZSA9IDAKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCXJlcGxhY2UyIDQ4CglmcmFtZV9idXJ5IDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzUyCgkvLyBzdGFrZXJSZW1vdmVkID0gdHJ1ZQoJaW50IDEKCWZyYW1lX2J1cnkgNCAvLyBzdGFrZXJSZW1vdmVkOiBib29sCgoqaWYxM19lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozNTUKCS8vIHRoaXMuc3Rha2Vycy52YWx1ZVtpXSA9IGNtcFN0YWtlcgoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpbnQgNjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJZnJhbWVfZGlnIDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM1NwoJLy8gcm91bmRzTGVmdEluQmluID0gdGhpcy5iaW5Sb3VuZFN0YXJ0LnZhbHVlICsgdGhpcy5yb3VuZHNQZXJEYXkudmFsdWUgLSBnbG9iYWxzLnJvdW5kCglieXRlIDB4NjI2OTZlNTI2Zjc1NmU2NDUzNzQ2MTcyNzQgLy8gImJpblJvdW5kU3RhcnQiCglhcHBfZ2xvYmFsX2dldAoJYnl0ZSAweDcyNmY3NTZlNjQ3MzUwNjU3MjQ0NjE3OSAvLyAicm91bmRzUGVyRGF5IgoJYXBwX2dsb2JhbF9nZXQKCSsKCWdsb2JhbCBSb3VuZAoJLQoJZnJhbWVfYnVyeSA1IC8vIHJvdW5kc0xlZnRJbkJpbjogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzU4CgkvLyBzdWJ0cmFjdEFtb3VudDogdWludDEyOCA9IChhbW91bnRUb1Vuc3Rha2UgYXMgdWludDEyOCkgKiAocm91bmRzTGVmdEluQmluIGFzIHVpbnQxMjgpCglmcmFtZV9kaWcgLTIgLy8gYW1vdW50VG9VbnN0YWtlOiB1aW50NjQKCWl0b2IKCWZyYW1lX2RpZyA1IC8vIHJvdW5kc0xlZnRJbkJpbjogdWludDY0CglpdG9iCgliKgoJZHVwCgliaXRsZW4KCWludCAxMjgKCTw9CgoJLy8gKGFtb3VudFRvVW5zdGFrZSBhcyB1aW50MTI4KSAqIChyb3VuZHNMZWZ0SW5CaW4gYXMgdWludDEyOCkgb3ZlcmZsb3dlZCAxMjggYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMTYKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWZyYW1lX2J1cnkgNiAvLyBzdWJ0cmFjdEFtb3VudDogdWludDEyOAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM1OQoJLy8gdGhpcy5zdGFrZUFjY3VtdWxhdG9yLnZhbHVlID0gdGhpcy5zdGFrZUFjY3VtdWxhdG9yLnZhbHVlIC0gc3VidHJhY3RBbW91bnQKCWJ5dGUgMHg3Mzc0NjE2YjY1NDE2MzYzNzU2ZDc1NmM2MTc0NmY3MiAvLyAic3Rha2VBY2N1bXVsYXRvciIKCWR1cAoJYXBwX2dsb2JhbF9nZXQKCWZyYW1lX2RpZyA2IC8vIHN1YnRyYWN0QW1vdW50OiB1aW50MTI4CgliLQoJZHVwCgliaXRsZW4KCWludCAxMjgKCTw9CgoJLy8gdGhpcy5zdGFrZUFjY3VtdWxhdG9yLnZhbHVlIC0gc3VidHJhY3RBbW91bnQgb3ZlcmZsb3dlZCAxMjggYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMTYKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzY0CgkvLyBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLnN0YWtlUmVtb3ZlZD4oewoJLy8gICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZSwKCS8vICAgICAgICAgICAgICAgICAgICAgbWV0aG9kQXJnczogWwoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogdGhpcy52YWxpZGF0b3JJZC52YWx1ZSwgcG9vbElkOiB0aGlzLnBvb2xJZC52YWx1ZSwgcG9vbEFwcElkOiB0aGlzLmFwcC5pZCB9LAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VyLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50VG9VbnN0YWtlLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VyUmVtb3ZlZCwKCS8vICAgICAgICAgICAgICAgICAgICAgXSwKCS8vICAgICAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAic3Rha2VSZW1vdmVkKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYWRkcmVzcyx1aW50NjQsdWludDY0LGJvb2wpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzY1CgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM2NgoJLy8gbWV0aG9kQXJnczogWwoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogdGhpcy52YWxpZGF0b3JJZC52YWx1ZSwgcG9vbElkOiB0aGlzLnBvb2xJZC52YWx1ZSwgcG9vbEFwcElkOiB0aGlzLmFwcC5pZCB9LAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VyLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50VG9VbnN0YWtlLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VyUmVtb3ZlZCwKCS8vICAgICAgICAgICAgICAgICAgICAgXQoJYnl0ZSAweDc2NjE2YzY5NjQ2MTc0NmY3MjQ5NjQgLy8gInZhbGlkYXRvcklkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCgljb25jYXQKCXR4bmEgQXBwbGljYXRpb25zIDAKCWl0b2IKCWNvbmNhdAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTIgLy8gYW1vdW50VG9VbnN0YWtlOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMiAvLyBhbW91bnRSZXdhcmRUb2tlblJlbW92ZWQ6IHVpbnQ2NAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyA0IC8vIHN0YWtlclJlbW92ZWQ6IGJvb2wKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozNzQKCS8vIHJldHVybgoJcmV0c3ViCgoqaWY4X2VuZDoKCipmb3JfMV9jb250aW51ZToKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjI4NwoJLy8gaSArPSAxCglmcmFtZV9kaWcgMCAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDAgLy8gaTogdWludDY0CgliICpmb3JfMQoKKmZvcl8xX2VuZDoKCS8vIGFjY291bnQgbm90IGZvdW5kCgllcnIKCXJldHN1YgoKLy8gY2xhaW1Ub2tlbnMoKXZvaWQKKmFiaV9yb3V0ZV9jbGFpbVRva2VuczoKCS8vIGV4ZWN1dGUgY2xhaW1Ub2tlbnMoKXZvaWQKCWNhbGxzdWIgY2xhaW1Ub2tlbnMKCWludCAxCglyZXR1cm4KCi8vIGNsYWltVG9rZW5zKCk6IHZvaWQKLy8KLy8gQ2xhaW1zIGFsbCB0aGUgYXZhaWxhYmxlIHJld2FyZCB0b2tlbnMgYSBzdGFrZXIgaGFzIGF2YWlsYWJsZSwgc2VuZGluZyB0aGVpciBlbnRpcmUgYmFsYW5jZSB0byB0aGUgc3Rha2VyIGZyb20KLy8gcG9vbCAxIChlaXRoZXIgZGlyZWN0bHksIG9yIHZpYSB2YWxpZGF0b3ItPnBvb2wxIHRvIHBheSBpdCBvdXQpCi8vIEFsc28gbm90aWZpZXMgdGhlIHZhbGlkYXRvciBjb250cmFjdCBmb3IgdGhpcyBwb29scyB2YWxpZGF0b3Igb2YgdGhlIHN0YWtlciAvIGJhbGFuY2UgY2hhbmdlcy4KY2xhaW1Ub2tlbnM6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mzg5CgkvLyBzdGFrZXIgPSB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWZyYW1lX2J1cnkgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozOTEKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGFrZXJzLnZhbHVlLmxlbmd0aDsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMSAvLyBpOiB1aW50NjQKCipmb3JfMjoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM5MQoJLy8gaSA8IHRoaXMuc3Rha2Vycy52YWx1ZS5sZW5ndGgKCWZyYW1lX2RpZyAxIC8vIGk6IHVpbnQ2NAoJaW50IDIwMAoJPAoJYnogKmZvcl8yX2VuZAoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzkyCgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDMwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDMwMAoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzkzCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozOTUKCS8vIGNtcFN0YWtlciA9IGNsb25lKHRoaXMuc3Rha2Vycy52YWx1ZVtpXSkKCWZyYW1lX2RpZyAxIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA2NAoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgMiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyAqaWYxNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM5NgoJLy8gY21wU3Rha2VyLmFjY291bnQgPT09IHN0YWtlcgoJZnJhbWVfZGlnIDIgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDAgMzIKCWZyYW1lX2RpZyAwIC8vIHN0YWtlcjogYWRkcmVzcwoJPT0KCWJ6ICppZjE1X2VuZAoKCS8vICppZjE1X2NvbnNlcXVlbnQKCS8vICppZjE2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mzk3CgkvLyBjbXBTdGFrZXIucmV3YXJkVG9rZW5CYWxhbmNlID09PSAwCglmcmFtZV9kaWcgMiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgNDggOAoJYnRvaQoJaW50IDAKCT09CglieiAqaWYxNl9lbmQKCgkvLyAqaWYxNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozOTgKCS8vIHJldHVybgoJcmV0c3ViCgoqaWYxNl9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MDAKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IDAKCWludCAwCglmcmFtZV9idXJ5IDMgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyAqaWYxN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQwMgoJLy8gdGhpcy5wb29sSWQudmFsdWUgPT09IDEKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJPT0KCWJ6ICppZjE3X2Vsc2UKCgkvLyAqaWYxN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MDMKCS8vIHZhbGlkYXRvckNvbmZpZyA9IHNlbmRNZXRob2RDYWxsPHR5cGVvZiBWYWxpZGF0b3JSZWdpc3RyeS5wcm90b3R5cGUuZ2V0VmFsaWRhdG9yQ29uZmlnPih7CgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXSwKCS8vICAgICAgICAgICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgImdldFZhbGlkYXRvckNvbmZpZyh1aW50NjQpKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MDQKCS8vIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDA1CgkvLyBtZXRob2RBcmdzOiBbdGhpcy52YWxpZGF0b3JJZC52YWx1ZV0KCWJ5dGUgMHg3NjYxNmM2OTY0NjE3NDZmNzI0OTY0IC8vICJ2YWxpZGF0b3JJZCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCWl0eG4gTnVtTG9ncwoJaW50IDEKCS0KCWl0eG5hcyBMb2dzCglleHRyYWN0IDQgMAoJZnJhbWVfYnVyeSA0IC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDEwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgICAgICAgICAgICAgICAgICB4ZmVyQXNzZXQ6IEFzc2V0SUQuZnJvbVVpbnQ2NCh2YWxpZGF0b3JDb25maWcucmV3YXJkVG9rZW5JZCksCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldFJlY2VpdmVyOiBzdGFrZXIsCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldEFtb3VudDogY21wU3Rha2VyLnJld2FyZFRva2VuQmFsYW5jZSwKCS8vICAgICAgICAgICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQxMQoJLy8geGZlckFzc2V0OiBBc3NldElELmZyb21VaW50NjQodmFsaWRhdG9yQ29uZmlnLnJld2FyZFRva2VuSWQpCglmcmFtZV9kaWcgNCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxNTMgOAoJYnRvaQoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MTIKCS8vIGFzc2V0UmVjZWl2ZXI6IHN0YWtlcgoJZnJhbWVfZGlnIDAgLy8gc3Rha2VyOiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MTMKCS8vIGFzc2V0QW1vdW50OiBjbXBTdGFrZXIucmV3YXJkVG9rZW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgNDggOAoJYnRvaQoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MTUKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglmcmFtZV9idXJ5IDMgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MTYKCS8vIGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UgPSAwCglmcmFtZV9kaWcgMiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglyZXBsYWNlMiA0OAoJZnJhbWVfYnVyeSAyIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYiAqaWYxN19lbmQKCippZjE3X2Vsc2U6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MjEKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglmcmFtZV9idXJ5IDMgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MjIKCS8vIGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UgPSAwCglmcmFtZV9kaWcgMiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglyZXBsYWNlMiA0OAoJZnJhbWVfYnVyeSAyIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKKmlmMTdfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDI2CgkvLyB0aGlzLnN0YWtlcnMudmFsdWVbaV0gPSBjbXBTdGFrZXIKCWZyYW1lX2RpZyAxIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWZyYW1lX2RpZyAyIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MzEKCS8vIHNlbmRNZXRob2RDYWxsPHR5cGVvZiBWYWxpZGF0b3JSZWdpc3RyeS5wcm90b3R5cGUuc3Rha2VSZW1vdmVkPih7CgkvLyAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgICAgICAgICBtZXRob2RBcmdzOiBbCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICB7IGlkOiB0aGlzLnZhbGlkYXRvcklkLnZhbHVlLCBwb29sSWQ6IHRoaXMucG9vbElkLnZhbHVlLCBwb29sQXBwSWQ6IHRoaXMuYXBwLmlkIH0sCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdGFrZXIsCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvLyBubyBhbGdvIHJlbW92ZWQKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAvLyBzdGFrZXIgaXNuJ3QgYmVpbmcgcmVtb3ZlZC4KCS8vICAgICAgICAgICAgICAgICAgICAgXSwKCS8vICAgICAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAic3Rha2VSZW1vdmVkKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYWRkcmVzcyx1aW50NjQsdWludDY0LGJvb2wpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDMyCgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQzMwoJLy8gbWV0aG9kQXJnczogWwoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogdGhpcy52YWxpZGF0b3JJZC52YWx1ZSwgcG9vbElkOiB0aGlzLnBvb2xJZC52YWx1ZSwgcG9vbEFwcElkOiB0aGlzLmFwcC5pZCB9LAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VyLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgMCwgLy8gbm8gYWxnbyByZW1vdmVkCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnRSZXdhcmRUb2tlblJlbW92ZWQsCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgLy8gc3Rha2VyIGlzbid0IGJlaW5nIHJlbW92ZWQuCgkvLyAgICAgICAgICAgICAgICAgICAgIF0KCWJ5dGUgMHg3NjYxNmM2OTY0NjE3NDZmNzI0OTY0IC8vICJ2YWxpZGF0b3JJZCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglieXRlIDB4NzA2ZjZmNmM0OTY0IC8vICJwb29sSWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJY29uY2F0Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglpdG9iCgljb25jYXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAzIC8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJaW50IDAKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0NDEKCS8vIHJldHVybgoJcmV0c3ViCgoqaWYxNV9lbmQ6CgoqZm9yXzJfY29udGludWU6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozOTEKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDEgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAxIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzIKCipmb3JfMl9lbmQ6CgkvLyBhY2NvdW50IG5vdCBmb3VuZAoJZXJyCglyZXRzdWIKCi8vIGdldFN0YWtlckluZm8oYWRkcmVzcykoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCiphYmlfcm91dGVfZ2V0U3Rha2VySW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3Rha2VyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHN0YWtlcikgZm9yIGdldFN0YWtlckluZm8gbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgZ2V0U3Rha2VySW5mbyhhZGRyZXNzKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgZ2V0U3Rha2VySW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGdldFN0YWtlckluZm8oc3Rha2VyOiBBZGRyZXNzKTogU3Rha2VkSW5mbwovLwovLyBSZXRyaWV2ZXMgdGhlIHN0YWtlZCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBzdGFrZXIuCi8vCi8vIEBwYXJhbSB7QWRkcmVzc30gc3Rha2VyIC0gVGhlIGFkZHJlc3Mgb2YgdGhlIHN0YWtlci4KLy8gQHJldHVybnMge1N0YWtlZEluZm99IC0gVGhlIHN0YWtlZCBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIHN0YWtlci4KLy8gQHRocm93cyB7RXJyb3J9IC0gSWYgdGhlIHN0YWtlcidzIGFjY291bnQgaXMgbm90IGZvdW5kLgpnZXRTdGFrZXJJbmZvOgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0NTYKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGFrZXJzLnZhbHVlLmxlbmd0aDsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMCAvLyBpOiB1aW50NjQKCipmb3JfMzoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQ1NgoJLy8gaSA8IHRoaXMuc3Rha2Vycy52YWx1ZS5sZW5ndGgKCWZyYW1lX2RpZyAwIC8vIGk6IHVpbnQ2NAoJaW50IDIwMAoJPAoJYnogKmZvcl8zX2VuZAoKCS8vICppZjE4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDU3CgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDIwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDIwMAoJPAoJYnogKmlmMThfZW5kCgoJLy8gKmlmMThfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDU4CgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWYxOF9lbmQ6CgkvLyAqaWYxOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQ2MAoJLy8gdGhpcy5zdGFrZXJzLnZhbHVlW2ldLmFjY291bnQgPT09IHN0YWtlcgoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpbnQgNjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDAKCSsKCWludCAzMgoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZXI6IEFkZHJlc3MKCT09CglieiAqaWYxOV9lbmQKCgkvLyAqaWYxOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0NjEKCS8vIHJldHVybiB0aGlzLnN0YWtlcnMudmFsdWVbaV0KCWZyYW1lX2RpZyAwIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA2NAoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWIgKmdldFN0YWtlckluZm8qcmV0dXJuCgoqaWYxOV9lbmQ6CgoqZm9yXzNfY29udGludWU6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0NTYKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAwIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzMKCipmb3JfM19lbmQ6CgkvLyBhY2NvdW50IG5vdCBmb3VuZAoJZXJyCgoqZ2V0U3Rha2VySW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gcGF5VG9rZW5SZXdhcmQoYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQKKmFiaV9yb3V0ZV9wYXlUb2tlblJld2FyZDoKCS8vIGFtb3VudFRvU2VuZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgoJLy8gcmV3YXJkVG9rZW46IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHN0YWtlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAyIChzdGFrZXIpIGZvciBwYXlUb2tlblJld2FyZCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBwYXlUb2tlblJld2FyZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQpdm9pZAoJY2FsbHN1YiBwYXlUb2tlblJld2FyZAoJaW50IDEKCXJldHVybgoKLy8gcGF5VG9rZW5SZXdhcmQoc3Rha2VyOiBBZGRyZXNzLCByZXdhcmRUb2tlbjogdWludDY0LCBhbW91bnRUb1NlbmQ6IHVpbnQ2NCk6IHZvaWQKLy8KLy8gW0ludGVybmFsIHByb3RvY29sIG1ldGhvZF0gUmVtb3ZlIGEgc3BlY2lmaWVkIGFtb3VudCBvZiAnY29tbXVuaXR5IHRva2VuJyByZXdhcmRzIGZvciBhIHN0YWtlci4KLy8gVGhpcyBjYW4gT05MWSBiZSBjYWxsZWQgYnkgb3VyIHZhbGlkYXRvciBhbmQgb25seSBpZiB3ZSdyZSBwb29sIDEgLSB3aXRoIHRoZSB0b2tlbi4KLy8gTm90ZTogdGhpcyBjYW4gYWxzbyBiZSBjYWxsZWQgYnkgdmFsaWRhdG9yIGFzIHBhcnQgb2YgT1dORVIgd2FudGluZyB0byBzZW5kIHRoZSByZXdhcmQgdG9rZW5zCi8vIHNvbWV3aGVyZSBlbHNlIChpZSBpZiB0aGV5J3JlIHN1bnNldHRpbmcgdGhlaXIgdmFsaWRhdG9yIGFuZCBuZWVkIHRoZSByZXdhcmQgdG9rZW5zIGJhY2spLgovLyBJdCdzIHVwIHRvIHRoZSB2YWxpZGF0b3IgdG8gZW5zdXJlIHRoYXQgdGhlIGJhbGFuY2UgaW4gcmV3YXJkVG9rZW5IZWxkQmFjayBpcyBob25vcmVkLgovLyBAcGFyYW0gc3Rha2VyIC0gdGhlIHN0YWtlciBhY2NvdW50IHRvIHNlbmQgcmV3YXJkcyB0bwovLyBAcGFyYW0gcmV3YXJkVG9rZW4gLSBpZCBvZiByZXdhcmQgdG9rZW4gKHRvIGF2b2lkIHJlLWVudHJhbmN5IGluIGNhbGxpbmcgdmFsaWRhdG9yIGJhY2sgdG8gZ2V0IGlkKQovLyBAcGFyYW0gYW1vdW50VG9TZW5kIC0gYW1vdW50IHRvIHNlbmQgdGhlIHN0YWtlciAodGhlcmUgaXMgc2lnbmlmaWNhbnQgdHJ1c3QgaGVyZSghKSAtIGFsc28gd2h5IG9ubHkgdmFsaWRhdG9yIGNhbiBjYWxsIHVzCnBheVRva2VuUmV3YXJkOgoJcHJvdG8gMyAwCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDc5CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLmFkZHJlc3MsCgkvLyAgICAgICAgICAgICAndGhpcyBjYW4gb25seSBiZSBjYWxsZWQgdmlhIHRoZSB2YWxpZGF0b3IgY29udHJhY3QnLAoJLy8gICAgICAgICApCgl0eG4gU2VuZGVyCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJcG9wCgk9PQoKCS8vIHRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIHZpYSB0aGUgdmFsaWRhdG9yIGNvbnRyYWN0Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0ODMKCS8vIGFzc2VydCh0aGlzLnBvb2xJZC52YWx1ZSA9PT0gMSwgJ211c3QgYmUgcG9vbCAxIGluIG9yZGVyIHRvIGJlIGNhbGxlZCB0byBwYXkgb3V0IHRva2VuIHJld2FyZHMnKQoJYnl0ZSAweDcwNmY2ZjZjNDk2NCAvLyAicG9vbElkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgk9PQoKCS8vIG11c3QgYmUgcG9vbCAxIGluIG9yZGVyIHRvIGJlIGNhbGxlZCB0byBwYXkgb3V0IHRva2VuIHJld2FyZHMKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQ4NAoJLy8gYXNzZXJ0KHJld2FyZFRva2VuICE9PSAwLCAnY2FuIG9ubHkgY2xhaW0gdG9rZW4gcmV3YXJkcyBmcm9tIHZhbGlkYXRvciB0aGF0IGhhcyB0aGVtJykKCWZyYW1lX2RpZyAtMiAvLyByZXdhcmRUb2tlbjogdWludDY0CglpbnQgMAoJIT0KCgkvLyBjYW4gb25seSBjbGFpbSB0b2tlbiByZXdhcmRzIGZyb20gdmFsaWRhdG9yIHRoYXQgaGFzIHRoZW0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQ4NwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICAgICAgeGZlckFzc2V0OiBBc3NldElELmZyb21VaW50NjQocmV3YXJkVG9rZW4pLAoJLy8gICAgICAgICAgICAgYXNzZXRSZWNlaXZlcjogc3Rha2VyLAoJLy8gICAgICAgICAgICAgYXNzZXRBbW91bnQ6IGFtb3VudFRvU2VuZCwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQ4OAoJLy8geGZlckFzc2V0OiBBc3NldElELmZyb21VaW50NjQocmV3YXJkVG9rZW4pCglmcmFtZV9kaWcgLTIgLy8gcmV3YXJkVG9rZW46IHVpbnQ2NAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0ODkKCS8vIGFzc2V0UmVjZWl2ZXI6IHN0YWtlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDkwCgkvLyBhc3NldEFtb3VudDogYW1vdW50VG9TZW5kCglmcmFtZV9kaWcgLTMgLy8gYW1vdW50VG9TZW5kOiB1aW50NjQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFsZ29kVmVyKHN0cmluZyl2b2lkCiphYmlfcm91dGVfdXBkYXRlQWxnb2RWZXI6CgkvLyBhbGdvZFZlcjogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoKCS8vIGV4ZWN1dGUgdXBkYXRlQWxnb2RWZXIoc3RyaW5nKXZvaWQKCWNhbGxzdWIgdXBkYXRlQWxnb2RWZXIKCWludCAxCglyZXR1cm4KCi8vIHVwZGF0ZUFsZ29kVmVyKGFsZ29kVmVyOiBzdHJpbmcpOiB2b2lkCi8vCi8vIFVwZGF0ZSB0aGUgKGhvbm9yIHN5c3RlbSkgYWxnb2QgdmVyc2lvbiBmb3IgdGhlIG5vZGUgYXNzb2NpYXRlZCB0byB0aGlzIHBvb2wuICBUaGUgbm9kZSBtYW5hZ2VtZW50IGRhZW1vbgovLyBzaG91bGQgY29tcGFyZSBpdHMgY3VycmVudCBub2RlcyB2ZXJzaW9uIHRvIHRoZSB2ZXJzaW9uIHN0b3JlZCBpbiBnbG9iYWwgc3RhdGUsIHVwZGF0aW5nIHdoZW4gZGlmZmVyZW50LgovLyBUaGUgcmV0aSBub2RlIGRhZW1vbiBjb21wb3NlcyBpdHMgb3duIHZlcnNpb24gc3RyaW5nIHVzaW5nIGZvcm1hdDoKLy8ge21ham9yfS57bWlub3J9LntidWlsZH0ge2JyYW5jaH0gW3tjb21taXQgaGFzaH1dLAovLyBpZTogMy4yMi4wIHJlbC9zdGFibGUgWzZiNTA4OTc1XQovLyBbIE9OTFkgT1dORVIgT1IgTUFOQUdFUiBDQU4gQ0FMTCBdCi8vIEBwYXJhbSB7c3RyaW5nfSBhbGdvZFZlciAtIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFsZ29yYW5kIG5vZGUgZGFlbW9uIHZlcnNpb24gKHJldGkgbm9kZSBkYWVtb24gY29tcG9zZXMgaXRzIG93biBtZXRhIHZlcnNpb24pCnVwZGF0ZUFsZ29kVmVyOgoJcHJvdG8gMSAwCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTA0CgkvLyBhc3NlcnQodGhpcy5pc093bmVyT3JNYW5hZ2VyQ2FsbGVyKCksICdjYW4gb25seSBiZSBjYWxsZWQgYnkgb3duZXIgb3IgbWFuYWdlciBvZiB2YWxpZGF0b3InKQoJY2FsbHN1YiBpc093bmVyT3JNYW5hZ2VyQ2FsbGVyCgoJLy8gY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IG93bmVyIG9yIG1hbmFnZXIgb2YgdmFsaWRhdG9yCglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1MDUKCS8vIHRoaXMuYWxnb2RWZXIudmFsdWUgPSBhbGdvZFZlcgoJYnl0ZSAweDYxNmM2NzZmNjQ1NjY1NzIgLy8gImFsZ29kVmVyIgoJZnJhbWVfZGlnIC0xIC8vIGFsZ29kVmVyOiBzdHJpbmcKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIGVwb2NoQmFsYW5jZVVwZGF0ZSgpdm9pZAoqYWJpX3JvdXRlX2Vwb2NoQmFsYW5jZVVwZGF0ZToKCS8vIGV4ZWN1dGUgZXBvY2hCYWxhbmNlVXBkYXRlKCl2b2lkCgljYWxsc3ViIGVwb2NoQmFsYW5jZVVwZGF0ZQoJaW50IDEKCXJldHVybgoKLy8gZXBvY2hCYWxhbmNlVXBkYXRlKCk6IHZvaWQKLy8KLy8gVXBkYXRlcyB0aGUgYmFsYW5jZSBvZiBzdGFrZXJzIGluIHRoZSBwb29sIGJhc2VkIG9uIHRoZSByZWNlaXZlZCAncmV3YXJkcycgKGN1cnJlbnQgYmFsYW5jZSB2cyBrbm93biBzdGFrZWQgYmFsYW5jZSkKLy8gc3Rha2VycyBvdXRzdGFuZGluZyBiYWxhbmNlIGlzIGFkanVzdGVkIGJhc2VkIG9uIHRoZWlyICUgb2Ygc3Rha2UgYW5kIHRpbWUgaW4gdGhlIGN1cnJlbnQgZXBvY2ggLSBzbyB0aGF0IGJhbGFuY2UKLy8gY29tcG91bmRzIG92ZXIgdGltZSBhbmQgc3Rha2VyIGNhbiByZW1vdmUgdGhhdCBhbW91bnQgYXQgd2lsbC4KLy8gVGhlIHZhbGlkYXRvciBpcyBwYWlkIHRoZWlyIHBlcmNlbnRhZ2UgZWFjaCBlcG9jaCBwYXlvdXQuCi8vCi8vIE5vdGU6IEFOWU9ORSBjYW4gY2FsbCB0aGlzLgplcG9jaEJhbGFuY2VVcGRhdGU6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAzNwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjUxOAoJLy8gdmFsaWRhdG9yQ29uZmlnID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIFZhbGlkYXRvclJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRWYWxpZGF0b3JDb25maWc+KHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiZ2V0VmFsaWRhdG9yQ29uZmlnKHVpbnQ2NCkodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjUxOQoJLy8gYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUKCWJ5dGUgMHg2MzcyNjU2MTc0NmY3MjQxNzA3MCAvLyAiY3JlYXRvckFwcCIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1MjAKCS8vIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXQoJYnl0ZSAweDc2NjE2YzY5NjQ2MTc0NmY3MjQ5NjQgLy8gInZhbGlkYXRvcklkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gdmFsaWRhdG9yQ29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1MjcKCS8vIGVwb2NoUm91bmRMZW5ndGggPSB2YWxpZGF0b3JDb25maWcuZXBvY2hSb3VuZExlbmd0aCBhcyB1aW50NjQKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE2OSA0CglidG9pCglmcmFtZV9idXJ5IDEgLy8gZXBvY2hSb3VuZExlbmd0aDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTI4CgkvLyBjdXJSb3VuZCA9IGdsb2JhbHMucm91bmQKCWdsb2JhbCBSb3VuZAoJZnJhbWVfYnVyeSAyIC8vIGN1clJvdW5kOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1MjkKCS8vIHRoaXNFcG9jaEJlZ2luID0gY3VyUm91bmQgLSAoY3VyUm91bmQgJSBlcG9jaFJvdW5kTGVuZ3RoKQoJZnJhbWVfZGlnIDIgLy8gY3VyUm91bmQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gY3VyUm91bmQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDEgLy8gZXBvY2hSb3VuZExlbmd0aDogdWludDY0CgklCgktCglmcmFtZV9idXJ5IDMgLy8gdGhpc0Vwb2NoQmVnaW46IHVpbnQ2NAoKCS8vICppZjIwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTMyCgkvLyB0aGlzLmxhc3RQYXlvdXQuZXhpc3RzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglieXRlIDB4NmM2MTczNzQ1MDYxNzk2Zjc1NzQgLy8gImxhc3RQYXlvdXQiCglhcHBfZ2xvYmFsX2dldF9leAoJc3dhcAoJcG9wCglieiAqaWYyMF9lbmQKCgkvLyAqaWYyMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1MzMKCS8vIGxhc3RQYXlvdXRFcG9jaCA9IHRoaXMubGFzdFBheW91dC52YWx1ZSAtICh0aGlzLmxhc3RQYXlvdXQudmFsdWUgJSBlcG9jaFJvdW5kTGVuZ3RoKQoJYnl0ZSAweDZjNjE3Mzc0NTA2MTc5NmY3NTc0IC8vICJsYXN0UGF5b3V0IgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgMHg2YzYxNzM3NDUwNjE3OTZmNzU3NCAvLyAibGFzdFBheW91dCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgMSAvLyBlcG9jaFJvdW5kTGVuZ3RoOiB1aW50NjQKCSUKCS0KCWZyYW1lX2J1cnkgNCAvLyBsYXN0UGF5b3V0RXBvY2g6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjUzNwoJLy8gYXNzZXJ0KGxhc3RQYXlvdXRFcG9jaCAhPT0gdGhpc0Vwb2NoQmVnaW4sICJjYW4ndCBjYWxsIGVwb2NoQmFsYW5jZVVwZGF0ZSBpbiBzYW1lIGVwb2NoIGFzIHByaW9yIGNhbGwiKQoJZnJhbWVfZGlnIDQgLy8gbGFzdFBheW91dEVwb2NoOiB1aW50NjQKCWZyYW1lX2RpZyAzIC8vIHRoaXNFcG9jaEJlZ2luOiB1aW50NjQKCSE9CgoJLy8gY2FuJ3QgY2FsbCBlcG9jaEJhbGFuY2VVcGRhdGUgaW4gc2FtZSBlcG9jaCBhcyBwcmlvciBjYWxsCglhc3NlcnQKCippZjIwX2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU0MAoJLy8gdGhpcy5jaGVja0lmQmluQ2xvc2VkKCkKCWNhbGxzdWIgY2hlY2tJZkJpbkNsb3NlZAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU0MwoJLy8gdGhpcy5sYXN0UGF5b3V0LnZhbHVlID0gY3VyUm91bmQKCWJ5dGUgMHg2YzYxNzM3NDUwNjE3OTZmNzU3NCAvLyAibGFzdFBheW91dCIKCWZyYW1lX2RpZyAyIC8vIGN1clJvdW5kOiB1aW50NjQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTQ0CgkvLyB0aGlzLmVwb2NoTnVtYmVyLnZhbHVlICs9IDEKCWJ5dGUgMHg2NTcwNmY2MzY4NGU3NTZkNjI2NTcyIC8vICJlcG9jaE51bWJlciIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJKwoJYnl0ZSAweDY1NzA2ZjYzNjg0ZTc1NmQ2MjY1NzIgLy8gImVwb2NoTnVtYmVyIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1NDkKCS8vIGlzVG9rZW5FbGlnaWJsZSA9IHZhbGlkYXRvckNvbmZpZy5yZXdhcmRUb2tlbklkICE9PSAwCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxNTMgOAoJYnRvaQoJaW50IDAKCSE9CglmcmFtZV9idXJ5IDUgLy8gaXNUb2tlbkVsaWdpYmxlOiBib29sCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTUwCgkvLyBwb29sT25lQXBwSUQgPSB0aGlzLmFwcC5pZAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJZnJhbWVfYnVyeSA2IC8vIHBvb2xPbmVBcHBJRDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTUxCgkvLyBwb29sT25lQWRkcmVzcyA9IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9idXJ5IDcgLy8gcG9vbE9uZUFkZHJlc3M6IGFkZHJlc3MKCgkvLyAqaWYyMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU1NgoJLy8gaXNUb2tlbkVsaWdpYmxlCglmcmFtZV9kaWcgNSAvLyBpc1Rva2VuRWxpZ2libGU6IGJvb2wKCWJ6ICppZjIxX2VuZAoKCS8vICppZjIxX2NvbnNlcXVlbnQKCS8vICppZjIyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTU3CgkvLyB0aGlzLnBvb2xJZC52YWx1ZSAhPT0gMQoJYnl0ZSAweDcwNmY2ZjZjNDk2NCAvLyAicG9vbElkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgkhPQoJYnogKmlmMjJfZW5kCgoJLy8gKmlmMjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTU5CgkvLyBwb29sT25lQXBwSUQgPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLmdldFBvb2xBcHBJZD4oewoJLy8gICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZSwKCS8vICAgICAgICAgICAgICAgICAgICAgbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWUsIDFdLAoJLy8gICAgICAgICAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJnZXRQb29sQXBwSWQodWludDY0LHVpbnQ2NCl1aW50NjQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU2MAoJLy8gYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUKCWJ5dGUgMHg2MzcyNjU2MTc0NmY3MjQxNzA3MCAvLyAiY3JlYXRvckFwcCIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1NjEKCS8vIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlLCAxXQoJYnl0ZSAweDc2NjE2YzY5NjQ2MTc0NmY3MjQ5NjQgLy8gInZhbGlkYXRvcklkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMQoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWJ0b2kKCWZyYW1lX2J1cnkgNiAvLyBwb29sT25lQXBwSUQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU2MwoJLy8gcG9vbE9uZUFkZHJlc3MgPSBBcHBJRC5mcm9tVWludDY0KHBvb2xPbmVBcHBJRCkuYWRkcmVzcwoJZnJhbWVfZGlnIDYgLy8gcG9vbE9uZUFwcElEOiB1aW50NjQKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJZnJhbWVfYnVyeSA3IC8vIHBvb2xPbmVBZGRyZXNzOiBhZGRyZXNzCgoqaWYyMl9lbmQ6CgkvLyAqaWYyM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU2OAoJLy8gdGhpcy5wb29sSWQudmFsdWUgPT09IDEKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJPT0KCWJ6ICppZjIzX2Vsc2UKCgkvLyAqaWYyM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1NjkKCS8vIHRva2VuUGF5b3V0UmF0aW8gPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLnNldFRva2VuUGF5b3V0UmF0aW8+KHsKCS8vICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUsCgkvLyAgICAgICAgICAgICAgICAgICAgIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXSwKCS8vICAgICAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAic2V0VG9rZW5QYXlvdXRSYXRpbyh1aW50NjQpKHVpbnQ2NFsyNF0sdWludDY0KSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTcwCgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU3MQoJLy8gbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgOCAvLyB0b2tlblBheW91dFJhdGlvOiBQb29sVG9rZW5QYXlvdXRSYXRpbwoJYiAqaWYyM19lbmQKCippZjIzX2Vsc2U6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1NzUKCS8vIHRva2VuUGF5b3V0UmF0aW8gPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgU3Rha2luZ1Bvb2wucHJvdG90eXBlLnByb3hpZWRTZXRUb2tlblBheW91dFJhdGlvPih7CgkvLyAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQocG9vbE9uZUFwcElEKSwKCS8vICAgICAgICAgICAgICAgICAgICAgbWV0aG9kQXJnczogW3sgaWQ6IHRoaXMudmFsaWRhdG9ySWQudmFsdWUsIHBvb2xJZDogdGhpcy5wb29sSWQudmFsdWUsIHBvb2xBcHBJZDogdGhpcy5hcHAuaWQgfV0sCgkvLyAgICAgICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgInByb3hpZWRTZXRUb2tlblBheW91dFJhdGlvKCh1aW50NjQsdWludDY0LHVpbnQ2NCkpKHVpbnQ2NFsyNF0sdWludDY0KSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTc2CgkvLyBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHBvb2xPbmVBcHBJRCkKCWZyYW1lX2RpZyA2IC8vIHBvb2xPbmVBcHBJRDogdWludDY0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1NzcKCS8vIG1ldGhvZEFyZ3M6IFt7IGlkOiB0aGlzLnZhbGlkYXRvcklkLnZhbHVlLCBwb29sSWQ6IHRoaXMucG9vbElkLnZhbHVlLCBwb29sQXBwSWQ6IHRoaXMuYXBwLmlkIH1dCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJYnl0ZSAweDcwNmY2ZjZjNDk2NCAvLyAicG9vbElkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWNvbmNhdAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJaXRvYgoJY29uY2F0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCWl0eG4gTnVtTG9ncwoJaW50IDEKCS0KCWl0eG5hcyBMb2dzCglleHRyYWN0IDQgMAoJZnJhbWVfYnVyeSA4IC8vIHRva2VuUGF5b3V0UmF0aW86IFBvb2xUb2tlblBheW91dFJhdGlvCgoqaWYyM19lbmQ6CgoqaWYyMV9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1ODQKCS8vIHZhbGlkYXRvclN0YXRlID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIFZhbGlkYXRvclJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRWYWxpZGF0b3JTdGF0ZT4oewoJLy8gICAgICAgICAgICAgYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUsCgkvLyAgICAgICAgICAgICBtZXRob2RBcmdzOiBbdGhpcy52YWxpZGF0b3JJZC52YWx1ZV0sCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJnZXRWYWxpZGF0b3JTdGF0ZSh1aW50NjQpKHVpbnQxNix1aW50NjQsdWludDY0LHVpbnQ2NCkiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU4NQoJLy8gYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUKCWJ5dGUgMHg2MzcyNjU2MTc0NmY3MjQxNzA3MCAvLyAiY3JlYXRvckFwcCIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1ODYKCS8vIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXQoJYnl0ZSAweDc2NjE2YzY5NjQ2MTc0NmY3MjQ5NjQgLy8gInZhbGlkYXRvcklkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDkgLy8gdmFsaWRhdG9yU3RhdGU6ICh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTg4CgkvLyByZXdhcmRUb2tlbkhlbGRCYWNrID0gdmFsaWRhdG9yU3RhdGUucmV3YXJkVG9rZW5IZWxkQmFjawoJZnJhbWVfZGlnIDkgLy8gdmFsaWRhdG9yU3RhdGU6ICh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE4IDgKCWJ0b2kKCWZyYW1lX2J1cnkgMTAgLy8gcmV3YXJkVG9rZW5IZWxkQmFjazogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTk0CgkvLyBhbGdvUmV3YXJkQXZhaWwgPSB0aGlzLmFwcC5hZGRyZXNzLmJhbGFuY2UgLSB0aGlzLnRvdGFsQWxnb1N0YWtlZC52YWx1ZSAtIHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglieXRlIDB4NzM3NDYxNmI2NTY0IC8vICJzdGFrZWQiCglhcHBfZ2xvYmFsX2dldAoJLQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglmcmFtZV9idXJ5IDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTk1CgkvLyBpc1Bvb2xTYXR1cmF0ZWQgPSBmYWxzZQoJaW50IDAKCWZyYW1lX2J1cnkgMTIgLy8gaXNQb29sU2F0dXJhdGVkOiBib29sCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTk2CgkvLyBhbGdvU2F0dXJhdGlvbkFtdCA9IHRoaXMuYWxnb1NhdHVyYXRpb25MZXZlbCgpCgljYWxsc3ViIGFsZ29TYXR1cmF0aW9uTGV2ZWwKCWZyYW1lX2J1cnkgMTMgLy8gYWxnb1NhdHVyYXRpb25BbXQ6IHVpbnQ2NAoKCS8vICppZjI0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjA0CgkvLyB2YWxpZGF0b3JTdGF0ZS50b3RhbEFsZ29TdGFrZWQgPiBhbGdvU2F0dXJhdGlvbkFtdAoJZnJhbWVfZGlnIDkgLy8gdmFsaWRhdG9yU3RhdGU6ICh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDEwIDgKCWJ0b2kKCWZyYW1lX2RpZyAxMyAvLyBhbGdvU2F0dXJhdGlvbkFtdDogdWludDY0Cgk+CglieiAqaWYyNF9lbmQKCgkvLyAqaWYyNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2MDUKCS8vIGlzUG9vbFNhdHVyYXRlZCA9IHRydWUKCWludCAxCglmcmFtZV9idXJ5IDEyIC8vIGlzUG9vbFNhdHVyYXRlZDogYm9vbAoKKmlmMjRfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjExCgkvLyB0b2tlblJld2FyZEF2YWlsID0gMAoJaW50IDAKCWZyYW1lX2J1cnkgMTQgLy8gdG9rZW5SZXdhcmRBdmFpbDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjEyCgkvLyB0b2tlblJld2FyZFBhaWRPdXQgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxNSAvLyB0b2tlblJld2FyZFBhaWRPdXQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjYxMwoJLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxNiAvLyB2YWxpZGF0b3JDb21taXNzaW9uUGFpZE91dDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjE0CgkvLyBleGNlc3NUb0ZlZVNpbmsgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxNyAvLyBleGNlc3NUb0ZlZVNpbms6IHVpbnQ2NAoKCS8vICppZjI1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjE1CgkvLyBpc1Rva2VuRWxpZ2libGUKCWZyYW1lX2RpZyA1IC8vIGlzVG9rZW5FbGlnaWJsZTogYm9vbAoJYnogKmlmMjVfZW5kCgoJLy8gKmlmMjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjE2CgkvLyB0b2tlblJld2FyZEJhbCA9CgkvLyAgICAgICAgICAgICAgICAgcG9vbE9uZUFkZHJlc3MuYXNzZXRCYWxhbmNlKEFzc2V0SUQuZnJvbVVpbnQ2NCh2YWxpZGF0b3JDb25maWcucmV3YXJkVG9rZW5JZCkpIC0gcmV3YXJkVG9rZW5IZWxkQmFjawoJZnJhbWVfZGlnIDcgLy8gcG9vbE9uZUFkZHJlc3M6IGFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE1MyA4CglidG9pCglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEwIC8vIHJld2FyZFRva2VuSGVsZEJhY2s6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSAxOCAvLyB0b2tlblJld2FyZEJhbDogdWludDY0CgoJLy8gKmlmMjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2MjEKCS8vIHRva2VuUmV3YXJkQmFsID49IHZhbGlkYXRvckNvbmZpZy5yZXdhcmRQZXJQYXlvdXQKCWZyYW1lX2RpZyAxOCAvLyB0b2tlblJld2FyZEJhbDogdWludDY0CglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxNjEgOAoJYnRvaQoJPj0KCWJ6ICppZjI2X2VuZAoKCS8vICppZjI2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjYyNwoJLy8gb3VyUG9vbFBjdE9mV2hvbGUgPSB0b2tlblBheW91dFJhdGlvLnBvb2xQY3RPZldob2xlW3RoaXMucG9vbElkLnZhbHVlIC0gMV0KCWZyYW1lX2RpZyA4IC8vIHRva2VuUGF5b3V0UmF0aW86IFBvb2xUb2tlblBheW91dFJhdGlvCglpbnQgMAoJYnl0ZSAweDcwNmY2ZjZjNDk2NCAvLyAicG9vbElkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgktCglpbnQgOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWZyYW1lX2J1cnkgMTkgLy8gb3VyUG9vbFBjdE9mV2hvbGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjYzMAoJLy8gdG9rZW5SZXdhcmRBdmFpbCA9IHdpZGVSYXRpbyhbdmFsaWRhdG9yQ29uZmlnLnJld2FyZFBlclBheW91dCwgb3VyUG9vbFBjdE9mV2hvbGVdLCBbMV8wMDBfMDAwXSkKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE2MSA4CglidG9pCglmcmFtZV9kaWcgMTkgLy8gb3VyUG9vbFBjdE9mV2hvbGU6IHVpbnQ2NAoJbXVsdwoJaW50IDAKCWludCAxXzAwMF8wMDAKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CglmcmFtZV9idXJ5IDE0IC8vIHRva2VuUmV3YXJkQXZhaWw6IHVpbnQ2NAoKKmlmMjZfZW5kOgoKKmlmMjVfZW5kOgoJLy8gKmlmMjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2MzMKCS8vIHRva2VuUmV3YXJkQXZhaWwgPT09IDAKCWZyYW1lX2RpZyAxNCAvLyB0b2tlblJld2FyZEF2YWlsOiB1aW50NjQKCWludCAwCgk9PQoJYnogKmlmMjdfZW5kCgoJLy8gKmlmMjdfY29uc2VxdWVudAoJLy8gKmlmMjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2MzgKCS8vIGFsZ29SZXdhcmRBdmFpbCA8IDFfMDAwXzAwMAoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CglpbnQgMV8wMDBfMDAwCgk8CglieiAqaWYyOF9lbmQKCgkvLyAqaWYyOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2MzkKCS8vIGxvZygnIXRva2VuJiYhbm9hbGdvIHRvIHBheScpCglieXRlIDB4MjE3NDZmNmI2NTZlMjYyNjIxNmU2ZjYxNmM2NzZmMjA3NDZmMjA3MDYxNzkgLy8gIiF0b2tlbiYmIW5vYWxnbyB0byBwYXkiCglsb2cKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2NDAKCS8vIHJldHVybgoJcmV0c3ViCgoqaWYyOF9lbmQ6CgoqaWYyN19lbmQ6CgkvLyAqaWYyOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY0NAoJLy8gaXNQb29sU2F0dXJhdGVkCglmcmFtZV9kaWcgMTIgLy8gaXNQb29sU2F0dXJhdGVkOiBib29sCglieiAqaWYyOV9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vICppZjI5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY0NwoJLy8gZGltaW5pc2hlZFJld2FyZCA9IHdpZGVSYXRpbyhbYWxnb1Jld2FyZEF2YWlsLCBhbGdvU2F0dXJhdGlvbkFtdF0sIFt2YWxpZGF0b3JTdGF0ZS50b3RhbEFsZ29TdGFrZWRdKQoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CglmcmFtZV9kaWcgMTMgLy8gYWxnb1NhdHVyYXRpb25BbXQ6IHVpbnQ2NAoJbXVsdwoJaW50IDAKCWZyYW1lX2RpZyA5IC8vIHZhbGlkYXRvclN0YXRlOiAodWludDE2LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxMCA4CglidG9pCglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAyMCAvLyBkaW1pbmlzaGVkUmV3YXJkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2NDkKCS8vIGV4Y2Vzc1RvRmVlU2luayA9IGFsZ29SZXdhcmRBdmFpbCAtIGRpbWluaXNoZWRSZXdhcmQKCWZyYW1lX2RpZyAxMSAvLyBhbGdvUmV3YXJkQXZhaWw6IHVpbnQ2NAoJZnJhbWVfZGlnIDIwIC8vIGRpbWluaXNoZWRSZXdhcmQ6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSAxNyAvLyBleGNlc3NUb0ZlZVNpbms6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY1MAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgICAgICAgIGFtb3VudDogZXhjZXNzVG9GZWVTaW5rLAoJLy8gICAgICAgICAgICAgICAgIHJlY2VpdmVyOiB0aGlzLmdldEZlZVNpbmsoKSwKCS8vICAgICAgICAgICAgICAgICBub3RlOiAncG9vbCBzYXR1cmF0ZWQsIGV4Y2VzcyB0byBmZWUgc2luaycsCgkvLyAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY1MQoJLy8gYW1vdW50OiBleGNlc3NUb0ZlZVNpbmsKCWZyYW1lX2RpZyAxNyAvLyBleGNlc3NUb0ZlZVNpbms6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2NTIKCS8vIHJlY2VpdmVyOiB0aGlzLmdldEZlZVNpbmsoKQoJY2FsbHN1YiBnZXRGZWVTaW5rCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjUzCgkvLyBub3RlOiAncG9vbCBzYXR1cmF0ZWQsIGV4Y2VzcyB0byBmZWUgc2luaycKCWJ5dGUgMHg3MDZmNmY2YzIwNzM2MTc0NzU3MjYxNzQ2NTY0MmMyMDY1Nzg2MzY1NzM3MzIwNzQ2ZjIwNjY2NTY1MjA3MzY5NmU2YiAvLyAicG9vbCBzYXR1cmF0ZWQsIGV4Y2VzcyB0byBmZWUgc2luayIKCWl0eG5fZmllbGQgTm90ZQoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2NTYKCS8vIGFsZ29SZXdhcmRBdmFpbCA9IGRpbWluaXNoZWRSZXdhcmQKCWZyYW1lX2RpZyAyMCAvLyBkaW1pbmlzaGVkUmV3YXJkOiB1aW50NjQKCWZyYW1lX2J1cnkgMTEgLy8gYWxnb1Jld2FyZEF2YWlsOiB1aW50NjQKCWIgKmlmMjlfZW5kCgoqaWYyOV9lbHNlaWYxX2NvbmRpdGlvbjoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY1NwoJLy8gdmFsaWRhdG9yQ29uZmlnLnBlcmNlbnRUb1ZhbGlkYXRvciAhPT0gMAoJZnJhbWVfZGlnIDAgLy8gdmFsaWRhdG9yQ29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMTczIDQKCWJ0b2kKCWludCAwCgkhPQoJYnogKmlmMjlfZW5kCgoJLy8gKmlmMjlfZWxzZWlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2NjAKCS8vIHZhbGlkYXRvckNvbW1pc3Npb25QYWlkT3V0ID0gd2lkZVJhdGlvKAoJLy8gICAgICAgICAgICAgICAgIFthbGdvUmV3YXJkQXZhaWwsIHZhbGlkYXRvckNvbmZpZy5wZXJjZW50VG9WYWxpZGF0b3IgYXMgdWludDY0XSwKCS8vICAgICAgICAgICAgICAgICBbMV8wMDBfMDAwXSwKCS8vICAgICAgICAgICAgICkKCWZyYW1lX2RpZyAxMSAvLyBhbGdvUmV3YXJkQXZhaWw6IHVpbnQ2NAoJZnJhbWVfZGlnIDAgLy8gdmFsaWRhdG9yQ29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMTczIDQKCWJ0b2kKCW11bHcKCWludCAwCglpbnQgMV8wMDBfMDAwCglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAxNiAvLyB2YWxpZGF0b3JDb21taXNzaW9uUGFpZE91dDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjY2CgkvLyBhbGdvUmV3YXJkQXZhaWwgLT0gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQKCWZyYW1lX2RpZyAxMSAvLyBhbGdvUmV3YXJkQXZhaWw6IHVpbnQ2NAoJZnJhbWVfZGlnIDE2IC8vIHZhbGlkYXRvckNvbW1pc3Npb25QYWlkT3V0OiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgMTEgLy8gYWxnb1Jld2FyZEF2YWlsOiB1aW50NjQKCgkvLyAqaWYzMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY3MwoJLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQgPiAwCglmcmFtZV9kaWcgMTYgLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQ6IHVpbnQ2NAoJaW50IDAKCT4KCWJ6ICppZjMwX2VuZAoKCS8vICppZjMwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY3NgoJLy8gbWFuYWdlclRvcE9mZiA9IDAKCWludCAwCglmcmFtZV9idXJ5IDIxIC8vIG1hbmFnZXJUb3BPZmY6IHVpbnQ2NAoKCS8vICppZjMxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Njc4CgkvLyB2YWxpZGF0b3JDb25maWcubWFuYWdlciAhPT0gdmFsaWRhdG9yQ29uZmlnLnZhbGlkYXRvckNvbW1pc3Npb25BZGRyZXNzICYmCgkvLyAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckNvbmZpZy5tYW5hZ2VyLmJhbGFuY2UgLSB2YWxpZGF0b3JDb25maWcubWFuYWdlci5taW5CYWxhbmNlIDwgMl8xMDBfMDAwCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0MCAzMgoJZnJhbWVfZGlnIDAgLy8gdmFsaWRhdG9yQ29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMTc3IDMyCgkhPQoJZHVwCglieiAqc2tpcF9hbmQzCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0MCAzMgoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDQwIDMyCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDJfMTAwXzAwMAoJPAoJJiYKCipza2lwX2FuZDM6CglieiAqaWYzMV9lbmQKCgkvLyAqaWYzMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2ODEKCS8vIG1hbmFnZXJUb3BPZmYgPSB2YWxpZGF0b3JDb21taXNzaW9uUGFpZE91dCA8IDJfMTAwXzAwMCA/IHZhbGlkYXRvckNvbW1pc3Npb25QYWlkT3V0IDogMl8xMDBfMDAwCglmcmFtZV9kaWcgMTYgLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQ6IHVpbnQ2NAoJaW50IDJfMTAwXzAwMAoJPAoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgMTYgLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQ6IHVpbnQ2NAoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMl8xMDBfMDAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSAyMSAvLyBtYW5hZ2VyVG9wT2ZmOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2ODIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogbWFuYWdlclRvcE9mZiwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyOiB2YWxpZGF0b3JDb25maWcubWFuYWdlciwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6ICd2YWxpZGF0b3IgcmV3YXJkIHRvIG1hbmFnZXIgZm9yIGZ1bmRpbmcgZXBvY2ggdXBkYXRlcycsCgkvLyAgICAgICAgICAgICAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjgzCgkvLyBhbW91bnQ6IG1hbmFnZXJUb3BPZmYKCWZyYW1lX2RpZyAyMSAvLyBtYW5hZ2VyVG9wT2ZmOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Njg0CgkvLyByZWNlaXZlcjogdmFsaWRhdG9yQ29uZmlnLm1hbmFnZXIKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDQwIDMyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Njg1CgkvLyBub3RlOiAndmFsaWRhdG9yIHJld2FyZCB0byBtYW5hZ2VyIGZvciBmdW5kaW5nIGVwb2NoIHVwZGF0ZXMnCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyMjA3MjY1Nzc2MTcyNjQyMDc0NmYyMDZkNjE2ZTYxNjc2NTcyMjA2NjZmNzIyMDY2NzU2ZTY0Njk2ZTY3MjA2NTcwNmY2MzY4MjA3NTcwNjQ2MTc0NjU3MyAvLyAidmFsaWRhdG9yIHJld2FyZCB0byBtYW5hZ2VyIGZvciBmdW5kaW5nIGVwb2NoIHVwZGF0ZXMiCglpdHhuX2ZpZWxkIE5vdGUKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYzMV9lbmQ6CgkvLyAqaWYzMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY4OAoJLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQgLSBtYW5hZ2VyVG9wT2ZmID4gMAoJZnJhbWVfZGlnIDE2IC8vIHZhbGlkYXRvckNvbW1pc3Npb25QYWlkT3V0OiB1aW50NjQKCWZyYW1lX2RpZyAyMSAvLyBtYW5hZ2VyVG9wT2ZmOiB1aW50NjQKCS0KCWludCAwCgk+CglieiAqaWYzMl9lbmQKCgkvLyAqaWYzMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2ODkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQgLSBtYW5hZ2VyVG9wT2ZmLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXI6IHZhbGlkYXRvckNvbmZpZy52YWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcywKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6ICd2YWxpZGF0b3IgcmV3YXJkJywKCS8vICAgICAgICAgICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2OTAKCS8vIGFtb3VudDogdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQgLSBtYW5hZ2VyVG9wT2ZmCglmcmFtZV9kaWcgMTYgLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDIxIC8vIG1hbmFnZXJUb3BPZmY6IHVpbnQ2NAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2OTEKCS8vIHJlY2VpdmVyOiB2YWxpZGF0b3JDb25maWcudmFsaWRhdG9yQ29tbWlzc2lvbkFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE3NyAzMgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY5MgoJLy8gbm90ZTogJ3ZhbGlkYXRvciByZXdhcmQnCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyMjA3MjY1Nzc2MTcyNjQgLy8gInZhbGlkYXRvciByZXdhcmQiCglpdHhuX2ZpZWxkIE5vdGUKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYzMl9lbmQ6CgoqaWYzMF9lbmQ6CgoqaWYyOV9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MDQKCS8vIGluY3JlYXNlZFN0YWtlID0gMAoJaW50IDAKCWZyYW1lX2J1cnkgMjIgLy8gaW5jcmVhc2VkU3Rha2U6IHVpbnQ2NAoKCS8vICppZjMzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzI4CgkvLyBhbGdvUmV3YXJkQXZhaWwgIT09IDAgfHwgdG9rZW5SZXdhcmRBdmFpbCAhPT0gMAoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CglpbnQgMAoJIT0KCWR1cAoJYm56ICpza2lwX29yMQoJZnJhbWVfZGlnIDE0IC8vIHRva2VuUmV3YXJkQXZhaWw6IHVpbnQ2NAoJaW50IDAKCSE9Cgl8fAoKKnNraXBfb3IxOgoJYnogKmlmMzNfZW5kCgoJLy8gKmlmMzNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzI5CgkvLyBwYXJ0aWFsU3Rha2Vyc1RvdGFsU3Rha2U6IHVpbnQ2NCA9IDAKCWludCAwCglmcmFtZV9idXJ5IDIzIC8vIHBhcnRpYWxTdGFrZXJzVG90YWxTdGFrZTogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzMwCgkvLyBvcmlnQWxnb1Jld2FyZCA9IGFsZ29SZXdhcmRBdmFpbAoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CglmcmFtZV9idXJ5IDI0IC8vIG9yaWdBbGdvUmV3YXJkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MzEKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGFrZXJzLnZhbHVlLmxlbmd0aDsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMjUgLy8gaTogdWludDY0CgoqZm9yXzQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MzEKCS8vIGkgPCB0aGlzLnN0YWtlcnMudmFsdWUubGVuZ3RoCglmcmFtZV9kaWcgMjUgLy8gaTogdWludDY0CglpbnQgMjAwCgk8CglieiAqZm9yXzRfZW5kCgoJLy8gKmlmMzRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MzIKCS8vIGdsb2JhbHMub3Bjb2RlQnVkZ2V0IDwgNDAwCglnbG9iYWwgT3Bjb2RlQnVkZ2V0CglpbnQgNDAwCgk8CglieiAqaWYzNF9lbmQKCgkvLyAqaWYzNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MzMKCS8vIGluY3JlYXNlT3Bjb2RlQnVkZ2V0KCkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWJ5dGUgYjY0IENvRUIgLy8gI3ByYWdtYSB2ZXJzaW9uIDEwOyBpbnQgMQoJZHVwCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoJaXR4bl9zdWJtaXQKCippZjM0X2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjczNQoJLy8gY21wU3Rha2VyID0gY2xvbmUodGhpcy5zdGFrZXJzLnZhbHVlW2ldKQoJZnJhbWVfZGlnIDI1IC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA2NAoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gKmlmMzVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MzYKCS8vIGNtcFN0YWtlci5hY2NvdW50ICE9PSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDAgMzIKCWdsb2JhbCBaZXJvQWRkcmVzcwoJIT0KCWJ6ICppZjM1X2VuZAoKCS8vICppZjM1X2NvbnNlcXVlbnQKCS8vICppZjM2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzM3CgkvLyBjbXBTdGFrZXIuZW50cnlSb3VuZCA+PSB0aGlzRXBvY2hCZWdpbgoJZnJhbWVfZGlnIDI2IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA1NiA4CglidG9pCglmcmFtZV9kaWcgMyAvLyB0aGlzRXBvY2hCZWdpbjogdWludDY0Cgk+PQoJYnogKmlmMzZfZWxzZQoKCS8vICppZjM2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjc0MAoJLy8gcGFydGlhbFN0YWtlcnNUb3RhbFN0YWtlICs9IGNtcFN0YWtlci5iYWxhbmNlCglmcmFtZV9kaWcgMjMgLy8gcGFydGlhbFN0YWtlcnNUb3RhbFN0YWtlOiB1aW50NjQKCWZyYW1lX2RpZyAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJKwoJZnJhbWVfYnVyeSAyMyAvLyBwYXJ0aWFsU3Rha2Vyc1RvdGFsU3Rha2U6IHVpbnQ2NAoJYiAqaWYzNl9lbmQKCippZjM2X2Vsc2U6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NDQKCS8vIHRpbWVJblBvb2wgPSB0aGlzRXBvY2hCZWdpbiAtIGNtcFN0YWtlci5lbnRyeVJvdW5kCglmcmFtZV9kaWcgMyAvLyB0aGlzRXBvY2hCZWdpbjogdWludDY0CglmcmFtZV9kaWcgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDU2IDgKCWJ0b2kKCS0KCWZyYW1lX2J1cnkgMjcgLy8gdGltZUluUG9vbDogdWludDY0CgoJLy8gKmlmMzdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NDgKCS8vIHRpbWVJblBvb2wgPCBlcG9jaFJvdW5kTGVuZ3RoCglmcmFtZV9kaWcgMjcgLy8gdGltZUluUG9vbDogdWludDY0CglmcmFtZV9kaWcgMSAvLyBlcG9jaFJvdW5kTGVuZ3RoOiB1aW50NjQKCTwKCWJ6ICppZjM3X2VuZAoKCS8vICppZjM3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjc0OQoJLy8gcGFydGlhbFN0YWtlcnNUb3RhbFN0YWtlICs9IGNtcFN0YWtlci5iYWxhbmNlCglmcmFtZV9kaWcgMjMgLy8gcGFydGlhbFN0YWtlcnNUb3RhbFN0YWtlOiB1aW50NjQKCWZyYW1lX2RpZyAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJKwoJZnJhbWVfYnVyeSAyMyAvLyBwYXJ0aWFsU3Rha2Vyc1RvdGFsU3Rha2U6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjc1MAoJLy8gdGltZVBlcmNlbnRhZ2UgPSAodGltZUluUG9vbCAqIDEwMDApIC8gZXBvY2hSb3VuZExlbmd0aAoJZnJhbWVfZGlnIDI3IC8vIHRpbWVJblBvb2w6IHVpbnQ2NAoJaW50IDEwMDAKCSoKCWZyYW1lX2RpZyAxIC8vIGVwb2NoUm91bmRMZW5ndGg6IHVpbnQ2NAoJLwoJZnJhbWVfYnVyeSAyOCAvLyB0aW1lUGVyY2VudGFnZTogdWludDY0CgoJLy8gKmlmMzhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NTIKCS8vIHRva2VuUmV3YXJkQXZhaWwgPiAwCglmcmFtZV9kaWcgMTQgLy8gdG9rZW5SZXdhcmRBdmFpbDogdWludDY0CglpbnQgMAoJPgoJYnogKmlmMzhfZW5kCgoJLy8gKmlmMzhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzU0CgkvLyBzdGFrZXJUb2tlblJld2FyZCA9IHdpZGVSYXRpbygKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbXBTdGFrZXIuYmFsYW5jZSwgdG9rZW5SZXdhcmRBdmFpbCwgdGltZVBlcmNlbnRhZ2VdLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMudG90YWxBbGdvU3Rha2VkLnZhbHVlLCAxMDAwXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoJZnJhbWVfZGlnIDI2IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAzMiA4CglidG9pCglmcmFtZV9kaWcgMTQgLy8gdG9rZW5SZXdhcmRBdmFpbDogdWludDY0CgltdWx3CglmcmFtZV9kaWcgMjggLy8gdGltZVBlcmNlbnRhZ2U6IHVpbnQ2NAoJdW5jb3ZlciAyCglkaWcgMQoJKgoJY292ZXIgMgoJbXVsdwoJY292ZXIgMgoJKwoJc3dhcAoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxMDAwCgltdWx3CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAyOSAvLyBzdGFrZXJUb2tlblJld2FyZDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzYxCgkvLyB0b2tlblJld2FyZEF2YWlsIC09IHN0YWtlclRva2VuUmV3YXJkCglmcmFtZV9kaWcgMTQgLy8gdG9rZW5SZXdhcmRBdmFpbDogdWludDY0CglmcmFtZV9kaWcgMjkgLy8gc3Rha2VyVG9rZW5SZXdhcmQ6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSAxNCAvLyB0b2tlblJld2FyZEF2YWlsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NjIKCS8vIGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UgKz0gc3Rha2VyVG9rZW5SZXdhcmQKCWZyYW1lX2RpZyAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWludCA0OCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDQ4IDgKCWJ0b2kKCWZyYW1lX2RpZyAyOSAvLyBzdGFrZXJUb2tlblJld2FyZDogdWludDY0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NjMKCS8vIHRva2VuUmV3YXJkUGFpZE91dCArPSBzdGFrZXJUb2tlblJld2FyZAoJZnJhbWVfZGlnIDE1IC8vIHRva2VuUmV3YXJkUGFpZE91dDogdWludDY0CglmcmFtZV9kaWcgMjkgLy8gc3Rha2VyVG9rZW5SZXdhcmQ6IHVpbnQ2NAoJKwoJZnJhbWVfYnVyeSAxNSAvLyB0b2tlblJld2FyZFBhaWRPdXQ6IHVpbnQ2NAoKKmlmMzhfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzY2CgkvLyBzdGFrZXJSZXdhcmQgPSB3aWRlUmF0aW8oCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbXBTdGFrZXIuYmFsYW5jZSwgb3JpZ0FsZ29SZXdhcmQsIHRpbWVQZXJjZW50YWdlXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMudG90YWxBbGdvU3Rha2VkLnZhbHVlLCAxMDAwXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCglmcmFtZV9kaWcgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDMyIDgKCWJ0b2kKCWZyYW1lX2RpZyAyNCAvLyBvcmlnQWxnb1Jld2FyZDogdWludDY0CgltdWx3CglmcmFtZV9kaWcgMjggLy8gdGltZVBlcmNlbnRhZ2U6IHVpbnQ2NAoJdW5jb3ZlciAyCglkaWcgMQoJKgoJY292ZXIgMgoJbXVsdwoJY292ZXIgMgoJKwoJc3dhcAoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxMDAwCgltdWx3CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAzMCAvLyBzdGFrZXJSZXdhcmQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjc3MgoJLy8gYWxnb1Jld2FyZEF2YWlsIC09IHN0YWtlclJld2FyZAoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CglmcmFtZV9kaWcgMzAgLy8gc3Rha2VyUmV3YXJkOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgMTEgLy8gYWxnb1Jld2FyZEF2YWlsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NzUKCS8vIGNtcFN0YWtlci5iYWxhbmNlICs9IHN0YWtlclJld2FyZAoJZnJhbWVfZGlnIDI2IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJaW50IDMyIC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJZnJhbWVfZGlnIDMwIC8vIHN0YWtlclJld2FyZDogdWludDY0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NzYKCS8vIGNtcFN0YWtlci50b3RhbFJld2FyZGVkICs9IHN0YWtlclJld2FyZAoJZnJhbWVfZGlnIDI2IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJaW50IDQwIC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgNDAgOAoJYnRvaQoJZnJhbWVfZGlnIDMwIC8vIHN0YWtlclJld2FyZDogdWludDY0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NzcKCS8vIGluY3JlYXNlZFN0YWtlICs9IHN0YWtlclJld2FyZAoJZnJhbWVfZGlnIDIyIC8vIGluY3JlYXNlZFN0YWtlOiB1aW50NjQKCWZyYW1lX2RpZyAzMCAvLyBzdGFrZXJSZXdhcmQ6IHVpbnQ2NAoJKwoJZnJhbWVfYnVyeSAyMiAvLyBpbmNyZWFzZWRTdGFrZTogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Nzc5CgkvLyB0aGlzLnN0YWtlcnMudmFsdWVbaV0gPSBjbXBTdGFrZXIKCWZyYW1lX2RpZyAyNSAvLyBpOiB1aW50NjQKCWludCA2NAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglmcmFtZV9kaWcgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCgljb3ZlciAyCglib3hfcmVwbGFjZQoKKmlmMzdfZW5kOgoKKmlmMzZfZW5kOgoKKmlmMzVfZW5kOgoKKmZvcl80X2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzMxCgkvLyBpICs9IDEKCWZyYW1lX2RpZyAyNSAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDI1IC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzQKCipmb3JfNF9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3ODcKCS8vIG5ld1Bvb2xUb3RhbFN0YWtlID0gdGhpcy50b3RhbEFsZ29TdGFrZWQudmFsdWUgLSBwYXJ0aWFsU3Rha2Vyc1RvdGFsU3Rha2UKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgMjMgLy8gcGFydGlhbFN0YWtlcnNUb3RhbFN0YWtlOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgMzEgLy8gbmV3UG9vbFRvdGFsU3Rha2U6IHVpbnQ2NAoKCS8vICppZjM5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzkxCgkvLyBuZXdQb29sVG90YWxTdGFrZSA+IDAKCWZyYW1lX2RpZyAzMSAvLyBuZXdQb29sVG90YWxTdGFrZTogdWludDY0CglpbnQgMAoJPgoJYnogKmlmMzlfZW5kCgoJLy8gKmlmMzlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzkzCgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3Rha2Vycy52YWx1ZS5sZW5ndGg7IGkgKz0gMSkKCWludCAwCglmcmFtZV9idXJ5IDMyIC8vIGk6IHVpbnQ2NAoKKmZvcl81OgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzkzCgkvLyBpIDwgdGhpcy5zdGFrZXJzLnZhbHVlLmxlbmd0aAoJZnJhbWVfZGlnIDMyIC8vIGk6IHVpbnQ2NAoJaW50IDIwMAoJPAoJYnogKmZvcl81X2VuZAoKCS8vICppZjQwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Nzk0CgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDIwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDIwMAoJPAoJYnogKmlmNDBfZW5kCgoJLy8gKmlmNDBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Nzk1CgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWY0MF9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3OTcKCS8vIGNtcFN0YWtlciA9IGNsb25lKHRoaXMuc3Rha2Vycy52YWx1ZVtpXSkKCWZyYW1lX2RpZyAzMiAvLyBpOiB1aW50NjQKCWludCA2NAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgNjQKCWJ5dGUgMHg3Mzc0NjE2YjY1NzI3MyAvLyAic3Rha2VycyIKCWNvdmVyIDIKCWJveF9leHRyYWN0CglmcmFtZV9idXJ5IDMzIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKCS8vICppZjQxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Nzk4CgkvLyBjbXBTdGFrZXIuYWNjb3VudCAhPT0gZ2xvYmFscy56ZXJvQWRkcmVzcyAmJiBjbXBTdGFrZXIuZW50cnlSb3VuZCA8IHRoaXNFcG9jaEJlZ2luCglmcmFtZV9kaWcgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDAgMzIKCWdsb2JhbCBaZXJvQWRkcmVzcwoJIT0KCWR1cAoJYnogKnNraXBfYW5kNAoJZnJhbWVfZGlnIDMzIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA1NiA4CglidG9pCglmcmFtZV9kaWcgMyAvLyB0aGlzRXBvY2hCZWdpbjogdWludDY0Cgk8CgkmJgoKKnNraXBfYW5kNDoKCWJ6ICppZjQxX2VuZAoKCS8vICppZjQxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjc5OQoJLy8gdGltZUluUG9vbCA9IHRoaXNFcG9jaEJlZ2luIC0gY21wU3Rha2VyLmVudHJ5Um91bmQKCWZyYW1lX2RpZyAzIC8vIHRoaXNFcG9jaEJlZ2luOiB1aW50NjQKCWZyYW1lX2RpZyAzMyAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgNTYgOAoJYnRvaQoJLQoJZnJhbWVfYnVyeSAzNCAvLyB0aW1lSW5Qb29sOiB1aW50NjQKCgkvLyAqaWY0Ml9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjgwMQoJLy8gdGltZUluUG9vbCA+PSBlcG9jaFJvdW5kTGVuZ3RoCglmcmFtZV9kaWcgMzQgLy8gdGltZUluUG9vbDogdWludDY0CglmcmFtZV9kaWcgMSAvLyBlcG9jaFJvdW5kTGVuZ3RoOiB1aW50NjQKCT49CglieiAqaWY0Ml9lbmQKCgkvLyAqaWY0Ml9jb25zZXF1ZW50CgkvLyAqaWY0M19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjgwNgoJLy8gdG9rZW5SZXdhcmRBdmFpbCA+IDAKCWZyYW1lX2RpZyAxNCAvLyB0b2tlblJld2FyZEF2YWlsOiB1aW50NjQKCWludCAwCgk+CglieiAqaWY0M19lbmQKCgkvLyAqaWY0M19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4MDcKCS8vIHN0YWtlclRva2VuUmV3YXJkID0gd2lkZVJhdGlvKAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NtcFN0YWtlci5iYWxhbmNlLCB0b2tlblJld2FyZEF2YWlsXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZXdQb29sVG90YWxTdGFrZV0sCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKCWZyYW1lX2RpZyAzMyAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJZnJhbWVfZGlnIDE0IC8vIHRva2VuUmV3YXJkQXZhaWw6IHVpbnQ2NAoJbXVsdwoJaW50IDAKCWZyYW1lX2RpZyAzMSAvLyBuZXdQb29sVG90YWxTdGFrZTogdWludDY0CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAzNSAvLyBzdGFrZXJUb2tlblJld2FyZDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODEzCgkvLyBjbXBTdGFrZXIucmV3YXJkVG9rZW5CYWxhbmNlICs9IHN0YWtlclRva2VuUmV3YXJkCglmcmFtZV9kaWcgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglpbnQgNDggLy8gaGVhZE9mZnNldAoJZnJhbWVfZGlnIDMzIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglmcmFtZV9kaWcgMzUgLy8gc3Rha2VyVG9rZW5SZXdhcmQ6IHVpbnQ2NAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODE0CgkvLyB0b2tlblJld2FyZFBhaWRPdXQgKz0gc3Rha2VyVG9rZW5SZXdhcmQKCWZyYW1lX2RpZyAxNSAvLyB0b2tlblJld2FyZFBhaWRPdXQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDM1IC8vIHN0YWtlclRva2VuUmV3YXJkOiB1aW50NjQKCSsKCWZyYW1lX2J1cnkgMTUgLy8gdG9rZW5SZXdhcmRQYWlkT3V0OiB1aW50NjQKCippZjQzX2VuZDoKCS8vICppZjQ0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODE2CgkvLyBhbGdvUmV3YXJkQXZhaWwgPiAwCglmcmFtZV9kaWcgMTEgLy8gYWxnb1Jld2FyZEF2YWlsOiB1aW50NjQKCWludCAwCgk+CglieiAqaWY0NF9lbmQKCgkvLyAqaWY0NF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4MTcKCS8vIHN0YWtlclJld2FyZCA9IHdpZGVSYXRpbygKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbXBTdGFrZXIuYmFsYW5jZSwgYWxnb1Jld2FyZEF2YWlsXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZXdQb29sVG90YWxTdGFrZV0sCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKCWZyYW1lX2RpZyAzMyAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CgltdWx3CglpbnQgMAoJZnJhbWVfZGlnIDMxIC8vIG5ld1Bvb2xUb3RhbFN0YWtlOiB1aW50NjQKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CglmcmFtZV9idXJ5IDM2IC8vIHN0YWtlclJld2FyZDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODIzCgkvLyBjbXBTdGFrZXIuYmFsYW5jZSArPSBzdGFrZXJSZXdhcmQKCWZyYW1lX2RpZyAzMyAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWludCAzMiAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDMyIDgKCWJ0b2kKCWZyYW1lX2RpZyAzNiAvLyBzdGFrZXJSZXdhcmQ6IHVpbnQ2NAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODI0CgkvLyBjbXBTdGFrZXIudG90YWxSZXdhcmRlZCArPSBzdGFrZXJSZXdhcmQKCWZyYW1lX2RpZyAzMyAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWludCA0MCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDQwIDgKCWJ0b2kKCWZyYW1lX2RpZyAzNiAvLyBzdGFrZXJSZXdhcmQ6IHVpbnQ2NAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODI1CgkvLyBpbmNyZWFzZWRTdGFrZSArPSBzdGFrZXJSZXdhcmQKCWZyYW1lX2RpZyAyMiAvLyBpbmNyZWFzZWRTdGFrZTogdWludDY0CglmcmFtZV9kaWcgMzYgLy8gc3Rha2VyUmV3YXJkOiB1aW50NjQKCSsKCWZyYW1lX2J1cnkgMjIgLy8gaW5jcmVhc2VkU3Rha2U6IHVpbnQ2NAoKKmlmNDRfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODI5CgkvLyB0aGlzLnN0YWtlcnMudmFsdWVbaV0gPSBjbXBTdGFrZXIKCWZyYW1lX2RpZyAzMiAvLyBpOiB1aW50NjQKCWludCA2NAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglmcmFtZV9kaWcgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCgljb3ZlciAyCglib3hfcmVwbGFjZQoKKmlmNDJfZW5kOgoKKmlmNDFfZW5kOgoKKmZvcl81X2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzkzCgkvLyBpICs9IDEKCWZyYW1lX2RpZyAzMiAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDMyIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzUKCipmb3JfNV9lbmQ6CgoqaWYzOV9lbmQ6CgoqaWYzM19lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4MzkKCS8vIHJvdW5kc0xlZnRJbkJpbiA9IHRoaXMuYmluUm91bmRTdGFydC52YWx1ZSArIHRoaXMucm91bmRzUGVyRGF5LnZhbHVlIC0gZ2xvYmFscy5yb3VuZAoJYnl0ZSAweDYyNjk2ZTUyNmY3NTZlNjQ1Mzc0NjE3Mjc0IC8vICJiaW5Sb3VuZFN0YXJ0IgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgMHg3MjZmNzU2ZTY0NzM1MDY1NzI0NDYxNzkgLy8gInJvdW5kc1BlckRheSIKCWFwcF9nbG9iYWxfZ2V0CgkrCglnbG9iYWwgUm91bmQKCS0KCWZyYW1lX2J1cnkgMzcgLy8gcm91bmRzTGVmdEluQmluOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4NDAKCS8vIHRoaXMudG90YWxBbGdvU3Rha2VkLnZhbHVlICs9IGluY3JlYXNlZFN0YWtlCglieXRlIDB4NzM3NDYxNmI2NTY0IC8vICJzdGFrZWQiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIDIyIC8vIGluY3JlYXNlZFN0YWtlOiB1aW50NjQKCSsKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCXN3YXAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODQxCgkvLyB0aGlzLnN0YWtlQWNjdW11bGF0b3IudmFsdWUgPQoJLy8gICAgICAgICAgICAgdGhpcy5zdGFrZUFjY3VtdWxhdG9yLnZhbHVlICsgKGluY3JlYXNlZFN0YWtlIGFzIHVpbnQxMjgpICogKHJvdW5kc0xlZnRJbkJpbiBhcyB1aW50MTI4KQoJYnl0ZSAweDczNzQ2MTZiNjU0MTYzNjM3NTZkNzU2YzYxNzQ2ZjcyIC8vICJzdGFrZUFjY3VtdWxhdG9yIgoJZHVwCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIDIyIC8vIGluY3JlYXNlZFN0YWtlOiB1aW50NjQKCWl0b2IKCWZyYW1lX2RpZyAzNyAvLyByb3VuZHNMZWZ0SW5CaW46IHVpbnQ2NAoJaXRvYgoJYioKCWIrCglkdXAKCWJpdGxlbgoJaW50IDEyOAoJPD0KCgkvLyB0aGlzLnN0YWtlQWNjdW11bGF0b3IudmFsdWUgKyAoaW5jcmVhc2VkU3Rha2UgYXMgdWludDEyOCkgKiAocm91bmRzTGVmdEluQmluIGFzIHVpbnQxMjgpIG92ZXJmbG93ZWQgMTI4IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDE2CgktCglzd2FwCglzdWJzdHJpbmczCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg0MwoJLy8gdGhpcy5yZXdhcmRBY2N1bXVsYXRvci52YWx1ZSA9IHRoaXMucmV3YXJkQWNjdW11bGF0b3IudmFsdWUgKyBpbmNyZWFzZWRTdGFrZQoJYnl0ZSAweDcyNjU3NzYxNzI2NDQxNjM2Mzc1NmQ3NTZjNjE3NDZmNzIgLy8gInJld2FyZEFjY3VtdWxhdG9yIgoJZHVwCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIDIyIC8vIGluY3JlYXNlZFN0YWtlOiB1aW50NjQKCSsKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODQ5CgkvLyBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLnN0YWtlVXBkYXRlZFZpYVJld2FyZHM+KHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgbWV0aG9kQXJnczogWwoJLy8gICAgICAgICAgICAgICAgIHsgaWQ6IHRoaXMudmFsaWRhdG9ySWQudmFsdWUsIHBvb2xJZDogdGhpcy5wb29sSWQudmFsdWUsIHBvb2xBcHBJZDogdGhpcy5hcHAuaWQgfSwKCS8vICAgICAgICAgICAgICAgICBpbmNyZWFzZWRTdGFrZSwKCS8vICAgICAgICAgICAgICAgICB0b2tlblJld2FyZFBhaWRPdXQsCgkvLyAgICAgICAgICAgICAgICAgdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQsCgkvLyAgICAgICAgICAgICAgICAgZXhjZXNzVG9GZWVTaW5rLAoJLy8gICAgICAgICAgICAgXSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgInN0YWtlVXBkYXRlZFZpYVJld2FyZHMoKHVpbnQ2NCx1aW50NjQsdWludDY0KSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODUwCgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg1MQoJLy8gbWV0aG9kQXJnczogWwoJLy8gICAgICAgICAgICAgICAgIHsgaWQ6IHRoaXMudmFsaWRhdG9ySWQudmFsdWUsIHBvb2xJZDogdGhpcy5wb29sSWQudmFsdWUsIHBvb2xBcHBJZDogdGhpcy5hcHAuaWQgfSwKCS8vICAgICAgICAgICAgICAgICBpbmNyZWFzZWRTdGFrZSwKCS8vICAgICAgICAgICAgICAgICB0b2tlblJld2FyZFBhaWRPdXQsCgkvLyAgICAgICAgICAgICAgICAgdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQsCgkvLyAgICAgICAgICAgICAgICAgZXhjZXNzVG9GZWVTaW5rLAoJLy8gICAgICAgICAgICAgXQoJYnl0ZSAweDc2NjE2YzY5NjQ2MTc0NmY3MjQ5NjQgLy8gInZhbGlkYXRvcklkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCgljb25jYXQKCXR4bmEgQXBwbGljYXRpb25zIDAKCWl0b2IKCWNvbmNhdAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAyMiAvLyBpbmNyZWFzZWRTdGFrZTogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIDE1IC8vIHRva2VuUmV3YXJkUGFpZE91dDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIDE2IC8vIHZhbGlkYXRvckNvbW1pc3Npb25QYWlkT3V0OiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMTcgLy8gZXhjZXNzVG9GZWVTaW5rOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBnb09ubGluZShwYXksYnl0ZVtdLGJ5dGVbXSxieXRlW10sdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2dvT25saW5lOgoJLy8gdm90ZUtleURpbHV0aW9uOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDYKCWJ0b2kKCgkvLyB2b3RlTGFzdDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA1CglidG9pCgoJLy8gdm90ZUZpcnN0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWJ0b2kKCgkvLyBzdGF0ZVByb29mUEs6IGJ5dGVbXQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZXh0cmFjdCAyIDAKCgkvLyBzZWxlY3Rpb25QSzogYnl0ZVtdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglleHRyYWN0IDIgMAoKCS8vIHZvdGVQSzogYnl0ZVtdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoKCS8vIGZlZVBheW1lbnQ6IHBheQoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgcGF5Cgk9PQoKCS8vIGFyZ3VtZW50IDYgKGZlZVBheW1lbnQpIGZvciBnb09ubGluZSBtdXN0IGJlIGEgcGF5IHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBleGVjdXRlIGdvT25saW5lKHBheSxieXRlW10sYnl0ZVtdLGJ5dGVbXSx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIGdvT25saW5lCglpbnQgMQoJcmV0dXJuCgovLyBnb09ubGluZShmZWVQYXltZW50OiBQYXlUeG4sIHZvdGVQSzogYnl0ZXMsIHNlbGVjdGlvblBLOiBieXRlcywgc3RhdGVQcm9vZlBLOiBieXRlcywgdm90ZUZpcnN0OiB1aW50NjQsIHZvdGVMYXN0OiB1aW50NjQsIHZvdGVLZXlEaWx1dGlvbjogdWludDY0KTogdm9pZAovLwovLyBSZWdpc3RlcnMgYSBzdGFraW5nIHBvb2wga2V5IG9ubGluZSBhZ2FpbnN0IGEgcGFydGljaXBhdGlvbiBrZXkuCi8vIFsgT05MWSBPV05FUiBPUiBNQU5BR0VSIENBTiBDQUxMIF0KLy8KLy8gQHBhcmFtIHtQYXlUeG59IGZlZVBheW1lbnQgLSBwYXltZW50IHRvIGNvdmVyIGV4dHJhIGZlZSBvZiBnb2luZyBvbmxpbmUgaWYgb2ZmbGluZSAtIG9yIDAgaWYgbm90IHJlbmV3YWwKLy8gQHBhcmFtIHtieXRlc30gdm90ZVBLIC0gVGhlIHZvdGUgcHVibGljIGtleS4KLy8gQHBhcmFtIHtieXRlc30gc2VsZWN0aW9uUEsgLSBUaGUgc2VsZWN0aW9uIHB1YmxpYyBrZXkuCi8vIEBwYXJhbSB7Ynl0ZXN9IHN0YXRlUHJvb2ZQSyAtIFRoZSBzdGF0ZSBwcm9vZiBwdWJsaWMga2V5LgovLyBAcGFyYW0ge3VpbnQ2NH0gdm90ZUZpcnN0IC0gVGhlIGZpcnN0IHZvdGUgaW5kZXguCi8vIEBwYXJhbSB7dWludDY0fSB2b3RlTGFzdCAtIFRoZSBsYXN0IHZvdGUgaW5kZXguCi8vIEBwYXJhbSB7dWludDY0fSB2b3RlS2V5RGlsdXRpb24gLSBUaGUgdm90ZSBrZXkgZGlsdXRpb24gdmFsdWUuCi8vIEB0aHJvd3Mge0Vycm9yfSBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBjYWxsZXIgaXMgbm90IHRoZSBvd25lciBvciBhIG1hbmFnZXIuCmdvT25saW5lOgoJcHJvdG8gNyAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4ODMKCS8vIGFzc2VydCh0aGlzLmlzT3duZXJPck1hbmFnZXJDYWxsZXIoKSwgJ2NhbiBvbmx5IGJlIGNhbGxlZCBieSBvd25lciBvciBtYW5hZ2VyIG9mIHZhbGlkYXRvcicpCgljYWxsc3ViIGlzT3duZXJPck1hbmFnZXJDYWxsZXIKCgkvLyBjYW4gb25seSBiZSBjYWxsZWQgYnkgb3duZXIgb3IgbWFuYWdlciBvZiB2YWxpZGF0b3IKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg4NAoJLy8gZXh0cmFGZWUgPSB0aGlzLmdldEdvT25saW5lRmVlKCkKCWNhbGxzdWIgZ2V0R29PbmxpbmVGZWUKCWZyYW1lX2J1cnkgMCAvLyBleHRyYUZlZTogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODg1CgkvLyB2ZXJpZnlQYXlUeG4oZmVlUGF5bWVudCwgeyByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywgYW1vdW50OiBleHRyYUZlZSB9KQoJLy8gdmVyaWZ5IHJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gZmVlUGF5bWVudDogUGF5VHhuCglndHhucyBSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJmZWVQYXltZW50IiwiZmllbGQiOiJyZWNlaXZlciIsImV4cGVjdGVkIjoidGhpcy5hcHAuYWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYW1vdW50CglmcmFtZV9kaWcgLTEgLy8gZmVlUGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWZyYW1lX2RpZyAwIC8vIGV4dHJhRmVlOiB1aW50NjQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJmZWVQYXltZW50IiwiZmllbGQiOiJhbW91bnQiLCJleHBlY3RlZCI6ImV4dHJhRmVlIn0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg4NgoJLy8gc2VuZE9ubGluZUtleVJlZ2lzdHJhdGlvbih7CgkvLyAgICAgICAgICAgICB2b3RlUEs6IHZvdGVQSywKCS8vICAgICAgICAgICAgIHNlbGVjdGlvblBLOiBzZWxlY3Rpb25QSywKCS8vICAgICAgICAgICAgIHN0YXRlUHJvb2ZQSzogc3RhdGVQcm9vZlBLLAoJLy8gICAgICAgICAgICAgdm90ZUZpcnN0OiB2b3RlRmlyc3QsCgkvLyAgICAgICAgICAgICB2b3RlTGFzdDogdm90ZUxhc3QsCgkvLyAgICAgICAgICAgICB2b3RlS2V5RGlsdXRpb246IHZvdGVLZXlEaWx1dGlvbiwKCS8vICAgICAgICAgICAgIGZlZTogdGhpcy5nZXRHb09ubGluZUZlZSgpLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGtleXJlZwoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg4NwoJLy8gdm90ZVBLOiB2b3RlUEsKCWZyYW1lX2RpZyAtMiAvLyB2b3RlUEs6IGJ5dGVzCglpdHhuX2ZpZWxkIFZvdGVQSwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg4OAoJLy8gc2VsZWN0aW9uUEs6IHNlbGVjdGlvblBLCglmcmFtZV9kaWcgLTMgLy8gc2VsZWN0aW9uUEs6IGJ5dGVzCglpdHhuX2ZpZWxkIFNlbGVjdGlvblBLCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODg5CgkvLyBzdGF0ZVByb29mUEs6IHN0YXRlUHJvb2ZQSwoJZnJhbWVfZGlnIC00IC8vIHN0YXRlUHJvb2ZQSzogYnl0ZXMKCWl0eG5fZmllbGQgU3RhdGVQcm9vZlBLCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODkwCgkvLyB2b3RlRmlyc3Q6IHZvdGVGaXJzdAoJZnJhbWVfZGlnIC01IC8vIHZvdGVGaXJzdDogdWludDY0CglpdHhuX2ZpZWxkIFZvdGVGaXJzdAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg5MQoJLy8gdm90ZUxhc3Q6IHZvdGVMYXN0CglmcmFtZV9kaWcgLTYgLy8gdm90ZUxhc3Q6IHVpbnQ2NAoJaXR4bl9maWVsZCBWb3RlTGFzdAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg5MgoJLy8gdm90ZUtleURpbHV0aW9uOiB2b3RlS2V5RGlsdXRpb24KCWZyYW1lX2RpZyAtNyAvLyB2b3RlS2V5RGlsdXRpb246IHVpbnQ2NAoJaXR4bl9maWVsZCBWb3RlS2V5RGlsdXRpb24KCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4OTMKCS8vIGZlZTogdGhpcy5nZXRHb09ubGluZUZlZSgpCgljYWxsc3ViIGdldEdvT25saW5lRmVlCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gZ29PZmZsaW5lKCl2b2lkCiphYmlfcm91dGVfZ29PZmZsaW5lOgoJLy8gZXhlY3V0ZSBnb09mZmxpbmUoKXZvaWQKCWNhbGxzdWIgZ29PZmZsaW5lCglpbnQgMQoJcmV0dXJuCgovLyBnb09mZmxpbmUoKTogdm9pZAovLwovLyBNYXJrcyBhIHN0YWtpbmcgcG9vbCBrZXkgT0ZGTElORS4KLy8gWyBPTkxZIE9XTkVSIE9SIE1BTkFHRVIgQ0FOIENBTEwgXQpnb09mZmxpbmU6Cglwcm90byAwIDAKCgkvLyAqaWY0NV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkwNQoJLy8gdGhpcy50eG4uc2VuZGVyICE9PSB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZS5hZGRyZXNzCgl0eG4gU2VuZGVyCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJcG9wCgkhPQoJYnogKmlmNDVfZW5kCgoJLy8gKmlmNDVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTA2CgkvLyBhc3NlcnQodGhpcy5pc093bmVyT3JNYW5hZ2VyQ2FsbGVyKCksICdjYW4gb25seSBiZSBjYWxsZWQgYnkgb3duZXIgb3IgbWFuYWdlciBvZiB2YWxpZGF0b3InKQoJY2FsbHN1YiBpc093bmVyT3JNYW5hZ2VyQ2FsbGVyCgoJLy8gY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IG93bmVyIG9yIG1hbmFnZXIgb2YgdmFsaWRhdG9yCglhc3NlcnQKCippZjQ1X2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkwOQoJLy8gc2VuZE9mZmxpbmVLZXlSZWdpc3RyYXRpb24oe30pCglpdHhuX2JlZ2luCglpbnQga2V5cmVnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBsaW5rVG9ORkQodWludDY0LHN0cmluZyl2b2lkCiphYmlfcm91dGVfbGlua1RvTkZEOgoJLy8gbmZkTmFtZTogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglleHRyYWN0IDIgMAoKCS8vIG5mZEFwcElkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGxpbmtUb05GRCh1aW50NjQsc3RyaW5nKXZvaWQKCWNhbGxzdWIgbGlua1RvTkZECglpbnQgMQoJcmV0dXJuCgovLyBsaW5rVG9ORkQobmZkQXBwSWQ6IHVpbnQ2NCwgbmZkTmFtZTogc3RyaW5nKTogdm9pZApsaW5rVG9ORkQ6Cglwcm90byAyIDAKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5MTYKCS8vIGFzc2VydCh0aGlzLmlzT3duZXJPck1hbmFnZXJDYWxsZXIoKSwgJ2NhbiBvbmx5IGJlIGNhbGxlZCBieSBvd25lciBvciBtYW5hZ2VyIG9mIHZhbGlkYXRvcicpCgljYWxsc3ViIGlzT3duZXJPck1hbmFnZXJDYWxsZXIKCgkvLyBjYW4gb25seSBiZSBjYWxsZWQgYnkgb3duZXIgb3IgbWFuYWdlciBvZiB2YWxpZGF0b3IKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkxOAoJLy8gc2VuZEFwcENhbGwoewoJLy8gICAgICAgICAgICAgYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NCh0aGlzLm5mZFJlZ2lzdHJ5QXBwSWQpLAoJLy8gICAgICAgICAgICAgYXBwbGljYXRpb25BcmdzOiBbJ3ZlcmlmeV9uZmRfYWRkcicsIG5mZE5hbWUsIGl0b2IobmZkQXBwSWQpLCByYXdCeXRlcyh0aGlzLmFwcC5hZGRyZXNzKV0sCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbnM6IFtBcHBJRC5mcm9tVWludDY0KG5mZEFwcElkKV0sCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkxOQoJLy8gYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NCh0aGlzLm5mZFJlZ2lzdHJ5QXBwSWQpCglwdXNoaW50IFRNUExfbmZkUmVnaXN0cnlBcHBJZAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTIwCgkvLyBhcHBsaWNhdGlvbkFyZ3M6IFsndmVyaWZ5X25mZF9hZGRyJywgbmZkTmFtZSwgaXRvYihuZmRBcHBJZCksIHJhd0J5dGVzKHRoaXMuYXBwLmFkZHJlc3MpXQoJYnl0ZSAweDc2NjU3MjY5NjY3OTVmNmU2NjY0NWY2MTY0NjQ3MiAvLyAidmVyaWZ5X25mZF9hZGRyIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAtMiAvLyBuZmROYW1lOiBzdHJpbmcKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTEgLy8gbmZkQXBwSWQ6IHVpbnQ2NAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkyMQoJLy8gYXBwbGljYXRpb25zOiBbQXBwSUQuZnJvbVVpbnQ2NChuZmRBcHBJZCldCglmcmFtZV9kaWcgLTEgLy8gbmZkQXBwSWQ6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHByb3hpZWRTZXRUb2tlblBheW91dFJhdGlvKCh1aW50NjQsdWludDY0LHVpbnQ2NCkpKHVpbnQ2NFsyNF0sdWludDY0KQoqYWJpX3JvdXRlX3Byb3hpZWRTZXRUb2tlblBheW91dFJhdGlvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBwb29sS2V5OiAodWludDY0LHVpbnQ2NCx1aW50NjQpCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDI0Cgk9PQoKCS8vIGFyZ3VtZW50IDAgKHBvb2xLZXkpIGZvciBwcm94aWVkU2V0VG9rZW5QYXlvdXRSYXRpbyBtdXN0IGJlIGEgKHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBwcm94aWVkU2V0VG9rZW5QYXlvdXRSYXRpbygodWludDY0LHVpbnQ2NCx1aW50NjQpKSh1aW50NjRbMjRdLHVpbnQ2NCkKCWNhbGxzdWIgcHJveGllZFNldFRva2VuUGF5b3V0UmF0aW8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBwcm94aWVkU2V0VG9rZW5QYXlvdXRSYXRpbyhwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5KTogUG9vbFRva2VuUGF5b3V0UmF0aW8KLy8KLy8gcHJveGllZFNldFRva2VuUGF5b3V0UmF0aW8gaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGJ5IHBvb2xzICE9IDEgLSBjYWxsaW5nIFVTLCBwb29sICMxCi8vIFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGluIGZhY3QgYmVpbmcgY2FsbGVkIGJ5IGFub3RoZXIgb2YgT1VSIHBvb2xzIChub3QgdXMpCi8vIGFuZCB0aGVuIHdlJ2xsIGNhbGwgdGhlIHZhbGlkYXRvciBvbiB0aGVpciBiZWhhbGYgdG8gdXBkYXRlIHRoZSB0b2tlbiBwYXlvdXRzCi8vIEBwYXJhbSBwb29sS2V5IC0gVmFsaWRhdG9yUG9vbEtleSB0dXBsZQpwcm94aWVkU2V0VG9rZW5QYXlvdXRSYXRpbzoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTMyCgkvLyBhc3NlcnQodGhpcy52YWxpZGF0b3JJZC52YWx1ZSA9PT0gcG9vbEtleS5pZCwgJ2NhbGxlciBtdXN0IGJlIHBhcnQgb2Ygc2FtZSB2YWxpZGF0b3Igc2V0IScpCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCgk9PQoKCS8vIGNhbGxlciBtdXN0IGJlIHBhcnQgb2Ygc2FtZSB2YWxpZGF0b3Igc2V0IQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTMzCgkvLyBhc3NlcnQodGhpcy5wb29sSWQudmFsdWUgPT09IDEsICdjYWxsZWUgbXVzdCBiZSBwb29sIDEnKQoJYnl0ZSAweDcwNmY2ZjZjNDk2NCAvLyAicG9vbElkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgk9PQoKCS8vIGNhbGxlZSBtdXN0IGJlIHBvb2wgMQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTM0CgkvLyBhc3NlcnQocG9vbEtleS5wb29sSWQgIT09IDEsICdjYWxsZXIgbXVzdCBOT1QgYmUgcG9vbCAxJykKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCSE9CgoJLy8gY2FsbGVyIG11c3QgTk9UIGJlIHBvb2wgMQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTM2CgkvLyBjYWxsZXJQb29sQXBwSUQgPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLmdldFBvb2xBcHBJZD4oewoJLy8gICAgICAgICAgICAgYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUsCgkvLyAgICAgICAgICAgICBtZXRob2RBcmdzOiBbcG9vbEtleS5pZCwgcG9vbEtleS5wb29sSWRdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiZ2V0UG9vbEFwcElkKHVpbnQ2NCx1aW50NjQpdWludDY0IgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5MzcKCS8vIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTM4CgkvLyBtZXRob2RBcmdzOiBbcG9vbEtleS5pZCwgcG9vbEtleS5wb29sSWRdCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglidG9pCglmcmFtZV9idXJ5IDAgLy8gY2FsbGVyUG9vbEFwcElEOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5NDAKCS8vIGFzc2VydChjYWxsZXJQb29sQXBwSUQgPT09IHBvb2xLZXkucG9vbEFwcElkKQoJZnJhbWVfZGlnIDAgLy8gY2FsbGVyUG9vbEFwcElEOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDE2IDgKCWJ0b2kKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5NDEKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IEFwcElELmZyb21VaW50NjQocG9vbEtleS5wb29sQXBwSWQpLmFkZHJlc3MpCgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAxNiA4CglidG9pCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglwb3AKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5NDMKCS8vIHJldHVybiBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLnNldFRva2VuUGF5b3V0UmF0aW8+KHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAic2V0VG9rZW5QYXlvdXRSYXRpbyh1aW50NjQpKHVpbnQ2NFsyNF0sdWludDY0KSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTQ0CgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk0NQoJLy8gbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gaXNPd25lck9yTWFuYWdlckNhbGxlcigpOiBib29sZWFuCmlzT3duZXJPck1hbmFnZXJDYWxsZXI6Cglwcm90byAwIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk1MAoJLy8gT3duZXJBbmRNYW5hZ2VyID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIFZhbGlkYXRvclJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRWYWxpZGF0b3JPd25lckFuZE1hbmFnZXI+KHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiZ2V0VmFsaWRhdG9yT3duZXJBbmRNYW5hZ2VyKHVpbnQ2NCkoYWRkcmVzcyxhZGRyZXNzKSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTUxCgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk1MgoJLy8gbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBPd25lckFuZE1hbmFnZXI6IChhZGRyZXNzLGFkZHJlc3MpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTU0CgkvLyByZXR1cm4gdGhpcy50eG4uc2VuZGVyID09PSBPd25lckFuZE1hbmFnZXJbMF0gfHwgdGhpcy50eG4uc2VuZGVyID09PSBPd25lckFuZE1hbmFnZXJbMV0KCXR4biBTZW5kZXIKCWZyYW1lX2RpZyAwIC8vIE93bmVyQW5kTWFuYWdlcjogKGFkZHJlc3MsYWRkcmVzcykKCWV4dHJhY3QgMCAzMgoJPT0KCWR1cAoJYm56ICpza2lwX29yMgoJdHhuIFNlbmRlcgoJZnJhbWVfZGlnIDAgLy8gT3duZXJBbmRNYW5hZ2VyOiAoYWRkcmVzcyxhZGRyZXNzKQoJZXh0cmFjdCAzMiAzMgoJPT0KCXx8Cgoqc2tpcF9vcjI6CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gZ2V0RmVlU2luaygpOiBBZGRyZXNzCmdldEZlZVNpbms6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5NTgKCS8vIHJldHVybiB0aGlzLmZlZVNpbmtBZGRyCglwdXNoYnl0ZXMgVE1QTF9mZWVTaW5rQWRkcgoJcmV0c3ViCgovLyBhbGdvU2F0dXJhdGlvbkxldmVsKCk6IHVpbnQ2NAovLwovLyBSZXR1cm5zIHRoZSBtYXhpbXVtIGFsbG93ZWQgc3Rha2UgcGVyIHZhbGlkYXRvciBiYXNlZCBvbiBhIHBlcmNlbnRhZ2Ugb2YgYWxsIGN1cnJlbnQgb25saW5lIHN0YWtlIGJlZm9yZQovLyB0aGUgdmFsaWRhdG9yIGlzIGNvbnNpZGVyZWQgc2F0dXJhdGVkIC0gd2hlcmUgcmV3YXJkcyBhcmUgZGltaW5pc2hlZC4KYWxnb1NhdHVyYXRpb25MZXZlbDoKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTY4CgkvLyBvbmxpbmUgPSB0aGlzLmdldEN1cnJlbnRPbmxpbmVTdGFrZSgpCgljYWxsc3ViIGdldEN1cnJlbnRPbmxpbmVTdGFrZQoJZnJhbWVfYnVyeSAwIC8vIG9ubGluZTogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTcwCgkvLyByZXR1cm4gd2lkZVJhdGlvKFtvbmxpbmUsIE1BWF9WQUxJREFUT1JfU09GVF9QQ1RfT0ZfT05MSU5FXzFERUNJTUFMXSwgWzEwMDBdKQoJZnJhbWVfZGlnIDAgLy8gb25saW5lOiB1aW50NjQKCWludCAxMDAKCW11bHcKCWludCAwCglpbnQgMTAwMAoJZGl2bW9kdwoJcG9wCglwb3AKCXN3YXAKCSEKCgkvLyB3aWRlUmF0aW8gZmFpbGVkCglhc3NlcnQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gZ2V0R29PbmxpbmVGZWUoKTogdWludDY0CmdldEdvT25saW5lRmVlOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5NzcKCS8vIGlzT25saW5lID0gZmFsc2UKCWludCAwCglmcmFtZV9idXJ5IDAgLy8gaXNPbmxpbmU6IGJvb2wKCgkvLyAqaWY0Nl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk3OAoJLy8gIWlzT25saW5lCglmcmFtZV9kaWcgMCAvLyBpc09ubGluZTogYm9vbAoJIQoJYnogKmlmNDZfZW5kCgoJLy8gKmlmNDZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTgxCgkvLyByZXR1cm4gMl8wMDBfMDAwCglpbnQgMl8wMDBfMDAwCgliICpnZXRHb09ubGluZUZlZSpyZXR1cm4KCippZjQ2X2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk4MwoJLy8gcmV0dXJuIDAKCWludCAwCgoqZ2V0R29PbmxpbmVGZWUqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIGdldEN1cnJlbnRPbmxpbmVTdGFrZSgpOiB1aW50NjQKZ2V0Q3VycmVudE9ubGluZVN0YWtlOgoJcHJvdG8gMCAxCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTg5CgkvLyByZXR1cm4gMl8wMDBfMDAwXzAwMF8wMDBfMDAwCglpbnQgMl8wMDBfMDAwXzAwMF8wMDBfMDAwCglyZXRzdWIKCi8vIGNoZWNrSWZCaW5DbG9zZWQoKTogdm9pZAovLwovLyBDaGVja3MgaWYgdGhlIGN1cnJlbnQgcm91bmQgaXMgaW4gYSAnbmV3IGNhbGN1bGF0aW9uIGJpbicgKGFwcHJveGltYXRlbHkgZGFpbHkpCmNoZWNrSWZCaW5DbG9zZWQ6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTk2CgkvLyBjdXJyZW50QmluU2l6ZSA9IHRoaXMucm91bmRzUGVyRGF5LnZhbHVlIGFzIHVpbnQxMjgKCWJ5dGUgMHg3MjZmNzU2ZTY0NzM1MDY1NzI0NDYxNzkgLy8gInJvdW5kc1BlckRheSIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglmcmFtZV9idXJ5IDAgLy8gY3VycmVudEJpblNpemU6IHVuc2FmZSB1aW50MTI4CgoJLy8gKmlmNDdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5OTcKCS8vIGdsb2JhbHMucm91bmQgPj0gdGhpcy5iaW5Sb3VuZFN0YXJ0LnZhbHVlICsgKGN1cnJlbnRCaW5TaXplIGFzIHVpbnQ2NCkKCWdsb2JhbCBSb3VuZAoJYnl0ZSAweDYyNjk2ZTUyNmY3NTZlNjQ1Mzc0NjE3Mjc0IC8vICJiaW5Sb3VuZFN0YXJ0IgoJYXBwX2dsb2JhbF9nZXQKCWZyYW1lX2RpZyAwIC8vIGN1cnJlbnRCaW5TaXplOiB1bnNhZmUgdWludDEyOAoJZHVwCgliaXRsZW4KCWludCA2NAoJPD0KCgkvLyBjdXJyZW50QmluU2l6ZSBhcyB1aW50NjQgb3ZlcmZsb3dlZCA2NCBiaXRzCglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDgKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWJ0b2kKCSsKCT49CglieiAqaWY0N19lbmQKCgkvLyAqaWY0N19jb25zZXF1ZW50CgkvLyAqaWY0OF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk5OAoJLy8gZ2xvYmFscy5vcGNvZGVCdWRnZXQgPCAzMDAKCWdsb2JhbCBPcGNvZGVCdWRnZXQKCWludCAzMDAKCTwKCWJ6ICppZjQ4X2VuZAoKCS8vICppZjQ4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk5OQoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKKmlmNDhfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTAwMQoJLy8gYXBwcm94Um91bmRzUGVyWWVhcjogdWludDEyOCA9IGN1cnJlbnRCaW5TaXplICogKDM2NSBhcyB1aW50MTI4KQoJZnJhbWVfZGlnIDAgLy8gY3VycmVudEJpblNpemU6IHVuc2FmZSB1aW50MTI4CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNmQKCWIqCglkdXAKCWJpdGxlbgoJaW50IDEyOAoJPD0KCgkvLyBjdXJyZW50QmluU2l6ZSAqICgzNjUgYXMgdWludDEyOCkgb3ZlcmZsb3dlZCAxMjggYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMTYKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWZyYW1lX2J1cnkgMSAvLyBhcHByb3hSb3VuZHNQZXJZZWFyOiB1aW50MTI4CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTAwMgoJLy8gYXZnU3Rha2U6IHVpbnQxMjggPSB0aGlzLnN0YWtlQWNjdW11bGF0b3IudmFsdWUgLyBjdXJyZW50QmluU2l6ZQoJYnl0ZSAweDczNzQ2MTZiNjU0MTYzNjM3NTZkNzU2YzYxNzQ2ZjcyIC8vICJzdGFrZUFjY3VtdWxhdG9yIgoJYXBwX2dsb2JhbF9nZXQKCWZyYW1lX2RpZyAwIC8vIGN1cnJlbnRCaW5TaXplOiB1bnNhZmUgdWludDEyOAoJYi8KCWR1cAoJYml0bGVuCglpbnQgMTI4Cgk8PQoKCS8vIHRoaXMuc3Rha2VBY2N1bXVsYXRvci52YWx1ZSAvIGN1cnJlbnRCaW5TaXplIG92ZXJmbG93ZWQgMTI4IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDE2CgktCglzd2FwCglzdWJzdHJpbmczCglmcmFtZV9idXJ5IDIgLy8gYXZnU3Rha2U6IHVpbnQxMjgKCgkvLyAqaWY0OV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMDMKCS8vIGF2Z1N0YWtlICE9PSAwCglmcmFtZV9kaWcgMiAvLyBhdmdTdGFrZTogdWludDEyOAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCgliIT0KCWJ6ICppZjQ5X2VuZAoKCS8vICppZjQ5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMDcKCS8vIGFwcjogdWludDEyOCA9CgkvLyAgICAgICAgICAgICAgICAgICAgICgoKHRoaXMucmV3YXJkQWNjdW11bGF0b3IudmFsdWUgYXMgdWludDEyOCkgKiAoMTAwMDAgYXMgdWludDEyOCkpIC8gYXZnU3Rha2UpICoKCS8vICAgICAgICAgICAgICAgICAgICAgKGFwcHJveFJvdW5kc1BlclllYXIgLyBjdXJyZW50QmluU2l6ZSkKCWJ5dGUgMHg3MjY1Nzc2MTcyNjQ0MTYzNjM3NTZkNzU2YzYxNzQ2ZjcyIC8vICJyZXdhcmRBY2N1bXVsYXRvciIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MTAKCWIqCglmcmFtZV9kaWcgMiAvLyBhdmdTdGFrZTogdWludDEyOAoJYi8KCWZyYW1lX2RpZyAxIC8vIGFwcHJveFJvdW5kc1BlclllYXI6IHVpbnQxMjgKCWZyYW1lX2RpZyAwIC8vIGN1cnJlbnRCaW5TaXplOiB1bnNhZmUgdWludDEyOAoJYi8KCWIqCglkdXAKCWJpdGxlbgoJaW50IDEyOAoJPD0KCgkvLyAoKCh0aGlzLnJld2FyZEFjY3VtdWxhdG9yLnZhbHVlIGFzIHVpbnQxMjgpICogKDEwMDAwIGFzIHVpbnQxMjgpKSAvIGF2Z1N0YWtlKSAqXG4gICAgICAgICAgICAgICAgICAgIChhcHByb3hSb3VuZHNQZXJZZWFyIC8gY3VycmVudEJpblNpemUpIG92ZXJmbG93ZWQgMTI4IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDE2CgktCglzd2FwCglzdWJzdHJpbmczCglmcmFtZV9idXJ5IDMgLy8gYXByOiB1aW50MTI4CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTAxMQoJLy8gYWxwaGE6IHVpbnQxMjggPSAxMCBhcyB1aW50MTI4CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEKCWZyYW1lX2J1cnkgNCAvLyBhbHBoYTogdW5zYWZlIHVpbnQxMjgKCgkvLyAqaWY1MF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMTMKCS8vIGF2Z1N0YWtlID4gMzAwMDAwMDAwMDAwCglmcmFtZV9kaWcgMiAvLyBhdmdTdGFrZTogdWludDEyOAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NWQ5NjRiODAwCgliPgoJYnogKmlmNTBfZW5kCgoJLy8gKmlmNTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTAxNAoJLy8gYWxwaGEgPSA5MCBhcyB1aW50MTI4CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNWEKCWZyYW1lX2J1cnkgNCAvLyBhbHBoYTogdW5zYWZlIHVpbnQxMjgKCippZjUwX2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMTYKCS8vIHRoaXMud2VpZ2h0ZWRNb3ZpbmdBdmVyYWdlLnZhbHVlID0KCS8vICAgICAgICAgICAgICAgICAgICAgKHRoaXMud2VpZ2h0ZWRNb3ZpbmdBdmVyYWdlLnZhbHVlICogKCgxMDAgYXMgdWludDEyOCkgLSBhbHBoYSkpIC8gKDEwMCBhcyB1aW50MTI4KSArCgkvLyAgICAgICAgICAgICAgICAgICAgIChhcHIgKiBhbHBoYSkgLyAoMTAwIGFzIHVpbnQxMjgpCglieXRlIDB4NjU3NzZkNjEgLy8gImV3bWEiCglkdXAKCWFwcF9nbG9iYWxfZ2V0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKCWZyYW1lX2RpZyA0IC8vIGFscGhhOiB1bnNhZmUgdWludDEyOAoJYi0KCWIqCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKCWIvCglmcmFtZV9kaWcgMyAvLyBhcHI6IHVpbnQxMjgKCWZyYW1lX2RpZyA0IC8vIGFscGhhOiB1bnNhZmUgdWludDEyOAoJYioKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAoJYi8KCWIrCglkdXAKCWJpdGxlbgoJaW50IDEyOAoJPD0KCgkvLyAodGhpcy53ZWlnaHRlZE1vdmluZ0F2ZXJhZ2UudmFsdWUgKiAoKDEwMCBhcyB1aW50MTI4KSAtIGFscGhhKSkgLyAoMTAwIGFzIHVpbnQxMjgpICtcbiAgICAgICAgICAgICAgICAgICAgKGFwciAqIGFscGhhKSAvICgxMDAgYXMgdWludDEyOCkgb3ZlcmZsb3dlZCAxMjggYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMTYKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWFwcF9nbG9iYWxfcHV0CgoqaWY0OV9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMDIyCgkvLyB0aGlzLnNldFJvdW5kc1BlckRheSgpCgljYWxsc3ViIHNldFJvdW5kc1BlckRheQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMjMKCS8vIHRoaXMuc3Rha2VBY2N1bXVsYXRvci52YWx1ZSA9ICh0aGlzLnRvdGFsQWxnb1N0YWtlZC52YWx1ZSBhcyB1aW50MTI4KSAqICh0aGlzLnJvdW5kc1BlckRheS52YWx1ZSBhcyB1aW50MTI4KQoJYnl0ZSAweDczNzQ2MTZiNjU0MTYzNjM3NTZkNzU2YzYxNzQ2ZjcyIC8vICJzdGFrZUFjY3VtdWxhdG9yIgoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWJ5dGUgMHg3MjZmNzU2ZTY0NzM1MDY1NzI0NDYxNzkgLy8gInJvdW5kc1BlckRheSIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCgliKgoJZHVwCgliaXRsZW4KCWludCAxMjgKCTw9CgoJLy8gKHRoaXMudG90YWxBbGdvU3Rha2VkLnZhbHVlIGFzIHVpbnQxMjgpICogKHRoaXMucm91bmRzUGVyRGF5LnZhbHVlIGFzIHVpbnQxMjgpIG92ZXJmbG93ZWQgMTI4IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDE2CgktCglzd2FwCglzdWJzdHJpbmczCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMjQKCS8vIHRoaXMucmV3YXJkQWNjdW11bGF0b3IudmFsdWUgPSAwCglieXRlIDB4NzI2NTc3NjE3MjY0NDE2MzYzNzU2ZDc1NmM2MTc0NmY3MiAvLyAicmV3YXJkQWNjdW11bGF0b3IiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMDI1CgkvLyB0aGlzLmJpblJvdW5kU3RhcnQudmFsdWUgPSBnbG9iYWxzLnJvdW5kIC0gKGdsb2JhbHMucm91bmQgJSB0aGlzLnJvdW5kc1BlckRheS52YWx1ZSkKCWJ5dGUgMHg2MjY5NmU1MjZmNzU2ZTY0NTM3NDYxNzI3NCAvLyAiYmluUm91bmRTdGFydCIKCWdsb2JhbCBSb3VuZAoJZ2xvYmFsIFJvdW5kCglieXRlIDB4NzI2Zjc1NmU2NDczNTA2NTcyNDQ2MTc5IC8vICJyb3VuZHNQZXJEYXkiCglhcHBfZ2xvYmFsX2dldAoJJQoJLQoJYXBwX2dsb2JhbF9wdXQKCippZjQ3X2VuZDoKCXJldHN1YgoKLy8gc2V0Um91bmRzUGVyRGF5KCk6IHZvaWQKc2V0Um91bmRzUGVyRGF5OgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTAzMAoJLy8gdGhpcy5yb3VuZHNQZXJEYXkudmFsdWUgPSBBVkdfUk9VTkRTX1BFUl9EQVkKCWJ5dGUgMHg3MjZmNzU2ZTY0NzM1MDY1NzI0NDYxNzkgLy8gInJvdW5kc1BlckRheSIKCWludCAzMDg1NwoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbih1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiZ2FzKCl2b2lkIgoJbWV0aG9kICJpbml0U3RvcmFnZShwYXkpdm9pZCIKCW1ldGhvZCAiYWRkU3Rha2UocGF5LGFkZHJlc3MpdWludDY0IgoJbWV0aG9kICJyZW1vdmVTdGFrZShhZGRyZXNzLHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJjbGFpbVRva2Vucygpdm9pZCIKCW1ldGhvZCAiZ2V0U3Rha2VySW5mbyhhZGRyZXNzKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgInBheVRva2VuUmV3YXJkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJ1cGRhdGVBbGdvZFZlcihzdHJpbmcpdm9pZCIKCW1ldGhvZCAiZXBvY2hCYWxhbmNlVXBkYXRlKCl2b2lkIgoJbWV0aG9kICJnb09ubGluZShwYXksYnl0ZVtdLGJ5dGVbXSxieXRlW10sdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKCW1ldGhvZCAiZ29PZmZsaW5lKCl2b2lkIgoJbWV0aG9kICJsaW5rVG9ORkQodWludDY0LHN0cmluZyl2b2lkIgoJbWV0aG9kICJwcm94aWVkU2V0VG9rZW5QYXlvdXRSYXRpbygodWludDY0LHVpbnQ2NCx1aW50NjQpKSh1aW50NjRbMjRdLHVpbnQ2NCkiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2dhcyAqYWJpX3JvdXRlX2luaXRTdG9yYWdlICphYmlfcm91dGVfYWRkU3Rha2UgKmFiaV9yb3V0ZV9yZW1vdmVTdGFrZSAqYWJpX3JvdXRlX2NsYWltVG9rZW5zICphYmlfcm91dGVfZ2V0U3Rha2VySW5mbyAqYWJpX3JvdXRlX3BheVRva2VuUmV3YXJkICphYmlfcm91dGVfdXBkYXRlQWxnb2RWZXIgKmFiaV9yb3V0ZV9lcG9jaEJhbGFuY2VVcGRhdGUgKmFiaV9yb3V0ZV9nb09ubGluZSAqYWJpX3JvdXRlX2dvT2ZmbGluZSAqYWJpX3JvdXRlX2xpbmtUb05GRCAqYWJpX3JvdXRlX3Byb3hpZWRTZXRUb2tlblBheW91dFJhdGlvCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgVXBkYXRlQXBwbGljYXRpb24KCWVycg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" + }, + "contract": { + "name": "StakingPool", + "desc": "", + "methods": [ + { + "name": "updateApplication", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "createApplication", + "desc": "Initialize the staking pool w/ owner and manager, but can only be created by the validator contract.", + "args": [ + { + "name": "creatingContractId", + "type": "uint64", + "desc": "id of contract that constructed us - the validator application (single global instance)" + }, + { + "name": "validatorId", + "type": "uint64", + "desc": "id of validator we're a staking pool of" + }, + { + "name": "poolId", + "type": "uint64", + "desc": "which pool id are we" + }, + { + "name": "minEntryStake", + "type": "uint64", + "desc": "minimum amount to be in pool, but also minimum amount balance can't go below (without removing all!)" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "gas", + "desc": "gas is a dummy no-op call that can be used to pool-up resource references and opcode cost", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "initStorage", + "desc": "Called after we're created and then funded, so we can create our large stakers ledger storageCaller has to get MBR amounts from ValidatorRegistry to know how much to fund us to cover the box storage costIf this is pool 1 AND the validator has specified a reward token, opt-in to that tokenso that the validator can seed the pool with future rewards of that token.", + "args": [ + { + "name": "mbrPayment", + "type": "pay", + "desc": "payment from caller which covers mbr increase of new staking pools' storage" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "addStake", + "desc": "Adds stake to the given account.Can ONLY be called by the validator contract that created usMust receive payment from the validator contract for amount being staked.", + "args": [ + { + "name": "stakedAmountPayment", + "type": "pay", + "desc": "prior payment coming from validator contract to us on behalf of staker." + }, + { + "name": "staker", + "type": "address", + "desc": "The account adding new stake" + } + ], + "returns": { + "type": "uint64", + "desc": "{uint64}new 'entry round' round number of stake add" + } + }, + { + "name": "removeStake", + "desc": "Removes stake on behalf of caller (removing own stake). If any token rewards exist, those are always sent infull. Also notifies the validator contract for this pools validator of the staker / balance changes.", + "args": [ + { + "name": "staker", + "type": "address", + "desc": "account to remove. normally same as sender, but the validator owner or manager can also callthis to remove the specified staker explicitly. The removed stake MUST only go to the staker of course. This isso a validator can shut down a poool and refund the stakers. It can also be used to kick out stakers who no longermeet the gating requirements (determined by the node daemon)." + }, + { + "name": "amountToUnstake", + "type": "uint64", + "desc": "The amount of stake to be removed. Specify 0 to remove all stake." + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "claimTokens", + "desc": "Claims all the available reward tokens a staker has available, sending their entire balance to the staker frompool 1 (either directly, or via validator->pool1 to pay it out)Also notifies the validator contract for this pools validator of the staker / balance changes.", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "getStakerInfo", + "desc": "Retrieves the staked information for a given staker.", + "args": [ + { + "name": "staker", + "type": "address", + "desc": "The address of the staker." + } + ], + "returns": { + "type": "(address,uint64,uint64,uint64,uint64)", + "desc": "{StakedInfo}- The staked information for the given staker." + } + }, + { + "name": "payTokenReward", + "desc": "[Internal protocol method] Remove a specified amount of 'community token' rewards for a staker.This can ONLY be called by our validator and only if we're pool 1 - with the token.Note: this can also be called by validator as part of OWNER wanting to send the reward tokenssomewhere else (ie if they're sunsetting their validator and need the reward tokens back).It's up to the validator to ensure that the balance in rewardTokenHeldBack is honored.", + "args": [ + { + "name": "staker", + "type": "address", + "desc": "the staker account to send rewards to" + }, + { + "name": "rewardToken", + "type": "uint64", + "desc": "id of reward token (to avoid re-entrancy in calling validator back to get id)" + }, + { + "name": "amountToSend", + "type": "uint64", + "desc": "amount to send the staker (there is significant trust here(!) - also why only validator can call us" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "updateAlgodVer", + "desc": "Update the (honor system) algod version for the node associated to this pool. The node management daemonshould compare its current nodes version to the version stored in global state, updating when different.The reti node daemon composes its own version string using format:{major}.{minor}.{build}{branch}[{commit hash}],ie: 3.22.0 rel/stable [6b508975][ ONLY OWNER OR MANAGER CAN CALL ]", + "args": [ + { + "name": "algodVer", + "type": "string", + "desc": "string representing the algorand node daemon version (reti node daemon composes its own meta version)" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "epochBalanceUpdate", + "desc": "Updates the balance of stakers in the pool based on the received 'rewards' (current balance vs known staked balance)stakers outstanding balance is adjusted based on their % of stake and time in the current epoch - so that balancecompounds over time and staker can remove that amount at will.The validator is paid their percentage each epoch payout.Note: ANYONE can call this.", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "goOnline", + "desc": "Registers a staking pool key online against a participation key.[ ONLY OWNER OR MANAGER CAN CALL ]", + "args": [ + { + "name": "feePayment", + "type": "pay", + "desc": "payment to cover extra fee of going online if offline - or 0 if not renewal" + }, + { + "name": "votePK", + "type": "byte[]", + "desc": "The vote public key." + }, + { + "name": "selectionPK", + "type": "byte[]", + "desc": "The selection public key." + }, + { + "name": "stateProofPK", + "type": "byte[]", + "desc": "The state proof public key." + }, + { + "name": "voteFirst", + "type": "uint64", + "desc": "The first vote index." + }, + { + "name": "voteLast", + "type": "uint64", + "desc": "The last vote index." + }, + { + "name": "voteKeyDilution", + "type": "uint64", + "desc": "The vote key dilution value." + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "goOffline", + "desc": "Marks a staking pool key OFFLINE.[ ONLY OWNER OR MANAGER CAN CALL ]", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "linkToNFD", + "args": [ + { + "name": "nfdAppId", + "type": "uint64" + }, + { + "name": "nfdName", + "type": "string" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "proxiedSetTokenPayoutRatio", + "desc": "proxiedSetTokenPayoutRatio is meant to be called by pools != 1 - calling US, pool #1We need to verify that we are in fact being called by another of OUR pools (not us)and then we'll call the validator on their behalf to update the token payouts", + "args": [ + { + "name": "poolKey", + "type": "(uint64,uint64,uint64)", + "desc": "ValidatorPoolKey tuple" + } + ], + "returns": { + "type": "(uint64[24],uint64)" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/reti/StakingPool.arc4.json b/examples/reti/StakingPool.arc4.json new file mode 100644 index 000000000..a990e25cd --- /dev/null +++ b/examples/reti/StakingPool.arc4.json @@ -0,0 +1,254 @@ +{ + "name": "StakingPool", + "desc": "", + "methods": [ + { + "name": "updateApplication", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "createApplication", + "desc": "Initialize the staking pool w/ owner and manager, but can only be created by the validator contract.", + "args": [ + { + "name": "creatingContractId", + "type": "uint64", + "desc": "id of contract that constructed us - the validator application (single global instance)" + }, + { + "name": "validatorId", + "type": "uint64", + "desc": "id of validator we're a staking pool of" + }, + { + "name": "poolId", + "type": "uint64", + "desc": "which pool id are we" + }, + { + "name": "minEntryStake", + "type": "uint64", + "desc": "minimum amount to be in pool, but also minimum amount balance can't go below (without removing all!)" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "gas", + "desc": "gas is a dummy no-op call that can be used to pool-up resource references and opcode cost", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "initStorage", + "desc": "Called after we're created and then funded, so we can create our large stakers ledger storageCaller has to get MBR amounts from ValidatorRegistry to know how much to fund us to cover the box storage costIf this is pool 1 AND the validator has specified a reward token, opt-in to that tokenso that the validator can seed the pool with future rewards of that token.", + "args": [ + { + "name": "mbrPayment", + "type": "pay", + "desc": "payment from caller which covers mbr increase of new staking pools' storage" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "addStake", + "desc": "Adds stake to the given account.Can ONLY be called by the validator contract that created usMust receive payment from the validator contract for amount being staked.", + "args": [ + { + "name": "stakedAmountPayment", + "type": "pay", + "desc": "prior payment coming from validator contract to us on behalf of staker." + }, + { + "name": "staker", + "type": "address", + "desc": "The account adding new stake" + } + ], + "returns": { + "type": "uint64", + "desc": "{uint64}new 'entry round' round number of stake add" + } + }, + { + "name": "removeStake", + "desc": "Removes stake on behalf of caller (removing own stake). If any token rewards exist, those are always sent infull. Also notifies the validator contract for this pools validator of the staker / balance changes.", + "args": [ + { + "name": "staker", + "type": "address", + "desc": "account to remove. normally same as sender, but the validator owner or manager can also callthis to remove the specified staker explicitly. The removed stake MUST only go to the staker of course. This isso a validator can shut down a poool and refund the stakers. It can also be used to kick out stakers who no longermeet the gating requirements (determined by the node daemon)." + }, + { + "name": "amountToUnstake", + "type": "uint64", + "desc": "The amount of stake to be removed. Specify 0 to remove all stake." + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "claimTokens", + "desc": "Claims all the available reward tokens a staker has available, sending their entire balance to the staker frompool 1 (either directly, or via validator->pool1 to pay it out)Also notifies the validator contract for this pools validator of the staker / balance changes.", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "getStakerInfo", + "desc": "Retrieves the staked information for a given staker.", + "args": [ + { + "name": "staker", + "type": "address", + "desc": "The address of the staker." + } + ], + "returns": { + "type": "(address,uint64,uint64,uint64,uint64)", + "desc": "{StakedInfo}- The staked information for the given staker." + } + }, + { + "name": "payTokenReward", + "desc": "[Internal protocol method] Remove a specified amount of 'community token' rewards for a staker.This can ONLY be called by our validator and only if we're pool 1 - with the token.Note: this can also be called by validator as part of OWNER wanting to send the reward tokenssomewhere else (ie if they're sunsetting their validator and need the reward tokens back).It's up to the validator to ensure that the balance in rewardTokenHeldBack is honored.", + "args": [ + { + "name": "staker", + "type": "address", + "desc": "the staker account to send rewards to" + }, + { + "name": "rewardToken", + "type": "uint64", + "desc": "id of reward token (to avoid re-entrancy in calling validator back to get id)" + }, + { + "name": "amountToSend", + "type": "uint64", + "desc": "amount to send the staker (there is significant trust here(!) - also why only validator can call us" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "updateAlgodVer", + "desc": "Update the (honor system) algod version for the node associated to this pool. The node management daemonshould compare its current nodes version to the version stored in global state, updating when different.The reti node daemon composes its own version string using format:{major}.{minor}.{build}{branch}[{commit hash}],ie: 3.22.0 rel/stable [6b508975][ ONLY OWNER OR MANAGER CAN CALL ]", + "args": [ + { + "name": "algodVer", + "type": "string", + "desc": "string representing the algorand node daemon version (reti node daemon composes its own meta version)" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "epochBalanceUpdate", + "desc": "Updates the balance of stakers in the pool based on the received 'rewards' (current balance vs known staked balance)stakers outstanding balance is adjusted based on their % of stake and time in the current epoch - so that balancecompounds over time and staker can remove that amount at will.The validator is paid their percentage each epoch payout.Note: ANYONE can call this.", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "goOnline", + "desc": "Registers a staking pool key online against a participation key.[ ONLY OWNER OR MANAGER CAN CALL ]", + "args": [ + { + "name": "feePayment", + "type": "pay", + "desc": "payment to cover extra fee of going online if offline - or 0 if not renewal" + }, + { + "name": "votePK", + "type": "byte[]", + "desc": "The vote public key." + }, + { + "name": "selectionPK", + "type": "byte[]", + "desc": "The selection public key." + }, + { + "name": "stateProofPK", + "type": "byte[]", + "desc": "The state proof public key." + }, + { + "name": "voteFirst", + "type": "uint64", + "desc": "The first vote index." + }, + { + "name": "voteLast", + "type": "uint64", + "desc": "The last vote index." + }, + { + "name": "voteKeyDilution", + "type": "uint64", + "desc": "The vote key dilution value." + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "goOffline", + "desc": "Marks a staking pool key OFFLINE.[ ONLY OWNER OR MANAGER CAN CALL ]", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "linkToNFD", + "args": [ + { + "name": "nfdAppId", + "type": "uint64" + }, + { + "name": "nfdName", + "type": "string" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "proxiedSetTokenPayoutRatio", + "desc": "proxiedSetTokenPayoutRatio is meant to be called by pools != 1 - calling US, pool #1We need to verify that we are in fact being called by another of OUR pools (not us)and then we'll call the validator on their behalf to update the token payouts", + "args": [ + { + "name": "poolKey", + "type": "(uint64,uint64,uint64)", + "desc": "ValidatorPoolKey tuple" + } + ], + "returns": { + "type": "(uint64[24],uint64)" + } + } + ] +} \ No newline at end of file diff --git a/examples/reti/StakingPool.clear.teal b/examples/reti/StakingPool.clear.teal new file mode 100644 index 000000000..e9f1d65b3 --- /dev/null +++ b/examples/reti/StakingPool.clear.teal @@ -0,0 +1 @@ +#pragma version 10 \ No newline at end of file diff --git a/examples/reti/StakingPool.src_map.json b/examples/reti/StakingPool.src_map.json new file mode 100644 index 000000000..be6d4a373 --- /dev/null +++ b/examples/reti/StakingPool.src_map.json @@ -0,0 +1,18868 @@ +[ + { + "teal": 1, + "source": 36, + "pc": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 274, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 285, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 293 + ] + }, + { + "teal": 13, + "source": 36, + "pc": [ + 294, + 295 + ] + }, + { + "teal": 14, + "source": 36, + "pc": [ + 296 + ] + }, + { + "teal": 15, + "source": 36, + "pc": [ + 297 + ] + }, + { + "teal": 16, + "source": 36, + "pc": [ + 298 + ] + }, + { + "teal": 17, + "source": 36, + "pc": [ + 299, + 300 + ] + }, + { + "teal": 18, + "source": 36, + "pc": [ + 301 + ] + }, + { + "teal": 19, + "source": 36, + "pc": [ + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327 + ] + }, + { + "teal": 23, + "source": 36, + "errorMessage": "The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?", + "pc": [ + 328 + ] + }, + { + "teal": 28, + "source": 91, + "pc": [ + 329, + 330, + 331 + ] + }, + { + "teal": 29, + "source": 91, + "pc": [ + 332 + ] + }, + { + "teal": 30, + "source": 91, + "pc": [ + 333 + ] + }, + { + "teal": 34, + "source": 91, + "pc": [ + 334, + 335, + 336 + ] + }, + { + "teal": 41, + "source": 93, + "pc": [ + 337, + 338 + ] + }, + { + "teal": 42, + "source": 93, + "pc": [ + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348, + 349, + 350, + 351, + 352, + 353, + 354, + 355, + 356, + 357, + 358, + 359, + 360, + 361, + 362, + 363, + 364, + 365, + 366, + 367, + 368, + 369, + 370, + 371, + 372 + ] + }, + { + "teal": 43, + "source": 93, + "pc": [ + 373 + ] + }, + { + "teal": 46, + "source": 92, + "errorMessage": "Temporary: contract is upgradeable but only during testing and only from a development account", + "pc": [ + 374 + ] + }, + { + "teal": 47, + "source": 91, + "pc": [ + 375 + ] + }, + { + "teal": 52, + "source": 105, + "pc": [ + 376, + 377, + 378 + ] + }, + { + "teal": 53, + "source": 105, + "pc": [ + 379 + ] + }, + { + "teal": 56, + "source": 105, + "pc": [ + 380, + 381, + 382 + ] + }, + { + "teal": 57, + "source": 105, + "pc": [ + 383 + ] + }, + { + "teal": 60, + "source": 105, + "pc": [ + 384, + 385, + 386 + ] + }, + { + "teal": 61, + "source": 105, + "pc": [ + 387 + ] + }, + { + "teal": 64, + "source": 105, + "pc": [ + 388, + 389, + 390 + ] + }, + { + "teal": 65, + "source": 105, + "pc": [ + 391 + ] + }, + { + "teal": 68, + "source": 105, + "pc": [ + 392, + 393, + 394 + ] + }, + { + "teal": 69, + "source": 105, + "pc": [ + 395 + ] + }, + { + "teal": 70, + "source": 105, + "pc": [ + 396 + ] + }, + { + "teal": 80, + "source": 105, + "pc": [ + 397, + 398, + 399 + ] + }, + { + "teal": 85, + "source": 106, + "pc": [ + 400, + 401 + ] + }, + { + "teal": 86, + "source": 106, + "pc": [ + 402 + ] + }, + { + "teal": 87, + "source": 106, + "pc": [ + 403 + ] + }, + { + "teal": 88, + "source": 106, + "pc": [ + 404, + 405, + 406 + ] + }, + { + "teal": 93, + "source": 108, + "pc": [ + 407, + 408 + ] + }, + { + "teal": 94, + "source": 108, + "pc": [ + 409 + ] + }, + { + "teal": 95, + "source": 108, + "pc": [ + 410 + ] + }, + { + "teal": 96, + "source": 108, + "pc": [ + 411 + ] + }, + { + "teal": 100, + "source": 109, + "pc": [ + 412, + 413 + ] + }, + { + "teal": 101, + "source": 109, + "pc": [ + 414 + ] + }, + { + "teal": 102, + "source": 109, + "pc": [ + 415 + ] + }, + { + "teal": 103, + "source": 109, + "pc": [ + 416 + ] + }, + { + "teal": 104, + "source": 106, + "pc": [ + 417, + 418, + 419 + ] + }, + { + "teal": 109, + "source": 111, + "pc": [ + 420, + 421 + ] + }, + { + "teal": 110, + "source": 111, + "pc": [ + 422 + ] + }, + { + "teal": 111, + "source": 111, + "pc": [ + 423 + ] + }, + { + "teal": 112, + "source": 111, + "pc": [ + 424 + ] + }, + { + "teal": 116, + "source": 112, + "pc": [ + 425, + 426 + ] + }, + { + "teal": 117, + "source": 112, + "pc": [ + 427 + ] + }, + { + "teal": 118, + "source": 112, + "pc": [ + 428 + ] + }, + { + "teal": 119, + "source": 112, + "pc": [ + 429 + ] + }, + { + "teal": 124, + "source": 114, + "pc": [ + 430, + 431 + ] + }, + { + "teal": 125, + "source": 114, + "pc": [ + 432, + 433 + ] + }, + { + "teal": 126, + "source": 114, + "pc": [ + 434 + ] + }, + { + "teal": 129, + "source": 114, + "errorMessage": "staking pool must have minimum entry of 1 algo", + "pc": [ + 435 + ] + }, + { + "teal": 133, + "source": 115, + "pc": [ + 436 + ] + }, + { + "teal": 134, + "source": 115, + "pc": [ + 437, + 438 + ] + }, + { + "teal": 135, + "source": 115, + "pc": [ + 439 + ] + }, + { + "teal": 139, + "source": 116, + "pc": [ + 440 + ] + }, + { + "teal": 140, + "source": 116, + "pc": [ + 441, + 442 + ] + }, + { + "teal": 141, + "source": 116, + "pc": [ + 443 + ] + }, + { + "teal": 145, + "source": 117, + "pc": [ + 444 + ] + }, + { + "teal": 146, + "source": 117, + "pc": [ + 445, + 446 + ] + }, + { + "teal": 147, + "source": 117, + "pc": [ + 447 + ] + }, + { + "teal": 151, + "source": 118, + "pc": [ + 448, + 449 + ] + }, + { + "teal": 152, + "source": 118, + "pc": [ + 450 + ] + }, + { + "teal": 153, + "source": 118, + "pc": [ + 451 + ] + }, + { + "teal": 157, + "source": 119, + "pc": [ + 452, + 453 + ] + }, + { + "teal": 158, + "source": 119, + "pc": [ + 454 + ] + }, + { + "teal": 159, + "source": 119, + "pc": [ + 455 + ] + }, + { + "teal": 163, + "source": 120, + "pc": [ + 456, + 457 + ] + }, + { + "teal": 164, + "source": 120, + "pc": [ + 458, + 459 + ] + }, + { + "teal": 165, + "source": 120, + "pc": [ + 460 + ] + }, + { + "teal": 169, + "source": 121, + "pc": [ + 461, + 462 + ] + }, + { + "teal": 170, + "source": 121, + "pc": [ + 463, + 464 + ] + }, + { + "teal": 171, + "source": 121, + "pc": [ + 465 + ] + }, + { + "teal": 175, + "source": 122, + "pc": [ + 466, + 467 + ] + }, + { + "teal": 176, + "source": 122, + "pc": [ + 468 + ] + }, + { + "teal": 177, + "source": 122, + "pc": [ + 469 + ] + }, + { + "teal": 181, + "source": 124, + "pc": [ + 470, + 471, + 472 + ] + }, + { + "teal": 185, + "source": 125, + "pc": [ + 473, + 474 + ] + }, + { + "teal": 186, + "source": 125, + "pc": [ + 475, + 476 + ] + }, + { + "teal": 187, + "source": 125, + "pc": [ + 477, + 478 + ] + }, + { + "teal": 188, + "source": 125, + "pc": [ + 479, + 480 + ] + }, + { + "teal": 189, + "source": 125, + "pc": [ + 481 + ] + }, + { + "teal": 190, + "source": 125, + "pc": [ + 482 + ] + }, + { + "teal": 191, + "source": 125, + "pc": [ + 483 + ] + }, + { + "teal": 192, + "source": 125, + "pc": [ + 484 + ] + }, + { + "teal": 196, + "source": 126, + "pc": [ + 485, + 486 + ] + }, + { + "teal": 197, + "source": 126, + "pc": [ + 487, + 488 + ] + }, + { + "teal": 198, + "source": 126, + "pc": [ + 489 + ] + }, + { + "teal": 202, + "source": 127, + "pc": [ + 490, + 491 + ] + }, + { + "teal": 203, + "source": 127, + "pc": [ + 492 + ] + }, + { + "teal": 204, + "source": 127, + "pc": [ + 493 + ] + }, + { + "teal": 208, + "source": 128, + "pc": [ + 494, + 495 + ] + }, + { + "teal": 209, + "source": 128, + "pc": [ + 496, + 497 + ] + }, + { + "teal": 210, + "source": 128, + "pc": [ + 498 + ] + }, + { + "teal": 211, + "source": 105, + "pc": [ + 499 + ] + }, + { + "teal": 216, + "source": 134, + "pc": [ + 500, + 501, + 502 + ] + }, + { + "teal": 217, + "source": 134, + "pc": [ + 503 + ] + }, + { + "teal": 218, + "source": 134, + "pc": [ + 504 + ] + }, + { + "teal": 224, + "source": 134, + "pc": [ + 505, + 506, + 507 + ] + }, + { + "teal": 225, + "source": 134, + "pc": [ + 508 + ] + }, + { + "teal": 229, + "source": 136, + "pc": [ + 509, + 510, + 511 + ] + }, + { + "teal": 233, + "source": 140, + "pc": [ + 512, + 513, + 514 + ] + }, + { + "teal": 234, + "source": 140, + "pc": [ + 515, + 516 + ] + }, + { + "teal": 235, + "source": 140, + "pc": [ + 517, + 518 + ] + }, + { + "teal": 236, + "source": 140, + "pc": [ + 519 + ] + }, + { + "teal": 237, + "source": 140, + "pc": [ + 520 + ] + }, + { + "teal": 238, + "source": 136, + "pc": [ + 521 + ] + }, + { + "teal": 243, + "source": 150, + "pc": [ + 522, + 523 + ] + }, + { + "teal": 244, + "source": 150, + "pc": [ + 524 + ] + }, + { + "teal": 245, + "source": 150, + "pc": [ + 525 + ] + }, + { + "teal": 246, + "source": 150, + "pc": [ + 526 + ] + }, + { + "teal": 247, + "source": 150, + "pc": [ + 527, + 528 + ] + }, + { + "teal": 248, + "source": 150, + "pc": [ + 529 + ] + }, + { + "teal": 249, + "source": 150, + "pc": [ + 530 + ] + }, + { + "teal": 252, + "source": 150, + "errorMessage": "argument 0 (mbrPayment) for initStorage must be a pay transaction", + "pc": [ + 531 + ] + }, + { + "teal": 255, + "source": 150, + "pc": [ + 532, + 533, + 534 + ] + }, + { + "teal": 256, + "source": 150, + "pc": [ + 535 + ] + }, + { + "teal": 257, + "source": 150, + "pc": [ + 536 + ] + }, + { + "teal": 267, + "source": 150, + "pc": [ + 537, + 538, + 539 + ] + }, + { + "teal": 270, + "source": 150, + "pc": [ + 540, + 541 + ] + }, + { + "teal": 271, + "source": 150, + "pc": [ + 542, + 543 + ] + }, + { + "teal": 275, + "source": 151, + "pc": [ + 544 + ] + }, + { + "teal": 276, + "source": 151, + "pc": [ + 545 + ] + }, + { + "teal": 277, + "source": 151, + "pc": [ + 546 + ] + }, + { + "teal": 278, + "source": 151, + "pc": [ + 547 + ] + }, + { + "teal": 279, + "source": 151, + "pc": [ + 548 + ] + }, + { + "teal": 282, + "source": 151, + "errorMessage": "staking pool already initialized", + "pc": [ + 549 + ] + }, + { + "teal": 289, + "source": 154, + "pc": [ + 550 + ] + }, + { + "teal": 290, + "source": 154, + "pc": [ + 551 + ] + }, + { + "teal": 291, + "source": 154, + "pc": [ + 552, + 553 + ] + }, + { + "teal": 292, + "source": 154, + "pc": [ + 554, + 555 + ] + }, + { + "teal": 293, + "source": 154, + "pc": [ + 556, + 557 + ] + }, + { + "teal": 297, + "source": 155, + "pc": [ + 558 + ] + }, + { + "teal": 298, + "source": 155, + "pc": [ + 559 + ] + }, + { + "teal": 299, + "source": 155, + "pc": [ + 560, + 561 + ] + }, + { + "teal": 303, + "source": 156, + "pc": [ + 562 + ] + }, + { + "teal": 304, + "source": 156, + "pc": [ + 563 + ] + }, + { + "teal": 305, + "source": 156, + "pc": [ + 564 + ] + }, + { + "teal": 306, + "source": 156, + "pc": [ + 565, + 566 + ] + }, + { + "teal": 309, + "source": 154, + "pc": [ + 567 + ] + }, + { + "teal": 310, + "source": 154, + "pc": [ + 568, + 569 + ] + }, + { + "teal": 313, + "source": 154, + "pc": [ + 570 + ] + }, + { + "teal": 314, + "source": 154, + "pc": [ + 571, + 572 + ] + }, + { + "teal": 315, + "source": 154, + "pc": [ + 573 + ] + }, + { + "teal": 316, + "source": 154, + "pc": [ + 574 + ] + }, + { + "teal": 317, + "source": 154, + "pc": [ + 575, + 576 + ] + }, + { + "teal": 318, + "source": 154, + "pc": [ + 577, + 578, + 579 + ] + }, + { + "teal": 319, + "source": 154, + "pc": [ + 580, + 581 + ] + }, + { + "teal": 323, + "source": 158, + "pc": [ + 582, + 583 + ] + }, + { + "teal": 324, + "source": 158, + "pc": [ + 584, + 585, + 586 + ] + }, + { + "teal": 325, + "source": 158, + "pc": [ + 587 + ] + }, + { + "teal": 326, + "source": 158, + "pc": [ + 588 + ] + }, + { + "teal": 327, + "source": 158, + "pc": [ + 589 + ] + }, + { + "teal": 328, + "source": 158, + "pc": [ + 590, + 591 + ] + }, + { + "teal": 332, + "source": 159, + "pc": [ + 592, + 593 + ] + }, + { + "teal": 333, + "source": 159, + "pc": [ + 594 + ] + }, + { + "teal": 334, + "source": 159, + "pc": [ + 595, + 596, + 597 + ] + }, + { + "teal": 335, + "source": 159, + "pc": [ + 598 + ] + }, + { + "teal": 336, + "source": 159, + "pc": [ + 599 + ] + }, + { + "teal": 337, + "source": 159, + "pc": [ + 600 + ] + }, + { + "teal": 338, + "source": 159, + "pc": [ + 601 + ] + }, + { + "teal": 339, + "source": 159, + "pc": [ + 602 + ] + }, + { + "teal": 342, + "source": 159, + "pc": [ + 603, + 604, + 605 + ] + }, + { + "teal": 343, + "source": 159, + "pc": [ + 606, + 607 + ] + }, + { + "teal": 344, + "source": 159, + "pc": [ + 608, + 609, + 610 + ] + }, + { + "teal": 347, + "source": 159, + "pc": [ + 611 + ] + }, + { + "teal": 350, + "source": 159, + "pc": [ + 612, + 613 + ] + }, + { + "teal": 357, + "source": 161, + "pc": [ + 614, + 615 + ] + }, + { + "teal": 358, + "source": 162, + "pc": [ + 616, + 617 + ] + }, + { + "teal": 359, + "source": 161, + "pc": [ + 618 + ] + }, + { + "teal": 360, + "source": 163, + "pc": [ + 619, + 620, + 621 + ] + }, + { + "teal": 361, + "source": 163, + "pc": [ + 622, + 623, + 624 + ] + }, + { + "teal": 362, + "source": 162, + "pc": [ + 625 + ] + }, + { + "teal": 363, + "source": 160, + "pc": [ + 626, + 627 + ] + }, + { + "teal": 368, + "source": 166, + "pc": [ + 628, + 629 + ] + }, + { + "teal": 369, + "source": 166, + "pc": [ + 630, + 631 + ] + }, + { + "teal": 370, + "source": 166, + "pc": [ + 632, + 633 + ] + }, + { + "teal": 371, + "source": 166, + "pc": [ + 634 + ] + }, + { + "teal": 374, + "source": 166, + "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", + "pc": [ + 635 + ] + }, + { + "teal": 377, + "source": 166, + "pc": [ + 636, + 637 + ] + }, + { + "teal": 378, + "source": 166, + "pc": [ + 638, + 639 + ] + }, + { + "teal": 379, + "source": 166, + "pc": [ + 640, + 641 + ] + }, + { + "teal": 380, + "source": 166, + "pc": [ + 642 + ] + }, + { + "teal": 383, + "source": 166, + "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"amount\",\"expected\":\"PoolInitMbr\"}", + "pc": [ + 643 + ] + }, + { + "teal": 387, + "source": 167, + "pc": [ + 644 + ] + }, + { + "teal": 388, + "source": 167, + "pc": [ + 645, + 646, + 647 + ] + }, + { + "teal": 389, + "source": 167, + "pc": [ + 648 + ] + }, + { + "teal": 390, + "source": 167, + "pc": [ + 649 + ] + }, + { + "teal": 395, + "source": 169, + "pc": [ + 650, + 651 + ] + }, + { + "teal": 396, + "source": 169, + "pc": [ + 652 + ] + }, + { + "teal": 397, + "source": 169, + "pc": [ + 653, + 654, + 655 + ] + }, + { + "teal": 398, + "source": 169, + "pc": [ + 656 + ] + }, + { + "teal": 399, + "source": 169, + "pc": [ + 657 + ] + }, + { + "teal": 400, + "source": 169, + "pc": [ + 658 + ] + }, + { + "teal": 401, + "source": 169, + "pc": [ + 659 + ] + }, + { + "teal": 402, + "source": 169, + "pc": [ + 660 + ] + }, + { + "teal": 405, + "source": 169, + "pc": [ + 661, + 662, + 663 + ] + }, + { + "teal": 414, + "source": 171, + "pc": [ + 664 + ] + }, + { + "teal": 415, + "source": 171, + "pc": [ + 665, + 666 + ] + }, + { + "teal": 416, + "source": 171, + "pc": [ + 667, + 668 + ] + }, + { + "teal": 420, + "source": 172, + "pc": [ + 669, + 670 + ] + }, + { + "teal": 421, + "source": 172, + "pc": [ + 671, + 672, + 673 + ] + }, + { + "teal": 422, + "source": 172, + "pc": [ + 674 + ] + }, + { + "teal": 423, + "source": 172, + "pc": [ + 675, + 676 + ] + }, + { + "teal": 427, + "source": 173, + "pc": [ + 677, + 678 + ] + }, + { + "teal": 428, + "source": 173, + "pc": [ + 679, + 680 + ] + }, + { + "teal": 432, + "source": 174, + "pc": [ + 681 + ] + }, + { + "teal": 433, + "source": 174, + "pc": [ + 682, + 683 + ] + }, + { + "teal": 436, + "source": 171, + "pc": [ + 684 + ] + }, + { + "teal": 437, + "source": 171, + "pc": [ + 685, + 686 + ] + }, + { + "teal": 440, + "source": 171, + "pc": [ + 687 + ] + }, + { + "teal": 443, + "source": 150, + "pc": [ + 688 + ] + }, + { + "teal": 448, + "source": 189, + "pc": [ + 689, + 690 + ] + }, + { + "teal": 451, + "source": 189, + "pc": [ + 691, + 692, + 693 + ] + }, + { + "teal": 452, + "source": 189, + "pc": [ + 694 + ] + }, + { + "teal": 453, + "source": 189, + "pc": [ + 695 + ] + }, + { + "teal": 454, + "source": 189, + "pc": [ + 696, + 697 + ] + }, + { + "teal": 455, + "source": 189, + "pc": [ + 698 + ] + }, + { + "teal": 458, + "source": 189, + "errorMessage": "argument 0 (staker) for addStake must be a address", + "pc": [ + 699 + ] + }, + { + "teal": 461, + "source": 189, + "pc": [ + 700, + 701 + ] + }, + { + "teal": 462, + "source": 189, + "pc": [ + 702 + ] + }, + { + "teal": 463, + "source": 189, + "pc": [ + 703 + ] + }, + { + "teal": 464, + "source": 189, + "pc": [ + 704 + ] + }, + { + "teal": 465, + "source": 189, + "pc": [ + 705, + 706 + ] + }, + { + "teal": 466, + "source": 189, + "pc": [ + 707 + ] + }, + { + "teal": 467, + "source": 189, + "pc": [ + 708 + ] + }, + { + "teal": 470, + "source": 189, + "errorMessage": "argument 1 (stakedAmountPayment) for addStake must be a pay transaction", + "pc": [ + 709 + ] + }, + { + "teal": 473, + "source": 189, + "pc": [ + 710, + 711, + 712 + ] + }, + { + "teal": 474, + "source": 189, + "pc": [ + 713 + ] + }, + { + "teal": 475, + "source": 189, + "pc": [ + 714 + ] + }, + { + "teal": 476, + "source": 189, + "pc": [ + 715 + ] + }, + { + "teal": 477, + "source": 189, + "pc": [ + 716 + ] + }, + { + "teal": 478, + "source": 189, + "pc": [ + 717 + ] + }, + { + "teal": 491, + "source": 189, + "pc": [ + 718, + 719, + 720 + ] + }, + { + "teal": 494, + "source": 189, + "pc": [ + 721, + 722 + ] + }, + { + "teal": 495, + "source": 189, + "pc": [ + 723, + 724 + ] + }, + { + "teal": 499, + "source": 190, + "pc": [ + 725 + ] + }, + { + "teal": 500, + "source": 190, + "pc": [ + 726 + ] + }, + { + "teal": 501, + "source": 190, + "pc": [ + 727 + ] + }, + { + "teal": 502, + "source": 190, + "pc": [ + 728 + ] + }, + { + "teal": 505, + "source": 190, + "errorMessage": "staking pool must be initialized first", + "pc": [ + 729 + ] + }, + { + "teal": 512, + "source": 194, + "pc": [ + 730, + 731 + ] + }, + { + "teal": 513, + "source": 194, + "pc": [ + 732 + ] + }, + { + "teal": 514, + "source": 194, + "pc": [ + 733 + ] + }, + { + "teal": 515, + "source": 194, + "pc": [ + 734, + 735 + ] + }, + { + "teal": 516, + "source": 194, + "pc": [ + 736 + ] + }, + { + "teal": 517, + "source": 194, + "pc": [ + 737 + ] + }, + { + "teal": 520, + "source": 193, + "errorMessage": "stake can only be added via the validator contract", + "pc": [ + 738 + ] + }, + { + "teal": 524, + "source": 197, + "pc": [ + 739, + 740 + ] + }, + { + "teal": 525, + "source": 197, + "pc": [ + 741, + 742 + ] + }, + { + "teal": 526, + "source": 197, + "pc": [ + 743 + ] + }, + { + "teal": 527, + "source": 197, + "pc": [ + 744 + ] + }, + { + "teal": 531, + "source": 200, + "pc": [ + 745, + 746, + 747 + ] + }, + { + "teal": 540, + "source": 204, + "pc": [ + 748, + 749 + ] + }, + { + "teal": 541, + "source": 205, + "pc": [ + 750, + 751 + ] + }, + { + "teal": 542, + "source": 205, + "pc": [ + 752 + ] + }, + { + "teal": 543, + "source": 205, + "pc": [ + 753 + ] + }, + { + "teal": 544, + "source": 205, + "pc": [ + 754, + 755 + ] + }, + { + "teal": 545, + "source": 205, + "pc": [ + 756 + ] + }, + { + "teal": 546, + "source": 205, + "pc": [ + 757 + ] + }, + { + "teal": 549, + "source": 205, + "errorMessage": "transaction verification failed: {\"txn\":\"stakedAmountPayment\",\"field\":\"sender\",\"expected\":\"this.creatingValidatorContractAppId.value.address\"}", + "pc": [ + 758 + ] + }, + { + "teal": 552, + "source": 204, + "pc": [ + 759, + 760 + ] + }, + { + "teal": 553, + "source": 206, + "pc": [ + 761, + 762 + ] + }, + { + "teal": 554, + "source": 206, + "pc": [ + 763, + 764 + ] + }, + { + "teal": 555, + "source": 206, + "pc": [ + 765 + ] + }, + { + "teal": 558, + "source": 206, + "errorMessage": "transaction verification failed: {\"txn\":\"stakedAmountPayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", + "pc": [ + 766 + ] + }, + { + "teal": 561, + "source": 204, + "pc": [ + 767, + 768 + ] + }, + { + "teal": 562, + "source": 207, + "pc": [ + 769, + 770 + ] + }, + { + "teal": 563, + "source": 207, + "pc": [ + 771, + 772 + ] + }, + { + "teal": 564, + "source": 207, + "pc": [ + 773, + 774 + ] + }, + { + "teal": 565, + "source": 207, + "pc": [ + 775 + ] + }, + { + "teal": 568, + "source": 207, + "errorMessage": "transaction verification failed: {\"txn\":\"stakedAmountPayment\",\"field\":\"amount\",\"expected\":\"stakedAmountPayment.amount\"}", + "pc": [ + 776 + ] + }, + { + "teal": 572, + "source": 213, + "pc": [ + 777, + 778 + ] + }, + { + "teal": 573, + "source": 213, + "pc": [ + 779, + 780, + 781 + ] + }, + { + "teal": 574, + "source": 213, + "pc": [ + 782 + ] + }, + { + "teal": 575, + "source": 213, + "pc": [ + 783, + 784 + ] + }, + { + "teal": 579, + "source": 214, + "pc": [ + 785 + ] + }, + { + "teal": 580, + "source": 214, + "pc": [ + 786, + 787 + ] + }, + { + "teal": 584, + "source": 216, + "pc": [ + 788, + 789 + ] + }, + { + "teal": 585, + "source": 216, + "pc": [ + 790 + ] + }, + { + "teal": 586, + "source": 216, + "pc": [ + 791, + 792 + ] + }, + { + "teal": 587, + "source": 216, + "pc": [ + 793, + 794 + ] + }, + { + "teal": 588, + "source": 216, + "pc": [ + 795 + ] + }, + { + "teal": 589, + "source": 216, + "pc": [ + 796, + 797 + ] + }, + { + "teal": 590, + "source": 216, + "pc": [ + 798 + ] + }, + { + "teal": 591, + "source": 216, + "pc": [ + 799 + ] + }, + { + "teal": 595, + "source": 218, + "pc": [ + 800, + 801 + ] + }, + { + "teal": 596, + "source": 218, + "pc": [ + 802 + ] + }, + { + "teal": 597, + "source": 218, + "pc": [ + 803, + 804 + ] + }, + { + "teal": 598, + "source": 218, + "pc": [ + 805 + ] + }, + { + "teal": 599, + "source": 218, + "pc": [ + 806 + ] + }, + { + "teal": 600, + "source": 218, + "pc": [ + 807, + 808 + ] + }, + { + "teal": 601, + "source": 218, + "pc": [ + 809 + ] + }, + { + "teal": 602, + "source": 218, + "pc": [ + 810, + 811 + ] + }, + { + "teal": 607, + "source": 219, + "pc": [ + 812, + 813 + ] + }, + { + "teal": 608, + "source": 219, + "pc": [ + 814 + ] + }, + { + "teal": 609, + "source": 220, + "pc": [ + 815 + ] + }, + { + "teal": 610, + "source": 220, + "pc": [ + 816, + 817 + ] + }, + { + "teal": 611, + "source": 220, + "pc": [ + 818, + 819 + ] + }, + { + "teal": 612, + "source": 220, + "pc": [ + 820 + ] + }, + { + "teal": 613, + "source": 220, + "pc": [ + 821, + 822 + ] + }, + { + "teal": 614, + "source": 220, + "pc": [ + 823 + ] + }, + { + "teal": 615, + "source": 220, + "pc": [ + 824 + ] + }, + { + "teal": 616, + "source": 220, + "pc": [ + 825 + ] + }, + { + "teal": 617, + "source": 220, + "pc": [ + 826 + ] + }, + { + "teal": 618, + "source": 220, + "pc": [ + 827 + ] + }, + { + "teal": 619, + "source": 220, + "pc": [ + 828, + 829 + ] + }, + { + "teal": 620, + "source": 220, + "pc": [ + 830 + ] + }, + { + "teal": 623, + "source": 220, + "errorMessage": "this.stakeAccumulator.value + (stakedAmountPayment.amount as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits", + "pc": [ + 831 + ] + }, + { + "teal": 624, + "source": 220, + "pc": [ + 832, + 833 + ] + }, + { + "teal": 625, + "source": 220, + "pc": [ + 834 + ] + }, + { + "teal": 626, + "source": 220, + "pc": [ + 835 + ] + }, + { + "teal": 627, + "source": 220, + "pc": [ + 836 + ] + }, + { + "teal": 628, + "source": 220, + "pc": [ + 837 + ] + }, + { + "teal": 629, + "source": 220, + "pc": [ + 838, + 839 + ] + }, + { + "teal": 630, + "source": 220, + "pc": [ + 840 + ] + }, + { + "teal": 631, + "source": 220, + "pc": [ + 841 + ] + }, + { + "teal": 632, + "source": 220, + "pc": [ + 842 + ] + }, + { + "teal": 633, + "source": 219, + "pc": [ + 843 + ] + }, + { + "teal": 637, + "source": 223, + "pc": [ + 844 + ] + }, + { + "teal": 638, + "source": 223, + "pc": [ + 845, + 846 + ] + }, + { + "teal": 643, + "source": 223, + "pc": [ + 847, + 848 + ] + }, + { + "teal": 644, + "source": 223, + "pc": [ + 849, + 850 + ] + }, + { + "teal": 645, + "source": 223, + "pc": [ + 851 + ] + }, + { + "teal": 646, + "source": 223, + "pc": [ + 852, + 853, + 854 + ] + }, + { + "teal": 651, + "source": 224, + "pc": [ + 855, + 856 + ] + }, + { + "teal": 652, + "source": 224, + "pc": [ + 857, + 858 + ] + }, + { + "teal": 653, + "source": 224, + "pc": [ + 859 + ] + }, + { + "teal": 654, + "source": 224, + "pc": [ + 860, + 861, + 862 + ] + }, + { + "teal": 659, + "source": 225, + "pc": [ + 863 + ] + }, + { + "teal": 660, + "source": 225, + "pc": [ + 864 + ] + }, + { + "teal": 661, + "source": 225, + "pc": [ + 865, + 866 + ] + }, + { + "teal": 662, + "source": 225, + "pc": [ + 867 + ] + }, + { + "teal": 663, + "source": 225, + "pc": [ + 868, + 869 + ] + }, + { + "teal": 664, + "source": 225, + "pc": [ + 870, + 871 + ] + }, + { + "teal": 665, + "source": 225, + "pc": [ + 872 + ] + }, + { + "teal": 666, + "source": 225, + "pc": [ + 873, + 874 + ] + }, + { + "teal": 667, + "source": 225, + "pc": [ + 875, + 876 + ] + }, + { + "teal": 668, + "source": 225, + "pc": [ + 877, + 878 + ] + }, + { + "teal": 669, + "source": 225, + "pc": [ + 879, + 880 + ] + }, + { + "teal": 670, + "source": 225, + "pc": [ + 881 + ] + }, + { + "teal": 675, + "source": 227, + "pc": [ + 882, + 883 + ] + }, + { + "teal": 676, + "source": 227, + "pc": [ + 884 + ] + }, + { + "teal": 677, + "source": 227, + "pc": [ + 885 + ] + }, + { + "teal": 678, + "source": 227, + "pc": [ + 886 + ] + }, + { + "teal": 679, + "source": 227, + "pc": [ + 887 + ] + }, + { + "teal": 680, + "source": 227, + "pc": [ + 888, + 889 + ] + }, + { + "teal": 681, + "source": 227, + "pc": [ + 890 + ] + }, + { + "teal": 682, + "source": 227, + "pc": [ + 891, + 892 + ] + }, + { + "teal": 687, + "source": 228, + "pc": [ + 893, + 894 + ] + }, + { + "teal": 688, + "source": 228, + "pc": [ + 895, + 896, + 897 + ] + }, + { + "teal": 689, + "source": 228, + "pc": [ + 898, + 899 + ] + }, + { + "teal": 690, + "source": 228, + "pc": [ + 900 + ] + }, + { + "teal": 691, + "source": 228, + "pc": [ + 901, + 902, + 903 + ] + }, + { + "teal": 696, + "source": 230, + "pc": [ + 904, + 905 + ] + }, + { + "teal": 697, + "source": 230, + "pc": [ + 906, + 907 + ] + }, + { + "teal": 698, + "source": 230, + "pc": [ + 908, + 909 + ] + }, + { + "teal": 699, + "source": 230, + "pc": [ + 910, + 911, + 912 + ] + }, + { + "teal": 700, + "source": 230, + "pc": [ + 913 + ] + }, + { + "teal": 701, + "source": 230, + "pc": [ + 914, + 915 + ] + }, + { + "teal": 702, + "source": 230, + "pc": [ + 916, + 917 + ] + }, + { + "teal": 703, + "source": 230, + "pc": [ + 918 + ] + }, + { + "teal": 704, + "source": 230, + "pc": [ + 919 + ] + }, + { + "teal": 705, + "source": 230, + "pc": [ + 920 + ] + }, + { + "teal": 706, + "source": 230, + "pc": [ + 921, + 922 + ] + }, + { + "teal": 710, + "source": 231, + "pc": [ + 923, + 924 + ] + }, + { + "teal": 711, + "source": 231, + "pc": [ + 925, + 926 + ] + }, + { + "teal": 712, + "source": 231, + "pc": [ + 927, + 928 + ] + }, + { + "teal": 713, + "source": 231, + "pc": [ + 929 + ] + }, + { + "teal": 714, + "source": 231, + "pc": [ + 930 + ] + }, + { + "teal": 715, + "source": 231, + "pc": [ + 931, + 932 + ] + }, + { + "teal": 719, + "source": 234, + "pc": [ + 933, + 934 + ] + }, + { + "teal": 720, + "source": 234, + "pc": [ + 935 + ] + }, + { + "teal": 721, + "source": 234, + "pc": [ + 936 + ] + }, + { + "teal": 722, + "source": 234, + "pc": [ + 937, + 938 + ] + }, + { + "teal": 723, + "source": 234, + "pc": [ + 939 + ] + }, + { + "teal": 724, + "source": 234, + "pc": [ + 940, + 941 + ] + }, + { + "teal": 725, + "source": 234, + "pc": [ + 942 + ] + }, + { + "teal": 729, + "source": 236, + "pc": [ + 943, + 944 + ] + }, + { + "teal": 730, + "source": 236, + "pc": [ + 945, + 946, + 947 + ] + }, + { + "teal": 736, + "source": 238, + "pc": [ + 948, + 949 + ] + }, + { + "teal": 737, + "source": 238, + "pc": [ + 950 + ] + }, + { + "teal": 738, + "source": 238, + "pc": [ + 951 + ] + }, + { + "teal": 739, + "source": 238, + "pc": [ + 952 + ] + }, + { + "teal": 740, + "source": 238, + "pc": [ + 953, + 954, + 955 + ] + }, + { + "teal": 741, + "source": 238, + "pc": [ + 956, + 957 + ] + }, + { + "teal": 742, + "source": 238, + "pc": [ + 958, + 959, + 960 + ] + }, + { + "teal": 743, + "source": 238, + "pc": [ + 961, + 962 + ] + }, + { + "teal": 744, + "source": 238, + "pc": [ + 963 + ] + }, + { + "teal": 745, + "source": 238, + "pc": [ + 964 + ] + }, + { + "teal": 748, + "source": 238, + "pc": [ + 965, + 966, + 967 + ] + }, + { + "teal": 753, + "source": 239, + "pc": [ + 968, + 969 + ] + }, + { + "teal": 754, + "source": 239, + "pc": [ + 970 + ] + }, + { + "teal": 755, + "source": 239, + "pc": [ + 971 + ] + }, + { + "teal": 756, + "source": 239, + "pc": [ + 972, + 973 + ] + }, + { + "teal": 763, + "source": 223, + "pc": [ + 974, + 975 + ] + }, + { + "teal": 764, + "source": 223, + "pc": [ + 976 + ] + }, + { + "teal": 765, + "source": 223, + "pc": [ + 977 + ] + }, + { + "teal": 766, + "source": 223, + "pc": [ + 978, + 979 + ] + }, + { + "teal": 767, + "source": 223, + "pc": [ + 980, + 981, + 982 + ] + }, + { + "teal": 773, + "source": 243, + "pc": [ + 983, + 984 + ] + }, + { + "teal": 774, + "source": 243, + "pc": [ + 985 + ] + }, + { + "teal": 775, + "source": 243, + "pc": [ + 986 + ] + }, + { + "teal": 776, + "source": 243, + "pc": [ + 987, + 988, + 989 + ] + }, + { + "teal": 780, + "source": 245, + "errorMessage": "Staking pool full", + "pc": [ + 990 + ] + }, + { + "teal": 785, + "source": 250, + "pc": [ + 991, + 992 + ] + }, + { + "teal": 786, + "source": 250, + "pc": [ + 993, + 994 + ] + }, + { + "teal": 787, + "source": 250, + "pc": [ + 995, + 996 + ] + }, + { + "teal": 788, + "source": 250, + "pc": [ + 997 + ] + }, + { + "teal": 789, + "source": 250, + "pc": [ + 998 + ] + }, + { + "teal": 792, + "source": 250, + "errorMessage": "must stake at least the minimum for this pool", + "pc": [ + 999 + ] + }, + { + "teal": 796, + "source": 252, + "pc": [ + 1000, + 1001 + ] + }, + { + "teal": 797, + "source": 252, + "pc": [ + 1002 + ] + }, + { + "teal": 798, + "source": 252, + "pc": [ + 1003 + ] + }, + { + "teal": 799, + "source": 252, + "pc": [ + 1004 + ] + }, + { + "teal": 800, + "source": 252, + "pc": [ + 1005 + ] + }, + { + "teal": 801, + "source": 252, + "pc": [ + 1006 + ] + }, + { + "teal": 802, + "source": 252, + "pc": [ + 1007 + ] + }, + { + "teal": 803, + "source": 252, + "pc": [ + 1008, + 1009 + ] + }, + { + "teal": 804, + "source": 252, + "pc": [ + 1010 + ] + }, + { + "teal": 805, + "source": 252, + "pc": [ + 1011, + 1012 + ] + }, + { + "teal": 806, + "source": 252, + "pc": [ + 1013 + ] + }, + { + "teal": 807, + "source": 252, + "pc": [ + 1014, + 1015 + ] + }, + { + "teal": 808, + "source": 252, + "pc": [ + 1016 + ] + }, + { + "teal": 809, + "source": 252, + "pc": [ + 1017 + ] + }, + { + "teal": 819, + "source": 253, + "pc": [ + 1018, + 1019 + ] + }, + { + "teal": 820, + "source": 253, + "pc": [ + 1020 + ] + }, + { + "teal": 821, + "source": 253, + "pc": [ + 1021 + ] + }, + { + "teal": 822, + "source": 253, + "pc": [ + 1022 + ] + }, + { + "teal": 823, + "source": 253, + "pc": [ + 1023 + ] + }, + { + "teal": 824, + "source": 254, + "pc": [ + 1024, + 1025 + ] + }, + { + "teal": 825, + "source": 255, + "pc": [ + 1026, + 1027 + ] + }, + { + "teal": 826, + "source": 255, + "pc": [ + 1028, + 1029 + ] + }, + { + "teal": 827, + "source": 255, + "pc": [ + 1030 + ] + }, + { + "teal": 828, + "source": 255, + "pc": [ + 1031 + ] + }, + { + "teal": 829, + "source": 256, + "pc": [ + 1032, + 1033 + ] + }, + { + "teal": 830, + "source": 256, + "pc": [ + 1034 + ] + }, + { + "teal": 831, + "source": 257, + "pc": [ + 1035, + 1036 + ] + }, + { + "teal": 832, + "source": 257, + "pc": [ + 1037 + ] + }, + { + "teal": 833, + "source": 258, + "pc": [ + 1038, + 1039 + ] + }, + { + "teal": 834, + "source": 258, + "pc": [ + 1040 + ] + }, + { + "teal": 835, + "source": 258, + "pc": [ + 1041 + ] + }, + { + "teal": 836, + "source": 253, + "pc": [ + 1042 + ] + }, + { + "teal": 837, + "source": 253, + "pc": [ + 1043, + 1044 + ] + }, + { + "teal": 838, + "source": 253, + "pc": [ + 1045 + ] + }, + { + "teal": 842, + "source": 260, + "pc": [ + 1046, + 1047 + ] + }, + { + "teal": 843, + "source": 260, + "pc": [ + 1048 + ] + }, + { + "teal": 844, + "source": 260, + "pc": [ + 1049 + ] + }, + { + "teal": 845, + "source": 260, + "pc": [ + 1050 + ] + }, + { + "teal": 846, + "source": 260, + "pc": [ + 1051, + 1052 + ] + }, + { + "teal": 847, + "source": 260, + "pc": [ + 1053 + ] + }, + { + "teal": 848, + "source": 260, + "pc": [ + 1054 + ] + }, + { + "teal": 852, + "source": 261, + "pc": [ + 1055, + 1056 + ] + }, + { + "teal": 856, + "source": 189, + "pc": [ + 1057, + 1058 + ] + }, + { + "teal": 859, + "source": 189, + "pc": [ + 1059, + 1060 + ] + }, + { + "teal": 860, + "source": 189, + "pc": [ + 1061 + ] + }, + { + "teal": 865, + "source": 275, + "pc": [ + 1062, + 1063, + 1064 + ] + }, + { + "teal": 866, + "source": 275, + "pc": [ + 1065 + ] + }, + { + "teal": 869, + "source": 275, + "pc": [ + 1066, + 1067, + 1068 + ] + }, + { + "teal": 870, + "source": 275, + "pc": [ + 1069 + ] + }, + { + "teal": 871, + "source": 275, + "pc": [ + 1070 + ] + }, + { + "teal": 872, + "source": 275, + "pc": [ + 1071, + 1072 + ] + }, + { + "teal": 873, + "source": 275, + "pc": [ + 1073 + ] + }, + { + "teal": 876, + "source": 275, + "errorMessage": "argument 1 (staker) for removeStake must be a address", + "pc": [ + 1074 + ] + }, + { + "teal": 879, + "source": 275, + "pc": [ + 1075, + 1076, + 1077 + ] + }, + { + "teal": 880, + "source": 275, + "pc": [ + 1078 + ] + }, + { + "teal": 881, + "source": 275, + "pc": [ + 1079 + ] + }, + { + "teal": 895, + "source": 275, + "pc": [ + 1080, + 1081, + 1082 + ] + }, + { + "teal": 898, + "source": 275, + "pc": [ + 1083, + 1084 + ] + }, + { + "teal": 899, + "source": 275, + "pc": [ + 1085, + 1086 + ] + }, + { + "teal": 904, + "source": 278, + "pc": [ + 1087, + 1088 + ] + }, + { + "teal": 905, + "source": 278, + "pc": [ + 1089, + 1090 + ] + }, + { + "teal": 906, + "source": 278, + "pc": [ + 1091 + ] + }, + { + "teal": 907, + "source": 278, + "pc": [ + 1092, + 1093, + 1094 + ] + }, + { + "teal": 915, + "source": 280, + "pc": [ + 1095, + 1096, + 1097 + ] + }, + { + "teal": 918, + "source": 279, + "errorMessage": "If staker is not sender in removeStake call, then sender MUST be owner or manager of validator", + "pc": [ + 1098 + ] + }, + { + "teal": 923, + "source": 285, + "pc": [ + 1099, + 1100, + 1101 + ] + }, + { + "teal": 927, + "source": 287, + "pc": [ + 1102 + ] + }, + { + "teal": 928, + "source": 287, + "pc": [ + 1103, + 1104 + ] + }, + { + "teal": 933, + "source": 287, + "pc": [ + 1105, + 1106 + ] + }, + { + "teal": 934, + "source": 287, + "pc": [ + 1107, + 1108 + ] + }, + { + "teal": 935, + "source": 287, + "pc": [ + 1109 + ] + }, + { + "teal": 936, + "source": 287, + "pc": [ + 1110, + 1111, + 1112 + ] + }, + { + "teal": 941, + "source": 288, + "pc": [ + 1113, + 1114 + ] + }, + { + "teal": 942, + "source": 288, + "pc": [ + 1115, + 1116 + ] + }, + { + "teal": 943, + "source": 288, + "pc": [ + 1117 + ] + }, + { + "teal": 944, + "source": 288, + "pc": [ + 1118, + 1119, + 1120 + ] + }, + { + "teal": 949, + "source": 289, + "pc": [ + 1121 + ] + }, + { + "teal": 950, + "source": 289, + "pc": [ + 1122 + ] + }, + { + "teal": 951, + "source": 289, + "pc": [ + 1123, + 1124 + ] + }, + { + "teal": 952, + "source": 289, + "pc": [ + 1125 + ] + }, + { + "teal": 953, + "source": 289, + "pc": [ + 1126, + 1127 + ] + }, + { + "teal": 954, + "source": 289, + "pc": [ + 1128, + 1129 + ] + }, + { + "teal": 955, + "source": 289, + "pc": [ + 1130 + ] + }, + { + "teal": 956, + "source": 289, + "pc": [ + 1131, + 1132 + ] + }, + { + "teal": 957, + "source": 289, + "pc": [ + 1133, + 1134 + ] + }, + { + "teal": 958, + "source": 289, + "pc": [ + 1135, + 1136 + ] + }, + { + "teal": 959, + "source": 289, + "pc": [ + 1137, + 1138 + ] + }, + { + "teal": 960, + "source": 289, + "pc": [ + 1139 + ] + }, + { + "teal": 965, + "source": 291, + "pc": [ + 1140, + 1141 + ] + }, + { + "teal": 966, + "source": 291, + "pc": [ + 1142 + ] + }, + { + "teal": 967, + "source": 291, + "pc": [ + 1143 + ] + }, + { + "teal": 968, + "source": 291, + "pc": [ + 1144 + ] + }, + { + "teal": 969, + "source": 291, + "pc": [ + 1145 + ] + }, + { + "teal": 970, + "source": 291, + "pc": [ + 1146, + 1147 + ] + }, + { + "teal": 971, + "source": 291, + "pc": [ + 1148 + ] + }, + { + "teal": 972, + "source": 291, + "pc": [ + 1149, + 1150 + ] + }, + { + "teal": 977, + "source": 292, + "pc": [ + 1151, + 1152 + ] + }, + { + "teal": 978, + "source": 292, + "pc": [ + 1153, + 1154, + 1155 + ] + }, + { + "teal": 979, + "source": 292, + "pc": [ + 1156, + 1157 + ] + }, + { + "teal": 980, + "source": 292, + "pc": [ + 1158 + ] + }, + { + "teal": 981, + "source": 292, + "pc": [ + 1159, + 1160, + 1161 + ] + }, + { + "teal": 987, + "source": 293, + "pc": [ + 1162, + 1163 + ] + }, + { + "teal": 988, + "source": 293, + "pc": [ + 1164 + ] + }, + { + "teal": 989, + "source": 293, + "pc": [ + 1165 + ] + }, + { + "teal": 990, + "source": 293, + "pc": [ + 1166, + 1167, + 1168 + ] + }, + { + "teal": 995, + "source": 295, + "pc": [ + 1169, + 1170 + ] + }, + { + "teal": 996, + "source": 295, + "pc": [ + 1171, + 1172, + 1173 + ] + }, + { + "teal": 997, + "source": 295, + "pc": [ + 1174 + ] + }, + { + "teal": 998, + "source": 295, + "pc": [ + 1175, + 1176 + ] + }, + { + "teal": 1004, + "source": 297, + "pc": [ + 1177, + 1178 + ] + }, + { + "teal": 1005, + "source": 297, + "pc": [ + 1179, + 1180, + 1181 + ] + }, + { + "teal": 1006, + "source": 297, + "pc": [ + 1182 + ] + }, + { + "teal": 1007, + "source": 297, + "pc": [ + 1183, + 1184 + ] + }, + { + "teal": 1008, + "source": 297, + "pc": [ + 1185 + ] + }, + { + "teal": 1009, + "source": 297, + "pc": [ + 1186, + 1187, + 1188 + ] + }, + { + "teal": 1013, + "source": 298, + "errorMessage": "Insufficient balance", + "pc": [ + 1189 + ] + }, + { + "teal": 1018, + "source": 300, + "pc": [ + 1190, + 1191 + ] + }, + { + "teal": 1019, + "source": 300, + "pc": [ + 1192, + 1193 + ] + }, + { + "teal": 1020, + "source": 300, + "pc": [ + 1194, + 1195 + ] + }, + { + "teal": 1021, + "source": 300, + "pc": [ + 1196, + 1197, + 1198 + ] + }, + { + "teal": 1022, + "source": 300, + "pc": [ + 1199 + ] + }, + { + "teal": 1023, + "source": 300, + "pc": [ + 1200, + 1201 + ] + }, + { + "teal": 1024, + "source": 300, + "pc": [ + 1202 + ] + }, + { + "teal": 1025, + "source": 300, + "pc": [ + 1203 + ] + }, + { + "teal": 1026, + "source": 300, + "pc": [ + 1204 + ] + }, + { + "teal": 1027, + "source": 300, + "pc": [ + 1205, + 1206 + ] + }, + { + "teal": 1031, + "source": 301, + "pc": [ + 1207, + 1208 + ] + }, + { + "teal": 1032, + "source": 301, + "pc": [ + 1209 + ] + }, + { + "teal": 1033, + "source": 301, + "pc": [ + 1210, + 1211 + ] + }, + { + "teal": 1034, + "source": 301, + "pc": [ + 1212 + ] + }, + { + "teal": 1035, + "source": 301, + "pc": [ + 1213, + 1214 + ] + }, + { + "teal": 1036, + "source": 301, + "pc": [ + 1215 + ] + }, + { + "teal": 1037, + "source": 301, + "pc": [ + 1216 + ] + }, + { + "teal": 1041, + "source": 303, + "pc": [ + 1217 + ] + }, + { + "teal": 1042, + "source": 303, + "pc": [ + 1218, + 1219 + ] + }, + { + "teal": 1047, + "source": 304, + "pc": [ + 1220, + 1221 + ] + }, + { + "teal": 1048, + "source": 304, + "pc": [ + 1222, + 1223, + 1224 + ] + }, + { + "teal": 1049, + "source": 304, + "pc": [ + 1225 + ] + }, + { + "teal": 1050, + "source": 304, + "pc": [ + 1226 + ] + }, + { + "teal": 1051, + "source": 304, + "pc": [ + 1227 + ] + }, + { + "teal": 1052, + "source": 304, + "pc": [ + 1228, + 1229, + 1230 + ] + }, + { + "teal": 1058, + "source": 306, + "pc": [ + 1231 + ] + }, + { + "teal": 1059, + "source": 306, + "pc": [ + 1232 + ] + }, + { + "teal": 1060, + "source": 306, + "pc": [ + 1233 + ] + }, + { + "teal": 1061, + "source": 306, + "pc": [ + 1234 + ] + }, + { + "teal": 1062, + "source": 306, + "pc": [ + 1235, + 1236, + 1237 + ] + }, + { + "teal": 1070, + "source": 307, + "pc": [ + 1238 + ] + }, + { + "teal": 1071, + "source": 307, + "pc": [ + 1239 + ] + }, + { + "teal": 1072, + "source": 307, + "pc": [ + 1240, + 1241 + ] + }, + { + "teal": 1073, + "source": 307, + "pc": [ + 1242, + 1243 + ] + }, + { + "teal": 1074, + "source": 307, + "pc": [ + 1244, + 1245 + ] + }, + { + "teal": 1078, + "source": 308, + "pc": [ + 1246 + ] + }, + { + "teal": 1079, + "source": 308, + "pc": [ + 1247 + ] + }, + { + "teal": 1080, + "source": 308, + "pc": [ + 1248, + 1249 + ] + }, + { + "teal": 1084, + "source": 309, + "pc": [ + 1250 + ] + }, + { + "teal": 1085, + "source": 309, + "pc": [ + 1251 + ] + }, + { + "teal": 1086, + "source": 309, + "pc": [ + 1252 + ] + }, + { + "teal": 1087, + "source": 309, + "pc": [ + 1253, + 1254 + ] + }, + { + "teal": 1090, + "source": 307, + "pc": [ + 1255 + ] + }, + { + "teal": 1091, + "source": 307, + "pc": [ + 1256, + 1257 + ] + }, + { + "teal": 1094, + "source": 307, + "pc": [ + 1258 + ] + }, + { + "teal": 1095, + "source": 307, + "pc": [ + 1259, + 1260 + ] + }, + { + "teal": 1096, + "source": 307, + "pc": [ + 1261 + ] + }, + { + "teal": 1097, + "source": 307, + "pc": [ + 1262 + ] + }, + { + "teal": 1098, + "source": 307, + "pc": [ + 1263, + 1264 + ] + }, + { + "teal": 1099, + "source": 307, + "pc": [ + 1265, + 1266, + 1267 + ] + }, + { + "teal": 1100, + "source": 307, + "pc": [ + 1268, + 1269 + ] + }, + { + "teal": 1108, + "source": 315, + "pc": [ + 1270 + ] + }, + { + "teal": 1109, + "source": 315, + "pc": [ + 1271, + 1272 + ] + }, + { + "teal": 1110, + "source": 315, + "pc": [ + 1273, + 1274 + ] + }, + { + "teal": 1114, + "source": 316, + "pc": [ + 1275, + 1276 + ] + }, + { + "teal": 1115, + "source": 316, + "pc": [ + 1277, + 1278, + 1279 + ] + }, + { + "teal": 1116, + "source": 316, + "pc": [ + 1280 + ] + }, + { + "teal": 1117, + "source": 316, + "pc": [ + 1281, + 1282 + ] + }, + { + "teal": 1121, + "source": 317, + "pc": [ + 1283, + 1284 + ] + }, + { + "teal": 1122, + "source": 317, + "pc": [ + 1285, + 1286 + ] + }, + { + "teal": 1126, + "source": 318, + "pc": [ + 1287, + 1288 + ] + }, + { + "teal": 1127, + "source": 318, + "pc": [ + 1289, + 1290, + 1291 + ] + }, + { + "teal": 1128, + "source": 318, + "pc": [ + 1292 + ] + }, + { + "teal": 1129, + "source": 318, + "pc": [ + 1293, + 1294 + ] + }, + { + "teal": 1132, + "source": 315, + "pc": [ + 1295 + ] + }, + { + "teal": 1133, + "source": 315, + "pc": [ + 1296, + 1297 + ] + }, + { + "teal": 1136, + "source": 315, + "pc": [ + 1298 + ] + }, + { + "teal": 1140, + "source": 320, + "pc": [ + 1299, + 1300 + ] + }, + { + "teal": 1141, + "source": 320, + "pc": [ + 1301, + 1302, + 1303 + ] + }, + { + "teal": 1142, + "source": 320, + "pc": [ + 1304 + ] + }, + { + "teal": 1143, + "source": 320, + "pc": [ + 1305, + 1306 + ] + }, + { + "teal": 1147, + "source": 321, + "pc": [ + 1307, + 1308 + ] + }, + { + "teal": 1148, + "source": 321, + "pc": [ + 1309, + 1310 + ] + }, + { + "teal": 1149, + "source": 321, + "pc": [ + 1311, + 1312 + ] + }, + { + "teal": 1150, + "source": 321, + "pc": [ + 1313, + 1314 + ] + }, + { + "teal": 1151, + "source": 306, + "pc": [ + 1315, + 1316, + 1317 + ] + }, + { + "teal": 1156, + "source": 326, + "pc": [ + 1318, + 1319 + ] + }, + { + "teal": 1157, + "source": 326, + "pc": [ + 1320, + 1321, + 1322 + ] + }, + { + "teal": 1158, + "source": 326, + "pc": [ + 1323 + ] + }, + { + "teal": 1159, + "source": 326, + "pc": [ + 1324, + 1325 + ] + }, + { + "teal": 1163, + "source": 327, + "pc": [ + 1326, + 1327 + ] + }, + { + "teal": 1164, + "source": 327, + "pc": [ + 1328, + 1329 + ] + }, + { + "teal": 1165, + "source": 327, + "pc": [ + 1330, + 1331 + ] + }, + { + "teal": 1166, + "source": 327, + "pc": [ + 1332, + 1333 + ] + }, + { + "teal": 1176, + "source": 333, + "pc": [ + 1334, + 1335 + ] + }, + { + "teal": 1177, + "source": 333, + "pc": [ + 1336, + 1337, + 1338 + ] + }, + { + "teal": 1178, + "source": 333, + "pc": [ + 1339 + ] + }, + { + "teal": 1179, + "source": 333, + "pc": [ + 1340 + ] + }, + { + "teal": 1180, + "source": 333, + "pc": [ + 1341 + ] + }, + { + "teal": 1181, + "source": 333, + "pc": [ + 1342 + ] + }, + { + "teal": 1182, + "source": 333, + "pc": [ + 1343, + 1344, + 1345 + ] + }, + { + "teal": 1183, + "source": 333, + "pc": [ + 1346, + 1347 + ] + }, + { + "teal": 1184, + "source": 333, + "pc": [ + 1348, + 1349, + 1350 + ] + }, + { + "teal": 1185, + "source": 333, + "pc": [ + 1351 + ] + }, + { + "teal": 1186, + "source": 333, + "pc": [ + 1352, + 1353 + ] + }, + { + "teal": 1187, + "source": 333, + "pc": [ + 1354 + ] + }, + { + "teal": 1188, + "source": 333, + "pc": [ + 1355 + ] + }, + { + "teal": 1189, + "source": 333, + "pc": [ + 1356 + ] + }, + { + "teal": 1193, + "source": 332, + "errorMessage": "cannot reduce balance below minimum allowed stake unless all is removed", + "pc": [ + 1357 + ] + }, + { + "teal": 1201, + "source": 340, + "pc": [ + 1358 + ] + }, + { + "teal": 1202, + "source": 340, + "pc": [ + 1359 + ] + }, + { + "teal": 1203, + "source": 340, + "pc": [ + 1360, + 1361 + ] + }, + { + "teal": 1207, + "source": 341, + "pc": [ + 1362, + 1363 + ] + }, + { + "teal": 1208, + "source": 341, + "pc": [ + 1364, + 1365 + ] + }, + { + "teal": 1212, + "source": 342, + "pc": [ + 1366, + 1367 + ] + }, + { + "teal": 1213, + "source": 342, + "pc": [ + 1368, + 1369 + ] + }, + { + "teal": 1217, + "source": 343, + "pc": [ + 1370, + 1371, + 1372, + 1373, + 1374, + 1375, + 1376, + 1377, + 1378, + 1379 + ] + }, + { + "teal": 1218, + "source": 343, + "pc": [ + 1380, + 1381 + ] + }, + { + "teal": 1221, + "source": 340, + "pc": [ + 1382 + ] + }, + { + "teal": 1222, + "source": 340, + "pc": [ + 1383, + 1384 + ] + }, + { + "teal": 1225, + "source": 340, + "pc": [ + 1385 + ] + }, + { + "teal": 1229, + "source": 345, + "pc": [ + 1386 + ] + }, + { + "teal": 1230, + "source": 345, + "pc": [ + 1387, + 1388 + ] + }, + { + "teal": 1235, + "source": 346, + "pc": [ + 1389, + 1390 + ] + }, + { + "teal": 1236, + "source": 346, + "pc": [ + 1391, + 1392, + 1393 + ] + }, + { + "teal": 1237, + "source": 346, + "pc": [ + 1394 + ] + }, + { + "teal": 1238, + "source": 346, + "pc": [ + 1395 + ] + }, + { + "teal": 1239, + "source": 346, + "pc": [ + 1396 + ] + }, + { + "teal": 1240, + "source": 346, + "pc": [ + 1397, + 1398, + 1399 + ] + }, + { + "teal": 1245, + "source": 348, + "pc": [ + 1400, + 1401 + ] + }, + { + "teal": 1246, + "source": 348, + "pc": [ + 1402 + ] + }, + { + "teal": 1247, + "source": 348, + "pc": [ + 1403 + ] + }, + { + "teal": 1248, + "source": 348, + "pc": [ + 1404 + ] + }, + { + "teal": 1249, + "source": 348, + "pc": [ + 1405, + 1406 + ] + }, + { + "teal": 1250, + "source": 348, + "pc": [ + 1407 + ] + }, + { + "teal": 1251, + "source": 348, + "pc": [ + 1408 + ] + }, + { + "teal": 1255, + "source": 349, + "pc": [ + 1409, + 1410 + ] + }, + { + "teal": 1256, + "source": 349, + "pc": [ + 1411 + ] + }, + { + "teal": 1257, + "source": 349, + "pc": [ + 1412, + 1413 + ] + }, + { + "teal": 1258, + "source": 349, + "pc": [ + 1414 + ] + }, + { + "teal": 1259, + "source": 349, + "pc": [ + 1415, + 1416 + ] + }, + { + "teal": 1263, + "source": 350, + "pc": [ + 1417, + 1418 + ] + }, + { + "teal": 1264, + "source": 350, + "pc": [ + 1419, + 1420 + ] + }, + { + "teal": 1265, + "source": 350, + "pc": [ + 1421, + 1422 + ] + }, + { + "teal": 1266, + "source": 350, + "pc": [ + 1423, + 1424 + ] + }, + { + "teal": 1270, + "source": 351, + "pc": [ + 1425, + 1426 + ] + }, + { + "teal": 1271, + "source": 351, + "pc": [ + 1427, + 1428 + ] + }, + { + "teal": 1272, + "source": 351, + "pc": [ + 1429, + 1430 + ] + }, + { + "teal": 1273, + "source": 351, + "pc": [ + 1431, + 1432 + ] + }, + { + "teal": 1277, + "source": 352, + "pc": [ + 1433 + ] + }, + { + "teal": 1278, + "source": 352, + "pc": [ + 1434, + 1435 + ] + }, + { + "teal": 1283, + "source": 355, + "pc": [ + 1436, + 1437 + ] + }, + { + "teal": 1284, + "source": 355, + "pc": [ + 1438 + ] + }, + { + "teal": 1285, + "source": 355, + "pc": [ + 1439 + ] + }, + { + "teal": 1286, + "source": 355, + "pc": [ + 1440, + 1441 + ] + }, + { + "teal": 1287, + "source": 355, + "pc": [ + 1442 + ] + }, + { + "teal": 1288, + "source": 355, + "pc": [ + 1443, + 1444 + ] + }, + { + "teal": 1289, + "source": 355, + "pc": [ + 1445 + ] + }, + { + "teal": 1293, + "source": 357, + "pc": [ + 1446, + 1447 + ] + }, + { + "teal": 1294, + "source": 357, + "pc": [ + 1448 + ] + }, + { + "teal": 1295, + "source": 357, + "pc": [ + 1449, + 1450 + ] + }, + { + "teal": 1296, + "source": 357, + "pc": [ + 1451 + ] + }, + { + "teal": 1297, + "source": 357, + "pc": [ + 1452 + ] + }, + { + "teal": 1298, + "source": 357, + "pc": [ + 1453, + 1454 + ] + }, + { + "teal": 1299, + "source": 357, + "pc": [ + 1455 + ] + }, + { + "teal": 1300, + "source": 357, + "pc": [ + 1456, + 1457 + ] + }, + { + "teal": 1304, + "source": 358, + "pc": [ + 1458, + 1459 + ] + }, + { + "teal": 1305, + "source": 358, + "pc": [ + 1460 + ] + }, + { + "teal": 1306, + "source": 358, + "pc": [ + 1461, + 1462 + ] + }, + { + "teal": 1307, + "source": 358, + "pc": [ + 1463 + ] + }, + { + "teal": 1308, + "source": 358, + "pc": [ + 1464 + ] + }, + { + "teal": 1309, + "source": 358, + "pc": [ + 1465 + ] + }, + { + "teal": 1310, + "source": 358, + "pc": [ + 1466 + ] + }, + { + "teal": 1311, + "source": 358, + "pc": [ + 1467, + 1468 + ] + }, + { + "teal": 1312, + "source": 358, + "pc": [ + 1469 + ] + }, + { + "teal": 1315, + "source": 358, + "errorMessage": "(amountToUnstake as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits", + "pc": [ + 1470 + ] + }, + { + "teal": 1316, + "source": 358, + "pc": [ + 1471, + 1472 + ] + }, + { + "teal": 1317, + "source": 358, + "pc": [ + 1473 + ] + }, + { + "teal": 1318, + "source": 358, + "pc": [ + 1474 + ] + }, + { + "teal": 1319, + "source": 358, + "pc": [ + 1475 + ] + }, + { + "teal": 1320, + "source": 358, + "pc": [ + 1476 + ] + }, + { + "teal": 1321, + "source": 358, + "pc": [ + 1477, + 1478 + ] + }, + { + "teal": 1322, + "source": 358, + "pc": [ + 1479 + ] + }, + { + "teal": 1323, + "source": 358, + "pc": [ + 1480 + ] + }, + { + "teal": 1324, + "source": 358, + "pc": [ + 1481 + ] + }, + { + "teal": 1325, + "source": 358, + "pc": [ + 1482, + 1483 + ] + }, + { + "teal": 1329, + "source": 359, + "pc": [ + 1484, + 1485 + ] + }, + { + "teal": 1330, + "source": 359, + "pc": [ + 1486 + ] + }, + { + "teal": 1331, + "source": 359, + "pc": [ + 1487 + ] + }, + { + "teal": 1332, + "source": 359, + "pc": [ + 1488, + 1489 + ] + }, + { + "teal": 1333, + "source": 359, + "pc": [ + 1490 + ] + }, + { + "teal": 1334, + "source": 359, + "pc": [ + 1491 + ] + }, + { + "teal": 1335, + "source": 359, + "pc": [ + 1492 + ] + }, + { + "teal": 1336, + "source": 359, + "pc": [ + 1493, + 1494 + ] + }, + { + "teal": 1337, + "source": 359, + "pc": [ + 1495 + ] + }, + { + "teal": 1340, + "source": 359, + "errorMessage": "this.stakeAccumulator.value - subtractAmount overflowed 128 bits", + "pc": [ + 1496 + ] + }, + { + "teal": 1341, + "source": 359, + "pc": [ + 1497, + 1498 + ] + }, + { + "teal": 1342, + "source": 359, + "pc": [ + 1499 + ] + }, + { + "teal": 1343, + "source": 359, + "pc": [ + 1500 + ] + }, + { + "teal": 1344, + "source": 359, + "pc": [ + 1501 + ] + }, + { + "teal": 1345, + "source": 359, + "pc": [ + 1502 + ] + }, + { + "teal": 1346, + "source": 359, + "pc": [ + 1503, + 1504 + ] + }, + { + "teal": 1347, + "source": 359, + "pc": [ + 1505 + ] + }, + { + "teal": 1348, + "source": 359, + "pc": [ + 1506 + ] + }, + { + "teal": 1349, + "source": 359, + "pc": [ + 1507 + ] + }, + { + "teal": 1350, + "source": 359, + "pc": [ + 1508 + ] + }, + { + "teal": 1363, + "source": 364, + "pc": [ + 1509 + ] + }, + { + "teal": 1364, + "source": 364, + "pc": [ + 1510 + ] + }, + { + "teal": 1365, + "source": 364, + "pc": [ + 1511, + 1512 + ] + }, + { + "teal": 1366, + "source": 364, + "pc": [ + 1513, + 1514 + ] + }, + { + "teal": 1367, + "source": 364, + "pc": [ + 1515, + 1516 + ] + }, + { + "teal": 1371, + "source": 365, + "pc": [ + 1517 + ] + }, + { + "teal": 1372, + "source": 365, + "pc": [ + 1518 + ] + }, + { + "teal": 1373, + "source": 365, + "pc": [ + 1519, + 1520 + ] + }, + { + "teal": 1383, + "source": 367, + "pc": [ + 1521 + ] + }, + { + "teal": 1384, + "source": 367, + "pc": [ + 1522 + ] + }, + { + "teal": 1385, + "source": 367, + "pc": [ + 1523 + ] + }, + { + "teal": 1386, + "source": 367, + "pc": [ + 1524 + ] + }, + { + "teal": 1387, + "source": 367, + "pc": [ + 1525 + ] + }, + { + "teal": 1388, + "source": 367, + "pc": [ + 1526 + ] + }, + { + "teal": 1389, + "source": 367, + "pc": [ + 1527 + ] + }, + { + "teal": 1390, + "source": 367, + "pc": [ + 1528, + 1529, + 1530 + ] + }, + { + "teal": 1391, + "source": 367, + "pc": [ + 1531 + ] + }, + { + "teal": 1392, + "source": 367, + "pc": [ + 1532 + ] + }, + { + "teal": 1393, + "source": 367, + "pc": [ + 1533, + 1534 + ] + }, + { + "teal": 1394, + "source": 368, + "pc": [ + 1535, + 1536 + ] + }, + { + "teal": 1395, + "source": 368, + "pc": [ + 1537, + 1538 + ] + }, + { + "teal": 1396, + "source": 369, + "pc": [ + 1539, + 1540 + ] + }, + { + "teal": 1397, + "source": 369, + "pc": [ + 1541 + ] + }, + { + "teal": 1398, + "source": 369, + "pc": [ + 1542, + 1543 + ] + }, + { + "teal": 1399, + "source": 370, + "pc": [ + 1544, + 1545 + ] + }, + { + "teal": 1400, + "source": 370, + "pc": [ + 1546 + ] + }, + { + "teal": 1401, + "source": 370, + "pc": [ + 1547, + 1548 + ] + }, + { + "teal": 1402, + "source": 371, + "pc": [ + 1549, + 1550 + ] + }, + { + "teal": 1403, + "source": 371, + "pc": [ + 1551, + 1552 + ] + }, + { + "teal": 1404, + "source": 371, + "pc": [ + 1553 + ] + }, + { + "teal": 1405, + "source": 371, + "pc": [ + 1554, + 1555 + ] + }, + { + "teal": 1406, + "source": 371, + "pc": [ + 1556 + ] + }, + { + "teal": 1407, + "source": 371, + "pc": [ + 1557, + 1558 + ] + }, + { + "teal": 1410, + "source": 364, + "pc": [ + 1559 + ] + }, + { + "teal": 1411, + "source": 364, + "pc": [ + 1560, + 1561 + ] + }, + { + "teal": 1414, + "source": 364, + "pc": [ + 1562 + ] + }, + { + "teal": 1418, + "source": 374, + "pc": [ + 1563 + ] + }, + { + "teal": 1425, + "source": 287, + "pc": [ + 1564, + 1565 + ] + }, + { + "teal": 1426, + "source": 287, + "pc": [ + 1566 + ] + }, + { + "teal": 1427, + "source": 287, + "pc": [ + 1567 + ] + }, + { + "teal": 1428, + "source": 287, + "pc": [ + 1568, + 1569 + ] + }, + { + "teal": 1429, + "source": 287, + "pc": [ + 1570, + 1571, + 1572 + ] + }, + { + "teal": 1433, + "source": 377, + "errorMessage": "account not found", + "pc": [ + 1573 + ] + }, + { + "teal": 1434, + "source": 275, + "pc": [ + 1574 + ] + }, + { + "teal": 1439, + "source": 385, + "pc": [ + 1575, + 1576, + 1577 + ] + }, + { + "teal": 1440, + "source": 385, + "pc": [ + 1578 + ] + }, + { + "teal": 1441, + "source": 385, + "pc": [ + 1579 + ] + }, + { + "teal": 1449, + "source": 385, + "pc": [ + 1580, + 1581, + 1582 + ] + }, + { + "teal": 1452, + "source": 385, + "pc": [ + 1583, + 1584 + ] + }, + { + "teal": 1453, + "source": 385, + "pc": [ + 1585, + 1586 + ] + }, + { + "teal": 1457, + "source": 389, + "pc": [ + 1587, + 1588 + ] + }, + { + "teal": 1458, + "source": 389, + "pc": [ + 1589, + 1590 + ] + }, + { + "teal": 1462, + "source": 391, + "pc": [ + 1591 + ] + }, + { + "teal": 1463, + "source": 391, + "pc": [ + 1592, + 1593 + ] + }, + { + "teal": 1468, + "source": 391, + "pc": [ + 1594, + 1595 + ] + }, + { + "teal": 1469, + "source": 391, + "pc": [ + 1596, + 1597 + ] + }, + { + "teal": 1470, + "source": 391, + "pc": [ + 1598 + ] + }, + { + "teal": 1471, + "source": 391, + "pc": [ + 1599, + 1600, + 1601 + ] + }, + { + "teal": 1476, + "source": 392, + "pc": [ + 1602, + 1603 + ] + }, + { + "teal": 1477, + "source": 392, + "pc": [ + 1604, + 1605 + ] + }, + { + "teal": 1478, + "source": 392, + "pc": [ + 1606 + ] + }, + { + "teal": 1479, + "source": 392, + "pc": [ + 1607, + 1608, + 1609 + ] + }, + { + "teal": 1484, + "source": 393, + "pc": [ + 1610 + ] + }, + { + "teal": 1485, + "source": 393, + "pc": [ + 1611 + ] + }, + { + "teal": 1486, + "source": 393, + "pc": [ + 1612, + 1613 + ] + }, + { + "teal": 1487, + "source": 393, + "pc": [ + 1614 + ] + }, + { + "teal": 1488, + "source": 393, + "pc": [ + 1615, + 1616 + ] + }, + { + "teal": 1489, + "source": 393, + "pc": [ + 1617, + 1618 + ] + }, + { + "teal": 1490, + "source": 393, + "pc": [ + 1619 + ] + }, + { + "teal": 1491, + "source": 393, + "pc": [ + 1620, + 1621 + ] + }, + { + "teal": 1492, + "source": 393, + "pc": [ + 1622, + 1623 + ] + }, + { + "teal": 1493, + "source": 393, + "pc": [ + 1624, + 1625 + ] + }, + { + "teal": 1494, + "source": 393, + "pc": [ + 1626, + 1627 + ] + }, + { + "teal": 1495, + "source": 393, + "pc": [ + 1628 + ] + }, + { + "teal": 1500, + "source": 395, + "pc": [ + 1629, + 1630 + ] + }, + { + "teal": 1501, + "source": 395, + "pc": [ + 1631 + ] + }, + { + "teal": 1502, + "source": 395, + "pc": [ + 1632 + ] + }, + { + "teal": 1503, + "source": 395, + "pc": [ + 1633 + ] + }, + { + "teal": 1504, + "source": 395, + "pc": [ + 1634 + ] + }, + { + "teal": 1505, + "source": 395, + "pc": [ + 1635, + 1636 + ] + }, + { + "teal": 1506, + "source": 395, + "pc": [ + 1637 + ] + }, + { + "teal": 1507, + "source": 395, + "pc": [ + 1638, + 1639 + ] + }, + { + "teal": 1512, + "source": 396, + "pc": [ + 1640, + 1641 + ] + }, + { + "teal": 1513, + "source": 396, + "pc": [ + 1642, + 1643, + 1644 + ] + }, + { + "teal": 1514, + "source": 396, + "pc": [ + 1645, + 1646 + ] + }, + { + "teal": 1515, + "source": 396, + "pc": [ + 1647 + ] + }, + { + "teal": 1516, + "source": 396, + "pc": [ + 1648, + 1649, + 1650 + ] + }, + { + "teal": 1522, + "source": 397, + "pc": [ + 1651, + 1652 + ] + }, + { + "teal": 1523, + "source": 397, + "pc": [ + 1653, + 1654, + 1655 + ] + }, + { + "teal": 1524, + "source": 397, + "pc": [ + 1656 + ] + }, + { + "teal": 1525, + "source": 397, + "pc": [ + 1657 + ] + }, + { + "teal": 1526, + "source": 397, + "pc": [ + 1658 + ] + }, + { + "teal": 1527, + "source": 397, + "pc": [ + 1659, + 1660, + 1661 + ] + }, + { + "teal": 1532, + "source": 398, + "pc": [ + 1662 + ] + }, + { + "teal": 1537, + "source": 400, + "pc": [ + 1663 + ] + }, + { + "teal": 1538, + "source": 400, + "pc": [ + 1664, + 1665 + ] + }, + { + "teal": 1543, + "source": 402, + "pc": [ + 1666 + ] + }, + { + "teal": 1544, + "source": 402, + "pc": [ + 1667 + ] + }, + { + "teal": 1545, + "source": 402, + "pc": [ + 1668 + ] + }, + { + "teal": 1546, + "source": 402, + "pc": [ + 1669 + ] + }, + { + "teal": 1547, + "source": 402, + "pc": [ + 1670, + 1671, + 1672 + ] + }, + { + "teal": 1555, + "source": 403, + "pc": [ + 1673 + ] + }, + { + "teal": 1556, + "source": 403, + "pc": [ + 1674 + ] + }, + { + "teal": 1557, + "source": 403, + "pc": [ + 1675, + 1676 + ] + }, + { + "teal": 1558, + "source": 403, + "pc": [ + 1677, + 1678 + ] + }, + { + "teal": 1559, + "source": 403, + "pc": [ + 1679, + 1680 + ] + }, + { + "teal": 1563, + "source": 404, + "pc": [ + 1681 + ] + }, + { + "teal": 1564, + "source": 404, + "pc": [ + 1682 + ] + }, + { + "teal": 1565, + "source": 404, + "pc": [ + 1683, + 1684 + ] + }, + { + "teal": 1569, + "source": 405, + "pc": [ + 1685 + ] + }, + { + "teal": 1570, + "source": 405, + "pc": [ + 1686 + ] + }, + { + "teal": 1571, + "source": 405, + "pc": [ + 1687 + ] + }, + { + "teal": 1572, + "source": 405, + "pc": [ + 1688, + 1689 + ] + }, + { + "teal": 1575, + "source": 403, + "pc": [ + 1690 + ] + }, + { + "teal": 1576, + "source": 403, + "pc": [ + 1691, + 1692 + ] + }, + { + "teal": 1579, + "source": 403, + "pc": [ + 1693 + ] + }, + { + "teal": 1580, + "source": 403, + "pc": [ + 1694, + 1695 + ] + }, + { + "teal": 1581, + "source": 403, + "pc": [ + 1696 + ] + }, + { + "teal": 1582, + "source": 403, + "pc": [ + 1697 + ] + }, + { + "teal": 1583, + "source": 403, + "pc": [ + 1698, + 1699 + ] + }, + { + "teal": 1584, + "source": 403, + "pc": [ + 1700, + 1701, + 1702 + ] + }, + { + "teal": 1585, + "source": 403, + "pc": [ + 1703, + 1704 + ] + }, + { + "teal": 1593, + "source": 410, + "pc": [ + 1705 + ] + }, + { + "teal": 1594, + "source": 410, + "pc": [ + 1706, + 1707 + ] + }, + { + "teal": 1595, + "source": 410, + "pc": [ + 1708, + 1709 + ] + }, + { + "teal": 1599, + "source": 411, + "pc": [ + 1710, + 1711 + ] + }, + { + "teal": 1600, + "source": 411, + "pc": [ + 1712, + 1713, + 1714 + ] + }, + { + "teal": 1601, + "source": 411, + "pc": [ + 1715 + ] + }, + { + "teal": 1602, + "source": 411, + "pc": [ + 1716, + 1717 + ] + }, + { + "teal": 1606, + "source": 412, + "pc": [ + 1718, + 1719 + ] + }, + { + "teal": 1607, + "source": 412, + "pc": [ + 1720, + 1721 + ] + }, + { + "teal": 1611, + "source": 413, + "pc": [ + 1722, + 1723 + ] + }, + { + "teal": 1612, + "source": 413, + "pc": [ + 1724, + 1725, + 1726 + ] + }, + { + "teal": 1613, + "source": 413, + "pc": [ + 1727 + ] + }, + { + "teal": 1614, + "source": 413, + "pc": [ + 1728, + 1729 + ] + }, + { + "teal": 1617, + "source": 410, + "pc": [ + 1730 + ] + }, + { + "teal": 1618, + "source": 410, + "pc": [ + 1731, + 1732 + ] + }, + { + "teal": 1621, + "source": 410, + "pc": [ + 1733 + ] + }, + { + "teal": 1625, + "source": 415, + "pc": [ + 1734, + 1735 + ] + }, + { + "teal": 1626, + "source": 415, + "pc": [ + 1736, + 1737, + 1738 + ] + }, + { + "teal": 1627, + "source": 415, + "pc": [ + 1739 + ] + }, + { + "teal": 1628, + "source": 415, + "pc": [ + 1740, + 1741 + ] + }, + { + "teal": 1632, + "source": 416, + "pc": [ + 1742, + 1743 + ] + }, + { + "teal": 1633, + "source": 416, + "pc": [ + 1744, + 1745 + ] + }, + { + "teal": 1634, + "source": 416, + "pc": [ + 1746, + 1747 + ] + }, + { + "teal": 1635, + "source": 416, + "pc": [ + 1748, + 1749 + ] + }, + { + "teal": 1636, + "source": 402, + "pc": [ + 1750, + 1751, + 1752 + ] + }, + { + "teal": 1641, + "source": 421, + "pc": [ + 1753, + 1754 + ] + }, + { + "teal": 1642, + "source": 421, + "pc": [ + 1755, + 1756, + 1757 + ] + }, + { + "teal": 1643, + "source": 421, + "pc": [ + 1758 + ] + }, + { + "teal": 1644, + "source": 421, + "pc": [ + 1759, + 1760 + ] + }, + { + "teal": 1648, + "source": 422, + "pc": [ + 1761, + 1762 + ] + }, + { + "teal": 1649, + "source": 422, + "pc": [ + 1763, + 1764 + ] + }, + { + "teal": 1650, + "source": 422, + "pc": [ + 1765, + 1766 + ] + }, + { + "teal": 1651, + "source": 422, + "pc": [ + 1767, + 1768 + ] + }, + { + "teal": 1656, + "source": 426, + "pc": [ + 1769, + 1770 + ] + }, + { + "teal": 1657, + "source": 426, + "pc": [ + 1771 + ] + }, + { + "teal": 1658, + "source": 426, + "pc": [ + 1772 + ] + }, + { + "teal": 1659, + "source": 426, + "pc": [ + 1773, + 1774 + ] + }, + { + "teal": 1660, + "source": 426, + "pc": [ + 1775 + ] + }, + { + "teal": 1661, + "source": 426, + "pc": [ + 1776, + 1777 + ] + }, + { + "teal": 1662, + "source": 426, + "pc": [ + 1778 + ] + }, + { + "teal": 1675, + "source": 431, + "pc": [ + 1779 + ] + }, + { + "teal": 1676, + "source": 431, + "pc": [ + 1780 + ] + }, + { + "teal": 1677, + "source": 431, + "pc": [ + 1781, + 1782 + ] + }, + { + "teal": 1678, + "source": 431, + "pc": [ + 1783, + 1784 + ] + }, + { + "teal": 1679, + "source": 431, + "pc": [ + 1785, + 1786 + ] + }, + { + "teal": 1683, + "source": 432, + "pc": [ + 1787 + ] + }, + { + "teal": 1684, + "source": 432, + "pc": [ + 1788 + ] + }, + { + "teal": 1685, + "source": 432, + "pc": [ + 1789, + 1790 + ] + }, + { + "teal": 1695, + "source": 434, + "pc": [ + 1791 + ] + }, + { + "teal": 1696, + "source": 434, + "pc": [ + 1792 + ] + }, + { + "teal": 1697, + "source": 434, + "pc": [ + 1793 + ] + }, + { + "teal": 1698, + "source": 434, + "pc": [ + 1794 + ] + }, + { + "teal": 1699, + "source": 434, + "pc": [ + 1795 + ] + }, + { + "teal": 1700, + "source": 434, + "pc": [ + 1796 + ] + }, + { + "teal": 1701, + "source": 434, + "pc": [ + 1797 + ] + }, + { + "teal": 1702, + "source": 434, + "pc": [ + 1798, + 1799, + 1800 + ] + }, + { + "teal": 1703, + "source": 434, + "pc": [ + 1801 + ] + }, + { + "teal": 1704, + "source": 434, + "pc": [ + 1802 + ] + }, + { + "teal": 1705, + "source": 434, + "pc": [ + 1803, + 1804 + ] + }, + { + "teal": 1706, + "source": 435, + "pc": [ + 1805, + 1806 + ] + }, + { + "teal": 1707, + "source": 435, + "pc": [ + 1807, + 1808 + ] + }, + { + "teal": 1708, + "source": 436, + "pc": [ + 1809, + 1810 + ] + }, + { + "teal": 1709, + "source": 436, + "pc": [ + 1811, + 1812 + ] + }, + { + "teal": 1710, + "source": 437, + "pc": [ + 1813, + 1814 + ] + }, + { + "teal": 1711, + "source": 437, + "pc": [ + 1815 + ] + }, + { + "teal": 1712, + "source": 437, + "pc": [ + 1816, + 1817 + ] + }, + { + "teal": 1713, + "source": 438, + "pc": [ + 1818 + ] + }, + { + "teal": 1714, + "source": 438, + "pc": [ + 1819, + 1820 + ] + }, + { + "teal": 1715, + "source": 438, + "pc": [ + 1821 + ] + }, + { + "teal": 1716, + "source": 438, + "pc": [ + 1822, + 1823 + ] + }, + { + "teal": 1717, + "source": 438, + "pc": [ + 1824 + ] + }, + { + "teal": 1718, + "source": 438, + "pc": [ + 1825, + 1826 + ] + }, + { + "teal": 1721, + "source": 431, + "pc": [ + 1827 + ] + }, + { + "teal": 1722, + "source": 431, + "pc": [ + 1828, + 1829 + ] + }, + { + "teal": 1725, + "source": 431, + "pc": [ + 1830 + ] + }, + { + "teal": 1729, + "source": 441, + "pc": [ + 1831 + ] + }, + { + "teal": 1736, + "source": 391, + "pc": [ + 1832, + 1833 + ] + }, + { + "teal": 1737, + "source": 391, + "pc": [ + 1834 + ] + }, + { + "teal": 1738, + "source": 391, + "pc": [ + 1835 + ] + }, + { + "teal": 1739, + "source": 391, + "pc": [ + 1836, + 1837 + ] + }, + { + "teal": 1740, + "source": 391, + "pc": [ + 1838, + 1839, + 1840 + ] + }, + { + "teal": 1744, + "source": 444, + "errorMessage": "account not found", + "pc": [ + 1841 + ] + }, + { + "teal": 1745, + "source": 385, + "pc": [ + 1842 + ] + }, + { + "teal": 1750, + "source": 455, + "pc": [ + 1843, + 1844 + ] + }, + { + "teal": 1753, + "source": 455, + "pc": [ + 1845, + 1846, + 1847 + ] + }, + { + "teal": 1754, + "source": 455, + "pc": [ + 1848 + ] + }, + { + "teal": 1755, + "source": 455, + "pc": [ + 1849 + ] + }, + { + "teal": 1756, + "source": 455, + "pc": [ + 1850, + 1851 + ] + }, + { + "teal": 1757, + "source": 455, + "pc": [ + 1852 + ] + }, + { + "teal": 1760, + "source": 455, + "errorMessage": "argument 0 (staker) for getStakerInfo must be a address", + "pc": [ + 1853 + ] + }, + { + "teal": 1763, + "source": 455, + "pc": [ + 1854, + 1855, + 1856 + ] + }, + { + "teal": 1764, + "source": 455, + "pc": [ + 1857 + ] + }, + { + "teal": 1765, + "source": 455, + "pc": [ + 1858 + ] + }, + { + "teal": 1766, + "source": 455, + "pc": [ + 1859 + ] + }, + { + "teal": 1767, + "source": 455, + "pc": [ + 1860 + ] + }, + { + "teal": 1777, + "source": 455, + "pc": [ + 1861, + 1862, + 1863 + ] + }, + { + "teal": 1780, + "source": 455, + "pc": [ + 1864, + 1865 + ] + }, + { + "teal": 1784, + "source": 456, + "pc": [ + 1866 + ] + }, + { + "teal": 1785, + "source": 456, + "pc": [ + 1867, + 1868 + ] + }, + { + "teal": 1790, + "source": 456, + "pc": [ + 1869, + 1870 + ] + }, + { + "teal": 1791, + "source": 456, + "pc": [ + 1871, + 1872 + ] + }, + { + "teal": 1792, + "source": 456, + "pc": [ + 1873 + ] + }, + { + "teal": 1793, + "source": 456, + "pc": [ + 1874, + 1875, + 1876 + ] + }, + { + "teal": 1798, + "source": 457, + "pc": [ + 1877, + 1878 + ] + }, + { + "teal": 1799, + "source": 457, + "pc": [ + 1879, + 1880 + ] + }, + { + "teal": 1800, + "source": 457, + "pc": [ + 1881 + ] + }, + { + "teal": 1801, + "source": 457, + "pc": [ + 1882, + 1883, + 1884 + ] + }, + { + "teal": 1806, + "source": 458, + "pc": [ + 1885 + ] + }, + { + "teal": 1807, + "source": 458, + "pc": [ + 1886 + ] + }, + { + "teal": 1808, + "source": 458, + "pc": [ + 1887, + 1888 + ] + }, + { + "teal": 1809, + "source": 458, + "pc": [ + 1889 + ] + }, + { + "teal": 1810, + "source": 458, + "pc": [ + 1890, + 1891 + ] + }, + { + "teal": 1811, + "source": 458, + "pc": [ + 1892, + 1893 + ] + }, + { + "teal": 1812, + "source": 458, + "pc": [ + 1894 + ] + }, + { + "teal": 1813, + "source": 458, + "pc": [ + 1895, + 1896 + ] + }, + { + "teal": 1814, + "source": 458, + "pc": [ + 1897, + 1898 + ] + }, + { + "teal": 1815, + "source": 458, + "pc": [ + 1899, + 1900 + ] + }, + { + "teal": 1816, + "source": 458, + "pc": [ + 1901, + 1902 + ] + }, + { + "teal": 1817, + "source": 458, + "pc": [ + 1903 + ] + }, + { + "teal": 1823, + "source": 460, + "pc": [ + 1904, + 1905 + ] + }, + { + "teal": 1824, + "source": 460, + "pc": [ + 1906 + ] + }, + { + "teal": 1825, + "source": 460, + "pc": [ + 1907 + ] + }, + { + "teal": 1826, + "source": 460, + "pc": [ + 1908 + ] + }, + { + "teal": 1827, + "source": 460, + "pc": [ + 1909 + ] + }, + { + "teal": 1828, + "source": 460, + "pc": [ + 1910, + 1911 + ] + }, + { + "teal": 1829, + "source": 460, + "pc": [ + 1912 + ] + }, + { + "teal": 1830, + "source": 460, + "pc": [ + 1913, + 1914 + ] + }, + { + "teal": 1831, + "source": 460, + "pc": [ + 1915 + ] + }, + { + "teal": 1832, + "source": 460, + "pc": [ + 1916, + 1917 + ] + }, + { + "teal": 1833, + "source": 460, + "pc": [ + 1918 + ] + }, + { + "teal": 1834, + "source": 460, + "pc": [ + 1919, + 1920, + 1921 + ] + }, + { + "teal": 1839, + "source": 461, + "pc": [ + 1922, + 1923 + ] + }, + { + "teal": 1840, + "source": 461, + "pc": [ + 1924 + ] + }, + { + "teal": 1841, + "source": 461, + "pc": [ + 1925 + ] + }, + { + "teal": 1842, + "source": 461, + "pc": [ + 1926 + ] + }, + { + "teal": 1843, + "source": 461, + "pc": [ + 1927 + ] + }, + { + "teal": 1844, + "source": 461, + "pc": [ + 1928, + 1929 + ] + }, + { + "teal": 1845, + "source": 461, + "pc": [ + 1930 + ] + }, + { + "teal": 1846, + "source": 461, + "pc": [ + 1931, + 1932, + 1933 + ] + }, + { + "teal": 1853, + "source": 456, + "pc": [ + 1934, + 1935 + ] + }, + { + "teal": 1854, + "source": 456, + "pc": [ + 1936 + ] + }, + { + "teal": 1855, + "source": 456, + "pc": [ + 1937 + ] + }, + { + "teal": 1856, + "source": 456, + "pc": [ + 1938, + 1939 + ] + }, + { + "teal": 1857, + "source": 456, + "pc": [ + 1940, + 1941, + 1942 + ] + }, + { + "teal": 1861, + "source": 464, + "errorMessage": "account not found", + "pc": [ + 1943 + ] + }, + { + "teal": 1865, + "source": 455, + "pc": [ + 1944, + 1945 + ] + }, + { + "teal": 1866, + "source": 455, + "pc": [ + 1946 + ] + }, + { + "teal": 1871, + "source": 477, + "pc": [ + 1947, + 1948, + 1949 + ] + }, + { + "teal": 1872, + "source": 477, + "pc": [ + 1950 + ] + }, + { + "teal": 1875, + "source": 477, + "pc": [ + 1951, + 1952, + 1953 + ] + }, + { + "teal": 1876, + "source": 477, + "pc": [ + 1954 + ] + }, + { + "teal": 1879, + "source": 477, + "pc": [ + 1955, + 1956, + 1957 + ] + }, + { + "teal": 1880, + "source": 477, + "pc": [ + 1958 + ] + }, + { + "teal": 1881, + "source": 477, + "pc": [ + 1959 + ] + }, + { + "teal": 1882, + "source": 477, + "pc": [ + 1960, + 1961 + ] + }, + { + "teal": 1883, + "source": 477, + "pc": [ + 1962 + ] + }, + { + "teal": 1886, + "source": 477, + "errorMessage": "argument 2 (staker) for payTokenReward must be a address", + "pc": [ + 1963 + ] + }, + { + "teal": 1889, + "source": 477, + "pc": [ + 1964, + 1965, + 1966 + ] + }, + { + "teal": 1890, + "source": 477, + "pc": [ + 1967 + ] + }, + { + "teal": 1891, + "source": 477, + "pc": [ + 1968 + ] + }, + { + "teal": 1904, + "source": 477, + "pc": [ + 1969, + 1970, + 1971 + ] + }, + { + "teal": 1911, + "source": 480, + "pc": [ + 1972, + 1973 + ] + }, + { + "teal": 1912, + "source": 480, + "pc": [ + 1974 + ] + }, + { + "teal": 1913, + "source": 480, + "pc": [ + 1975 + ] + }, + { + "teal": 1914, + "source": 480, + "pc": [ + 1976, + 1977 + ] + }, + { + "teal": 1915, + "source": 480, + "pc": [ + 1978 + ] + }, + { + "teal": 1916, + "source": 480, + "pc": [ + 1979 + ] + }, + { + "teal": 1919, + "source": 479, + "errorMessage": "this can only be called via the validator contract", + "pc": [ + 1980 + ] + }, + { + "teal": 1923, + "source": 483, + "pc": [ + 1981 + ] + }, + { + "teal": 1924, + "source": 483, + "pc": [ + 1982 + ] + }, + { + "teal": 1925, + "source": 483, + "pc": [ + 1983 + ] + }, + { + "teal": 1926, + "source": 483, + "pc": [ + 1984 + ] + }, + { + "teal": 1929, + "source": 483, + "errorMessage": "must be pool 1 in order to be called to pay out token rewards", + "pc": [ + 1985 + ] + }, + { + "teal": 1933, + "source": 484, + "pc": [ + 1986, + 1987 + ] + }, + { + "teal": 1934, + "source": 484, + "pc": [ + 1988 + ] + }, + { + "teal": 1935, + "source": 484, + "pc": [ + 1989 + ] + }, + { + "teal": 1938, + "source": 484, + "errorMessage": "can only claim token rewards from validator that has them", + "pc": [ + 1990 + ] + }, + { + "teal": 1946, + "source": 487, + "pc": [ + 1991 + ] + }, + { + "teal": 1947, + "source": 487, + "pc": [ + 1992, + 1993 + ] + }, + { + "teal": 1948, + "source": 487, + "pc": [ + 1994, + 1995 + ] + }, + { + "teal": 1952, + "source": 488, + "pc": [ + 1996, + 1997 + ] + }, + { + "teal": 1953, + "source": 488, + "pc": [ + 1998, + 1999 + ] + }, + { + "teal": 1957, + "source": 489, + "pc": [ + 2000, + 2001 + ] + }, + { + "teal": 1958, + "source": 489, + "pc": [ + 2002, + 2003 + ] + }, + { + "teal": 1962, + "source": 490, + "pc": [ + 2004, + 2005 + ] + }, + { + "teal": 1963, + "source": 490, + "pc": [ + 2006, + 2007 + ] + }, + { + "teal": 1966, + "source": 487, + "pc": [ + 2008 + ] + }, + { + "teal": 1967, + "source": 487, + "pc": [ + 2009, + 2010 + ] + }, + { + "teal": 1970, + "source": 487, + "pc": [ + 2011 + ] + }, + { + "teal": 1971, + "source": 477, + "pc": [ + 2012 + ] + }, + { + "teal": 1976, + "source": 503, + "pc": [ + 2013, + 2014, + 2015 + ] + }, + { + "teal": 1977, + "source": 503, + "pc": [ + 2016, + 2017, + 2018 + ] + }, + { + "teal": 1980, + "source": 503, + "pc": [ + 2019, + 2020, + 2021 + ] + }, + { + "teal": 1981, + "source": 503, + "pc": [ + 2022 + ] + }, + { + "teal": 1982, + "source": 503, + "pc": [ + 2023 + ] + }, + { + "teal": 1994, + "source": 503, + "pc": [ + 2024, + 2025, + 2026 + ] + }, + { + "teal": 1998, + "source": 504, + "pc": [ + 2027, + 2028, + 2029 + ] + }, + { + "teal": 2001, + "source": 504, + "errorMessage": "can only be called by owner or manager of validator", + "pc": [ + 2030 + ] + }, + { + "teal": 2005, + "source": 505, + "pc": [ + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040 + ] + }, + { + "teal": 2006, + "source": 505, + "pc": [ + 2041, + 2042 + ] + }, + { + "teal": 2007, + "source": 505, + "pc": [ + 2043 + ] + }, + { + "teal": 2008, + "source": 503, + "pc": [ + 2044 + ] + }, + { + "teal": 2013, + "source": 516, + "pc": [ + 2045, + 2046, + 2047 + ] + }, + { + "teal": 2014, + "source": 516, + "pc": [ + 2048 + ] + }, + { + "teal": 2015, + "source": 516, + "pc": [ + 2049 + ] + }, + { + "teal": 2026, + "source": 516, + "pc": [ + 2050, + 2051, + 2052 + ] + }, + { + "teal": 2029, + "source": 516, + "pc": [ + 2053, + 2054 + ] + }, + { + "teal": 2030, + "source": 516, + "pc": [ + 2055, + 2056 + ] + }, + { + "teal": 2037, + "source": 518, + "pc": [ + 2057 + ] + }, + { + "teal": 2038, + "source": 518, + "pc": [ + 2058 + ] + }, + { + "teal": 2039, + "source": 518, + "pc": [ + 2059, + 2060 + ] + }, + { + "teal": 2040, + "source": 518, + "pc": [ + 2061, + 2062 + ] + }, + { + "teal": 2041, + "source": 518, + "pc": [ + 2063, + 2064 + ] + }, + { + "teal": 2045, + "source": 519, + "pc": [ + 2065 + ] + }, + { + "teal": 2046, + "source": 519, + "pc": [ + 2066 + ] + }, + { + "teal": 2047, + "source": 519, + "pc": [ + 2067, + 2068 + ] + }, + { + "teal": 2051, + "source": 520, + "pc": [ + 2069 + ] + }, + { + "teal": 2052, + "source": 520, + "pc": [ + 2070 + ] + }, + { + "teal": 2053, + "source": 520, + "pc": [ + 2071 + ] + }, + { + "teal": 2054, + "source": 520, + "pc": [ + 2072, + 2073 + ] + }, + { + "teal": 2057, + "source": 518, + "pc": [ + 2074 + ] + }, + { + "teal": 2058, + "source": 518, + "pc": [ + 2075, + 2076 + ] + }, + { + "teal": 2061, + "source": 518, + "pc": [ + 2077 + ] + }, + { + "teal": 2062, + "source": 518, + "pc": [ + 2078, + 2079 + ] + }, + { + "teal": 2063, + "source": 518, + "pc": [ + 2080 + ] + }, + { + "teal": 2064, + "source": 518, + "pc": [ + 2081 + ] + }, + { + "teal": 2065, + "source": 518, + "pc": [ + 2082, + 2083 + ] + }, + { + "teal": 2066, + "source": 518, + "pc": [ + 2084, + 2085, + 2086 + ] + }, + { + "teal": 2067, + "source": 518, + "pc": [ + 2087, + 2088 + ] + }, + { + "teal": 2071, + "source": 527, + "pc": [ + 2089, + 2090 + ] + }, + { + "teal": 2072, + "source": 527, + "pc": [ + 2091, + 2092, + 2093 + ] + }, + { + "teal": 2073, + "source": 527, + "pc": [ + 2094 + ] + }, + { + "teal": 2074, + "source": 527, + "pc": [ + 2095, + 2096 + ] + }, + { + "teal": 2078, + "source": 528, + "pc": [ + 2097, + 2098 + ] + }, + { + "teal": 2079, + "source": 528, + "pc": [ + 2099, + 2100 + ] + }, + { + "teal": 2083, + "source": 529, + "pc": [ + 2101, + 2102 + ] + }, + { + "teal": 2084, + "source": 529, + "pc": [ + 2103, + 2104 + ] + }, + { + "teal": 2085, + "source": 529, + "pc": [ + 2105, + 2106 + ] + }, + { + "teal": 2086, + "source": 529, + "pc": [ + 2107 + ] + }, + { + "teal": 2087, + "source": 529, + "pc": [ + 2108 + ] + }, + { + "teal": 2088, + "source": 529, + "pc": [ + 2109, + 2110 + ] + }, + { + "teal": 2093, + "source": 532, + "pc": [ + 2111, + 2112, + 2113 + ] + }, + { + "teal": 2094, + "source": 532, + "pc": [ + 2114, + 2115 + ] + }, + { + "teal": 2095, + "source": 532, + "pc": [ + 2116 + ] + }, + { + "teal": 2096, + "source": 532, + "pc": [ + 2117 + ] + }, + { + "teal": 2097, + "source": 532, + "pc": [ + 2118 + ] + }, + { + "teal": 2098, + "source": 532, + "pc": [ + 2119, + 2120, + 2121 + ] + }, + { + "teal": 2103, + "source": 533, + "pc": [ + 2122, + 2123 + ] + }, + { + "teal": 2104, + "source": 533, + "pc": [ + 2124 + ] + }, + { + "teal": 2105, + "source": 533, + "pc": [ + 2125, + 2126 + ] + }, + { + "teal": 2106, + "source": 533, + "pc": [ + 2127 + ] + }, + { + "teal": 2107, + "source": 533, + "pc": [ + 2128, + 2129 + ] + }, + { + "teal": 2108, + "source": 533, + "pc": [ + 2130 + ] + }, + { + "teal": 2109, + "source": 533, + "pc": [ + 2131 + ] + }, + { + "teal": 2110, + "source": 533, + "pc": [ + 2132, + 2133 + ] + }, + { + "teal": 2114, + "source": 537, + "pc": [ + 2134, + 2135 + ] + }, + { + "teal": 2115, + "source": 537, + "pc": [ + 2136, + 2137 + ] + }, + { + "teal": 2116, + "source": 537, + "pc": [ + 2138 + ] + }, + { + "teal": 2119, + "source": 537, + "errorMessage": "can't call epochBalanceUpdate in same epoch as prior call", + "pc": [ + 2139 + ] + }, + { + "teal": 2124, + "source": 540, + "pc": [ + 2140, + 2141, + 2142 + ] + }, + { + "teal": 2128, + "source": 543, + "pc": [ + 2143, + 2144 + ] + }, + { + "teal": 2129, + "source": 543, + "pc": [ + 2145, + 2146 + ] + }, + { + "teal": 2130, + "source": 543, + "pc": [ + 2147 + ] + }, + { + "teal": 2134, + "source": 544, + "pc": [ + 2148, + 2149 + ] + }, + { + "teal": 2135, + "source": 544, + "pc": [ + 2150 + ] + }, + { + "teal": 2136, + "source": 544, + "pc": [ + 2151 + ] + }, + { + "teal": 2137, + "source": 544, + "pc": [ + 2152 + ] + }, + { + "teal": 2138, + "source": 544, + "pc": [ + 2153, + 2154 + ] + }, + { + "teal": 2139, + "source": 544, + "pc": [ + 2155 + ] + }, + { + "teal": 2140, + "source": 544, + "pc": [ + 2156 + ] + }, + { + "teal": 2144, + "source": 549, + "pc": [ + 2157, + 2158 + ] + }, + { + "teal": 2145, + "source": 549, + "pc": [ + 2159, + 2160, + 2161 + ] + }, + { + "teal": 2146, + "source": 549, + "pc": [ + 2162 + ] + }, + { + "teal": 2147, + "source": 549, + "pc": [ + 2163 + ] + }, + { + "teal": 2148, + "source": 549, + "pc": [ + 2164 + ] + }, + { + "teal": 2149, + "source": 549, + "pc": [ + 2165, + 2166 + ] + }, + { + "teal": 2153, + "source": 550, + "pc": [ + 2167, + 2168, + 2169 + ] + }, + { + "teal": 2154, + "source": 550, + "pc": [ + 2170, + 2171 + ] + }, + { + "teal": 2158, + "source": 551, + "pc": [ + 2172, + 2173 + ] + }, + { + "teal": 2159, + "source": 551, + "pc": [ + 2174, + 2175 + ] + }, + { + "teal": 2164, + "source": 556, + "pc": [ + 2176, + 2177 + ] + }, + { + "teal": 2165, + "source": 556, + "pc": [ + 2178, + 2179, + 2180 + ] + }, + { + "teal": 2171, + "source": 557, + "pc": [ + 2181 + ] + }, + { + "teal": 2172, + "source": 557, + "pc": [ + 2182 + ] + }, + { + "teal": 2173, + "source": 557, + "pc": [ + 2183 + ] + }, + { + "teal": 2174, + "source": 557, + "pc": [ + 2184 + ] + }, + { + "teal": 2175, + "source": 557, + "pc": [ + 2185, + 2186, + 2187 + ] + }, + { + "teal": 2183, + "source": 559, + "pc": [ + 2188 + ] + }, + { + "teal": 2184, + "source": 559, + "pc": [ + 2189 + ] + }, + { + "teal": 2185, + "source": 559, + "pc": [ + 2190, + 2191 + ] + }, + { + "teal": 2186, + "source": 559, + "pc": [ + 2192, + 2193 + ] + }, + { + "teal": 2187, + "source": 559, + "pc": [ + 2194, + 2195 + ] + }, + { + "teal": 2191, + "source": 560, + "pc": [ + 2196 + ] + }, + { + "teal": 2192, + "source": 560, + "pc": [ + 2197 + ] + }, + { + "teal": 2193, + "source": 560, + "pc": [ + 2198, + 2199 + ] + }, + { + "teal": 2197, + "source": 561, + "pc": [ + 2200 + ] + }, + { + "teal": 2198, + "source": 561, + "pc": [ + 2201 + ] + }, + { + "teal": 2199, + "source": 561, + "pc": [ + 2202 + ] + }, + { + "teal": 2200, + "source": 561, + "pc": [ + 2203, + 2204 + ] + }, + { + "teal": 2201, + "source": 561, + "pc": [ + 2205, + 2206, + 2207, + 2208, + 2209, + 2210, + 2211, + 2212, + 2213, + 2214 + ] + }, + { + "teal": 2202, + "source": 561, + "pc": [ + 2215, + 2216 + ] + }, + { + "teal": 2205, + "source": 559, + "pc": [ + 2217 + ] + }, + { + "teal": 2206, + "source": 559, + "pc": [ + 2218, + 2219 + ] + }, + { + "teal": 2209, + "source": 559, + "pc": [ + 2220 + ] + }, + { + "teal": 2210, + "source": 559, + "pc": [ + 2221, + 2222 + ] + }, + { + "teal": 2211, + "source": 559, + "pc": [ + 2223 + ] + }, + { + "teal": 2212, + "source": 559, + "pc": [ + 2224 + ] + }, + { + "teal": 2213, + "source": 559, + "pc": [ + 2225, + 2226 + ] + }, + { + "teal": 2214, + "source": 559, + "pc": [ + 2227, + 2228, + 2229 + ] + }, + { + "teal": 2215, + "source": 559, + "pc": [ + 2230 + ] + }, + { + "teal": 2216, + "source": 559, + "pc": [ + 2231, + 2232 + ] + }, + { + "teal": 2220, + "source": 563, + "pc": [ + 2233, + 2234 + ] + }, + { + "teal": 2221, + "source": 563, + "pc": [ + 2235, + 2236 + ] + }, + { + "teal": 2222, + "source": 563, + "pc": [ + 2237 + ] + }, + { + "teal": 2223, + "source": 563, + "pc": [ + 2238, + 2239 + ] + }, + { + "teal": 2229, + "source": 568, + "pc": [ + 2240 + ] + }, + { + "teal": 2230, + "source": 568, + "pc": [ + 2241 + ] + }, + { + "teal": 2231, + "source": 568, + "pc": [ + 2242 + ] + }, + { + "teal": 2232, + "source": 568, + "pc": [ + 2243 + ] + }, + { + "teal": 2233, + "source": 568, + "pc": [ + 2244, + 2245, + 2246 + ] + }, + { + "teal": 2241, + "source": 569, + "pc": [ + 2247 + ] + }, + { + "teal": 2242, + "source": 569, + "pc": [ + 2248 + ] + }, + { + "teal": 2243, + "source": 569, + "pc": [ + 2249, + 2250 + ] + }, + { + "teal": 2244, + "source": 569, + "pc": [ + 2251, + 2252 + ] + }, + { + "teal": 2245, + "source": 569, + "pc": [ + 2253, + 2254 + ] + }, + { + "teal": 2249, + "source": 570, + "pc": [ + 2255 + ] + }, + { + "teal": 2250, + "source": 570, + "pc": [ + 2256 + ] + }, + { + "teal": 2251, + "source": 570, + "pc": [ + 2257, + 2258 + ] + }, + { + "teal": 2255, + "source": 571, + "pc": [ + 2259 + ] + }, + { + "teal": 2256, + "source": 571, + "pc": [ + 2260 + ] + }, + { + "teal": 2257, + "source": 571, + "pc": [ + 2261 + ] + }, + { + "teal": 2258, + "source": 571, + "pc": [ + 2262, + 2263 + ] + }, + { + "teal": 2261, + "source": 569, + "pc": [ + 2264 + ] + }, + { + "teal": 2262, + "source": 569, + "pc": [ + 2265, + 2266 + ] + }, + { + "teal": 2265, + "source": 569, + "pc": [ + 2267 + ] + }, + { + "teal": 2266, + "source": 569, + "pc": [ + 2268, + 2269 + ] + }, + { + "teal": 2267, + "source": 569, + "pc": [ + 2270 + ] + }, + { + "teal": 2268, + "source": 569, + "pc": [ + 2271 + ] + }, + { + "teal": 2269, + "source": 569, + "pc": [ + 2272, + 2273 + ] + }, + { + "teal": 2270, + "source": 569, + "pc": [ + 2274, + 2275, + 2276 + ] + }, + { + "teal": 2271, + "source": 569, + "pc": [ + 2277, + 2278 + ] + }, + { + "teal": 2272, + "source": 568, + "pc": [ + 2279, + 2280, + 2281 + ] + }, + { + "teal": 2280, + "source": 575, + "pc": [ + 2282 + ] + }, + { + "teal": 2281, + "source": 575, + "pc": [ + 2283 + ] + }, + { + "teal": 2282, + "source": 575, + "pc": [ + 2284, + 2285 + ] + }, + { + "teal": 2283, + "source": 575, + "pc": [ + 2286, + 2287 + ] + }, + { + "teal": 2284, + "source": 575, + "pc": [ + 2288, + 2289 + ] + }, + { + "teal": 2288, + "source": 576, + "pc": [ + 2290, + 2291 + ] + }, + { + "teal": 2289, + "source": 576, + "pc": [ + 2292, + 2293 + ] + }, + { + "teal": 2293, + "source": 577, + "pc": [ + 2294 + ] + }, + { + "teal": 2294, + "source": 577, + "pc": [ + 2295 + ] + }, + { + "teal": 2295, + "source": 577, + "pc": [ + 2296 + ] + }, + { + "teal": 2296, + "source": 577, + "pc": [ + 2297 + ] + }, + { + "teal": 2297, + "source": 577, + "pc": [ + 2298 + ] + }, + { + "teal": 2298, + "source": 577, + "pc": [ + 2299 + ] + }, + { + "teal": 2299, + "source": 577, + "pc": [ + 2300 + ] + }, + { + "teal": 2300, + "source": 577, + "pc": [ + 2301, + 2302, + 2303 + ] + }, + { + "teal": 2301, + "source": 577, + "pc": [ + 2304 + ] + }, + { + "teal": 2302, + "source": 577, + "pc": [ + 2305 + ] + }, + { + "teal": 2303, + "source": 577, + "pc": [ + 2306, + 2307 + ] + }, + { + "teal": 2306, + "source": 575, + "pc": [ + 2308 + ] + }, + { + "teal": 2307, + "source": 575, + "pc": [ + 2309, + 2310 + ] + }, + { + "teal": 2310, + "source": 575, + "pc": [ + 2311 + ] + }, + { + "teal": 2311, + "source": 575, + "pc": [ + 2312, + 2313 + ] + }, + { + "teal": 2312, + "source": 575, + "pc": [ + 2314 + ] + }, + { + "teal": 2313, + "source": 575, + "pc": [ + 2315 + ] + }, + { + "teal": 2314, + "source": 575, + "pc": [ + 2316, + 2317 + ] + }, + { + "teal": 2315, + "source": 575, + "pc": [ + 2318, + 2319, + 2320 + ] + }, + { + "teal": 2316, + "source": 575, + "pc": [ + 2321, + 2322 + ] + }, + { + "teal": 2326, + "source": 584, + "pc": [ + 2323 + ] + }, + { + "teal": 2327, + "source": 584, + "pc": [ + 2324 + ] + }, + { + "teal": 2328, + "source": 584, + "pc": [ + 2325, + 2326 + ] + }, + { + "teal": 2329, + "source": 584, + "pc": [ + 2327, + 2328, + 2329, + 2330, + 2331, + 2332 + ] + }, + { + "teal": 2330, + "source": 584, + "pc": [ + 2333, + 2334 + ] + }, + { + "teal": 2334, + "source": 585, + "pc": [ + 2335 + ] + }, + { + "teal": 2335, + "source": 585, + "pc": [ + 2336 + ] + }, + { + "teal": 2336, + "source": 585, + "pc": [ + 2337, + 2338 + ] + }, + { + "teal": 2340, + "source": 586, + "pc": [ + 2339 + ] + }, + { + "teal": 2341, + "source": 586, + "pc": [ + 2340 + ] + }, + { + "teal": 2342, + "source": 586, + "pc": [ + 2341 + ] + }, + { + "teal": 2343, + "source": 586, + "pc": [ + 2342, + 2343 + ] + }, + { + "teal": 2346, + "source": 584, + "pc": [ + 2344 + ] + }, + { + "teal": 2347, + "source": 584, + "pc": [ + 2345, + 2346 + ] + }, + { + "teal": 2350, + "source": 584, + "pc": [ + 2347 + ] + }, + { + "teal": 2351, + "source": 584, + "pc": [ + 2348, + 2349 + ] + }, + { + "teal": 2352, + "source": 584, + "pc": [ + 2350 + ] + }, + { + "teal": 2353, + "source": 584, + "pc": [ + 2351 + ] + }, + { + "teal": 2354, + "source": 584, + "pc": [ + 2352, + 2353 + ] + }, + { + "teal": 2355, + "source": 584, + "pc": [ + 2354, + 2355, + 2356 + ] + }, + { + "teal": 2356, + "source": 584, + "pc": [ + 2357, + 2358 + ] + }, + { + "teal": 2360, + "source": 588, + "pc": [ + 2359, + 2360 + ] + }, + { + "teal": 2361, + "source": 588, + "pc": [ + 2361, + 2362, + 2363 + ] + }, + { + "teal": 2362, + "source": 588, + "pc": [ + 2364 + ] + }, + { + "teal": 2363, + "source": 588, + "pc": [ + 2365, + 2366 + ] + }, + { + "teal": 2367, + "source": 594, + "pc": [ + 2367, + 2368 + ] + }, + { + "teal": 2368, + "source": 594, + "pc": [ + 2369, + 2370 + ] + }, + { + "teal": 2369, + "source": 594, + "pc": [ + 2371 + ] + }, + { + "teal": 2370, + "source": 594, + "pc": [ + 2372, + 2373 + ] + }, + { + "teal": 2371, + "source": 594, + "pc": [ + 2374 + ] + }, + { + "teal": 2372, + "source": 594, + "pc": [ + 2375 + ] + }, + { + "teal": 2373, + "source": 594, + "pc": [ + 2376, + 2377 + ] + }, + { + "teal": 2374, + "source": 594, + "pc": [ + 2378, + 2379 + ] + }, + { + "teal": 2375, + "source": 594, + "pc": [ + 2380 + ] + }, + { + "teal": 2376, + "source": 594, + "pc": [ + 2381 + ] + }, + { + "teal": 2377, + "source": 594, + "pc": [ + 2382, + 2383 + ] + }, + { + "teal": 2381, + "source": 595, + "pc": [ + 2384 + ] + }, + { + "teal": 2382, + "source": 595, + "pc": [ + 2385, + 2386 + ] + }, + { + "teal": 2386, + "source": 596, + "pc": [ + 2387, + 2388, + 2389 + ] + }, + { + "teal": 2387, + "source": 596, + "pc": [ + 2390, + 2391 + ] + }, + { + "teal": 2392, + "source": 604, + "pc": [ + 2392, + 2393 + ] + }, + { + "teal": 2393, + "source": 604, + "pc": [ + 2394, + 2395, + 2396 + ] + }, + { + "teal": 2394, + "source": 604, + "pc": [ + 2397 + ] + }, + { + "teal": 2395, + "source": 604, + "pc": [ + 2398, + 2399 + ] + }, + { + "teal": 2396, + "source": 604, + "pc": [ + 2400 + ] + }, + { + "teal": 2397, + "source": 604, + "pc": [ + 2401, + 2402, + 2403 + ] + }, + { + "teal": 2402, + "source": 605, + "pc": [ + 2404 + ] + }, + { + "teal": 2403, + "source": 605, + "pc": [ + 2405, + 2406 + ] + }, + { + "teal": 2408, + "source": 611, + "pc": [ + 2407 + ] + }, + { + "teal": 2409, + "source": 611, + "pc": [ + 2408, + 2409 + ] + }, + { + "teal": 2413, + "source": 612, + "pc": [ + 2410 + ] + }, + { + "teal": 2414, + "source": 612, + "pc": [ + 2411, + 2412 + ] + }, + { + "teal": 2418, + "source": 613, + "pc": [ + 2413 + ] + }, + { + "teal": 2419, + "source": 613, + "pc": [ + 2414, + 2415 + ] + }, + { + "teal": 2423, + "source": 614, + "pc": [ + 2416 + ] + }, + { + "teal": 2424, + "source": 614, + "pc": [ + 2417, + 2418 + ] + }, + { + "teal": 2429, + "source": 615, + "pc": [ + 2419, + 2420 + ] + }, + { + "teal": 2430, + "source": 615, + "pc": [ + 2421, + 2422, + 2423 + ] + }, + { + "teal": 2436, + "source": 617, + "pc": [ + 2424, + 2425 + ] + }, + { + "teal": 2437, + "source": 617, + "pc": [ + 2426, + 2427 + ] + }, + { + "teal": 2438, + "source": 617, + "pc": [ + 2428, + 2429, + 2430 + ] + }, + { + "teal": 2439, + "source": 617, + "pc": [ + 2431 + ] + }, + { + "teal": 2440, + "source": 617, + "pc": [ + 2432, + 2433 + ] + }, + { + "teal": 2441, + "source": 617, + "pc": [ + 2434 + ] + }, + { + "teal": 2442, + "source": 617, + "pc": [ + 2435, + 2436 + ] + }, + { + "teal": 2443, + "source": 617, + "pc": [ + 2437 + ] + }, + { + "teal": 2444, + "source": 616, + "pc": [ + 2438, + 2439 + ] + }, + { + "teal": 2449, + "source": 621, + "pc": [ + 2440, + 2441 + ] + }, + { + "teal": 2450, + "source": 621, + "pc": [ + 2442, + 2443 + ] + }, + { + "teal": 2451, + "source": 621, + "pc": [ + 2444, + 2445, + 2446 + ] + }, + { + "teal": 2452, + "source": 621, + "pc": [ + 2447 + ] + }, + { + "teal": 2453, + "source": 621, + "pc": [ + 2448 + ] + }, + { + "teal": 2454, + "source": 621, + "pc": [ + 2449, + 2450, + 2451 + ] + }, + { + "teal": 2459, + "source": 627, + "pc": [ + 2452, + 2453 + ] + }, + { + "teal": 2460, + "source": 627, + "pc": [ + 2454 + ] + }, + { + "teal": 2461, + "source": 627, + "pc": [ + 2455 + ] + }, + { + "teal": 2462, + "source": 627, + "pc": [ + 2456 + ] + }, + { + "teal": 2463, + "source": 627, + "pc": [ + 2457 + ] + }, + { + "teal": 2464, + "source": 627, + "pc": [ + 2458 + ] + }, + { + "teal": 2465, + "source": 627, + "pc": [ + 2459, + 2460 + ] + }, + { + "teal": 2466, + "source": 627, + "pc": [ + 2461 + ] + }, + { + "teal": 2467, + "source": 627, + "pc": [ + 2462 + ] + }, + { + "teal": 2468, + "source": 627, + "pc": [ + 2463, + 2464 + ] + }, + { + "teal": 2469, + "source": 627, + "pc": [ + 2465 + ] + }, + { + "teal": 2470, + "source": 627, + "pc": [ + 2466 + ] + }, + { + "teal": 2471, + "source": 627, + "pc": [ + 2467, + 2468 + ] + }, + { + "teal": 2475, + "source": 630, + "pc": [ + 2469, + 2470 + ] + }, + { + "teal": 2476, + "source": 630, + "pc": [ + 2471, + 2472, + 2473 + ] + }, + { + "teal": 2477, + "source": 630, + "pc": [ + 2474 + ] + }, + { + "teal": 2478, + "source": 630, + "pc": [ + 2475, + 2476 + ] + }, + { + "teal": 2479, + "source": 630, + "pc": [ + 2477 + ] + }, + { + "teal": 2480, + "source": 630, + "pc": [ + 2478 + ] + }, + { + "teal": 2481, + "source": 630, + "pc": [ + 2479, + 2480 + ] + }, + { + "teal": 2482, + "source": 630, + "pc": [ + 2481 + ] + }, + { + "teal": 2483, + "source": 630, + "pc": [ + 2482 + ] + }, + { + "teal": 2484, + "source": 630, + "pc": [ + 2483 + ] + }, + { + "teal": 2485, + "source": 630, + "pc": [ + 2484 + ] + }, + { + "teal": 2486, + "source": 630, + "pc": [ + 2485 + ] + }, + { + "teal": 2489, + "source": 630, + "errorMessage": "wideRatio failed", + "pc": [ + 2486 + ] + }, + { + "teal": 2490, + "source": 630, + "pc": [ + 2487, + 2488 + ] + }, + { + "teal": 2498, + "source": 633, + "pc": [ + 2489, + 2490 + ] + }, + { + "teal": 2499, + "source": 633, + "pc": [ + 2491 + ] + }, + { + "teal": 2500, + "source": 633, + "pc": [ + 2492 + ] + }, + { + "teal": 2501, + "source": 633, + "pc": [ + 2493, + 2494, + 2495 + ] + }, + { + "teal": 2507, + "source": 638, + "pc": [ + 2496, + 2497 + ] + }, + { + "teal": 2508, + "source": 638, + "pc": [ + 2498, + 2499 + ] + }, + { + "teal": 2509, + "source": 638, + "pc": [ + 2500 + ] + }, + { + "teal": 2510, + "source": 638, + "pc": [ + 2501, + 2502, + 2503 + ] + }, + { + "teal": 2515, + "source": 639, + "pc": [ + 2504, + 2505, + 2506, + 2507, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2515, + 2516, + 2517, + 2518, + 2519, + 2520, + 2521, + 2522, + 2523, + 2524, + 2525, + 2526, + 2527 + ] + }, + { + "teal": 2516, + "source": 639, + "pc": [ + 2528 + ] + }, + { + "teal": 2520, + "source": 640, + "pc": [ + 2529 + ] + }, + { + "teal": 2528, + "source": 644, + "pc": [ + 2530, + 2531 + ] + }, + { + "teal": 2529, + "source": 644, + "pc": [ + 2532, + 2533, + 2534 + ] + }, + { + "teal": 2534, + "source": 647, + "pc": [ + 2535, + 2536 + ] + }, + { + "teal": 2535, + "source": 647, + "pc": [ + 2537, + 2538 + ] + }, + { + "teal": 2536, + "source": 647, + "pc": [ + 2539 + ] + }, + { + "teal": 2537, + "source": 647, + "pc": [ + 2540 + ] + }, + { + "teal": 2538, + "source": 647, + "pc": [ + 2541, + 2542 + ] + }, + { + "teal": 2539, + "source": 647, + "pc": [ + 2543, + 2544, + 2545 + ] + }, + { + "teal": 2540, + "source": 647, + "pc": [ + 2546 + ] + }, + { + "teal": 2541, + "source": 647, + "pc": [ + 2547 + ] + }, + { + "teal": 2542, + "source": 647, + "pc": [ + 2548 + ] + }, + { + "teal": 2543, + "source": 647, + "pc": [ + 2549 + ] + }, + { + "teal": 2544, + "source": 647, + "pc": [ + 2550 + ] + }, + { + "teal": 2545, + "source": 647, + "pc": [ + 2551 + ] + }, + { + "teal": 2548, + "source": 647, + "errorMessage": "wideRatio failed", + "pc": [ + 2552 + ] + }, + { + "teal": 2549, + "source": 647, + "pc": [ + 2553, + 2554 + ] + }, + { + "teal": 2553, + "source": 649, + "pc": [ + 2555, + 2556 + ] + }, + { + "teal": 2554, + "source": 649, + "pc": [ + 2557, + 2558 + ] + }, + { + "teal": 2555, + "source": 649, + "pc": [ + 2559 + ] + }, + { + "teal": 2556, + "source": 649, + "pc": [ + 2560, + 2561 + ] + }, + { + "teal": 2564, + "source": 650, + "pc": [ + 2562 + ] + }, + { + "teal": 2565, + "source": 650, + "pc": [ + 2563 + ] + }, + { + "teal": 2566, + "source": 650, + "pc": [ + 2564, + 2565 + ] + }, + { + "teal": 2570, + "source": 651, + "pc": [ + 2566, + 2567 + ] + }, + { + "teal": 2571, + "source": 651, + "pc": [ + 2568, + 2569 + ] + }, + { + "teal": 2575, + "source": 652, + "pc": [ + 2570, + 2571, + 2572 + ] + }, + { + "teal": 2576, + "source": 652, + "pc": [ + 2573, + 2574 + ] + }, + { + "teal": 2580, + "source": 653, + "pc": [ + 2575, + 2576, + 2577, + 2578, + 2579, + 2580, + 2581, + 2582, + 2583, + 2584, + 2585, + 2586, + 2587, + 2588, + 2589, + 2590, + 2591, + 2592, + 2593, + 2594, + 2595, + 2596, + 2597, + 2598, + 2599, + 2600, + 2601, + 2602, + 2603, + 2604, + 2605, + 2606, + 2607, + 2608, + 2609, + 2610 + ] + }, + { + "teal": 2581, + "source": 653, + "pc": [ + 2611, + 2612 + ] + }, + { + "teal": 2584, + "source": 650, + "pc": [ + 2613 + ] + }, + { + "teal": 2585, + "source": 650, + "pc": [ + 2614, + 2615 + ] + }, + { + "teal": 2588, + "source": 650, + "pc": [ + 2616 + ] + }, + { + "teal": 2592, + "source": 656, + "pc": [ + 2617, + 2618 + ] + }, + { + "teal": 2593, + "source": 656, + "pc": [ + 2619, + 2620 + ] + }, + { + "teal": 2594, + "source": 644, + "pc": [ + 2621, + 2622, + 2623 + ] + }, + { + "teal": 2599, + "source": 657, + "pc": [ + 2624, + 2625 + ] + }, + { + "teal": 2600, + "source": 657, + "pc": [ + 2626, + 2627, + 2628 + ] + }, + { + "teal": 2601, + "source": 657, + "pc": [ + 2629 + ] + }, + { + "teal": 2602, + "source": 657, + "pc": [ + 2630 + ] + }, + { + "teal": 2603, + "source": 657, + "pc": [ + 2631 + ] + }, + { + "teal": 2604, + "source": 657, + "pc": [ + 2632, + 2633, + 2634 + ] + }, + { + "teal": 2612, + "source": 661, + "pc": [ + 2635, + 2636 + ] + }, + { + "teal": 2613, + "source": 661, + "pc": [ + 2637, + 2638 + ] + }, + { + "teal": 2614, + "source": 661, + "pc": [ + 2639, + 2640, + 2641 + ] + }, + { + "teal": 2615, + "source": 661, + "pc": [ + 2642 + ] + }, + { + "teal": 2616, + "source": 660, + "pc": [ + 2643 + ] + }, + { + "teal": 2617, + "source": 660, + "pc": [ + 2644 + ] + }, + { + "teal": 2618, + "source": 662, + "pc": [ + 2645, + 2646 + ] + }, + { + "teal": 2619, + "source": 660, + "pc": [ + 2647 + ] + }, + { + "teal": 2620, + "source": 660, + "pc": [ + 2648 + ] + }, + { + "teal": 2621, + "source": 660, + "pc": [ + 2649 + ] + }, + { + "teal": 2622, + "source": 660, + "pc": [ + 2650 + ] + }, + { + "teal": 2623, + "source": 660, + "pc": [ + 2651 + ] + }, + { + "teal": 2626, + "source": 660, + "errorMessage": "wideRatio failed", + "pc": [ + 2652 + ] + }, + { + "teal": 2627, + "source": 660, + "pc": [ + 2653, + 2654 + ] + }, + { + "teal": 2631, + "source": 666, + "pc": [ + 2655, + 2656 + ] + }, + { + "teal": 2632, + "source": 666, + "pc": [ + 2657, + 2658 + ] + }, + { + "teal": 2633, + "source": 666, + "pc": [ + 2659 + ] + }, + { + "teal": 2634, + "source": 666, + "pc": [ + 2660, + 2661 + ] + }, + { + "teal": 2639, + "source": 673, + "pc": [ + 2662, + 2663 + ] + }, + { + "teal": 2640, + "source": 673, + "pc": [ + 2664 + ] + }, + { + "teal": 2641, + "source": 673, + "pc": [ + 2665 + ] + }, + { + "teal": 2642, + "source": 673, + "pc": [ + 2666, + 2667, + 2668 + ] + }, + { + "teal": 2647, + "source": 676, + "pc": [ + 2669 + ] + }, + { + "teal": 2648, + "source": 676, + "pc": [ + 2670, + 2671 + ] + }, + { + "teal": 2654, + "source": 678, + "pc": [ + 2672, + 2673 + ] + }, + { + "teal": 2655, + "source": 678, + "pc": [ + 2674, + 2675, + 2676 + ] + }, + { + "teal": 2656, + "source": 678, + "pc": [ + 2677, + 2678 + ] + }, + { + "teal": 2657, + "source": 678, + "pc": [ + 2679, + 2680, + 2681 + ] + }, + { + "teal": 2658, + "source": 678, + "pc": [ + 2682 + ] + }, + { + "teal": 2659, + "source": 678, + "pc": [ + 2683 + ] + }, + { + "teal": 2660, + "source": 678, + "pc": [ + 2684, + 2685, + 2686 + ] + }, + { + "teal": 2661, + "source": 679, + "pc": [ + 2687, + 2688 + ] + }, + { + "teal": 2662, + "source": 679, + "pc": [ + 2689, + 2690, + 2691 + ] + }, + { + "teal": 2663, + "source": 679, + "pc": [ + 2692, + 2693 + ] + }, + { + "teal": 2664, + "source": 679, + "pc": [ + 2694 + ] + }, + { + "teal": 2665, + "source": 679, + "pc": [ + 2695, + 2696 + ] + }, + { + "teal": 2666, + "source": 679, + "pc": [ + 2697, + 2698, + 2699 + ] + }, + { + "teal": 2667, + "source": 679, + "pc": [ + 2700, + 2701 + ] + }, + { + "teal": 2668, + "source": 679, + "pc": [ + 2702 + ] + }, + { + "teal": 2669, + "source": 679, + "pc": [ + 2703 + ] + }, + { + "teal": 2670, + "source": 679, + "pc": [ + 2704, + 2705 + ] + }, + { + "teal": 2671, + "source": 679, + "pc": [ + 2706 + ] + }, + { + "teal": 2672, + "source": 678, + "pc": [ + 2707 + ] + }, + { + "teal": 2675, + "source": 677, + "pc": [ + 2708, + 2709, + 2710 + ] + }, + { + "teal": 2680, + "source": 681, + "pc": [ + 2711, + 2712 + ] + }, + { + "teal": 2681, + "source": 681, + "pc": [ + 2713, + 2714 + ] + }, + { + "teal": 2682, + "source": 681, + "pc": [ + 2715 + ] + }, + { + "teal": 2683, + "source": 681, + "pc": [ + 2716, + 2717, + 2718 + ] + }, + { + "teal": 2684, + "source": 681, + "pc": [ + 2719, + 2720 + ] + }, + { + "teal": 2685, + "source": 681, + "pc": [ + 2721, + 2722, + 2723 + ] + }, + { + "teal": 2688, + "source": 681, + "pc": [ + 2724, + 2725 + ] + }, + { + "teal": 2691, + "source": 681, + "pc": [ + 2726, + 2727 + ] + }, + { + "teal": 2699, + "source": 682, + "pc": [ + 2728 + ] + }, + { + "teal": 2700, + "source": 682, + "pc": [ + 2729 + ] + }, + { + "teal": 2701, + "source": 682, + "pc": [ + 2730, + 2731 + ] + }, + { + "teal": 2705, + "source": 683, + "pc": [ + 2732, + 2733 + ] + }, + { + "teal": 2706, + "source": 683, + "pc": [ + 2734, + 2735 + ] + }, + { + "teal": 2710, + "source": 684, + "pc": [ + 2736, + 2737 + ] + }, + { + "teal": 2711, + "source": 684, + "pc": [ + 2738, + 2739, + 2740 + ] + }, + { + "teal": 2712, + "source": 684, + "pc": [ + 2741, + 2742 + ] + }, + { + "teal": 2716, + "source": 685, + "pc": [ + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2762, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2769, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2776, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2791, + 2792, + 2793, + 2794, + 2795, + 2796, + 2797 + ] + }, + { + "teal": 2717, + "source": 685, + "pc": [ + 2798, + 2799 + ] + }, + { + "teal": 2720, + "source": 682, + "pc": [ + 2800 + ] + }, + { + "teal": 2721, + "source": 682, + "pc": [ + 2801, + 2802 + ] + }, + { + "teal": 2724, + "source": 682, + "pc": [ + 2803 + ] + }, + { + "teal": 2730, + "source": 688, + "pc": [ + 2804, + 2805 + ] + }, + { + "teal": 2731, + "source": 688, + "pc": [ + 2806, + 2807 + ] + }, + { + "teal": 2732, + "source": 688, + "pc": [ + 2808 + ] + }, + { + "teal": 2733, + "source": 688, + "pc": [ + 2809 + ] + }, + { + "teal": 2734, + "source": 688, + "pc": [ + 2810 + ] + }, + { + "teal": 2735, + "source": 688, + "pc": [ + 2811, + 2812, + 2813 + ] + }, + { + "teal": 2744, + "source": 689, + "pc": [ + 2814 + ] + }, + { + "teal": 2745, + "source": 689, + "pc": [ + 2815 + ] + }, + { + "teal": 2746, + "source": 689, + "pc": [ + 2816, + 2817 + ] + }, + { + "teal": 2750, + "source": 690, + "pc": [ + 2818, + 2819 + ] + }, + { + "teal": 2751, + "source": 690, + "pc": [ + 2820, + 2821 + ] + }, + { + "teal": 2752, + "source": 690, + "pc": [ + 2822 + ] + }, + { + "teal": 2753, + "source": 690, + "pc": [ + 2823, + 2824 + ] + }, + { + "teal": 2757, + "source": 691, + "pc": [ + 2825, + 2826 + ] + }, + { + "teal": 2758, + "source": 691, + "pc": [ + 2827, + 2828, + 2829 + ] + }, + { + "teal": 2759, + "source": 691, + "pc": [ + 2830, + 2831 + ] + }, + { + "teal": 2763, + "source": 692, + "pc": [ + 2832, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849 + ] + }, + { + "teal": 2764, + "source": 692, + "pc": [ + 2850, + 2851 + ] + }, + { + "teal": 2767, + "source": 689, + "pc": [ + 2852 + ] + }, + { + "teal": 2768, + "source": 689, + "pc": [ + 2853, + 2854 + ] + }, + { + "teal": 2771, + "source": 689, + "pc": [ + 2855 + ] + }, + { + "teal": 2780, + "source": 704, + "pc": [ + 2856 + ] + }, + { + "teal": 2781, + "source": 704, + "pc": [ + 2857, + 2858 + ] + }, + { + "teal": 2786, + "source": 728, + "pc": [ + 2859, + 2860 + ] + }, + { + "teal": 2787, + "source": 728, + "pc": [ + 2861 + ] + }, + { + "teal": 2788, + "source": 728, + "pc": [ + 2862 + ] + }, + { + "teal": 2789, + "source": 728, + "pc": [ + 2863 + ] + }, + { + "teal": 2790, + "source": 728, + "pc": [ + 2864, + 2865, + 2866 + ] + }, + { + "teal": 2791, + "source": 728, + "pc": [ + 2867, + 2868 + ] + }, + { + "teal": 2792, + "source": 728, + "pc": [ + 2869 + ] + }, + { + "teal": 2793, + "source": 728, + "pc": [ + 2870 + ] + }, + { + "teal": 2794, + "source": 728, + "pc": [ + 2871 + ] + }, + { + "teal": 2797, + "source": 728, + "pc": [ + 2872, + 2873, + 2874 + ] + }, + { + "teal": 2802, + "source": 729, + "pc": [ + 2875 + ] + }, + { + "teal": 2803, + "source": 729, + "pc": [ + 2876, + 2877 + ] + }, + { + "teal": 2807, + "source": 730, + "pc": [ + 2878, + 2879 + ] + }, + { + "teal": 2808, + "source": 730, + "pc": [ + 2880, + 2881 + ] + }, + { + "teal": 2812, + "source": 731, + "pc": [ + 2882 + ] + }, + { + "teal": 2813, + "source": 731, + "pc": [ + 2883, + 2884 + ] + }, + { + "teal": 2818, + "source": 731, + "pc": [ + 2885, + 2886 + ] + }, + { + "teal": 2819, + "source": 731, + "pc": [ + 2887, + 2888 + ] + }, + { + "teal": 2820, + "source": 731, + "pc": [ + 2889 + ] + }, + { + "teal": 2821, + "source": 731, + "pc": [ + 2890, + 2891, + 2892 + ] + }, + { + "teal": 2826, + "source": 732, + "pc": [ + 2893, + 2894 + ] + }, + { + "teal": 2827, + "source": 732, + "pc": [ + 2895, + 2896 + ] + }, + { + "teal": 2828, + "source": 732, + "pc": [ + 2897 + ] + }, + { + "teal": 2829, + "source": 732, + "pc": [ + 2898, + 2899, + 2900 + ] + }, + { + "teal": 2834, + "source": 733, + "pc": [ + 2901 + ] + }, + { + "teal": 2835, + "source": 733, + "pc": [ + 2902 + ] + }, + { + "teal": 2836, + "source": 733, + "pc": [ + 2903, + 2904 + ] + }, + { + "teal": 2837, + "source": 733, + "pc": [ + 2905 + ] + }, + { + "teal": 2838, + "source": 733, + "pc": [ + 2906, + 2907 + ] + }, + { + "teal": 2839, + "source": 733, + "pc": [ + 2908, + 2909 + ] + }, + { + "teal": 2840, + "source": 733, + "pc": [ + 2910 + ] + }, + { + "teal": 2841, + "source": 733, + "pc": [ + 2911, + 2912 + ] + }, + { + "teal": 2842, + "source": 733, + "pc": [ + 2913, + 2914 + ] + }, + { + "teal": 2843, + "source": 733, + "pc": [ + 2915, + 2916 + ] + }, + { + "teal": 2844, + "source": 733, + "pc": [ + 2917, + 2918 + ] + }, + { + "teal": 2845, + "source": 733, + "pc": [ + 2919 + ] + }, + { + "teal": 2850, + "source": 735, + "pc": [ + 2920, + 2921 + ] + }, + { + "teal": 2851, + "source": 735, + "pc": [ + 2922 + ] + }, + { + "teal": 2852, + "source": 735, + "pc": [ + 2923 + ] + }, + { + "teal": 2853, + "source": 735, + "pc": [ + 2924 + ] + }, + { + "teal": 2854, + "source": 735, + "pc": [ + 2925 + ] + }, + { + "teal": 2855, + "source": 735, + "pc": [ + 2926, + 2927 + ] + }, + { + "teal": 2856, + "source": 735, + "pc": [ + 2928 + ] + }, + { + "teal": 2857, + "source": 735, + "pc": [ + 2929, + 2930 + ] + }, + { + "teal": 2862, + "source": 736, + "pc": [ + 2931, + 2932 + ] + }, + { + "teal": 2863, + "source": 736, + "pc": [ + 2933, + 2934, + 2935 + ] + }, + { + "teal": 2864, + "source": 736, + "pc": [ + 2936, + 2937 + ] + }, + { + "teal": 2865, + "source": 736, + "pc": [ + 2938 + ] + }, + { + "teal": 2866, + "source": 736, + "pc": [ + 2939, + 2940, + 2941 + ] + }, + { + "teal": 2872, + "source": 737, + "pc": [ + 2942, + 2943 + ] + }, + { + "teal": 2873, + "source": 737, + "pc": [ + 2944, + 2945, + 2946 + ] + }, + { + "teal": 2874, + "source": 737, + "pc": [ + 2947 + ] + }, + { + "teal": 2875, + "source": 737, + "pc": [ + 2948, + 2949 + ] + }, + { + "teal": 2876, + "source": 737, + "pc": [ + 2950 + ] + }, + { + "teal": 2877, + "source": 737, + "pc": [ + 2951, + 2952, + 2953 + ] + }, + { + "teal": 2882, + "source": 740, + "pc": [ + 2954, + 2955 + ] + }, + { + "teal": 2883, + "source": 740, + "pc": [ + 2956, + 2957 + ] + }, + { + "teal": 2884, + "source": 740, + "pc": [ + 2958, + 2959, + 2960 + ] + }, + { + "teal": 2885, + "source": 740, + "pc": [ + 2961 + ] + }, + { + "teal": 2886, + "source": 740, + "pc": [ + 2962 + ] + }, + { + "teal": 2887, + "source": 740, + "pc": [ + 2963, + 2964 + ] + }, + { + "teal": 2888, + "source": 737, + "pc": [ + 2965, + 2966, + 2967 + ] + }, + { + "teal": 2893, + "source": 744, + "pc": [ + 2968, + 2969 + ] + }, + { + "teal": 2894, + "source": 744, + "pc": [ + 2970, + 2971 + ] + }, + { + "teal": 2895, + "source": 744, + "pc": [ + 2972, + 2973, + 2974 + ] + }, + { + "teal": 2896, + "source": 744, + "pc": [ + 2975 + ] + }, + { + "teal": 2897, + "source": 744, + "pc": [ + 2976 + ] + }, + { + "teal": 2898, + "source": 744, + "pc": [ + 2977, + 2978 + ] + }, + { + "teal": 2903, + "source": 748, + "pc": [ + 2979, + 2980 + ] + }, + { + "teal": 2904, + "source": 748, + "pc": [ + 2981, + 2982 + ] + }, + { + "teal": 2905, + "source": 748, + "pc": [ + 2983 + ] + }, + { + "teal": 2906, + "source": 748, + "pc": [ + 2984, + 2985, + 2986 + ] + }, + { + "teal": 2911, + "source": 749, + "pc": [ + 2987, + 2988 + ] + }, + { + "teal": 2912, + "source": 749, + "pc": [ + 2989, + 2990 + ] + }, + { + "teal": 2913, + "source": 749, + "pc": [ + 2991, + 2992, + 2993 + ] + }, + { + "teal": 2914, + "source": 749, + "pc": [ + 2994 + ] + }, + { + "teal": 2915, + "source": 749, + "pc": [ + 2995 + ] + }, + { + "teal": 2916, + "source": 749, + "pc": [ + 2996, + 2997 + ] + }, + { + "teal": 2920, + "source": 750, + "pc": [ + 2998, + 2999 + ] + }, + { + "teal": 2921, + "source": 750, + "pc": [ + 3000, + 3001 + ] + }, + { + "teal": 2922, + "source": 750, + "pc": [ + 3002 + ] + }, + { + "teal": 2923, + "source": 750, + "pc": [ + 3003, + 3004 + ] + }, + { + "teal": 2924, + "source": 750, + "pc": [ + 3005 + ] + }, + { + "teal": 2925, + "source": 750, + "pc": [ + 3006, + 3007 + ] + }, + { + "teal": 2930, + "source": 752, + "pc": [ + 3008, + 3009 + ] + }, + { + "teal": 2931, + "source": 752, + "pc": [ + 3010 + ] + }, + { + "teal": 2932, + "source": 752, + "pc": [ + 3011 + ] + }, + { + "teal": 2933, + "source": 752, + "pc": [ + 3012, + 3013, + 3014 + ] + }, + { + "teal": 2941, + "source": 755, + "pc": [ + 3015, + 3016 + ] + }, + { + "teal": 2942, + "source": 755, + "pc": [ + 3017, + 3018, + 3019 + ] + }, + { + "teal": 2943, + "source": 755, + "pc": [ + 3020 + ] + }, + { + "teal": 2944, + "source": 755, + "pc": [ + 3021, + 3022 + ] + }, + { + "teal": 2945, + "source": 754, + "pc": [ + 3023 + ] + }, + { + "teal": 2946, + "source": 755, + "pc": [ + 3024, + 3025 + ] + }, + { + "teal": 2947, + "source": 754, + "pc": [ + 3026, + 3027 + ] + }, + { + "teal": 2948, + "source": 754, + "pc": [ + 3028, + 3029 + ] + }, + { + "teal": 2949, + "source": 754, + "pc": [ + 3030 + ] + }, + { + "teal": 2950, + "source": 754, + "pc": [ + 3031, + 3032 + ] + }, + { + "teal": 2951, + "source": 754, + "pc": [ + 3033 + ] + }, + { + "teal": 2952, + "source": 754, + "pc": [ + 3034, + 3035 + ] + }, + { + "teal": 2953, + "source": 754, + "pc": [ + 3036 + ] + }, + { + "teal": 2954, + "source": 754, + "pc": [ + 3037 + ] + }, + { + "teal": 2955, + "source": 756, + "pc": [ + 3038, + 3039 + ] + }, + { + "teal": 2956, + "source": 756, + "pc": [ + 3040 + ] + }, + { + "teal": 2957, + "source": 756, + "pc": [ + 3041, + 3042 + ] + }, + { + "teal": 2958, + "source": 754, + "pc": [ + 3043 + ] + }, + { + "teal": 2959, + "source": 754, + "pc": [ + 3044 + ] + }, + { + "teal": 2960, + "source": 754, + "pc": [ + 3045 + ] + }, + { + "teal": 2961, + "source": 754, + "pc": [ + 3046 + ] + }, + { + "teal": 2962, + "source": 754, + "pc": [ + 3047 + ] + }, + { + "teal": 2963, + "source": 754, + "pc": [ + 3048 + ] + }, + { + "teal": 2966, + "source": 754, + "errorMessage": "wideRatio failed", + "pc": [ + 3049 + ] + }, + { + "teal": 2967, + "source": 754, + "pc": [ + 3050, + 3051 + ] + }, + { + "teal": 2971, + "source": 761, + "pc": [ + 3052, + 3053 + ] + }, + { + "teal": 2972, + "source": 761, + "pc": [ + 3054, + 3055 + ] + }, + { + "teal": 2973, + "source": 761, + "pc": [ + 3056 + ] + }, + { + "teal": 2974, + "source": 761, + "pc": [ + 3057, + 3058 + ] + }, + { + "teal": 2978, + "source": 762, + "pc": [ + 3059, + 3060 + ] + }, + { + "teal": 2979, + "source": 762, + "pc": [ + 3061, + 3062 + ] + }, + { + "teal": 2980, + "source": 762, + "pc": [ + 3063, + 3064 + ] + }, + { + "teal": 2981, + "source": 762, + "pc": [ + 3065, + 3066, + 3067 + ] + }, + { + "teal": 2982, + "source": 762, + "pc": [ + 3068 + ] + }, + { + "teal": 2983, + "source": 762, + "pc": [ + 3069, + 3070 + ] + }, + { + "teal": 2984, + "source": 762, + "pc": [ + 3071 + ] + }, + { + "teal": 2985, + "source": 762, + "pc": [ + 3072 + ] + }, + { + "teal": 2986, + "source": 762, + "pc": [ + 3073 + ] + }, + { + "teal": 2987, + "source": 762, + "pc": [ + 3074, + 3075 + ] + }, + { + "teal": 2991, + "source": 763, + "pc": [ + 3076, + 3077 + ] + }, + { + "teal": 2992, + "source": 763, + "pc": [ + 3078, + 3079 + ] + }, + { + "teal": 2993, + "source": 763, + "pc": [ + 3080 + ] + }, + { + "teal": 2994, + "source": 763, + "pc": [ + 3081, + 3082 + ] + }, + { + "teal": 3002, + "source": 767, + "pc": [ + 3083, + 3084 + ] + }, + { + "teal": 3003, + "source": 767, + "pc": [ + 3085, + 3086, + 3087 + ] + }, + { + "teal": 3004, + "source": 767, + "pc": [ + 3088 + ] + }, + { + "teal": 3005, + "source": 767, + "pc": [ + 3089, + 3090 + ] + }, + { + "teal": 3006, + "source": 766, + "pc": [ + 3091 + ] + }, + { + "teal": 3007, + "source": 767, + "pc": [ + 3092, + 3093 + ] + }, + { + "teal": 3008, + "source": 766, + "pc": [ + 3094, + 3095 + ] + }, + { + "teal": 3009, + "source": 766, + "pc": [ + 3096, + 3097 + ] + }, + { + "teal": 3010, + "source": 766, + "pc": [ + 3098 + ] + }, + { + "teal": 3011, + "source": 766, + "pc": [ + 3099, + 3100 + ] + }, + { + "teal": 3012, + "source": 766, + "pc": [ + 3101 + ] + }, + { + "teal": 3013, + "source": 766, + "pc": [ + 3102, + 3103 + ] + }, + { + "teal": 3014, + "source": 766, + "pc": [ + 3104 + ] + }, + { + "teal": 3015, + "source": 766, + "pc": [ + 3105 + ] + }, + { + "teal": 3016, + "source": 768, + "pc": [ + 3106, + 3107 + ] + }, + { + "teal": 3017, + "source": 768, + "pc": [ + 3108 + ] + }, + { + "teal": 3018, + "source": 768, + "pc": [ + 3109, + 3110 + ] + }, + { + "teal": 3019, + "source": 766, + "pc": [ + 3111 + ] + }, + { + "teal": 3020, + "source": 766, + "pc": [ + 3112 + ] + }, + { + "teal": 3021, + "source": 766, + "pc": [ + 3113 + ] + }, + { + "teal": 3022, + "source": 766, + "pc": [ + 3114 + ] + }, + { + "teal": 3023, + "source": 766, + "pc": [ + 3115 + ] + }, + { + "teal": 3024, + "source": 766, + "pc": [ + 3116 + ] + }, + { + "teal": 3027, + "source": 766, + "errorMessage": "wideRatio failed", + "pc": [ + 3117 + ] + }, + { + "teal": 3028, + "source": 766, + "pc": [ + 3118, + 3119 + ] + }, + { + "teal": 3032, + "source": 772, + "pc": [ + 3120, + 3121 + ] + }, + { + "teal": 3033, + "source": 772, + "pc": [ + 3122, + 3123 + ] + }, + { + "teal": 3034, + "source": 772, + "pc": [ + 3124 + ] + }, + { + "teal": 3035, + "source": 772, + "pc": [ + 3125, + 3126 + ] + }, + { + "teal": 3039, + "source": 775, + "pc": [ + 3127, + 3128 + ] + }, + { + "teal": 3040, + "source": 775, + "pc": [ + 3129, + 3130 + ] + }, + { + "teal": 3041, + "source": 775, + "pc": [ + 3131, + 3132 + ] + }, + { + "teal": 3042, + "source": 775, + "pc": [ + 3133, + 3134, + 3135 + ] + }, + { + "teal": 3043, + "source": 775, + "pc": [ + 3136 + ] + }, + { + "teal": 3044, + "source": 775, + "pc": [ + 3137, + 3138 + ] + }, + { + "teal": 3045, + "source": 775, + "pc": [ + 3139 + ] + }, + { + "teal": 3046, + "source": 775, + "pc": [ + 3140 + ] + }, + { + "teal": 3047, + "source": 775, + "pc": [ + 3141 + ] + }, + { + "teal": 3048, + "source": 775, + "pc": [ + 3142, + 3143 + ] + }, + { + "teal": 3052, + "source": 776, + "pc": [ + 3144, + 3145 + ] + }, + { + "teal": 3053, + "source": 776, + "pc": [ + 3146, + 3147 + ] + }, + { + "teal": 3054, + "source": 776, + "pc": [ + 3148, + 3149 + ] + }, + { + "teal": 3055, + "source": 776, + "pc": [ + 3150, + 3151, + 3152 + ] + }, + { + "teal": 3056, + "source": 776, + "pc": [ + 3153 + ] + }, + { + "teal": 3057, + "source": 776, + "pc": [ + 3154, + 3155 + ] + }, + { + "teal": 3058, + "source": 776, + "pc": [ + 3156 + ] + }, + { + "teal": 3059, + "source": 776, + "pc": [ + 3157 + ] + }, + { + "teal": 3060, + "source": 776, + "pc": [ + 3158 + ] + }, + { + "teal": 3061, + "source": 776, + "pc": [ + 3159, + 3160 + ] + }, + { + "teal": 3065, + "source": 777, + "pc": [ + 3161, + 3162 + ] + }, + { + "teal": 3066, + "source": 777, + "pc": [ + 3163, + 3164 + ] + }, + { + "teal": 3067, + "source": 777, + "pc": [ + 3165 + ] + }, + { + "teal": 3068, + "source": 777, + "pc": [ + 3166, + 3167 + ] + }, + { + "teal": 3072, + "source": 779, + "pc": [ + 3168, + 3169 + ] + }, + { + "teal": 3073, + "source": 779, + "pc": [ + 3170 + ] + }, + { + "teal": 3074, + "source": 779, + "pc": [ + 3171 + ] + }, + { + "teal": 3075, + "source": 779, + "pc": [ + 3172, + 3173 + ] + }, + { + "teal": 3076, + "source": 779, + "pc": [ + 3174 + ] + }, + { + "teal": 3077, + "source": 779, + "pc": [ + 3175, + 3176 + ] + }, + { + "teal": 3078, + "source": 779, + "pc": [ + 3177 + ] + }, + { + "teal": 3089, + "source": 731, + "pc": [ + 3178, + 3179 + ] + }, + { + "teal": 3090, + "source": 731, + "pc": [ + 3180 + ] + }, + { + "teal": 3091, + "source": 731, + "pc": [ + 3181 + ] + }, + { + "teal": 3092, + "source": 731, + "pc": [ + 3182, + 3183 + ] + }, + { + "teal": 3093, + "source": 731, + "pc": [ + 3184, + 3185, + 3186 + ] + }, + { + "teal": 3098, + "source": 787, + "pc": [ + 3187, + 3188 + ] + }, + { + "teal": 3099, + "source": 787, + "pc": [ + 3189 + ] + }, + { + "teal": 3100, + "source": 787, + "pc": [ + 3190, + 3191 + ] + }, + { + "teal": 3101, + "source": 787, + "pc": [ + 3192 + ] + }, + { + "teal": 3102, + "source": 787, + "pc": [ + 3193, + 3194 + ] + }, + { + "teal": 3107, + "source": 791, + "pc": [ + 3195, + 3196 + ] + }, + { + "teal": 3108, + "source": 791, + "pc": [ + 3197 + ] + }, + { + "teal": 3109, + "source": 791, + "pc": [ + 3198 + ] + }, + { + "teal": 3110, + "source": 791, + "pc": [ + 3199, + 3200, + 3201 + ] + }, + { + "teal": 3115, + "source": 793, + "pc": [ + 3202 + ] + }, + { + "teal": 3116, + "source": 793, + "pc": [ + 3203, + 3204 + ] + }, + { + "teal": 3121, + "source": 793, + "pc": [ + 3205, + 3206 + ] + }, + { + "teal": 3122, + "source": 793, + "pc": [ + 3207, + 3208 + ] + }, + { + "teal": 3123, + "source": 793, + "pc": [ + 3209 + ] + }, + { + "teal": 3124, + "source": 793, + "pc": [ + 3210, + 3211, + 3212 + ] + }, + { + "teal": 3129, + "source": 794, + "pc": [ + 3213, + 3214 + ] + }, + { + "teal": 3130, + "source": 794, + "pc": [ + 3215, + 3216 + ] + }, + { + "teal": 3131, + "source": 794, + "pc": [ + 3217 + ] + }, + { + "teal": 3132, + "source": 794, + "pc": [ + 3218, + 3219, + 3220 + ] + }, + { + "teal": 3137, + "source": 795, + "pc": [ + 3221 + ] + }, + { + "teal": 3138, + "source": 795, + "pc": [ + 3222 + ] + }, + { + "teal": 3139, + "source": 795, + "pc": [ + 3223, + 3224 + ] + }, + { + "teal": 3140, + "source": 795, + "pc": [ + 3225 + ] + }, + { + "teal": 3141, + "source": 795, + "pc": [ + 3226, + 3227 + ] + }, + { + "teal": 3142, + "source": 795, + "pc": [ + 3228, + 3229 + ] + }, + { + "teal": 3143, + "source": 795, + "pc": [ + 3230 + ] + }, + { + "teal": 3144, + "source": 795, + "pc": [ + 3231, + 3232 + ] + }, + { + "teal": 3145, + "source": 795, + "pc": [ + 3233, + 3234 + ] + }, + { + "teal": 3146, + "source": 795, + "pc": [ + 3235, + 3236 + ] + }, + { + "teal": 3147, + "source": 795, + "pc": [ + 3237, + 3238 + ] + }, + { + "teal": 3148, + "source": 795, + "pc": [ + 3239 + ] + }, + { + "teal": 3153, + "source": 797, + "pc": [ + 3240, + 3241 + ] + }, + { + "teal": 3154, + "source": 797, + "pc": [ + 3242 + ] + }, + { + "teal": 3155, + "source": 797, + "pc": [ + 3243 + ] + }, + { + "teal": 3156, + "source": 797, + "pc": [ + 3244 + ] + }, + { + "teal": 3157, + "source": 797, + "pc": [ + 3245 + ] + }, + { + "teal": 3158, + "source": 797, + "pc": [ + 3246, + 3247 + ] + }, + { + "teal": 3159, + "source": 797, + "pc": [ + 3248 + ] + }, + { + "teal": 3160, + "source": 797, + "pc": [ + 3249, + 3250 + ] + }, + { + "teal": 3165, + "source": 798, + "pc": [ + 3251, + 3252 + ] + }, + { + "teal": 3166, + "source": 798, + "pc": [ + 3253, + 3254, + 3255 + ] + }, + { + "teal": 3167, + "source": 798, + "pc": [ + 3256, + 3257 + ] + }, + { + "teal": 3168, + "source": 798, + "pc": [ + 3258 + ] + }, + { + "teal": 3169, + "source": 798, + "pc": [ + 3259 + ] + }, + { + "teal": 3170, + "source": 798, + "pc": [ + 3260, + 3261, + 3262 + ] + }, + { + "teal": 3171, + "source": 798, + "pc": [ + 3263, + 3264 + ] + }, + { + "teal": 3172, + "source": 798, + "pc": [ + 3265, + 3266, + 3267 + ] + }, + { + "teal": 3173, + "source": 798, + "pc": [ + 3268 + ] + }, + { + "teal": 3174, + "source": 798, + "pc": [ + 3269, + 3270 + ] + }, + { + "teal": 3175, + "source": 798, + "pc": [ + 3271 + ] + }, + { + "teal": 3176, + "source": 798, + "pc": [ + 3272 + ] + }, + { + "teal": 3179, + "source": 798, + "pc": [ + 3273, + 3274, + 3275 + ] + }, + { + "teal": 3184, + "source": 799, + "pc": [ + 3276, + 3277 + ] + }, + { + "teal": 3185, + "source": 799, + "pc": [ + 3278, + 3279 + ] + }, + { + "teal": 3186, + "source": 799, + "pc": [ + 3280, + 3281, + 3282 + ] + }, + { + "teal": 3187, + "source": 799, + "pc": [ + 3283 + ] + }, + { + "teal": 3188, + "source": 799, + "pc": [ + 3284 + ] + }, + { + "teal": 3189, + "source": 799, + "pc": [ + 3285, + 3286 + ] + }, + { + "teal": 3194, + "source": 801, + "pc": [ + 3287, + 3288 + ] + }, + { + "teal": 3195, + "source": 801, + "pc": [ + 3289, + 3290 + ] + }, + { + "teal": 3196, + "source": 801, + "pc": [ + 3291 + ] + }, + { + "teal": 3197, + "source": 801, + "pc": [ + 3292, + 3293, + 3294 + ] + }, + { + "teal": 3203, + "source": 806, + "pc": [ + 3295, + 3296 + ] + }, + { + "teal": 3204, + "source": 806, + "pc": [ + 3297 + ] + }, + { + "teal": 3205, + "source": 806, + "pc": [ + 3298 + ] + }, + { + "teal": 3206, + "source": 806, + "pc": [ + 3299, + 3300, + 3301 + ] + }, + { + "teal": 3214, + "source": 808, + "pc": [ + 3302, + 3303 + ] + }, + { + "teal": 3215, + "source": 808, + "pc": [ + 3304, + 3305, + 3306 + ] + }, + { + "teal": 3216, + "source": 808, + "pc": [ + 3307 + ] + }, + { + "teal": 3217, + "source": 808, + "pc": [ + 3308, + 3309 + ] + }, + { + "teal": 3218, + "source": 807, + "pc": [ + 3310 + ] + }, + { + "teal": 3219, + "source": 807, + "pc": [ + 3311 + ] + }, + { + "teal": 3220, + "source": 809, + "pc": [ + 3312, + 3313 + ] + }, + { + "teal": 3221, + "source": 807, + "pc": [ + 3314 + ] + }, + { + "teal": 3222, + "source": 807, + "pc": [ + 3315 + ] + }, + { + "teal": 3223, + "source": 807, + "pc": [ + 3316 + ] + }, + { + "teal": 3224, + "source": 807, + "pc": [ + 3317 + ] + }, + { + "teal": 3225, + "source": 807, + "pc": [ + 3318 + ] + }, + { + "teal": 3228, + "source": 807, + "errorMessage": "wideRatio failed", + "pc": [ + 3319 + ] + }, + { + "teal": 3229, + "source": 807, + "pc": [ + 3320, + 3321 + ] + }, + { + "teal": 3233, + "source": 813, + "pc": [ + 3322, + 3323 + ] + }, + { + "teal": 3234, + "source": 813, + "pc": [ + 3324, + 3325 + ] + }, + { + "teal": 3235, + "source": 813, + "pc": [ + 3326, + 3327 + ] + }, + { + "teal": 3236, + "source": 813, + "pc": [ + 3328, + 3329, + 3330 + ] + }, + { + "teal": 3237, + "source": 813, + "pc": [ + 3331 + ] + }, + { + "teal": 3238, + "source": 813, + "pc": [ + 3332, + 3333 + ] + }, + { + "teal": 3239, + "source": 813, + "pc": [ + 3334 + ] + }, + { + "teal": 3240, + "source": 813, + "pc": [ + 3335 + ] + }, + { + "teal": 3241, + "source": 813, + "pc": [ + 3336 + ] + }, + { + "teal": 3242, + "source": 813, + "pc": [ + 3337, + 3338 + ] + }, + { + "teal": 3246, + "source": 814, + "pc": [ + 3339, + 3340 + ] + }, + { + "teal": 3247, + "source": 814, + "pc": [ + 3341, + 3342 + ] + }, + { + "teal": 3248, + "source": 814, + "pc": [ + 3343 + ] + }, + { + "teal": 3249, + "source": 814, + "pc": [ + 3344, + 3345 + ] + }, + { + "teal": 3255, + "source": 816, + "pc": [ + 3346, + 3347 + ] + }, + { + "teal": 3256, + "source": 816, + "pc": [ + 3348 + ] + }, + { + "teal": 3257, + "source": 816, + "pc": [ + 3349 + ] + }, + { + "teal": 3258, + "source": 816, + "pc": [ + 3350, + 3351, + 3352 + ] + }, + { + "teal": 3266, + "source": 818, + "pc": [ + 3353, + 3354 + ] + }, + { + "teal": 3267, + "source": 818, + "pc": [ + 3355, + 3356, + 3357 + ] + }, + { + "teal": 3268, + "source": 818, + "pc": [ + 3358 + ] + }, + { + "teal": 3269, + "source": 818, + "pc": [ + 3359, + 3360 + ] + }, + { + "teal": 3270, + "source": 817, + "pc": [ + 3361 + ] + }, + { + "teal": 3271, + "source": 817, + "pc": [ + 3362 + ] + }, + { + "teal": 3272, + "source": 819, + "pc": [ + 3363, + 3364 + ] + }, + { + "teal": 3273, + "source": 817, + "pc": [ + 3365 + ] + }, + { + "teal": 3274, + "source": 817, + "pc": [ + 3366 + ] + }, + { + "teal": 3275, + "source": 817, + "pc": [ + 3367 + ] + }, + { + "teal": 3276, + "source": 817, + "pc": [ + 3368 + ] + }, + { + "teal": 3277, + "source": 817, + "pc": [ + 3369 + ] + }, + { + "teal": 3280, + "source": 817, + "errorMessage": "wideRatio failed", + "pc": [ + 3370 + ] + }, + { + "teal": 3281, + "source": 817, + "pc": [ + 3371, + 3372 + ] + }, + { + "teal": 3285, + "source": 823, + "pc": [ + 3373, + 3374 + ] + }, + { + "teal": 3286, + "source": 823, + "pc": [ + 3375, + 3376 + ] + }, + { + "teal": 3287, + "source": 823, + "pc": [ + 3377, + 3378 + ] + }, + { + "teal": 3288, + "source": 823, + "pc": [ + 3379, + 3380, + 3381 + ] + }, + { + "teal": 3289, + "source": 823, + "pc": [ + 3382 + ] + }, + { + "teal": 3290, + "source": 823, + "pc": [ + 3383, + 3384 + ] + }, + { + "teal": 3291, + "source": 823, + "pc": [ + 3385 + ] + }, + { + "teal": 3292, + "source": 823, + "pc": [ + 3386 + ] + }, + { + "teal": 3293, + "source": 823, + "pc": [ + 3387 + ] + }, + { + "teal": 3294, + "source": 823, + "pc": [ + 3388, + 3389 + ] + }, + { + "teal": 3298, + "source": 824, + "pc": [ + 3390, + 3391 + ] + }, + { + "teal": 3299, + "source": 824, + "pc": [ + 3392, + 3393 + ] + }, + { + "teal": 3300, + "source": 824, + "pc": [ + 3394, + 3395 + ] + }, + { + "teal": 3301, + "source": 824, + "pc": [ + 3396, + 3397, + 3398 + ] + }, + { + "teal": 3302, + "source": 824, + "pc": [ + 3399 + ] + }, + { + "teal": 3303, + "source": 824, + "pc": [ + 3400, + 3401 + ] + }, + { + "teal": 3304, + "source": 824, + "pc": [ + 3402 + ] + }, + { + "teal": 3305, + "source": 824, + "pc": [ + 3403 + ] + }, + { + "teal": 3306, + "source": 824, + "pc": [ + 3404 + ] + }, + { + "teal": 3307, + "source": 824, + "pc": [ + 3405, + 3406 + ] + }, + { + "teal": 3311, + "source": 825, + "pc": [ + 3407, + 3408 + ] + }, + { + "teal": 3312, + "source": 825, + "pc": [ + 3409, + 3410 + ] + }, + { + "teal": 3313, + "source": 825, + "pc": [ + 3411 + ] + }, + { + "teal": 3314, + "source": 825, + "pc": [ + 3412, + 3413 + ] + }, + { + "teal": 3319, + "source": 829, + "pc": [ + 3414, + 3415 + ] + }, + { + "teal": 3320, + "source": 829, + "pc": [ + 3416 + ] + }, + { + "teal": 3321, + "source": 829, + "pc": [ + 3417 + ] + }, + { + "teal": 3322, + "source": 829, + "pc": [ + 3418, + 3419 + ] + }, + { + "teal": 3323, + "source": 829, + "pc": [ + 3420 + ] + }, + { + "teal": 3324, + "source": 829, + "pc": [ + 3421, + 3422 + ] + }, + { + "teal": 3325, + "source": 829, + "pc": [ + 3423 + ] + }, + { + "teal": 3334, + "source": 793, + "pc": [ + 3424, + 3425 + ] + }, + { + "teal": 3335, + "source": 793, + "pc": [ + 3426 + ] + }, + { + "teal": 3336, + "source": 793, + "pc": [ + 3427 + ] + }, + { + "teal": 3337, + "source": 793, + "pc": [ + 3428, + 3429 + ] + }, + { + "teal": 3338, + "source": 793, + "pc": [ + 3430, + 3431, + 3432 + ] + }, + { + "teal": 3347, + "source": 839, + "pc": [ + 3433, + 3434 + ] + }, + { + "teal": 3348, + "source": 839, + "pc": [ + 3435 + ] + }, + { + "teal": 3349, + "source": 839, + "pc": [ + 3436, + 3437 + ] + }, + { + "teal": 3350, + "source": 839, + "pc": [ + 3438 + ] + }, + { + "teal": 3351, + "source": 839, + "pc": [ + 3439 + ] + }, + { + "teal": 3352, + "source": 839, + "pc": [ + 3440, + 3441 + ] + }, + { + "teal": 3353, + "source": 839, + "pc": [ + 3442 + ] + }, + { + "teal": 3354, + "source": 839, + "pc": [ + 3443, + 3444 + ] + }, + { + "teal": 3358, + "source": 840, + "pc": [ + 3445, + 3446 + ] + }, + { + "teal": 3359, + "source": 840, + "pc": [ + 3447 + ] + }, + { + "teal": 3360, + "source": 840, + "pc": [ + 3448, + 3449 + ] + }, + { + "teal": 3361, + "source": 840, + "pc": [ + 3450 + ] + }, + { + "teal": 3362, + "source": 840, + "pc": [ + 3451, + 3452 + ] + }, + { + "teal": 3363, + "source": 840, + "pc": [ + 3453 + ] + }, + { + "teal": 3364, + "source": 840, + "pc": [ + 3454 + ] + }, + { + "teal": 3369, + "source": 841, + "pc": [ + 3455, + 3456 + ] + }, + { + "teal": 3370, + "source": 841, + "pc": [ + 3457 + ] + }, + { + "teal": 3371, + "source": 842, + "pc": [ + 3458 + ] + }, + { + "teal": 3372, + "source": 842, + "pc": [ + 3459, + 3460 + ] + }, + { + "teal": 3373, + "source": 842, + "pc": [ + 3461 + ] + }, + { + "teal": 3374, + "source": 842, + "pc": [ + 3462, + 3463 + ] + }, + { + "teal": 3375, + "source": 842, + "pc": [ + 3464 + ] + }, + { + "teal": 3376, + "source": 842, + "pc": [ + 3465 + ] + }, + { + "teal": 3377, + "source": 842, + "pc": [ + 3466 + ] + }, + { + "teal": 3378, + "source": 842, + "pc": [ + 3467 + ] + }, + { + "teal": 3379, + "source": 842, + "pc": [ + 3468 + ] + }, + { + "teal": 3380, + "source": 842, + "pc": [ + 3469, + 3470 + ] + }, + { + "teal": 3381, + "source": 842, + "pc": [ + 3471 + ] + }, + { + "teal": 3384, + "source": 842, + "errorMessage": "this.stakeAccumulator.value + (increasedStake as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits", + "pc": [ + 3472 + ] + }, + { + "teal": 3385, + "source": 842, + "pc": [ + 3473, + 3474 + ] + }, + { + "teal": 3386, + "source": 842, + "pc": [ + 3475 + ] + }, + { + "teal": 3387, + "source": 842, + "pc": [ + 3476 + ] + }, + { + "teal": 3388, + "source": 842, + "pc": [ + 3477 + ] + }, + { + "teal": 3389, + "source": 842, + "pc": [ + 3478 + ] + }, + { + "teal": 3390, + "source": 842, + "pc": [ + 3479, + 3480 + ] + }, + { + "teal": 3391, + "source": 842, + "pc": [ + 3481 + ] + }, + { + "teal": 3392, + "source": 842, + "pc": [ + 3482 + ] + }, + { + "teal": 3393, + "source": 842, + "pc": [ + 3483 + ] + }, + { + "teal": 3394, + "source": 841, + "pc": [ + 3484 + ] + }, + { + "teal": 3398, + "source": 843, + "pc": [ + 3485, + 3486 + ] + }, + { + "teal": 3399, + "source": 843, + "pc": [ + 3487 + ] + }, + { + "teal": 3400, + "source": 843, + "pc": [ + 3488 + ] + }, + { + "teal": 3401, + "source": 843, + "pc": [ + 3489, + 3490 + ] + }, + { + "teal": 3402, + "source": 843, + "pc": [ + 3491 + ] + }, + { + "teal": 3403, + "source": 843, + "pc": [ + 3492 + ] + }, + { + "teal": 3416, + "source": 849, + "pc": [ + 3493 + ] + }, + { + "teal": 3417, + "source": 849, + "pc": [ + 3494 + ] + }, + { + "teal": 3418, + "source": 849, + "pc": [ + 3495, + 3496 + ] + }, + { + "teal": 3419, + "source": 849, + "pc": [ + 3497, + 3498, + 3499, + 3500, + 3501, + 3502 + ] + }, + { + "teal": 3420, + "source": 849, + "pc": [ + 3503, + 3504 + ] + }, + { + "teal": 3424, + "source": 850, + "pc": [ + 3505 + ] + }, + { + "teal": 3425, + "source": 850, + "pc": [ + 3506 + ] + }, + { + "teal": 3426, + "source": 850, + "pc": [ + 3507, + 3508 + ] + }, + { + "teal": 3436, + "source": 852, + "pc": [ + 3509 + ] + }, + { + "teal": 3437, + "source": 852, + "pc": [ + 3510 + ] + }, + { + "teal": 3438, + "source": 852, + "pc": [ + 3511 + ] + }, + { + "teal": 3439, + "source": 852, + "pc": [ + 3512 + ] + }, + { + "teal": 3440, + "source": 852, + "pc": [ + 3513 + ] + }, + { + "teal": 3441, + "source": 852, + "pc": [ + 3514 + ] + }, + { + "teal": 3442, + "source": 852, + "pc": [ + 3515 + ] + }, + { + "teal": 3443, + "source": 852, + "pc": [ + 3516, + 3517, + 3518 + ] + }, + { + "teal": 3444, + "source": 852, + "pc": [ + 3519 + ] + }, + { + "teal": 3445, + "source": 852, + "pc": [ + 3520 + ] + }, + { + "teal": 3446, + "source": 852, + "pc": [ + 3521, + 3522 + ] + }, + { + "teal": 3447, + "source": 853, + "pc": [ + 3523, + 3524 + ] + }, + { + "teal": 3448, + "source": 853, + "pc": [ + 3525 + ] + }, + { + "teal": 3449, + "source": 853, + "pc": [ + 3526, + 3527 + ] + }, + { + "teal": 3450, + "source": 854, + "pc": [ + 3528, + 3529 + ] + }, + { + "teal": 3451, + "source": 854, + "pc": [ + 3530 + ] + }, + { + "teal": 3452, + "source": 854, + "pc": [ + 3531, + 3532 + ] + }, + { + "teal": 3453, + "source": 855, + "pc": [ + 3533, + 3534 + ] + }, + { + "teal": 3454, + "source": 855, + "pc": [ + 3535 + ] + }, + { + "teal": 3455, + "source": 855, + "pc": [ + 3536, + 3537 + ] + }, + { + "teal": 3456, + "source": 856, + "pc": [ + 3538, + 3539 + ] + }, + { + "teal": 3457, + "source": 856, + "pc": [ + 3540 + ] + }, + { + "teal": 3458, + "source": 856, + "pc": [ + 3541, + 3542 + ] + }, + { + "teal": 3461, + "source": 849, + "pc": [ + 3543 + ] + }, + { + "teal": 3462, + "source": 849, + "pc": [ + 3544, + 3545 + ] + }, + { + "teal": 3465, + "source": 849, + "pc": [ + 3546 + ] + }, + { + "teal": 3466, + "source": 516, + "pc": [ + 3547 + ] + }, + { + "teal": 3471, + "source": 881, + "pc": [ + 3548, + 3549, + 3550 + ] + }, + { + "teal": 3472, + "source": 881, + "pc": [ + 3551 + ] + }, + { + "teal": 3475, + "source": 880, + "pc": [ + 3552, + 3553, + 3554 + ] + }, + { + "teal": 3476, + "source": 880, + "pc": [ + 3555 + ] + }, + { + "teal": 3479, + "source": 879, + "pc": [ + 3556, + 3557, + 3558 + ] + }, + { + "teal": 3480, + "source": 879, + "pc": [ + 3559 + ] + }, + { + "teal": 3483, + "source": 878, + "pc": [ + 3560, + 3561, + 3562 + ] + }, + { + "teal": 3484, + "source": 878, + "pc": [ + 3563, + 3564, + 3565 + ] + }, + { + "teal": 3487, + "source": 877, + "pc": [ + 3566, + 3567, + 3568 + ] + }, + { + "teal": 3488, + "source": 877, + "pc": [ + 3569, + 3570, + 3571 + ] + }, + { + "teal": 3491, + "source": 876, + "pc": [ + 3572, + 3573, + 3574 + ] + }, + { + "teal": 3492, + "source": 876, + "pc": [ + 3575, + 3576, + 3577 + ] + }, + { + "teal": 3495, + "source": 875, + "pc": [ + 3578, + 3579 + ] + }, + { + "teal": 3496, + "source": 875, + "pc": [ + 3580 + ] + }, + { + "teal": 3497, + "source": 875, + "pc": [ + 3581 + ] + }, + { + "teal": 3498, + "source": 875, + "pc": [ + 3582 + ] + }, + { + "teal": 3499, + "source": 875, + "pc": [ + 3583, + 3584 + ] + }, + { + "teal": 3500, + "source": 875, + "pc": [ + 3585 + ] + }, + { + "teal": 3501, + "source": 875, + "pc": [ + 3586 + ] + }, + { + "teal": 3504, + "source": 875, + "errorMessage": "argument 6 (feePayment) for goOnline must be a pay transaction", + "pc": [ + 3587 + ] + }, + { + "teal": 3507, + "source": 874, + "pc": [ + 3588, + 3589, + 3590 + ] + }, + { + "teal": 3508, + "source": 874, + "pc": [ + 3591 + ] + }, + { + "teal": 3509, + "source": 874, + "pc": [ + 3592 + ] + }, + { + "teal": 3525, + "source": 874, + "pc": [ + 3593, + 3594, + 3595 + ] + }, + { + "teal": 3528, + "source": 874, + "pc": [ + 3596, + 3597 + ] + }, + { + "teal": 3532, + "source": 883, + "pc": [ + 3598, + 3599, + 3600 + ] + }, + { + "teal": 3535, + "source": 883, + "errorMessage": "can only be called by owner or manager of validator", + "pc": [ + 3601 + ] + }, + { + "teal": 3539, + "source": 884, + "pc": [ + 3602, + 3603, + 3604 + ] + }, + { + "teal": 3540, + "source": 884, + "pc": [ + 3605, + 3606 + ] + }, + { + "teal": 3545, + "source": 885, + "pc": [ + 3607, + 3608 + ] + }, + { + "teal": 3546, + "source": 885, + "pc": [ + 3609, + 3610 + ] + }, + { + "teal": 3547, + "source": 885, + "pc": [ + 3611, + 3612 + ] + }, + { + "teal": 3548, + "source": 885, + "pc": [ + 3613 + ] + }, + { + "teal": 3551, + "source": 885, + "errorMessage": "transaction verification failed: {\"txn\":\"feePayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", + "pc": [ + 3614 + ] + }, + { + "teal": 3554, + "source": 885, + "pc": [ + 3615, + 3616 + ] + }, + { + "teal": 3555, + "source": 885, + "pc": [ + 3617, + 3618 + ] + }, + { + "teal": 3556, + "source": 885, + "pc": [ + 3619, + 3620 + ] + }, + { + "teal": 3557, + "source": 885, + "pc": [ + 3621 + ] + }, + { + "teal": 3560, + "source": 885, + "errorMessage": "transaction verification failed: {\"txn\":\"feePayment\",\"field\":\"amount\",\"expected\":\"extraFee\"}", + "pc": [ + 3622 + ] + }, + { + "teal": 3572, + "source": 886, + "pc": [ + 3623 + ] + }, + { + "teal": 3573, + "source": 886, + "pc": [ + 3624, + 3625 + ] + }, + { + "teal": 3574, + "source": 886, + "pc": [ + 3626, + 3627 + ] + }, + { + "teal": 3578, + "source": 887, + "pc": [ + 3628, + 3629 + ] + }, + { + "teal": 3579, + "source": 887, + "pc": [ + 3630, + 3631 + ] + }, + { + "teal": 3583, + "source": 888, + "pc": [ + 3632, + 3633 + ] + }, + { + "teal": 3584, + "source": 888, + "pc": [ + 3634, + 3635 + ] + }, + { + "teal": 3588, + "source": 889, + "pc": [ + 3636, + 3637 + ] + }, + { + "teal": 3589, + "source": 889, + "pc": [ + 3638, + 3639 + ] + }, + { + "teal": 3593, + "source": 890, + "pc": [ + 3640, + 3641 + ] + }, + { + "teal": 3594, + "source": 890, + "pc": [ + 3642, + 3643 + ] + }, + { + "teal": 3598, + "source": 891, + "pc": [ + 3644, + 3645 + ] + }, + { + "teal": 3599, + "source": 891, + "pc": [ + 3646, + 3647 + ] + }, + { + "teal": 3603, + "source": 892, + "pc": [ + 3648, + 3649 + ] + }, + { + "teal": 3604, + "source": 892, + "pc": [ + 3650, + 3651 + ] + }, + { + "teal": 3608, + "source": 893, + "pc": [ + 3652, + 3653, + 3654 + ] + }, + { + "teal": 3609, + "source": 893, + "pc": [ + 3655, + 3656 + ] + }, + { + "teal": 3612, + "source": 886, + "pc": [ + 3657 + ] + }, + { + "teal": 3613, + "source": 874, + "pc": [ + 3658 + ] + }, + { + "teal": 3618, + "source": 902, + "pc": [ + 3659, + 3660, + 3661 + ] + }, + { + "teal": 3619, + "source": 902, + "pc": [ + 3662 + ] + }, + { + "teal": 3620, + "source": 902, + "pc": [ + 3663 + ] + }, + { + "teal": 3627, + "source": 902, + "pc": [ + 3664, + 3665, + 3666 + ] + }, + { + "teal": 3632, + "source": 905, + "pc": [ + 3667, + 3668 + ] + }, + { + "teal": 3633, + "source": 905, + "pc": [ + 3669 + ] + }, + { + "teal": 3634, + "source": 905, + "pc": [ + 3670 + ] + }, + { + "teal": 3635, + "source": 905, + "pc": [ + 3671, + 3672 + ] + }, + { + "teal": 3636, + "source": 905, + "pc": [ + 3673 + ] + }, + { + "teal": 3637, + "source": 905, + "pc": [ + 3674 + ] + }, + { + "teal": 3638, + "source": 905, + "pc": [ + 3675, + 3676, + 3677 + ] + }, + { + "teal": 3643, + "source": 906, + "pc": [ + 3678, + 3679, + 3680 + ] + }, + { + "teal": 3646, + "source": 906, + "errorMessage": "can only be called by owner or manager of validator", + "pc": [ + 3681 + ] + }, + { + "teal": 3651, + "source": 909, + "pc": [ + 3682 + ] + }, + { + "teal": 3652, + "source": 909, + "pc": [ + 3683, + 3684 + ] + }, + { + "teal": 3653, + "source": 909, + "pc": [ + 3685, + 3686 + ] + }, + { + "teal": 3656, + "source": 909, + "pc": [ + 3687 + ] + }, + { + "teal": 3657, + "source": 909, + "pc": [ + 3688, + 3689 + ] + }, + { + "teal": 3660, + "source": 909, + "pc": [ + 3690 + ] + }, + { + "teal": 3661, + "source": 902, + "pc": [ + 3691 + ] + }, + { + "teal": 3666, + "source": 915, + "pc": [ + 3692, + 3693, + 3694 + ] + }, + { + "teal": 3667, + "source": 915, + "pc": [ + 3695, + 3696, + 3697 + ] + }, + { + "teal": 3670, + "source": 915, + "pc": [ + 3698, + 3699, + 3700 + ] + }, + { + "teal": 3671, + "source": 915, + "pc": [ + 3701 + ] + }, + { + "teal": 3674, + "source": 915, + "pc": [ + 3702, + 3703, + 3704 + ] + }, + { + "teal": 3675, + "source": 915, + "pc": [ + 3705 + ] + }, + { + "teal": 3676, + "source": 915, + "pc": [ + 3706 + ] + }, + { + "teal": 3680, + "source": 915, + "pc": [ + 3707, + 3708, + 3709 + ] + }, + { + "teal": 3684, + "source": 916, + "pc": [ + 3710, + 3711, + 3712 + ] + }, + { + "teal": 3687, + "source": 916, + "errorMessage": "can only be called by owner or manager of validator", + "pc": [ + 3713 + ] + }, + { + "teal": 3695, + "source": 918, + "pc": [ + 3714 + ] + }, + { + "teal": 3696, + "source": 918, + "pc": [ + 3715 + ] + }, + { + "teal": 3697, + "source": 918, + "pc": [ + 3716, + 3717 + ] + }, + { + "teal": 3701, + "source": 919, + "pc": [ + 3718, + 3719 + ] + }, + { + "teal": 3702, + "source": 919, + "pc": [ + 3720, + 3721 + ] + }, + { + "teal": 3706, + "source": 920, + "pc": [ + 3722, + 3723, + 3724, + 3725, + 3726, + 3727, + 3728, + 3729, + 3730, + 3731, + 3732, + 3733, + 3734, + 3735, + 3736, + 3737, + 3738 + ] + }, + { + "teal": 3707, + "source": 920, + "pc": [ + 3739, + 3740 + ] + }, + { + "teal": 3708, + "source": 920, + "pc": [ + 3741, + 3742 + ] + }, + { + "teal": 3709, + "source": 920, + "pc": [ + 3743, + 3744 + ] + }, + { + "teal": 3710, + "source": 920, + "pc": [ + 3745, + 3746 + ] + }, + { + "teal": 3711, + "source": 920, + "pc": [ + 3747 + ] + }, + { + "teal": 3712, + "source": 920, + "pc": [ + 3748, + 3749 + ] + }, + { + "teal": 3713, + "source": 920, + "pc": [ + 3750, + 3751 + ] + }, + { + "teal": 3714, + "source": 920, + "pc": [ + 3752, + 3753 + ] + }, + { + "teal": 3718, + "source": 921, + "pc": [ + 3754, + 3755 + ] + }, + { + "teal": 3719, + "source": 921, + "pc": [ + 3756, + 3757 + ] + }, + { + "teal": 3722, + "source": 918, + "pc": [ + 3758 + ] + }, + { + "teal": 3723, + "source": 918, + "pc": [ + 3759, + 3760 + ] + }, + { + "teal": 3726, + "source": 918, + "pc": [ + 3761 + ] + }, + { + "teal": 3727, + "source": 915, + "pc": [ + 3762 + ] + }, + { + "teal": 3732, + "source": 931, + "pc": [ + 3763, + 3764 + ] + }, + { + "teal": 3735, + "source": 931, + "pc": [ + 3765, + 3766, + 3767 + ] + }, + { + "teal": 3736, + "source": 931, + "pc": [ + 3768 + ] + }, + { + "teal": 3737, + "source": 931, + "pc": [ + 3769 + ] + }, + { + "teal": 3738, + "source": 931, + "pc": [ + 3770, + 3771 + ] + }, + { + "teal": 3739, + "source": 931, + "pc": [ + 3772 + ] + }, + { + "teal": 3742, + "source": 931, + "errorMessage": "argument 0 (poolKey) for proxiedSetTokenPayoutRatio must be a (uint64,uint64,uint64)", + "pc": [ + 3773 + ] + }, + { + "teal": 3745, + "source": 931, + "pc": [ + 3774, + 3775, + 3776 + ] + }, + { + "teal": 3746, + "source": 931, + "pc": [ + 3777 + ] + }, + { + "teal": 3747, + "source": 931, + "pc": [ + 3778 + ] + }, + { + "teal": 3748, + "source": 931, + "pc": [ + 3779 + ] + }, + { + "teal": 3749, + "source": 931, + "pc": [ + 3780 + ] + }, + { + "teal": 3758, + "source": 931, + "pc": [ + 3781, + 3782, + 3783 + ] + }, + { + "teal": 3761, + "source": 931, + "pc": [ + 3784, + 3785 + ] + }, + { + "teal": 3765, + "source": 932, + "pc": [ + 3786 + ] + }, + { + "teal": 3766, + "source": 932, + "pc": [ + 3787 + ] + }, + { + "teal": 3767, + "source": 932, + "pc": [ + 3788, + 3789 + ] + }, + { + "teal": 3768, + "source": 932, + "pc": [ + 3790, + 3791, + 3792 + ] + }, + { + "teal": 3769, + "source": 932, + "pc": [ + 3793 + ] + }, + { + "teal": 3770, + "source": 932, + "pc": [ + 3794 + ] + }, + { + "teal": 3773, + "source": 932, + "errorMessage": "caller must be part of same validator set!", + "pc": [ + 3795 + ] + }, + { + "teal": 3777, + "source": 933, + "pc": [ + 3796 + ] + }, + { + "teal": 3778, + "source": 933, + "pc": [ + 3797 + ] + }, + { + "teal": 3779, + "source": 933, + "pc": [ + 3798 + ] + }, + { + "teal": 3780, + "source": 933, + "pc": [ + 3799 + ] + }, + { + "teal": 3783, + "source": 933, + "errorMessage": "callee must be pool 1", + "pc": [ + 3800 + ] + }, + { + "teal": 3787, + "source": 934, + "pc": [ + 3801, + 3802 + ] + }, + { + "teal": 3788, + "source": 934, + "pc": [ + 3803, + 3804, + 3805 + ] + }, + { + "teal": 3789, + "source": 934, + "pc": [ + 3806 + ] + }, + { + "teal": 3790, + "source": 934, + "pc": [ + 3807 + ] + }, + { + "teal": 3791, + "source": 934, + "pc": [ + 3808 + ] + }, + { + "teal": 3794, + "source": 934, + "errorMessage": "caller must NOT be pool 1", + "pc": [ + 3809 + ] + }, + { + "teal": 3801, + "source": 936, + "pc": [ + 3810 + ] + }, + { + "teal": 3802, + "source": 936, + "pc": [ + 3811 + ] + }, + { + "teal": 3803, + "source": 936, + "pc": [ + 3812, + 3813 + ] + }, + { + "teal": 3804, + "source": 936, + "pc": [ + 3814, + 3815 + ] + }, + { + "teal": 3805, + "source": 936, + "pc": [ + 3816, + 3817 + ] + }, + { + "teal": 3809, + "source": 937, + "pc": [ + 3818 + ] + }, + { + "teal": 3810, + "source": 937, + "pc": [ + 3819 + ] + }, + { + "teal": 3811, + "source": 937, + "pc": [ + 3820, + 3821 + ] + }, + { + "teal": 3815, + "source": 938, + "pc": [ + 3822, + 3823 + ] + }, + { + "teal": 3816, + "source": 938, + "pc": [ + 3824, + 3825, + 3826 + ] + }, + { + "teal": 3817, + "source": 938, + "pc": [ + 3827 + ] + }, + { + "teal": 3818, + "source": 938, + "pc": [ + 3828 + ] + }, + { + "teal": 3819, + "source": 938, + "pc": [ + 3829, + 3830 + ] + }, + { + "teal": 3820, + "source": 938, + "pc": [ + 3831, + 3832 + ] + }, + { + "teal": 3821, + "source": 938, + "pc": [ + 3833, + 3834, + 3835 + ] + }, + { + "teal": 3822, + "source": 938, + "pc": [ + 3836 + ] + }, + { + "teal": 3823, + "source": 938, + "pc": [ + 3837 + ] + }, + { + "teal": 3824, + "source": 938, + "pc": [ + 3838, + 3839 + ] + }, + { + "teal": 3827, + "source": 936, + "pc": [ + 3840 + ] + }, + { + "teal": 3828, + "source": 936, + "pc": [ + 3841, + 3842 + ] + }, + { + "teal": 3831, + "source": 936, + "pc": [ + 3843 + ] + }, + { + "teal": 3832, + "source": 936, + "pc": [ + 3844, + 3845 + ] + }, + { + "teal": 3833, + "source": 936, + "pc": [ + 3846 + ] + }, + { + "teal": 3834, + "source": 936, + "pc": [ + 3847 + ] + }, + { + "teal": 3835, + "source": 936, + "pc": [ + 3848, + 3849 + ] + }, + { + "teal": 3836, + "source": 936, + "pc": [ + 3850, + 3851, + 3852 + ] + }, + { + "teal": 3837, + "source": 936, + "pc": [ + 3853 + ] + }, + { + "teal": 3838, + "source": 936, + "pc": [ + 3854, + 3855 + ] + }, + { + "teal": 3842, + "source": 940, + "pc": [ + 3856, + 3857 + ] + }, + { + "teal": 3843, + "source": 940, + "pc": [ + 3858, + 3859 + ] + }, + { + "teal": 3844, + "source": 940, + "pc": [ + 3860, + 3861, + 3862 + ] + }, + { + "teal": 3845, + "source": 940, + "pc": [ + 3863 + ] + }, + { + "teal": 3846, + "source": 940, + "pc": [ + 3864 + ] + }, + { + "teal": 3847, + "source": 940, + "pc": [ + 3865 + ] + }, + { + "teal": 3851, + "source": 941, + "pc": [ + 3866, + 3867 + ] + }, + { + "teal": 3852, + "source": 941, + "pc": [ + 3868, + 3869 + ] + }, + { + "teal": 3853, + "source": 941, + "pc": [ + 3870, + 3871, + 3872 + ] + }, + { + "teal": 3854, + "source": 941, + "pc": [ + 3873 + ] + }, + { + "teal": 3855, + "source": 941, + "pc": [ + 3874, + 3875 + ] + }, + { + "teal": 3856, + "source": 941, + "pc": [ + 3876 + ] + }, + { + "teal": 3857, + "source": 941, + "pc": [ + 3877 + ] + }, + { + "teal": 3858, + "source": 941, + "pc": [ + 3878 + ] + }, + { + "teal": 3865, + "source": 943, + "pc": [ + 3879 + ] + }, + { + "teal": 3866, + "source": 943, + "pc": [ + 3880 + ] + }, + { + "teal": 3867, + "source": 943, + "pc": [ + 3881, + 3882 + ] + }, + { + "teal": 3868, + "source": 943, + "pc": [ + 3883, + 3884 + ] + }, + { + "teal": 3869, + "source": 943, + "pc": [ + 3885, + 3886 + ] + }, + { + "teal": 3873, + "source": 944, + "pc": [ + 3887 + ] + }, + { + "teal": 3874, + "source": 944, + "pc": [ + 3888 + ] + }, + { + "teal": 3875, + "source": 944, + "pc": [ + 3889, + 3890 + ] + }, + { + "teal": 3879, + "source": 945, + "pc": [ + 3891 + ] + }, + { + "teal": 3880, + "source": 945, + "pc": [ + 3892 + ] + }, + { + "teal": 3881, + "source": 945, + "pc": [ + 3893 + ] + }, + { + "teal": 3882, + "source": 945, + "pc": [ + 3894, + 3895 + ] + }, + { + "teal": 3885, + "source": 943, + "pc": [ + 3896 + ] + }, + { + "teal": 3886, + "source": 943, + "pc": [ + 3897, + 3898 + ] + }, + { + "teal": 3889, + "source": 943, + "pc": [ + 3899 + ] + }, + { + "teal": 3890, + "source": 943, + "pc": [ + 3900, + 3901 + ] + }, + { + "teal": 3891, + "source": 943, + "pc": [ + 3902 + ] + }, + { + "teal": 3892, + "source": 943, + "pc": [ + 3903 + ] + }, + { + "teal": 3893, + "source": 943, + "pc": [ + 3904, + 3905 + ] + }, + { + "teal": 3894, + "source": 943, + "pc": [ + 3906, + 3907, + 3908 + ] + }, + { + "teal": 3897, + "source": 931, + "pc": [ + 3909, + 3910 + ] + }, + { + "teal": 3898, + "source": 931, + "pc": [ + 3911 + ] + }, + { + "teal": 3902, + "source": 949, + "pc": [ + 3912, + 3913, + 3914 + ] + }, + { + "teal": 3905, + "source": 949, + "pc": [ + 3915, + 3916 + ] + }, + { + "teal": 3912, + "source": 950, + "pc": [ + 3917 + ] + }, + { + "teal": 3913, + "source": 950, + "pc": [ + 3918 + ] + }, + { + "teal": 3914, + "source": 950, + "pc": [ + 3919, + 3920 + ] + }, + { + "teal": 3915, + "source": 950, + "pc": [ + 3921, + 3922, + 3923, + 3924, + 3925, + 3926 + ] + }, + { + "teal": 3916, + "source": 950, + "pc": [ + 3927, + 3928 + ] + }, + { + "teal": 3920, + "source": 951, + "pc": [ + 3929 + ] + }, + { + "teal": 3921, + "source": 951, + "pc": [ + 3930 + ] + }, + { + "teal": 3922, + "source": 951, + "pc": [ + 3931, + 3932 + ] + }, + { + "teal": 3926, + "source": 952, + "pc": [ + 3933 + ] + }, + { + "teal": 3927, + "source": 952, + "pc": [ + 3934 + ] + }, + { + "teal": 3928, + "source": 952, + "pc": [ + 3935 + ] + }, + { + "teal": 3929, + "source": 952, + "pc": [ + 3936, + 3937 + ] + }, + { + "teal": 3932, + "source": 950, + "pc": [ + 3938 + ] + }, + { + "teal": 3933, + "source": 950, + "pc": [ + 3939, + 3940 + ] + }, + { + "teal": 3936, + "source": 950, + "pc": [ + 3941 + ] + }, + { + "teal": 3937, + "source": 950, + "pc": [ + 3942, + 3943 + ] + }, + { + "teal": 3938, + "source": 950, + "pc": [ + 3944 + ] + }, + { + "teal": 3939, + "source": 950, + "pc": [ + 3945 + ] + }, + { + "teal": 3940, + "source": 950, + "pc": [ + 3946, + 3947 + ] + }, + { + "teal": 3941, + "source": 950, + "pc": [ + 3948, + 3949, + 3950 + ] + }, + { + "teal": 3942, + "source": 950, + "pc": [ + 3951, + 3952 + ] + }, + { + "teal": 3946, + "source": 954, + "pc": [ + 3953, + 3954 + ] + }, + { + "teal": 3947, + "source": 954, + "pc": [ + 3955, + 3956 + ] + }, + { + "teal": 3948, + "source": 954, + "pc": [ + 3957, + 3958, + 3959 + ] + }, + { + "teal": 3949, + "source": 954, + "pc": [ + 3960 + ] + }, + { + "teal": 3950, + "source": 954, + "pc": [ + 3961 + ] + }, + { + "teal": 3951, + "source": 954, + "pc": [ + 3962, + 3963, + 3964 + ] + }, + { + "teal": 3952, + "source": 954, + "pc": [ + 3965, + 3966 + ] + }, + { + "teal": 3953, + "source": 954, + "pc": [ + 3967, + 3968 + ] + }, + { + "teal": 3954, + "source": 954, + "pc": [ + 3969, + 3970, + 3971 + ] + }, + { + "teal": 3955, + "source": 954, + "pc": [ + 3972 + ] + }, + { + "teal": 3956, + "source": 954, + "pc": [ + 3973 + ] + }, + { + "teal": 3960, + "source": 949, + "pc": [ + 3974, + 3975 + ] + }, + { + "teal": 3961, + "source": 949, + "pc": [ + 3976 + ] + }, + { + "teal": 3965, + "source": 957, + "pc": [ + 3977, + 3978, + 3979 + ] + }, + { + "teal": 3969, + "source": 958, + "pc": [ + 3980, + 3981, + 3982, + 3983, + 3984, + 3985, + 3986, + 3987, + 3988, + 3989, + 3990, + 3991, + 3992, + 3993, + 3994, + 3995, + 3996, + 3997, + 3998, + 3999, + 4000, + 4001, + 4002, + 4003, + 4004, + 4005, + 4006, + 4007, + 4008, + 4009, + 4010, + 4011, + 4012, + 4013 + ] + }, + { + "teal": 3970, + "source": 957, + "pc": [ + 4014 + ] + }, + { + "teal": 3977, + "source": 967, + "pc": [ + 4015, + 4016, + 4017 + ] + }, + { + "teal": 3980, + "source": 967, + "pc": [ + 4018, + 4019 + ] + }, + { + "teal": 3984, + "source": 968, + "pc": [ + 4020, + 4021, + 4022 + ] + }, + { + "teal": 3985, + "source": 968, + "pc": [ + 4023, + 4024 + ] + }, + { + "teal": 3989, + "source": 970, + "pc": [ + 4025, + 4026 + ] + }, + { + "teal": 3990, + "source": 970, + "pc": [ + 4027, + 4028 + ] + }, + { + "teal": 3991, + "source": 970, + "pc": [ + 4029 + ] + }, + { + "teal": 3992, + "source": 970, + "pc": [ + 4030 + ] + }, + { + "teal": 3993, + "source": 970, + "pc": [ + 4031, + 4032 + ] + }, + { + "teal": 3994, + "source": 970, + "pc": [ + 4033 + ] + }, + { + "teal": 3995, + "source": 970, + "pc": [ + 4034 + ] + }, + { + "teal": 3996, + "source": 970, + "pc": [ + 4035 + ] + }, + { + "teal": 3997, + "source": 970, + "pc": [ + 4036 + ] + }, + { + "teal": 3998, + "source": 970, + "pc": [ + 4037 + ] + }, + { + "teal": 4001, + "source": 970, + "errorMessage": "wideRatio failed", + "pc": [ + 4038 + ] + }, + { + "teal": 4004, + "source": 967, + "pc": [ + 4039, + 4040 + ] + }, + { + "teal": 4005, + "source": 967, + "pc": [ + 4041 + ] + }, + { + "teal": 4009, + "source": 973, + "pc": [ + 4042, + 4043, + 4044 + ] + }, + { + "teal": 4012, + "source": 973, + "pc": [ + 4045, + 4046 + ] + }, + { + "teal": 4016, + "source": 977, + "pc": [ + 4047 + ] + }, + { + "teal": 4017, + "source": 977, + "pc": [ + 4048, + 4049 + ] + }, + { + "teal": 4022, + "source": 978, + "pc": [ + 4050, + 4051 + ] + }, + { + "teal": 4023, + "source": 978, + "pc": [ + 4052 + ] + }, + { + "teal": 4024, + "source": 978, + "pc": [ + 4053, + 4054, + 4055 + ] + }, + { + "teal": 4029, + "source": 981, + "pc": [ + 4056, + 4057, + 4058, + 4059 + ] + }, + { + "teal": 4030, + "source": 981, + "pc": [ + 4060, + 4061, + 4062 + ] + }, + { + "teal": 4035, + "source": 983, + "pc": [ + 4063 + ] + }, + { + "teal": 4039, + "source": 973, + "pc": [ + 4064, + 4065 + ] + }, + { + "teal": 4040, + "source": 973, + "pc": [ + 4066 + ] + }, + { + "teal": 4044, + "source": 986, + "pc": [ + 4067, + 4068, + 4069 + ] + }, + { + "teal": 4048, + "source": 989, + "pc": [ + 4070, + 4071, + 4072, + 4073, + 4074, + 4075, + 4076, + 4077, + 4078 + ] + }, + { + "teal": 4049, + "source": 986, + "pc": [ + 4079 + ] + }, + { + "teal": 4055, + "source": 995, + "pc": [ + 4080, + 4081, + 4082 + ] + }, + { + "teal": 4058, + "source": 995, + "pc": [ + 4083, + 4084 + ] + }, + { + "teal": 4059, + "source": 995, + "pc": [ + 4085, + 4086 + ] + }, + { + "teal": 4063, + "source": 996, + "pc": [ + 4087, + 4088 + ] + }, + { + "teal": 4064, + "source": 996, + "pc": [ + 4089 + ] + }, + { + "teal": 4065, + "source": 996, + "pc": [ + 4090 + ] + }, + { + "teal": 4066, + "source": 996, + "pc": [ + 4091, + 4092 + ] + }, + { + "teal": 4071, + "source": 997, + "pc": [ + 4093, + 4094 + ] + }, + { + "teal": 4072, + "source": 997, + "pc": [ + 4095, + 4096 + ] + }, + { + "teal": 4073, + "source": 997, + "pc": [ + 4097 + ] + }, + { + "teal": 4074, + "source": 997, + "pc": [ + 4098, + 4099 + ] + }, + { + "teal": 4075, + "source": 997, + "pc": [ + 4100 + ] + }, + { + "teal": 4076, + "source": 997, + "pc": [ + 4101 + ] + }, + { + "teal": 4077, + "source": 997, + "pc": [ + 4102 + ] + }, + { + "teal": 4078, + "source": 997, + "pc": [ + 4103 + ] + }, + { + "teal": 4081, + "source": 997, + "errorMessage": "currentBinSize as uint64 overflowed 64 bits", + "pc": [ + 4104 + ] + }, + { + "teal": 4082, + "source": 997, + "pc": [ + 4105, + 4106, + 4107, + 4108, + 4109, + 4110, + 4111, + 4112, + 4113, + 4114 + ] + }, + { + "teal": 4083, + "source": 997, + "pc": [ + 4115 + ] + }, + { + "teal": 4084, + "source": 997, + "pc": [ + 4116 + ] + }, + { + "teal": 4085, + "source": 997, + "pc": [ + 4117 + ] + }, + { + "teal": 4086, + "source": 997, + "pc": [ + 4118 + ] + }, + { + "teal": 4087, + "source": 997, + "pc": [ + 4119, + 4120 + ] + }, + { + "teal": 4088, + "source": 997, + "pc": [ + 4121 + ] + }, + { + "teal": 4089, + "source": 997, + "pc": [ + 4122 + ] + }, + { + "teal": 4090, + "source": 997, + "pc": [ + 4123 + ] + }, + { + "teal": 4091, + "source": 997, + "pc": [ + 4124 + ] + }, + { + "teal": 4092, + "source": 997, + "pc": [ + 4125 + ] + }, + { + "teal": 4093, + "source": 997, + "pc": [ + 4126 + ] + }, + { + "teal": 4094, + "source": 997, + "pc": [ + 4127, + 4128, + 4129 + ] + }, + { + "teal": 4100, + "source": 998, + "pc": [ + 4130, + 4131 + ] + }, + { + "teal": 4101, + "source": 998, + "pc": [ + 4132, + 4133 + ] + }, + { + "teal": 4102, + "source": 998, + "pc": [ + 4134 + ] + }, + { + "teal": 4103, + "source": 998, + "pc": [ + 4135, + 4136, + 4137 + ] + }, + { + "teal": 4108, + "source": 999, + "pc": [ + 4138 + ] + }, + { + "teal": 4109, + "source": 999, + "pc": [ + 4139 + ] + }, + { + "teal": 4110, + "source": 999, + "pc": [ + 4140, + 4141 + ] + }, + { + "teal": 4111, + "source": 999, + "pc": [ + 4142 + ] + }, + { + "teal": 4112, + "source": 999, + "pc": [ + 4143, + 4144 + ] + }, + { + "teal": 4113, + "source": 999, + "pc": [ + 4145, + 4146 + ] + }, + { + "teal": 4114, + "source": 999, + "pc": [ + 4147 + ] + }, + { + "teal": 4115, + "source": 999, + "pc": [ + 4148, + 4149 + ] + }, + { + "teal": 4116, + "source": 999, + "pc": [ + 4150, + 4151 + ] + }, + { + "teal": 4117, + "source": 999, + "pc": [ + 4152, + 4153 + ] + }, + { + "teal": 4118, + "source": 999, + "pc": [ + 4154, + 4155 + ] + }, + { + "teal": 4119, + "source": 999, + "pc": [ + 4156 + ] + }, + { + "teal": 4124, + "source": 1001, + "pc": [ + 4157, + 4158 + ] + }, + { + "teal": 4125, + "source": 1001, + "pc": [ + 4159, + 4160, + 4161, + 4162, + 4163, + 4164, + 4165, + 4166, + 4167, + 4168, + 4169, + 4170, + 4171, + 4172, + 4173, + 4174, + 4175, + 4176 + ] + }, + { + "teal": 4126, + "source": 1001, + "pc": [ + 4177 + ] + }, + { + "teal": 4127, + "source": 1001, + "pc": [ + 4178 + ] + }, + { + "teal": 4128, + "source": 1001, + "pc": [ + 4179 + ] + }, + { + "teal": 4129, + "source": 1001, + "pc": [ + 4180, + 4181 + ] + }, + { + "teal": 4130, + "source": 1001, + "pc": [ + 4182 + ] + }, + { + "teal": 4133, + "source": 1001, + "errorMessage": "currentBinSize * (365 as uint128) overflowed 128 bits", + "pc": [ + 4183 + ] + }, + { + "teal": 4134, + "source": 1001, + "pc": [ + 4184, + 4185 + ] + }, + { + "teal": 4135, + "source": 1001, + "pc": [ + 4186 + ] + }, + { + "teal": 4136, + "source": 1001, + "pc": [ + 4187 + ] + }, + { + "teal": 4137, + "source": 1001, + "pc": [ + 4188 + ] + }, + { + "teal": 4138, + "source": 1001, + "pc": [ + 4189 + ] + }, + { + "teal": 4139, + "source": 1001, + "pc": [ + 4190, + 4191 + ] + }, + { + "teal": 4140, + "source": 1001, + "pc": [ + 4192 + ] + }, + { + "teal": 4141, + "source": 1001, + "pc": [ + 4193 + ] + }, + { + "teal": 4142, + "source": 1001, + "pc": [ + 4194 + ] + }, + { + "teal": 4143, + "source": 1001, + "pc": [ + 4195, + 4196 + ] + }, + { + "teal": 4147, + "source": 1002, + "pc": [ + 4197, + 4198 + ] + }, + { + "teal": 4148, + "source": 1002, + "pc": [ + 4199 + ] + }, + { + "teal": 4149, + "source": 1002, + "pc": [ + 4200, + 4201 + ] + }, + { + "teal": 4150, + "source": 1002, + "pc": [ + 4202 + ] + }, + { + "teal": 4151, + "source": 1002, + "pc": [ + 4203 + ] + }, + { + "teal": 4152, + "source": 1002, + "pc": [ + 4204 + ] + }, + { + "teal": 4153, + "source": 1002, + "pc": [ + 4205, + 4206 + ] + }, + { + "teal": 4154, + "source": 1002, + "pc": [ + 4207 + ] + }, + { + "teal": 4157, + "source": 1002, + "errorMessage": "this.stakeAccumulator.value / currentBinSize overflowed 128 bits", + "pc": [ + 4208 + ] + }, + { + "teal": 4158, + "source": 1002, + "pc": [ + 4209, + 4210 + ] + }, + { + "teal": 4159, + "source": 1002, + "pc": [ + 4211 + ] + }, + { + "teal": 4160, + "source": 1002, + "pc": [ + 4212 + ] + }, + { + "teal": 4161, + "source": 1002, + "pc": [ + 4213 + ] + }, + { + "teal": 4162, + "source": 1002, + "pc": [ + 4214 + ] + }, + { + "teal": 4163, + "source": 1002, + "pc": [ + 4215, + 4216 + ] + }, + { + "teal": 4164, + "source": 1002, + "pc": [ + 4217 + ] + }, + { + "teal": 4165, + "source": 1002, + "pc": [ + 4218 + ] + }, + { + "teal": 4166, + "source": 1002, + "pc": [ + 4219 + ] + }, + { + "teal": 4167, + "source": 1002, + "pc": [ + 4220, + 4221 + ] + }, + { + "teal": 4172, + "source": 1003, + "pc": [ + 4222, + 4223 + ] + }, + { + "teal": 4173, + "source": 1003, + "pc": [ + 4224, + 4225 + ] + }, + { + "teal": 4174, + "source": 1003, + "pc": [ + 4226 + ] + }, + { + "teal": 4175, + "source": 1003, + "pc": [ + 4227, + 4228, + 4229 + ] + }, + { + "teal": 4182, + "source": 1008, + "pc": [ + 4230, + 4231 + ] + }, + { + "teal": 4183, + "source": 1008, + "pc": [ + 4232 + ] + }, + { + "teal": 4184, + "source": 1008, + "pc": [ + 4233 + ] + }, + { + "teal": 4185, + "source": 1008, + "pc": [ + 4234, + 4235, + 4236, + 4237, + 4238, + 4239, + 4240, + 4241, + 4242, + 4243, + 4244, + 4245, + 4246, + 4247, + 4248, + 4249, + 4250, + 4251 + ] + }, + { + "teal": 4186, + "source": 1008, + "pc": [ + 4252 + ] + }, + { + "teal": 4187, + "source": 1008, + "pc": [ + 4253, + 4254 + ] + }, + { + "teal": 4188, + "source": 1008, + "pc": [ + 4255 + ] + }, + { + "teal": 4189, + "source": 1009, + "pc": [ + 4256, + 4257 + ] + }, + { + "teal": 4190, + "source": 1009, + "pc": [ + 4258, + 4259 + ] + }, + { + "teal": 4191, + "source": 1009, + "pc": [ + 4260 + ] + }, + { + "teal": 4192, + "source": 1008, + "pc": [ + 4261 + ] + }, + { + "teal": 4193, + "source": 1008, + "pc": [ + 4262 + ] + }, + { + "teal": 4194, + "source": 1008, + "pc": [ + 4263 + ] + }, + { + "teal": 4195, + "source": 1008, + "pc": [ + 4264, + 4265 + ] + }, + { + "teal": 4196, + "source": 1008, + "pc": [ + 4266 + ] + }, + { + "teal": 4199, + "source": 1008, + "errorMessage": "(((this.rewardAccumulator.value as uint128) * (10000 as uint128)) / avgStake) *\\n (approxRoundsPerYear / currentBinSize) overflowed 128 bits", + "pc": [ + 4267 + ] + }, + { + "teal": 4200, + "source": 1008, + "pc": [ + 4268, + 4269 + ] + }, + { + "teal": 4201, + "source": 1008, + "pc": [ + 4270 + ] + }, + { + "teal": 4202, + "source": 1008, + "pc": [ + 4271 + ] + }, + { + "teal": 4203, + "source": 1008, + "pc": [ + 4272 + ] + }, + { + "teal": 4204, + "source": 1008, + "pc": [ + 4273 + ] + }, + { + "teal": 4205, + "source": 1008, + "pc": [ + 4274, + 4275 + ] + }, + { + "teal": 4206, + "source": 1008, + "pc": [ + 4276 + ] + }, + { + "teal": 4207, + "source": 1008, + "pc": [ + 4277 + ] + }, + { + "teal": 4208, + "source": 1008, + "pc": [ + 4278 + ] + }, + { + "teal": 4209, + "source": 1007, + "pc": [ + 4279, + 4280 + ] + }, + { + "teal": 4213, + "source": 1011, + "pc": [ + 4281, + 4282, + 4283, + 4284, + 4285, + 4286, + 4287, + 4288, + 4289, + 4290, + 4291, + 4292, + 4293, + 4294, + 4295, + 4296, + 4297, + 4298 + ] + }, + { + "teal": 4214, + "source": 1011, + "pc": [ + 4299, + 4300 + ] + }, + { + "teal": 4219, + "source": 1013, + "pc": [ + 4301, + 4302 + ] + }, + { + "teal": 4220, + "source": 1013, + "pc": [ + 4303, + 4304, + 4305, + 4306, + 4307, + 4308, + 4309, + 4310, + 4311, + 4312, + 4313, + 4314, + 4315, + 4316, + 4317, + 4318, + 4319, + 4320 + ] + }, + { + "teal": 4221, + "source": 1013, + "pc": [ + 4321 + ] + }, + { + "teal": 4222, + "source": 1013, + "pc": [ + 4322, + 4323, + 4324 + ] + }, + { + "teal": 4227, + "source": 1014, + "pc": [ + 4325, + 4326, + 4327, + 4328, + 4329, + 4330, + 4331, + 4332, + 4333, + 4334, + 4335, + 4336, + 4337, + 4338, + 4339, + 4340, + 4341, + 4342 + ] + }, + { + "teal": 4228, + "source": 1014, + "pc": [ + 4343, + 4344 + ] + }, + { + "teal": 4235, + "source": 1016, + "pc": [ + 4345, + 4346 + ] + }, + { + "teal": 4236, + "source": 1016, + "pc": [ + 4347 + ] + }, + { + "teal": 4237, + "source": 1017, + "pc": [ + 4348 + ] + }, + { + "teal": 4238, + "source": 1017, + "pc": [ + 4349, + 4350 + ] + }, + { + "teal": 4239, + "source": 1017, + "pc": [ + 4351, + 4352 + ] + }, + { + "teal": 4240, + "source": 1017, + "pc": [ + 4353 + ] + }, + { + "teal": 4241, + "source": 1017, + "pc": [ + 4354 + ] + }, + { + "teal": 4242, + "source": 1017, + "pc": [ + 4355, + 4356 + ] + }, + { + "teal": 4243, + "source": 1017, + "pc": [ + 4357 + ] + }, + { + "teal": 4244, + "source": 1018, + "pc": [ + 4358, + 4359 + ] + }, + { + "teal": 4245, + "source": 1018, + "pc": [ + 4360, + 4361 + ] + }, + { + "teal": 4246, + "source": 1018, + "pc": [ + 4362 + ] + }, + { + "teal": 4247, + "source": 1018, + "pc": [ + 4363, + 4364 + ] + }, + { + "teal": 4248, + "source": 1018, + "pc": [ + 4365 + ] + }, + { + "teal": 4249, + "source": 1017, + "pc": [ + 4366 + ] + }, + { + "teal": 4250, + "source": 1017, + "pc": [ + 4367 + ] + }, + { + "teal": 4251, + "source": 1017, + "pc": [ + 4368 + ] + }, + { + "teal": 4252, + "source": 1017, + "pc": [ + 4369, + 4370 + ] + }, + { + "teal": 4253, + "source": 1017, + "pc": [ + 4371 + ] + }, + { + "teal": 4256, + "source": 1017, + "errorMessage": "(this.weightedMovingAverage.value * ((100 as uint128) - alpha)) / (100 as uint128) +\\n (apr * alpha) / (100 as uint128) overflowed 128 bits", + "pc": [ + 4372 + ] + }, + { + "teal": 4257, + "source": 1017, + "pc": [ + 4373, + 4374 + ] + }, + { + "teal": 4258, + "source": 1017, + "pc": [ + 4375 + ] + }, + { + "teal": 4259, + "source": 1017, + "pc": [ + 4376 + ] + }, + { + "teal": 4260, + "source": 1017, + "pc": [ + 4377 + ] + }, + { + "teal": 4261, + "source": 1017, + "pc": [ + 4378 + ] + }, + { + "teal": 4262, + "source": 1017, + "pc": [ + 4379, + 4380 + ] + }, + { + "teal": 4263, + "source": 1017, + "pc": [ + 4381 + ] + }, + { + "teal": 4264, + "source": 1017, + "pc": [ + 4382 + ] + }, + { + "teal": 4265, + "source": 1017, + "pc": [ + 4383 + ] + }, + { + "teal": 4266, + "source": 1016, + "pc": [ + 4384 + ] + }, + { + "teal": 4271, + "source": 1022, + "pc": [ + 4385, + 4386, + 4387 + ] + }, + { + "teal": 4275, + "source": 1023, + "pc": [ + 4388, + 4389 + ] + }, + { + "teal": 4276, + "source": 1023, + "pc": [ + 4390, + 4391 + ] + }, + { + "teal": 4277, + "source": 1023, + "pc": [ + 4392 + ] + }, + { + "teal": 4278, + "source": 1023, + "pc": [ + 4393 + ] + }, + { + "teal": 4279, + "source": 1023, + "pc": [ + 4394, + 4395 + ] + }, + { + "teal": 4280, + "source": 1023, + "pc": [ + 4396 + ] + }, + { + "teal": 4281, + "source": 1023, + "pc": [ + 4397 + ] + }, + { + "teal": 4282, + "source": 1023, + "pc": [ + 4398 + ] + }, + { + "teal": 4283, + "source": 1023, + "pc": [ + 4399 + ] + }, + { + "teal": 4284, + "source": 1023, + "pc": [ + 4400 + ] + }, + { + "teal": 4285, + "source": 1023, + "pc": [ + 4401, + 4402 + ] + }, + { + "teal": 4286, + "source": 1023, + "pc": [ + 4403 + ] + }, + { + "teal": 4289, + "source": 1023, + "errorMessage": "(this.totalAlgoStaked.value as uint128) * (this.roundsPerDay.value as uint128) overflowed 128 bits", + "pc": [ + 4404 + ] + }, + { + "teal": 4290, + "source": 1023, + "pc": [ + 4405, + 4406 + ] + }, + { + "teal": 4291, + "source": 1023, + "pc": [ + 4407 + ] + }, + { + "teal": 4292, + "source": 1023, + "pc": [ + 4408 + ] + }, + { + "teal": 4293, + "source": 1023, + "pc": [ + 4409 + ] + }, + { + "teal": 4294, + "source": 1023, + "pc": [ + 4410 + ] + }, + { + "teal": 4295, + "source": 1023, + "pc": [ + 4411, + 4412 + ] + }, + { + "teal": 4296, + "source": 1023, + "pc": [ + 4413 + ] + }, + { + "teal": 4297, + "source": 1023, + "pc": [ + 4414 + ] + }, + { + "teal": 4298, + "source": 1023, + "pc": [ + 4415 + ] + }, + { + "teal": 4299, + "source": 1023, + "pc": [ + 4416 + ] + }, + { + "teal": 4303, + "source": 1024, + "pc": [ + 4417, + 4418 + ] + }, + { + "teal": 4304, + "source": 1024, + "pc": [ + 4419 + ] + }, + { + "teal": 4305, + "source": 1024, + "pc": [ + 4420 + ] + }, + { + "teal": 4309, + "source": 1025, + "pc": [ + 4421, + 4422 + ] + }, + { + "teal": 4310, + "source": 1025, + "pc": [ + 4423, + 4424 + ] + }, + { + "teal": 4311, + "source": 1025, + "pc": [ + 4425, + 4426 + ] + }, + { + "teal": 4312, + "source": 1025, + "pc": [ + 4427, + 4428 + ] + }, + { + "teal": 4313, + "source": 1025, + "pc": [ + 4429 + ] + }, + { + "teal": 4314, + "source": 1025, + "pc": [ + 4430 + ] + }, + { + "teal": 4315, + "source": 1025, + "pc": [ + 4431 + ] + }, + { + "teal": 4316, + "source": 1025, + "pc": [ + 4432 + ] + }, + { + "teal": 4319, + "source": 995, + "pc": [ + 4433 + ] + }, + { + "teal": 4323, + "source": 1029, + "pc": [ + 4434, + 4435, + 4436 + ] + }, + { + "teal": 4327, + "source": 1030, + "pc": [ + 4437, + 4438 + ] + }, + { + "teal": 4328, + "source": 1030, + "pc": [ + 4439, + 4440, + 4441, + 4442 + ] + }, + { + "teal": 4329, + "source": 1030, + "pc": [ + 4443 + ] + }, + { + "teal": 4330, + "source": 1029, + "pc": [ + 4444 + ] + }, + { + "teal": 4333, + "source": 36, + "pc": [ + 4445, + 4446, + 4447, + 4448, + 4449, + 4450 + ] + }, + { + "teal": 4334, + "source": 36, + "pc": [ + 4451, + 4452, + 4453 + ] + }, + { + "teal": 4335, + "source": 36, + "pc": [ + 4454, + 4455, + 4456, + 4457 + ] + }, + { + "teal": 4338, + "source": 36, + "errorMessage": "this contract does not implement the given ABI method for create NoOp", + "pc": [ + 4458 + ] + }, + { + "teal": 4341, + "source": 36, + "pc": [ + 4459, + 4460, + 4461, + 4462, + 4463, + 4464 + ] + }, + { + "teal": 4342, + "source": 36, + "pc": [ + 4465, + 4466, + 4467, + 4468, + 4469, + 4470 + ] + }, + { + "teal": 4343, + "source": 36, + "pc": [ + 4471, + 4472, + 4473, + 4474, + 4475, + 4476 + ] + }, + { + "teal": 4344, + "source": 36, + "pc": [ + 4477, + 4478, + 4479, + 4480, + 4481, + 4482 + ] + }, + { + "teal": 4345, + "source": 36, + "pc": [ + 4483, + 4484, + 4485, + 4486, + 4487, + 4488 + ] + }, + { + "teal": 4346, + "source": 36, + "pc": [ + 4489, + 4490, + 4491, + 4492, + 4493, + 4494 + ] + }, + { + "teal": 4347, + "source": 36, + "pc": [ + 4495, + 4496, + 4497, + 4498, + 4499, + 4500 + ] + }, + { + "teal": 4348, + "source": 36, + "pc": [ + 4501, + 4502, + 4503, + 4504, + 4505, + 4506 + ] + }, + { + "teal": 4349, + "source": 36, + "pc": [ + 4507, + 4508, + 4509, + 4510, + 4511, + 4512 + ] + }, + { + "teal": 4350, + "source": 36, + "pc": [ + 4513, + 4514, + 4515, + 4516, + 4517, + 4518 + ] + }, + { + "teal": 4351, + "source": 36, + "pc": [ + 4519, + 4520, + 4521, + 4522, + 4523, + 4524 + ] + }, + { + "teal": 4352, + "source": 36, + "pc": [ + 4525, + 4526, + 4527, + 4528, + 4529, + 4530 + ] + }, + { + "teal": 4353, + "source": 36, + "pc": [ + 4531, + 4532 + ] + }, + { + "teal": 4354, + "source": 36, + "pc": [ + 4533, + 4534, + 4535 + ] + }, + { + "teal": 4355, + "source": 36, + "pc": [ + 4536, + 4537, + 4538, + 4539, + 4540, + 4541, + 4542, + 4543, + 4544, + 4545, + 4546, + 4547, + 4548, + 4549, + 4550, + 4551, + 4552, + 4553, + 4554, + 4555, + 4556, + 4557, + 4558, + 4559, + 4560, + 4561, + 4562, + 4563 + ] + }, + { + "teal": 4358, + "source": 36, + "errorMessage": "this contract does not implement the given ABI method for call NoOp", + "pc": [ + 4564 + ] + }, + { + "teal": 4361, + "source": 36, + "pc": [ + 4565, + 4566, + 4567, + 4568, + 4569, + 4570 + ] + }, + { + "teal": 4362, + "source": 36, + "pc": [ + 4571, + 4572, + 4573 + ] + }, + { + "teal": 4363, + "source": 36, + "pc": [ + 4574, + 4575, + 4576, + 4577 + ] + }, + { + "teal": 4366, + "source": 36, + "errorMessage": "this contract does not implement the given ABI method for call UpdateApplication", + "pc": [ + 4578 + ] + } +] \ No newline at end of file diff --git a/examples/reti/ValidatorRegistry.approval.teal b/examples/reti/ValidatorRegistry.approval.teal new file mode 100644 index 000000000..48388a366 --- /dev/null +++ b/examples/reti/ValidatorRegistry.approval.teal @@ -0,0 +1,6162 @@ +#pragma version 10 + +// This TEAL was generated by TEALScript v0.96.0 +// https://github.com/algorandfoundation/TEALScript + +// This contract is compliant with and/or implements the following ARCs: [ ARC4 ] + +// The following ten lines of TEAL handle initial program flow +// This pattern is used to make it easy for anyone to parse the start of the program and determine if a specific action is allowed +// Here, action refers to the OnComplete in combination with whether the app is being created or called +// Every possible action for this contract is represented in the switch statement +// If the action is not implemented in the contract, its respective branch will be "*NOT_IMPLEMENTED" which just contains "err" +txn ApplicationID +! +int 6 +* +txn OnCompletion ++ +switch *call_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *call_UpdateApplication *NOT_IMPLEMENTED *create_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED + +*NOT_IMPLEMENTED: + // The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID? + err + +// updateApplication()void +*abi_route_updateApplication: + // execute updateApplication()void + callsub updateApplication + int 1 + return + +// updateApplication(): void +updateApplication: + proto 0 0 + + // contracts/validatorRegistry.algo.ts:199 + // assert(this.txn.sender === Address.fromAddress('LZ4V2IRVLCXFJK4REJV4TAGEKEYTA2GMR6TC2344OB3L3AF3MWXZ6ZAFIQ')) + txn Sender + addr LZ4V2IRVLCXFJK4REJV4TAGEKEYTA2GMR6TC2344OB3L3AF3MWXZ6ZAFIQ + == + assert + + // contracts/validatorRegistry.algo.ts:201 + // this.stakingPoolApprovalProgram.delete() + byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" + box_del + + // contracts/validatorRegistry.algo.ts:202 + // this.stakingPoolInitialized.value = false + byte 0x696e6974 // "init" + int 0 + byte 0x00 + int 0 + uncover 2 + setbit + app_global_put + retsub + +// createApplication()void +*abi_route_createApplication: + // execute createApplication()void + callsub createApplication + int 1 + return + +// createApplication(): void +createApplication: + proto 0 0 + + // contracts/validatorRegistry.algo.ts:206 + // this.stakingPoolInitialized.value = false + byte 0x696e6974 // "init" + int 0 + byte 0x00 + int 0 + uncover 2 + setbit + app_global_put + + // contracts/validatorRegistry.algo.ts:207 + // this.numValidators.value = 0 + byte 0x6e756d56 // "numV" + int 0 + app_global_put + + // contracts/validatorRegistry.algo.ts:208 + // this.numStakers.value = 0 + byte 0x6e756d5374616b657273 // "numStakers" + int 0 + app_global_put + + // contracts/validatorRegistry.algo.ts:209 + // this.totalAlgoStaked.value = 0 + byte 0x7374616b6564 // "staked" + int 0 + app_global_put + retsub + +// initStakingContract(uint64)void +*abi_route_initStakingContract: + // approvalProgramSize: uint64 + txna ApplicationArgs 1 + btoi + + // execute initStakingContract(uint64)void + callsub initStakingContract + int 1 + return + +// initStakingContract(approvalProgramSize: uint64): void +initStakingContract: + proto 1 0 + + // contracts/validatorRegistry.algo.ts:214 + // this.stakingPoolApprovalProgram.create(approvalProgramSize) + byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" + frame_dig -1 // approvalProgramSize: uint64 + box_create + pop + retsub + +// loadStakingContractData(uint64,byte[])void +*abi_route_loadStakingContractData: + // data: byte[] + txna ApplicationArgs 2 + extract 2 0 + + // offset: uint64 + txna ApplicationArgs 1 + btoi + + // execute loadStakingContractData(uint64,byte[])void + callsub loadStakingContractData + int 1 + return + +// loadStakingContractData(offset: uint64, data: bytes): void +loadStakingContractData: + proto 2 0 + + // contracts/validatorRegistry.algo.ts:218 + // assert(!this.stakingPoolInitialized.value) + byte 0x696e6974 // "init" + app_global_get + int 0 + getbit + ! + assert + + // contracts/validatorRegistry.algo.ts:219 + // this.stakingPoolApprovalProgram.replace(offset, data) + byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" + frame_dig -1 // offset: uint64 + frame_dig -2 // data: bytes + box_replace + retsub + +// finalizeStakingContract()void +*abi_route_finalizeStakingContract: + // execute finalizeStakingContract()void + callsub finalizeStakingContract + int 1 + return + +// finalizeStakingContract(): void +finalizeStakingContract: + proto 0 0 + + // contracts/validatorRegistry.algo.ts:223 + // this.stakingPoolInitialized.value = true + byte 0x696e6974 // "init" + int 1 + byte 0x00 + int 0 + uncover 2 + setbit + app_global_put + retsub + +// gas()void +*abi_route_gas: + // execute gas()void + callsub gas + int 1 + return + +// gas(): void +// +// gas is a dummy no-op call that can be used to pool-up resource references and opcode cost +gas: + proto 0 0 + retsub + +// getMbrAmounts()(uint64,uint64,uint64,uint64) +*abi_route_getMbrAmounts: + // The ABI return prefix + byte 0x151f7c75 + + // execute getMbrAmounts()(uint64,uint64,uint64,uint64) + callsub getMbrAmounts + concat + log + int 1 + return + +// getMbrAmounts(): MbrAmounts +// +// Returns the MBR amounts needed for various actions: +// [ +// addValidatorMbr: uint64 - mbr needed to add a new validator - paid to validator contract +// addPoolMbr: uint64 - mbr needed to add a new pool - paid to validator +// poolInitMbr: uint64 - mbr needed to initStorage() of pool - paid to pool itself +// addStakerMbr: uint64 - mbr staker needs to add to first staking payment (stays w/ validator) +// ] +getMbrAmounts: + proto 0 1 + + // contracts/validatorRegistry.algo.ts:243 + // return { + // addValidatorMbr: this.costForBoxStorage(1 /* v prefix */ + len() + len()), + // addPoolMbr: this.minBalanceForAccount( + // 1, + // // we could calculate this directly by referencing the size of stakingPoolApprovalProgram but it would + // // mean our callers would have to reference the box AND buy up i/o - so just go max on extra pages + // 3, + // 0, + // 0, + // 0, + // StakingPool.schema.global.numUint, + // StakingPool.schema.global.numByteSlice, + // ), + // poolInitMbr: + // ALGORAND_ACCOUNT_MIN_BALANCE + + // this.costForBoxStorage(7 /* 'stakers' name */ + len() * MAX_STAKERS_PER_POOL), + // addStakerMbr: + // // how much to charge for first time a staker adds stake - since we add a tracking box per staker + // this.costForBoxStorage( + // 3 /* 'sps' prefix */ + len
() + len() * MAX_POOLS_PER_STAKER, + // ), // size of key + all values + // } + int 1101 + callsub costForBoxStorage + itob + int 3 + int 11 + int 0 + dupn 2 + int 3 + int 1 + callsub minBalanceForAccount + itob + concat + int 100000 + int 12807 + callsub costForBoxStorage + + + itob + concat + int 179 + callsub costForBoxStorage + itob + concat + retsub + +// getProtocolConstraints()(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64) +*abi_route_getProtocolConstraints: + // The ABI return prefix + byte 0x151f7c75 + + // execute getProtocolConstraints()(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64) + callsub getProtocolConstraints + concat + log + int 1 + return + +// getProtocolConstraints(): Constraints +// +// Returns the protocol constraints so that UIs can limit what users specify for validator configuration parameters. +getProtocolConstraints: + proto 0 1 + + // contracts/validatorRegistry.algo.ts:271 + // return { + // epochPayoutRoundsMin: MIN_EPOCH_LENGTH, + // epochPayoutRoundsMax: MAX_EPOCH_LENGTH, + // minPctToValidatorWFourDecimals: MIN_PCT_TO_VALIDATOR, + // maxPctToValidatorWFourDecimals: MAX_PCT_TO_VALIDATOR, + // minEntryStake: MIN_ALGO_STAKE_PER_POOL, + // maxAlgoPerPool: this.maxAlgoAllowedPerPool(), + // maxAlgoPerValidator: this.maxAllowedStake(), + // amtConsideredSaturated: this.algoSaturationLevel(), + // maxNodes: MAX_NODES, + // maxPoolsPerNode: MAX_POOLS_PER_NODE, + // maxStakersPerPool: MAX_STAKERS_PER_POOL, + // } + byte 0x000000000000000100000000000f4240000000000000000000000000000f424000000000000f4240 + callsub maxAlgoAllowedPerPool + itob + concat + callsub maxAllowedStake + itob + concat + callsub algoSaturationLevel + itob + concat + byte 0x0000000000000008 + concat + byte 0x0000000000000003 + concat + byte 0x00000000000000c8 + concat + retsub + +// getNumValidators()uint64 +*abi_route_getNumValidators: + // The ABI return prefix + byte 0x151f7c75 + + // execute getNumValidators()uint64 + callsub getNumValidators + itob + concat + log + int 1 + return + +// getNumValidators(): uint64 +// +// Returns the current number of validators +getNumValidators: + proto 0 1 + + // contracts/validatorRegistry.algo.ts:291 + // return this.numValidators.value + byte 0x6e756d56 // "numV" + app_global_get + retsub + +// getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) +*abi_route_getValidatorConfig: + // The ABI return prefix + byte 0x151f7c75 + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + callsub getValidatorConfig + concat + log + int 1 + return + +// getValidatorConfig(validatorId: ValidatorIdType): ValidatorConfig +getValidatorConfig: + proto 1 1 + + // contracts/validatorRegistry.algo.ts:296 + // return this.validatorList(validatorId).value.config + int 0 + int 242 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + retsub + +// getValidatorState(uint64)(uint16,uint64,uint64,uint64) +*abi_route_getValidatorState: + // The ABI return prefix + byte 0x151f7c75 + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute getValidatorState(uint64)(uint16,uint64,uint64,uint64) + callsub getValidatorState + concat + log + int 1 + return + +// getValidatorState(validatorId: ValidatorIdType): ValidatorCurState +getValidatorState: + proto 1 1 + + // contracts/validatorRegistry.algo.ts:301 + // return this.validatorList(validatorId).value.state + int 242 // headOffset + int 26 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + retsub + +// getValidatorOwnerAndManager(uint64)(address,address) +*abi_route_getValidatorOwnerAndManager: + // The ABI return prefix + byte 0x151f7c75 + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute getValidatorOwnerAndManager(uint64)(address,address) + callsub getValidatorOwnerAndManager + concat + log + int 1 + return + +// getValidatorOwnerAndManager(validatorId: ValidatorIdType): [Address, Address] +getValidatorOwnerAndManager: + proto 1 1 + + // contracts/validatorRegistry.algo.ts:306 + // return [ + // this.validatorList(validatorId).value.config.owner, + // this.validatorList(validatorId).value.config.manager, + // ] + int 8 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + int 40 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + concat + retsub + +// getPools(uint64)(uint64,uint16,uint64)[] +*abi_route_getPools: + // The ABI return prefix + byte 0x151f7c75 + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute getPools(uint64)(uint64,uint16,uint64)[] + callsub getPools + dup + len + int 18 + / + itob + extract 6 2 + swap + concat + concat + log + int 1 + return + +// getPools(validatorId: ValidatorIdType): PoolInfo[] +// +// Return list of all pools for this validator. +// @param {uint64} validatorId +// @return {PoolInfo[]} - array of pools +// Not callable from other contracts because >1K return but can be called w/ simulate which bumps log returns +getPools: + proto 1 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 2 + + // contracts/validatorRegistry.algo.ts:320 + // retData: PoolInfo[] = [] + byte 0x + frame_bury 0 // retData: PoolInfo[] + + // contracts/validatorRegistry.algo.ts:321 + // poolSet = clone(this.validatorList(validatorId).value.pools) + int 268 // headOffset + int 432 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + frame_bury 1 // poolSet: (uint64,uint16,uint64)[24] + + // contracts/validatorRegistry.algo.ts:322 + // for (let i = 0; i < poolSet.length; i += 1) + int 0 + frame_bury 2 // i: uint64 + +*for_0: + // contracts/validatorRegistry.algo.ts:322 + // i < poolSet.length + frame_dig 2 // i: uint64 + int 24 + < + bz *for_0_end + + // *if0_condition + // contracts/validatorRegistry.algo.ts:323 + // poolSet[i].poolAppId === 0 + frame_dig 1 // poolSet: (uint64,uint16,uint64)[24] + frame_dig 2 // i: uint64 + int 18 + * // acc * typeLength + int 0 + + + int 8 + extract3 + btoi + int 0 + == + bz *if0_end + + // *if0_consequent + b *for_0_end + +*if0_end: + // contracts/validatorRegistry.algo.ts:327 + // retData.push(poolSet[i]) + frame_dig 0 // retData: PoolInfo[] + frame_dig 1 // poolSet: (uint64,uint16,uint64)[24] + frame_dig 2 // i: uint64 + int 18 + * // acc * typeLength + int 18 + extract3 + concat + frame_bury 0 // retData: PoolInfo[] + +*for_0_continue: + // contracts/validatorRegistry.algo.ts:322 + // i += 1 + frame_dig 2 // i: uint64 + int 1 + + + frame_bury 2 // i: uint64 + b *for_0 + +*for_0_end: + // contracts/validatorRegistry.algo.ts:329 + // return retData + frame_dig 0 // retData: PoolInfo[] + + // set the subroutine return value + frame_bury 0 + + // pop all local variables from the stack + popn 2 + retsub + +// getPoolAppId(uint64,uint64)uint64 +*abi_route_getPoolAppId: + // The ABI return prefix + byte 0x151f7c75 + + // poolId: uint64 + txna ApplicationArgs 2 + btoi + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute getPoolAppId(uint64,uint64)uint64 + callsub getPoolAppId + itob + concat + log + int 1 + return + +// getPoolAppId(validatorId: uint64, poolId: uint64): uint64 +getPoolAppId: + proto 2 1 + + // contracts/validatorRegistry.algo.ts:337 + // assert( + // poolId !== 0 && poolId <= this.validatorList(validatorId).value.pools.length, + // 'pool id must be between 1 and number of pools for this validator', + // ) + frame_dig -2 // poolId: uint64 + int 0 + != + dup + bz *skip_and0 + frame_dig -2 // poolId: uint64 + int 24 + <= + && + +*skip_and0: + // pool id must be between 1 and number of pools for this validator + assert + + // contracts/validatorRegistry.algo.ts:341 + // return this.validatorList(validatorId).value.pools[poolId - 1].poolAppId + int 268 // headOffset + frame_dig -2 // poolId: uint64 + int 1 + - + int 18 + * // acc * typeLength + + + int 0 + + + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: uint64 + itob + concat + cover 2 + box_extract + btoi + retsub + +// getPoolInfo((uint64,uint64,uint64))(uint64,uint16,uint64) +*abi_route_getPoolInfo: + // The ABI return prefix + byte 0x151f7c75 + + // poolKey: (uint64,uint64,uint64) + txna ApplicationArgs 1 + dup + len + int 24 + == + + // argument 0 (poolKey) for getPoolInfo must be a (uint64,uint64,uint64) + assert + + // execute getPoolInfo((uint64,uint64,uint64))(uint64,uint16,uint64) + callsub getPoolInfo + concat + log + int 1 + return + +// getPoolInfo(poolKey: ValidatorPoolKey): PoolInfo +getPoolInfo: + proto 1 1 + + // contracts/validatorRegistry.algo.ts:346 + // return this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1] + int 268 // headOffset + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 18 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + retsub + +// getCurMaxStakePerPool(uint64)uint64 +*abi_route_getCurMaxStakePerPool: + // The ABI return prefix + byte 0x151f7c75 + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute getCurMaxStakePerPool(uint64)uint64 + callsub getCurMaxStakePerPool + itob + concat + log + int 1 + return + +// getCurMaxStakePerPool(validatorId: ValidatorIdType): uint64 +// +// Calculate the maximum stake per pool for a given validator. +// Normally this would be maxAlgoPerPool, but it should also never go above MaxAllowedStake / numPools so +// as pools are added the max allowed per pool can reduce. +// +// @param {ValidatorIdType} validatorId - The id of the validator. +getCurMaxStakePerPool: + proto 1 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 2 + + // contracts/validatorRegistry.algo.ts:357 + // numPools = this.validatorList(validatorId).value.state.numPools as uint64 + int 242 + int 2 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 0 // numPools: uint64 + + // contracts/validatorRegistry.algo.ts:358 + // hardMaxDividedBetweenPools = this.maxAllowedStake() / numPools + callsub maxAllowedStake + frame_dig 0 // numPools: uint64 + / + frame_bury 1 // hardMaxDividedBetweenPools: uint64 + + // contracts/validatorRegistry.algo.ts:359 + // maxPerPool: uint64 = this.validatorList(validatorId).value.config.maxAlgoPerPool + int 217 + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 2 // maxPerPool: uint64 + + // *if1_condition + // contracts/validatorRegistry.algo.ts:360 + // maxPerPool === 0 + frame_dig 2 // maxPerPool: uint64 + int 0 + == + bz *if1_end + + // *if1_consequent + // contracts/validatorRegistry.algo.ts:361 + // maxPerPool = this.maxAlgoAllowedPerPool() + callsub maxAlgoAllowedPerPool + frame_bury 2 // maxPerPool: uint64 + +*if1_end: + // *if2_condition + // contracts/validatorRegistry.algo.ts:363 + // hardMaxDividedBetweenPools < maxPerPool + frame_dig 1 // hardMaxDividedBetweenPools: uint64 + frame_dig 2 // maxPerPool: uint64 + < + bz *if2_end + + // *if2_consequent + // contracts/validatorRegistry.algo.ts:364 + // maxPerPool = hardMaxDividedBetweenPools + frame_dig 1 // hardMaxDividedBetweenPools: uint64 + frame_bury 2 // maxPerPool: uint64 + +*if2_end: + // contracts/validatorRegistry.algo.ts:366 + // return maxPerPool + frame_dig 2 // maxPerPool: uint64 + + // set the subroutine return value + frame_bury 0 + + // pop all local variables from the stack + popn 2 + retsub + +// doesStakerNeedToPayMBR(address)bool +*abi_route_doesStakerNeedToPayMBR: + // The ABI return prefix + byte 0x151f7c75 + + // staker: address + txna ApplicationArgs 1 + dup + len + int 32 + == + + // argument 0 (staker) for doesStakerNeedToPayMBR must be a address + assert + + // execute doesStakerNeedToPayMBR(address)bool + callsub doesStakerNeedToPayMBR + byte 0x00 + int 0 + uncover 2 + setbit + concat + log + int 1 + return + +// doesStakerNeedToPayMBR(staker: Address): boolean +// +// Helper callers can call w/ simulate to determine if 'AddStaker' MBR should be included w/ staking amount +// @param staker +doesStakerNeedToPayMBR: + proto 1 1 + + // contracts/validatorRegistry.algo.ts:375 + // return !this.stakerPoolSet(staker).exists + byte 0x737073 // "sps" + frame_dig -1 // staker: Address + concat + box_len + swap + pop + ! + retsub + +// getStakedPoolsForAccount(address)(uint64,uint64,uint64)[] +*abi_route_getStakedPoolsForAccount: + // The ABI return prefix + byte 0x151f7c75 + + // staker: address + txna ApplicationArgs 1 + dup + len + int 32 + == + + // argument 0 (staker) for getStakedPoolsForAccount must be a address + assert + + // execute getStakedPoolsForAccount(address)(uint64,uint64,uint64)[] + callsub getStakedPoolsForAccount + dup + len + int 24 + / + itob + extract 6 2 + swap + concat + concat + log + int 1 + return + +// getStakedPoolsForAccount(staker: Address): ValidatorPoolKey[] +// +// Retrieves the staked pools for an account. +// +// @param {Address} staker - The account to retrieve staked pools for. +// @return {ValidatorPoolKey[]} - The array of staked pools for the account. +getStakedPoolsForAccount: + proto 1 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 2 + + // *if3_condition + // contracts/validatorRegistry.algo.ts:385 + // !this.stakerPoolSet(staker).exists + byte 0x737073 // "sps" + frame_dig -1 // staker: Address + concat + box_len + swap + pop + ! + bz *if3_end + + // *if3_consequent + // contracts/validatorRegistry.algo.ts:386 + // return [] + byte 0x + b *getStakedPoolsForAccount*return + +*if3_end: + // contracts/validatorRegistry.algo.ts:388 + // retData: ValidatorPoolKey[] = [] + byte 0x + frame_bury 0 // retData: ValidatorPoolKey[] + + // contracts/validatorRegistry.algo.ts:389 + // poolSet = clone(this.stakerPoolSet(staker).value) + byte 0x737073 // "sps" + frame_dig -1 // staker: Address + concat + box_get + + // box value does not exist: this.stakerPoolSet(staker).value + assert + frame_bury 1 // poolSet: (uint64,uint64,uint64)[6] + + // contracts/validatorRegistry.algo.ts:390 + // for (let i = 0; i < poolSet.length; i += 1) + int 0 + frame_bury 2 // i: uint64 + +*for_1: + // contracts/validatorRegistry.algo.ts:390 + // i < poolSet.length + frame_dig 2 // i: uint64 + int 6 + < + bz *for_1_end + + // *if4_condition + // contracts/validatorRegistry.algo.ts:391 + // poolSet[i].id !== 0 + frame_dig 1 // poolSet: (uint64,uint64,uint64)[6] + frame_dig 2 // i: uint64 + int 24 + * // acc * typeLength + int 0 + + + int 8 + extract3 + btoi + int 0 + != + bz *if4_end + + // *if4_consequent + // contracts/validatorRegistry.algo.ts:392 + // retData.push(poolSet[i]) + frame_dig 0 // retData: ValidatorPoolKey[] + frame_dig 1 // poolSet: (uint64,uint64,uint64)[6] + frame_dig 2 // i: uint64 + int 24 + * // acc * typeLength + int 24 + extract3 + concat + frame_bury 0 // retData: ValidatorPoolKey[] + +*if4_end: + +*for_1_continue: + // contracts/validatorRegistry.algo.ts:390 + // i += 1 + frame_dig 2 // i: uint64 + int 1 + + + frame_bury 2 // i: uint64 + b *for_1 + +*for_1_end: + // contracts/validatorRegistry.algo.ts:395 + // return retData + frame_dig 0 // retData: ValidatorPoolKey[] + +*getStakedPoolsForAccount*return: + // set the subroutine return value + frame_bury 0 + + // pop all local variables from the stack + popn 2 + retsub + +// getTokenPayoutRatio(uint64)(uint64[24],uint64) +*abi_route_getTokenPayoutRatio: + // The ABI return prefix + byte 0x151f7c75 + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute getTokenPayoutRatio(uint64)(uint64[24],uint64) + callsub getTokenPayoutRatio + concat + log + int 1 + return + +// getTokenPayoutRatio(validatorId: ValidatorIdType): PoolTokenPayoutRatio +// +// Retrieves the token payout ratio for a given validator - returning the pool ratios of whole so that token +// payouts across pools can be based on a stable snaphost of stake. +// +// @param {ValidatorIdType} validatorId - The id of the validator. +// @return {PoolTokenPayoutRatio} - The token payout ratio for the validator. +getTokenPayoutRatio: + proto 1 1 + + // contracts/validatorRegistry.algo.ts:407 + // return this.validatorList(validatorId).value.tokenPayoutRatio + int 700 // headOffset + int 200 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + retsub + +// getNodePoolAssignments(uint64)((uint64[3])[8]) +*abi_route_getNodePoolAssignments: + // The ABI return prefix + byte 0x151f7c75 + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute getNodePoolAssignments(uint64)((uint64[3])[8]) + callsub getNodePoolAssignments + concat + log + int 1 + return + +// getNodePoolAssignments(validatorId: uint64): NodePoolAssignmentConfig +getNodePoolAssignments: + proto 1 1 + + // contracts/validatorRegistry.algo.ts:412 + // assert(this.validatorList(validatorId).exists, "the specified validator id doesn't exist") + byte 0x76 // "v" + frame_dig -1 // validatorId: uint64 + itob + concat + box_len + swap + pop + + // the specified validator id doesn't exist + assert + + // contracts/validatorRegistry.algo.ts:414 + // return this.validatorList(validatorId).value.nodePoolAssignments + int 900 // headOffset + int 192 + byte 0x76 // "v" + frame_dig -1 // validatorId: uint64 + itob + concat + cover 2 + box_extract + retsub + +// getNFDRegistryID()uint64 +*abi_route_getNFDRegistryID: + // The ABI return prefix + byte 0x151f7c75 + + // execute getNFDRegistryID()uint64 + callsub getNFDRegistryID + itob + concat + log + int 1 + return + +// getNFDRegistryID(): uint64 +getNFDRegistryID: + proto 0 1 + + // contracts/validatorRegistry.algo.ts:418 + // return this.nfdRegistryAppId + pushint TMPL_nfdRegistryAppId + retsub + +// addValidator(pay,string,(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64))uint64 +*abi_route_addValidator: + // The ABI return prefix + byte 0x151f7c75 + + // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + txna ApplicationArgs 2 + dup + len + int 242 + == + + // argument 0 (config) for addValidator must be a (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + assert + + // nfdName: string + txna ApplicationArgs 1 + extract 2 0 + + // mbrPayment: pay + txn GroupIndex + int 1 + - + dup + gtxns TypeEnum + int pay + == + + // argument 2 (mbrPayment) for addValidator must be a pay transaction + assert + + // execute addValidator(pay,string,(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64))uint64 + callsub addValidator + itob + concat + log + int 1 + return + +// addValidator(mbrPayment: PayTxn, nfdName: string, config: ValidatorConfig): uint64 +// +// Adds a new validator +// Requires at least 10 ALGO as the 'fee' for the transaction to help dissuade spammed validator adds. +// +// @param {PayTxn} mbrPayment payment from caller which covers mbr increase of new validator storage +// @param {string} nfdName (Optional) Name of nfd (used as double-check against id specified in config) +// @param {ValidatorConfig} config ValidatorConfig struct +// @returns {uint64} validator id +addValidator: + proto 3 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // contracts/validatorRegistry.algo.ts:430 + // this.validateConfig(config) + frame_dig -3 // config: ValidatorConfig + callsub validateConfig + + // contracts/validatorRegistry.algo.ts:431 + // assert(config.owner !== Address.zeroAddress) + frame_dig -3 // config: ValidatorConfig + extract 8 32 + global ZeroAddress + != + assert + + // contracts/validatorRegistry.algo.ts:432 + // assert(config.manager !== Address.zeroAddress) + frame_dig -3 // config: ValidatorConfig + extract 40 32 + global ZeroAddress + != + assert + + // contracts/validatorRegistry.algo.ts:433 + // assert(this.txn.sender === config.owner, 'sender must be owner to add new validator') + txn Sender + frame_dig -3 // config: ValidatorConfig + extract 8 32 + == + + // sender must be owner to add new validator + assert + + // contracts/validatorRegistry.algo.ts:435 + // verifyPayTxn(mbrPayment, { receiver: this.app.address, amount: this.getMbrAmounts().addValidatorMbr }) + // verify receiver + frame_dig -1 // mbrPayment: PayTxn + gtxns Receiver + global CurrentApplicationAddress + == + + // transaction verification failed: {"txn":"mbrPayment","field":"receiver","expected":"this.app.address"} + assert + + // verify amount + frame_dig -1 // mbrPayment: PayTxn + gtxns Amount + callsub getMbrAmounts + extract 0 8 + btoi + == + + // transaction verification failed: {"txn":"mbrPayment","field":"amount","expected":"this.getMbrAmounts().addValidatorMbr"} + assert + + // contracts/validatorRegistry.algo.ts:437 + // assert(mbrPayment.fee > 10 * 1000000, 'fee must be 10 ALGO or more to prevent spamming of validators') + frame_dig -1 // mbrPayment: PayTxn + gtxns Fee + int 10000000 + > + + // fee must be 10 ALGO or more to prevent spamming of validators + assert + + // contracts/validatorRegistry.algo.ts:440 + // validatorId = this.numValidators.value + 1 + byte 0x6e756d56 // "numV" + app_global_get + int 1 + + + frame_bury 0 // validatorId: uint64 + + // contracts/validatorRegistry.algo.ts:441 + // this.numValidators.value = validatorId + byte 0x6e756d56 // "numV" + frame_dig 0 // validatorId: uint64 + app_global_put + + // contracts/validatorRegistry.algo.ts:443 + // this.validatorList(validatorId).create() + byte 0x76 // "v" + frame_dig 0 // validatorId: uint64 + itob + concat + int 1092 + box_create + pop + + // contracts/validatorRegistry.algo.ts:444 + // this.validatorList(validatorId).value.config = config + int 0 + frame_dig -3 // config: ValidatorConfig + byte 0x76 // "v" + frame_dig 0 // validatorId: uint64 + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:445 + // this.validatorList(validatorId).value.config.id = validatorId + int 0 + frame_dig 0 // validatorId: uint64 + itob + byte 0x76 // "v" + frame_dig 0 // validatorId: uint64 + itob + concat + cover 2 + box_replace + + // *if5_condition + // contracts/validatorRegistry.algo.ts:448 + // config.nfdForInfo !== 0 + frame_dig -3 // config: ValidatorConfig + extract 72 8 + btoi + int 0 + != + bz *if5_end + + // *if5_consequent + // contracts/validatorRegistry.algo.ts:450 + // sendAppCall({ + // applicationID: AppID.fromUint64(this.nfdRegistryAppId), + // applicationArgs: ['is_valid_nfd_appid', nfdName, itob(config.nfdForInfo)], + // applications: [AppID.fromUint64(config.nfdForInfo)], + // }) + itxn_begin + int appl + itxn_field TypeEnum + + // contracts/validatorRegistry.algo.ts:451 + // applicationID: AppID.fromUint64(this.nfdRegistryAppId) + pushint TMPL_nfdRegistryAppId + itxn_field ApplicationID + + // contracts/validatorRegistry.algo.ts:452 + // applicationArgs: ['is_valid_nfd_appid', nfdName, itob(config.nfdForInfo)] + byte 0x69735f76616c69645f6e66645f6170706964 // "is_valid_nfd_appid" + itxn_field ApplicationArgs + frame_dig -2 // nfdName: string + itxn_field ApplicationArgs + frame_dig -3 // config: ValidatorConfig + extract 72 8 + btoi + itob + itxn_field ApplicationArgs + + // contracts/validatorRegistry.algo.ts:453 + // applications: [AppID.fromUint64(config.nfdForInfo)] + frame_dig -3 // config: ValidatorConfig + extract 72 8 + btoi + itxn_field Applications + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/validatorRegistry.algo.ts:455 + // assert(btoi(this.itxn.lastLog) === 1, "provided NFD isn't valid") + itxn LastLog + btoi + int 1 + == + + // provided NFD isn't valid + assert + + // contracts/validatorRegistry.algo.ts:457 + // assert( + // this.txn.sender === (AppID.fromUint64(config.nfdForInfo).globalState('i.owner.a') as Address), + // 'If specifying NFD, account adding validator must be owner', + // ) + txn Sender + frame_dig -3 // config: ValidatorConfig + extract 72 8 + btoi + byte 0x692e6f776e65722e61 // "i.owner.a" + app_global_get_ex + + // global state value does not exist: AppID.fromUint64(config.nfdForInfo).globalState('i.owner.a') + assert + == + + // If specifying NFD, account adding validator must be owner + assert + +*if5_end: + // *if6_condition + // contracts/validatorRegistry.algo.ts:463 + // config.entryGatingType === GATING_TYPE_CREATED_BY_NFD_ADDRESSES || + // config.entryGatingType === GATING_TYPE_SEGMENT_OF_NFD + frame_dig -3 // config: ValidatorConfig + extract 80 1 + btoi + int 3 + == + dup + bnz *skip_or0 + frame_dig -3 // config: ValidatorConfig + extract 80 1 + btoi + int 4 + == + || + +*skip_or0: + bz *if6_end + + // *if6_consequent + // contracts/validatorRegistry.algo.ts:467 + // assert( + // this.isNFDAppIDValid(config.entryGatingAssets[0]), + // 'provided NFD App id for gating must be valid NFD', + // ) + frame_dig -3 // config: ValidatorConfig + extract 113 8 + btoi + callsub isNFDAppIDValid + + // provided NFD App id for gating must be valid NFD + assert + +*if6_end: + // contracts/validatorRegistry.algo.ts:473 + // return validatorId + frame_dig 0 // validatorId: uint64 + + // set the subroutine return value + frame_bury 0 + retsub + +// changeValidatorManager(uint64,address)void +*abi_route_changeValidatorManager: + // manager: address + txna ApplicationArgs 2 + dup + len + int 32 + == + + // argument 0 (manager) for changeValidatorManager must be a address + assert + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute changeValidatorManager(uint64,address)void + callsub changeValidatorManager + int 1 + return + +// changeValidatorManager(validatorId: ValidatorIdType, manager: Address): void +// +// Changes the Validator manager for a specific Validator id. +// [ ONLY OWNER CAN CHANGE ] +// +// @param {ValidatorIdType} validatorId - The id of the validator to change the manager for. +// @param {Address} manager - The new manager address. +changeValidatorManager: + proto 2 0 + + // contracts/validatorRegistry.algo.ts:484 + // assert( + // this.txn.sender === this.validatorList(validatorId).value.config.owner, + // 'can only be called by validator owner', + // ) + txn Sender + int 8 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + == + + // can only be called by validator owner + assert + + // contracts/validatorRegistry.algo.ts:488 + // this.validatorList(validatorId).value.config.manager = manager + int 40 + frame_dig -2 // manager: Address + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + retsub + +// changeValidatorSunsetInfo(uint64,uint64,uint64)void +*abi_route_changeValidatorSunsetInfo: + // sunsettingTo: uint64 + txna ApplicationArgs 3 + btoi + + // sunsettingOn: uint64 + txna ApplicationArgs 2 + btoi + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute changeValidatorSunsetInfo(uint64,uint64,uint64)void + callsub changeValidatorSunsetInfo + int 1 + return + +// changeValidatorSunsetInfo(validatorId: ValidatorIdType, sunsettingOn: uint64, sunsettingTo: ValidatorIdType): void +// +// Updates the sunset information for a given validator. +// [ ONLY OWNER CAN CHANGE ] +// +// @param {ValidatorIdType} validatorId - The id of the validator to update. +// @param {uint64} sunsettingOn - The new sunset timestamp. +// @param {uint64} sunsettingTo - The new sunset to validator id. +changeValidatorSunsetInfo: + proto 3 0 + + // contracts/validatorRegistry.algo.ts:500 + // assert( + // this.txn.sender === this.validatorList(validatorId).value.config.owner, + // 'can only be called by validator owner', + // ) + txn Sender + int 8 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + == + + // can only be called by validator owner + assert + + // contracts/validatorRegistry.algo.ts:504 + // this.validatorList(validatorId).value.config.sunsettingOn = sunsettingOn + int 226 + frame_dig -2 // sunsettingOn: uint64 + itob + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:505 + // this.validatorList(validatorId).value.config.sunsettingTo = sunsettingTo + int 234 + frame_dig -3 // sunsettingTo: ValidatorIdType + itob + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + retsub + +// changeValidatorNFD(uint64,uint64,string)void +*abi_route_changeValidatorNFD: + // nfdName: string + txna ApplicationArgs 3 + extract 2 0 + + // nfdAppID: uint64 + txna ApplicationArgs 2 + btoi + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute changeValidatorNFD(uint64,uint64,string)void + callsub changeValidatorNFD + int 1 + return + +// changeValidatorNFD(validatorId: ValidatorIdType, nfdAppID: uint64, nfdName: string): void +// +// Changes the NFD for a validator in the validatorList contract. +// [ ONLY OWNER CAN CHANGE ] +// +// @param {ValidatorIdType} validatorId - The id of the validator to update. +// @param {uint64} nfdAppID - The application id of the NFD to assign to the validator. +// @param {string} nfdName - The name of the NFD (which must match) +changeValidatorNFD: + proto 3 0 + + // contracts/validatorRegistry.algo.ts:518 + // assert( + // this.txn.sender === this.validatorList(validatorId).value.config.owner, + // 'can only be called by validator owner', + // ) + txn Sender + int 8 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + == + + // can only be called by validator owner + assert + + // contracts/validatorRegistry.algo.ts:523 + // sendAppCall({ + // applicationID: AppID.fromUint64(this.nfdRegistryAppId), + // applicationArgs: ['is_valid_nfd_appid', nfdName, itob(nfdAppID)], + // applications: [AppID.fromUint64(nfdAppID)], + // }) + itxn_begin + int appl + itxn_field TypeEnum + + // contracts/validatorRegistry.algo.ts:524 + // applicationID: AppID.fromUint64(this.nfdRegistryAppId) + pushint TMPL_nfdRegistryAppId + itxn_field ApplicationID + + // contracts/validatorRegistry.algo.ts:525 + // applicationArgs: ['is_valid_nfd_appid', nfdName, itob(nfdAppID)] + byte 0x69735f76616c69645f6e66645f6170706964 // "is_valid_nfd_appid" + itxn_field ApplicationArgs + frame_dig -3 // nfdName: string + itxn_field ApplicationArgs + frame_dig -2 // nfdAppID: uint64 + itob + itxn_field ApplicationArgs + + // contracts/validatorRegistry.algo.ts:526 + // applications: [AppID.fromUint64(nfdAppID)] + frame_dig -2 // nfdAppID: uint64 + itxn_field Applications + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/validatorRegistry.algo.ts:529 + // assert( + // this.txn.sender === (AppID.fromUint64(nfdAppID).globalState('i.owner.a') as Address), + // 'If specifying NFD, account adding validator must be owner', + // ) + txn Sender + frame_dig -2 // nfdAppID: uint64 + byte 0x692e6f776e65722e61 // "i.owner.a" + app_global_get_ex + + // global state value does not exist: AppID.fromUint64(nfdAppID).globalState('i.owner.a') + assert + == + + // If specifying NFD, account adding validator must be owner + assert + + // contracts/validatorRegistry.algo.ts:533 + // this.validatorList(validatorId).value.config.nfdForInfo = nfdAppID + int 72 + frame_dig -2 // nfdAppID: uint64 + itob + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + retsub + +// changeValidatorCommissionAddress(uint64,address)void +*abi_route_changeValidatorCommissionAddress: + // commissionAddress: address + txna ApplicationArgs 2 + dup + len + int 32 + == + + // argument 0 (commissionAddress) for changeValidatorCommissionAddress must be a address + assert + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute changeValidatorCommissionAddress(uint64,address)void + callsub changeValidatorCommissionAddress + int 1 + return + +// changeValidatorCommissionAddress(validatorId: ValidatorIdType, commissionAddress: Address): void +// +// Change the commission address that validator rewards are sent to. +// [ ONLY OWNER CAN CHANGE ] +changeValidatorCommissionAddress: + proto 2 0 + + // contracts/validatorRegistry.algo.ts:541 + // assert( + // this.txn.sender === this.validatorList(validatorId).value.config.owner, + // 'can only be called by validator owner', + // ) + txn Sender + int 8 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + == + + // can only be called by validator owner + assert + + // contracts/validatorRegistry.algo.ts:545 + // assert(commissionAddress !== Address.zeroAddress) + frame_dig -2 // commissionAddress: Address + global ZeroAddress + != + assert + + // contracts/validatorRegistry.algo.ts:546 + // this.validatorList(validatorId).value.config.validatorCommissionAddress = commissionAddress + int 177 + frame_dig -2 // commissionAddress: Address + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + retsub + +// changeValidatorRewardInfo(uint64,uint8,address,uint64[4],uint64,uint64)void +*abi_route_changeValidatorRewardInfo: + // RewardPerPayout: uint64 + txna ApplicationArgs 6 + btoi + + // GatingAssetMinBalance: uint64 + txna ApplicationArgs 5 + btoi + + // EntryGatingAssets: uint64[4] + txna ApplicationArgs 4 + dup + len + int 32 + == + + // argument 2 (EntryGatingAssets) for changeValidatorRewardInfo must be a uint64[4] + assert + + // EntryGatingAddress: address + txna ApplicationArgs 3 + dup + len + int 32 + == + + // argument 3 (EntryGatingAddress) for changeValidatorRewardInfo must be a address + assert + + // EntryGatingType: uint8 + txna ApplicationArgs 2 + dup + len + int 1 + == + + // argument 4 (EntryGatingType) for changeValidatorRewardInfo must be a uint8 + assert + btoi + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute changeValidatorRewardInfo(uint64,uint8,address,uint64[4],uint64,uint64)void + callsub changeValidatorRewardInfo + int 1 + return + +// changeValidatorRewardInfo(validatorId: ValidatorIdType, EntryGatingType: uint8, EntryGatingAddress: Address, EntryGatingAssets: StaticArray, GatingAssetMinBalance: uint64, RewardPerPayout: uint64): void +// +// Allow the additional rewards (gating entry, additional token rewards) information be changed at will. +// [ ONLY OWNER CAN CHANGE ] +changeValidatorRewardInfo: + proto 6 0 + + // contracts/validatorRegistry.algo.ts:561 + // assert( + // this.txn.sender === this.validatorList(validatorId).value.config.owner, + // 'can only be called by validator owner', + // ) + txn Sender + int 8 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + == + + // can only be called by validator owner + assert + + // contracts/validatorRegistry.algo.ts:566 + // this.validatorList(validatorId).value.config.entryGatingType = EntryGatingType + int 80 + frame_dig -2 // EntryGatingType: uint8 + itob + extract 7 1 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:567 + // this.validatorList(validatorId).value.config.entryGatingAddress = EntryGatingAddress + int 81 + frame_dig -3 // EntryGatingAddress: Address + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:568 + // this.validatorList(validatorId).value.config.entryGatingAssets = EntryGatingAssets + int 113 + frame_dig -4 // EntryGatingAssets: StaticArray + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:569 + // this.validatorList(validatorId).value.config.gatingAssetMinBalance = GatingAssetMinBalance + int 145 + frame_dig -5 // GatingAssetMinBalance: uint64 + itob + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:570 + // this.validatorList(validatorId).value.config.rewardPerPayout = RewardPerPayout + int 161 + frame_dig -6 // RewardPerPayout: uint64 + itob + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + retsub + +// addPool(pay,uint64,uint64)(uint64,uint64,uint64) +*abi_route_addPool: + // The ABI return prefix + byte 0x151f7c75 + + // nodeNum: uint64 + txna ApplicationArgs 2 + btoi + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // mbrPayment: pay + txn GroupIndex + int 1 + - + dup + gtxns TypeEnum + int pay + == + + // argument 2 (mbrPayment) for addPool must be a pay transaction + assert + + // execute addPool(pay,uint64,uint64)(uint64,uint64,uint64) + callsub addPool + concat + log + int 1 + return + +// addPool(mbrPayment: PayTxn, validatorId: ValidatorIdType, nodeNum: uint64): ValidatorPoolKey +// +// Adds a new pool to a validator's pool set, returning the 'key' to reference the pool in the future for staking, etc. +// The caller must pay the cost of the validators MBR increase as well as the MBR that will be needed for the pool itself. +// +// [ ONLY OWNER OR MANAGER CAN call ] +// @param {PayTxn} mbrPayment payment from caller which covers mbr increase of adding a new pool +// @param {uint64} validatorId is id of validator to pool to (must be owner or manager) +// @param {uint64} nodeNum is node number to add to +// @returns {ValidatorPoolKey} pool key to created pool +addPool: + proto 3 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dup + + // contracts/validatorRegistry.algo.ts:586 + // assert( + // this.txn.sender === this.validatorList(validatorId).value.config.owner || + // this.txn.sender === this.validatorList(validatorId).value.config.manager, + // 'can only be called by owner or manager of validator', + // ) + txn Sender + int 8 + int 32 + byte 0x76 // "v" + frame_dig -2 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + == + dup + bnz *skip_or1 + txn Sender + int 40 + int 32 + byte 0x76 // "v" + frame_dig -2 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + == + || + +*skip_or1: + // can only be called by owner or manager of validator + assert + + // contracts/validatorRegistry.algo.ts:593 + // verifyPayTxn(mbrPayment, { receiver: this.app.address, amount: this.getMbrAmounts().addPoolMbr }) + // verify receiver + frame_dig -1 // mbrPayment: PayTxn + gtxns Receiver + global CurrentApplicationAddress + == + + // transaction verification failed: {"txn":"mbrPayment","field":"receiver","expected":"this.app.address"} + assert + + // verify amount + frame_dig -1 // mbrPayment: PayTxn + gtxns Amount + callsub getMbrAmounts + extract 8 8 + btoi + == + + // transaction verification failed: {"txn":"mbrPayment","field":"amount","expected":"this.getMbrAmounts().addPoolMbr"} + assert + + // contracts/validatorRegistry.algo.ts:595 + // assert(this.validatorList(validatorId).exists, "specified validator id isn't valid") + byte 0x76 // "v" + frame_dig -2 // validatorId: ValidatorIdType + itob + concat + box_len + swap + pop + + // specified validator id isn't valid + assert + + // contracts/validatorRegistry.algo.ts:597 + // numPools: uint64 = this.validatorList(validatorId).value.state.numPools as uint64 + int 242 + int 2 + byte 0x76 // "v" + frame_dig -2 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 0 // numPools: uint64 + + // *if7_condition + // contracts/validatorRegistry.algo.ts:598 + // (numPools as uint64) >= MAX_POOLS + frame_dig 0 // numPools: uint64 + int 24 + >= + bz *if7_end + + // *if7_consequent + // already at max pool size + err + +*if7_end: + // contracts/validatorRegistry.algo.ts:601 + // numPools += 1 + frame_dig 0 // numPools: uint64 + int 1 + + + frame_bury 0 // numPools: uint64 + + // contracts/validatorRegistry.algo.ts:604 + // sendAppCall({ + // onCompletion: OnCompletion.NoOp, + // approvalProgram: [ + // this.stakingPoolApprovalProgram.extract(0, 4096), + // this.stakingPoolApprovalProgram.extract(4096, this.stakingPoolApprovalProgram.size - 4096), + // ], + // clearStateProgram: StakingPool.clearProgram(), + // globalNumUint: StakingPool.schema.global.numUint, + // globalNumByteSlice: StakingPool.schema.global.numByteSlice, + // extraProgramPages: 3, + // applicationArgs: [ + // // creatingContractID, validatorId, poolId, minEntryStake + // method('createApplication(uint64,uint64,uint64,uint64)void'), + // itob(this.app.id), + // itob(validatorId), + // itob(numPools as uint64), + // itob(this.validatorList(validatorId).value.config.minEntryStake), + // ], + // }) + itxn_begin + int appl + itxn_field TypeEnum + + // contracts/validatorRegistry.algo.ts:605 + // onCompletion: OnCompletion.NoOp + int 0 // NoOp + itxn_field OnCompletion + + // contracts/validatorRegistry.algo.ts:606 + // approvalProgram: [ + // this.stakingPoolApprovalProgram.extract(0, 4096), + // this.stakingPoolApprovalProgram.extract(4096, this.stakingPoolApprovalProgram.size - 4096), + // ] + byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" + int 0 + int 4096 + box_extract + itxn_field ApprovalProgramPages + byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" + int 4096 + byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" + box_len + + // box value does not exist: this.stakingPoolApprovalProgram.size + assert + int 4096 + - + box_extract + itxn_field ApprovalProgramPages + + // contracts/validatorRegistry.algo.ts:610 + // clearStateProgram: StakingPool.clearProgram() + byte b64 Cg== + itxn_field ClearStateProgram + + // contracts/validatorRegistry.algo.ts:611 + // globalNumUint: StakingPool.schema.global.numUint + int 11 + itxn_field GlobalNumUint + + // contracts/validatorRegistry.algo.ts:612 + // globalNumByteSlice: StakingPool.schema.global.numByteSlice + int 3 + itxn_field GlobalNumByteSlice + + // contracts/validatorRegistry.algo.ts:613 + // extraProgramPages: 3 + int 3 + itxn_field ExtraProgramPages + + // contracts/validatorRegistry.algo.ts:614 + // applicationArgs: [ + // // creatingContractID, validatorId, poolId, minEntryStake + // method('createApplication(uint64,uint64,uint64,uint64)void'), + // itob(this.app.id), + // itob(validatorId), + // itob(numPools as uint64), + // itob(this.validatorList(validatorId).value.config.minEntryStake), + // ] + method "createApplication(uint64,uint64,uint64,uint64)void" + itxn_field ApplicationArgs + txna Applications 0 + itob + itxn_field ApplicationArgs + frame_dig -2 // validatorId: ValidatorIdType + itob + itxn_field ApplicationArgs + frame_dig 0 // numPools: uint64 + itob + itxn_field ApplicationArgs + int 209 + int 8 + byte 0x76 // "v" + frame_dig -2 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/validatorRegistry.algo.ts:624 + // this.validatorList(validatorId).value.state.numPools = numPools as uint16 + int 242 + frame_dig 0 // numPools: uint64 + itob + extract 6 2 + byte 0x76 // "v" + frame_dig -2 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:627 + // poolAppId = this.itxn.createdApplicationID.id + itxn CreatedApplicationID + frame_bury 1 // poolAppId: uint64 + + // contracts/validatorRegistry.algo.ts:628 + // this.validatorList(validatorId).value.pools[numPools - 1].poolAppId = poolAppId + int 268 // headOffset + frame_dig 0 // numPools: uint64 + int 1 + - + int 18 + * // acc * typeLength + + + int 0 + + + frame_dig 1 // poolAppId: uint64 + itob + byte 0x76 // "v" + frame_dig -2 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:629 + // this.addPoolToNode(validatorId, poolAppId, nodeNum) + frame_dig -3 // nodeNum: uint64 + frame_dig 1 // poolAppId: uint64 + frame_dig -2 // validatorId: ValidatorIdType + callsub addPoolToNode + + // contracts/validatorRegistry.algo.ts:637 + // return { id: validatorId, poolId: numPools as uint64, poolAppId: this.itxn!.createdApplicationID.id } + frame_dig -2 // validatorId: ValidatorIdType + itob + frame_dig 0 // numPools: uint64 + itob + concat + itxn CreatedApplicationID + itob + concat + + // set the subroutine return value + frame_bury 0 + + // pop all local variables from the stack + popn 1 + retsub + +// addStake(pay,uint64,uint64)(uint64,uint64,uint64) +*abi_route_addStake: + // The ABI return prefix + byte 0x151f7c75 + + // valueToVerify: uint64 + txna ApplicationArgs 2 + btoi + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // stakedAmountPayment: pay + txn GroupIndex + int 1 + - + dup + gtxns TypeEnum + int pay + == + + // argument 2 (stakedAmountPayment) for addStake must be a pay transaction + assert + + // execute addStake(pay,uint64,uint64)(uint64,uint64,uint64) + callsub addStake + concat + log + int 1 + return + +// addStake(stakedAmountPayment: PayTxn, validatorId: ValidatorIdType, valueToVerify: uint64): ValidatorPoolKey +// +// Adds stake to a validator pool. +// +// @param {PayTxn} stakedAmountPayment - payment coming from staker to place into a pool +// @param {ValidatorIdType} validatorId - The id of the validator. +// @param {uint64} valueToVerify - only if validator has gating to enter - this is asset id or nfd id that corresponds to gating. +// Txn sender is factored in as well if that is part of gating. +// * @returns {ValidatorPoolKey} - The key of the validator pool. +addStake: + proto 3 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 5 + + // contracts/validatorRegistry.algo.ts:650 + // assert(this.validatorList(validatorId).exists, "specified validator id isn't valid") + byte 0x76 // "v" + frame_dig -2 // validatorId: ValidatorIdType + itob + concat + box_len + swap + pop + + // specified validator id isn't valid + assert + + // *if8_condition + // contracts/validatorRegistry.algo.ts:653 + // this.validatorList(validatorId).value.config.sunsettingOn > 0 + int 226 + int 8 + byte 0x76 // "v" + frame_dig -2 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + int 0 + > + bz *if8_end + + // *if8_consequent + // contracts/validatorRegistry.algo.ts:654 + // assert( + // this.validatorList(validatorId).value.config.sunsettingOn < globals.latestTimestamp, + // "can't stake with a validator that is past its sunsetting time", + // ) + int 226 + int 8 + byte 0x76 // "v" + frame_dig -2 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + global LatestTimestamp + < + + // can't stake with a validator that is past its sunsetting time + assert + +*if8_end: + // contracts/validatorRegistry.algo.ts:660 + // staker = this.txn.sender + txn Sender + frame_bury 0 // staker: address + + // contracts/validatorRegistry.algo.ts:664 + // verifyPayTxn(stakedAmountPayment, { + // sender: staker, + // receiver: this.app.address, + // }) + // verify sender + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Sender + frame_dig 0 // staker: address + == + + // transaction verification failed: {"txn":"stakedAmountPayment","field":"sender","expected":"staker"} + assert + + // verify receiver + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Receiver + global CurrentApplicationAddress + == + + // transaction verification failed: {"txn":"stakedAmountPayment","field":"receiver","expected":"this.app.address"} + assert + + // contracts/validatorRegistry.algo.ts:671 + // assert( + // this.validatorList(validatorId).value.state.totalAlgoStaked < this.maxAllowedStake(), + // 'total staked for all of a validators pools may not exceed hard cap', + // ) + int 252 + int 8 + byte 0x76 // "v" + frame_dig -2 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + callsub maxAllowedStake + < + + // total staked for all of a validators pools may not exceed hard cap + assert + + // contracts/validatorRegistry.algo.ts:678 + // this.doesStakerMeetGating(validatorId, valueToVerify) + frame_dig -3 // valueToVerify: uint64 + frame_dig -2 // validatorId: ValidatorIdType + callsub doesStakerMeetGating + + // contracts/validatorRegistry.algo.ts:680 + // realAmount = stakedAmountPayment.amount + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Amount + frame_bury 1 // realAmount: uint64 + + // contracts/validatorRegistry.algo.ts:681 + // mbrAmtLeftBehind: uint64 = 0 + int 0 + frame_bury 2 // mbrAmtLeftBehind: uint64 + + // *if9_condition + // contracts/validatorRegistry.algo.ts:683 + // !this.stakerPoolSet(staker).exists + byte 0x737073 // "sps" + frame_dig 0 // staker: address + concat + box_len + swap + pop + ! + bz *if9_end + + // *if9_consequent + // contracts/validatorRegistry.algo.ts:686 + // mbrAmtLeftBehind = this.getMbrAmounts().addStakerMbr + callsub getMbrAmounts + extract 24 8 + btoi + frame_bury 2 // mbrAmtLeftBehind: uint64 + + // contracts/validatorRegistry.algo.ts:687 + // realAmount -= mbrAmtLeftBehind + frame_dig 1 // realAmount: uint64 + frame_dig 2 // mbrAmtLeftBehind: uint64 + - + frame_bury 1 // realAmount: uint64 + + // contracts/validatorRegistry.algo.ts:688 + // this.stakerPoolSet(staker).create() + byte 0x737073 // "sps" + frame_dig 0 // staker: address + concat + int 144 + box_create + pop + +*if9_end: + // contracts/validatorRegistry.algo.ts:692 + // findRet = this.findPoolForStaker(validatorId, staker, realAmount) + frame_dig 1 // realAmount: uint64 + frame_dig 0 // staker: address + frame_dig -2 // validatorId: ValidatorIdType + callsub findPoolForStaker + frame_bury 3 // findRet: ((uint64,uint64,uint64),bool,bool) + + // contracts/validatorRegistry.algo.ts:693 + // poolKey = findRet[0] + // contracts/validatorRegistry.algo.ts:694 + // isNewStakerToValidator = findRet[1] + frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) + store 255 // full array + load 255 // full array + int 192 + getbit + frame_bury 4 // isNewStakerToValidator: bool + + // contracts/validatorRegistry.algo.ts:695 + // isNewStakerToProtocol = findRet[2] + frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) + store 255 // full array + load 255 // full array + int 193 + getbit + frame_bury 5 // isNewStakerToProtocol: bool + + // *if10_condition + // contracts/validatorRegistry.algo.ts:696 + // poolKey.poolId === 0 + frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) + store 255 // full array + load 255 // full array + extract 8 8 + btoi + int 0 + == + bz *if10_end + + // *if10_consequent + // No pool available with free stake. Validator needs to add another pool + err + +*if10_end: + // contracts/validatorRegistry.algo.ts:701 + // this.updateStakerPoolSet(staker, poolKey) + frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) + store 255 // full array + load 255 // full array + extract 0 24 + frame_dig 0 // staker: address + callsub updateStakerPoolSet + + // contracts/validatorRegistry.algo.ts:704 + // this.callPoolAddStake( + // stakedAmountPayment, + // poolKey, + // mbrAmtLeftBehind, + // isNewStakerToValidator, + // isNewStakerToProtocol, + // ) + frame_dig 5 // isNewStakerToProtocol: bool + frame_dig 4 // isNewStakerToValidator: bool + frame_dig 2 // mbrAmtLeftBehind: uint64 + frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) + store 255 // full array + load 255 // full array + extract 0 24 + frame_dig -1 // stakedAmountPayment: PayTxn + callsub callPoolAddStake + + // contracts/validatorRegistry.algo.ts:719 + // return poolKey + frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) + store 255 // full array + load 255 // full array + extract 0 24 + + // set the subroutine return value + frame_bury 0 + + // pop all local variables from the stack + popn 5 + retsub + +// setTokenPayoutRatio(uint64)(uint64[24],uint64) +*abi_route_setTokenPayoutRatio: + // The ABI return prefix + byte 0x151f7c75 + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute setTokenPayoutRatio(uint64)(uint64[24],uint64) + callsub setTokenPayoutRatio + concat + log + int 1 + return + +// setTokenPayoutRatio(validatorId: ValidatorIdType): PoolTokenPayoutRatio +// +// setTokenPayoutRatio is called by Staking Pool # 1 (ONLY) to ask the validator (us) to calculate the ratios +// of stake in the pools for subsequent token payouts (ie: 2 pools, '100' algo total staked, 60 in pool 1, and 40 +// in pool 2) This is done so we have a stable snapshot of stake - taken once per epoch - only triggered by +// pool 1 doing payout. pools other than 1 doing payout call pool 1 to ask it do it first. +// It would be 60/40% in the poolPctOfWhole values. The token reward payouts then use these values instead of +// their 'current' stake which changes as part of the payouts themselves (and people could be changing stake +// during the epoch updates across pools) +// +// Multiple pools will call us via pool 1 (pool2->pool1->validator, etc.) so don't assert on pool1 calling multiple +// times in same epoch. Just return. +// +// @param validatorId - validator id (and thus pool) calling us. Verified so that sender MUST be pool 1 of this validator. +// @returns PoolTokenPayoutRatio - the finished ratio data +setTokenPayoutRatio: + proto 1 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 8 + + // contracts/validatorRegistry.algo.ts:739 + // pool1AppID = this.validatorList(validatorId).value.pools[0].poolAppId + int 268 + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 0 // pool1AppID: uint64 + + // contracts/validatorRegistry.algo.ts:740 + // assert(pool1AppID !== 0) + frame_dig 0 // pool1AppID: uint64 + int 0 + != + assert + + // *if11_condition + // contracts/validatorRegistry.algo.ts:742 + // this.txn.sender !== AppID.fromUint64(pool1AppID).address + txn Sender + frame_dig 0 // pool1AppID: uint64 + app_params_get AppAddress + pop + != + bz *if11_end + + // *if11_consequent + // contracts/validatorRegistry.algo.ts:743 + // return this.validatorList(validatorId).value.tokenPayoutRatio + int 700 // headOffset + int 200 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + b *setTokenPayoutRatio*return + +*if11_end: + // contracts/validatorRegistry.algo.ts:749 + // curRound = globals.round + global Round + frame_bury 1 // curRound: uint64 + + // contracts/validatorRegistry.algo.ts:750 + // lastPayoutUpdate = this.validatorList(validatorId).value.tokenPayoutRatio.updatedForPayout + int 892 + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 2 // lastPayoutUpdate: uint64 + + // *if12_condition + // contracts/validatorRegistry.algo.ts:751 + // lastPayoutUpdate !== 0 + frame_dig 2 // lastPayoutUpdate: uint64 + int 0 + != + bz *if12_end + + // *if12_consequent + // *if13_condition + // contracts/validatorRegistry.algo.ts:753 + // (AppID.fromUint64(pool1AppID).globalState('lastPayout') as uint64) === lastPayoutUpdate + frame_dig 0 // pool1AppID: uint64 + byte 0x6c6173745061796f7574 // "lastPayout" + app_global_get_ex + + // global state value does not exist: AppID.fromUint64(pool1AppID).globalState('lastPayout') + assert + frame_dig 2 // lastPayoutUpdate: uint64 + == + bz *if13_end + + // *if13_consequent + // contracts/validatorRegistry.algo.ts:754 + // return this.validatorList(validatorId).value.tokenPayoutRatio + int 700 // headOffset + int 200 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + b *setTokenPayoutRatio*return + +*if13_end: + // contracts/validatorRegistry.algo.ts:756 + // epochRoundLength = this.validatorList(validatorId).value.config.epochRoundLength as uint64 + int 169 + int 4 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 3 // epochRoundLength: uint64 + + // contracts/validatorRegistry.algo.ts:757 + // thisEpochBegin = curRound - (curRound % epochRoundLength) + frame_dig 1 // curRound: uint64 + frame_dig 1 // curRound: uint64 + frame_dig 3 // epochRoundLength: uint64 + % + - + frame_bury 4 // thisEpochBegin: uint64 + + // *if14_condition + // contracts/validatorRegistry.algo.ts:759 + // lastPayoutUpdate - (lastPayoutUpdate % epochRoundLength) === thisEpochBegin + frame_dig 2 // lastPayoutUpdate: uint64 + frame_dig 2 // lastPayoutUpdate: uint64 + frame_dig 3 // epochRoundLength: uint64 + % + - + frame_dig 4 // thisEpochBegin: uint64 + == + bz *if14_end + + // *if14_consequent + // contracts/validatorRegistry.algo.ts:760 + // return this.validatorList(validatorId).value.tokenPayoutRatio + int 700 // headOffset + int 200 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + b *setTokenPayoutRatio*return + +*if14_end: + +*if12_end: + // contracts/validatorRegistry.algo.ts:763 + // this.validatorList(validatorId).value.tokenPayoutRatio.updatedForPayout = curRound + int 892 + frame_dig 1 // curRound: uint64 + itob + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:765 + // curNumPools = this.validatorList(validatorId).value.state.numPools as uint64 + int 242 + int 2 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 5 // curNumPools: uint64 + + // contracts/validatorRegistry.algo.ts:766 + // totalStakeForValidator = this.validatorList(validatorId).value.state.totalAlgoStaked + int 252 + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 6 // totalStakeForValidator: uint64 + + // contracts/validatorRegistry.algo.ts:767 + // for (let i = 0; i < curNumPools; i += 1) + int 0 + frame_bury 7 // i: uint64 + +*for_2: + // contracts/validatorRegistry.algo.ts:767 + // i < curNumPools + frame_dig 7 // i: uint64 + frame_dig 5 // curNumPools: uint64 + < + bz *for_2_end + + // contracts/validatorRegistry.algo.ts:772 + // ourPoolPctOfWhole = wideRatio( + // [this.validatorList(validatorId).value.pools[i].totalAlgoStaked, 1_000_000], + // [totalStakeForValidator], + // ) + int 268 // headOffset + frame_dig 7 // i: uint64 + int 18 + * // acc * typeLength + + + int 10 // headOffset + + + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + int 1_000_000 + mulw + int 0 + frame_dig 6 // totalStakeForValidator: uint64 + divmodw + pop + pop + swap + ! + + // wideRatio failed + assert + frame_bury 8 // ourPoolPctOfWhole: uint64 + + // contracts/validatorRegistry.algo.ts:776 + // this.validatorList(validatorId).value.tokenPayoutRatio.poolPctOfWhole[i] = ourPoolPctOfWhole + int 700 + frame_dig 7 // i: uint64 + int 8 + * // acc * typeLength + + + frame_dig 8 // ourPoolPctOfWhole: uint64 + itob + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + +*for_2_continue: + // contracts/validatorRegistry.algo.ts:767 + // i += 1 + frame_dig 7 // i: uint64 + int 1 + + + frame_bury 7 // i: uint64 + b *for_2 + +*for_2_end: + // contracts/validatorRegistry.algo.ts:778 + // return this.validatorList(validatorId).value.tokenPayoutRatio + int 700 // headOffset + int 200 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + +*setTokenPayoutRatio*return: + // set the subroutine return value + frame_bury 0 + + // pop all local variables from the stack + popn 8 + retsub + +// stakeUpdatedViaRewards((uint64,uint64,uint64),uint64,uint64,uint64,uint64)void +*abi_route_stakeUpdatedViaRewards: + // saturatedBurnToFeeSink: uint64 + txna ApplicationArgs 5 + btoi + + // validatorCommission: uint64 + txna ApplicationArgs 4 + btoi + + // rewardTokenAmountReserved: uint64 + txna ApplicationArgs 3 + btoi + + // algoToAdd: uint64 + txna ApplicationArgs 2 + btoi + + // poolKey: (uint64,uint64,uint64) + txna ApplicationArgs 1 + dup + len + int 24 + == + + // argument 4 (poolKey) for stakeUpdatedViaRewards must be a (uint64,uint64,uint64) + assert + + // execute stakeUpdatedViaRewards((uint64,uint64,uint64),uint64,uint64,uint64,uint64)void + callsub stakeUpdatedViaRewards + int 1 + return + +// stakeUpdatedViaRewards(poolKey: ValidatorPoolKey, algoToAdd: uint64, rewardTokenAmountReserved: uint64, validatorCommission: uint64, saturatedBurnToFeeSink: uint64): void +// +// stakeUpdatedViaRewards is called by Staking pools to inform the validator (us) that a particular amount of total +// stake has been added to the specified pool. This is used to update the stats we have in our PoolInfo storage. +// The calling App id is validated against our pool list as well. +// @param {ValidatorPoolKey} poolKey - ValidatorPoolKey type +// @param {uint64} algoToAdd - amount this validator's total stake increased via rewards +// @param {uint64} rewardTokenAmountReserved - amount this validator's total stake increased via rewards (that should be +// @param {uint64} validatorCommission - the commission amount the validator was paid, if any +// @param {uint64} saturatedBurnToFeeSink - if the pool was in saturated state, the amount sent back to the fee sink. +// seen as 'accounted for/pending spent') +stakeUpdatedViaRewards: + proto 5 0 + + // contracts/validatorRegistry.algo.ts:799 + // this.verifyPoolKeyCaller(poolKey) + frame_dig -1 // poolKey: ValidatorPoolKey + callsub verifyPoolKeyCaller + + // contracts/validatorRegistry.algo.ts:802 + // this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].totalAlgoStaked += algoToAdd + int 268 // headOffset + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 10 // headOffset + + + int 268 // headOffset + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 10 // headOffset + + + int 8 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + frame_dig -2 // algoToAdd: uint64 + + + itob + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:803 + // this.validatorList(poolKey.id).value.state.totalAlgoStaked += algoToAdd + int 252 + dup + int 8 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + frame_dig -2 // algoToAdd: uint64 + + + itob + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:804 + // this.validatorList(poolKey.id).value.state.rewardTokenHeldBack += rewardTokenAmountReserved + int 260 + dup + int 8 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + frame_dig -3 // rewardTokenAmountReserved: uint64 + + + itob + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:806 + // this.totalAlgoStaked.value += algoToAdd + byte 0x7374616b6564 // "staked" + app_global_get + frame_dig -2 // algoToAdd: uint64 + + + byte 0x7374616b6564 // "staked" + swap + app_global_put + + // contracts/validatorRegistry.algo.ts:809 + // this.reverifyNFDOwnership(poolKey.id) + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + callsub reverifyNFDOwnership + retsub + +// stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void +*abi_route_stakeRemoved: + // stakerRemoved: bool + txna ApplicationArgs 5 + dup + len + int 1 + == + + // argument 0 (stakerRemoved) for stakeRemoved must be a bool + assert + int 0 + getbit + + // rewardRemoved: uint64 + txna ApplicationArgs 4 + btoi + + // amountRemoved: uint64 + txna ApplicationArgs 3 + btoi + + // staker: address + txna ApplicationArgs 2 + dup + len + int 32 + == + + // argument 3 (staker) for stakeRemoved must be a address + assert + + // poolKey: (uint64,uint64,uint64) + txna ApplicationArgs 1 + dup + len + int 24 + == + + // argument 4 (poolKey) for stakeRemoved must be a (uint64,uint64,uint64) + assert + + // execute stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void + callsub stakeRemoved + int 1 + return + +// stakeRemoved(poolKey: ValidatorPoolKey, staker: Address, amountRemoved: uint64, rewardRemoved: uint64, stakerRemoved: boolean): void +// +// stakeRemoved is called by Staking pools to inform the validator (us) that a particular amount of total stake has been removed +// from the specified pool. This is used to update the stats we have in our PoolInfo storage. +// If any amount of rewardRemoved is specified, then that amount of reward is sent to the use +// The calling App id is validated against our pool list as well. +// +// @param {ValidatorPoolKey} poolKey calling us from which stake was removed +// @param {Address} staker +// @param {uint64} amountRemoved - algo amount removed +// @param {uint64} rewardRemoved - if applicable, amount of token reward removed (by pool 1 caller) or TO remove and pay out (via pool 1 from different pool caller) +// @param {boolean} stakerRemoved +stakeRemoved: + proto 5 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 3 + + // *if15_condition + // contracts/validatorRegistry.algo.ts:841 + // globals.opcodeBudget < 300 + global OpcodeBudget + int 300 + < + bz *if15_end + + // *if15_consequent + // contracts/validatorRegistry.algo.ts:842 + // increaseOpcodeBudget() + itxn_begin + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + byte b64 CoEB // #pragma version 10; int 1 + dup + itxn_field ApprovalProgram + itxn_field ClearStateProgram + int DeleteApplication + itxn_field OnCompletion + itxn_submit + +*if15_end: + // contracts/validatorRegistry.algo.ts:844 + // this.verifyPoolKeyCaller(poolKey) + frame_dig -1 // poolKey: ValidatorPoolKey + callsub verifyPoolKeyCaller + + // contracts/validatorRegistry.algo.ts:848 + // assert(amountRemoved > 0 || rewardRemoved > 0, 'should only be called if algo or reward was removed') + frame_dig -3 // amountRemoved: uint64 + int 0 + > + dup + bnz *skip_or2 + frame_dig -4 // rewardRemoved: uint64 + int 0 + > + || + +*skip_or2: + // should only be called if algo or reward was removed + assert + + // contracts/validatorRegistry.algo.ts:851 + // this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].totalAlgoStaked -= amountRemoved + int 268 // headOffset + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 10 // headOffset + + + int 268 // headOffset + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 10 // headOffset + + + int 8 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + frame_dig -3 // amountRemoved: uint64 + - + itob + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:852 + // this.validatorList(poolKey.id).value.state.totalAlgoStaked -= amountRemoved + int 252 + dup + int 8 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + frame_dig -3 // amountRemoved: uint64 + - + itob + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:853 + // this.totalAlgoStaked.value -= amountRemoved + byte 0x7374616b6564 // "staked" + app_global_get + frame_dig -3 // amountRemoved: uint64 + - + byte 0x7374616b6564 // "staked" + swap + app_global_put + + // *if16_condition + // contracts/validatorRegistry.algo.ts:855 + // rewardRemoved > 0 + frame_dig -4 // rewardRemoved: uint64 + int 0 + > + bz *if16_else + + // *if16_consequent + // contracts/validatorRegistry.algo.ts:856 + // rewardTokenID = this.validatorList(poolKey.id).value.config.rewardTokenId + int 153 + int 8 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + frame_bury 0 // rewardTokenID: uint64 + + // contracts/validatorRegistry.algo.ts:857 + // assert(rewardTokenID !== 0, "rewardRemoved can't be set if validator doesn't have reward token!") + frame_dig 0 // rewardTokenID: uint64 + int 0 + != + + // rewardRemoved can't be set if validator doesn't have reward token! + assert + + // contracts/validatorRegistry.algo.ts:858 + // assert( + // this.validatorList(poolKey.id).value.state.rewardTokenHeldBack >= rewardRemoved, + // 'reward being removed must be covered by hold back amount', + // ) + int 260 + int 8 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + frame_dig -4 // rewardRemoved: uint64 + >= + + // reward being removed must be covered by hold back amount + assert + + // contracts/validatorRegistry.algo.ts:864 + // this.validatorList(poolKey.id).value.state.rewardTokenHeldBack -= rewardRemoved + int 260 + dup + int 8 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + frame_dig -4 // rewardRemoved: uint64 + - + itob + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + + // *if17_condition + // contracts/validatorRegistry.algo.ts:869 + // poolKey.poolId !== 1 + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + != + bz *if17_end + + // *if17_consequent + // contracts/validatorRegistry.algo.ts:870 + // sendMethodCall({ + // applicationID: AppID.fromUint64(this.validatorList(poolKey.id).value.pools[0].poolAppId), + // methodArgs: [staker, rewardTokenID, rewardRemoved], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "payTokenReward(address,uint64,uint64)void" + itxn_field ApplicationArgs + + // contracts/validatorRegistry.algo.ts:871 + // applicationID: AppID.fromUint64(this.validatorList(poolKey.id).value.pools[0].poolAppId) + int 268 + int 8 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + itxn_field ApplicationID + + // contracts/validatorRegistry.algo.ts:872 + // methodArgs: [staker, rewardTokenID, rewardRemoved] + frame_dig -2 // staker: Address + itxn_field ApplicationArgs + frame_dig 0 // rewardTokenID: uint64 + itob + itxn_field ApplicationArgs + frame_dig -4 // rewardRemoved: uint64 + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + +*if17_end: + b *if16_end + +*if16_else: + +*if16_end: + // *if18_condition + // contracts/validatorRegistry.algo.ts:897 + // stakerRemoved + frame_dig -5 // stakerRemoved: boolean + bz *if18_end + + // *if18_consequent + // contracts/validatorRegistry.algo.ts:899 + // this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].totalStakers -= 1 + int 268 // headOffset + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 8 // headOffset + + + int 268 // headOffset + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 8 // headOffset + + + int 2 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + int 1 + - + itob + extract 6 2 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:901 + // removeRet = this.removeFromStakerPoolSet(staker, { + // id: poolKey.id, + // poolId: poolKey.poolId, + // poolAppId: poolKey.poolAppId, + // }) + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + itob + concat + frame_dig -1 // poolKey: ValidatorPoolKey + extract 16 8 + btoi + itob + concat + frame_dig -2 // staker: Address + callsub removeFromStakerPoolSet + frame_bury 1 // removeRet: (bool,bool) + + // contracts/validatorRegistry.algo.ts:906 + // stakerOutOfThisValidator = removeRet[0] + frame_dig 1 // removeRet: (bool,bool) + store 255 // full array + load 255 // full array + int 0 + getbit + frame_bury 2 // stakerOutOfThisValidator: bool + + // contracts/validatorRegistry.algo.ts:907 + // stakerOutOfProtocol = removeRet[1] + frame_dig 1 // removeRet: (bool,bool) + store 255 // full array + load 255 // full array + int 1 + getbit + frame_bury 3 // stakerOutOfProtocol: bool + + // *if19_condition + // contracts/validatorRegistry.algo.ts:909 + // stakerOutOfThisValidator + frame_dig 2 // stakerOutOfThisValidator: bool + bz *if19_end + + // *if19_consequent + // contracts/validatorRegistry.algo.ts:910 + // this.validatorList(poolKey.id).value.state.totalStakers -= 1 + int 244 + dup + int 8 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + int 1 + - + itob + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + +*if19_end: + // *if20_condition + // contracts/validatorRegistry.algo.ts:913 + // stakerOutOfProtocol + frame_dig 3 // stakerOutOfProtocol: bool + bz *if20_end + + // *if20_consequent + // contracts/validatorRegistry.algo.ts:914 + // this.numStakers.value -= 1 + byte 0x6e756d5374616b657273 // "numStakers" + app_global_get + int 1 + - + byte 0x6e756d5374616b657273 // "numStakers" + swap + app_global_put + +*if20_end: + +*if18_end: + retsub + +// findPoolForStaker(uint64,address,uint64)((uint64,uint64,uint64),bool,bool) +*abi_route_findPoolForStaker: + // The ABI return prefix + byte 0x151f7c75 + + // amountToStake: uint64 + txna ApplicationArgs 3 + btoi + + // staker: address + txna ApplicationArgs 2 + dup + len + int 32 + == + + // argument 1 (staker) for findPoolForStaker must be a address + assert + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute findPoolForStaker(uint64,address,uint64)((uint64,uint64,uint64),bool,bool) + callsub findPoolForStaker + concat + log + int 1 + return + +// findPoolForStaker(validatorId: ValidatorIdType, staker: Address, amountToStake: uint64): [ValidatorPoolKey, boolean, boolean] +// +// Finds the pool for a staker based on the provided validator id, staker address, and amount to stake. +// First checks the stakers 'already staked list' for the validator preferring those (adding if possible) then adds +// to new pool if necessary. +// +// @param {ValidatorIdType} validatorId - The id of the validator. +// @param {Address} staker - The address of the staker. +// @param {uint64} amountToStake - The amount to stake. +// @returns {ValidatorPoolKey, boolean, boolean} - The pool for the staker, true/false on whether the staker is 'new' +// to this VALIDATOR, and true/false if staker is new to the protocol. +findPoolForStaker: + proto 3 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 7 + + // contracts/validatorRegistry.algo.ts:935 + // isNewStakerToValidator = true + int 1 + frame_bury 0 // isNewStakerToValidator: bool + + // contracts/validatorRegistry.algo.ts:936 + // isNewStakerToProtocol = true + int 1 + frame_bury 1 // isNewStakerToProtocol: bool + + // contracts/validatorRegistry.algo.ts:944 + // maxPerPool = this.getCurMaxStakePerPool(validatorId) + frame_dig -1 // validatorId: ValidatorIdType + callsub getCurMaxStakePerPool + frame_bury 2 // maxPerPool: uint64 + + // *if21_condition + // contracts/validatorRegistry.algo.ts:947 + // this.stakerPoolSet(staker).exists + byte 0x737073 // "sps" + frame_dig -2 // staker: Address + concat + box_len + swap + pop + bz *if21_end + + // *if21_consequent + // contracts/validatorRegistry.algo.ts:948 + // poolSet = clone(this.stakerPoolSet(staker).value) + byte 0x737073 // "sps" + frame_dig -2 // staker: Address + concat + box_get + + // box value does not exist: this.stakerPoolSet(staker).value + assert + frame_bury 3 // poolSet: (uint64,uint64,uint64)[6] + + // contracts/validatorRegistry.algo.ts:949 + // assert(validatorId !== 0) + frame_dig -1 // validatorId: ValidatorIdType + int 0 + != + assert + + // contracts/validatorRegistry.algo.ts:950 + // for (let i = 0; i < poolSet.length; i += 1) + int 0 + frame_bury 4 // i: uint64 + +*for_3: + // contracts/validatorRegistry.algo.ts:950 + // i < poolSet.length + frame_dig 4 // i: uint64 + int 6 + < + bz *for_3_end + + // *if22_condition + // contracts/validatorRegistry.algo.ts:951 + // globals.opcodeBudget < 300 + global OpcodeBudget + int 300 + < + bz *if22_end + + // *if22_consequent + // contracts/validatorRegistry.algo.ts:952 + // increaseOpcodeBudget() + itxn_begin + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + byte b64 CoEB // #pragma version 10; int 1 + dup + itxn_field ApprovalProgram + itxn_field ClearStateProgram + int DeleteApplication + itxn_field OnCompletion + itxn_submit + +*if22_end: + // *if23_condition + // contracts/validatorRegistry.algo.ts:954 + // poolSet[i].id === 0 + frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] + frame_dig 4 // i: uint64 + int 24 + * // acc * typeLength + int 0 + + + int 8 + extract3 + btoi + int 0 + == + bz *if23_end + + // *if23_consequent + b *for_3_continue + +*if23_end: + // contracts/validatorRegistry.algo.ts:957 + // isNewStakerToProtocol = false + int 0 + frame_bury 1 // isNewStakerToProtocol: bool + + // *if24_condition + // contracts/validatorRegistry.algo.ts:958 + // poolSet[i].id === validatorId + frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] + frame_dig 4 // i: uint64 + int 24 + * // acc * typeLength + int 0 + + + int 8 + extract3 + btoi + frame_dig -1 // validatorId: ValidatorIdType + == + bz *if24_end + + // *if24_consequent + // contracts/validatorRegistry.algo.ts:960 + // isNewStakerToValidator = false + int 0 + frame_bury 0 // isNewStakerToValidator: bool + + // *if25_condition + // contracts/validatorRegistry.algo.ts:962 + // this.validatorList(validatorId).value.pools[poolSet[i].poolId - 1].totalAlgoStaked + + // amountToStake <= + // maxPerPool + int 268 // headOffset + frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] + frame_dig 4 // i: uint64 + int 24 + * // acc * typeLength + int 8 // headOffset + + + int 8 + extract3 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 10 // headOffset + + + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_dig -3 // amountToStake: uint64 + + + frame_dig 2 // maxPerPool: uint64 + <= + bz *if25_end + + // *if25_consequent + // contracts/validatorRegistry.algo.ts:966 + // return [poolSet[i], isNewStakerToValidator, isNewStakerToProtocol] + frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] + frame_dig 4 // i: uint64 + int 24 + * // acc * typeLength + int 24 + extract3 + byte 0x00 + int 0 + frame_dig 0 // isNewStakerToValidator: bool + setbit + int 1 + frame_dig 1 // isNewStakerToProtocol: bool + setbit + concat + b *findPoolForStaker*return + +*if25_end: + +*if24_end: + +*for_3_continue: + // contracts/validatorRegistry.algo.ts:950 + // i += 1 + frame_dig 4 // i: uint64 + int 1 + + + frame_bury 4 // i: uint64 + b *for_3 + +*for_3_end: + +*if21_end: + // contracts/validatorRegistry.algo.ts:973 + // assert( + // amountToStake >= this.validatorList(validatorId).value.config.minEntryStake, + // 'must stake at least the minimum for this pool', + // ) + frame_dig -3 // amountToStake: uint64 + int 209 + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + >= + + // must stake at least the minimum for this pool + assert + + // contracts/validatorRegistry.algo.ts:979 + // pools = clone(this.validatorList(validatorId).value.pools) + int 268 // headOffset + int 432 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + frame_bury 5 // pools: (uint64,uint16,uint64)[24] + + // contracts/validatorRegistry.algo.ts:980 + // curNumPools = this.validatorList(validatorId).value.state.numPools as uint64 + int 242 + int 2 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 6 // curNumPools: uint64 + + // contracts/validatorRegistry.algo.ts:981 + // for (let i = 0; i < curNumPools; i += 1) + int 0 + frame_bury 7 // i: uint64 + +*for_4: + // contracts/validatorRegistry.algo.ts:981 + // i < curNumPools + frame_dig 7 // i: uint64 + frame_dig 6 // curNumPools: uint64 + < + bz *for_4_end + + // *if26_condition + // contracts/validatorRegistry.algo.ts:982 + // pools[i].totalAlgoStaked + amountToStake <= maxPerPool + frame_dig 5 // pools: (uint64,uint16,uint64)[24] + frame_dig 7 // i: uint64 + int 18 + * // acc * typeLength + int 10 // headOffset + + + int 8 + extract3 + btoi + frame_dig -3 // amountToStake: uint64 + + + frame_dig 2 // maxPerPool: uint64 + <= + bz *if26_end + + // *if26_consequent + // contracts/validatorRegistry.algo.ts:983 + // return [ + // { id: validatorId, poolId: i + 1, poolAppId: pools[i].poolAppId }, + // isNewStakerToValidator, + // isNewStakerToProtocol, + // ] + frame_dig -1 // validatorId: ValidatorIdType + itob + frame_dig 7 // i: uint64 + int 1 + + + itob + concat + frame_dig 5 // pools: (uint64,uint16,uint64)[24] + frame_dig 7 // i: uint64 + int 18 + * // acc * typeLength + int 0 + + + int 8 + extract3 + btoi + itob + concat + byte 0x00 + int 0 + frame_dig 0 // isNewStakerToValidator: bool + setbit + int 1 + frame_dig 1 // isNewStakerToProtocol: bool + setbit + concat + b *findPoolForStaker*return + +*if26_end: + +*for_4_continue: + // contracts/validatorRegistry.algo.ts:981 + // i += 1 + frame_dig 7 // i: uint64 + int 1 + + + frame_bury 7 // i: uint64 + b *for_4 + +*for_4_end: + // contracts/validatorRegistry.algo.ts:991 + // return [{ id: validatorId, poolId: 0, poolAppId: 0 }, isNewStakerToValidator, isNewStakerToProtocol] + frame_dig -1 // validatorId: ValidatorIdType + itob + byte 0x0000000000000000 + concat + byte 0x0000000000000000 + concat + byte 0x00 + int 0 + frame_dig 0 // isNewStakerToValidator: bool + setbit + int 1 + frame_dig 1 // isNewStakerToProtocol: bool + setbit + concat + +*findPoolForStaker*return: + // set the subroutine return value + frame_bury 0 + + // pop all local variables from the stack + popn 7 + retsub + +// movePoolToNode(uint64,uint64,uint64)void +*abi_route_movePoolToNode: + // nodeNum: uint64 + txna ApplicationArgs 3 + btoi + + // poolAppId: uint64 + txna ApplicationArgs 2 + btoi + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute movePoolToNode(uint64,uint64,uint64)void + callsub movePoolToNode + int 1 + return + +// movePoolToNode(validatorId: ValidatorIdType, poolAppId: uint64, nodeNum: uint64): void +// +// Find the specified pool (in any node number) and move it to the specified node. +// The pool account is forced offline if moved so prior node will still run for 320 rounds but +// new key goes online on new node soon after (320 rounds after it goes online) +// No-op if success, asserts if not found or can't move (no space in target) +// [ ONLY OWNER OR MANAGER CAN CHANGE ] +// +// @param {ValidatorIdType} validatorId - The id of the validator. +// @param {uint64} poolAppId +// @param {uint64} nodeNum +movePoolToNode: + proto 3 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 2 + + // contracts/validatorRegistry.algo.ts:1007 + // assert( + // this.txn.sender === this.validatorList(validatorId).value.config.owner || + // this.txn.sender === this.validatorList(validatorId).value.config.manager, + // 'can only be called by owner or manager of validator', + // ) + txn Sender + int 8 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + == + dup + bnz *skip_or3 + txn Sender + int 40 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + == + || + +*skip_or3: + // can only be called by owner or manager of validator + assert + + // contracts/validatorRegistry.algo.ts:1013 + // nodePoolAssignments = clone(this.validatorList(validatorId).value.nodePoolAssignments) + int 900 // headOffset + int 192 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + frame_bury 0 // nodePoolAssignments: ((uint64[3])[8]) + + // contracts/validatorRegistry.algo.ts:1014 + // assert(nodeNum >= 1 && nodeNum <= MAX_NODES, 'node number out of allowable range') + frame_dig -3 // nodeNum: uint64 + int 1 + >= + dup + bz *skip_and1 + frame_dig -3 // nodeNum: uint64 + int 8 + <= + && + +*skip_and1: + // node number out of allowable range + assert + + // contracts/validatorRegistry.algo.ts:1016 + // for (let srcNodeIdx = 0; srcNodeIdx < MAX_NODES; srcNodeIdx += 1) + int 0 + frame_bury 1 // srcNodeIdx: uint64 + +*for_5: + // contracts/validatorRegistry.algo.ts:1016 + // srcNodeIdx < MAX_NODES + frame_dig 1 // srcNodeIdx: uint64 + int 8 + < + bz *for_5_end + + // contracts/validatorRegistry.algo.ts:1017 + // for (let i = 0; i < MAX_POOLS_PER_NODE; i += 1) + int 0 + frame_bury 2 // i: uint64 + +*for_6: + // contracts/validatorRegistry.algo.ts:1017 + // i < MAX_POOLS_PER_NODE + frame_dig 2 // i: uint64 + int 3 + < + bz *for_6_end + + // *if27_condition + // contracts/validatorRegistry.algo.ts:1018 + // nodePoolAssignments.nodes[srcNodeIdx].poolAppIds[i] === poolAppId + frame_dig 0 // nodePoolAssignments: ((uint64[3])[8]) + int 0 + frame_dig 1 // srcNodeIdx: uint64 + int 24 + * // acc * typeLength + + + int 0 + + + frame_dig 2 // i: uint64 + int 8 + * // acc * typeLength + + + int 8 + extract3 + btoi + frame_dig -2 // poolAppId: uint64 + == + bz *if27_end + + // *if27_consequent + // contracts/validatorRegistry.algo.ts:1019 + // assert(nodeNum - 1 !== srcNodeIdx, "can't move to same node") + frame_dig -3 // nodeNum: uint64 + int 1 + - + frame_dig 1 // srcNodeIdx: uint64 + != + + // can't move to same node + assert + + // contracts/validatorRegistry.algo.ts:1021 + // this.validatorList(validatorId).value.nodePoolAssignments.nodes[srcNodeIdx].poolAppIds[i] = 0 + int 900 + frame_dig 1 // srcNodeIdx: uint64 + int 24 + * // acc * typeLength + + + int 0 + + + frame_dig 2 // i: uint64 + int 8 + * // acc * typeLength + + + byte 0x0000000000000000 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:1024 + // sendMethodCall({ + // applicationID: AppID.fromUint64(poolAppId), + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "goOffline()void" + itxn_field ApplicationArgs + + // contracts/validatorRegistry.algo.ts:1025 + // applicationID: AppID.fromUint64(poolAppId) + frame_dig -2 // poolAppId: uint64 + itxn_field ApplicationID + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/validatorRegistry.algo.ts:1029 + // this.addPoolToNode(validatorId, poolAppId, nodeNum) + frame_dig -3 // nodeNum: uint64 + frame_dig -2 // poolAppId: uint64 + frame_dig -1 // validatorId: ValidatorIdType + callsub addPoolToNode + + // contracts/validatorRegistry.algo.ts:1030 + // return + retsub + +*if27_end: + +*for_6_continue: + // contracts/validatorRegistry.algo.ts:1017 + // i += 1 + frame_dig 2 // i: uint64 + int 1 + + + frame_bury 2 // i: uint64 + b *for_6 + +*for_6_end: + +*for_5_continue: + // contracts/validatorRegistry.algo.ts:1016 + // srcNodeIdx += 1 + frame_dig 1 // srcNodeIdx: uint64 + int 1 + + + frame_bury 1 // srcNodeIdx: uint64 + b *for_5 + +*for_5_end: + // couldn't find pool app id in nodes to move + err + retsub + +// emptyTokenRewards(uint64,address)uint64 +*abi_route_emptyTokenRewards: + // The ABI return prefix + byte 0x151f7c75 + + // receiver: address + txna ApplicationArgs 2 + dup + len + int 32 + == + + // argument 0 (receiver) for emptyTokenRewards must be a address + assert + + // validatorId: uint64 + txna ApplicationArgs 1 + btoi + + // execute emptyTokenRewards(uint64,address)uint64 + callsub emptyTokenRewards + itob + concat + log + int 1 + return + +// emptyTokenRewards(validatorId: ValidatorIdType, receiver: Address): uint64 +// +// Sends the reward tokens held in pool 1 to specified receiver. +// This is intended to be used by the owner when they want to get reward tokens 'back' which they sent to +// the first pool (likely because validator is sunsetting. Any tokens currently 'reserved' for stakers to claim will +// NOT be sent as they must be held back for stakers to later claim. +// [ ONLY OWNER CAN CALL] +// +// @param {ValidatorIdType} validatorId - The id of the validator. +// @param {Address} receiver - the account to send the tokens to (must already be opted-in to the reward token) +// @returns {uint64} the amount of reward token sent +emptyTokenRewards: + proto 2 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 3 + + // contracts/validatorRegistry.algo.ts:1049 + // assert( + // this.txn.sender === this.validatorList(validatorId).value.config.owner, + // 'can only be called by validator owner', + // ) + txn Sender + int 8 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + == + + // can only be called by validator owner + assert + + // contracts/validatorRegistry.algo.ts:1053 + // rewardTokenId = this.validatorList(validatorId).value.config.rewardTokenId + int 153 + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 0 // rewardTokenId: uint64 + + // contracts/validatorRegistry.algo.ts:1054 + // rewardTokenHeldBack = this.validatorList(validatorId).value.state.rewardTokenHeldBack + int 260 + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 1 // rewardTokenHeldBack: uint64 + + // contracts/validatorRegistry.algo.ts:1055 + // assert(rewardTokenId !== 0, "this validator doesn't have a reward token defined") + frame_dig 0 // rewardTokenId: uint64 + int 0 + != + + // this validator doesn't have a reward token defined + assert + + // contracts/validatorRegistry.algo.ts:1056 + // poolOneAppId = AppID.fromUint64(this.validatorList(validatorId).value.pools[0].poolAppId) + int 268 + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 2 // poolOneAppId: uint64 + + // contracts/validatorRegistry.algo.ts:1058 + // tokenRewardBal = + // poolOneAppId.address.assetBalance(AssetID.fromUint64(rewardTokenId)) - rewardTokenHeldBack + frame_dig 2 // poolOneAppId: uint64 + app_params_get AppAddress + pop + frame_dig 0 // rewardTokenId: uint64 + asset_holding_get AssetBalance + pop + frame_dig 1 // rewardTokenHeldBack: uint64 + - + frame_bury 3 // tokenRewardBal: uint64 + + // contracts/validatorRegistry.algo.ts:1062 + // sendMethodCall({ + // applicationID: poolOneAppId, + // methodArgs: [receiver, rewardTokenId, tokenRewardBal], + // }) + itxn_begin + int appl + itxn_field TypeEnum + method "payTokenReward(address,uint64,uint64)void" + itxn_field ApplicationArgs + + // contracts/validatorRegistry.algo.ts:1063 + // applicationID: poolOneAppId + frame_dig 2 // poolOneAppId: uint64 + itxn_field ApplicationID + + // contracts/validatorRegistry.algo.ts:1064 + // methodArgs: [receiver, rewardTokenId, tokenRewardBal] + frame_dig -2 // receiver: Address + itxn_field ApplicationArgs + frame_dig 0 // rewardTokenId: uint64 + itob + itxn_field ApplicationArgs + frame_dig 3 // tokenRewardBal: uint64 + itob + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/validatorRegistry.algo.ts:1066 + // assert( + // poolOneAppId.address.assetBalance(AssetID.fromUint64(rewardTokenId)) === rewardTokenHeldBack, + // 'balance of remaining reward tokens should match the held back amount', + // ) + frame_dig 2 // poolOneAppId: uint64 + app_params_get AppAddress + pop + frame_dig 0 // rewardTokenId: uint64 + asset_holding_get AssetBalance + pop + frame_dig 1 // rewardTokenHeldBack: uint64 + == + + // balance of remaining reward tokens should match the held back amount + assert + + // contracts/validatorRegistry.algo.ts:1070 + // return tokenRewardBal + frame_dig 3 // tokenRewardBal: uint64 + + // set the subroutine return value + frame_bury 0 + + // pop all local variables from the stack + popn 3 + retsub + +// verifyPoolKeyCaller(poolKey: ValidatorPoolKey): void +// +// Logs the addition of a new validator to the system, its initial owner and manager +// +// +// verifyPoolKeyCaller verifies the passed in key (from a staking pool calling us to update metrics) is valid +// and matches the information we have in our state. 'Fake' pools could call us to update our data, but they +// can't fake the ids and most importantly application id(!) of the caller that has to match. +verifyPoolKeyCaller: + proto 1 0 + + // contracts/validatorRegistry.algo.ts:1168 + // assert(this.validatorList(poolKey.id).exists, "the specified validator id isn't valid") + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + box_len + swap + pop + + // the specified validator id isn't valid + assert + + // contracts/validatorRegistry.algo.ts:1169 + // assert(poolKey.poolId <= MAX_POOLS, 'pool id not in valid range') + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 24 + <= + + // pool id not in valid range + assert + + // contracts/validatorRegistry.algo.ts:1170 + // assert( + // poolKey.poolId > 0 && (poolKey.poolId as uint16) <= this.validatorList(poolKey.id).value.state.numPools, + // 'pool id outside of range of pools created for this validator', + // ) + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 0 + > + dup + bz *skip_and2 + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 242 + int 2 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + <= + && + +*skip_and2: + // pool id outside of range of pools created for this validator + assert + + // contracts/validatorRegistry.algo.ts:1176 + // assert( + // poolKey.poolAppId === this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].poolAppId, + // "The passed in app id doesn't match the passed in ids", + // ) + frame_dig -1 // poolKey: ValidatorPoolKey + extract 16 8 + btoi + int 268 // headOffset + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 0 + + + int 8 + byte 0x76 // "v" + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + == + + // The passed in app id doesn't match the passed in ids + assert + + // contracts/validatorRegistry.algo.ts:1181 + // assert(this.txn.sender === AppID.fromUint64(poolKey.poolAppId).address) + txn Sender + frame_dig -1 // poolKey: ValidatorPoolKey + extract 16 8 + btoi + app_params_get AppAddress + pop + == + assert + + // contracts/validatorRegistry.algo.ts:1183 + // assert(poolKey.id === (AppID.fromUint64(poolKey.poolAppId).globalState('validatorId') as uint64)) + frame_dig -1 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + frame_dig -1 // poolKey: ValidatorPoolKey + extract 16 8 + btoi + byte 0x76616c696461746f724964 // "validatorId" + app_global_get_ex + + // global state value does not exist: AppID.fromUint64(poolKey.poolAppId).globalState('validatorId') + assert + == + assert + + // contracts/validatorRegistry.algo.ts:1184 + // assert(poolKey.poolId === (AppID.fromUint64(poolKey.poolAppId).globalState('poolId') as uint64)) + frame_dig -1 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + frame_dig -1 // poolKey: ValidatorPoolKey + extract 16 8 + btoi + byte 0x706f6f6c4964 // "poolId" + app_global_get_ex + + // global state value does not exist: AppID.fromUint64(poolKey.poolAppId).globalState('poolId') + assert + == + assert + retsub + +// reverifyNFDOwnership(validatorId: ValidatorIdType): void +// +// This method verifies the ownership of NFD (Named Function Data) by a validator. +// If the ownership is no longer valid, it removes the NFD from the validator's configuration. +// +// @param {ValidatorIdType} validatorId - The id of the validator whose data should be re-evaluated. +reverifyNFDOwnership: + proto 1 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dup + + // contracts/validatorRegistry.algo.ts:1194 + // validatorConfig = this.validatorList(validatorId).value.config + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + frame_bury 0 // storage key//validatorConfig + + // *if28_condition + // contracts/validatorRegistry.algo.ts:1195 + // validatorConfig.nfdForInfo !== 0 + int 72 + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + int 0 + != + bz *if28_end + + // *if28_consequent + // contracts/validatorRegistry.algo.ts:1198 + // nfdOwner = AppID.fromUint64(validatorConfig.nfdForInfo).globalState('i.owner.a') as Address + int 72 + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + byte 0x692e6f776e65722e61 // "i.owner.a" + app_global_get_ex + + // global state value does not exist: AppID.fromUint64(validatorConfig.nfdForInfo).globalState('i.owner.a') + assert + frame_bury 1 // nfdOwner: address + + // *if29_condition + // contracts/validatorRegistry.algo.ts:1200 + // validatorConfig.owner !== nfdOwner && validatorConfig.manager !== nfdOwner + int 8 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + frame_dig 1 // nfdOwner: address + != + dup + bz *skip_and3 + int 40 + int 32 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + frame_dig 1 // nfdOwner: address + != + && + +*skip_and3: + bz *if29_end + + // *if29_consequent + // contracts/validatorRegistry.algo.ts:1202 + // this.validatorList(validatorId).value.config.nfdForInfo = 0 + int 72 + byte 0x0000000000000000 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + +*if29_end: + +*if28_end: + retsub + +// validateConfig(config: ValidatorConfig): void +validateConfig: + proto 1 0 + + // contracts/validatorRegistry.algo.ts:1209 + // assert( + // config.entryGatingType >= GATING_TYPE_NONE && config.entryGatingType <= GATING_TYPE_CONST_MAX, + // 'gating type not valid', + // ) + frame_dig -1 // config: ValidatorConfig + extract 80 1 + btoi + int 0 + >= + dup + bz *skip_and4 + frame_dig -1 // config: ValidatorConfig + extract 80 1 + btoi + int 4 + <= + && + +*skip_and4: + // gating type not valid + assert + + // contracts/validatorRegistry.algo.ts:1213 + // assert( + // config.epochRoundLength >= MIN_EPOCH_LENGTH && config.epochRoundLength <= MAX_EPOCH_LENGTH, + // 'epoch length not in allowable range', + // ) + frame_dig -1 // config: ValidatorConfig + extract 169 4 + btoi + int 1 + >= + dup + bz *skip_and5 + frame_dig -1 // config: ValidatorConfig + extract 169 4 + btoi + int 1000000 + <= + && + +*skip_and5: + // epoch length not in allowable range + assert + + // contracts/validatorRegistry.algo.ts:1217 + // assert( + // config.percentToValidator >= MIN_PCT_TO_VALIDATOR && config.percentToValidator <= MAX_PCT_TO_VALIDATOR, + // 'commission percentage not valid', + // ) + frame_dig -1 // config: ValidatorConfig + extract 173 4 + btoi + int 0 + >= + dup + bz *skip_and6 + frame_dig -1 // config: ValidatorConfig + extract 173 4 + btoi + int 1000000 + <= + && + +*skip_and6: + // commission percentage not valid + assert + + // *if30_condition + // contracts/validatorRegistry.algo.ts:1221 + // config.percentToValidator !== 0 + frame_dig -1 // config: ValidatorConfig + extract 173 4 + btoi + int 0 + != + bz *if30_end + + // *if30_consequent + // contracts/validatorRegistry.algo.ts:1222 + // assert( + // config.validatorCommissionAddress !== Address.zeroAddress, + // 'validatorCommissionAddress must be set if percent to validator is not 0', + // ) + frame_dig -1 // config: ValidatorConfig + extract 177 32 + global ZeroAddress + != + + // validatorCommissionAddress must be set if percent to validator is not 0 + assert + +*if30_end: + // contracts/validatorRegistry.algo.ts:1227 + // assert(config.minEntryStake >= MIN_ALGO_STAKE_PER_POOL, 'staking pool must have minimum entry of 1 algo') + frame_dig -1 // config: ValidatorConfig + extract 209 8 + btoi + int 1000000 + >= + + // staking pool must have minimum entry of 1 algo + assert + + // contracts/validatorRegistry.algo.ts:1229 + // assert( + // config.poolsPerNode > 0 && config.poolsPerNode <= MAX_POOLS_PER_NODE, + // 'number of pools per node exceeds allowed number', + // ) + frame_dig -1 // config: ValidatorConfig + extract 225 1 + btoi + int 0 + > + dup + bz *skip_and7 + frame_dig -1 // config: ValidatorConfig + extract 225 1 + btoi + int 3 + <= + && + +*skip_and7: + // number of pools per node exceeds allowed number + assert + + // *if31_condition + // contracts/validatorRegistry.algo.ts:1233 + // config.sunsettingOn !== 0 + frame_dig -1 // config: ValidatorConfig + extract 226 8 + btoi + int 0 + != + bz *if31_end + + // *if31_consequent + // contracts/validatorRegistry.algo.ts:1234 + // assert(config.sunsettingOn > globals.latestTimestamp, 'sunsettingOn must be later than now if set') + frame_dig -1 // config: ValidatorConfig + extract 226 8 + btoi + global LatestTimestamp + > + + // sunsettingOn must be later than now if set + assert + +*if31_end: + retsub + +// callPoolAddStake(stakedAmountPayment: PayTxn, poolKey: ValidatorPoolKey, mbrAmtPaid: uint64, isNewStakerToValidator: boolean, isNewStakerToProtocol: boolean): void +// +// Adds a stakers amount of algo to a validator pool, transferring the algo we received from them (already verified +// by our caller) to the staking pool account, and then telling it about the amount being added for the specified +// staker. +// +// @param {PayTxn} stakedAmountPayment - payment coming from staker to place into a pool +// @param {ValidatorPoolKey} poolKey - The key of the validator pool. +// @param {uint64} mbrAmtPaid - Amount the user is leaving behind in the validator to pay for their staker MBR cost +// @param {boolean} isNewStakerToValidator - if this is a new, first-time staker to the validator +// @param {boolean} isNewStakerToProtocol - if this is a new, first-time staker to the protocol +callPoolAddStake: + proto 5 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 2 + + // contracts/validatorRegistry.algo.ts:1256 + // poolAppId = this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].poolAppId + int 268 // headOffset + frame_dig -2 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 0 + + + int 8 + byte 0x76 // "v" + frame_dig -2 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + frame_bury 0 // poolAppId: uint64 + + // contracts/validatorRegistry.algo.ts:1260 + // sendMethodCall({ + // applicationID: AppID.fromUint64(poolAppId), + // methodArgs: [ + // // ======= + // // THIS IS A SEND of the amount received right back out and into the staking pool contract account. + // { amount: stakedAmountPayment.amount - mbrAmtPaid, receiver: AppID.fromUint64(poolAppId).address }, + // // ======= + // stakedAmountPayment.sender, + // ], + // }) + itxn_begin + int pay + itxn_field TypeEnum + + // contracts/validatorRegistry.algo.ts:1265 + // amount: stakedAmountPayment.amount - mbrAmtPaid + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Amount + frame_dig -3 // mbrAmtPaid: uint64 + - + itxn_field Amount + + // contracts/validatorRegistry.algo.ts:1265 + // receiver: AppID.fromUint64(poolAppId).address + frame_dig 0 // poolAppId: uint64 + app_params_get AppAddress + pop + itxn_field Receiver + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + itxn_next + int appl + itxn_field TypeEnum + method "addStake(pay,address)uint64" + itxn_field ApplicationArgs + + // contracts/validatorRegistry.algo.ts:1261 + // applicationID: AppID.fromUint64(poolAppId) + frame_dig 0 // poolAppId: uint64 + itxn_field ApplicationID + + // contracts/validatorRegistry.algo.ts:1262 + // methodArgs: [ + // // ======= + // // THIS IS A SEND of the amount received right back out and into the staking pool contract account. + // { amount: stakedAmountPayment.amount - mbrAmtPaid, receiver: AppID.fromUint64(poolAppId).address }, + // // ======= + // stakedAmountPayment.sender, + // ] + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Sender + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + itxn NumLogs + int 1 + - + itxnas Logs + extract 4 0 + btoi + + // *if32_condition + // contracts/validatorRegistry.algo.ts:1270 + // globals.opcodeBudget < 500 + global OpcodeBudget + int 500 + < + bz *if32_end + + // *if32_consequent + // contracts/validatorRegistry.algo.ts:1271 + // increaseOpcodeBudget() + itxn_begin + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + byte b64 CoEB // #pragma version 10; int 1 + dup + itxn_field ApprovalProgram + itxn_field ClearStateProgram + int DeleteApplication + itxn_field OnCompletion + itxn_submit + +*if32_end: + // contracts/validatorRegistry.algo.ts:1275 + // poolNumStakers = AppID.fromUint64(poolAppId).globalState('numStakers') as uint64 + frame_dig 0 // poolAppId: uint64 + byte 0x6e756d5374616b657273 // "numStakers" + app_global_get_ex + + // global state value does not exist: AppID.fromUint64(poolAppId).globalState('numStakers') + assert + frame_bury 1 // poolNumStakers: uint64 + + // contracts/validatorRegistry.algo.ts:1276 + // poolAlgoStaked = AppID.fromUint64(poolAppId).globalState('staked') as uint64 + frame_dig 0 // poolAppId: uint64 + byte 0x7374616b6564 // "staked" + app_global_get_ex + + // global state value does not exist: AppID.fromUint64(poolAppId).globalState('staked') + assert + frame_bury 2 // poolAlgoStaked: uint64 + + // contracts/validatorRegistry.algo.ts:1277 + // this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].totalStakers = poolNumStakers as uint16 + int 268 // headOffset + frame_dig -2 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 8 // headOffset + + + frame_dig 1 // poolNumStakers: uint64 + itob + extract 6 2 + byte 0x76 // "v" + frame_dig -2 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:1278 + // this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].totalAlgoStaked = poolAlgoStaked + int 268 // headOffset + frame_dig -2 // poolKey: ValidatorPoolKey + extract 8 8 + btoi + int 1 + - + int 18 + * // acc * typeLength + + + int 10 // headOffset + + + frame_dig 2 // poolAlgoStaked: uint64 + itob + byte 0x76 // "v" + frame_dig -2 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + + // *if33_condition + // contracts/validatorRegistry.algo.ts:1281 + // isNewStakerToValidator + frame_dig -4 // isNewStakerToValidator: boolean + bz *if33_end + + // *if33_consequent + // contracts/validatorRegistry.algo.ts:1282 + // this.validatorList(poolKey.id).value.state.totalStakers += 1 + int 244 + dup + int 8 + byte 0x76 // "v" + frame_dig -2 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + int 1 + + + itob + byte 0x76 // "v" + frame_dig -2 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + +*if33_end: + // *if34_condition + // contracts/validatorRegistry.algo.ts:1284 + // isNewStakerToProtocol + frame_dig -5 // isNewStakerToProtocol: boolean + bz *if34_end + + // *if34_consequent + // contracts/validatorRegistry.algo.ts:1285 + // this.numStakers.value += 1 + byte 0x6e756d5374616b657273 // "numStakers" + app_global_get + int 1 + + + byte 0x6e756d5374616b657273 // "numStakers" + swap + app_global_put + +*if34_end: + // contracts/validatorRegistry.algo.ts:1287 + // this.validatorList(poolKey.id).value.state.totalAlgoStaked += stakedAmountPayment.amount - mbrAmtPaid + int 252 + dup + int 8 + byte 0x76 // "v" + frame_dig -2 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_extract + btoi + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Amount + frame_dig -3 // mbrAmtPaid: uint64 + - + + + itob + byte 0x76 // "v" + frame_dig -2 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:1288 + // this.totalAlgoStaked.value += stakedAmountPayment.amount - mbrAmtPaid + byte 0x7374616b6564 // "staked" + app_global_get + frame_dig -1 // stakedAmountPayment: PayTxn + gtxns Amount + frame_dig -3 // mbrAmtPaid: uint64 + - + + + byte 0x7374616b6564 // "staked" + swap + app_global_put + retsub + +// updateStakerPoolSet(staker: Address, poolKey: ValidatorPoolKey): void +updateStakerPoolSet: + proto 2 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 2 + + // contracts/validatorRegistry.algo.ts:1292 + // assert(this.stakerPoolSet(staker).exists) + byte 0x737073 // "sps" + frame_dig -1 // staker: Address + concat + box_len + swap + pop + assert + + // contracts/validatorRegistry.algo.ts:1294 + // poolSet = clone(this.stakerPoolSet(staker).value) + byte 0x737073 // "sps" + frame_dig -1 // staker: Address + concat + box_get + + // box value does not exist: this.stakerPoolSet(staker).value + assert + frame_bury 0 // poolSet: (uint64,uint64,uint64)[6] + + // contracts/validatorRegistry.algo.ts:1295 + // firstEmpty = 0 + int 0 + frame_bury 1 // firstEmpty: uint64 + + // contracts/validatorRegistry.algo.ts:1296 + // for (let i = 0; i < this.stakerPoolSet(staker).value.length; i += 1) + int 0 + frame_bury 2 // i: uint64 + +*for_7: + // contracts/validatorRegistry.algo.ts:1296 + // i < this.stakerPoolSet(staker).value.length + frame_dig 2 // i: uint64 + int 6 + < + bz *for_7_end + + // *if35_condition + // contracts/validatorRegistry.algo.ts:1297 + // poolSet[i] === poolKey + frame_dig 0 // poolSet: (uint64,uint64,uint64)[6] + frame_dig 2 // i: uint64 + int 24 + * // acc * typeLength + int 24 + extract3 + frame_dig -2 // poolKey: ValidatorPoolKey + == + bz *if35_end + + // *if35_consequent + // contracts/validatorRegistry.algo.ts:1299 + // return + retsub + +*if35_end: + // *if36_condition + // contracts/validatorRegistry.algo.ts:1301 + // firstEmpty === 0 && poolSet[i].id === 0 + frame_dig 1 // firstEmpty: uint64 + int 0 + == + dup + bz *skip_and8 + frame_dig 0 // poolSet: (uint64,uint64,uint64)[6] + frame_dig 2 // i: uint64 + int 24 + * // acc * typeLength + int 0 + + + int 8 + extract3 + btoi + int 0 + == + && + +*skip_and8: + bz *if36_end + + // *if36_consequent + // contracts/validatorRegistry.algo.ts:1302 + // firstEmpty = i + 1 + frame_dig 2 // i: uint64 + int 1 + + + frame_bury 1 // firstEmpty: uint64 + +*if36_end: + +*for_7_continue: + // contracts/validatorRegistry.algo.ts:1296 + // i += 1 + frame_dig 2 // i: uint64 + int 1 + + + frame_bury 2 // i: uint64 + b *for_7 + +*for_7_end: + // *if37_condition + // contracts/validatorRegistry.algo.ts:1305 + // firstEmpty === 0 + frame_dig 1 // firstEmpty: uint64 + int 0 + == + bz *if37_end + + // *if37_consequent + // No empty slot available in the staker pool set + err + +*if37_end: + // contracts/validatorRegistry.algo.ts:1308 + // this.stakerPoolSet(staker).value[firstEmpty - 1] = poolKey + frame_dig 1 // firstEmpty: uint64 + int 1 + - + int 24 + * // acc * typeLength + frame_dig -2 // poolKey: ValidatorPoolKey + byte 0x737073 // "sps" + frame_dig -1 // staker: Address + concat + cover 2 + box_replace + retsub + +// removeFromStakerPoolSet(staker: Address, poolKey: ValidatorPoolKey): [boolean, boolean] +// +// Removes a pool key from the staker's active pool set - fails if not found (!) +// +// @param {Address} staker - The address of the staker. +// @param {ValidatorPoolKey} poolKey - The pool key they should be stored in +// +// @return [boolean, boolean] [is the staker gone from ALL pools of the given VALIDATOR, and is staker gone from ALL pools] +removeFromStakerPoolSet: + proto 2 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 4 + + // contracts/validatorRegistry.algo.ts:1321 + // inSameValidatorPoolCount = 0 + int 0 + frame_bury 0 // inSameValidatorPoolCount: uint64 + + // contracts/validatorRegistry.algo.ts:1322 + // inAnyPoolCount = 0 + int 0 + frame_bury 1 // inAnyPoolCount: uint64 + + // contracts/validatorRegistry.algo.ts:1323 + // found = false + int 0 + frame_bury 2 // found: bool + + // contracts/validatorRegistry.algo.ts:1325 + // poolSet = clone(this.stakerPoolSet(staker).value) + byte 0x737073 // "sps" + frame_dig -1 // staker: Address + concat + box_get + + // box value does not exist: this.stakerPoolSet(staker).value + assert + frame_bury 3 // poolSet: (uint64,uint64,uint64)[6] + + // contracts/validatorRegistry.algo.ts:1326 + // for (let i = 0; i < this.stakerPoolSet(staker).value.length; i += 1) + int 0 + frame_bury 4 // i: uint64 + +*for_8: + // contracts/validatorRegistry.algo.ts:1326 + // i < this.stakerPoolSet(staker).value.length + frame_dig 4 // i: uint64 + int 6 + < + bz *for_8_end + + // *if38_condition + // contracts/validatorRegistry.algo.ts:1327 + // poolSet[i].id === 0 + frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] + frame_dig 4 // i: uint64 + int 24 + * // acc * typeLength + int 0 + + + int 8 + extract3 + btoi + int 0 + == + bz *if38_end + + // *if38_consequent + b *for_8_continue + +*if38_end: + // contracts/validatorRegistry.algo.ts:1330 + // inAnyPoolCount += 1 + frame_dig 1 // inAnyPoolCount: uint64 + int 1 + + + frame_bury 1 // inAnyPoolCount: uint64 + + // *if39_condition + // contracts/validatorRegistry.algo.ts:1331 + // poolSet[i].id === poolKey.id + frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] + frame_dig 4 // i: uint64 + int 24 + * // acc * typeLength + int 0 + + + int 8 + extract3 + btoi + frame_dig -2 // poolKey: ValidatorPoolKey + extract 0 8 + btoi + == + bz *if39_end + + // *if39_consequent + // *if40_condition + // contracts/validatorRegistry.algo.ts:1332 + // poolSet[i] === poolKey + frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] + frame_dig 4 // i: uint64 + int 24 + * // acc * typeLength + int 24 + extract3 + frame_dig -2 // poolKey: ValidatorPoolKey + == + bz *if40_else + + // *if40_consequent + // contracts/validatorRegistry.algo.ts:1333 + // found = true + int 1 + frame_bury 2 // found: bool + + // contracts/validatorRegistry.algo.ts:1335 + // this.stakerPoolSet(staker).value[i] = { id: 0, poolId: 0, poolAppId: 0 } + frame_dig 4 // i: uint64 + int 24 + * // acc * typeLength + byte 0x000000000000000000000000000000000000000000000000 + byte 0x737073 // "sps" + frame_dig -1 // staker: Address + concat + cover 2 + box_replace + b *if40_end + +*if40_else: + // contracts/validatorRegistry.algo.ts:1337 + // inSameValidatorPoolCount += 1 + frame_dig 0 // inSameValidatorPoolCount: uint64 + int 1 + + + frame_bury 0 // inSameValidatorPoolCount: uint64 + +*if40_end: + +*if39_end: + +*for_8_continue: + // contracts/validatorRegistry.algo.ts:1326 + // i += 1 + frame_dig 4 // i: uint64 + int 1 + + + frame_bury 4 // i: uint64 + b *for_8 + +*for_8_end: + // *if41_condition + // contracts/validatorRegistry.algo.ts:1341 + // !found + frame_dig 2 // found: bool + ! + bz *if41_end + + // *if41_consequent + // No matching slot found when told to remove a pool from the stakers set + err + +*if41_end: + // contracts/validatorRegistry.algo.ts:1345 + // return [inSameValidatorPoolCount === 0, inAnyPoolCount === 0] + byte 0x00 + int 0 + frame_dig 0 // inSameValidatorPoolCount: uint64 + int 0 + == + setbit + int 1 + frame_dig 1 // inAnyPoolCount: uint64 + int 0 + == + setbit + + // set the subroutine return value + frame_bury 0 + + // pop all local variables from the stack + popn 4 + retsub + +// addPoolToNode(validatorId: ValidatorIdType, poolAppId: uint64, nodeNum: uint64): void +addPoolToNode: + proto 3 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 2 + + // contracts/validatorRegistry.algo.ts:1349 + // nodePoolAssignments = clone(this.validatorList(validatorId).value.nodePoolAssignments) + int 900 // headOffset + int 192 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + frame_bury 0 // nodePoolAssignments: ((uint64[3])[8]) + + // contracts/validatorRegistry.algo.ts:1350 + // maxPoolsPerNodeForThisValidator = this.validatorList(validatorId).value.config.poolsPerNode as uint64 + int 225 + int 1 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 1 // maxPoolsPerNodeForThisValidator: uint64 + + // contracts/validatorRegistry.algo.ts:1352 + // assert(nodeNum >= 1 && nodeNum <= MAX_NODES, 'node number not in valid range') + frame_dig -3 // nodeNum: uint64 + int 1 + >= + dup + bz *skip_and9 + frame_dig -3 // nodeNum: uint64 + int 8 + <= + && + +*skip_and9: + // node number not in valid range + assert + + // contracts/validatorRegistry.algo.ts:1354 + // for (let i = 0; i < maxPoolsPerNodeForThisValidator; i += 1) + int 0 + frame_bury 2 // i: uint64 + +*for_9: + // contracts/validatorRegistry.algo.ts:1354 + // i < maxPoolsPerNodeForThisValidator + frame_dig 2 // i: uint64 + frame_dig 1 // maxPoolsPerNodeForThisValidator: uint64 + < + bz *for_9_end + + // *if42_condition + // contracts/validatorRegistry.algo.ts:1355 + // nodePoolAssignments.nodes[nodeNum - 1].poolAppIds[i] === 0 + frame_dig 0 // nodePoolAssignments: ((uint64[3])[8]) + int 0 + frame_dig -3 // nodeNum: uint64 + int 1 + - + int 24 + * // acc * typeLength + + + int 0 + + + frame_dig 2 // i: uint64 + int 8 + * // acc * typeLength + + + int 8 + extract3 + btoi + int 0 + == + bz *if42_end + + // *if42_consequent + // contracts/validatorRegistry.algo.ts:1357 + // this.validatorList(validatorId).value.nodePoolAssignments.nodes[nodeNum - 1].poolAppIds[i] = poolAppId + int 900 + frame_dig -3 // nodeNum: uint64 + int 1 + - + int 24 + * // acc * typeLength + + + int 0 + + + frame_dig 2 // i: uint64 + int 8 + * // acc * typeLength + + + frame_dig -2 // poolAppId: uint64 + itob + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_replace + + // contracts/validatorRegistry.algo.ts:1358 + // return + retsub + +*if42_end: + +*for_9_continue: + // contracts/validatorRegistry.algo.ts:1354 + // i += 1 + frame_dig 2 // i: uint64 + int 1 + + + frame_bury 2 // i: uint64 + b *for_9 + +*for_9_end: + // no available space in specified node for this pool + err + retsub + +// doesStakerMeetGating(validatorId: ValidatorIdType, valueToVerify: uint64): void +// +// Checks if a staker meets the gating requirements specified by the validator. +// +// @param {ValidatorIdType} validatorId - The id of the validator. +// @param {uint64} valueToVerify - The value to verify against the gating requirements. +// @returns {void} or asserts if requirements not met. +doesStakerMeetGating: + proto 2 0 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 8 + + // contracts/validatorRegistry.algo.ts:1372 + // type = this.validatorList(validatorId).value.config.entryGatingType + int 80 + int 1 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 0 // type: uint8 + + // *if43_condition + // contracts/validatorRegistry.algo.ts:1373 + // type === GATING_TYPE_NONE + frame_dig 0 // type: uint8 + int 0 + == + bz *if43_end + + // *if43_consequent + // contracts/validatorRegistry.algo.ts:1374 + // return + retsub + +*if43_end: + // contracts/validatorRegistry.algo.ts:1376 + // staker = this.txn.sender + txn Sender + frame_bury 1 // staker: address + + // contracts/validatorRegistry.algo.ts:1377 + // config = clone(this.validatorList(validatorId).value.config) + int 0 + int 242 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + frame_bury 2 // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + + // *if44_condition + // contracts/validatorRegistry.algo.ts:1381 + // type === GATING_TYPE_ASSETS_CREATED_BY || + // type === GATING_TYPE_ASSET_ID || + // type === GATING_TYPE_CREATED_BY_NFD_ADDRESSES + frame_dig 0 // type: uint8 + int 1 + == + dup + bnz *skip_or4 + frame_dig 0 // type: uint8 + int 2 + == + || + +*skip_or4: + dup + bnz *skip_or5 + frame_dig 0 // type: uint8 + int 3 + == + || + +*skip_or5: + bz *if44_end + + // *if44_consequent + // contracts/validatorRegistry.algo.ts:1385 + // assert(valueToVerify !== 0) + frame_dig -2 // valueToVerify: uint64 + int 0 + != + assert + + // contracts/validatorRegistry.algo.ts:1386 + // balRequired = this.validatorList(validatorId).value.config.gatingAssetMinBalance + int 145 + int 8 + byte 0x76 // "v" + frame_dig -1 // validatorId: ValidatorIdType + itob + concat + cover 2 + box_extract + btoi + frame_bury 3 // balRequired: uint64 + + // *if45_condition + // contracts/validatorRegistry.algo.ts:1387 + // balRequired === 0 + frame_dig 3 // balRequired: uint64 + int 0 + == + bz *if45_end + + // *if45_consequent + // contracts/validatorRegistry.algo.ts:1388 + // balRequired = 1 + int 1 + frame_bury 3 // balRequired: uint64 + +*if45_end: + // contracts/validatorRegistry.algo.ts:1390 + // assert( + // staker.assetBalance(AssetID.fromUint64(valueToVerify)) >= balRequired, + // 'must have required minimum balance of validator defined token to add stake', + // ) + frame_dig 1 // staker: address + frame_dig -2 // valueToVerify: uint64 + asset_holding_get AssetBalance + pop + frame_dig 3 // balRequired: uint64 + >= + + // must have required minimum balance of validator defined token to add stake + assert + +*if44_end: + // *if46_condition + // contracts/validatorRegistry.algo.ts:1395 + // type === GATING_TYPE_ASSETS_CREATED_BY + frame_dig 0 // type: uint8 + int 1 + == + bz *if46_end + + // *if46_consequent + // contracts/validatorRegistry.algo.ts:1396 + // assert( + // AssetID.fromUint64(valueToVerify).creator === config.entryGatingAddress, + // 'specified asset must be created by creator that the validator defined as a requirement to stake', + // ) + frame_dig -2 // valueToVerify: uint64 + asset_params_get AssetCreator + pop + frame_dig 2 // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 81 32 + == + + // specified asset must be created by creator that the validator defined as a requirement to stake + assert + +*if46_end: + // *if47_condition + // contracts/validatorRegistry.algo.ts:1401 + // type === GATING_TYPE_ASSET_ID + frame_dig 0 // type: uint8 + int 2 + == + bz *if47_end + + // *if47_consequent + // contracts/validatorRegistry.algo.ts:1402 + // assert(valueToVerify !== 0) + frame_dig -2 // valueToVerify: uint64 + int 0 + != + assert + + // contracts/validatorRegistry.algo.ts:1403 + // found = false + int 0 + frame_bury 4 // found: bool + + // contracts/validatorRegistry.algo.ts:1404 + // config.entryGatingAssets + frame_dig 2 // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 113 32 + dup + frame_bury 5 // copy of the array we are iterating over + extract 0 8 + btoi + frame_bury 6 // assetId: uint64 + int 0 + frame_bury 7 // the offset we are extracting the next element from + +*forOf_0: + // *if48_condition + // contracts/validatorRegistry.algo.ts:1405 + // valueToVerify === assetId + frame_dig -2 // valueToVerify: uint64 + frame_dig 6 // assetId: uint64 + == + bz *if48_end + + // *if48_consequent + // contracts/validatorRegistry.algo.ts:1406 + // found = true + int 1 + frame_bury 4 // found: bool + b *forOf_0_end + +*if48_end: + +*forOf_0_continue: + // increment offset and loop if not out of bounds + frame_dig 7 // the offset we are extracting the next element from + int 8 + + + dup + int 32 // offset of last element + < + bz *forOf_0_end + frame_bury 7 // the offset we are extracting the next element from + frame_dig 5 // copy of the array we are iterating over + frame_dig 7 // the offset we are extracting the next element from + int 8 + extract + btoi + frame_bury 6 // assetId: uint64 + b *forOf_0 + +*forOf_0_end: + // contracts/validatorRegistry.algo.ts:1410 + // assert(found, 'specified asset must be identical to the asset id defined as a requirement to stake') + frame_dig 4 // found: bool + + // specified asset must be identical to the asset id defined as a requirement to stake + assert + +*if47_end: + // *if49_condition + // contracts/validatorRegistry.algo.ts:1412 + // type === GATING_TYPE_CREATED_BY_NFD_ADDRESSES + frame_dig 0 // type: uint8 + int 3 + == + bz *if49_end + + // *if49_consequent + // contracts/validatorRegistry.algo.ts:1415 + // assert( + // this.isAddressInNFDCAAlgoList(config.entryGatingAssets[0], AssetID.fromUint64(valueToVerify).creator), + // 'specified asset must be created by creator that is one of the linked addresses in an nfd', + // ) + frame_dig -2 // valueToVerify: uint64 + asset_params_get AssetCreator + pop + frame_dig 2 // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 113 8 + btoi + callsub isAddressInNFDCAAlgoList + + // specified asset must be created by creator that is one of the linked addresses in an nfd + assert + +*if49_end: + // *if50_condition + // contracts/validatorRegistry.algo.ts:1420 + // type === GATING_TYPE_SEGMENT_OF_NFD + frame_dig 0 // type: uint8 + int 4 + == + bz *if50_end + + // *if50_consequent + // contracts/validatorRegistry.algo.ts:1422 + // userOfferedNFDAppID = valueToVerify + frame_dig -2 // valueToVerify: uint64 + frame_bury 8 // userOfferedNFDAppID: uint64 + + // contracts/validatorRegistry.algo.ts:1423 + // assert(this.isNFDAppIDValid(userOfferedNFDAppID), 'provided NFD must be valid') + frame_dig 8 // userOfferedNFDAppID: uint64 + callsub isNFDAppIDValid + + // provided NFD must be valid + assert + + // contracts/validatorRegistry.algo.ts:1426 + // assert( + // rawBytes(AppID.fromUint64(userOfferedNFDAppID).globalState('i.owner.a') as Address) === + // rawBytes(staker) || this.isAddressInNFDCAAlgoList(userOfferedNFDAppID, staker), + // "provided nfd for entry isn't owned or linked to the staker", + // ) + frame_dig 8 // userOfferedNFDAppID: uint64 + byte 0x692e6f776e65722e61 // "i.owner.a" + app_global_get_ex + + // global state value does not exist: AppID.fromUint64(userOfferedNFDAppID).globalState('i.owner.a') + assert + frame_dig 1 // staker: address + == + dup + bnz *skip_or6 + frame_dig 1 // staker: address + frame_dig 8 // userOfferedNFDAppID: uint64 + callsub isAddressInNFDCAAlgoList + || + +*skip_or6: + // provided nfd for entry isn't owned or linked to the staker + assert + + // contracts/validatorRegistry.algo.ts:1433 + // assert( + // btoi(AppID.fromUint64(userOfferedNFDAppID).globalState('i.parentAppID') as bytes) === + // config.entryGatingAssets[0], + // 'specified nfd must be a segment of the nfd the validator specified as a requirement', + // ) + frame_dig 8 // userOfferedNFDAppID: uint64 + byte 0x692e706172656e744170704944 // "i.parentAppID" + app_global_get_ex + + // global state value does not exist: AppID.fromUint64(userOfferedNFDAppID).globalState('i.parentAppID') + assert + btoi + frame_dig 2 // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) + extract 113 8 + btoi + == + + // specified nfd must be a segment of the nfd the validator specified as a requirement + assert + +*if50_end: + retsub + +// isNFDAppIDValid(nfdAppID: uint64): boolean +// +// Checks if the given NFD App id is valid. Using only the App id there's no validation against the name (ie: that nfd X is name Y) +// So it's assumed for the caller, the app id alone is fine. The name is fetched from the specified app id and the two +// together are used for validity check call to the nfd registry. +// +// @param {uint64} nfdAppID - The NFD App id to verify. +// +// @returns {boolean} - Returns true if the NFD App id is valid, otherwise false. +isNFDAppIDValid: + proto 1 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // contracts/validatorRegistry.algo.ts:1452 + // userOfferedNFDName = AppID.fromUint64(nfdAppID).globalState('i.name') as string + frame_dig -1 // nfdAppID: uint64 + byte 0x692e6e616d65 // "i.name" + app_global_get_ex + + // global state value does not exist: AppID.fromUint64(nfdAppID).globalState('i.name') + assert + frame_bury 0 // userOfferedNFDName: string + + // contracts/validatorRegistry.algo.ts:1454 + // sendAppCall({ + // applicationID: AppID.fromUint64(this.nfdRegistryAppId), + // applicationArgs: ['is_valid_nfd_appid', userOfferedNFDName, itob(nfdAppID)], + // applications: [AppID.fromUint64(nfdAppID)], + // }) + itxn_begin + int appl + itxn_field TypeEnum + + // contracts/validatorRegistry.algo.ts:1455 + // applicationID: AppID.fromUint64(this.nfdRegistryAppId) + pushint TMPL_nfdRegistryAppId + itxn_field ApplicationID + + // contracts/validatorRegistry.algo.ts:1456 + // applicationArgs: ['is_valid_nfd_appid', userOfferedNFDName, itob(nfdAppID)] + byte 0x69735f76616c69645f6e66645f6170706964 // "is_valid_nfd_appid" + itxn_field ApplicationArgs + frame_dig 0 // userOfferedNFDName: string + itxn_field ApplicationArgs + frame_dig -1 // nfdAppID: uint64 + itob + itxn_field ApplicationArgs + + // contracts/validatorRegistry.algo.ts:1457 + // applications: [AppID.fromUint64(nfdAppID)] + frame_dig -1 // nfdAppID: uint64 + itxn_field Applications + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/validatorRegistry.algo.ts:1459 + // return btoi(this.itxn.lastLog) === 1 + itxn LastLog + btoi + int 1 + == + + // set the subroutine return value + frame_bury 0 + retsub + +// isAddressInNFDCAAlgoList(nfdAppID: uint64, addrToFind: Address): boolean +// +// Checks if the specified address is present in an NFDs list of verified addresses. +// The NFD is assumed to have already been validated as official. +// +// @param {uint64} nfdAppID - The NFD application id. +// @param {Address} addrToFind - The address to find in the v.caAlgo.0.as property +// @return {boolean} - `true` if the address is present, `false` otherwise. +isAddressInNFDCAAlgoList: + proto 2 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + dupn 2 + + // contracts/validatorRegistry.algo.ts:1471 + // sendAppCall({ + // applicationID: AppID.fromUint64(nfdAppID), + // applicationArgs: ['read_property', 'v.caAlgo.0.as'], + // }) + itxn_begin + int appl + itxn_field TypeEnum + + // contracts/validatorRegistry.algo.ts:1472 + // applicationID: AppID.fromUint64(nfdAppID) + frame_dig -1 // nfdAppID: uint64 + itxn_field ApplicationID + + // contracts/validatorRegistry.algo.ts:1473 + // applicationArgs: ['read_property', 'v.caAlgo.0.as'] + byte 0x726561645f70726f7065727479 // "read_property" + itxn_field ApplicationArgs + byte 0x762e6361416c676f2e302e6173 // "v.caAlgo.0.as" + itxn_field ApplicationArgs + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + + // contracts/validatorRegistry.algo.ts:1475 + // caAlgoData = this.itxn.lastLog + itxn LastLog + frame_bury 0 // caAlgoData: byte[] + + // contracts/validatorRegistry.algo.ts:1476 + // for (let i = 0; i < caAlgoData.length; i += 32) + int 0 + frame_bury 1 // i: uint64 + +*for_10: + // contracts/validatorRegistry.algo.ts:1476 + // i < caAlgoData.length + frame_dig 1 // i: uint64 + frame_dig 0 // caAlgoData: byte[] + len + < + bz *for_10_end + + // contracts/validatorRegistry.algo.ts:1477 + // addr = extract3(caAlgoData, i, 32) + frame_dig 0 // caAlgoData: byte[] + frame_dig 1 // i: uint64 + int 32 + extract3 + frame_bury 2 // addr: byte[] + + // *if51_condition + // contracts/validatorRegistry.algo.ts:1478 + // addr !== rawBytes(globals.zeroAddress) && addr === rawBytes(addrToFind) + frame_dig 2 // addr: byte[] + global ZeroAddress + != + dup + bz *skip_and10 + frame_dig 2 // addr: byte[] + frame_dig -2 // addrToFind: Address + == + && + +*skip_and10: + bz *if51_end + + // *if51_consequent + // contracts/validatorRegistry.algo.ts:1479 + // return true + int 1 + b *isAddressInNFDCAAlgoList*return + +*if51_end: + +*for_10_continue: + // contracts/validatorRegistry.algo.ts:1476 + // i += 32 + frame_dig 1 // i: uint64 + int 32 + + + frame_bury 1 // i: uint64 + b *for_10 + +*for_10_end: + // contracts/validatorRegistry.algo.ts:1482 + // return false + int 0 + +*isAddressInNFDCAAlgoList*return: + // set the subroutine return value + frame_bury 0 + + // pop all local variables from the stack + popn 2 + retsub + +// algoSaturationLevel(): uint64 +// +// Returns the maximum allowed stake per validator based on a percentage of all current online stake before +// the validator is considered saturated - where rewards are diminished. +// NOTE: this function is defined twice - here and in staking pool contract. Both must be identical. +algoSaturationLevel: + proto 0 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // contracts/validatorRegistry.algo.ts:1491 + // online = this.getCurrentOnlineStake() + callsub getCurrentOnlineStake + frame_bury 0 // online: uint64 + + // contracts/validatorRegistry.algo.ts:1493 + // return wideRatio([online, MAX_VALIDATOR_SOFT_PCT_OF_ONLINE_1DECIMAL], [1000]) + frame_dig 0 // online: uint64 + int 100 + mulw + int 0 + int 1000 + divmodw + pop + pop + swap + ! + + // wideRatio failed + assert + + // set the subroutine return value + frame_bury 0 + retsub + +// maxAllowedStake(): uint64 +// +// Returns the MAXIMUM allowed stake per validator based on a percentage of all current online stake. +// Adding stake is completely blocked at this amount. +maxAllowedStake: + proto 0 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // contracts/validatorRegistry.algo.ts:1501 + // online = this.getCurrentOnlineStake() + callsub getCurrentOnlineStake + frame_bury 0 // online: uint64 + + // contracts/validatorRegistry.algo.ts:1503 + // return wideRatio([online, MAX_VALIDATOR_HARD_PCT_OF_ONLINE_1DECIMAL], [1000]) + frame_dig 0 // online: uint64 + int 150 + mulw + int 0 + int 1000 + divmodw + pop + pop + swap + ! + + // wideRatio failed + assert + + // set the subroutine return value + frame_bury 0 + retsub + +// maxAlgoAllowedPerPool(): uint64 +// +// Returns the MAXIMUM allowed stake per pool and still receive incentives - we'll treat this as the 'max per pool' +maxAlgoAllowedPerPool: + proto 0 1 + + // contracts/validatorRegistry.algo.ts:1512 + // return 70_000_000_000_000 + int 70_000_000_000_000 + retsub + +// getCurrentOnlineStake(): uint64 +getCurrentOnlineStake: + proto 0 1 + + // contracts/validatorRegistry.algo.ts:1518 + // return 2_000_000_000_000_000 + int 2_000_000_000_000_000 + retsub + +// minBalanceForAccount(contracts: uint64, extraPages: uint64, assets: uint64, localInts: uint64, localBytes: uint64, globalInts: uint64, globalBytes: uint64): uint64 +minBalanceForAccount: + proto 7 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // contracts/validatorRegistry.algo.ts:1530 + // minBal = ALGORAND_ACCOUNT_MIN_BALANCE + int 100000 + frame_bury 0 // minBal: uint64 + + // contracts/validatorRegistry.algo.ts:1531 + // minBal += contracts * APPLICATION_BASE_FEE + frame_dig 0 // minBal: uint64 + frame_dig -1 // contracts: uint64 + int 100000 + * + + + frame_bury 0 // minBal: uint64 + + // contracts/validatorRegistry.algo.ts:1532 + // minBal += extraPages * APPLICATION_BASE_FEE + frame_dig 0 // minBal: uint64 + frame_dig -2 // extraPages: uint64 + int 100000 + * + + + frame_bury 0 // minBal: uint64 + + // contracts/validatorRegistry.algo.ts:1533 + // minBal += assets * ASSET_HOLDING_FEE + frame_dig 0 // minBal: uint64 + frame_dig -3 // assets: uint64 + int 100000 + * + + + frame_bury 0 // minBal: uint64 + + // contracts/validatorRegistry.algo.ts:1534 + // minBal += localInts * SSC_VALUE_UINT + frame_dig 0 // minBal: uint64 + frame_dig -4 // localInts: uint64 + int 28500 + * + + + frame_bury 0 // minBal: uint64 + + // contracts/validatorRegistry.algo.ts:1535 + // minBal += globalInts * SSC_VALUE_UINT + frame_dig 0 // minBal: uint64 + frame_dig -6 // globalInts: uint64 + int 28500 + * + + + frame_bury 0 // minBal: uint64 + + // contracts/validatorRegistry.algo.ts:1536 + // minBal += localBytes * SSC_VALUE_BYTES + frame_dig 0 // minBal: uint64 + frame_dig -5 // localBytes: uint64 + int 50000 + * + + + frame_bury 0 // minBal: uint64 + + // contracts/validatorRegistry.algo.ts:1537 + // minBal += globalBytes * SSC_VALUE_BYTES + frame_dig 0 // minBal: uint64 + frame_dig -7 // globalBytes: uint64 + int 50000 + * + + + frame_bury 0 // minBal: uint64 + + // contracts/validatorRegistry.algo.ts:1538 + // return minBal + frame_dig 0 // minBal: uint64 + + // set the subroutine return value + frame_bury 0 + retsub + +// costForBoxStorage(totalNumBytes: uint64): uint64 +costForBoxStorage: + proto 1 1 + + // contracts/validatorRegistry.algo.ts:1545 + // return SCBOX_PERBOX + totalNumBytes * SCBOX_PERBYTE + int 2500 + frame_dig -1 // totalNumBytes: uint64 + int 400 + * + + + retsub + +*create_NoOp: + method "createApplication()void" + txna ApplicationArgs 0 + match *abi_route_createApplication + + // this contract does not implement the given ABI method for create NoOp + err + +*call_NoOp: + method "initStakingContract(uint64)void" + method "loadStakingContractData(uint64,byte[])void" + method "finalizeStakingContract()void" + method "gas()void" + method "getMbrAmounts()(uint64,uint64,uint64,uint64)" + method "getProtocolConstraints()(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)" + method "getNumValidators()uint64" + method "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" + method "getValidatorState(uint64)(uint16,uint64,uint64,uint64)" + method "getValidatorOwnerAndManager(uint64)(address,address)" + method "getPools(uint64)(uint64,uint16,uint64)[]" + method "getPoolAppId(uint64,uint64)uint64" + method "getPoolInfo((uint64,uint64,uint64))(uint64,uint16,uint64)" + method "getCurMaxStakePerPool(uint64)uint64" + method "doesStakerNeedToPayMBR(address)bool" + method "getStakedPoolsForAccount(address)(uint64,uint64,uint64)[]" + method "getTokenPayoutRatio(uint64)(uint64[24],uint64)" + method "getNodePoolAssignments(uint64)((uint64[3])[8])" + method "getNFDRegistryID()uint64" + method "addValidator(pay,string,(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64))uint64" + method "changeValidatorManager(uint64,address)void" + method "changeValidatorSunsetInfo(uint64,uint64,uint64)void" + method "changeValidatorNFD(uint64,uint64,string)void" + method "changeValidatorCommissionAddress(uint64,address)void" + method "changeValidatorRewardInfo(uint64,uint8,address,uint64[4],uint64,uint64)void" + method "addPool(pay,uint64,uint64)(uint64,uint64,uint64)" + method "addStake(pay,uint64,uint64)(uint64,uint64,uint64)" + method "setTokenPayoutRatio(uint64)(uint64[24],uint64)" + method "stakeUpdatedViaRewards((uint64,uint64,uint64),uint64,uint64,uint64,uint64)void" + method "stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void" + method "findPoolForStaker(uint64,address,uint64)((uint64,uint64,uint64),bool,bool)" + method "movePoolToNode(uint64,uint64,uint64)void" + method "emptyTokenRewards(uint64,address)uint64" + txna ApplicationArgs 0 + match *abi_route_initStakingContract *abi_route_loadStakingContractData *abi_route_finalizeStakingContract *abi_route_gas *abi_route_getMbrAmounts *abi_route_getProtocolConstraints *abi_route_getNumValidators *abi_route_getValidatorConfig *abi_route_getValidatorState *abi_route_getValidatorOwnerAndManager *abi_route_getPools *abi_route_getPoolAppId *abi_route_getPoolInfo *abi_route_getCurMaxStakePerPool *abi_route_doesStakerNeedToPayMBR *abi_route_getStakedPoolsForAccount *abi_route_getTokenPayoutRatio *abi_route_getNodePoolAssignments *abi_route_getNFDRegistryID *abi_route_addValidator *abi_route_changeValidatorManager *abi_route_changeValidatorSunsetInfo *abi_route_changeValidatorNFD *abi_route_changeValidatorCommissionAddress *abi_route_changeValidatorRewardInfo *abi_route_addPool *abi_route_addStake *abi_route_setTokenPayoutRatio *abi_route_stakeUpdatedViaRewards *abi_route_stakeRemoved *abi_route_findPoolForStaker *abi_route_movePoolToNode *abi_route_emptyTokenRewards + + // this contract does not implement the given ABI method for call NoOp + err + +*call_UpdateApplication: + method "updateApplication()void" + txna ApplicationArgs 0 + match *abi_route_updateApplication + + // this contract does not implement the given ABI method for call UpdateApplication + err \ No newline at end of file diff --git a/examples/reti/ValidatorRegistry.arc32.json b/examples/reti/ValidatorRegistry.arc32.json new file mode 100755 index 000000000..e1cc3f808 --- /dev/null +++ b/examples/reti/ValidatorRegistry.arc32.json @@ -0,0 +1,806 @@ +{ + "hints": { + "updateApplication()void": { + "call_config": { + "update_application": "CALL" + } + }, + "createApplication()void": { + "call_config": { + "no_op": "CREATE" + } + }, + "initStakingContract(uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "loadStakingContractData(uint64,byte[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "finalizeStakingContract()void": { + "call_config": { + "no_op": "CALL" + } + }, + "gas()void": { + "call_config": { + "no_op": "CALL" + } + }, + "getMbrAmounts()(uint64,uint64,uint64,uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "getProtocolConstraints()(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "getNumValidators()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "getValidatorState(uint64)(uint16,uint64,uint64,uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "getValidatorOwnerAndManager(uint64)(address,address)": { + "call_config": { + "no_op": "CALL" + } + }, + "getPools(uint64)(uint64,uint16,uint64)[]": { + "call_config": { + "no_op": "CALL" + } + }, + "getPoolAppId(uint64,uint64)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "getPoolInfo((uint64,uint64,uint64))(uint64,uint16,uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "getCurMaxStakePerPool(uint64)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "doesStakerNeedToPayMBR(address)bool": { + "call_config": { + "no_op": "CALL" + } + }, + "getStakedPoolsForAccount(address)(uint64,uint64,uint64)[]": { + "call_config": { + "no_op": "CALL" + } + }, + "getTokenPayoutRatio(uint64)(uint64[24],uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "getNodePoolAssignments(uint64)((uint64[3])[8])": { + "call_config": { + "no_op": "CALL" + } + }, + "getNFDRegistryID()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "addValidator(pay,string,(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64))uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "changeValidatorManager(uint64,address)void": { + "call_config": { + "no_op": "CALL" + } + }, + "changeValidatorSunsetInfo(uint64,uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "changeValidatorNFD(uint64,uint64,string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "changeValidatorCommissionAddress(uint64,address)void": { + "call_config": { + "no_op": "CALL" + } + }, + "changeValidatorRewardInfo(uint64,uint8,address,uint64[4],uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "addPool(pay,uint64,uint64)(uint64,uint64,uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "addStake(pay,uint64,uint64)(uint64,uint64,uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "setTokenPayoutRatio(uint64)(uint64[24],uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "stakeUpdatedViaRewards((uint64,uint64,uint64),uint64,uint64,uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void": { + "call_config": { + "no_op": "CALL" + } + }, + "findPoolForStaker(uint64,address,uint64)((uint64,uint64,uint64),bool,bool)": { + "call_config": { + "no_op": "CALL" + } + }, + "movePoolToNode(uint64,uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "emptyTokenRewards(uint64,address)uint64": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "no_op": "NEVER", + "opt_in": "NEVER", + "close_out": "NEVER", + "update_application": "NEVER", + "delete_application": "NEVER" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": { + "stakingPoolInitialized": { + "type": "bytes", + "key": "init" + }, + "numValidators": { + "type": "uint64", + "key": "numV" + }, + "numStakers": { + "type": "uint64", + "key": "numStakers" + }, + "totalAlgoStaked": { + "type": "uint64", + "key": "staked" + } + }, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 1, + "num_uints": 3 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjk2LjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCS8vIFRoZSByZXF1ZXN0ZWQgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRyYWN0LiBBcmUgeW91IHVzaW5nIHRoZSBjb3JyZWN0IE9uQ29tcGxldGU/IERpZCB5b3Ugc2V0IHlvdXIgYXBwIElEPwoJZXJyCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiB1cGRhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKTogdm9pZAp1cGRhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE5OQoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gQWRkcmVzcy5mcm9tQWRkcmVzcygnTFo0VjJJUlZMQ1hGSks0UkVKVjRUQUdFS0VZVEEyR01SNlRDMjM0NE9CM0wzQUYzTVdYWjZaQUZJUScpKQoJdHhuIFNlbmRlcgoJYWRkciBMWjRWMklSVkxDWEZKSzRSRUpWNFRBR0VLRVlUQTJHTVI2VEMyMzQ0T0IzTDNBRjNNV1haNlpBRklRCgk9PQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjAxCgkvLyB0aGlzLnN0YWtpbmdQb29sQXBwcm92YWxQcm9ncmFtLmRlbGV0ZSgpCglieXRlIDB4NzA2ZjZmNmM1NDY1NmQ3MDZjNjE3NDY1NDE3MDcwNzI2Zjc2NjE2YzQyNzk3NDY1NzMgLy8gInBvb2xUZW1wbGF0ZUFwcHJvdmFsQnl0ZXMiCglib3hfZGVsCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjAyCgkvLyB0aGlzLnN0YWtpbmdQb29sSW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZQoJYnl0ZSAweDY5NmU2OTc0IC8vICJpbml0IgoJaW50IDAKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0CglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZApjcmVhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjIwNgoJLy8gdGhpcy5zdGFraW5nUG9vbEluaXRpYWxpemVkLnZhbHVlID0gZmFsc2UKCWJ5dGUgMHg2OTZlNjk3NCAvLyAiaW5pdCIKCWludCAwCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoyMDcKCS8vIHRoaXMubnVtVmFsaWRhdG9ycy52YWx1ZSA9IDAKCWJ5dGUgMHg2ZTc1NmQ1NiAvLyAibnVtViIKCWludCAwCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjIwOAoJLy8gdGhpcy5udW1TdGFrZXJzLnZhbHVlID0gMAoJYnl0ZSAweDZlNzU2ZDUzNzQ2MTZiNjU3MjczIC8vICJudW1TdGFrZXJzIgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjA5CgkvLyB0aGlzLnRvdGFsQWxnb1N0YWtlZC52YWx1ZSA9IDAKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCWludCAwCglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgovLyBpbml0U3Rha2luZ0NvbnRyYWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfaW5pdFN0YWtpbmdDb250cmFjdDoKCS8vIGFwcHJvdmFsUHJvZ3JhbVNpemU6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgaW5pdFN0YWtpbmdDb250cmFjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBpbml0U3Rha2luZ0NvbnRyYWN0CglpbnQgMQoJcmV0dXJuCgovLyBpbml0U3Rha2luZ0NvbnRyYWN0KGFwcHJvdmFsUHJvZ3JhbVNpemU6IHVpbnQ2NCk6IHZvaWQKaW5pdFN0YWtpbmdDb250cmFjdDoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjIxNAoJLy8gdGhpcy5zdGFraW5nUG9vbEFwcHJvdmFsUHJvZ3JhbS5jcmVhdGUoYXBwcm92YWxQcm9ncmFtU2l6ZSkKCWJ5dGUgMHg3MDZmNmY2YzU0NjU2ZDcwNmM2MTc0NjU0MTcwNzA3MjZmNzY2MTZjNDI3OTc0NjU3MyAvLyAicG9vbFRlbXBsYXRlQXBwcm92YWxCeXRlcyIKCWZyYW1lX2RpZyAtMSAvLyBhcHByb3ZhbFByb2dyYW1TaXplOiB1aW50NjQKCWJveF9jcmVhdGUKCXBvcAoJcmV0c3ViCgovLyBsb2FkU3Rha2luZ0NvbnRyYWN0RGF0YSh1aW50NjQsYnl0ZVtdKXZvaWQKKmFiaV9yb3V0ZV9sb2FkU3Rha2luZ0NvbnRyYWN0RGF0YToKCS8vIGRhdGE6IGJ5dGVbXQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZXh0cmFjdCAyIDAKCgkvLyBvZmZzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgbG9hZFN0YWtpbmdDb250cmFjdERhdGEodWludDY0LGJ5dGVbXSl2b2lkCgljYWxsc3ViIGxvYWRTdGFraW5nQ29udHJhY3REYXRhCglpbnQgMQoJcmV0dXJuCgovLyBsb2FkU3Rha2luZ0NvbnRyYWN0RGF0YShvZmZzZXQ6IHVpbnQ2NCwgZGF0YTogYnl0ZXMpOiB2b2lkCmxvYWRTdGFraW5nQ29udHJhY3REYXRhOgoJcHJvdG8gMiAwCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjE4CgkvLyBhc3NlcnQoIXRoaXMuc3Rha2luZ1Bvb2xJbml0aWFsaXplZC52YWx1ZSkKCWJ5dGUgMHg2OTZlNjk3NCAvLyAiaW5pdCIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMAoJZ2V0Yml0CgkhCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoyMTkKCS8vIHRoaXMuc3Rha2luZ1Bvb2xBcHByb3ZhbFByb2dyYW0ucmVwbGFjZShvZmZzZXQsIGRhdGEpCglieXRlIDB4NzA2ZjZmNmM1NDY1NmQ3MDZjNjE3NDY1NDE3MDcwNzI2Zjc2NjE2YzQyNzk3NDY1NzMgLy8gInBvb2xUZW1wbGF0ZUFwcHJvdmFsQnl0ZXMiCglmcmFtZV9kaWcgLTEgLy8gb2Zmc2V0OiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBkYXRhOiBieXRlcwoJYm94X3JlcGxhY2UKCXJldHN1YgoKLy8gZmluYWxpemVTdGFraW5nQ29udHJhY3QoKXZvaWQKKmFiaV9yb3V0ZV9maW5hbGl6ZVN0YWtpbmdDb250cmFjdDoKCS8vIGV4ZWN1dGUgZmluYWxpemVTdGFraW5nQ29udHJhY3QoKXZvaWQKCWNhbGxzdWIgZmluYWxpemVTdGFraW5nQ29udHJhY3QKCWludCAxCglyZXR1cm4KCi8vIGZpbmFsaXplU3Rha2luZ0NvbnRyYWN0KCk6IHZvaWQKZmluYWxpemVTdGFraW5nQ29udHJhY3Q6Cglwcm90byAwIDAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoyMjMKCS8vIHRoaXMuc3Rha2luZ1Bvb2xJbml0aWFsaXplZC52YWx1ZSA9IHRydWUKCWJ5dGUgMHg2OTZlNjk3NCAvLyAiaW5pdCIKCWludCAxCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKLy8gZ2FzKCl2b2lkCiphYmlfcm91dGVfZ2FzOgoJLy8gZXhlY3V0ZSBnYXMoKXZvaWQKCWNhbGxzdWIgZ2FzCglpbnQgMQoJcmV0dXJuCgovLyBnYXMoKTogdm9pZAovLwovLyBnYXMgaXMgYSBkdW1teSBuby1vcCBjYWxsIHRoYXQgY2FuIGJlIHVzZWQgdG8gcG9vbC11cCByZXNvdXJjZSByZWZlcmVuY2VzIGFuZCBvcGNvZGUgY29zdApnYXM6Cglwcm90byAwIDAKCXJldHN1YgoKLy8gZ2V0TWJyQW1vdW50cygpKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9nZXRNYnJBbW91bnRzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGdldE1ickFtb3VudHMoKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGdldE1ickFtb3VudHMKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBnZXRNYnJBbW91bnRzKCk6IE1ickFtb3VudHMKLy8KLy8gUmV0dXJucyB0aGUgTUJSIGFtb3VudHMgbmVlZGVkIGZvciB2YXJpb3VzIGFjdGlvbnM6Ci8vIFsKLy8gYWRkVmFsaWRhdG9yTWJyOiB1aW50NjQgLSBtYnIgbmVlZGVkIHRvIGFkZCBhIG5ldyB2YWxpZGF0b3IgLSBwYWlkIHRvIHZhbGlkYXRvciBjb250cmFjdAovLyBhZGRQb29sTWJyOiB1aW50NjQgLSBtYnIgbmVlZGVkIHRvIGFkZCBhIG5ldyBwb29sIC0gcGFpZCB0byB2YWxpZGF0b3IKLy8gcG9vbEluaXRNYnI6IHVpbnQ2NCAtIG1iciBuZWVkZWQgdG8gaW5pdFN0b3JhZ2UoKSBvZiBwb29sIC0gcGFpZCB0byBwb29sIGl0c2VsZgovLyBhZGRTdGFrZXJNYnI6IHVpbnQ2NCAtIG1iciBzdGFrZXIgbmVlZHMgdG8gYWRkIHRvIGZpcnN0IHN0YWtpbmcgcGF5bWVudCAoc3RheXMgdy8gdmFsaWRhdG9yKQovLyBdCmdldE1ickFtb3VudHM6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoyNDMKCS8vIHJldHVybiB7CgkvLyAgICAgICAgICAgICBhZGRWYWxpZGF0b3JNYnI6IHRoaXMuY29zdEZvckJveFN0b3JhZ2UoMSAvKiB2IHByZWZpeCAqLyArIGxlbjxWYWxpZGF0b3JJZFR5cGU+KCkgKyBsZW48VmFsaWRhdG9ySW5mbz4oKSksCgkvLyAgICAgICAgICAgICBhZGRQb29sTWJyOiB0aGlzLm1pbkJhbGFuY2VGb3JBY2NvdW50KAoJLy8gICAgICAgICAgICAgICAgIDEsCgkvLyAgICAgICAgICAgICAgICAgLy8gd2UgY291bGQgY2FsY3VsYXRlIHRoaXMgZGlyZWN0bHkgYnkgcmVmZXJlbmNpbmcgdGhlIHNpemUgb2Ygc3Rha2luZ1Bvb2xBcHByb3ZhbFByb2dyYW0gYnV0IGl0IHdvdWxkCgkvLyAgICAgICAgICAgICAgICAgLy8gbWVhbiBvdXIgY2FsbGVycyB3b3VsZCBoYXZlIHRvIHJlZmVyZW5jZSB0aGUgYm94IEFORCBidXkgdXAgaS9vIC0gc28ganVzdCBnbyBtYXggb24gZXh0cmEgcGFnZXMKCS8vICAgICAgICAgICAgICAgICAzLAoJLy8gICAgICAgICAgICAgICAgIDAsCgkvLyAgICAgICAgICAgICAgICAgMCwKCS8vICAgICAgICAgICAgICAgICAwLAoJLy8gICAgICAgICAgICAgICAgIFN0YWtpbmdQb29sLnNjaGVtYS5nbG9iYWwubnVtVWludCwKCS8vICAgICAgICAgICAgICAgICBTdGFraW5nUG9vbC5zY2hlbWEuZ2xvYmFsLm51bUJ5dGVTbGljZSwKCS8vICAgICAgICAgICAgICksCgkvLyAgICAgICAgICAgICBwb29sSW5pdE1icjoKCS8vICAgICAgICAgICAgICAgICBBTEdPUkFORF9BQ0NPVU5UX01JTl9CQUxBTkNFICsKCS8vICAgICAgICAgICAgICAgICB0aGlzLmNvc3RGb3JCb3hTdG9yYWdlKDcgLyogJ3N0YWtlcnMnIG5hbWUgKi8gKyBsZW48U3Rha2VkSW5mbz4oKSAqIE1BWF9TVEFLRVJTX1BFUl9QT09MKSwKCS8vICAgICAgICAgICAgIGFkZFN0YWtlck1icjoKCS8vICAgICAgICAgICAgICAgICAvLyBob3cgbXVjaCB0byBjaGFyZ2UgZm9yIGZpcnN0IHRpbWUgYSBzdGFrZXIgYWRkcyBzdGFrZSAtIHNpbmNlIHdlIGFkZCBhIHRyYWNraW5nIGJveCBwZXIgc3Rha2VyCgkvLyAgICAgICAgICAgICAgICAgdGhpcy5jb3N0Rm9yQm94U3RvcmFnZSgKCS8vICAgICAgICAgICAgICAgICAgICAgMyAvKiAnc3BzJyBwcmVmaXggKi8gKyBsZW48QWRkcmVzcz4oKSArIGxlbjxWYWxpZGF0b3JQb29sS2V5PigpICogTUFYX1BPT0xTX1BFUl9TVEFLRVIsCgkvLyAgICAgICAgICAgICAgICAgKSwgLy8gc2l6ZSBvZiBrZXkgKyBhbGwgdmFsdWVzCgkvLyAgICAgICAgIH0KCWludCAxMTAxCgljYWxsc3ViIGNvc3RGb3JCb3hTdG9yYWdlCglpdG9iCglpbnQgMwoJaW50IDExCglpbnQgMAoJZHVwbiAyCglpbnQgMwoJaW50IDEKCWNhbGxzdWIgbWluQmFsYW5jZUZvckFjY291bnQKCWl0b2IKCWNvbmNhdAoJaW50IDEwMDAwMAoJaW50IDEyODA3CgljYWxsc3ViIGNvc3RGb3JCb3hTdG9yYWdlCgkrCglpdG9iCgljb25jYXQKCWludCAxNzkKCWNhbGxzdWIgY29zdEZvckJveFN0b3JhZ2UKCWl0b2IKCWNvbmNhdAoJcmV0c3ViCgovLyBnZXRQcm90b2NvbENvbnN0cmFpbnRzKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9nZXRQcm90b2NvbENvbnN0cmFpbnRzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGdldFByb3RvY29sQ29uc3RyYWludHMoKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJY2FsbHN1YiBnZXRQcm90b2NvbENvbnN0cmFpbnRzCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0UHJvdG9jb2xDb25zdHJhaW50cygpOiBDb25zdHJhaW50cwovLwovLyBSZXR1cm5zIHRoZSBwcm90b2NvbCBjb25zdHJhaW50cyBzbyB0aGF0IFVJcyBjYW4gbGltaXQgd2hhdCB1c2VycyBzcGVjaWZ5IGZvciB2YWxpZGF0b3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgpnZXRQcm90b2NvbENvbnN0cmFpbnRzOgoJcHJvdG8gMCAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjcxCgkvLyByZXR1cm4gewoJLy8gICAgICAgICAgICAgZXBvY2hQYXlvdXRSb3VuZHNNaW46IE1JTl9FUE9DSF9MRU5HVEgsCgkvLyAgICAgICAgICAgICBlcG9jaFBheW91dFJvdW5kc01heDogTUFYX0VQT0NIX0xFTkdUSCwKCS8vICAgICAgICAgICAgIG1pblBjdFRvVmFsaWRhdG9yV0ZvdXJEZWNpbWFsczogTUlOX1BDVF9UT19WQUxJREFUT1IsCgkvLyAgICAgICAgICAgICBtYXhQY3RUb1ZhbGlkYXRvcldGb3VyRGVjaW1hbHM6IE1BWF9QQ1RfVE9fVkFMSURBVE9SLAoJLy8gICAgICAgICAgICAgbWluRW50cnlTdGFrZTogTUlOX0FMR09fU1RBS0VfUEVSX1BPT0wsCgkvLyAgICAgICAgICAgICBtYXhBbGdvUGVyUG9vbDogdGhpcy5tYXhBbGdvQWxsb3dlZFBlclBvb2woKSwKCS8vICAgICAgICAgICAgIG1heEFsZ29QZXJWYWxpZGF0b3I6IHRoaXMubWF4QWxsb3dlZFN0YWtlKCksCgkvLyAgICAgICAgICAgICBhbXRDb25zaWRlcmVkU2F0dXJhdGVkOiB0aGlzLmFsZ29TYXR1cmF0aW9uTGV2ZWwoKSwKCS8vICAgICAgICAgICAgIG1heE5vZGVzOiBNQVhfTk9ERVMsCgkvLyAgICAgICAgICAgICBtYXhQb29sc1Blck5vZGU6IE1BWF9QT09MU19QRVJfTk9ERSwKCS8vICAgICAgICAgICAgIG1heFN0YWtlcnNQZXJQb29sOiBNQVhfU1RBS0VSU19QRVJfUE9PTCwKCS8vICAgICAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMGY0MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZjQyNDAwMDAwMDAwMDAwMGY0MjQwCgljYWxsc3ViIG1heEFsZ29BbGxvd2VkUGVyUG9vbAoJaXRvYgoJY29uY2F0CgljYWxsc3ViIG1heEFsbG93ZWRTdGFrZQoJaXRvYgoJY29uY2F0CgljYWxsc3ViIGFsZ29TYXR1cmF0aW9uTGV2ZWwKCWl0b2IKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDgKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDMKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwYzgKCWNvbmNhdAoJcmV0c3ViCgovLyBnZXROdW1WYWxpZGF0b3JzKCl1aW50NjQKKmFiaV9yb3V0ZV9nZXROdW1WYWxpZGF0b3JzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGdldE51bVZhbGlkYXRvcnMoKXVpbnQ2NAoJY2FsbHN1YiBnZXROdW1WYWxpZGF0b3JzCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0TnVtVmFsaWRhdG9ycygpOiB1aW50NjQKLy8KLy8gUmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YgdmFsaWRhdG9ycwpnZXROdW1WYWxpZGF0b3JzOgoJcHJvdG8gMCAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjkxCgkvLyByZXR1cm4gdGhpcy5udW1WYWxpZGF0b3JzLnZhbHVlCglieXRlIDB4NmU3NTZkNTYgLy8gIm51bVYiCglhcHBfZ2xvYmFsX2dldAoJcmV0c3ViCgovLyBnZXRWYWxpZGF0b3JDb25maWcodWludDY0KSh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2dldFZhbGlkYXRvckNvbmZpZzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZ2V0VmFsaWRhdG9yQ29uZmlnKHVpbnQ2NCkodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgZ2V0VmFsaWRhdG9yQ29uZmlnCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0VmFsaWRhdG9yQ29uZmlnKHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUpOiBWYWxpZGF0b3JDb25maWcKZ2V0VmFsaWRhdG9yQ29uZmlnOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Mjk2CgkvLyByZXR1cm4gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcKCWludCAwCglpbnQgMjQyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJcmV0c3ViCgovLyBnZXRWYWxpZGF0b3JTdGF0ZSh1aW50NjQpKHVpbnQxNix1aW50NjQsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9nZXRWYWxpZGF0b3JTdGF0ZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZ2V0VmFsaWRhdG9yU3RhdGUodWludDY0KSh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGdldFZhbGlkYXRvclN0YXRlCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0VmFsaWRhdG9yU3RhdGUodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSk6IFZhbGlkYXRvckN1clN0YXRlCmdldFZhbGlkYXRvclN0YXRlOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzAxCgkvLyByZXR1cm4gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5zdGF0ZQoJaW50IDI0MiAvLyBoZWFkT2Zmc2V0CglpbnQgMjYKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglyZXRzdWIKCi8vIGdldFZhbGlkYXRvck93bmVyQW5kTWFuYWdlcih1aW50NjQpKGFkZHJlc3MsYWRkcmVzcykKKmFiaV9yb3V0ZV9nZXRWYWxpZGF0b3JPd25lckFuZE1hbmFnZXI6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbGlkYXRvcklkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGdldFZhbGlkYXRvck93bmVyQW5kTWFuYWdlcih1aW50NjQpKGFkZHJlc3MsYWRkcmVzcykKCWNhbGxzdWIgZ2V0VmFsaWRhdG9yT3duZXJBbmRNYW5hZ2VyCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0VmFsaWRhdG9yT3duZXJBbmRNYW5hZ2VyKHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUpOiBbQWRkcmVzcywgQWRkcmVzc10KZ2V0VmFsaWRhdG9yT3duZXJBbmRNYW5hZ2VyOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzA2CgkvLyByZXR1cm4gWwoJLy8gICAgICAgICAgICAgdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcub3duZXIsCgkvLyAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5tYW5hZ2VyLAoJLy8gICAgICAgICBdCglpbnQgOAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJaW50IDQwCglpbnQgMzIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0Cgljb25jYXQKCXJldHN1YgoKLy8gZ2V0UG9vbHModWludDY0KSh1aW50NjQsdWludDE2LHVpbnQ2NClbXQoqYWJpX3JvdXRlX2dldFBvb2xzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBnZXRQb29scyh1aW50NjQpKHVpbnQ2NCx1aW50MTYsdWludDY0KVtdCgljYWxsc3ViIGdldFBvb2xzCglkdXAKCWxlbgoJaW50IDE4CgkvCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0UG9vbHModmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSk6IFBvb2xJbmZvW10KLy8KLy8gUmV0dXJuIGxpc3Qgb2YgYWxsIHBvb2xzIGZvciB0aGlzIHZhbGlkYXRvci4KLy8gQHBhcmFtIHt1aW50NjR9IHZhbGlkYXRvcklkCi8vIEByZXR1cm4ge1Bvb2xJbmZvW119IC0gYXJyYXkgb2YgcG9vbHMKLy8gTm90IGNhbGxhYmxlIGZyb20gb3RoZXIgY29udHJhY3RzIGJlY2F1c2UgPjFLIHJldHVybiBidXQgY2FuIGJlIGNhbGxlZCB3LyBzaW11bGF0ZSB3aGljaCBidW1wcyBsb2cgcmV0dXJucwpnZXRQb29sczoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozMjAKCS8vIHJldERhdGE6IFBvb2xJbmZvW10gPSBbXQoJYnl0ZSAweAoJZnJhbWVfYnVyeSAwIC8vIHJldERhdGE6IFBvb2xJbmZvW10KCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozMjEKCS8vIHBvb2xTZXQgPSBjbG9uZSh0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnBvb2xzKQoJaW50IDI2OCAvLyBoZWFkT2Zmc2V0CglpbnQgNDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJZnJhbWVfYnVyeSAxIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDE2LHVpbnQ2NClbMjRdCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzIyCgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IHBvb2xTZXQubGVuZ3RoOyBpICs9IDEpCglpbnQgMAoJZnJhbWVfYnVyeSAyIC8vIGk6IHVpbnQ2NAoKKmZvcl8wOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzIyCgkvLyBpIDwgcG9vbFNldC5sZW5ndGgKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50IDI0Cgk8CglieiAqZm9yXzBfZW5kCgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjMyMwoJLy8gcG9vbFNldFtpXS5wb29sQXBwSWQgPT09IDAKCWZyYW1lX2RpZyAxIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDE2LHVpbnQ2NClbMjRdCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgMAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpbnQgMAoJPT0KCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgliICpmb3JfMF9lbmQKCippZjBfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzI3CgkvLyByZXREYXRhLnB1c2gocG9vbFNldFtpXSkKCWZyYW1lX2RpZyAwIC8vIHJldERhdGE6IFBvb2xJbmZvW10KCWZyYW1lX2RpZyAxIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDE2LHVpbnQ2NClbMjRdCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgMTgKCWV4dHJhY3QzCgljb25jYXQKCWZyYW1lX2J1cnkgMCAvLyByZXREYXRhOiBQb29sSW5mb1tdCgoqZm9yXzBfY29udGludWU6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozMjIKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAyIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzAKCipmb3JfMF9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozMjkKCS8vIHJldHVybiByZXREYXRhCglmcmFtZV9kaWcgMCAvLyByZXREYXRhOiBQb29sSW5mb1tdCgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBnZXRQb29sQXBwSWQodWludDY0LHVpbnQ2NCl1aW50NjQKKmFiaV9yb3V0ZV9nZXRQb29sQXBwSWQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHBvb2xJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZ2V0UG9vbEFwcElkKHVpbnQ2NCx1aW50NjQpdWludDY0CgljYWxsc3ViIGdldFBvb2xBcHBJZAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGdldFBvb2xBcHBJZCh2YWxpZGF0b3JJZDogdWludDY0LCBwb29sSWQ6IHVpbnQ2NCk6IHVpbnQ2NApnZXRQb29sQXBwSWQ6Cglwcm90byAyIDEKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozMzcKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIHBvb2xJZCAhPT0gMCAmJiBwb29sSWQgPD0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5wb29scy5sZW5ndGgsCgkvLyAgICAgICAgICAgICAncG9vbCBpZCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgbnVtYmVyIG9mIHBvb2xzIGZvciB0aGlzIHZhbGlkYXRvcicsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyAtMiAvLyBwb29sSWQ6IHVpbnQ2NAoJaW50IDAKCSE9CglkdXAKCWJ6ICpza2lwX2FuZDAKCWZyYW1lX2RpZyAtMiAvLyBwb29sSWQ6IHVpbnQ2NAoJaW50IDI0Cgk8PQoJJiYKCipza2lwX2FuZDA6CgkvLyBwb29sIGlkIG11c3QgYmUgYmV0d2VlbiAxIGFuZCBudW1iZXIgb2YgcG9vbHMgZm9yIHRoaXMgdmFsaWRhdG9yCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozNDEKCS8vIHJldHVybiB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnBvb2xzW3Bvb2xJZCAtIDFdLnBvb2xBcHBJZAoJaW50IDI2OCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgLTIgLy8gcG9vbElkOiB1aW50NjQKCWludCAxCgktCglpbnQgMTgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDAKCSsKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJcmV0c3ViCgovLyBnZXRQb29sSW5mbygodWludDY0LHVpbnQ2NCx1aW50NjQpKSh1aW50NjQsdWludDE2LHVpbnQ2NCkKKmFiaV9yb3V0ZV9nZXRQb29sSW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcG9vbEtleTogKHVpbnQ2NCx1aW50NjQsdWludDY0KQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAyNAoJPT0KCgkvLyBhcmd1bWVudCAwIChwb29sS2V5KSBmb3IgZ2V0UG9vbEluZm8gbXVzdCBiZSBhICh1aW50NjQsdWludDY0LHVpbnQ2NCkKCWFzc2VydAoKCS8vIGV4ZWN1dGUgZ2V0UG9vbEluZm8oKHVpbnQ2NCx1aW50NjQsdWludDY0KSkodWludDY0LHVpbnQxNix1aW50NjQpCgljYWxsc3ViIGdldFBvb2xJbmZvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0UG9vbEluZm8ocG9vbEtleTogVmFsaWRhdG9yUG9vbEtleSk6IFBvb2xJbmZvCmdldFBvb2xJbmZvOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzQ2CgkvLyByZXR1cm4gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnBvb2xzW3Bvb2xLZXkucG9vbElkIC0gMV0KCWludCAyNjggLy8gaGVhZE9mZnNldAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgOCA4CglidG9pCglpbnQgMQoJLQoJaW50IDE4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAxOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglyZXRzdWIKCi8vIGdldEN1ck1heFN0YWtlUGVyUG9vbCh1aW50NjQpdWludDY0CiphYmlfcm91dGVfZ2V0Q3VyTWF4U3Rha2VQZXJQb29sOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBnZXRDdXJNYXhTdGFrZVBlclBvb2wodWludDY0KXVpbnQ2NAoJY2FsbHN1YiBnZXRDdXJNYXhTdGFrZVBlclBvb2wKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBnZXRDdXJNYXhTdGFrZVBlclBvb2wodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGUgdGhlIG1heGltdW0gc3Rha2UgcGVyIHBvb2wgZm9yIGEgZ2l2ZW4gdmFsaWRhdG9yLgovLyBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIG1heEFsZ29QZXJQb29sLCBidXQgaXQgc2hvdWxkIGFsc28gbmV2ZXIgZ28gYWJvdmUgTWF4QWxsb3dlZFN0YWtlIC8gbnVtUG9vbHMgc28KLy8gYXMgcG9vbHMgYXJlIGFkZGVkIHRoZSBtYXggYWxsb3dlZCBwZXIgcG9vbCBjYW4gcmVkdWNlLgovLwovLyBAcGFyYW0ge1ZhbGlkYXRvcklkVHlwZX0gdmFsaWRhdG9ySWQgLSBUaGUgaWQgb2YgdGhlIHZhbGlkYXRvci4KZ2V0Q3VyTWF4U3Rha2VQZXJQb29sOgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM1NwoJLy8gbnVtUG9vbHMgPSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnN0YXRlLm51bVBvb2xzIGFzIHVpbnQ2NAoJaW50IDI0MgoJaW50IDIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDAgLy8gbnVtUG9vbHM6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM1OAoJLy8gaGFyZE1heERpdmlkZWRCZXR3ZWVuUG9vbHMgPSB0aGlzLm1heEFsbG93ZWRTdGFrZSgpIC8gbnVtUG9vbHMKCWNhbGxzdWIgbWF4QWxsb3dlZFN0YWtlCglmcmFtZV9kaWcgMCAvLyBudW1Qb29sczogdWludDY0CgkvCglmcmFtZV9idXJ5IDEgLy8gaGFyZE1heERpdmlkZWRCZXR3ZWVuUG9vbHM6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM1OQoJLy8gbWF4UGVyUG9vbDogdWludDY0ID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubWF4QWxnb1BlclBvb2wKCWludCAyMTcKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAyIC8vIG1heFBlclBvb2w6IHVpbnQ2NAoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozNjAKCS8vIG1heFBlclBvb2wgPT09IDAKCWZyYW1lX2RpZyAyIC8vIG1heFBlclBvb2w6IHVpbnQ2NAoJaW50IDAKCT09CglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzYxCgkvLyBtYXhQZXJQb29sID0gdGhpcy5tYXhBbGdvQWxsb3dlZFBlclBvb2woKQoJY2FsbHN1YiBtYXhBbGdvQWxsb3dlZFBlclBvb2wKCWZyYW1lX2J1cnkgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCippZjFfZW5kOgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM2MwoJLy8gaGFyZE1heERpdmlkZWRCZXR3ZWVuUG9vbHMgPCBtYXhQZXJQb29sCglmcmFtZV9kaWcgMSAvLyBoYXJkTWF4RGl2aWRlZEJldHdlZW5Qb29sczogdWludDY0CglmcmFtZV9kaWcgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCTwKCWJ6ICppZjJfZW5kCgoJLy8gKmlmMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozNjQKCS8vIG1heFBlclBvb2wgPSBoYXJkTWF4RGl2aWRlZEJldHdlZW5Qb29scwoJZnJhbWVfZGlnIDEgLy8gaGFyZE1heERpdmlkZWRCZXR3ZWVuUG9vbHM6IHVpbnQ2NAoJZnJhbWVfYnVyeSAyIC8vIG1heFBlclBvb2w6IHVpbnQ2NAoKKmlmMl9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozNjYKCS8vIHJldHVybiBtYXhQZXJQb29sCglmcmFtZV9kaWcgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGRvZXNTdGFrZXJOZWVkVG9QYXlNQlIoYWRkcmVzcylib29sCiphYmlfcm91dGVfZG9lc1N0YWtlck5lZWRUb1BheU1CUjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3Rha2VyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHN0YWtlcikgZm9yIGRvZXNTdGFrZXJOZWVkVG9QYXlNQlIgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgZG9lc1N0YWtlck5lZWRUb1BheU1CUihhZGRyZXNzKWJvb2wKCWNhbGxzdWIgZG9lc1N0YWtlck5lZWRUb1BheU1CUgoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBkb2VzU3Rha2VyTmVlZFRvUGF5TUJSKHN0YWtlcjogQWRkcmVzcyk6IGJvb2xlYW4KLy8KLy8gSGVscGVyIGNhbGxlcnMgY2FuIGNhbGwgdy8gc2ltdWxhdGUgdG8gZGV0ZXJtaW5lIGlmICdBZGRTdGFrZXInIE1CUiBzaG91bGQgYmUgaW5jbHVkZWQgdy8gc3Rha2luZyBhbW91bnQKLy8gQHBhcmFtIHN0YWtlcgpkb2VzU3Rha2VyTmVlZFRvUGF5TUJSOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Mzc1CgkvLyByZXR1cm4gIXRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLmV4aXN0cwoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cglib3hfbGVuCglzd2FwCglwb3AKCSEKCXJldHN1YgoKLy8gZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50KGFkZHJlc3MpKHVpbnQ2NCx1aW50NjQsdWludDY0KVtdCiphYmlfcm91dGVfZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBzdGFrZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMCAoc3Rha2VyKSBmb3IgZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50IG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGdldFN0YWtlZFBvb2xzRm9yQWNjb3VudChhZGRyZXNzKSh1aW50NjQsdWludDY0LHVpbnQ2NClbXQoJY2FsbHN1YiBnZXRTdGFrZWRQb29sc0ZvckFjY291bnQKCWR1cAoJbGVuCglpbnQgMjQKCS8KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBnZXRTdGFrZWRQb29sc0ZvckFjY291bnQoc3Rha2VyOiBBZGRyZXNzKTogVmFsaWRhdG9yUG9vbEtleVtdCi8vCi8vIFJldHJpZXZlcyB0aGUgc3Rha2VkIHBvb2xzIGZvciBhbiBhY2NvdW50LgovLwovLyBAcGFyYW0ge0FkZHJlc3N9IHN0YWtlciAtIFRoZSBhY2NvdW50IHRvIHJldHJpZXZlIHN0YWtlZCBwb29scyBmb3IuCi8vIEByZXR1cm4ge1ZhbGlkYXRvclBvb2xLZXlbXX0gLSBUaGUgYXJyYXkgb2Ygc3Rha2VkIHBvb2xzIGZvciB0aGUgYWNjb3VudC4KZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozODUKCS8vICF0aGlzLnN0YWtlclBvb2xTZXQoc3Rha2VyKS5leGlzdHMKCWJ5dGUgMHg3MzcwNzMgLy8gInNwcyIKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZXI6IEFkZHJlc3MKCWNvbmNhdAoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Mzg2CgkvLyByZXR1cm4gW10KCWJ5dGUgMHgKCWIgKmdldFN0YWtlZFBvb2xzRm9yQWNjb3VudCpyZXR1cm4KCippZjNfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Mzg4CgkvLyByZXREYXRhOiBWYWxpZGF0b3JQb29sS2V5W10gPSBbXQoJYnl0ZSAweAoJZnJhbWVfYnVyeSAwIC8vIHJldERhdGE6IFZhbGlkYXRvclBvb2xLZXlbXQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM4OQoJLy8gcG9vbFNldCA9IGNsb25lKHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlKQoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLnN0YWtlclBvb2xTZXQoc3Rha2VyKS52YWx1ZQoJYXNzZXJ0CglmcmFtZV9idXJ5IDEgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM5MAoJLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBwb29sU2V0Lmxlbmd0aDsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMiAvLyBpOiB1aW50NjQKCipmb3JfMToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM5MAoJLy8gaSA8IHBvb2xTZXQubGVuZ3RoCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCA2Cgk8CglieiAqZm9yXzFfZW5kCgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM5MQoJLy8gcG9vbFNldFtpXS5pZCAhPT0gMAoJZnJhbWVfZGlnIDEgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDAKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaW50IDAKCSE9CglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzkyCgkvLyByZXREYXRhLnB1c2gocG9vbFNldFtpXSkKCWZyYW1lX2RpZyAwIC8vIHJldERhdGE6IFZhbGlkYXRvclBvb2xLZXlbXQoJZnJhbWVfZGlnIDEgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDI0CglleHRyYWN0MwoJY29uY2F0CglmcmFtZV9idXJ5IDAgLy8gcmV0RGF0YTogVmFsaWRhdG9yUG9vbEtleVtdCgoqaWY0X2VuZDoKCipmb3JfMV9jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM5MAoJLy8gaSArPSAxCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDIgLy8gaTogdWludDY0CgliICpmb3JfMQoKKmZvcl8xX2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM5NQoJLy8gcmV0dXJuIHJldERhdGEKCWZyYW1lX2RpZyAwIC8vIHJldERhdGE6IFZhbGlkYXRvclBvb2xLZXlbXQoKKmdldFN0YWtlZFBvb2xzRm9yQWNjb3VudCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGdldFRva2VuUGF5b3V0UmF0aW8odWludDY0KSh1aW50NjRbMjRdLHVpbnQ2NCkKKmFiaV9yb3V0ZV9nZXRUb2tlblBheW91dFJhdGlvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBnZXRUb2tlblBheW91dFJhdGlvKHVpbnQ2NCkodWludDY0WzI0XSx1aW50NjQpCgljYWxsc3ViIGdldFRva2VuUGF5b3V0UmF0aW8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBnZXRUb2tlblBheW91dFJhdGlvKHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUpOiBQb29sVG9rZW5QYXlvdXRSYXRpbwovLwovLyBSZXRyaWV2ZXMgdGhlIHRva2VuIHBheW91dCByYXRpbyBmb3IgYSBnaXZlbiB2YWxpZGF0b3IgLSByZXR1cm5pbmcgdGhlIHBvb2wgcmF0aW9zIG9mIHdob2xlIHNvIHRoYXQgdG9rZW4KLy8gcGF5b3V0cyBhY3Jvc3MgcG9vbHMgY2FuIGJlIGJhc2VkIG9uIGEgc3RhYmxlIHNuYXBob3N0IG9mIHN0YWtlLgovLwovLyBAcGFyYW0ge1ZhbGlkYXRvcklkVHlwZX0gdmFsaWRhdG9ySWQgLSBUaGUgaWQgb2YgdGhlIHZhbGlkYXRvci4KLy8gQHJldHVybiB7UG9vbFRva2VuUGF5b3V0UmF0aW99IC0gVGhlIHRva2VuIHBheW91dCByYXRpbyBmb3IgdGhlIHZhbGlkYXRvci4KZ2V0VG9rZW5QYXlvdXRSYXRpbzoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQwNwoJLy8gcmV0dXJuIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUudG9rZW5QYXlvdXRSYXRpbwoJaW50IDcwMCAvLyBoZWFkT2Zmc2V0CglpbnQgMjAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJcmV0c3ViCgovLyBnZXROb2RlUG9vbEFzc2lnbm1lbnRzKHVpbnQ2NCkoKHVpbnQ2NFszXSlbOF0pCiphYmlfcm91dGVfZ2V0Tm9kZVBvb2xBc3NpZ25tZW50czoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZ2V0Tm9kZVBvb2xBc3NpZ25tZW50cyh1aW50NjQpKCh1aW50NjRbM10pWzhdKQoJY2FsbHN1YiBnZXROb2RlUG9vbEFzc2lnbm1lbnRzCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0Tm9kZVBvb2xBc3NpZ25tZW50cyh2YWxpZGF0b3JJZDogdWludDY0KTogTm9kZVBvb2xBc3NpZ25tZW50Q29uZmlnCmdldE5vZGVQb29sQXNzaWdubWVudHM6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0MTIKCS8vIGFzc2VydCh0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLmV4aXN0cywgInRoZSBzcGVjaWZpZWQgdmFsaWRhdG9yIGlkIGRvZXNuJ3QgZXhpc3QiKQoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJYm94X2xlbgoJc3dhcAoJcG9wCgoJLy8gdGhlIHNwZWNpZmllZCB2YWxpZGF0b3IgaWQgZG9lc24ndCBleGlzdAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NDE0CgkvLyByZXR1cm4gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5ub2RlUG9vbEFzc2lnbm1lbnRzCglpbnQgOTAwIC8vIGhlYWRPZmZzZXQKCWludCAxOTIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogdWludDY0CglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglyZXRzdWIKCi8vIGdldE5GRFJlZ2lzdHJ5SUQoKXVpbnQ2NAoqYWJpX3JvdXRlX2dldE5GRFJlZ2lzdHJ5SUQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgZ2V0TkZEUmVnaXN0cnlJRCgpdWludDY0CgljYWxsc3ViIGdldE5GRFJlZ2lzdHJ5SUQKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBnZXRORkRSZWdpc3RyeUlEKCk6IHVpbnQ2NApnZXRORkRSZWdpc3RyeUlEOgoJcHJvdG8gMCAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NDE4CgkvLyByZXR1cm4gdGhpcy5uZmRSZWdpc3RyeUFwcElkCglwdXNoaW50IFRNUExfbmZkUmVnaXN0cnlBcHBJZAoJcmV0c3ViCgovLyBhZGRWYWxpZGF0b3IocGF5LHN0cmluZywodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkpdWludDY0CiphYmlfcm91dGVfYWRkVmFsaWRhdG9yOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBjb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludCAyNDIKCT09CgoJLy8gYXJndW1lbnQgMCAoY29uZmlnKSBmb3IgYWRkVmFsaWRhdG9yIG11c3QgYmUgYSAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWFzc2VydAoKCS8vIG5mZE5hbWU6IHN0cmluZwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCgkvLyBtYnJQYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAyIChtYnJQYXltZW50KSBmb3IgYWRkVmFsaWRhdG9yIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYWRkVmFsaWRhdG9yKHBheSxzdHJpbmcsKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpKXVpbnQ2NAoJY2FsbHN1YiBhZGRWYWxpZGF0b3IKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhZGRWYWxpZGF0b3IobWJyUGF5bWVudDogUGF5VHhuLCBuZmROYW1lOiBzdHJpbmcsIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnKTogdWludDY0Ci8vCi8vIEFkZHMgYSBuZXcgdmFsaWRhdG9yCi8vIFJlcXVpcmVzIGF0IGxlYXN0IDEwIEFMR08gYXMgdGhlICdmZWUnIGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gaGVscCBkaXNzdWFkZSBzcGFtbWVkIHZhbGlkYXRvciBhZGRzLgovLwovLyBAcGFyYW0ge1BheVR4bn0gbWJyUGF5bWVudCBwYXltZW50IGZyb20gY2FsbGVyIHdoaWNoIGNvdmVycyBtYnIgaW5jcmVhc2Ugb2YgbmV3IHZhbGlkYXRvciBzdG9yYWdlCi8vIEBwYXJhbSB7c3RyaW5nfSBuZmROYW1lIChPcHRpb25hbCkgTmFtZSBvZiBuZmQgKHVzZWQgYXMgZG91YmxlLWNoZWNrIGFnYWluc3QgaWQgc3BlY2lmaWVkIGluIGNvbmZpZykKLy8gQHBhcmFtIHtWYWxpZGF0b3JDb25maWd9IGNvbmZpZyBWYWxpZGF0b3JDb25maWcgc3RydWN0Ci8vIEByZXR1cm5zIHt1aW50NjR9IHZhbGlkYXRvciBpZAphZGRWYWxpZGF0b3I6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQzMAoJLy8gdGhpcy52YWxpZGF0ZUNvbmZpZyhjb25maWcpCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWNhbGxzdWIgdmFsaWRhdGVDb25maWcKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0MzEKCS8vIGFzc2VydChjb25maWcub3duZXIgIT09IEFkZHJlc3MuemVyb0FkZHJlc3MpCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgOCAzMgoJZ2xvYmFsIFplcm9BZGRyZXNzCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NDMyCgkvLyBhc3NlcnQoY29uZmlnLm1hbmFnZXIgIT09IEFkZHJlc3MuemVyb0FkZHJlc3MpCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgNDAgMzIKCWdsb2JhbCBaZXJvQWRkcmVzcwoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQzMwoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gY29uZmlnLm93bmVyLCAnc2VuZGVyIG11c3QgYmUgb3duZXIgdG8gYWRkIG5ldyB2YWxpZGF0b3InKQoJdHhuIFNlbmRlcgoJZnJhbWVfZGlnIC0zIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDggMzIKCT09CgoJLy8gc2VuZGVyIG11c3QgYmUgb3duZXIgdG8gYWRkIG5ldyB2YWxpZGF0b3IKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQzNQoJLy8gdmVyaWZ5UGF5VHhuKG1iclBheW1lbnQsIHsgcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsIGFtb3VudDogdGhpcy5nZXRNYnJBbW91bnRzKCkuYWRkVmFsaWRhdG9yTWJyIH0pCgkvLyB2ZXJpZnkgcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBtYnJQYXltZW50OiBQYXlUeG4KCWd0eG5zIFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6Im1iclBheW1lbnQiLCJmaWVsZCI6InJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBtYnJQYXltZW50OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJY2FsbHN1YiBnZXRNYnJBbW91bnRzCglleHRyYWN0IDAgOAoJYnRvaQoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6Im1iclBheW1lbnQiLCJmaWVsZCI6ImFtb3VudCIsImV4cGVjdGVkIjoidGhpcy5nZXRNYnJBbW91bnRzKCkuYWRkVmFsaWRhdG9yTWJyIn0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQzNwoJLy8gYXNzZXJ0KG1iclBheW1lbnQuZmVlID4gMTAgKiAxMDAwMDAwLCAnZmVlIG11c3QgYmUgMTAgQUxHTyBvciBtb3JlIHRvIHByZXZlbnQgc3BhbW1pbmcgb2YgdmFsaWRhdG9ycycpCglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5bWVudDogUGF5VHhuCglndHhucyBGZWUKCWludCAxMDAwMDAwMAoJPgoKCS8vIGZlZSBtdXN0IGJlIDEwIEFMR08gb3IgbW9yZSB0byBwcmV2ZW50IHNwYW1taW5nIG9mIHZhbGlkYXRvcnMKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ0MAoJLy8gdmFsaWRhdG9ySWQgPSB0aGlzLm51bVZhbGlkYXRvcnMudmFsdWUgKyAxCglieXRlIDB4NmU3NTZkNTYgLy8gIm51bVYiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMCAvLyB2YWxpZGF0b3JJZDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NDQxCgkvLyB0aGlzLm51bVZhbGlkYXRvcnMudmFsdWUgPSB2YWxpZGF0b3JJZAoJYnl0ZSAweDZlNzU2ZDU2IC8vICJudW1WIgoJZnJhbWVfZGlnIDAgLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NDMKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkuY3JlYXRlKCkKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvcklkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJaW50IDEwOTIKCWJveF9jcmVhdGUKCXBvcAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ0NAoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcgPSBjb25maWcKCWludCAwCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvcklkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NDUKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLmlkID0gdmFsaWRhdG9ySWQKCWludCAwCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JJZDogdWludDY0CglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JJZDogdWludDY0CglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ0OAoJLy8gY29uZmlnLm5mZEZvckluZm8gIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBjb25maWc6IFZhbGlkYXRvckNvbmZpZwoJZXh0cmFjdCA3MiA4CglidG9pCglpbnQgMAoJIT0KCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NTAKCS8vIHNlbmRBcHBDYWxsKHsKCS8vICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHRoaXMubmZkUmVnaXN0cnlBcHBJZCksCgkvLyAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25BcmdzOiBbJ2lzX3ZhbGlkX25mZF9hcHBpZCcsIG5mZE5hbWUsIGl0b2IoY29uZmlnLm5mZEZvckluZm8pXSwKCS8vICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnM6IFtBcHBJRC5mcm9tVWludDY0KGNvbmZpZy5uZmRGb3JJbmZvKV0sCgkvLyAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NTEKCS8vIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQodGhpcy5uZmRSZWdpc3RyeUFwcElkKQoJcHVzaGludCBUTVBMX25mZFJlZ2lzdHJ5QXBwSWQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ1MgoJLy8gYXBwbGljYXRpb25BcmdzOiBbJ2lzX3ZhbGlkX25mZF9hcHBpZCcsIG5mZE5hbWUsIGl0b2IoY29uZmlnLm5mZEZvckluZm8pXQoJYnl0ZSAweDY5NzM1Zjc2NjE2YzY5NjQ1ZjZlNjY2NDVmNjE3MDcwNjk2NCAvLyAiaXNfdmFsaWRfbmZkX2FwcGlkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAtMiAvLyBuZmROYW1lOiBzdHJpbmcKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgNzIgOAoJYnRvaQoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NTMKCS8vIGFwcGxpY2F0aW9uczogW0FwcElELmZyb21VaW50NjQoY29uZmlnLm5mZEZvckluZm8pXQoJZnJhbWVfZGlnIC0zIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDcyIDgKCWJ0b2kKCWl0eG5fZmllbGQgQXBwbGljYXRpb25zCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ1NQoJLy8gYXNzZXJ0KGJ0b2kodGhpcy5pdHhuLmxhc3RMb2cpID09PSAxLCAicHJvdmlkZWQgTkZEIGlzbid0IHZhbGlkIikKCWl0eG4gTGFzdExvZwoJYnRvaQoJaW50IDEKCT09CgoJLy8gcHJvdmlkZWQgTkZEIGlzbid0IHZhbGlkCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NTcKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IChBcHBJRC5mcm9tVWludDY0KGNvbmZpZy5uZmRGb3JJbmZvKS5nbG9iYWxTdGF0ZSgnaS5vd25lci5hJykgYXMgQWRkcmVzcyksCgkvLyAgICAgICAgICAgICAgICAgJ0lmIHNwZWNpZnlpbmcgTkZELCBhY2NvdW50IGFkZGluZyB2YWxpZGF0b3IgbXVzdCBiZSBvd25lcicsCgkvLyAgICAgICAgICAgICApCgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgNzIgOAoJYnRvaQoJYnl0ZSAweDY5MmU2Zjc3NmU2NTcyMmU2MSAvLyAiaS5vd25lci5hIgoJYXBwX2dsb2JhbF9nZXRfZXgKCgkvLyBnbG9iYWwgc3RhdGUgdmFsdWUgZG9lcyBub3QgZXhpc3Q6IEFwcElELmZyb21VaW50NjQoY29uZmlnLm5mZEZvckluZm8pLmdsb2JhbFN0YXRlKCdpLm93bmVyLmEnKQoJYXNzZXJ0Cgk9PQoKCS8vIElmIHNwZWNpZnlpbmcgTkZELCBhY2NvdW50IGFkZGluZyB2YWxpZGF0b3IgbXVzdCBiZSBvd25lcgoJYXNzZXJ0CgoqaWY1X2VuZDoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NjMKCS8vIGNvbmZpZy5lbnRyeUdhdGluZ1R5cGUgPT09IEdBVElOR19UWVBFX0NSRUFURURfQllfTkZEX0FERFJFU1NFUyB8fAoJLy8gICAgICAgICAgICAgY29uZmlnLmVudHJ5R2F0aW5nVHlwZSA9PT0gR0FUSU5HX1RZUEVfU0VHTUVOVF9PRl9ORkQKCWZyYW1lX2RpZyAtMyAvLyBjb25maWc6IFZhbGlkYXRvckNvbmZpZwoJZXh0cmFjdCA4MCAxCglidG9pCglpbnQgMwoJPT0KCWR1cAoJYm56ICpza2lwX29yMAoJZnJhbWVfZGlnIC0zIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDgwIDEKCWJ0b2kKCWludCA0Cgk9PQoJfHwKCipza2lwX29yMDoKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NjcKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgICAgICB0aGlzLmlzTkZEQXBwSURWYWxpZChjb25maWcuZW50cnlHYXRpbmdBc3NldHNbMF0pLAoJLy8gICAgICAgICAgICAgICAgICdwcm92aWRlZCBORkQgQXBwIGlkIGZvciBnYXRpbmcgbXVzdCBiZSB2YWxpZCBORkQnLAoJLy8gICAgICAgICAgICAgKQoJZnJhbWVfZGlnIC0zIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDExMyA4CglidG9pCgljYWxsc3ViIGlzTkZEQXBwSURWYWxpZAoKCS8vIHByb3ZpZGVkIE5GRCBBcHAgaWQgZm9yIGdhdGluZyBtdXN0IGJlIHZhbGlkIE5GRAoJYXNzZXJ0CgoqaWY2X2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ3MwoJLy8gcmV0dXJuIHZhbGlkYXRvcklkCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JJZDogdWludDY0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIGNoYW5nZVZhbGlkYXRvck1hbmFnZXIodWludDY0LGFkZHJlc3Mpdm9pZAoqYWJpX3JvdXRlX2NoYW5nZVZhbGlkYXRvck1hbmFnZXI6CgkvLyBtYW5hZ2VyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKG1hbmFnZXIpIGZvciBjaGFuZ2VWYWxpZGF0b3JNYW5hZ2VyIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBjaGFuZ2VWYWxpZGF0b3JNYW5hZ2VyKHVpbnQ2NCxhZGRyZXNzKXZvaWQKCWNhbGxzdWIgY2hhbmdlVmFsaWRhdG9yTWFuYWdlcgoJaW50IDEKCXJldHVybgoKLy8gY2hhbmdlVmFsaWRhdG9yTWFuYWdlcih2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlLCBtYW5hZ2VyOiBBZGRyZXNzKTogdm9pZAovLwovLyBDaGFuZ2VzIHRoZSBWYWxpZGF0b3IgbWFuYWdlciBmb3IgYSBzcGVjaWZpYyBWYWxpZGF0b3IgaWQuCi8vIFsgT05MWSBPV05FUiBDQU4gQ0hBTkdFIF0KLy8KLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3IgdG8gY2hhbmdlIHRoZSBtYW5hZ2VyIGZvci4KLy8gQHBhcmFtIHtBZGRyZXNzfSBtYW5hZ2VyIC0gVGhlIG5ldyBtYW5hZ2VyIGFkZHJlc3MuCmNoYW5nZVZhbGlkYXRvck1hbmFnZXI6Cglwcm90byAyIDAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0ODQKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcub3duZXIsCgkvLyAgICAgICAgICAgICAnY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IHZhbGlkYXRvciBvd25lcicsCgkvLyAgICAgICAgICkKCXR4biBTZW5kZXIKCWludCA4CglpbnQgMzIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0Cgk9PQoKCS8vIGNhbiBvbmx5IGJlIGNhbGxlZCBieSB2YWxpZGF0b3Igb3duZXIKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ4OAoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubWFuYWdlciA9IG1hbmFnZXIKCWludCA0MAoJZnJhbWVfZGlnIC0yIC8vIG1hbmFnZXI6IEFkZHJlc3MKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCglyZXRzdWIKCi8vIGNoYW5nZVZhbGlkYXRvclN1bnNldEluZm8odWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2NoYW5nZVZhbGlkYXRvclN1bnNldEluZm86CgkvLyBzdW5zZXR0aW5nVG86IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoKCS8vIHN1bnNldHRpbmdPbjogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgY2hhbmdlVmFsaWRhdG9yU3Vuc2V0SW5mbyh1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIGNoYW5nZVZhbGlkYXRvclN1bnNldEluZm8KCWludCAxCglyZXR1cm4KCi8vIGNoYW5nZVZhbGlkYXRvclN1bnNldEluZm8odmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgc3Vuc2V0dGluZ09uOiB1aW50NjQsIHN1bnNldHRpbmdUbzogVmFsaWRhdG9ySWRUeXBlKTogdm9pZAovLwovLyBVcGRhdGVzIHRoZSBzdW5zZXQgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gdmFsaWRhdG9yLgovLyBbIE9OTFkgT1dORVIgQ0FOIENIQU5HRSBdCi8vCi8vIEBwYXJhbSB7VmFsaWRhdG9ySWRUeXBlfSB2YWxpZGF0b3JJZCAtIFRoZSBpZCBvZiB0aGUgdmFsaWRhdG9yIHRvIHVwZGF0ZS4KLy8gQHBhcmFtIHt1aW50NjR9IHN1bnNldHRpbmdPbiAtIFRoZSBuZXcgc3Vuc2V0IHRpbWVzdGFtcC4KLy8gQHBhcmFtIHt1aW50NjR9IHN1bnNldHRpbmdUbyAtIFRoZSBuZXcgc3Vuc2V0IHRvIHZhbGlkYXRvciBpZC4KY2hhbmdlVmFsaWRhdG9yU3Vuc2V0SW5mbzoKCXByb3RvIDMgMAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjUwMAoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgdGhpcy50eG4uc2VuZGVyID09PSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5vd25lciwKCS8vICAgICAgICAgICAgICdjYW4gb25seSBiZSBjYWxsZWQgYnkgdmFsaWRhdG9yIG93bmVyJywKCS8vICAgICAgICAgKQoJdHhuIFNlbmRlcgoJaW50IDgKCWludCAzMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCT09CgoJLy8gY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IHZhbGlkYXRvciBvd25lcgoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTA0CgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5zdW5zZXR0aW5nT24gPSBzdW5zZXR0aW5nT24KCWludCAyMjYKCWZyYW1lX2RpZyAtMiAvLyBzdW5zZXR0aW5nT246IHVpbnQ2NAoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1MDUKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLnN1bnNldHRpbmdUbyA9IHN1bnNldHRpbmdUbwoJaW50IDIzNAoJZnJhbWVfZGlnIC0zIC8vIHN1bnNldHRpbmdUbzogVmFsaWRhdG9ySWRUeXBlCglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoJcmV0c3ViCgovLyBjaGFuZ2VWYWxpZGF0b3JORkQodWludDY0LHVpbnQ2NCxzdHJpbmcpdm9pZAoqYWJpX3JvdXRlX2NoYW5nZVZhbGlkYXRvck5GRDoKCS8vIG5mZE5hbWU6IHN0cmluZwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZXh0cmFjdCAyIDAKCgkvLyBuZmRBcHBJRDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgY2hhbmdlVmFsaWRhdG9yTkZEKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXZvaWQKCWNhbGxzdWIgY2hhbmdlVmFsaWRhdG9yTkZECglpbnQgMQoJcmV0dXJuCgovLyBjaGFuZ2VWYWxpZGF0b3JORkQodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgbmZkQXBwSUQ6IHVpbnQ2NCwgbmZkTmFtZTogc3RyaW5nKTogdm9pZAovLwovLyBDaGFuZ2VzIHRoZSBORkQgZm9yIGEgdmFsaWRhdG9yIGluIHRoZSB2YWxpZGF0b3JMaXN0IGNvbnRyYWN0LgovLyBbIE9OTFkgT1dORVIgQ0FOIENIQU5HRSBdCi8vCi8vIEBwYXJhbSB7VmFsaWRhdG9ySWRUeXBlfSB2YWxpZGF0b3JJZCAtIFRoZSBpZCBvZiB0aGUgdmFsaWRhdG9yIHRvIHVwZGF0ZS4KLy8gQHBhcmFtIHt1aW50NjR9IG5mZEFwcElEIC0gVGhlIGFwcGxpY2F0aW9uIGlkIG9mIHRoZSBORkQgdG8gYXNzaWduIHRvIHRoZSB2YWxpZGF0b3IuCi8vIEBwYXJhbSB7c3RyaW5nfSBuZmROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIE5GRCAod2hpY2ggbXVzdCBtYXRjaCkKY2hhbmdlVmFsaWRhdG9yTkZEOgoJcHJvdG8gMyAwCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTE4CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLm93bmVyLAoJLy8gICAgICAgICAgICAgJ2NhbiBvbmx5IGJlIGNhbGxlZCBieSB2YWxpZGF0b3Igb3duZXInLAoJLy8gICAgICAgICApCgl0eG4gU2VuZGVyCglpbnQgOAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJPT0KCgkvLyBjYW4gb25seSBiZSBjYWxsZWQgYnkgdmFsaWRhdG9yIG93bmVyCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1MjMKCS8vIHNlbmRBcHBDYWxsKHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQodGhpcy5uZmRSZWdpc3RyeUFwcElkKSwKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uQXJnczogWydpc192YWxpZF9uZmRfYXBwaWQnLCBuZmROYW1lLCBpdG9iKG5mZEFwcElEKV0sCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbnM6IFtBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKV0sCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjUyNAoJLy8gYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NCh0aGlzLm5mZFJlZ2lzdHJ5QXBwSWQpCglwdXNoaW50IFRNUExfbmZkUmVnaXN0cnlBcHBJZAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTI1CgkvLyBhcHBsaWNhdGlvbkFyZ3M6IFsnaXNfdmFsaWRfbmZkX2FwcGlkJywgbmZkTmFtZSwgaXRvYihuZmRBcHBJRCldCglieXRlIDB4Njk3MzVmNzY2MTZjNjk2NDVmNmU2NjY0NWY2MTcwNzA2OTY0IC8vICJpc192YWxpZF9uZmRfYXBwaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIC0zIC8vIG5mZE5hbWU6IHN0cmluZwoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAtMiAvLyBuZmRBcHBJRDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjUyNgoJLy8gYXBwbGljYXRpb25zOiBbQXBwSUQuZnJvbVVpbnQ2NChuZmRBcHBJRCldCglmcmFtZV9kaWcgLTIgLy8gbmZkQXBwSUQ6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTI5CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IChBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKS5nbG9iYWxTdGF0ZSgnaS5vd25lci5hJykgYXMgQWRkcmVzcyksCgkvLyAgICAgICAgICAgICAnSWYgc3BlY2lmeWluZyBORkQsIGFjY291bnQgYWRkaW5nIHZhbGlkYXRvciBtdXN0IGJlIG93bmVyJywKCS8vICAgICAgICAgKQoJdHhuIFNlbmRlcgoJZnJhbWVfZGlnIC0yIC8vIG5mZEFwcElEOiB1aW50NjQKCWJ5dGUgMHg2OTJlNmY3NzZlNjU3MjJlNjEgLy8gImkub3duZXIuYSIKCWFwcF9nbG9iYWxfZ2V0X2V4CgoJLy8gZ2xvYmFsIHN0YXRlIHZhbHVlIGRvZXMgbm90IGV4aXN0OiBBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKS5nbG9iYWxTdGF0ZSgnaS5vd25lci5hJykKCWFzc2VydAoJPT0KCgkvLyBJZiBzcGVjaWZ5aW5nIE5GRCwgYWNjb3VudCBhZGRpbmcgdmFsaWRhdG9yIG11c3QgYmUgb3duZXIKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjUzMwoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubmZkRm9ySW5mbyA9IG5mZEFwcElECglpbnQgNzIKCWZyYW1lX2RpZyAtMiAvLyBuZmRBcHBJRDogdWludDY0CglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoJcmV0c3ViCgovLyBjaGFuZ2VWYWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcyh1aW50NjQsYWRkcmVzcyl2b2lkCiphYmlfcm91dGVfY2hhbmdlVmFsaWRhdG9yQ29tbWlzc2lvbkFkZHJlc3M6CgkvLyBjb21taXNzaW9uQWRkcmVzczogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChjb21taXNzaW9uQWRkcmVzcykgZm9yIGNoYW5nZVZhbGlkYXRvckNvbW1pc3Npb25BZGRyZXNzIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBjaGFuZ2VWYWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcyh1aW50NjQsYWRkcmVzcyl2b2lkCgljYWxsc3ViIGNoYW5nZVZhbGlkYXRvckNvbW1pc3Npb25BZGRyZXNzCglpbnQgMQoJcmV0dXJuCgovLyBjaGFuZ2VWYWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcyh2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlLCBjb21taXNzaW9uQWRkcmVzczogQWRkcmVzcyk6IHZvaWQKLy8KLy8gQ2hhbmdlIHRoZSBjb21taXNzaW9uIGFkZHJlc3MgdGhhdCB2YWxpZGF0b3IgcmV3YXJkcyBhcmUgc2VudCB0by4KLy8gWyBPTkxZIE9XTkVSIENBTiBDSEFOR0UgXQpjaGFuZ2VWYWxpZGF0b3JDb21taXNzaW9uQWRkcmVzczoKCXByb3RvIDIgMAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjU0MQoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgdGhpcy50eG4uc2VuZGVyID09PSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5vd25lciwKCS8vICAgICAgICAgICAgICdjYW4gb25seSBiZSBjYWxsZWQgYnkgdmFsaWRhdG9yIG93bmVyJywKCS8vICAgICAgICAgKQoJdHhuIFNlbmRlcgoJaW50IDgKCWludCAzMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCT09CgoJLy8gY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IHZhbGlkYXRvciBvd25lcgoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTQ1CgkvLyBhc3NlcnQoY29tbWlzc2lvbkFkZHJlc3MgIT09IEFkZHJlc3MuemVyb0FkZHJlc3MpCglmcmFtZV9kaWcgLTIgLy8gY29tbWlzc2lvbkFkZHJlc3M6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjU0NgoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcudmFsaWRhdG9yQ29tbWlzc2lvbkFkZHJlc3MgPSBjb21taXNzaW9uQWRkcmVzcwoJaW50IDE3NwoJZnJhbWVfZGlnIC0yIC8vIGNvbW1pc3Npb25BZGRyZXNzOiBBZGRyZXNzCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoJcmV0c3ViCgovLyBjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvKHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0KXZvaWQKKmFiaV9yb3V0ZV9jaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvOgoJLy8gUmV3YXJkUGVyUGF5b3V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDYKCWJ0b2kKCgkvLyBHYXRpbmdBc3NldE1pbkJhbGFuY2U6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQoJYnRvaQoKCS8vIEVudHJ5R2F0aW5nQXNzZXRzOiB1aW50NjRbNF0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMiAoRW50cnlHYXRpbmdBc3NldHMpIGZvciBjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvIG11c3QgYmUgYSB1aW50NjRbNF0KCWFzc2VydAoKCS8vIEVudHJ5R2F0aW5nQWRkcmVzczogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAzIChFbnRyeUdhdGluZ0FkZHJlc3MpIGZvciBjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBFbnRyeUdhdGluZ1R5cGU6IHVpbnQ4Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDEKCT09CgoJLy8gYXJndW1lbnQgNCAoRW50cnlHYXRpbmdUeXBlKSBmb3IgY2hhbmdlVmFsaWRhdG9yUmV3YXJkSW5mbyBtdXN0IGJlIGEgdWludDgKCWFzc2VydAoJYnRvaQoKCS8vIHZhbGlkYXRvcklkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGNoYW5nZVZhbGlkYXRvclJld2FyZEluZm8odWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQpdm9pZAoJY2FsbHN1YiBjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvCglpbnQgMQoJcmV0dXJuCgovLyBjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvKHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUsIEVudHJ5R2F0aW5nVHlwZTogdWludDgsIEVudHJ5R2F0aW5nQWRkcmVzczogQWRkcmVzcywgRW50cnlHYXRpbmdBc3NldHM6IFN0YXRpY0FycmF5PHVpbnQ2NCwgND4sIEdhdGluZ0Fzc2V0TWluQmFsYW5jZTogdWludDY0LCBSZXdhcmRQZXJQYXlvdXQ6IHVpbnQ2NCk6IHZvaWQKLy8KLy8gQWxsb3cgdGhlIGFkZGl0aW9uYWwgcmV3YXJkcyAoZ2F0aW5nIGVudHJ5LCBhZGRpdGlvbmFsIHRva2VuIHJld2FyZHMpIGluZm9ybWF0aW9uIGJlIGNoYW5nZWQgYXQgd2lsbC4KLy8gWyBPTkxZIE9XTkVSIENBTiBDSEFOR0UgXQpjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvOgoJcHJvdG8gNiAwCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTYxCgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLm93bmVyLAoJLy8gICAgICAgICAgICAgJ2NhbiBvbmx5IGJlIGNhbGxlZCBieSB2YWxpZGF0b3Igb3duZXInLAoJLy8gICAgICAgICApCgl0eG4gU2VuZGVyCglpbnQgOAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJPT0KCgkvLyBjYW4gb25seSBiZSBjYWxsZWQgYnkgdmFsaWRhdG9yIG93bmVyCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1NjYKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLmVudHJ5R2F0aW5nVHlwZSA9IEVudHJ5R2F0aW5nVHlwZQoJaW50IDgwCglmcmFtZV9kaWcgLTIgLy8gRW50cnlHYXRpbmdUeXBlOiB1aW50OAoJaXRvYgoJZXh0cmFjdCA3IDEKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTY3CgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5lbnRyeUdhdGluZ0FkZHJlc3MgPSBFbnRyeUdhdGluZ0FkZHJlc3MKCWludCA4MQoJZnJhbWVfZGlnIC0zIC8vIEVudHJ5R2F0aW5nQWRkcmVzczogQWRkcmVzcwoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1NjgKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLmVudHJ5R2F0aW5nQXNzZXRzID0gRW50cnlHYXRpbmdBc3NldHMKCWludCAxMTMKCWZyYW1lX2RpZyAtNCAvLyBFbnRyeUdhdGluZ0Fzc2V0czogU3RhdGljQXJyYXk8dWludDY0LCA0PgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1NjkKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLmdhdGluZ0Fzc2V0TWluQmFsYW5jZSA9IEdhdGluZ0Fzc2V0TWluQmFsYW5jZQoJaW50IDE0NQoJZnJhbWVfZGlnIC01IC8vIEdhdGluZ0Fzc2V0TWluQmFsYW5jZTogdWludDY0CglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjU3MAoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcucmV3YXJkUGVyUGF5b3V0ID0gUmV3YXJkUGVyUGF5b3V0CglpbnQgMTYxCglmcmFtZV9kaWcgLTYgLy8gUmV3YXJkUGVyUGF5b3V0OiB1aW50NjQKCWl0b2IKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCglyZXRzdWIKCi8vIGFkZFBvb2wocGF5LHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FkZFBvb2w6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIG5vZGVOdW06IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHZhbGlkYXRvcklkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBtYnJQYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAyIChtYnJQYXltZW50KSBmb3IgYWRkUG9vbCBtdXN0IGJlIGEgcGF5IHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBleGVjdXRlIGFkZFBvb2wocGF5LHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQsdWludDY0KQoJY2FsbHN1YiBhZGRQb29sCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYWRkUG9vbChtYnJQYXltZW50OiBQYXlUeG4sIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUsIG5vZGVOdW06IHVpbnQ2NCk6IFZhbGlkYXRvclBvb2xLZXkKLy8KLy8gQWRkcyBhIG5ldyBwb29sIHRvIGEgdmFsaWRhdG9yJ3MgcG9vbCBzZXQsIHJldHVybmluZyB0aGUgJ2tleScgdG8gcmVmZXJlbmNlIHRoZSBwb29sIGluIHRoZSBmdXR1cmUgZm9yIHN0YWtpbmcsIGV0Yy4KLy8gVGhlIGNhbGxlciBtdXN0IHBheSB0aGUgY29zdCBvZiB0aGUgdmFsaWRhdG9ycyBNQlIgaW5jcmVhc2UgYXMgd2VsbCBhcyB0aGUgTUJSIHRoYXQgd2lsbCBiZSBuZWVkZWQgZm9yIHRoZSBwb29sIGl0c2VsZi4KLy8KLy8gWyBPTkxZIE9XTkVSIE9SIE1BTkFHRVIgQ0FOIGNhbGwgXQovLyBAcGFyYW0ge1BheVR4bn0gbWJyUGF5bWVudCBwYXltZW50IGZyb20gY2FsbGVyIHdoaWNoIGNvdmVycyBtYnIgaW5jcmVhc2Ugb2YgYWRkaW5nIGEgbmV3IHBvb2wKLy8gQHBhcmFtIHt1aW50NjR9IHZhbGlkYXRvcklkIGlzIGlkIG9mIHZhbGlkYXRvciB0byBwb29sIHRvIChtdXN0IGJlIG93bmVyIG9yIG1hbmFnZXIpCi8vIEBwYXJhbSB7dWludDY0fSBub2RlTnVtIGlzIG5vZGUgbnVtYmVyIHRvIGFkZCB0bwovLyBAcmV0dXJucyB7VmFsaWRhdG9yUG9vbEtleX0gcG9vbCBrZXkgdG8gY3JlYXRlZCBwb29sCmFkZFBvb2w6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTg2CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLm93bmVyIHx8CgkvLyAgICAgICAgICAgICAgICAgdGhpcy50eG4uc2VuZGVyID09PSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5tYW5hZ2VyLAoJLy8gICAgICAgICAgICAgJ2NhbiBvbmx5IGJlIGNhbGxlZCBieSBvd25lciBvciBtYW5hZ2VyIG9mIHZhbGlkYXRvcicsCgkvLyAgICAgICAgICkKCXR4biBTZW5kZXIKCWludCA4CglpbnQgMzIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0Cgk9PQoJZHVwCglibnogKnNraXBfb3IxCgl0eG4gU2VuZGVyCglpbnQgNDAKCWludCAzMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0yIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCT09Cgl8fAoKKnNraXBfb3IxOgoJLy8gY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IG93bmVyIG9yIG1hbmFnZXIgb2YgdmFsaWRhdG9yCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1OTMKCS8vIHZlcmlmeVBheVR4bihtYnJQYXltZW50LCB7IHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLCBhbW91bnQ6IHRoaXMuZ2V0TWJyQW1vdW50cygpLmFkZFBvb2xNYnIgfSkKCS8vIHZlcmlmeSByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIG1iclBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgUmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoibWJyUGF5bWVudCIsImZpZWxkIjoicmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIG1iclBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgQW1vdW50CgljYWxsc3ViIGdldE1ickFtb3VudHMKCWV4dHJhY3QgOCA4CglidG9pCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoibWJyUGF5bWVudCIsImZpZWxkIjoiYW1vdW50IiwiZXhwZWN0ZWQiOiJ0aGlzLmdldE1ickFtb3VudHMoKS5hZGRQb29sTWJyIn0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjU5NQoJLy8gYXNzZXJ0KHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkuZXhpc3RzLCAic3BlY2lmaWVkIHZhbGlkYXRvciBpZCBpc24ndCB2YWxpZCIpCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cglib3hfbGVuCglzd2FwCglwb3AKCgkvLyBzcGVjaWZpZWQgdmFsaWRhdG9yIGlkIGlzbid0IHZhbGlkCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1OTcKCS8vIG51bVBvb2xzOiB1aW50NjQgPSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnN0YXRlLm51bVBvb2xzIGFzIHVpbnQ2NAoJaW50IDI0MgoJaW50IDIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDAgLy8gbnVtUG9vbHM6IHVpbnQ2NAoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1OTgKCS8vIChudW1Qb29scyBhcyB1aW50NjQpID49IE1BWF9QT09MUwoJZnJhbWVfZGlnIDAgLy8gbnVtUG9vbHM6IHVpbnQ2NAoJaW50IDI0Cgk+PQoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGFscmVhZHkgYXQgbWF4IHBvb2wgc2l6ZQoJZXJyCgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjYwMQoJLy8gbnVtUG9vbHMgKz0gMQoJZnJhbWVfZGlnIDAgLy8gbnVtUG9vbHM6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMCAvLyBudW1Qb29sczogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjA0CgkvLyBzZW5kQXBwQ2FsbCh7CgkvLyAgICAgICAgICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5Ob09wLAoJLy8gICAgICAgICAgICAgYXBwcm92YWxQcm9ncmFtOiBbCgkvLyAgICAgICAgICAgICAgICAgdGhpcy5zdGFraW5nUG9vbEFwcHJvdmFsUHJvZ3JhbS5leHRyYWN0KDAsIDQwOTYpLAoJLy8gICAgICAgICAgICAgICAgIHRoaXMuc3Rha2luZ1Bvb2xBcHByb3ZhbFByb2dyYW0uZXh0cmFjdCg0MDk2LCB0aGlzLnN0YWtpbmdQb29sQXBwcm92YWxQcm9ncmFtLnNpemUgLSA0MDk2KSwKCS8vICAgICAgICAgICAgIF0sCgkvLyAgICAgICAgICAgICBjbGVhclN0YXRlUHJvZ3JhbTogU3Rha2luZ1Bvb2wuY2xlYXJQcm9ncmFtKCksCgkvLyAgICAgICAgICAgICBnbG9iYWxOdW1VaW50OiBTdGFraW5nUG9vbC5zY2hlbWEuZ2xvYmFsLm51bVVpbnQsCgkvLyAgICAgICAgICAgICBnbG9iYWxOdW1CeXRlU2xpY2U6IFN0YWtpbmdQb29sLnNjaGVtYS5nbG9iYWwubnVtQnl0ZVNsaWNlLAoJLy8gICAgICAgICAgICAgZXh0cmFQcm9ncmFtUGFnZXM6IDMsCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbkFyZ3M6IFsKCS8vICAgICAgICAgICAgICAgICAvLyBjcmVhdGluZ0NvbnRyYWN0SUQsIHZhbGlkYXRvcklkLCBwb29sSWQsIG1pbkVudHJ5U3Rha2UKCS8vICAgICAgICAgICAgICAgICBtZXRob2QoJ2NyZWF0ZUFwcGxpY2F0aW9uKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkJyksCgkvLyAgICAgICAgICAgICAgICAgaXRvYih0aGlzLmFwcC5pZCksCgkvLyAgICAgICAgICAgICAgICAgaXRvYih2YWxpZGF0b3JJZCksCgkvLyAgICAgICAgICAgICAgICAgaXRvYihudW1Qb29scyBhcyB1aW50NjQpLAoJLy8gICAgICAgICAgICAgICAgIGl0b2IodGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubWluRW50cnlTdGFrZSksCgkvLyAgICAgICAgICAgICBdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2MDUKCS8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLk5vT3AKCWludCAwIC8vIE5vT3AKCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjA2CgkvLyBhcHByb3ZhbFByb2dyYW06IFsKCS8vICAgICAgICAgICAgICAgICB0aGlzLnN0YWtpbmdQb29sQXBwcm92YWxQcm9ncmFtLmV4dHJhY3QoMCwgNDA5NiksCgkvLyAgICAgICAgICAgICAgICAgdGhpcy5zdGFraW5nUG9vbEFwcHJvdmFsUHJvZ3JhbS5leHRyYWN0KDQwOTYsIHRoaXMuc3Rha2luZ1Bvb2xBcHByb3ZhbFByb2dyYW0uc2l6ZSAtIDQwOTYpLAoJLy8gICAgICAgICAgICAgXQoJYnl0ZSAweDcwNmY2ZjZjNTQ2NTZkNzA2YzYxNzQ2NTQxNzA3MDcyNmY3NjYxNmM0Mjc5NzQ2NTczIC8vICJwb29sVGVtcGxhdGVBcHByb3ZhbEJ5dGVzIgoJaW50IDAKCWludCA0MDk2Cglib3hfZXh0cmFjdAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwoJYnl0ZSAweDcwNmY2ZjZjNTQ2NTZkNzA2YzYxNzQ2NTQxNzA3MDcyNmY3NjYxNmM0Mjc5NzQ2NTczIC8vICJwb29sVGVtcGxhdGVBcHByb3ZhbEJ5dGVzIgoJaW50IDQwOTYKCWJ5dGUgMHg3MDZmNmY2YzU0NjU2ZDcwNmM2MTc0NjU0MTcwNzA3MjZmNzY2MTZjNDI3OTc0NjU3MyAvLyAicG9vbFRlbXBsYXRlQXBwcm92YWxCeXRlcyIKCWJveF9sZW4KCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuc3Rha2luZ1Bvb2xBcHByb3ZhbFByb2dyYW0uc2l6ZQoJYXNzZXJ0CglpbnQgNDA5NgoJLQoJYm94X2V4dHJhY3QKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2MTAKCS8vIGNsZWFyU3RhdGVQcm9ncmFtOiBTdGFraW5nUG9vbC5jbGVhclByb2dyYW0oKQoJYnl0ZSBiNjQgQ2c9PQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjYxMQoJLy8gZ2xvYmFsTnVtVWludDogU3Rha2luZ1Bvb2wuc2NoZW1hLmdsb2JhbC5udW1VaW50CglpbnQgMTEKCWl0eG5fZmllbGQgR2xvYmFsTnVtVWludAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjYxMgoJLy8gZ2xvYmFsTnVtQnl0ZVNsaWNlOiBTdGFraW5nUG9vbC5zY2hlbWEuZ2xvYmFsLm51bUJ5dGVTbGljZQoJaW50IDMKCWl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjEzCgkvLyBleHRyYVByb2dyYW1QYWdlczogMwoJaW50IDMKCWl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2MTQKCS8vIGFwcGxpY2F0aW9uQXJnczogWwoJLy8gICAgICAgICAgICAgICAgIC8vIGNyZWF0aW5nQ29udHJhY3RJRCwgdmFsaWRhdG9ySWQsIHBvb2xJZCwgbWluRW50cnlTdGFrZQoJLy8gICAgICAgICAgICAgICAgIG1ldGhvZCgnY3JlYXRlQXBwbGljYXRpb24odWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQnKSwKCS8vICAgICAgICAgICAgICAgICBpdG9iKHRoaXMuYXBwLmlkKSwKCS8vICAgICAgICAgICAgICAgICBpdG9iKHZhbGlkYXRvcklkKSwKCS8vICAgICAgICAgICAgICAgICBpdG9iKG51bVBvb2xzIGFzIHVpbnQ2NCksCgkvLyAgICAgICAgICAgICAgICAgaXRvYih0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5taW5FbnRyeVN0YWtlKSwKCS8vICAgICAgICAgICAgIF0KCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24odWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIDAgLy8gbnVtUG9vbHM6IHVpbnQ2NAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWludCAyMDkKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjI0CgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnN0YXRlLm51bVBvb2xzID0gbnVtUG9vbHMgYXMgdWludDE2CglpbnQgMjQyCglmcmFtZV9kaWcgMCAvLyBudW1Qb29sczogdWludDY0CglpdG9iCglleHRyYWN0IDYgMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0yIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2MjcKCS8vIHBvb2xBcHBJZCA9IHRoaXMuaXR4bi5jcmVhdGVkQXBwbGljYXRpb25JRC5pZAoJaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAoJZnJhbWVfYnVyeSAxIC8vIHBvb2xBcHBJZDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjI4CgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnBvb2xzW251bVBvb2xzIC0gMV0ucG9vbEFwcElkID0gcG9vbEFwcElkCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAwIC8vIG51bVBvb2xzOiB1aW50NjQKCWludCAxCgktCglpbnQgMTgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDAKCSsKCWZyYW1lX2RpZyAxIC8vIHBvb2xBcHBJZDogdWludDY0CglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjYyOQoJLy8gdGhpcy5hZGRQb29sVG9Ob2RlKHZhbGlkYXRvcklkLCBwb29sQXBwSWQsIG5vZGVOdW0pCglmcmFtZV9kaWcgLTMgLy8gbm9kZU51bTogdWludDY0CglmcmFtZV9kaWcgMSAvLyBwb29sQXBwSWQ6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWNhbGxzdWIgYWRkUG9vbFRvTm9kZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjYzNwoJLy8gcmV0dXJuIHsgaWQ6IHZhbGlkYXRvcklkLCBwb29sSWQ6IG51bVBvb2xzIGFzIHVpbnQ2NCwgcG9vbEFwcElkOiB0aGlzLml0eG4hLmNyZWF0ZWRBcHBsaWNhdGlvbklELmlkIH0KCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCglmcmFtZV9kaWcgMCAvLyBudW1Qb29sczogdWludDY0CglpdG9iCgljb25jYXQKCWl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKCWl0b2IKCWNvbmNhdAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDEKCXJldHN1YgoKLy8gYWRkU3Rha2UocGF5LHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FkZFN0YWtlOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyB2YWx1ZVRvVmVyaWZ5OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gc3Rha2VkQW1vdW50UGF5bWVudDogcGF5Cgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBwYXkKCT09CgoJLy8gYXJndW1lbnQgMiAoc3Rha2VkQW1vdW50UGF5bWVudCkgZm9yIGFkZFN0YWtlIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYWRkU3Rha2UocGF5LHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQsdWludDY0KQoJY2FsbHN1YiBhZGRTdGFrZQoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFkZFN0YWtlKHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4biwgdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgdmFsdWVUb1ZlcmlmeTogdWludDY0KTogVmFsaWRhdG9yUG9vbEtleQovLwovLyBBZGRzIHN0YWtlIHRvIGEgdmFsaWRhdG9yIHBvb2wuCi8vCi8vIEBwYXJhbSB7UGF5VHhufSBzdGFrZWRBbW91bnRQYXltZW50IC0gcGF5bWVudCBjb21pbmcgZnJvbSBzdGFrZXIgdG8gcGxhY2UgaW50byBhIHBvb2wKLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3IuCi8vIEBwYXJhbSB7dWludDY0fSB2YWx1ZVRvVmVyaWZ5IC0gb25seSBpZiB2YWxpZGF0b3IgaGFzIGdhdGluZyB0byBlbnRlciAtIHRoaXMgaXMgYXNzZXQgaWQgb3IgbmZkIGlkIHRoYXQgY29ycmVzcG9uZHMgdG8gZ2F0aW5nLgovLyBUeG4gc2VuZGVyIGlzIGZhY3RvcmVkIGluIGFzIHdlbGwgaWYgdGhhdCBpcyBwYXJ0IG9mIGdhdGluZy4KLy8gKiBAcmV0dXJucyB7VmFsaWRhdG9yUG9vbEtleX0gLSBUaGUga2V5IG9mIHRoZSB2YWxpZGF0b3IgcG9vbC4KYWRkU3Rha2U6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA1CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjUwCgkvLyBhc3NlcnQodGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS5leGlzdHMsICJzcGVjaWZpZWQgdmFsaWRhdG9yIGlkIGlzbid0IHZhbGlkIikKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoKCS8vIHNwZWNpZmllZCB2YWxpZGF0b3IgaWQgaXNuJ3QgdmFsaWQKCWFzc2VydAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2NTMKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLnN1bnNldHRpbmdPbiA+IDAKCWludCAyMjYKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJaW50IDAKCT4KCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2NTQKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5zdW5zZXR0aW5nT24gPCBnbG9iYWxzLmxhdGVzdFRpbWVzdGFtcCwKCS8vICAgICAgICAgICAgICAgICAiY2FuJ3Qgc3Rha2Ugd2l0aCBhIHZhbGlkYXRvciB0aGF0IGlzIHBhc3QgaXRzIHN1bnNldHRpbmcgdGltZSIsCgkvLyAgICAgICAgICAgICApCglpbnQgMjI2CglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0yIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKCTwKCgkvLyBjYW4ndCBzdGFrZSB3aXRoIGEgdmFsaWRhdG9yIHRoYXQgaXMgcGFzdCBpdHMgc3Vuc2V0dGluZyB0aW1lCglhc3NlcnQKCippZjhfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjYwCgkvLyBzdGFrZXIgPSB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWZyYW1lX2J1cnkgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2NjQKCS8vIHZlcmlmeVBheVR4bihzdGFrZWRBbW91bnRQYXltZW50LCB7CgkvLyAgICAgICAgICAgICBzZW5kZXI6IHN0YWtlciwKCS8vICAgICAgICAgICAgIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgICB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgU2VuZGVyCglmcmFtZV9kaWcgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJzdGFrZWRBbW91bnRQYXltZW50IiwiZmllbGQiOiJzZW5kZXIiLCJleHBlY3RlZCI6InN0YWtlciJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4KCWd0eG5zIFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InN0YWtlZEFtb3VudFBheW1lbnQiLCJmaWVsZCI6InJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY3MQoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5zdGF0ZS50b3RhbEFsZ29TdGFrZWQgPCB0aGlzLm1heEFsbG93ZWRTdGFrZSgpLAoJLy8gICAgICAgICAgICAgJ3RvdGFsIHN0YWtlZCBmb3IgYWxsIG9mIGEgdmFsaWRhdG9ycyBwb29scyBtYXkgbm90IGV4Y2VlZCBoYXJkIGNhcCcsCgkvLyAgICAgICAgICkKCWludCAyNTIKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJY2FsbHN1YiBtYXhBbGxvd2VkU3Rha2UKCTwKCgkvLyB0b3RhbCBzdGFrZWQgZm9yIGFsbCBvZiBhIHZhbGlkYXRvcnMgcG9vbHMgbWF5IG5vdCBleGNlZWQgaGFyZCBjYXAKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY3OAoJLy8gdGhpcy5kb2VzU3Rha2VyTWVldEdhdGluZyh2YWxpZGF0b3JJZCwgdmFsdWVUb1ZlcmlmeSkKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZVRvVmVyaWZ5OiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCgljYWxsc3ViIGRvZXNTdGFrZXJNZWV0R2F0aW5nCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjgwCgkvLyByZWFsQW1vdW50ID0gc3Rha2VkQW1vdW50UGF5bWVudC5hbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJZnJhbWVfYnVyeSAxIC8vIHJlYWxBbW91bnQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY4MQoJLy8gbWJyQW10TGVmdEJlaGluZDogdWludDY0ID0gMAoJaW50IDAKCWZyYW1lX2J1cnkgMiAvLyBtYnJBbXRMZWZ0QmVoaW5kOiB1aW50NjQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjgzCgkvLyAhdGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikuZXhpc3RzCglieXRlIDB4NzM3MDczIC8vICJzcHMiCglmcmFtZV9kaWcgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCWNvbmNhdAoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Njg2CgkvLyBtYnJBbXRMZWZ0QmVoaW5kID0gdGhpcy5nZXRNYnJBbW91bnRzKCkuYWRkU3Rha2VyTWJyCgljYWxsc3ViIGdldE1ickFtb3VudHMKCWV4dHJhY3QgMjQgOAoJYnRvaQoJZnJhbWVfYnVyeSAyIC8vIG1ickFtdExlZnRCZWhpbmQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY4NwoJLy8gcmVhbEFtb3VudCAtPSBtYnJBbXRMZWZ0QmVoaW5kCglmcmFtZV9kaWcgMSAvLyByZWFsQW1vdW50OiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIG1ickFtdExlZnRCZWhpbmQ6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSAxIC8vIHJlYWxBbW91bnQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY4OAoJLy8gdGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikuY3JlYXRlKCkKCWJ5dGUgMHg3MzcwNzMgLy8gInNwcyIKCWZyYW1lX2RpZyAwIC8vIHN0YWtlcjogYWRkcmVzcwoJY29uY2F0CglpbnQgMTQ0Cglib3hfY3JlYXRlCglwb3AKCippZjlfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjkyCgkvLyBmaW5kUmV0ID0gdGhpcy5maW5kUG9vbEZvclN0YWtlcih2YWxpZGF0b3JJZCwgc3Rha2VyLCByZWFsQW1vdW50KQoJZnJhbWVfZGlnIDEgLy8gcmVhbEFtb3VudDogdWludDY0CglmcmFtZV9kaWcgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCgljYWxsc3ViIGZpbmRQb29sRm9yU3Rha2VyCglmcmFtZV9idXJ5IDMgLy8gZmluZFJldDogKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYm9vbCxib29sKQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY5MwoJLy8gcG9vbEtleSA9IGZpbmRSZXRbMF0KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY5NAoJLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvciA9IGZpbmRSZXRbMV0KCWZyYW1lX2RpZyAzIC8vIGZpbmRSZXQ6ICgodWludDY0LHVpbnQ2NCx1aW50NjQpLGJvb2wsYm9vbCkKCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTkyCglnZXRiaXQKCWZyYW1lX2J1cnkgNCAvLyBpc05ld1N0YWtlclRvVmFsaWRhdG9yOiBib29sCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Njk1CgkvLyBpc05ld1N0YWtlclRvUHJvdG9jb2wgPSBmaW5kUmV0WzJdCglmcmFtZV9kaWcgMyAvLyBmaW5kUmV0OiAoKHVpbnQ2NCx1aW50NjQsdWludDY0KSxib29sLGJvb2wpCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE5MwoJZ2V0Yml0CglmcmFtZV9idXJ5IDUgLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sCgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2OTYKCS8vIHBvb2xLZXkucG9vbElkID09PSAwCglmcmFtZV9kaWcgMyAvLyBmaW5kUmV0OiAoKHVpbnQ2NCx1aW50NjQsdWludDY0KSxib29sLGJvb2wpCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWludCAwCgk9PQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gTm8gcG9vbCBhdmFpbGFibGUgd2l0aCBmcmVlIHN0YWtlLiAgVmFsaWRhdG9yIG5lZWRzIHRvIGFkZCBhbm90aGVyIHBvb2wKCWVycgoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzAxCgkvLyB0aGlzLnVwZGF0ZVN0YWtlclBvb2xTZXQoc3Rha2VyLCBwb29sS2V5KQoJZnJhbWVfZGlnIDMgLy8gZmluZFJldDogKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYm9vbCxib29sKQoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCAyNAoJZnJhbWVfZGlnIDAgLy8gc3Rha2VyOiBhZGRyZXNzCgljYWxsc3ViIHVwZGF0ZVN0YWtlclBvb2xTZXQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3MDQKCS8vIHRoaXMuY2FsbFBvb2xBZGRTdGFrZSgKCS8vICAgICAgICAgICAgIHN0YWtlZEFtb3VudFBheW1lbnQsCgkvLyAgICAgICAgICAgICBwb29sS2V5LAoJLy8gICAgICAgICAgICAgbWJyQW10TGVmdEJlaGluZCwKCS8vICAgICAgICAgICAgIGlzTmV3U3Rha2VyVG9WYWxpZGF0b3IsCgkvLyAgICAgICAgICAgICBpc05ld1N0YWtlclRvUHJvdG9jb2wsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyA1IC8vIGlzTmV3U3Rha2VyVG9Qcm90b2NvbDogYm9vbAoJZnJhbWVfZGlnIDQgLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbAoJZnJhbWVfZGlnIDIgLy8gbWJyQW10TGVmdEJlaGluZDogdWludDY0CglmcmFtZV9kaWcgMyAvLyBmaW5kUmV0OiAoKHVpbnQ2NCx1aW50NjQsdWludDY0KSxib29sLGJvb2wpCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDI0CglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCgljYWxsc3ViIGNhbGxQb29sQWRkU3Rha2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3MTkKCS8vIHJldHVybiBwb29sS2V5CglmcmFtZV9kaWcgMyAvLyBmaW5kUmV0OiAoKHVpbnQ2NCx1aW50NjQsdWludDY0KSxib29sLGJvb2wpCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDI0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gNQoJcmV0c3ViCgovLyBzZXRUb2tlblBheW91dFJhdGlvKHVpbnQ2NCkodWludDY0WzI0XSx1aW50NjQpCiphYmlfcm91dGVfc2V0VG9rZW5QYXlvdXRSYXRpbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgc2V0VG9rZW5QYXlvdXRSYXRpbyh1aW50NjQpKHVpbnQ2NFsyNF0sdWludDY0KQoJY2FsbHN1YiBzZXRUb2tlblBheW91dFJhdGlvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gc2V0VG9rZW5QYXlvdXRSYXRpbyh2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlKTogUG9vbFRva2VuUGF5b3V0UmF0aW8KLy8KLy8gc2V0VG9rZW5QYXlvdXRSYXRpbyBpcyBjYWxsZWQgYnkgU3Rha2luZyBQb29sICMgMSAoT05MWSkgdG8gYXNrIHRoZSB2YWxpZGF0b3IgKHVzKSB0byBjYWxjdWxhdGUgdGhlIHJhdGlvcwovLyBvZiBzdGFrZSBpbiB0aGUgcG9vbHMgZm9yIHN1YnNlcXVlbnQgdG9rZW4gcGF5b3V0cyAoaWU6IDIgcG9vbHMsICcxMDAnIGFsZ28gdG90YWwgc3Rha2VkLCA2MCBpbiBwb29sIDEsIGFuZCA0MAovLyBpbiBwb29sIDIpICBUaGlzIGlzIGRvbmUgc28gd2UgaGF2ZSBhIHN0YWJsZSBzbmFwc2hvdCBvZiBzdGFrZSAtIHRha2VuIG9uY2UgcGVyIGVwb2NoIC0gb25seSB0cmlnZ2VyZWQgYnkKLy8gcG9vbCAxIGRvaW5nIHBheW91dC4gIHBvb2xzIG90aGVyIHRoYW4gMSBkb2luZyBwYXlvdXQgY2FsbCBwb29sIDEgdG8gYXNrIGl0IGRvIGl0IGZpcnN0LgovLyBJdCB3b3VsZCBiZSA2MC80MCUgaW4gdGhlIHBvb2xQY3RPZldob2xlIHZhbHVlcy4gIFRoZSB0b2tlbiByZXdhcmQgcGF5b3V0cyB0aGVuIHVzZSB0aGVzZSB2YWx1ZXMgaW5zdGVhZCBvZgovLyB0aGVpciAnY3VycmVudCcgc3Rha2Ugd2hpY2ggY2hhbmdlcyBhcyBwYXJ0IG9mIHRoZSBwYXlvdXRzIHRoZW1zZWx2ZXMgKGFuZCBwZW9wbGUgY291bGQgYmUgY2hhbmdpbmcgc3Rha2UKLy8gZHVyaW5nIHRoZSBlcG9jaCB1cGRhdGVzIGFjcm9zcyBwb29scykKLy8KLy8gTXVsdGlwbGUgcG9vbHMgd2lsbCBjYWxsIHVzIHZpYSBwb29sIDEgKHBvb2wyLT5wb29sMS0+dmFsaWRhdG9yLCBldGMuKSBzbyBkb24ndCBhc3NlcnQgb24gcG9vbDEgY2FsbGluZyBtdWx0aXBsZQovLyB0aW1lcyBpbiBzYW1lIGVwb2NoLiAgSnVzdCByZXR1cm4uCi8vCi8vIEBwYXJhbSB2YWxpZGF0b3JJZCAtIHZhbGlkYXRvciBpZCAoYW5kIHRodXMgcG9vbCkgY2FsbGluZyB1cy4gIFZlcmlmaWVkIHNvIHRoYXQgc2VuZGVyIE1VU1QgYmUgcG9vbCAxIG9mIHRoaXMgdmFsaWRhdG9yLgovLyBAcmV0dXJucyBQb29sVG9rZW5QYXlvdXRSYXRpbyAtIHRoZSBmaW5pc2hlZCByYXRpbyBkYXRhCnNldFRva2VuUGF5b3V0UmF0aW86Cglwcm90byAxIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzM5CgkvLyBwb29sMUFwcElEID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5wb29sc1swXS5wb29sQXBwSWQKCWludCAyNjgKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAwIC8vIHBvb2wxQXBwSUQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc0MAoJLy8gYXNzZXJ0KHBvb2wxQXBwSUQgIT09IDApCglmcmFtZV9kaWcgMCAvLyBwb29sMUFwcElEOiB1aW50NjQKCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NDIKCS8vIHRoaXMudHhuLnNlbmRlciAhPT0gQXBwSUQuZnJvbVVpbnQ2NChwb29sMUFwcElEKS5hZGRyZXNzCgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgMCAvLyBwb29sMUFwcElEOiB1aW50NjQKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc0MwoJLy8gcmV0dXJuIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUudG9rZW5QYXlvdXRSYXRpbwoJaW50IDcwMCAvLyBoZWFkT2Zmc2V0CglpbnQgMjAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYiAqc2V0VG9rZW5QYXlvdXRSYXRpbypyZXR1cm4KCippZjExX2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc0OQoJLy8gY3VyUm91bmQgPSBnbG9iYWxzLnJvdW5kCglnbG9iYWwgUm91bmQKCWZyYW1lX2J1cnkgMSAvLyBjdXJSb3VuZDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzUwCgkvLyBsYXN0UGF5b3V0VXBkYXRlID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS50b2tlblBheW91dFJhdGlvLnVwZGF0ZWRGb3JQYXlvdXQKCWludCA4OTIKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAyIC8vIGxhc3RQYXlvdXRVcGRhdGU6IHVpbnQ2NAoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzUxCgkvLyBsYXN0UGF5b3V0VXBkYXRlICE9PSAwCglmcmFtZV9kaWcgMiAvLyBsYXN0UGF5b3V0VXBkYXRlOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NTMKCS8vIChBcHBJRC5mcm9tVWludDY0KHBvb2wxQXBwSUQpLmdsb2JhbFN0YXRlKCdsYXN0UGF5b3V0JykgYXMgdWludDY0KSA9PT0gbGFzdFBheW91dFVwZGF0ZQoJZnJhbWVfZGlnIDAgLy8gcG9vbDFBcHBJRDogdWludDY0CglieXRlIDB4NmM2MTczNzQ1MDYxNzk2Zjc1NzQgLy8gImxhc3RQYXlvdXQiCglhcHBfZ2xvYmFsX2dldF9leAoKCS8vIGdsb2JhbCBzdGF0ZSB2YWx1ZSBkb2VzIG5vdCBleGlzdDogQXBwSUQuZnJvbVVpbnQ2NChwb29sMUFwcElEKS5nbG9iYWxTdGF0ZSgnbGFzdFBheW91dCcpCglhc3NlcnQKCWZyYW1lX2RpZyAyIC8vIGxhc3RQYXlvdXRVcGRhdGU6IHVpbnQ2NAoJPT0KCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc1NAoJLy8gcmV0dXJuIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUudG9rZW5QYXlvdXRSYXRpbwoJaW50IDcwMCAvLyBoZWFkT2Zmc2V0CglpbnQgMjAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYiAqc2V0VG9rZW5QYXlvdXRSYXRpbypyZXR1cm4KCippZjEzX2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc1NgoJLy8gZXBvY2hSb3VuZExlbmd0aCA9IHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLmVwb2NoUm91bmRMZW5ndGggYXMgdWludDY0CglpbnQgMTY5CglpbnQgNAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMyAvLyBlcG9jaFJvdW5kTGVuZ3RoOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NTcKCS8vIHRoaXNFcG9jaEJlZ2luID0gY3VyUm91bmQgLSAoY3VyUm91bmQgJSBlcG9jaFJvdW5kTGVuZ3RoKQoJZnJhbWVfZGlnIDEgLy8gY3VyUm91bmQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDEgLy8gY3VyUm91bmQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDMgLy8gZXBvY2hSb3VuZExlbmd0aDogdWludDY0CgklCgktCglmcmFtZV9idXJ5IDQgLy8gdGhpc0Vwb2NoQmVnaW46IHVpbnQ2NAoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzU5CgkvLyBsYXN0UGF5b3V0VXBkYXRlIC0gKGxhc3RQYXlvdXRVcGRhdGUgJSBlcG9jaFJvdW5kTGVuZ3RoKSA9PT0gdGhpc0Vwb2NoQmVnaW4KCWZyYW1lX2RpZyAyIC8vIGxhc3RQYXlvdXRVcGRhdGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gbGFzdFBheW91dFVwZGF0ZTogdWludDY0CglmcmFtZV9kaWcgMyAvLyBlcG9jaFJvdW5kTGVuZ3RoOiB1aW50NjQKCSUKCS0KCWZyYW1lX2RpZyA0IC8vIHRoaXNFcG9jaEJlZ2luOiB1aW50NjQKCT09CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NjAKCS8vIHJldHVybiB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnRva2VuUGF5b3V0UmF0aW8KCWludCA3MDAgLy8gaGVhZE9mZnNldAoJaW50IDIwMAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWIgKnNldFRva2VuUGF5b3V0UmF0aW8qcmV0dXJuCgoqaWYxNF9lbmQ6CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NjMKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUudG9rZW5QYXlvdXRSYXRpby51cGRhdGVkRm9yUGF5b3V0ID0gY3VyUm91bmQKCWludCA4OTIKCWZyYW1lX2RpZyAxIC8vIGN1clJvdW5kOiB1aW50NjQKCWl0b2IKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzY1CgkvLyBjdXJOdW1Qb29scyA9IHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuc3RhdGUubnVtUG9vbHMgYXMgdWludDY0CglpbnQgMjQyCglpbnQgMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgNSAvLyBjdXJOdW1Qb29sczogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzY2CgkvLyB0b3RhbFN0YWtlRm9yVmFsaWRhdG9yID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5zdGF0ZS50b3RhbEFsZ29TdGFrZWQKCWludCAyNTIKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSA2IC8vIHRvdGFsU3Rha2VGb3JWYWxpZGF0b3I6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc2NwoJLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJOdW1Qb29sczsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgNyAvLyBpOiB1aW50NjQKCipmb3JfMjoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc2NwoJLy8gaSA8IGN1ck51bVBvb2xzCglmcmFtZV9kaWcgNyAvLyBpOiB1aW50NjQKCWZyYW1lX2RpZyA1IC8vIGN1ck51bVBvb2xzOiB1aW50NjQKCTwKCWJ6ICpmb3JfMl9lbmQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NzIKCS8vIG91clBvb2xQY3RPZldob2xlID0gd2lkZVJhdGlvKAoJLy8gICAgICAgICAgICAgICAgIFt0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnBvb2xzW2ldLnRvdGFsQWxnb1N0YWtlZCwgMV8wMDBfMDAwXSwKCS8vICAgICAgICAgICAgICAgICBbdG90YWxTdGFrZUZvclZhbGlkYXRvcl0sCgkvLyAgICAgICAgICAgICApCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyA3IC8vIGk6IHVpbnQ2NAoJaW50IDE4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAxMCAvLyBoZWFkT2Zmc2V0CgkrCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWludCAxXzAwMF8wMDAKCW11bHcKCWludCAwCglmcmFtZV9kaWcgNiAvLyB0b3RhbFN0YWtlRm9yVmFsaWRhdG9yOiB1aW50NjQKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CglmcmFtZV9idXJ5IDggLy8gb3VyUG9vbFBjdE9mV2hvbGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc3NgoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS50b2tlblBheW91dFJhdGlvLnBvb2xQY3RPZldob2xlW2ldID0gb3VyUG9vbFBjdE9mV2hvbGUKCWludCA3MDAKCWZyYW1lX2RpZyA3IC8vIGk6IHVpbnQ2NAoJaW50IDgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJZnJhbWVfZGlnIDggLy8gb3VyUG9vbFBjdE9mV2hvbGU6IHVpbnQ2NAoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCipmb3JfMl9jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc2NwoJLy8gaSArPSAxCglmcmFtZV9kaWcgNyAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDcgLy8gaTogdWludDY0CgliICpmb3JfMgoKKmZvcl8yX2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc3OAoJLy8gcmV0dXJuIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUudG9rZW5QYXlvdXRSYXRpbwoJaW50IDcwMCAvLyBoZWFkT2Zmc2V0CglpbnQgMjAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoKKnNldFRva2VuUGF5b3V0UmF0aW8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBzdGFrZVVwZGF0ZWRWaWFSZXdhcmRzKCh1aW50NjQsdWludDY0LHVpbnQ2NCksdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQKKmFiaV9yb3V0ZV9zdGFrZVVwZGF0ZWRWaWFSZXdhcmRzOgoJLy8gc2F0dXJhdGVkQnVyblRvRmVlU2luazogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA1CglidG9pCgoJLy8gdmFsaWRhdG9yQ29tbWlzc2lvbjogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA0CglidG9pCgoJLy8gcmV3YXJkVG9rZW5BbW91bnRSZXNlcnZlZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgoJLy8gYWxnb1RvQWRkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyBwb29sS2V5OiAodWludDY0LHVpbnQ2NCx1aW50NjQpCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDI0Cgk9PQoKCS8vIGFyZ3VtZW50IDQgKHBvb2xLZXkpIGZvciBzdGFrZVVwZGF0ZWRWaWFSZXdhcmRzIG11c3QgYmUgYSAodWludDY0LHVpbnQ2NCx1aW50NjQpCglhc3NlcnQKCgkvLyBleGVjdXRlIHN0YWtlVXBkYXRlZFZpYVJld2FyZHMoKHVpbnQ2NCx1aW50NjQsdWludDY0KSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoJY2FsbHN1YiBzdGFrZVVwZGF0ZWRWaWFSZXdhcmRzCglpbnQgMQoJcmV0dXJuCgovLyBzdGFrZVVwZGF0ZWRWaWFSZXdhcmRzKHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXksIGFsZ29Ub0FkZDogdWludDY0LCByZXdhcmRUb2tlbkFtb3VudFJlc2VydmVkOiB1aW50NjQsIHZhbGlkYXRvckNvbW1pc3Npb246IHVpbnQ2NCwgc2F0dXJhdGVkQnVyblRvRmVlU2luazogdWludDY0KTogdm9pZAovLwovLyBzdGFrZVVwZGF0ZWRWaWFSZXdhcmRzIGlzIGNhbGxlZCBieSBTdGFraW5nIHBvb2xzIHRvIGluZm9ybSB0aGUgdmFsaWRhdG9yICh1cykgdGhhdCBhIHBhcnRpY3VsYXIgYW1vdW50IG9mIHRvdGFsCi8vIHN0YWtlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBzcGVjaWZpZWQgcG9vbC4gIFRoaXMgaXMgdXNlZCB0byB1cGRhdGUgdGhlIHN0YXRzIHdlIGhhdmUgaW4gb3VyIFBvb2xJbmZvIHN0b3JhZ2UuCi8vIFRoZSBjYWxsaW5nIEFwcCBpZCBpcyB2YWxpZGF0ZWQgYWdhaW5zdCBvdXIgcG9vbCBsaXN0IGFzIHdlbGwuCi8vIEBwYXJhbSB7VmFsaWRhdG9yUG9vbEtleX0gcG9vbEtleSAtIFZhbGlkYXRvclBvb2xLZXkgdHlwZQovLyBAcGFyYW0ge3VpbnQ2NH0gYWxnb1RvQWRkIC0gYW1vdW50IHRoaXMgdmFsaWRhdG9yJ3MgdG90YWwgc3Rha2UgaW5jcmVhc2VkIHZpYSByZXdhcmRzCi8vIEBwYXJhbSB7dWludDY0fSByZXdhcmRUb2tlbkFtb3VudFJlc2VydmVkIC0gYW1vdW50IHRoaXMgdmFsaWRhdG9yJ3MgdG90YWwgc3Rha2UgaW5jcmVhc2VkIHZpYSByZXdhcmRzICh0aGF0IHNob3VsZCBiZQovLyBAcGFyYW0ge3VpbnQ2NH0gdmFsaWRhdG9yQ29tbWlzc2lvbiAtIHRoZSBjb21taXNzaW9uIGFtb3VudCB0aGUgdmFsaWRhdG9yIHdhcyBwYWlkLCBpZiBhbnkKLy8gQHBhcmFtIHt1aW50NjR9IHNhdHVyYXRlZEJ1cm5Ub0ZlZVNpbmsgLSBpZiB0aGUgcG9vbCB3YXMgaW4gc2F0dXJhdGVkIHN0YXRlLCB0aGUgYW1vdW50IHNlbnQgYmFjayB0byB0aGUgZmVlIHNpbmsuCi8vIHNlZW4gYXMgJ2FjY291bnRlZCBmb3IvcGVuZGluZyBzcGVudCcpCnN0YWtlVXBkYXRlZFZpYVJld2FyZHM6Cglwcm90byA1IDAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3OTkKCS8vIHRoaXMudmVyaWZ5UG9vbEtleUNhbGxlcihwb29sS2V5KQoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWNhbGxzdWIgdmVyaWZ5UG9vbEtleUNhbGxlcgoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjgwMgoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnBvb2xzW3Bvb2xLZXkucG9vbElkIC0gMV0udG90YWxBbGdvU3Rha2VkICs9IGFsZ29Ub0FkZAoJaW50IDI2OCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWludCAxCgktCglpbnQgMTgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDEwIC8vIGhlYWRPZmZzZXQKCSsKCWludCAyNjggLy8gaGVhZE9mZnNldAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgOCA4CglidG9pCglpbnQgMQoJLQoJaW50IDE4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAxMCAvLyBoZWFkT2Zmc2V0CgkrCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9kaWcgLTIgLy8gYWxnb1RvQWRkOiB1aW50NjQKCSsKCWl0b2IKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjgwMwoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLnRvdGFsQWxnb1N0YWtlZCArPSBhbGdvVG9BZGQKCWludCAyNTIKCWR1cAoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfZGlnIC0yIC8vIGFsZ29Ub0FkZDogdWludDY0CgkrCglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4MDQKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5zdGF0ZS5yZXdhcmRUb2tlbkhlbGRCYWNrICs9IHJld2FyZFRva2VuQW1vdW50UmVzZXJ2ZWQKCWludCAyNjAKCWR1cAoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfZGlnIC0zIC8vIHJld2FyZFRva2VuQW1vdW50UmVzZXJ2ZWQ6IHVpbnQ2NAoJKwoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6ODA2CgkvLyB0aGlzLnRvdGFsQWxnb1N0YWtlZC52YWx1ZSArPSBhbGdvVG9BZGQKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgLTIgLy8gYWxnb1RvQWRkOiB1aW50NjQKCSsKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCXN3YXAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6ODA5CgkvLyB0aGlzLnJldmVyaWZ5TkZET3duZXJzaGlwKHBvb2xLZXkuaWQpCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWNhbGxzdWIgcmV2ZXJpZnlORkRPd25lcnNoaXAKCXJldHN1YgoKLy8gc3Rha2VSZW1vdmVkKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYWRkcmVzcyx1aW50NjQsdWludDY0LGJvb2wpdm9pZAoqYWJpX3JvdXRlX3N0YWtlUmVtb3ZlZDoKCS8vIHN0YWtlclJlbW92ZWQ6IGJvb2wKCXR4bmEgQXBwbGljYXRpb25BcmdzIDUKCWR1cAoJbGVuCglpbnQgMQoJPT0KCgkvLyBhcmd1bWVudCAwIChzdGFrZXJSZW1vdmVkKSBmb3Igc3Rha2VSZW1vdmVkIG11c3QgYmUgYSBib29sCglhc3NlcnQKCWludCAwCglnZXRiaXQKCgkvLyByZXdhcmRSZW1vdmVkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWJ0b2kKCgkvLyBhbW91bnRSZW1vdmVkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCgkvLyBzdGFrZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMyAoc3Rha2VyKSBmb3Igc3Rha2VSZW1vdmVkIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBwb29sS2V5OiAodWludDY0LHVpbnQ2NCx1aW50NjQpCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDI0Cgk9PQoKCS8vIGFyZ3VtZW50IDQgKHBvb2xLZXkpIGZvciBzdGFrZVJlbW92ZWQgbXVzdCBiZSBhICh1aW50NjQsdWludDY0LHVpbnQ2NCkKCWFzc2VydAoKCS8vIGV4ZWN1dGUgc3Rha2VSZW1vdmVkKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYWRkcmVzcyx1aW50NjQsdWludDY0LGJvb2wpdm9pZAoJY2FsbHN1YiBzdGFrZVJlbW92ZWQKCWludCAxCglyZXR1cm4KCi8vIHN0YWtlUmVtb3ZlZChwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5LCBzdGFrZXI6IEFkZHJlc3MsIGFtb3VudFJlbW92ZWQ6IHVpbnQ2NCwgcmV3YXJkUmVtb3ZlZDogdWludDY0LCBzdGFrZXJSZW1vdmVkOiBib29sZWFuKTogdm9pZAovLwovLyBzdGFrZVJlbW92ZWQgaXMgY2FsbGVkIGJ5IFN0YWtpbmcgcG9vbHMgdG8gaW5mb3JtIHRoZSB2YWxpZGF0b3IgKHVzKSB0aGF0IGEgcGFydGljdWxhciBhbW91bnQgb2YgdG90YWwgc3Rha2UgaGFzIGJlZW4gcmVtb3ZlZAovLyBmcm9tIHRoZSBzcGVjaWZpZWQgcG9vbC4gIFRoaXMgaXMgdXNlZCB0byB1cGRhdGUgdGhlIHN0YXRzIHdlIGhhdmUgaW4gb3VyIFBvb2xJbmZvIHN0b3JhZ2UuCi8vIElmIGFueSBhbW91bnQgb2YgcmV3YXJkUmVtb3ZlZCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhhdCBhbW91bnQgb2YgcmV3YXJkIGlzIHNlbnQgdG8gdGhlIHVzZQovLyBUaGUgY2FsbGluZyBBcHAgaWQgaXMgdmFsaWRhdGVkIGFnYWluc3Qgb3VyIHBvb2wgbGlzdCBhcyB3ZWxsLgovLwovLyBAcGFyYW0ge1ZhbGlkYXRvclBvb2xLZXl9IHBvb2xLZXkgY2FsbGluZyB1cyBmcm9tIHdoaWNoIHN0YWtlIHdhcyByZW1vdmVkCi8vIEBwYXJhbSB7QWRkcmVzc30gc3Rha2VyCi8vIEBwYXJhbSB7dWludDY0fSBhbW91bnRSZW1vdmVkIC0gYWxnbyBhbW91bnQgcmVtb3ZlZAovLyBAcGFyYW0ge3VpbnQ2NH0gcmV3YXJkUmVtb3ZlZCAtIGlmIGFwcGxpY2FibGUsIGFtb3VudCBvZiB0b2tlbiByZXdhcmQgcmVtb3ZlZCAoYnkgcG9vbCAxIGNhbGxlcikgb3IgVE8gcmVtb3ZlIGFuZCBwYXkgb3V0ICh2aWEgcG9vbCAxIGZyb20gZGlmZmVyZW50IHBvb2wgY2FsbGVyKQovLyBAcGFyYW0ge2Jvb2xlYW59IHN0YWtlclJlbW92ZWQKc3Rha2VSZW1vdmVkOgoJcHJvdG8gNSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMwoKCS8vICppZjE1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6ODQxCgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDMwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDMwMAoJPAoJYnogKmlmMTVfZW5kCgoJLy8gKmlmMTVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6ODQyCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWYxNV9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4NDQKCS8vIHRoaXMudmVyaWZ5UG9vbEtleUNhbGxlcihwb29sS2V5KQoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWNhbGxzdWIgdmVyaWZ5UG9vbEtleUNhbGxlcgoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg0OAoJLy8gYXNzZXJ0KGFtb3VudFJlbW92ZWQgPiAwIHx8IHJld2FyZFJlbW92ZWQgPiAwLCAnc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIGFsZ28gb3IgcmV3YXJkIHdhcyByZW1vdmVkJykKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnRSZW1vdmVkOiB1aW50NjQKCWludCAwCgk+CglkdXAKCWJueiAqc2tpcF9vcjIKCWZyYW1lX2RpZyAtNCAvLyByZXdhcmRSZW1vdmVkOiB1aW50NjQKCWludCAwCgk+Cgl8fAoKKnNraXBfb3IyOgoJLy8gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIGFsZ28gb3IgcmV3YXJkIHdhcyByZW1vdmVkCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4NTEKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5wb29sc1twb29sS2V5LnBvb2xJZCAtIDFdLnRvdGFsQWxnb1N0YWtlZCAtPSBhbW91bnRSZW1vdmVkCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgMTAgLy8gaGVhZE9mZnNldAoJKwoJaW50IDI2OCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWludCAxCgktCglpbnQgMTgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDEwIC8vIGhlYWRPZmZzZXQKCSsKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnRSZW1vdmVkOiB1aW50NjQKCS0KCWl0b2IKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg1MgoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLnRvdGFsQWxnb1N0YWtlZCAtPSBhbW91bnRSZW1vdmVkCglpbnQgMjUyCglkdXAKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnRSZW1vdmVkOiB1aW50NjQKCS0KCWl0b2IKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg1MwoJLy8gdGhpcy50b3RhbEFsZ29TdGFrZWQudmFsdWUgLT0gYW1vdW50UmVtb3ZlZAoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJYXBwX2dsb2JhbF9nZXQKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnRSZW1vdmVkOiB1aW50NjQKCS0KCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCXN3YXAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gKmlmMTZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4NTUKCS8vIHJld2FyZFJlbW92ZWQgPiAwCglmcmFtZV9kaWcgLTQgLy8gcmV3YXJkUmVtb3ZlZDogdWludDY0CglpbnQgMAoJPgoJYnogKmlmMTZfZWxzZQoKCS8vICppZjE2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg1NgoJLy8gcmV3YXJkVG9rZW5JRCA9IHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5jb25maWcucmV3YXJkVG9rZW5JZAoJaW50IDE1MwoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAwIC8vIHJld2FyZFRva2VuSUQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg1NwoJLy8gYXNzZXJ0KHJld2FyZFRva2VuSUQgIT09IDAsICJyZXdhcmRSZW1vdmVkIGNhbid0IGJlIHNldCBpZiB2YWxpZGF0b3IgZG9lc24ndCBoYXZlIHJld2FyZCB0b2tlbiEiKQoJZnJhbWVfZGlnIDAgLy8gcmV3YXJkVG9rZW5JRDogdWludDY0CglpbnQgMAoJIT0KCgkvLyByZXdhcmRSZW1vdmVkIGNhbid0IGJlIHNldCBpZiB2YWxpZGF0b3IgZG9lc24ndCBoYXZlIHJld2FyZCB0b2tlbiEKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg1OAoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5zdGF0ZS5yZXdhcmRUb2tlbkhlbGRCYWNrID49IHJld2FyZFJlbW92ZWQsCgkvLyAgICAgICAgICAgICAgICAgJ3Jld2FyZCBiZWluZyByZW1vdmVkIG11c3QgYmUgY292ZXJlZCBieSBob2xkIGJhY2sgYW1vdW50JywKCS8vICAgICAgICAgICAgICkKCWludCAyNjAKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2RpZyAtNCAvLyByZXdhcmRSZW1vdmVkOiB1aW50NjQKCT49CgoJLy8gcmV3YXJkIGJlaW5nIHJlbW92ZWQgbXVzdCBiZSBjb3ZlcmVkIGJ5IGhvbGQgYmFjayBhbW91bnQKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg2NAoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLnJld2FyZFRva2VuSGVsZEJhY2sgLT0gcmV3YXJkUmVtb3ZlZAoJaW50IDI2MAoJZHVwCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9kaWcgLTQgLy8gcmV3YXJkUmVtb3ZlZDogdWludDY0CgktCglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyAqaWYxN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg2OQoJLy8gcG9vbEtleS5wb29sSWQgIT09IDEKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCSE9CglieiAqaWYxN19lbmQKCgkvLyAqaWYxN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4NzAKCS8vIHNlbmRNZXRob2RDYWxsPHR5cGVvZiBTdGFraW5nUG9vbC5wcm90b3R5cGUucGF5VG9rZW5SZXdhcmQ+KHsKCS8vICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NCh0aGlzLnZhbGlkYXRvckxpc3QocG9vbEtleS5pZCkudmFsdWUucG9vbHNbMF0ucG9vbEFwcElkKSwKCS8vICAgICAgICAgICAgICAgICAgICAgbWV0aG9kQXJnczogW3N0YWtlciwgcmV3YXJkVG9rZW5JRCwgcmV3YXJkUmVtb3ZlZF0sCgkvLyAgICAgICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgInBheVRva2VuUmV3YXJkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4NzEKCS8vIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQodGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnBvb2xzWzBdLnBvb2xBcHBJZCkKCWludCAyNjgKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg3MgoJLy8gbWV0aG9kQXJnczogW3N0YWtlciwgcmV3YXJkVG9rZW5JRCwgcmV3YXJkUmVtb3ZlZF0KCWZyYW1lX2RpZyAtMiAvLyBzdGFrZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMCAvLyByZXdhcmRUb2tlbklEOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTQgLy8gcmV3YXJkUmVtb3ZlZDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE3X2VuZDoKCWIgKmlmMTZfZW5kCgoqaWYxNl9lbHNlOgoKKmlmMTZfZW5kOgoJLy8gKmlmMThfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4OTcKCS8vIHN0YWtlclJlbW92ZWQKCWZyYW1lX2RpZyAtNSAvLyBzdGFrZXJSZW1vdmVkOiBib29sZWFuCglieiAqaWYxOF9lbmQKCgkvLyAqaWYxOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4OTkKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5wb29sc1twb29sS2V5LnBvb2xJZCAtIDFdLnRvdGFsU3Rha2VycyAtPSAxCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgOCAvLyBoZWFkT2Zmc2V0CgkrCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgOCAvLyBoZWFkT2Zmc2V0CgkrCglpbnQgMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglpbnQgMQoJLQoJaXRvYgoJZXh0cmFjdCA2IDIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjkwMQoJLy8gcmVtb3ZlUmV0ID0gdGhpcy5yZW1vdmVGcm9tU3Rha2VyUG9vbFNldChzdGFrZXIsIDxWYWxpZGF0b3JQb29sS2V5PnsKCS8vICAgICAgICAgICAgICAgICBpZDogcG9vbEtleS5pZCwKCS8vICAgICAgICAgICAgICAgICBwb29sSWQ6IHBvb2xLZXkucG9vbElkLAoJLy8gICAgICAgICAgICAgICAgIHBvb2xBcHBJZDogcG9vbEtleS5wb29sQXBwSWQsCgkvLyAgICAgICAgICAgICB9KQoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMTYgOAoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9kaWcgLTIgLy8gc3Rha2VyOiBBZGRyZXNzCgljYWxsc3ViIHJlbW92ZUZyb21TdGFrZXJQb29sU2V0CglmcmFtZV9idXJ5IDEgLy8gcmVtb3ZlUmV0OiAoYm9vbCxib29sKQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjkwNgoJLy8gc3Rha2VyT3V0T2ZUaGlzVmFsaWRhdG9yID0gcmVtb3ZlUmV0WzBdCglmcmFtZV9kaWcgMSAvLyByZW1vdmVSZXQ6IChib29sLGJvb2wpCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWdldGJpdAoJZnJhbWVfYnVyeSAyIC8vIHN0YWtlck91dE9mVGhpc1ZhbGlkYXRvcjogYm9vbAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjkwNwoJLy8gc3Rha2VyT3V0T2ZQcm90b2NvbCA9IHJlbW92ZVJldFsxXQoJZnJhbWVfZGlnIDEgLy8gcmVtb3ZlUmV0OiAoYm9vbCxib29sKQoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxCglnZXRiaXQKCWZyYW1lX2J1cnkgMyAvLyBzdGFrZXJPdXRPZlByb3RvY29sOiBib29sCgoJLy8gKmlmMTlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5MDkKCS8vIHN0YWtlck91dE9mVGhpc1ZhbGlkYXRvcgoJZnJhbWVfZGlnIDIgLy8gc3Rha2VyT3V0T2ZUaGlzVmFsaWRhdG9yOiBib29sCglieiAqaWYxOV9lbmQKCgkvLyAqaWYxOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5MTAKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5zdGF0ZS50b3RhbFN0YWtlcnMgLT0gMQoJaW50IDI0NAoJZHVwCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglpbnQgMQoJLQoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoqaWYxOV9lbmQ6CgkvLyAqaWYyMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjkxMwoJLy8gc3Rha2VyT3V0T2ZQcm90b2NvbAoJZnJhbWVfZGlnIDMgLy8gc3Rha2VyT3V0T2ZQcm90b2NvbDogYm9vbAoJYnogKmlmMjBfZW5kCgoJLy8gKmlmMjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTE0CgkvLyB0aGlzLm51bVN0YWtlcnMudmFsdWUgLT0gMQoJYnl0ZSAweDZlNzU2ZDUzNzQ2MTZiNjU3MjczIC8vICJudW1TdGFrZXJzIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgktCglieXRlIDB4NmU3NTZkNTM3NDYxNmI2NTcyNzMgLy8gIm51bVN0YWtlcnMiCglzd2FwCglhcHBfZ2xvYmFsX3B1dAoKKmlmMjBfZW5kOgoKKmlmMThfZW5kOgoJcmV0c3ViCgovLyBmaW5kUG9vbEZvclN0YWtlcih1aW50NjQsYWRkcmVzcyx1aW50NjQpKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYm9vbCxib29sKQoqYWJpX3JvdXRlX2ZpbmRQb29sRm9yU3Rha2VyOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhbW91bnRUb1N0YWtlOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCgkvLyBzdGFrZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAoc3Rha2VyKSBmb3IgZmluZFBvb2xGb3JTdGFrZXIgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIHZhbGlkYXRvcklkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGZpbmRQb29sRm9yU3Rha2VyKHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCkoKHVpbnQ2NCx1aW50NjQsdWludDY0KSxib29sLGJvb2wpCgljYWxsc3ViIGZpbmRQb29sRm9yU3Rha2VyCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZmluZFBvb2xGb3JTdGFrZXIodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgc3Rha2VyOiBBZGRyZXNzLCBhbW91bnRUb1N0YWtlOiB1aW50NjQpOiBbVmFsaWRhdG9yUG9vbEtleSwgYm9vbGVhbiwgYm9vbGVhbl0KLy8KLy8gRmluZHMgdGhlIHBvb2wgZm9yIGEgc3Rha2VyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB2YWxpZGF0b3IgaWQsIHN0YWtlciBhZGRyZXNzLCBhbmQgYW1vdW50IHRvIHN0YWtlLgovLyBGaXJzdCBjaGVja3MgdGhlIHN0YWtlcnMgJ2FscmVhZHkgc3Rha2VkIGxpc3QnIGZvciB0aGUgdmFsaWRhdG9yIHByZWZlcnJpbmcgdGhvc2UgKGFkZGluZyBpZiBwb3NzaWJsZSkgdGhlbiBhZGRzCi8vIHRvIG5ldyBwb29sIGlmIG5lY2Vzc2FyeS4KLy8KLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3IuCi8vIEBwYXJhbSB7QWRkcmVzc30gc3Rha2VyIC0gVGhlIGFkZHJlc3Mgb2YgdGhlIHN0YWtlci4KLy8gQHBhcmFtIHt1aW50NjR9IGFtb3VudFRvU3Rha2UgLSBUaGUgYW1vdW50IHRvIHN0YWtlLgovLyBAcmV0dXJucyB7VmFsaWRhdG9yUG9vbEtleSwgYm9vbGVhbiwgYm9vbGVhbn0gLSBUaGUgcG9vbCBmb3IgdGhlIHN0YWtlciwgdHJ1ZS9mYWxzZSBvbiB3aGV0aGVyIHRoZSBzdGFrZXIgaXMgJ25ldycKLy8gdG8gdGhpcyBWQUxJREFUT1IsIGFuZCB0cnVlL2ZhbHNlIGlmIHN0YWtlciBpcyBuZXcgdG8gdGhlIHByb3RvY29sLgpmaW5kUG9vbEZvclN0YWtlcjoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDcKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5MzUKCS8vIGlzTmV3U3Rha2VyVG9WYWxpZGF0b3IgPSB0cnVlCglpbnQgMQoJZnJhbWVfYnVyeSAwIC8vIGlzTmV3U3Rha2VyVG9WYWxpZGF0b3I6IGJvb2wKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5MzYKCS8vIGlzTmV3U3Rha2VyVG9Qcm90b2NvbCA9IHRydWUKCWludCAxCglmcmFtZV9idXJ5IDEgLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTQ0CgkvLyBtYXhQZXJQb29sID0gdGhpcy5nZXRDdXJNYXhTdGFrZVBlclBvb2wodmFsaWRhdG9ySWQpCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJY2FsbHN1YiBnZXRDdXJNYXhTdGFrZVBlclBvb2wKCWZyYW1lX2J1cnkgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCgkvLyAqaWYyMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjk0NwoJLy8gdGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikuZXhpc3RzCglieXRlIDB4NzM3MDczIC8vICJzcHMiCglmcmFtZV9kaWcgLTIgLy8gc3Rha2VyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMjFfZW5kCgoJLy8gKmlmMjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTQ4CgkvLyBwb29sU2V0ID0gY2xvbmUodGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikudmFsdWUpCglieXRlIDB4NzM3MDczIC8vICJzcHMiCglmcmFtZV9kaWcgLTIgLy8gc3Rha2VyOiBBZGRyZXNzCgljb25jYXQKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlCglhc3NlcnQKCWZyYW1lX2J1cnkgMyAvLyBwb29sU2V0OiAodWludDY0LHVpbnQ2NCx1aW50NjQpWzZdCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTQ5CgkvLyBhc3NlcnQodmFsaWRhdG9ySWQgIT09IDApCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NTAKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgcG9vbFNldC5sZW5ndGg7IGkgKz0gMSkKCWludCAwCglmcmFtZV9idXJ5IDQgLy8gaTogdWludDY0CgoqZm9yXzM6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NTAKCS8vIGkgPCBwb29sU2V0Lmxlbmd0aAoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgNgoJPAoJYnogKmZvcl8zX2VuZAoKCS8vICppZjIyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTUxCgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDMwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDMwMAoJPAoJYnogKmlmMjJfZW5kCgoJLy8gKmlmMjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTUyCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWYyMl9lbmQ6CgkvLyAqaWYyM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjk1NAoJLy8gcG9vbFNldFtpXS5pZCA9PT0gMAoJZnJhbWVfZGlnIDMgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDAKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaW50IDAKCT09CglieiAqaWYyM19lbmQKCgkvLyAqaWYyM19jb25zZXF1ZW50CgliICpmb3JfM19jb250aW51ZQoKKmlmMjNfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTU3CgkvLyBpc05ld1N0YWtlclRvUHJvdG9jb2wgPSBmYWxzZQoJaW50IDAKCWZyYW1lX2J1cnkgMSAvLyBpc05ld1N0YWtlclRvUHJvdG9jb2w6IGJvb2wKCgkvLyAqaWYyNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjk1OAoJLy8gcG9vbFNldFtpXS5pZCA9PT0gdmFsaWRhdG9ySWQKCWZyYW1lX2RpZyAzIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDY0LHVpbnQ2NClbNl0KCWZyYW1lX2RpZyA0IC8vIGk6IHVpbnQ2NAoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCAwCgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCgk9PQoJYnogKmlmMjRfZW5kCgoJLy8gKmlmMjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTYwCgkvLyBpc05ld1N0YWtlclRvVmFsaWRhdG9yID0gZmFsc2UKCWludCAwCglmcmFtZV9idXJ5IDAgLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbAoKCS8vICppZjI1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTYyCgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnBvb2xzW3Bvb2xTZXRbaV0ucG9vbElkIC0gMV0udG90YWxBbGdvU3Rha2VkICsKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnRUb1N0YWtlIDw9CgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQZXJQb29sCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAzIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDY0LHVpbnQ2NClbNl0KCWZyYW1lX2RpZyA0IC8vIGk6IHVpbnQ2NAoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA4IC8vIGhlYWRPZmZzZXQKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgMTAgLy8gaGVhZE9mZnNldAoJKwoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9kaWcgLTMgLy8gYW1vdW50VG9TdGFrZTogdWludDY0CgkrCglmcmFtZV9kaWcgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCTw9CglieiAqaWYyNV9lbmQKCgkvLyAqaWYyNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NjYKCS8vIHJldHVybiBbcG9vbFNldFtpXSwgaXNOZXdTdGFrZXJUb1ZhbGlkYXRvciwgaXNOZXdTdGFrZXJUb1Byb3RvY29sXQoJZnJhbWVfZGlnIDMgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDI0CglleHRyYWN0MwoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYiAqZmluZFBvb2xGb3JTdGFrZXIqcmV0dXJuCgoqaWYyNV9lbmQ6CgoqaWYyNF9lbmQ6CgoqZm9yXzNfY29udGludWU6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NTAKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSA0IC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzMKCipmb3JfM19lbmQ6CgoqaWYyMV9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NzMKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIGFtb3VudFRvU3Rha2UgPj0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubWluRW50cnlTdGFrZSwKCS8vICAgICAgICAgICAgICdtdXN0IHN0YWtlIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGZvciB0aGlzIHBvb2wnLAoJLy8gICAgICAgICApCglmcmFtZV9kaWcgLTMgLy8gYW1vdW50VG9TdGFrZTogdWludDY0CglpbnQgMjA5CglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCT49CgoJLy8gbXVzdCBzdGFrZSBhdCBsZWFzdCB0aGUgbWluaW11bSBmb3IgdGhpcyBwb29sCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NzkKCS8vIHBvb2xzID0gY2xvbmUodGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5wb29scykKCWludCAyNjggLy8gaGVhZE9mZnNldAoJaW50IDQzMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgNSAvLyBwb29sczogKHVpbnQ2NCx1aW50MTYsdWludDY0KVsyNF0KCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5ODAKCS8vIGN1ck51bVBvb2xzID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5zdGF0ZS5udW1Qb29scyBhcyB1aW50NjQKCWludCAyNDIKCWludCAyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSA2IC8vIGN1ck51bVBvb2xzOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5ODEKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgY3VyTnVtUG9vbHM7IGkgKz0gMSkKCWludCAwCglmcmFtZV9idXJ5IDcgLy8gaTogdWludDY0CgoqZm9yXzQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5ODEKCS8vIGkgPCBjdXJOdW1Qb29scwoJZnJhbWVfZGlnIDcgLy8gaTogdWludDY0CglmcmFtZV9kaWcgNiAvLyBjdXJOdW1Qb29sczogdWludDY0Cgk8CglieiAqZm9yXzRfZW5kCgoJLy8gKmlmMjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5ODIKCS8vIHBvb2xzW2ldLnRvdGFsQWxnb1N0YWtlZCArIGFtb3VudFRvU3Rha2UgPD0gbWF4UGVyUG9vbAoJZnJhbWVfZGlnIDUgLy8gcG9vbHM6ICh1aW50NjQsdWludDE2LHVpbnQ2NClbMjRdCglmcmFtZV9kaWcgNyAvLyBpOiB1aW50NjQKCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgMTAgLy8gaGVhZE9mZnNldAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglmcmFtZV9kaWcgLTMgLy8gYW1vdW50VG9TdGFrZTogdWludDY0CgkrCglmcmFtZV9kaWcgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCTw9CglieiAqaWYyNl9lbmQKCgkvLyAqaWYyNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5ODMKCS8vIHJldHVybiBbCgkvLyAgICAgICAgICAgICAgICAgICAgIHsgaWQ6IHZhbGlkYXRvcklkLCBwb29sSWQ6IGkgKyAxLCBwb29sQXBwSWQ6IHBvb2xzW2ldLnBvb2xBcHBJZCB9LAoJLy8gICAgICAgICAgICAgICAgICAgICBpc05ld1N0YWtlclRvVmFsaWRhdG9yLAoJLy8gICAgICAgICAgICAgICAgICAgICBpc05ld1N0YWtlclRvUHJvdG9jb2wsCgkvLyAgICAgICAgICAgICAgICAgXQoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWZyYW1lX2RpZyA3IC8vIGk6IHVpbnQ2NAoJaW50IDEKCSsKCWl0b2IKCWNvbmNhdAoJZnJhbWVfZGlnIDUgLy8gcG9vbHM6ICh1aW50NjQsdWludDE2LHVpbnQ2NClbMjRdCglmcmFtZV9kaWcgNyAvLyBpOiB1aW50NjQKCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgMAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMAoJaW50IDAKCWZyYW1lX2RpZyAwIC8vIGlzTmV3U3Rha2VyVG9WYWxpZGF0b3I6IGJvb2wKCXNldGJpdAoJaW50IDEKCWZyYW1lX2RpZyAxIC8vIGlzTmV3U3Rha2VyVG9Qcm90b2NvbDogYm9vbAoJc2V0Yml0Cgljb25jYXQKCWIgKmZpbmRQb29sRm9yU3Rha2VyKnJldHVybgoKKmlmMjZfZW5kOgoKKmZvcl80X2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTgxCgkvLyBpICs9IDEKCWZyYW1lX2RpZyA3IC8vIGk6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgNyAvLyBpOiB1aW50NjQKCWIgKmZvcl80CgoqZm9yXzRfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTkxCgkvLyByZXR1cm4gW3sgaWQ6IHZhbGlkYXRvcklkLCBwb29sSWQ6IDAsIHBvb2xBcHBJZDogMCB9LCBpc05ld1N0YWtlclRvVmFsaWRhdG9yLCBpc05ld1N0YWtlclRvUHJvdG9jb2xdCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sCglzZXRiaXQKCWNvbmNhdAoKKmZpbmRQb29sRm9yU3Rha2VyKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDcKCXJldHN1YgoKLy8gbW92ZVBvb2xUb05vZGUodWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX21vdmVQb29sVG9Ob2RlOgoJLy8gbm9kZU51bTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgoJLy8gcG9vbEFwcElkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBtb3ZlUG9vbFRvTm9kZSh1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIG1vdmVQb29sVG9Ob2RlCglpbnQgMQoJcmV0dXJuCgovLyBtb3ZlUG9vbFRvTm9kZSh2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlLCBwb29sQXBwSWQ6IHVpbnQ2NCwgbm9kZU51bTogdWludDY0KTogdm9pZAovLwovLyBGaW5kIHRoZSBzcGVjaWZpZWQgcG9vbCAoaW4gYW55IG5vZGUgbnVtYmVyKSBhbmQgbW92ZSBpdCB0byB0aGUgc3BlY2lmaWVkIG5vZGUuCi8vIFRoZSBwb29sIGFjY291bnQgaXMgZm9yY2VkIG9mZmxpbmUgaWYgbW92ZWQgc28gcHJpb3Igbm9kZSB3aWxsIHN0aWxsIHJ1biBmb3IgMzIwIHJvdW5kcyBidXQKLy8gbmV3IGtleSBnb2VzIG9ubGluZSBvbiBuZXcgbm9kZSBzb29uIGFmdGVyICgzMjAgcm91bmRzIGFmdGVyIGl0IGdvZXMgb25saW5lKQovLyBOby1vcCBpZiBzdWNjZXNzLCBhc3NlcnRzIGlmIG5vdCBmb3VuZCBvciBjYW4ndCBtb3ZlICAobm8gc3BhY2UgaW4gdGFyZ2V0KQovLyBbIE9OTFkgT1dORVIgT1IgTUFOQUdFUiBDQU4gQ0hBTkdFIF0KLy8KLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3IuCi8vIEBwYXJhbSB7dWludDY0fSBwb29sQXBwSWQKLy8gQHBhcmFtIHt1aW50NjR9IG5vZGVOdW0KbW92ZVBvb2xUb05vZGU6Cglwcm90byAzIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTAwNwoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgdGhpcy50eG4uc2VuZGVyID09PSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5vd25lciB8fAoJLy8gICAgICAgICAgICAgICAgIHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubWFuYWdlciwKCS8vICAgICAgICAgICAgICdjYW4gb25seSBiZSBjYWxsZWQgYnkgb3duZXIgb3IgbWFuYWdlciBvZiB2YWxpZGF0b3InLAoJLy8gICAgICAgICApCgl0eG4gU2VuZGVyCglpbnQgOAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJPT0KCWR1cAoJYm56ICpza2lwX29yMwoJdHhuIFNlbmRlcgoJaW50IDQwCglpbnQgMzIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0Cgk9PQoJfHwKCipza2lwX29yMzoKCS8vIGNhbiBvbmx5IGJlIGNhbGxlZCBieSBvd25lciBvciBtYW5hZ2VyIG9mIHZhbGlkYXRvcgoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTAxMwoJLy8gbm9kZVBvb2xBc3NpZ25tZW50cyA9IGNsb25lKHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUubm9kZVBvb2xBc3NpZ25tZW50cykKCWludCA5MDAgLy8gaGVhZE9mZnNldAoJaW50IDE5MgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgMCAvLyBub2RlUG9vbEFzc2lnbm1lbnRzOiAoKHVpbnQ2NFszXSlbOF0pCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTAxNAoJLy8gYXNzZXJ0KG5vZGVOdW0gPj0gMSAmJiBub2RlTnVtIDw9IE1BWF9OT0RFUywgJ25vZGUgbnVtYmVyIG91dCBvZiBhbGxvd2FibGUgcmFuZ2UnKQoJZnJhbWVfZGlnIC0zIC8vIG5vZGVOdW06IHVpbnQ2NAoJaW50IDEKCT49CglkdXAKCWJ6ICpza2lwX2FuZDEKCWZyYW1lX2RpZyAtMyAvLyBub2RlTnVtOiB1aW50NjQKCWludCA4Cgk8PQoJJiYKCipza2lwX2FuZDE6CgkvLyBub2RlIG51bWJlciBvdXQgb2YgYWxsb3dhYmxlIHJhbmdlCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDE2CgkvLyBmb3IgKGxldCBzcmNOb2RlSWR4ID0gMDsgc3JjTm9kZUlkeCA8IE1BWF9OT0RFUzsgc3JjTm9kZUlkeCArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMSAvLyBzcmNOb2RlSWR4OiB1aW50NjQKCipmb3JfNToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMTYKCS8vIHNyY05vZGVJZHggPCBNQVhfTk9ERVMKCWZyYW1lX2RpZyAxIC8vIHNyY05vZGVJZHg6IHVpbnQ2NAoJaW50IDgKCTwKCWJ6ICpmb3JfNV9lbmQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDE3CgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IE1BWF9QT09MU19QRVJfTk9ERTsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMiAvLyBpOiB1aW50NjQKCipmb3JfNjoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMTcKCS8vIGkgPCBNQVhfUE9PTFNfUEVSX05PREUKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50IDMKCTwKCWJ6ICpmb3JfNl9lbmQKCgkvLyAqaWYyN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMTgKCS8vIG5vZGVQb29sQXNzaWdubWVudHMubm9kZXNbc3JjTm9kZUlkeF0ucG9vbEFwcElkc1tpXSA9PT0gcG9vbEFwcElkCglmcmFtZV9kaWcgMCAvLyBub2RlUG9vbEFzc2lnbm1lbnRzOiAoKHVpbnQ2NFszXSlbOF0pCglpbnQgMAoJZnJhbWVfZGlnIDEgLy8gc3JjTm9kZUlkeDogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDAKCSsKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50IDgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglmcmFtZV9kaWcgLTIgLy8gcG9vbEFwcElkOiB1aW50NjQKCT09CglieiAqaWYyN19lbmQKCgkvLyAqaWYyN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDE5CgkvLyBhc3NlcnQobm9kZU51bSAtIDEgIT09IHNyY05vZGVJZHgsICJjYW4ndCBtb3ZlIHRvIHNhbWUgbm9kZSIpCglmcmFtZV9kaWcgLTMgLy8gbm9kZU51bTogdWludDY0CglpbnQgMQoJLQoJZnJhbWVfZGlnIDEgLy8gc3JjTm9kZUlkeDogdWludDY0CgkhPQoKCS8vIGNhbid0IG1vdmUgdG8gc2FtZSBub2RlCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDIxCgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLm5vZGVQb29sQXNzaWdubWVudHMubm9kZXNbc3JjTm9kZUlkeF0ucG9vbEFwcElkc1tpXSA9IDAKCWludCA5MDAKCWZyYW1lX2RpZyAxIC8vIHNyY05vZGVJZHg6IHVpbnQ2NAoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAwCgkrCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCA4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMjQKCS8vIHNlbmRNZXRob2RDYWxsPHR5cGVvZiBTdGFraW5nUG9vbC5wcm90b3R5cGUuZ29PZmZsaW5lPih7CgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCksCgkvLyAgICAgICAgICAgICAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJnb09mZmxpbmUoKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMjUKCS8vIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQocG9vbEFwcElkKQoJZnJhbWVfZGlnIC0yIC8vIHBvb2xBcHBJZDogdWludDY0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTAyOQoJLy8gdGhpcy5hZGRQb29sVG9Ob2RlKHZhbGlkYXRvcklkLCBwb29sQXBwSWQsIG5vZGVOdW0pCglmcmFtZV9kaWcgLTMgLy8gbm9kZU51bTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gcG9vbEFwcElkOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCgljYWxsc3ViIGFkZFBvb2xUb05vZGUKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDMwCgkvLyByZXR1cm4KCXJldHN1YgoKKmlmMjdfZW5kOgoKKmZvcl82X2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTAxNwoJLy8gaSArPSAxCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDIgLy8gaTogdWludDY0CgliICpmb3JfNgoKKmZvcl82X2VuZDoKCipmb3JfNV9jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMTYKCS8vIHNyY05vZGVJZHggKz0gMQoJZnJhbWVfZGlnIDEgLy8gc3JjTm9kZUlkeDogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAxIC8vIHNyY05vZGVJZHg6IHVpbnQ2NAoJYiAqZm9yXzUKCipmb3JfNV9lbmQ6CgkvLyBjb3VsZG4ndCBmaW5kIHBvb2wgYXBwIGlkIGluIG5vZGVzIHRvIG1vdmUKCWVycgoJcmV0c3ViCgovLyBlbXB0eVRva2VuUmV3YXJkcyh1aW50NjQsYWRkcmVzcyl1aW50NjQKKmFiaV9yb3V0ZV9lbXB0eVRva2VuUmV3YXJkczoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMCAocmVjZWl2ZXIpIGZvciBlbXB0eVRva2VuUmV3YXJkcyBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZW1wdHlUb2tlblJld2FyZHModWludDY0LGFkZHJlc3MpdWludDY0CgljYWxsc3ViIGVtcHR5VG9rZW5SZXdhcmRzCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZW1wdHlUb2tlblJld2FyZHModmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgcmVjZWl2ZXI6IEFkZHJlc3MpOiB1aW50NjQKLy8KLy8gU2VuZHMgdGhlIHJld2FyZCB0b2tlbnMgaGVsZCBpbiBwb29sIDEgdG8gc3BlY2lmaWVkIHJlY2VpdmVyLgovLyBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgdGhlIG93bmVyIHdoZW4gdGhleSB3YW50IHRvIGdldCByZXdhcmQgdG9rZW5zICdiYWNrJyB3aGljaCB0aGV5IHNlbnQgdG8KLy8gdGhlIGZpcnN0IHBvb2wgKGxpa2VseSBiZWNhdXNlIHZhbGlkYXRvciBpcyBzdW5zZXR0aW5nLiAgQW55IHRva2VucyBjdXJyZW50bHkgJ3Jlc2VydmVkJyBmb3Igc3Rha2VycyB0byBjbGFpbSB3aWxsCi8vIE5PVCBiZSBzZW50IGFzIHRoZXkgbXVzdCBiZSBoZWxkIGJhY2sgZm9yIHN0YWtlcnMgdG8gbGF0ZXIgY2xhaW0uCi8vIFsgT05MWSBPV05FUiBDQU4gQ0FMTF0KLy8KLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3IuCi8vIEBwYXJhbSB7QWRkcmVzc30gcmVjZWl2ZXIgLSB0aGUgYWNjb3VudCB0byBzZW5kIHRoZSB0b2tlbnMgdG8gKG11c3QgYWxyZWFkeSBiZSBvcHRlZC1pbiB0byB0aGUgcmV3YXJkIHRva2VuKQovLyBAcmV0dXJucyB7dWludDY0fSB0aGUgYW1vdW50IG9mIHJld2FyZCB0b2tlbiBzZW50CmVtcHR5VG9rZW5SZXdhcmRzOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMwoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNDkKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcub3duZXIsCgkvLyAgICAgICAgICAgICAnY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IHZhbGlkYXRvciBvd25lcicsCgkvLyAgICAgICAgICkKCXR4biBTZW5kZXIKCWludCA4CglpbnQgMzIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0Cgk9PQoKCS8vIGNhbiBvbmx5IGJlIGNhbGxlZCBieSB2YWxpZGF0b3Igb3duZXIKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNTMKCS8vIHJld2FyZFRva2VuSWQgPSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5yZXdhcmRUb2tlbklkCglpbnQgMTUzCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMCAvLyByZXdhcmRUb2tlbklkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDU0CgkvLyByZXdhcmRUb2tlbkhlbGRCYWNrID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5zdGF0ZS5yZXdhcmRUb2tlbkhlbGRCYWNrCglpbnQgMjYwCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMSAvLyByZXdhcmRUb2tlbkhlbGRCYWNrOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDU1CgkvLyBhc3NlcnQocmV3YXJkVG9rZW5JZCAhPT0gMCwgInRoaXMgdmFsaWRhdG9yIGRvZXNuJ3QgaGF2ZSBhIHJld2FyZCB0b2tlbiBkZWZpbmVkIikKCWZyYW1lX2RpZyAwIC8vIHJld2FyZFRva2VuSWQ6IHVpbnQ2NAoJaW50IDAKCSE9CgoJLy8gdGhpcyB2YWxpZGF0b3IgZG9lc24ndCBoYXZlIGEgcmV3YXJkIHRva2VuIGRlZmluZWQKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNTYKCS8vIHBvb2xPbmVBcHBJZCA9IEFwcElELmZyb21VaW50NjQodGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5wb29sc1swXS5wb29sQXBwSWQpCglpbnQgMjY4CglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMiAvLyBwb29sT25lQXBwSWQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNTgKCS8vIHRva2VuUmV3YXJkQmFsID0KCS8vICAgICAgICAgICAgIHBvb2xPbmVBcHBJZC5hZGRyZXNzLmFzc2V0QmFsYW5jZShBc3NldElELmZyb21VaW50NjQocmV3YXJkVG9rZW5JZCkpIC0gcmV3YXJkVG9rZW5IZWxkQmFjawoJZnJhbWVfZGlnIDIgLy8gcG9vbE9uZUFwcElkOiB1aW50NjQKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJZnJhbWVfZGlnIDAgLy8gcmV3YXJkVG9rZW5JZDogdWludDY0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gcmV3YXJkVG9rZW5IZWxkQmFjazogdWludDY0CgktCglmcmFtZV9idXJ5IDMgLy8gdG9rZW5SZXdhcmRCYWw6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNjIKCS8vIHNlbmRNZXRob2RDYWxsPHR5cGVvZiBTdGFraW5nUG9vbC5wcm90b3R5cGUucGF5VG9rZW5SZXdhcmQ+KHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHBvb2xPbmVBcHBJZCwKCS8vICAgICAgICAgICAgIG1ldGhvZEFyZ3M6IFtyZWNlaXZlciwgcmV3YXJkVG9rZW5JZCwgdG9rZW5SZXdhcmRCYWxdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAicGF5VG9rZW5SZXdhcmQoYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNjMKCS8vIGFwcGxpY2F0aW9uSUQ6IHBvb2xPbmVBcHBJZAoJZnJhbWVfZGlnIDIgLy8gcG9vbE9uZUFwcElkOiB1aW50NjQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNjQKCS8vIG1ldGhvZEFyZ3M6IFtyZWNlaXZlciwgcmV3YXJkVG9rZW5JZCwgdG9rZW5SZXdhcmRCYWxdCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMCAvLyByZXdhcmRUb2tlbklkOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMyAvLyB0b2tlblJld2FyZEJhbDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDY2CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICBwb29sT25lQXBwSWQuYWRkcmVzcy5hc3NldEJhbGFuY2UoQXNzZXRJRC5mcm9tVWludDY0KHJld2FyZFRva2VuSWQpKSA9PT0gcmV3YXJkVG9rZW5IZWxkQmFjaywKCS8vICAgICAgICAgICAgICdiYWxhbmNlIG9mIHJlbWFpbmluZyByZXdhcmQgdG9rZW5zIHNob3VsZCBtYXRjaCB0aGUgaGVsZCBiYWNrIGFtb3VudCcsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyAyIC8vIHBvb2xPbmVBcHBJZDogdWludDY0CglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglwb3AKCWZyYW1lX2RpZyAwIC8vIHJld2FyZFRva2VuSWQ6IHVpbnQ2NAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIHJld2FyZFRva2VuSGVsZEJhY2s6IHVpbnQ2NAoJPT0KCgkvLyBiYWxhbmNlIG9mIHJlbWFpbmluZyByZXdhcmQgdG9rZW5zIHNob3VsZCBtYXRjaCB0aGUgaGVsZCBiYWNrIGFtb3VudAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTA3MAoJLy8gcmV0dXJuIHRva2VuUmV3YXJkQmFsCglmcmFtZV9kaWcgMyAvLyB0b2tlblJld2FyZEJhbDogdWludDY0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMwoJcmV0c3ViCgovLyB2ZXJpZnlQb29sS2V5Q2FsbGVyKHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkpOiB2b2lkCi8vCi8vIExvZ3MgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IHZhbGlkYXRvciB0byB0aGUgc3lzdGVtLCBpdHMgaW5pdGlhbCBvd25lciBhbmQgbWFuYWdlcgovLwovLwovLyB2ZXJpZnlQb29sS2V5Q2FsbGVyIHZlcmlmaWVzIHRoZSBwYXNzZWQgaW4ga2V5IChmcm9tIGEgc3Rha2luZyBwb29sIGNhbGxpbmcgdXMgdG8gdXBkYXRlIG1ldHJpY3MpIGlzIHZhbGlkCi8vIGFuZCBtYXRjaGVzIHRoZSBpbmZvcm1hdGlvbiB3ZSBoYXZlIGluIG91ciBzdGF0ZS4gICdGYWtlJyBwb29scyBjb3VsZCBjYWxsIHVzIHRvIHVwZGF0ZSBvdXIgZGF0YSwgYnV0IHRoZXkKLy8gY2FuJ3QgZmFrZSB0aGUgaWRzIGFuZCBtb3N0IGltcG9ydGFudGx5IGFwcGxpY2F0aW9uIGlkKCEpIG9mIHRoZSBjYWxsZXIgdGhhdCBoYXMgdG8gbWF0Y2guCnZlcmlmeVBvb2xLZXlDYWxsZXI6Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMTY4CgkvLyBhc3NlcnQodGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLmV4aXN0cywgInRoZSBzcGVjaWZpZWQgdmFsaWRhdG9yIGlkIGlzbid0IHZhbGlkIikKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cglib3hfbGVuCglzd2FwCglwb3AKCgkvLyB0aGUgc3BlY2lmaWVkIHZhbGlkYXRvciBpZCBpc24ndCB2YWxpZAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTE2OQoJLy8gYXNzZXJ0KHBvb2xLZXkucG9vbElkIDw9IE1BWF9QT09MUywgJ3Bvb2wgaWQgbm90IGluIHZhbGlkIHJhbmdlJykKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDI0Cgk8PQoKCS8vIHBvb2wgaWQgbm90IGluIHZhbGlkIHJhbmdlCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMTcwCgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICBwb29sS2V5LnBvb2xJZCA+IDAgJiYgKHBvb2xLZXkucG9vbElkIGFzIHVpbnQxNikgPD0gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLm51bVBvb2xzLAoJLy8gICAgICAgICAgICAgJ3Bvb2wgaWQgb3V0c2lkZSBvZiByYW5nZSBvZiBwb29scyBjcmVhdGVkIGZvciB0aGlzIHZhbGlkYXRvcicsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDAKCT4KCWR1cAoJYnogKnNraXBfYW5kMgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgOCA4CglidG9pCglpbnQgMjQyCglpbnQgMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCgk8PQoJJiYKCipza2lwX2FuZDI6CgkvLyBwb29sIGlkIG91dHNpZGUgb2YgcmFuZ2Ugb2YgcG9vbHMgY3JlYXRlZCBmb3IgdGhpcyB2YWxpZGF0b3IKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjExNzYKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIHBvb2xLZXkucG9vbEFwcElkID09PSB0aGlzLnZhbGlkYXRvckxpc3QocG9vbEtleS5pZCkudmFsdWUucG9vbHNbcG9vbEtleS5wb29sSWQgLSAxXS5wb29sQXBwSWQsCgkvLyAgICAgICAgICAgICAiVGhlIHBhc3NlZCBpbiBhcHAgaWQgZG9lc24ndCBtYXRjaCB0aGUgcGFzc2VkIGluIGlkcyIsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDE2IDgKCWJ0b2kKCWludCAyNjggLy8gaGVhZE9mZnNldAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgOCA4CglidG9pCglpbnQgMQoJLQoJaW50IDE4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAwCgkrCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCgk9PQoKCS8vIFRoZSBwYXNzZWQgaW4gYXBwIGlkIGRvZXNuJ3QgbWF0Y2ggdGhlIHBhc3NlZCBpbiBpZHMKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjExODEKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IEFwcElELmZyb21VaW50NjQocG9vbEtleS5wb29sQXBwSWQpLmFkZHJlc3MpCgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAxNiA4CglidG9pCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglwb3AKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMTgzCgkvLyBhc3NlcnQocG9vbEtleS5pZCA9PT0gKEFwcElELmZyb21VaW50NjQocG9vbEtleS5wb29sQXBwSWQpLmdsb2JhbFN0YXRlKCd2YWxpZGF0b3JJZCcpIGFzIHVpbnQ2NCkpCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDE2IDgKCWJ0b2kKCWJ5dGUgMHg3NjYxNmM2OTY0NjE3NDZmNzI0OTY0IC8vICJ2YWxpZGF0b3JJZCIKCWFwcF9nbG9iYWxfZ2V0X2V4CgoJLy8gZ2xvYmFsIHN0YXRlIHZhbHVlIGRvZXMgbm90IGV4aXN0OiBBcHBJRC5mcm9tVWludDY0KHBvb2xLZXkucG9vbEFwcElkKS5nbG9iYWxTdGF0ZSgndmFsaWRhdG9ySWQnKQoJYXNzZXJ0Cgk9PQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTE4NAoJLy8gYXNzZXJ0KHBvb2xLZXkucG9vbElkID09PSAoQXBwSUQuZnJvbVVpbnQ2NChwb29sS2V5LnBvb2xBcHBJZCkuZ2xvYmFsU3RhdGUoJ3Bvb2xJZCcpIGFzIHVpbnQ2NCkpCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDE2IDgKCWJ0b2kKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0X2V4CgoJLy8gZ2xvYmFsIHN0YXRlIHZhbHVlIGRvZXMgbm90IGV4aXN0OiBBcHBJRC5mcm9tVWludDY0KHBvb2xLZXkucG9vbEFwcElkKS5nbG9iYWxTdGF0ZSgncG9vbElkJykKCWFzc2VydAoJPT0KCWFzc2VydAoJcmV0c3ViCgovLyByZXZlcmlmeU5GRE93bmVyc2hpcCh2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlKTogdm9pZAovLwovLyBUaGlzIG1ldGhvZCB2ZXJpZmllcyB0aGUgb3duZXJzaGlwIG9mIE5GRCAoTmFtZWQgRnVuY3Rpb24gRGF0YSkgYnkgYSB2YWxpZGF0b3IuCi8vIElmIHRoZSBvd25lcnNoaXAgaXMgbm8gbG9uZ2VyIHZhbGlkLCBpdCByZW1vdmVzIHRoZSBORkQgZnJvbSB0aGUgdmFsaWRhdG9yJ3MgY29uZmlndXJhdGlvbi4KLy8KLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3Igd2hvc2UgZGF0YSBzaG91bGQgYmUgcmUtZXZhbHVhdGVkLgpyZXZlcmlmeU5GRE93bmVyc2hpcDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMTk0CgkvLyB2YWxpZGF0b3JDb25maWcgPSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZwoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAwIC8vIHN0b3JhZ2Uga2V5Ly92YWxpZGF0b3JDb25maWcKCgkvLyAqaWYyOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjExOTUKCS8vIHZhbGlkYXRvckNvbmZpZy5uZmRGb3JJbmZvICE9PSAwCglpbnQgNzIKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJaW50IDAKCSE9CglieiAqaWYyOF9lbmQKCgkvLyAqaWYyOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMTk4CgkvLyBuZmRPd25lciA9IEFwcElELmZyb21VaW50NjQodmFsaWRhdG9yQ29uZmlnLm5mZEZvckluZm8pLmdsb2JhbFN0YXRlKCdpLm93bmVyLmEnKSBhcyBBZGRyZXNzCglpbnQgNzIKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJYnl0ZSAweDY5MmU2Zjc3NmU2NTcyMmU2MSAvLyAiaS5vd25lci5hIgoJYXBwX2dsb2JhbF9nZXRfZXgKCgkvLyBnbG9iYWwgc3RhdGUgdmFsdWUgZG9lcyBub3QgZXhpc3Q6IEFwcElELmZyb21VaW50NjQodmFsaWRhdG9yQ29uZmlnLm5mZEZvckluZm8pLmdsb2JhbFN0YXRlKCdpLm93bmVyLmEnKQoJYXNzZXJ0CglmcmFtZV9idXJ5IDEgLy8gbmZkT3duZXI6IGFkZHJlc3MKCgkvLyAqaWYyOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyMDAKCS8vIHZhbGlkYXRvckNvbmZpZy5vd25lciAhPT0gbmZkT3duZXIgJiYgdmFsaWRhdG9yQ29uZmlnLm1hbmFnZXIgIT09IG5mZE93bmVyCglpbnQgOAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJZnJhbWVfZGlnIDEgLy8gbmZkT3duZXI6IGFkZHJlc3MKCSE9CglkdXAKCWJ6ICpza2lwX2FuZDMKCWludCA0MAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJZnJhbWVfZGlnIDEgLy8gbmZkT3duZXI6IGFkZHJlc3MKCSE9CgkmJgoKKnNraXBfYW5kMzoKCWJ6ICppZjI5X2VuZAoKCS8vICppZjI5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyMDIKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLm5mZEZvckluZm8gPSAwCglpbnQgNzIKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKKmlmMjlfZW5kOgoKKmlmMjhfZW5kOgoJcmV0c3ViCgovLyB2YWxpZGF0ZUNvbmZpZyhjb25maWc6IFZhbGlkYXRvckNvbmZpZyk6IHZvaWQKdmFsaWRhdGVDb25maWc6Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjA5CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICBjb25maWcuZW50cnlHYXRpbmdUeXBlID49IEdBVElOR19UWVBFX05PTkUgJiYgY29uZmlnLmVudHJ5R2F0aW5nVHlwZSA8PSBHQVRJTkdfVFlQRV9DT05TVF9NQVgsCgkvLyAgICAgICAgICAgICAnZ2F0aW5nIHR5cGUgbm90IHZhbGlkJywKCS8vICAgICAgICAgKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDgwIDEKCWJ0b2kKCWludCAwCgk+PQoJZHVwCglieiAqc2tpcF9hbmQ0CglmcmFtZV9kaWcgLTEgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgODAgMQoJYnRvaQoJaW50IDQKCTw9CgkmJgoKKnNraXBfYW5kNDoKCS8vIGdhdGluZyB0eXBlIG5vdCB2YWxpZAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTIxMwoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgY29uZmlnLmVwb2NoUm91bmRMZW5ndGggPj0gTUlOX0VQT0NIX0xFTkdUSCAmJiBjb25maWcuZXBvY2hSb3VuZExlbmd0aCA8PSBNQVhfRVBPQ0hfTEVOR1RILAoJLy8gICAgICAgICAgICAgJ2Vwb2NoIGxlbmd0aCBub3QgaW4gYWxsb3dhYmxlIHJhbmdlJywKCS8vICAgICAgICAgKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDE2OSA0CglidG9pCglpbnQgMQoJPj0KCWR1cAoJYnogKnNraXBfYW5kNQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDE2OSA0CglidG9pCglpbnQgMTAwMDAwMAoJPD0KCSYmCgoqc2tpcF9hbmQ1OgoJLy8gZXBvY2ggbGVuZ3RoIG5vdCBpbiBhbGxvd2FibGUgcmFuZ2UKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyMTcKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIGNvbmZpZy5wZXJjZW50VG9WYWxpZGF0b3IgPj0gTUlOX1BDVF9UT19WQUxJREFUT1IgJiYgY29uZmlnLnBlcmNlbnRUb1ZhbGlkYXRvciA8PSBNQVhfUENUX1RPX1ZBTElEQVRPUiwKCS8vICAgICAgICAgICAgICdjb21taXNzaW9uIHBlcmNlbnRhZ2Ugbm90IHZhbGlkJywKCS8vICAgICAgICAgKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDE3MyA0CglidG9pCglpbnQgMAoJPj0KCWR1cAoJYnogKnNraXBfYW5kNgoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDE3MyA0CglidG9pCglpbnQgMTAwMDAwMAoJPD0KCSYmCgoqc2tpcF9hbmQ2OgoJLy8gY29tbWlzc2lvbiBwZXJjZW50YWdlIG5vdCB2YWxpZAoJYXNzZXJ0CgoJLy8gKmlmMzBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjIxCgkvLyBjb25maWcucGVyY2VudFRvVmFsaWRhdG9yICE9PSAwCglmcmFtZV9kaWcgLTEgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgMTczIDQKCWJ0b2kKCWludCAwCgkhPQoJYnogKmlmMzBfZW5kCgoJLy8gKmlmMzBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTIyMgoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcyAhPT0gQWRkcmVzcy56ZXJvQWRkcmVzcywKCS8vICAgICAgICAgICAgICAgICAndmFsaWRhdG9yQ29tbWlzc2lvbkFkZHJlc3MgbXVzdCBiZSBzZXQgaWYgcGVyY2VudCB0byB2YWxpZGF0b3IgaXMgbm90IDAnLAoJLy8gICAgICAgICAgICAgKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDE3NyAzMgoJZ2xvYmFsIFplcm9BZGRyZXNzCgkhPQoKCS8vIHZhbGlkYXRvckNvbW1pc3Npb25BZGRyZXNzIG11c3QgYmUgc2V0IGlmIHBlcmNlbnQgdG8gdmFsaWRhdG9yIGlzIG5vdCAwCglhc3NlcnQKCippZjMwX2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyMjcKCS8vIGFzc2VydChjb25maWcubWluRW50cnlTdGFrZSA+PSBNSU5fQUxHT19TVEFLRV9QRVJfUE9PTCwgJ3N0YWtpbmcgcG9vbCBtdXN0IGhhdmUgbWluaW11bSBlbnRyeSBvZiAxIGFsZ28nKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDIwOSA4CglidG9pCglpbnQgMTAwMDAwMAoJPj0KCgkvLyBzdGFraW5nIHBvb2wgbXVzdCBoYXZlIG1pbmltdW0gZW50cnkgb2YgMSBhbGdvCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjI5CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICBjb25maWcucG9vbHNQZXJOb2RlID4gMCAmJiBjb25maWcucG9vbHNQZXJOb2RlIDw9IE1BWF9QT09MU19QRVJfTk9ERSwKCS8vICAgICAgICAgICAgICdudW1iZXIgb2YgcG9vbHMgcGVyIG5vZGUgZXhjZWVkcyBhbGxvd2VkIG51bWJlcicsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyAtMSAvLyBjb25maWc6IFZhbGlkYXRvckNvbmZpZwoJZXh0cmFjdCAyMjUgMQoJYnRvaQoJaW50IDAKCT4KCWR1cAoJYnogKnNraXBfYW5kNwoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDIyNSAxCglidG9pCglpbnQgMwoJPD0KCSYmCgoqc2tpcF9hbmQ3OgoJLy8gbnVtYmVyIG9mIHBvb2xzIHBlciBub2RlIGV4Y2VlZHMgYWxsb3dlZCBudW1iZXIKCWFzc2VydAoKCS8vICppZjMxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTIzMwoJLy8gY29uZmlnLnN1bnNldHRpbmdPbiAhPT0gMAoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDIyNiA4CglidG9pCglpbnQgMAoJIT0KCWJ6ICppZjMxX2VuZAoKCS8vICppZjMxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyMzQKCS8vIGFzc2VydChjb25maWcuc3Vuc2V0dGluZ09uID4gZ2xvYmFscy5sYXRlc3RUaW1lc3RhbXAsICdzdW5zZXR0aW5nT24gbXVzdCBiZSBsYXRlciB0aGFuIG5vdyBpZiBzZXQnKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDIyNiA4CglidG9pCglnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCgk+CgoJLy8gc3Vuc2V0dGluZ09uIG11c3QgYmUgbGF0ZXIgdGhhbiBub3cgaWYgc2V0Cglhc3NlcnQKCippZjMxX2VuZDoKCXJldHN1YgoKLy8gY2FsbFBvb2xBZGRTdGFrZShzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4sIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXksIG1ickFtdFBhaWQ6IHVpbnQ2NCwgaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbGVhbiwgaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sZWFuKTogdm9pZAovLwovLyBBZGRzIGEgc3Rha2VycyBhbW91bnQgb2YgYWxnbyB0byBhIHZhbGlkYXRvciBwb29sLCB0cmFuc2ZlcnJpbmcgdGhlIGFsZ28gd2UgcmVjZWl2ZWQgZnJvbSB0aGVtIChhbHJlYWR5IHZlcmlmaWVkCi8vIGJ5IG91ciBjYWxsZXIpIHRvIHRoZSBzdGFraW5nIHBvb2wgYWNjb3VudCwgYW5kIHRoZW4gdGVsbGluZyBpdCBhYm91dCB0aGUgYW1vdW50IGJlaW5nIGFkZGVkIGZvciB0aGUgc3BlY2lmaWVkCi8vIHN0YWtlci4KLy8KLy8gQHBhcmFtIHtQYXlUeG59IHN0YWtlZEFtb3VudFBheW1lbnQgLSBwYXltZW50IGNvbWluZyBmcm9tIHN0YWtlciB0byBwbGFjZSBpbnRvIGEgcG9vbAovLyBAcGFyYW0ge1ZhbGlkYXRvclBvb2xLZXl9IHBvb2xLZXkgLSBUaGUga2V5IG9mIHRoZSB2YWxpZGF0b3IgcG9vbC4KLy8gQHBhcmFtIHt1aW50NjR9IG1ickFtdFBhaWQgLSBBbW91bnQgdGhlIHVzZXIgaXMgbGVhdmluZyBiZWhpbmQgaW4gdGhlIHZhbGlkYXRvciB0byBwYXkgZm9yIHRoZWlyIHN0YWtlciBNQlIgY29zdAovLyBAcGFyYW0ge2Jvb2xlYW59IGlzTmV3U3Rha2VyVG9WYWxpZGF0b3IgLSBpZiB0aGlzIGlzIGEgbmV3LCBmaXJzdC10aW1lIHN0YWtlciB0byB0aGUgdmFsaWRhdG9yCi8vIEBwYXJhbSB7Ym9vbGVhbn0gaXNOZXdTdGFrZXJUb1Byb3RvY29sIC0gaWYgdGhpcyBpcyBhIG5ldywgZmlyc3QtdGltZSBzdGFrZXIgdG8gdGhlIHByb3RvY29sCmNhbGxQb29sQWRkU3Rha2U6Cglwcm90byA1IDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI1NgoJLy8gcG9vbEFwcElkID0gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnBvb2xzW3Bvb2xLZXkucG9vbElkIC0gMV0ucG9vbEFwcElkCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgMAoJKwoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAwIC8vIHBvb2xBcHBJZDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI2MAoJLy8gc2VuZE1ldGhvZENhbGw8dHlwZW9mIFN0YWtpbmdQb29sLnByb3RvdHlwZS5hZGRTdGFrZSwgdWludDY0Pih7CgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCksCgkvLyAgICAgICAgICAgICBtZXRob2RBcmdzOiBbCgkvLyAgICAgICAgICAgICAgICAgLy8gPT09PT09PQoJLy8gICAgICAgICAgICAgICAgIC8vIFRISVMgSVMgQSBTRU5EIG9mIHRoZSBhbW91bnQgcmVjZWl2ZWQgcmlnaHQgYmFjayBvdXQgYW5kIGludG8gdGhlIHN0YWtpbmcgcG9vbCBjb250cmFjdCBhY2NvdW50LgoJLy8gICAgICAgICAgICAgICAgIHsgYW1vdW50OiBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCAtIG1ickFtdFBhaWQsIHJlY2VpdmVyOiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCkuYWRkcmVzcyB9LAoJLy8gICAgICAgICAgICAgICAgIC8vID09PT09PT0KCS8vICAgICAgICAgICAgICAgICBzdGFrZWRBbW91bnRQYXltZW50LnNlbmRlciwKCS8vICAgICAgICAgICAgIF0sCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI2NQoJLy8gYW1vdW50OiBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCAtIG1ickFtdFBhaWQKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJZnJhbWVfZGlnIC0zIC8vIG1ickFtdFBhaWQ6IHVpbnQ2NAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjY1CgkvLyByZWNlaXZlcjogQXBwSUQuZnJvbVVpbnQ2NChwb29sQXBwSWQpLmFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIHBvb2xBcHBJZDogdWludDY0CglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglwb3AKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fbmV4dAoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiYWRkU3Rha2UocGF5LGFkZHJlc3MpdWludDY0IgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjYxCgkvLyBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCkKCWZyYW1lX2RpZyAwIC8vIHBvb2xBcHBJZDogdWludDY0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjYyCgkvLyBtZXRob2RBcmdzOiBbCgkvLyAgICAgICAgICAgICAgICAgLy8gPT09PT09PQoJLy8gICAgICAgICAgICAgICAgIC8vIFRISVMgSVMgQSBTRU5EIG9mIHRoZSBhbW91bnQgcmVjZWl2ZWQgcmlnaHQgYmFjayBvdXQgYW5kIGludG8gdGhlIHN0YWtpbmcgcG9vbCBjb250cmFjdCBhY2NvdW50LgoJLy8gICAgICAgICAgICAgICAgIHsgYW1vdW50OiBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCAtIG1ickFtdFBhaWQsIHJlY2VpdmVyOiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCkuYWRkcmVzcyB9LAoJLy8gICAgICAgICAgICAgICAgIC8vID09PT09PT0KCS8vICAgICAgICAgICAgICAgICBzdGFrZWRBbW91bnRQYXltZW50LnNlbmRlciwKCS8vICAgICAgICAgICAgIF0KCWZyYW1lX2RpZyAtMSAvLyBzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4KCWd0eG5zIFNlbmRlcgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWJ0b2kKCgkvLyAqaWYzMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyNzAKCS8vIGdsb2JhbHMub3Bjb2RlQnVkZ2V0IDwgNTAwCglnbG9iYWwgT3Bjb2RlQnVkZ2V0CglpbnQgNTAwCgk8CglieiAqaWYzMl9lbmQKCgkvLyAqaWYzMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjcxCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWYzMl9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjc1CgkvLyBwb29sTnVtU3Rha2VycyA9IEFwcElELmZyb21VaW50NjQocG9vbEFwcElkKS5nbG9iYWxTdGF0ZSgnbnVtU3Rha2VycycpIGFzIHVpbnQ2NAoJZnJhbWVfZGlnIDAgLy8gcG9vbEFwcElkOiB1aW50NjQKCWJ5dGUgMHg2ZTc1NmQ1Mzc0NjE2YjY1NzI3MyAvLyAibnVtU3Rha2VycyIKCWFwcF9nbG9iYWxfZ2V0X2V4CgoJLy8gZ2xvYmFsIHN0YXRlIHZhbHVlIGRvZXMgbm90IGV4aXN0OiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCkuZ2xvYmFsU3RhdGUoJ251bVN0YWtlcnMnKQoJYXNzZXJ0CglmcmFtZV9idXJ5IDEgLy8gcG9vbE51bVN0YWtlcnM6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyNzYKCS8vIHBvb2xBbGdvU3Rha2VkID0gQXBwSUQuZnJvbVVpbnQ2NChwb29sQXBwSWQpLmdsb2JhbFN0YXRlKCdzdGFrZWQnKSBhcyB1aW50NjQKCWZyYW1lX2RpZyAwIC8vIHBvb2xBcHBJZDogdWludDY0CglieXRlIDB4NzM3NDYxNmI2NTY0IC8vICJzdGFrZWQiCglhcHBfZ2xvYmFsX2dldF9leAoKCS8vIGdsb2JhbCBzdGF0ZSB2YWx1ZSBkb2VzIG5vdCBleGlzdDogQXBwSUQuZnJvbVVpbnQ2NChwb29sQXBwSWQpLmdsb2JhbFN0YXRlKCdzdGFrZWQnKQoJYXNzZXJ0CglmcmFtZV9idXJ5IDIgLy8gcG9vbEFsZ29TdGFrZWQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyNzcKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5wb29sc1twb29sS2V5LnBvb2xJZCAtIDFdLnRvdGFsU3Rha2VycyA9IHBvb2xOdW1TdGFrZXJzIGFzIHVpbnQxNgoJaW50IDI2OCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWludCAxCgktCglpbnQgMTgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDggLy8gaGVhZE9mZnNldAoJKwoJZnJhbWVfZGlnIDEgLy8gcG9vbE51bVN0YWtlcnM6IHVpbnQ2NAoJaXRvYgoJZXh0cmFjdCA2IDIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyNzgKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5wb29sc1twb29sS2V5LnBvb2xJZCAtIDFdLnRvdGFsQWxnb1N0YWtlZCA9IHBvb2xBbGdvU3Rha2VkCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgMTAgLy8gaGVhZE9mZnNldAoJKwoJZnJhbWVfZGlnIDIgLy8gcG9vbEFsZ29TdGFrZWQ6IHVpbnQ2NAoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0yIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gKmlmMzNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjgxCgkvLyBpc05ld1N0YWtlclRvVmFsaWRhdG9yCglmcmFtZV9kaWcgLTQgLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbGVhbgoJYnogKmlmMzNfZW5kCgoJLy8gKmlmMzNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI4MgoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLnRvdGFsU3Rha2VycyArPSAxCglpbnQgMjQ0CglkdXAKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWludCAxCgkrCglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCippZjMzX2VuZDoKCS8vICppZjM0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI4NAoJLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sCglmcmFtZV9kaWcgLTUgLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sZWFuCglieiAqaWYzNF9lbmQKCgkvLyAqaWYzNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjg1CgkvLyB0aGlzLm51bVN0YWtlcnMudmFsdWUgKz0gMQoJYnl0ZSAweDZlNzU2ZDUzNzQ2MTZiNjU3MjczIC8vICJudW1TdGFrZXJzIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgkrCglieXRlIDB4NmU3NTZkNTM3NDYxNmI2NTcyNzMgLy8gIm51bVN0YWtlcnMiCglzd2FwCglhcHBfZ2xvYmFsX3B1dAoKKmlmMzRfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI4NwoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLnRvdGFsQWxnb1N0YWtlZCArPSBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCAtIG1ickFtdFBhaWQKCWludCAyNTIKCWR1cAoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgQW1vdW50CglmcmFtZV9kaWcgLTMgLy8gbWJyQW10UGFpZDogdWludDY0CgktCgkrCglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjg4CgkvLyB0aGlzLnRvdGFsQWxnb1N0YWtlZC52YWx1ZSArPSBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCAtIG1ickFtdFBhaWQKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWZyYW1lX2RpZyAtMyAvLyBtYnJBbXRQYWlkOiB1aW50NjQKCS0KCSsKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCXN3YXAKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIHVwZGF0ZVN0YWtlclBvb2xTZXQoc3Rha2VyOiBBZGRyZXNzLCBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5KTogdm9pZAp1cGRhdGVTdGFrZXJQb29sU2V0OgoJcHJvdG8gMiAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyOTIKCS8vIGFzc2VydCh0aGlzLnN0YWtlclBvb2xTZXQoc3Rha2VyKS5leGlzdHMpCglieXRlIDB4NzM3MDczIC8vICJzcHMiCglmcmFtZV9kaWcgLTEgLy8gc3Rha2VyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI5NAoJLy8gcG9vbFNldCA9IGNsb25lKHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlKQoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLnN0YWtlclBvb2xTZXQoc3Rha2VyKS52YWx1ZQoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyOTUKCS8vIGZpcnN0RW1wdHkgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIGZpcnN0RW1wdHk6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyOTYKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikudmFsdWUubGVuZ3RoOyBpICs9IDEpCglpbnQgMAoJZnJhbWVfYnVyeSAyIC8vIGk6IHVpbnQ2NAoKKmZvcl83OgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI5NgoJLy8gaSA8IHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlLmxlbmd0aAoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgNgoJPAoJYnogKmZvcl83X2VuZAoKCS8vICppZjM1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI5NwoJLy8gcG9vbFNldFtpXSA9PT0gcG9vbEtleQoJZnJhbWVfZGlnIDAgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDI0CglleHRyYWN0MwoJZnJhbWVfZGlnIC0yIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCT09CglieiAqaWYzNV9lbmQKCgkvLyAqaWYzNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjk5CgkvLyByZXR1cm4KCXJldHN1YgoKKmlmMzVfZW5kOgoJLy8gKmlmMzZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzAxCgkvLyBmaXJzdEVtcHR5ID09PSAwICYmIHBvb2xTZXRbaV0uaWQgPT09IDAKCWZyYW1lX2RpZyAxIC8vIGZpcnN0RW1wdHk6IHVpbnQ2NAoJaW50IDAKCT09CglkdXAKCWJ6ICpza2lwX2FuZDgKCWZyYW1lX2RpZyAwIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDY0LHVpbnQ2NClbNl0KCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCAwCgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWludCAwCgk9PQoJJiYKCipza2lwX2FuZDg6CglieiAqaWYzNl9lbmQKCgkvLyAqaWYzNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzAyCgkvLyBmaXJzdEVtcHR5ID0gaSArIDEKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMSAvLyBmaXJzdEVtcHR5OiB1aW50NjQKCippZjM2X2VuZDoKCipmb3JfN19jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyOTYKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAyIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzcKCipmb3JfN19lbmQ6CgkvLyAqaWYzN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMDUKCS8vIGZpcnN0RW1wdHkgPT09IDAKCWZyYW1lX2RpZyAxIC8vIGZpcnN0RW1wdHk6IHVpbnQ2NAoJaW50IDAKCT09CglieiAqaWYzN19lbmQKCgkvLyAqaWYzN19jb25zZXF1ZW50CgkvLyBObyBlbXB0eSBzbG90IGF2YWlsYWJsZSBpbiB0aGUgc3Rha2VyIHBvb2wgc2V0CgllcnIKCippZjM3X2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMDgKCS8vIHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlW2ZpcnN0RW1wdHkgLSAxXSA9IHBvb2xLZXkKCWZyYW1lX2RpZyAxIC8vIGZpcnN0RW1wdHk6IHVpbnQ2NAoJaW50IDEKCS0KCWludCAyNAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoJcmV0c3ViCgovLyByZW1vdmVGcm9tU3Rha2VyUG9vbFNldChzdGFrZXI6IEFkZHJlc3MsIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkpOiBbYm9vbGVhbiwgYm9vbGVhbl0KLy8KLy8gUmVtb3ZlcyBhIHBvb2wga2V5IGZyb20gdGhlIHN0YWtlcidzIGFjdGl2ZSBwb29sIHNldCAtIGZhaWxzIGlmIG5vdCBmb3VuZCAoISkKLy8KLy8gQHBhcmFtIHtBZGRyZXNzfSBzdGFrZXIgLSBUaGUgYWRkcmVzcyBvZiB0aGUgc3Rha2VyLgovLyBAcGFyYW0ge1ZhbGlkYXRvclBvb2xLZXl9IHBvb2xLZXkgLSBUaGUgcG9vbCBrZXkgdGhleSBzaG91bGQgYmUgc3RvcmVkIGluCi8vCi8vIEByZXR1cm4gW2Jvb2xlYW4sIGJvb2xlYW5dIFtpcyB0aGUgc3Rha2VyIGdvbmUgZnJvbSBBTEwgcG9vbHMgb2YgdGhlIGdpdmVuIFZBTElEQVRPUiwgYW5kIGlzIHN0YWtlciBnb25lIGZyb20gQUxMIHBvb2xzXQpyZW1vdmVGcm9tU3Rha2VyUG9vbFNldDoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzIxCgkvLyBpblNhbWVWYWxpZGF0b3JQb29sQ291bnQgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAwIC8vIGluU2FtZVZhbGlkYXRvclBvb2xDb3VudDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTMyMgoJLy8gaW5BbnlQb29sQ291bnQgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIGluQW55UG9vbENvdW50OiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzIzCgkvLyBmb3VuZCA9IGZhbHNlCglpbnQgMAoJZnJhbWVfYnVyeSAyIC8vIGZvdW5kOiBib29sCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTMyNQoJLy8gcG9vbFNldCA9IGNsb25lKHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlKQoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLnN0YWtlclBvb2xTZXQoc3Rha2VyKS52YWx1ZQoJYXNzZXJ0CglmcmFtZV9idXJ5IDMgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMjYKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikudmFsdWUubGVuZ3RoOyBpICs9IDEpCglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIGk6IHVpbnQ2NAoKKmZvcl84OgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTMyNgoJLy8gaSA8IHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlLmxlbmd0aAoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgNgoJPAoJYnogKmZvcl84X2VuZAoKCS8vICppZjM4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTMyNwoJLy8gcG9vbFNldFtpXS5pZCA9PT0gMAoJZnJhbWVfZGlnIDMgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDAKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaW50IDAKCT09CglieiAqaWYzOF9lbmQKCgkvLyAqaWYzOF9jb25zZXF1ZW50CgliICpmb3JfOF9jb250aW51ZQoKKmlmMzhfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTMzMAoJLy8gaW5BbnlQb29sQ291bnQgKz0gMQoJZnJhbWVfZGlnIDEgLy8gaW5BbnlQb29sQ291bnQ6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMSAvLyBpbkFueVBvb2xDb3VudDogdWludDY0CgoJLy8gKmlmMzlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzMxCgkvLyBwb29sU2V0W2ldLmlkID09PSBwb29sS2V5LmlkCglmcmFtZV9kaWcgMyAvLyBwb29sU2V0OiAodWludDY0LHVpbnQ2NCx1aW50NjQpWzZdCglmcmFtZV9kaWcgNCAvLyBpOiB1aW50NjQKCWludCAyNAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgMAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCT09CglieiAqaWYzOV9lbmQKCgkvLyAqaWYzOV9jb25zZXF1ZW50CgkvLyAqaWY0MF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMzIKCS8vIHBvb2xTZXRbaV0gPT09IHBvb2xLZXkKCWZyYW1lX2RpZyAzIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDY0LHVpbnQ2NClbNl0KCWZyYW1lX2RpZyA0IC8vIGk6IHVpbnQ2NAoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCAyNAoJZXh0cmFjdDMKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5Cgk9PQoJYnogKmlmNDBfZWxzZQoKCS8vICppZjQwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMzMKCS8vIGZvdW5kID0gdHJ1ZQoJaW50IDEKCWZyYW1lX2J1cnkgMiAvLyBmb3VuZDogYm9vbAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMzUKCS8vIHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlW2ldID0geyBpZDogMCwgcG9vbElkOiAwLCBwb29sQXBwSWQ6IDAgfQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoJYiAqaWY0MF9lbmQKCippZjQwX2Vsc2U6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzM3CgkvLyBpblNhbWVWYWxpZGF0b3JQb29sQ291bnQgKz0gMQoJZnJhbWVfZGlnIDAgLy8gaW5TYW1lVmFsaWRhdG9yUG9vbENvdW50OiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDAgLy8gaW5TYW1lVmFsaWRhdG9yUG9vbENvdW50OiB1aW50NjQKCippZjQwX2VuZDoKCippZjM5X2VuZDoKCipmb3JfOF9jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMjYKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSA0IC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzgKCipmb3JfOF9lbmQ6CgkvLyAqaWY0MV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzNDEKCS8vICFmb3VuZAoJZnJhbWVfZGlnIDIgLy8gZm91bmQ6IGJvb2wKCSEKCWJ6ICppZjQxX2VuZAoKCS8vICppZjQxX2NvbnNlcXVlbnQKCS8vIE5vIG1hdGNoaW5nIHNsb3QgZm91bmQgd2hlbiB0b2xkIHRvIHJlbW92ZSBhIHBvb2wgZnJvbSB0aGUgc3Rha2VycyBzZXQKCWVycgoKKmlmNDFfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM0NQoJLy8gcmV0dXJuIFtpblNhbWVWYWxpZGF0b3JQb29sQ291bnQgPT09IDAsIGluQW55UG9vbENvdW50ID09PSAwXQoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gaW5TYW1lVmFsaWRhdG9yUG9vbENvdW50OiB1aW50NjQKCWludCAwCgk9PQoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gaW5BbnlQb29sQ291bnQ6IHVpbnQ2NAoJaW50IDAKCT09CglzZXRiaXQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA0CglyZXRzdWIKCi8vIGFkZFBvb2xUb05vZGUodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgcG9vbEFwcElkOiB1aW50NjQsIG5vZGVOdW06IHVpbnQ2NCk6IHZvaWQKYWRkUG9vbFRvTm9kZToKCXByb3RvIDMgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzQ5CgkvLyBub2RlUG9vbEFzc2lnbm1lbnRzID0gY2xvbmUodGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5ub2RlUG9vbEFzc2lnbm1lbnRzKQoJaW50IDkwMCAvLyBoZWFkT2Zmc2V0CglpbnQgMTkyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJZnJhbWVfYnVyeSAwIC8vIG5vZGVQb29sQXNzaWdubWVudHM6ICgodWludDY0WzNdKVs4XSkKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzUwCgkvLyBtYXhQb29sc1Blck5vZGVGb3JUaGlzVmFsaWRhdG9yID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcucG9vbHNQZXJOb2RlIGFzIHVpbnQ2NAoJaW50IDIyNQoJaW50IDEKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDEgLy8gbWF4UG9vbHNQZXJOb2RlRm9yVGhpc1ZhbGlkYXRvcjogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM1MgoJLy8gYXNzZXJ0KG5vZGVOdW0gPj0gMSAmJiBub2RlTnVtIDw9IE1BWF9OT0RFUywgJ25vZGUgbnVtYmVyIG5vdCBpbiB2YWxpZCByYW5nZScpCglmcmFtZV9kaWcgLTMgLy8gbm9kZU51bTogdWludDY0CglpbnQgMQoJPj0KCWR1cAoJYnogKnNraXBfYW5kOQoJZnJhbWVfZGlnIC0zIC8vIG5vZGVOdW06IHVpbnQ2NAoJaW50IDgKCTw9CgkmJgoKKnNraXBfYW5kOToKCS8vIG5vZGUgbnVtYmVyIG5vdCBpbiB2YWxpZCByYW5nZQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM1NAoJLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhQb29sc1Blck5vZGVGb3JUaGlzVmFsaWRhdG9yOyBpICs9IDEpCglpbnQgMAoJZnJhbWVfYnVyeSAyIC8vIGk6IHVpbnQ2NAoKKmZvcl85OgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM1NAoJLy8gaSA8IG1heFBvb2xzUGVyTm9kZUZvclRoaXNWYWxpZGF0b3IKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJZnJhbWVfZGlnIDEgLy8gbWF4UG9vbHNQZXJOb2RlRm9yVGhpc1ZhbGlkYXRvcjogdWludDY0Cgk8CglieiAqZm9yXzlfZW5kCgoJLy8gKmlmNDJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzU1CgkvLyBub2RlUG9vbEFzc2lnbm1lbnRzLm5vZGVzW25vZGVOdW0gLSAxXS5wb29sQXBwSWRzW2ldID09PSAwCglmcmFtZV9kaWcgMCAvLyBub2RlUG9vbEFzc2lnbm1lbnRzOiAoKHVpbnQ2NFszXSlbOF0pCglpbnQgMAoJZnJhbWVfZGlnIC0zIC8vIG5vZGVOdW06IHVpbnQ2NAoJaW50IDEKCS0KCWludCAyNAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgMAoJKwoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWludCAwCgk9PQoJYnogKmlmNDJfZW5kCgoJLy8gKmlmNDJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM1NwoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5ub2RlUG9vbEFzc2lnbm1lbnRzLm5vZGVzW25vZGVOdW0gLSAxXS5wb29sQXBwSWRzW2ldID0gcG9vbEFwcElkCglpbnQgOTAwCglmcmFtZV9kaWcgLTMgLy8gbm9kZU51bTogdWludDY0CglpbnQgMQoJLQoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAwCgkrCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCA4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWZyYW1lX2RpZyAtMiAvLyBwb29sQXBwSWQ6IHVpbnQ2NAoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzU4CgkvLyByZXR1cm4KCXJldHN1YgoKKmlmNDJfZW5kOgoKKmZvcl85X2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM1NAoJLy8gaSArPSAxCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDIgLy8gaTogdWludDY0CgliICpmb3JfOQoKKmZvcl85X2VuZDoKCS8vIG5vIGF2YWlsYWJsZSBzcGFjZSBpbiBzcGVjaWZpZWQgbm9kZSBmb3IgdGhpcyBwb29sCgllcnIKCXJldHN1YgoKLy8gZG9lc1N0YWtlck1lZXRHYXRpbmcodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgdmFsdWVUb1ZlcmlmeTogdWludDY0KTogdm9pZAovLwovLyBDaGVja3MgaWYgYSBzdGFrZXIgbWVldHMgdGhlIGdhdGluZyByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoZSB2YWxpZGF0b3IuCi8vCi8vIEBwYXJhbSB7VmFsaWRhdG9ySWRUeXBlfSB2YWxpZGF0b3JJZCAtIFRoZSBpZCBvZiB0aGUgdmFsaWRhdG9yLgovLyBAcGFyYW0ge3VpbnQ2NH0gdmFsdWVUb1ZlcmlmeSAtIFRoZSB2YWx1ZSB0byB2ZXJpZnkgYWdhaW5zdCB0aGUgZ2F0aW5nIHJlcXVpcmVtZW50cy4KLy8gQHJldHVybnMge3ZvaWR9IG9yIGFzc2VydHMgaWYgcmVxdWlyZW1lbnRzIG5vdCBtZXQuCmRvZXNTdGFrZXJNZWV0R2F0aW5nOgoJcHJvdG8gMiAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzNzIKCS8vIHR5cGUgPSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5lbnRyeUdhdGluZ1R5cGUKCWludCA4MAoJaW50IDEKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDAgLy8gdHlwZTogdWludDgKCgkvLyAqaWY0M19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzNzMKCS8vIHR5cGUgPT09IEdBVElOR19UWVBFX05PTkUKCWZyYW1lX2RpZyAwIC8vIHR5cGU6IHVpbnQ4CglpbnQgMAoJPT0KCWJ6ICppZjQzX2VuZAoKCS8vICppZjQzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzNzQKCS8vIHJldHVybgoJcmV0c3ViCgoqaWY0M19lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzc2CgkvLyBzdGFrZXIgPSB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWZyYW1lX2J1cnkgMSAvLyBzdGFrZXI6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzc3CgkvLyBjb25maWcgPSBjbG9uZSh0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZykKCWludCAwCglpbnQgMjQyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJZnJhbWVfYnVyeSAyIC8vIGNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCgoJLy8gKmlmNDRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzgxCgkvLyB0eXBlID09PSBHQVRJTkdfVFlQRV9BU1NFVFNfQ1JFQVRFRF9CWSB8fAoJLy8gICAgICAgICAgICAgdHlwZSA9PT0gR0FUSU5HX1RZUEVfQVNTRVRfSUQgfHwKCS8vICAgICAgICAgICAgIHR5cGUgPT09IEdBVElOR19UWVBFX0NSRUFURURfQllfTkZEX0FERFJFU1NFUwoJZnJhbWVfZGlnIDAgLy8gdHlwZTogdWludDgKCWludCAxCgk9PQoJZHVwCglibnogKnNraXBfb3I0CglmcmFtZV9kaWcgMCAvLyB0eXBlOiB1aW50OAoJaW50IDIKCT09Cgl8fAoKKnNraXBfb3I0OgoJZHVwCglibnogKnNraXBfb3I1CglmcmFtZV9kaWcgMCAvLyB0eXBlOiB1aW50OAoJaW50IDMKCT09Cgl8fAoKKnNraXBfb3I1OgoJYnogKmlmNDRfZW5kCgoJLy8gKmlmNDRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM4NQoJLy8gYXNzZXJ0KHZhbHVlVG9WZXJpZnkgIT09IDApCglmcmFtZV9kaWcgLTIgLy8gdmFsdWVUb1ZlcmlmeTogdWludDY0CglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzODYKCS8vIGJhbFJlcXVpcmVkID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcuZ2F0aW5nQXNzZXRNaW5CYWxhbmNlCglpbnQgMTQ1CglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMyAvLyBiYWxSZXF1aXJlZDogdWludDY0CgoJLy8gKmlmNDVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzg3CgkvLyBiYWxSZXF1aXJlZCA9PT0gMAoJZnJhbWVfZGlnIDMgLy8gYmFsUmVxdWlyZWQ6IHVpbnQ2NAoJaW50IDAKCT09CglieiAqaWY0NV9lbmQKCgkvLyAqaWY0NV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzg4CgkvLyBiYWxSZXF1aXJlZCA9IDEKCWludCAxCglmcmFtZV9idXJ5IDMgLy8gYmFsUmVxdWlyZWQ6IHVpbnQ2NAoKKmlmNDVfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM5MAoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgICAgIHN0YWtlci5hc3NldEJhbGFuY2UoQXNzZXRJRC5mcm9tVWludDY0KHZhbHVlVG9WZXJpZnkpKSA+PSBiYWxSZXF1aXJlZCwKCS8vICAgICAgICAgICAgICAgICAnbXVzdCBoYXZlIHJlcXVpcmVkIG1pbmltdW0gYmFsYW5jZSBvZiB2YWxpZGF0b3IgZGVmaW5lZCB0b2tlbiB0byBhZGQgc3Rha2UnLAoJLy8gICAgICAgICAgICAgKQoJZnJhbWVfZGlnIDEgLy8gc3Rha2VyOiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gdmFsdWVUb1ZlcmlmeTogdWludDY0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYmFsUmVxdWlyZWQ6IHVpbnQ2NAoJPj0KCgkvLyBtdXN0IGhhdmUgcmVxdWlyZWQgbWluaW11bSBiYWxhbmNlIG9mIHZhbGlkYXRvciBkZWZpbmVkIHRva2VuIHRvIGFkZCBzdGFrZQoJYXNzZXJ0CgoqaWY0NF9lbmQ6CgkvLyAqaWY0Nl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzOTUKCS8vIHR5cGUgPT09IEdBVElOR19UWVBFX0FTU0VUU19DUkVBVEVEX0JZCglmcmFtZV9kaWcgMCAvLyB0eXBlOiB1aW50OAoJaW50IDEKCT09CglieiAqaWY0Nl9lbmQKCgkvLyAqaWY0Nl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzk2CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICAgICAgQXNzZXRJRC5mcm9tVWludDY0KHZhbHVlVG9WZXJpZnkpLmNyZWF0b3IgPT09IGNvbmZpZy5lbnRyeUdhdGluZ0FkZHJlc3MsCgkvLyAgICAgICAgICAgICAgICAgJ3NwZWNpZmllZCBhc3NldCBtdXN0IGJlIGNyZWF0ZWQgYnkgY3JlYXRvciB0aGF0IHRoZSB2YWxpZGF0b3IgZGVmaW5lZCBhcyBhIHJlcXVpcmVtZW50IHRvIHN0YWtlJywKCS8vICAgICAgICAgICAgICkKCWZyYW1lX2RpZyAtMiAvLyB2YWx1ZVRvVmVyaWZ5OiB1aW50NjQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWZyYW1lX2RpZyAyIC8vIGNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDgxIDMyCgk9PQoKCS8vIHNwZWNpZmllZCBhc3NldCBtdXN0IGJlIGNyZWF0ZWQgYnkgY3JlYXRvciB0aGF0IHRoZSB2YWxpZGF0b3IgZGVmaW5lZCBhcyBhIHJlcXVpcmVtZW50IHRvIHN0YWtlCglhc3NlcnQKCippZjQ2X2VuZDoKCS8vICppZjQ3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQwMQoJLy8gdHlwZSA9PT0gR0FUSU5HX1RZUEVfQVNTRVRfSUQKCWZyYW1lX2RpZyAwIC8vIHR5cGU6IHVpbnQ4CglpbnQgMgoJPT0KCWJ6ICppZjQ3X2VuZAoKCS8vICppZjQ3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0MDIKCS8vIGFzc2VydCh2YWx1ZVRvVmVyaWZ5ICE9PSAwKQoJZnJhbWVfZGlnIC0yIC8vIHZhbHVlVG9WZXJpZnk6IHVpbnQ2NAoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDAzCgkvLyBmb3VuZCA9IGZhbHNlCglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIGZvdW5kOiBib29sCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQwNAoJLy8gY29uZmlnLmVudHJ5R2F0aW5nQXNzZXRzCglmcmFtZV9kaWcgMiAvLyBjb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxMTMgMzIKCWR1cAoJZnJhbWVfYnVyeSA1IC8vIGNvcHkgb2YgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZXh0cmFjdCAwIDgKCWJ0b2kKCWZyYW1lX2J1cnkgNiAvLyBhc3NldElkOiB1aW50NjQKCWludCAwCglmcmFtZV9idXJ5IDcgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCipmb3JPZl8wOgoJLy8gKmlmNDhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDA1CgkvLyB2YWx1ZVRvVmVyaWZ5ID09PSBhc3NldElkCglmcmFtZV9kaWcgLTIgLy8gdmFsdWVUb1ZlcmlmeTogdWludDY0CglmcmFtZV9kaWcgNiAvLyBhc3NldElkOiB1aW50NjQKCT09CglieiAqaWY0OF9lbmQKCgkvLyAqaWY0OF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDA2CgkvLyBmb3VuZCA9IHRydWUKCWludCAxCglmcmFtZV9idXJ5IDQgLy8gZm91bmQ6IGJvb2wKCWIgKmZvck9mXzBfZW5kCgoqaWY0OF9lbmQ6CgoqZm9yT2ZfMF9jb250aW51ZToKCS8vIGluY3JlbWVudCBvZmZzZXQgYW5kIGxvb3AgaWYgbm90IG91dCBvZiBib3VuZHMKCWZyYW1lX2RpZyA3IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnQgOAoJKwoJZHVwCglpbnQgMzIgLy8gb2Zmc2V0IG9mIGxhc3QgZWxlbWVudAoJPAoJYnogKmZvck9mXzBfZW5kCglmcmFtZV9idXJ5IDcgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWZyYW1lX2RpZyA1IC8vIGNvcHkgb2YgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZnJhbWVfZGlnIDcgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludCA4CglleHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDYgLy8gYXNzZXRJZDogdWludDY0CgliICpmb3JPZl8wCgoqZm9yT2ZfMF9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDEwCgkvLyBhc3NlcnQoZm91bmQsICdzcGVjaWZpZWQgYXNzZXQgbXVzdCBiZSBpZGVudGljYWwgdG8gdGhlIGFzc2V0IGlkIGRlZmluZWQgYXMgYSByZXF1aXJlbWVudCB0byBzdGFrZScpCglmcmFtZV9kaWcgNCAvLyBmb3VuZDogYm9vbAoKCS8vIHNwZWNpZmllZCBhc3NldCBtdXN0IGJlIGlkZW50aWNhbCB0byB0aGUgYXNzZXQgaWQgZGVmaW5lZCBhcyBhIHJlcXVpcmVtZW50IHRvIHN0YWtlCglhc3NlcnQKCippZjQ3X2VuZDoKCS8vICppZjQ5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQxMgoJLy8gdHlwZSA9PT0gR0FUSU5HX1RZUEVfQ1JFQVRFRF9CWV9ORkRfQUREUkVTU0VTCglmcmFtZV9kaWcgMCAvLyB0eXBlOiB1aW50OAoJaW50IDMKCT09CglieiAqaWY0OV9lbmQKCgkvLyAqaWY0OV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDE1CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICAgICAgdGhpcy5pc0FkZHJlc3NJbk5GRENBQWxnb0xpc3QoY29uZmlnLmVudHJ5R2F0aW5nQXNzZXRzWzBdLCBBc3NldElELmZyb21VaW50NjQodmFsdWVUb1ZlcmlmeSkuY3JlYXRvciksCgkvLyAgICAgICAgICAgICAgICAgJ3NwZWNpZmllZCBhc3NldCBtdXN0IGJlIGNyZWF0ZWQgYnkgY3JlYXRvciB0aGF0IGlzIG9uZSBvZiB0aGUgbGlua2VkIGFkZHJlc3NlcyBpbiBhbiBuZmQnLAoJLy8gICAgICAgICAgICAgKQoJZnJhbWVfZGlnIC0yIC8vIHZhbHVlVG9WZXJpZnk6IHVpbnQ2NAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJZnJhbWVfZGlnIDIgLy8gY29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMTEzIDgKCWJ0b2kKCWNhbGxzdWIgaXNBZGRyZXNzSW5ORkRDQUFsZ29MaXN0CgoJLy8gc3BlY2lmaWVkIGFzc2V0IG11c3QgYmUgY3JlYXRlZCBieSBjcmVhdG9yIHRoYXQgaXMgb25lIG9mIHRoZSBsaW5rZWQgYWRkcmVzc2VzIGluIGFuIG5mZAoJYXNzZXJ0CgoqaWY0OV9lbmQ6CgkvLyAqaWY1MF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0MjAKCS8vIHR5cGUgPT09IEdBVElOR19UWVBFX1NFR01FTlRfT0ZfTkZECglmcmFtZV9kaWcgMCAvLyB0eXBlOiB1aW50OAoJaW50IDQKCT09CglieiAqaWY1MF9lbmQKCgkvLyAqaWY1MF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDIyCgkvLyB1c2VyT2ZmZXJlZE5GREFwcElEID0gdmFsdWVUb1ZlcmlmeQoJZnJhbWVfZGlnIC0yIC8vIHZhbHVlVG9WZXJpZnk6IHVpbnQ2NAoJZnJhbWVfYnVyeSA4IC8vIHVzZXJPZmZlcmVkTkZEQXBwSUQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0MjMKCS8vIGFzc2VydCh0aGlzLmlzTkZEQXBwSURWYWxpZCh1c2VyT2ZmZXJlZE5GREFwcElEKSwgJ3Byb3ZpZGVkIE5GRCBtdXN0IGJlIHZhbGlkJykKCWZyYW1lX2RpZyA4IC8vIHVzZXJPZmZlcmVkTkZEQXBwSUQ6IHVpbnQ2NAoJY2FsbHN1YiBpc05GREFwcElEVmFsaWQKCgkvLyBwcm92aWRlZCBORkQgbXVzdCBiZSB2YWxpZAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQyNgoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgICAgIHJhd0J5dGVzKEFwcElELmZyb21VaW50NjQodXNlck9mZmVyZWRORkRBcHBJRCkuZ2xvYmFsU3RhdGUoJ2kub3duZXIuYScpIGFzIEFkZHJlc3MpID09PQoJLy8gICAgICAgICAgICAgICAgICAgICByYXdCeXRlcyhzdGFrZXIpIHx8IHRoaXMuaXNBZGRyZXNzSW5ORkRDQUFsZ29MaXN0KHVzZXJPZmZlcmVkTkZEQXBwSUQsIHN0YWtlciksCgkvLyAgICAgICAgICAgICAgICAgInByb3ZpZGVkIG5mZCBmb3IgZW50cnkgaXNuJ3Qgb3duZWQgb3IgbGlua2VkIHRvIHRoZSBzdGFrZXIiLAoJLy8gICAgICAgICAgICAgKQoJZnJhbWVfZGlnIDggLy8gdXNlck9mZmVyZWRORkRBcHBJRDogdWludDY0CglieXRlIDB4NjkyZTZmNzc2ZTY1NzIyZTYxIC8vICJpLm93bmVyLmEiCglhcHBfZ2xvYmFsX2dldF9leAoKCS8vIGdsb2JhbCBzdGF0ZSB2YWx1ZSBkb2VzIG5vdCBleGlzdDogQXBwSUQuZnJvbVVpbnQ2NCh1c2VyT2ZmZXJlZE5GREFwcElEKS5nbG9iYWxTdGF0ZSgnaS5vd25lci5hJykKCWFzc2VydAoJZnJhbWVfZGlnIDEgLy8gc3Rha2VyOiBhZGRyZXNzCgk9PQoJZHVwCglibnogKnNraXBfb3I2CglmcmFtZV9kaWcgMSAvLyBzdGFrZXI6IGFkZHJlc3MKCWZyYW1lX2RpZyA4IC8vIHVzZXJPZmZlcmVkTkZEQXBwSUQ6IHVpbnQ2NAoJY2FsbHN1YiBpc0FkZHJlc3NJbk5GRENBQWxnb0xpc3QKCXx8Cgoqc2tpcF9vcjY6CgkvLyBwcm92aWRlZCBuZmQgZm9yIGVudHJ5IGlzbid0IG93bmVkIG9yIGxpbmtlZCB0byB0aGUgc3Rha2VyCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDMzCgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICAgICAgYnRvaShBcHBJRC5mcm9tVWludDY0KHVzZXJPZmZlcmVkTkZEQXBwSUQpLmdsb2JhbFN0YXRlKCdpLnBhcmVudEFwcElEJykgYXMgYnl0ZXMpID09PQoJLy8gICAgICAgICAgICAgICAgICAgICBjb25maWcuZW50cnlHYXRpbmdBc3NldHNbMF0sCgkvLyAgICAgICAgICAgICAgICAgJ3NwZWNpZmllZCBuZmQgbXVzdCBiZSBhIHNlZ21lbnQgb2YgdGhlIG5mZCB0aGUgdmFsaWRhdG9yIHNwZWNpZmllZCBhcyBhIHJlcXVpcmVtZW50JywKCS8vICAgICAgICAgICAgICkKCWZyYW1lX2RpZyA4IC8vIHVzZXJPZmZlcmVkTkZEQXBwSUQ6IHVpbnQ2NAoJYnl0ZSAweDY5MmU3MDYxNzI2NTZlNzQ0MTcwNzA0OTQ0IC8vICJpLnBhcmVudEFwcElEIgoJYXBwX2dsb2JhbF9nZXRfZXgKCgkvLyBnbG9iYWwgc3RhdGUgdmFsdWUgZG9lcyBub3QgZXhpc3Q6IEFwcElELmZyb21VaW50NjQodXNlck9mZmVyZWRORkRBcHBJRCkuZ2xvYmFsU3RhdGUoJ2kucGFyZW50QXBwSUQnKQoJYXNzZXJ0CglidG9pCglmcmFtZV9kaWcgMiAvLyBjb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxMTMgOAoJYnRvaQoJPT0KCgkvLyBzcGVjaWZpZWQgbmZkIG11c3QgYmUgYSBzZWdtZW50IG9mIHRoZSBuZmQgdGhlIHZhbGlkYXRvciBzcGVjaWZpZWQgYXMgYSByZXF1aXJlbWVudAoJYXNzZXJ0CgoqaWY1MF9lbmQ6CglyZXRzdWIKCi8vIGlzTkZEQXBwSURWYWxpZChuZmRBcHBJRDogdWludDY0KTogYm9vbGVhbgovLwovLyBDaGVja3MgaWYgdGhlIGdpdmVuIE5GRCBBcHAgaWQgaXMgdmFsaWQuICBVc2luZyBvbmx5IHRoZSBBcHAgaWQgdGhlcmUncyBubyB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIG5hbWUgKGllOiB0aGF0IG5mZCBYIGlzIG5hbWUgWSkKLy8gU28gaXQncyBhc3N1bWVkIGZvciB0aGUgY2FsbGVyLCB0aGUgYXBwIGlkIGFsb25lIGlzIGZpbmUuICBUaGUgbmFtZSBpcyBmZXRjaGVkIGZyb20gdGhlIHNwZWNpZmllZCBhcHAgaWQgYW5kIHRoZSB0d28KLy8gdG9nZXRoZXIgYXJlIHVzZWQgZm9yIHZhbGlkaXR5IGNoZWNrIGNhbGwgdG8gdGhlIG5mZCByZWdpc3RyeS4KLy8KLy8gQHBhcmFtIHt1aW50NjR9IG5mZEFwcElEIC0gVGhlIE5GRCBBcHAgaWQgdG8gdmVyaWZ5LgovLwovLyBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIE5GRCBBcHAgaWQgaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZS4KaXNORkRBcHBJRFZhbGlkOgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDUyCgkvLyB1c2VyT2ZmZXJlZE5GRE5hbWUgPSBBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKS5nbG9iYWxTdGF0ZSgnaS5uYW1lJykgYXMgc3RyaW5nCglmcmFtZV9kaWcgLTEgLy8gbmZkQXBwSUQ6IHVpbnQ2NAoJYnl0ZSAweDY5MmU2ZTYxNmQ2NSAvLyAiaS5uYW1lIgoJYXBwX2dsb2JhbF9nZXRfZXgKCgkvLyBnbG9iYWwgc3RhdGUgdmFsdWUgZG9lcyBub3QgZXhpc3Q6IEFwcElELmZyb21VaW50NjQobmZkQXBwSUQpLmdsb2JhbFN0YXRlKCdpLm5hbWUnKQoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gdXNlck9mZmVyZWRORkROYW1lOiBzdHJpbmcKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDU0CgkvLyBzZW5kQXBwQ2FsbCh7CgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHRoaXMubmZkUmVnaXN0cnlBcHBJZCksCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbkFyZ3M6IFsnaXNfdmFsaWRfbmZkX2FwcGlkJywgdXNlck9mZmVyZWRORkROYW1lLCBpdG9iKG5mZEFwcElEKV0sCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbnM6IFtBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKV0sCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NTUKCS8vIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQodGhpcy5uZmRSZWdpc3RyeUFwcElkKQoJcHVzaGludCBUTVBMX25mZFJlZ2lzdHJ5QXBwSWQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NTYKCS8vIGFwcGxpY2F0aW9uQXJnczogWydpc192YWxpZF9uZmRfYXBwaWQnLCB1c2VyT2ZmZXJlZE5GRE5hbWUsIGl0b2IobmZkQXBwSUQpXQoJYnl0ZSAweDY5NzM1Zjc2NjE2YzY5NjQ1ZjZlNjY2NDVmNjE3MDcwNjk2NCAvLyAiaXNfdmFsaWRfbmZkX2FwcGlkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAwIC8vIHVzZXJPZmZlcmVkTkZETmFtZTogc3RyaW5nCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIC0xIC8vIG5mZEFwcElEOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ1NwoJLy8gYXBwbGljYXRpb25zOiBbQXBwSUQuZnJvbVVpbnQ2NChuZmRBcHBJRCldCglmcmFtZV9kaWcgLTEgLy8gbmZkQXBwSUQ6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ1OQoJLy8gcmV0dXJuIGJ0b2kodGhpcy5pdHhuLmxhc3RMb2cpID09PSAxCglpdHhuIExhc3RMb2cKCWJ0b2kKCWludCAxCgk9PQoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBpc0FkZHJlc3NJbk5GRENBQWxnb0xpc3QobmZkQXBwSUQ6IHVpbnQ2NCwgYWRkclRvRmluZDogQWRkcmVzcyk6IGJvb2xlYW4KLy8KLy8gQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBpcyBwcmVzZW50IGluIGFuIE5GRHMgbGlzdCBvZiB2ZXJpZmllZCBhZGRyZXNzZXMuCi8vIFRoZSBORkQgaXMgYXNzdW1lZCB0byBoYXZlIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXMgb2ZmaWNpYWwuCi8vCi8vIEBwYXJhbSB7dWludDY0fSBuZmRBcHBJRCAtIFRoZSBORkQgYXBwbGljYXRpb24gaWQuCi8vIEBwYXJhbSB7QWRkcmVzc30gYWRkclRvRmluZCAtIFRoZSBhZGRyZXNzIHRvIGZpbmQgaW4gdGhlIHYuY2FBbGdvLjAuYXMgcHJvcGVydHkKLy8gQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgdGhlIGFkZHJlc3MgaXMgcHJlc2VudCwgYGZhbHNlYCBvdGhlcndpc2UuCmlzQWRkcmVzc0luTkZEQ0FBbGdvTGlzdDoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDcxCgkvLyBzZW5kQXBwQ2FsbCh7CgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKSwKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uQXJnczogWydyZWFkX3Byb3BlcnR5JywgJ3YuY2FBbGdvLjAuYXMnXSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ3MgoJLy8gYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NChuZmRBcHBJRCkKCWZyYW1lX2RpZyAtMSAvLyBuZmRBcHBJRDogdWludDY0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDczCgkvLyBhcHBsaWNhdGlvbkFyZ3M6IFsncmVhZF9wcm9wZXJ0eScsICd2LmNhQWxnby4wLmFzJ10KCWJ5dGUgMHg3MjY1NjE2NDVmNzA3MjZmNzA2NTcyNzQ3OSAvLyAicmVhZF9wcm9wZXJ0eSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglieXRlIDB4NzYyZTYzNjE0MTZjNjc2ZjJlMzAyZTYxNzMgLy8gInYuY2FBbGdvLjAuYXMiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDc1CgkvLyBjYUFsZ29EYXRhID0gdGhpcy5pdHhuLmxhc3RMb2cKCWl0eG4gTGFzdExvZwoJZnJhbWVfYnVyeSAwIC8vIGNhQWxnb0RhdGE6IGJ5dGVbXQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NzYKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgY2FBbGdvRGF0YS5sZW5ndGg7IGkgKz0gMzIpCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIGk6IHVpbnQ2NAoKKmZvcl8xMDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NzYKCS8vIGkgPCBjYUFsZ29EYXRhLmxlbmd0aAoJZnJhbWVfZGlnIDEgLy8gaTogdWludDY0CglmcmFtZV9kaWcgMCAvLyBjYUFsZ29EYXRhOiBieXRlW10KCWxlbgoJPAoJYnogKmZvcl8xMF9lbmQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDc3CgkvLyBhZGRyID0gZXh0cmFjdDMoY2FBbGdvRGF0YSwgaSwgMzIpCglmcmFtZV9kaWcgMCAvLyBjYUFsZ29EYXRhOiBieXRlW10KCWZyYW1lX2RpZyAxIC8vIGk6IHVpbnQ2NAoJaW50IDMyCglleHRyYWN0MwoJZnJhbWVfYnVyeSAyIC8vIGFkZHI6IGJ5dGVbXQoKCS8vICppZjUxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ3OAoJLy8gYWRkciAhPT0gcmF3Qnl0ZXMoZ2xvYmFscy56ZXJvQWRkcmVzcykgJiYgYWRkciA9PT0gcmF3Qnl0ZXMoYWRkclRvRmluZCkKCWZyYW1lX2RpZyAyIC8vIGFkZHI6IGJ5dGVbXQoJZ2xvYmFsIFplcm9BZGRyZXNzCgkhPQoJZHVwCglieiAqc2tpcF9hbmQxMAoJZnJhbWVfZGlnIDIgLy8gYWRkcjogYnl0ZVtdCglmcmFtZV9kaWcgLTIgLy8gYWRkclRvRmluZDogQWRkcmVzcwoJPT0KCSYmCgoqc2tpcF9hbmQxMDoKCWJ6ICppZjUxX2VuZAoKCS8vICppZjUxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NzkKCS8vIHJldHVybiB0cnVlCglpbnQgMQoJYiAqaXNBZGRyZXNzSW5ORkRDQUFsZ29MaXN0KnJldHVybgoKKmlmNTFfZW5kOgoKKmZvcl8xMF9jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NzYKCS8vIGkgKz0gMzIKCWZyYW1lX2RpZyAxIC8vIGk6IHVpbnQ2NAoJaW50IDMyCgkrCglmcmFtZV9idXJ5IDEgLy8gaTogdWludDY0CgliICpmb3JfMTAKCipmb3JfMTBfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ4MgoJLy8gcmV0dXJuIGZhbHNlCglpbnQgMAoKKmlzQWRkcmVzc0luTkZEQ0FBbGdvTGlzdCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFsZ29TYXR1cmF0aW9uTGV2ZWwoKTogdWludDY0Ci8vCi8vIFJldHVybnMgdGhlIG1heGltdW0gYWxsb3dlZCBzdGFrZSBwZXIgdmFsaWRhdG9yIGJhc2VkIG9uIGEgcGVyY2VudGFnZSBvZiBhbGwgY3VycmVudCBvbmxpbmUgc3Rha2UgYmVmb3JlCi8vIHRoZSB2YWxpZGF0b3IgaXMgY29uc2lkZXJlZCBzYXR1cmF0ZWQgLSB3aGVyZSByZXdhcmRzIGFyZSBkaW1pbmlzaGVkLgovLyBOT1RFOiB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgdHdpY2UgLSBoZXJlIGFuZCBpbiBzdGFraW5nIHBvb2wgY29udHJhY3QuICBCb3RoIG11c3QgYmUgaWRlbnRpY2FsLgphbGdvU2F0dXJhdGlvbkxldmVsOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDkxCgkvLyBvbmxpbmUgPSB0aGlzLmdldEN1cnJlbnRPbmxpbmVTdGFrZSgpCgljYWxsc3ViIGdldEN1cnJlbnRPbmxpbmVTdGFrZQoJZnJhbWVfYnVyeSAwIC8vIG9ubGluZTogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ5MwoJLy8gcmV0dXJuIHdpZGVSYXRpbyhbb25saW5lLCBNQVhfVkFMSURBVE9SX1NPRlRfUENUX09GX09OTElORV8xREVDSU1BTF0sIFsxMDAwXSkKCWZyYW1lX2RpZyAwIC8vIG9ubGluZTogdWludDY0CglpbnQgMTAwCgltdWx3CglpbnQgMAoJaW50IDEwMDAKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIG1heEFsbG93ZWRTdGFrZSgpOiB1aW50NjQKLy8KLy8gUmV0dXJucyB0aGUgTUFYSU1VTSBhbGxvd2VkIHN0YWtlIHBlciB2YWxpZGF0b3IgYmFzZWQgb24gYSBwZXJjZW50YWdlIG9mIGFsbCBjdXJyZW50IG9ubGluZSBzdGFrZS4KLy8gQWRkaW5nIHN0YWtlIGlzIGNvbXBsZXRlbHkgYmxvY2tlZCBhdCB0aGlzIGFtb3VudC4KbWF4QWxsb3dlZFN0YWtlOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTAxCgkvLyBvbmxpbmUgPSB0aGlzLmdldEN1cnJlbnRPbmxpbmVTdGFrZSgpCgljYWxsc3ViIGdldEN1cnJlbnRPbmxpbmVTdGFrZQoJZnJhbWVfYnVyeSAwIC8vIG9ubGluZTogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTUwMwoJLy8gcmV0dXJuIHdpZGVSYXRpbyhbb25saW5lLCBNQVhfVkFMSURBVE9SX0hBUkRfUENUX09GX09OTElORV8xREVDSU1BTF0sIFsxMDAwXSkKCWZyYW1lX2RpZyAwIC8vIG9ubGluZTogdWludDY0CglpbnQgMTUwCgltdWx3CglpbnQgMAoJaW50IDEwMDAKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIG1heEFsZ29BbGxvd2VkUGVyUG9vbCgpOiB1aW50NjQKLy8KLy8gUmV0dXJucyB0aGUgTUFYSU1VTSBhbGxvd2VkIHN0YWtlIHBlciBwb29sIGFuZCBzdGlsbCByZWNlaXZlIGluY2VudGl2ZXMgLSB3ZSdsbCB0cmVhdCB0aGlzIGFzIHRoZSAnbWF4IHBlciBwb29sJwptYXhBbGdvQWxsb3dlZFBlclBvb2w6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTEyCgkvLyByZXR1cm4gNzBfMDAwXzAwMF8wMDBfMDAwCglpbnQgNzBfMDAwXzAwMF8wMDBfMDAwCglyZXRzdWIKCi8vIGdldEN1cnJlbnRPbmxpbmVTdGFrZSgpOiB1aW50NjQKZ2V0Q3VycmVudE9ubGluZVN0YWtlOgoJcHJvdG8gMCAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTUxOAoJLy8gcmV0dXJuIDJfMDAwXzAwMF8wMDBfMDAwXzAwMAoJaW50IDJfMDAwXzAwMF8wMDBfMDAwXzAwMAoJcmV0c3ViCgovLyBtaW5CYWxhbmNlRm9yQWNjb3VudChjb250cmFjdHM6IHVpbnQ2NCwgZXh0cmFQYWdlczogdWludDY0LCBhc3NldHM6IHVpbnQ2NCwgbG9jYWxJbnRzOiB1aW50NjQsIGxvY2FsQnl0ZXM6IHVpbnQ2NCwgZ2xvYmFsSW50czogdWludDY0LCBnbG9iYWxCeXRlczogdWludDY0KTogdWludDY0Cm1pbkJhbGFuY2VGb3JBY2NvdW50OgoJcHJvdG8gNyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTMwCgkvLyBtaW5CYWwgPSBBTEdPUkFORF9BQ0NPVU5UX01JTl9CQUxBTkNFCglpbnQgMTAwMDAwCglmcmFtZV9idXJ5IDAgLy8gbWluQmFsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTMxCgkvLyBtaW5CYWwgKz0gY29udHJhY3RzICogQVBQTElDQVRJT05fQkFTRV9GRUUKCWZyYW1lX2RpZyAwIC8vIG1pbkJhbDogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gY29udHJhY3RzOiB1aW50NjQKCWludCAxMDAwMDAKCSoKCSsKCWZyYW1lX2J1cnkgMCAvLyBtaW5CYWw6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE1MzIKCS8vIG1pbkJhbCArPSBleHRyYVBhZ2VzICogQVBQTElDQVRJT05fQkFTRV9GRUUKCWZyYW1lX2RpZyAwIC8vIG1pbkJhbDogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gZXh0cmFQYWdlczogdWludDY0CglpbnQgMTAwMDAwCgkqCgkrCglmcmFtZV9idXJ5IDAgLy8gbWluQmFsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTMzCgkvLyBtaW5CYWwgKz0gYXNzZXRzICogQVNTRVRfSE9MRElOR19GRUUKCWZyYW1lX2RpZyAwIC8vIG1pbkJhbDogdWludDY0CglmcmFtZV9kaWcgLTMgLy8gYXNzZXRzOiB1aW50NjQKCWludCAxMDAwMDAKCSoKCSsKCWZyYW1lX2J1cnkgMCAvLyBtaW5CYWw6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE1MzQKCS8vIG1pbkJhbCArPSBsb2NhbEludHMgKiBTU0NfVkFMVUVfVUlOVAoJZnJhbWVfZGlnIDAgLy8gbWluQmFsOiB1aW50NjQKCWZyYW1lX2RpZyAtNCAvLyBsb2NhbEludHM6IHVpbnQ2NAoJaW50IDI4NTAwCgkqCgkrCglmcmFtZV9idXJ5IDAgLy8gbWluQmFsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTM1CgkvLyBtaW5CYWwgKz0gZ2xvYmFsSW50cyAqIFNTQ19WQUxVRV9VSU5UCglmcmFtZV9kaWcgMCAvLyBtaW5CYWw6IHVpbnQ2NAoJZnJhbWVfZGlnIC02IC8vIGdsb2JhbEludHM6IHVpbnQ2NAoJaW50IDI4NTAwCgkqCgkrCglmcmFtZV9idXJ5IDAgLy8gbWluQmFsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTM2CgkvLyBtaW5CYWwgKz0gbG9jYWxCeXRlcyAqIFNTQ19WQUxVRV9CWVRFUwoJZnJhbWVfZGlnIDAgLy8gbWluQmFsOiB1aW50NjQKCWZyYW1lX2RpZyAtNSAvLyBsb2NhbEJ5dGVzOiB1aW50NjQKCWludCA1MDAwMAoJKgoJKwoJZnJhbWVfYnVyeSAwIC8vIG1pbkJhbDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTUzNwoJLy8gbWluQmFsICs9IGdsb2JhbEJ5dGVzICogU1NDX1ZBTFVFX0JZVEVTCglmcmFtZV9kaWcgMCAvLyBtaW5CYWw6IHVpbnQ2NAoJZnJhbWVfZGlnIC03IC8vIGdsb2JhbEJ5dGVzOiB1aW50NjQKCWludCA1MDAwMAoJKgoJKwoJZnJhbWVfYnVyeSAwIC8vIG1pbkJhbDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTUzOAoJLy8gcmV0dXJuIG1pbkJhbAoJZnJhbWVfZGlnIDAgLy8gbWluQmFsOiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gY29zdEZvckJveFN0b3JhZ2UodG90YWxOdW1CeXRlczogdWludDY0KTogdWludDY0CmNvc3RGb3JCb3hTdG9yYWdlOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTU0NQoJLy8gcmV0dXJuIFNDQk9YX1BFUkJPWCArIHRvdGFsTnVtQnl0ZXMgKiBTQ0JPWF9QRVJCWVRFCglpbnQgMjUwMAoJZnJhbWVfZGlnIC0xIC8vIHRvdGFsTnVtQnl0ZXM6IHVpbnQ2NAoJaW50IDQwMAoJKgoJKwoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJpbml0U3Rha2luZ0NvbnRyYWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJsb2FkU3Rha2luZ0NvbnRyYWN0RGF0YSh1aW50NjQsYnl0ZVtdKXZvaWQiCgltZXRob2QgImZpbmFsaXplU3Rha2luZ0NvbnRyYWN0KCl2b2lkIgoJbWV0aG9kICJnYXMoKXZvaWQiCgltZXRob2QgImdldE1ickFtb3VudHMoKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgoJbWV0aG9kICJnZXRQcm90b2NvbENvbnN0cmFpbnRzKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImdldE51bVZhbGlkYXRvcnMoKXVpbnQ2NCIKCW1ldGhvZCAiZ2V0VmFsaWRhdG9yQ29uZmlnKHVpbnQ2NCkodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImdldFZhbGlkYXRvclN0YXRlKHVpbnQ2NCkodWludDE2LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiZ2V0VmFsaWRhdG9yT3duZXJBbmRNYW5hZ2VyKHVpbnQ2NCkoYWRkcmVzcyxhZGRyZXNzKSIKCW1ldGhvZCAiZ2V0UG9vbHModWludDY0KSh1aW50NjQsdWludDE2LHVpbnQ2NClbXSIKCW1ldGhvZCAiZ2V0UG9vbEFwcElkKHVpbnQ2NCx1aW50NjQpdWludDY0IgoJbWV0aG9kICJnZXRQb29sSW5mbygodWludDY0LHVpbnQ2NCx1aW50NjQpKSh1aW50NjQsdWludDE2LHVpbnQ2NCkiCgltZXRob2QgImdldEN1ck1heFN0YWtlUGVyUG9vbCh1aW50NjQpdWludDY0IgoJbWV0aG9kICJkb2VzU3Rha2VyTmVlZFRvUGF5TUJSKGFkZHJlc3MpYm9vbCIKCW1ldGhvZCAiZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50KGFkZHJlc3MpKHVpbnQ2NCx1aW50NjQsdWludDY0KVtdIgoJbWV0aG9kICJnZXRUb2tlblBheW91dFJhdGlvKHVpbnQ2NCkodWludDY0WzI0XSx1aW50NjQpIgoJbWV0aG9kICJnZXROb2RlUG9vbEFzc2lnbm1lbnRzKHVpbnQ2NCkoKHVpbnQ2NFszXSlbOF0pIgoJbWV0aG9kICJnZXRORkRSZWdpc3RyeUlEKCl1aW50NjQiCgltZXRob2QgImFkZFZhbGlkYXRvcihwYXksc3RyaW5nLCh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KSl1aW50NjQiCgltZXRob2QgImNoYW5nZVZhbGlkYXRvck1hbmFnZXIodWludDY0LGFkZHJlc3Mpdm9pZCIKCW1ldGhvZCAiY2hhbmdlVmFsaWRhdG9yU3Vuc2V0SW5mbyh1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJjaGFuZ2VWYWxpZGF0b3JORkQodWludDY0LHVpbnQ2NCxzdHJpbmcpdm9pZCIKCW1ldGhvZCAiY2hhbmdlVmFsaWRhdG9yQ29tbWlzc2lvbkFkZHJlc3ModWludDY0LGFkZHJlc3Mpdm9pZCIKCW1ldGhvZCAiY2hhbmdlVmFsaWRhdG9yUmV3YXJkSW5mbyh1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhZGRQb29sKHBheSx1aW50NjQsdWludDY0KSh1aW50NjQsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFkZFN0YWtlKHBheSx1aW50NjQsdWludDY0KSh1aW50NjQsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgInNldFRva2VuUGF5b3V0UmF0aW8odWludDY0KSh1aW50NjRbMjRdLHVpbnQ2NCkiCgltZXRob2QgInN0YWtlVXBkYXRlZFZpYVJld2FyZHMoKHVpbnQ2NCx1aW50NjQsdWludDY0KSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKCW1ldGhvZCAic3Rha2VSZW1vdmVkKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYWRkcmVzcyx1aW50NjQsdWludDY0LGJvb2wpdm9pZCIKCW1ldGhvZCAiZmluZFBvb2xGb3JTdGFrZXIodWludDY0LGFkZHJlc3MsdWludDY0KSgodWludDY0LHVpbnQ2NCx1aW50NjQpLGJvb2wsYm9vbCkiCgltZXRob2QgIm1vdmVQb29sVG9Ob2RlKHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQiCgltZXRob2QgImVtcHR5VG9rZW5SZXdhcmRzKHVpbnQ2NCxhZGRyZXNzKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfaW5pdFN0YWtpbmdDb250cmFjdCAqYWJpX3JvdXRlX2xvYWRTdGFraW5nQ29udHJhY3REYXRhICphYmlfcm91dGVfZmluYWxpemVTdGFraW5nQ29udHJhY3QgKmFiaV9yb3V0ZV9nYXMgKmFiaV9yb3V0ZV9nZXRNYnJBbW91bnRzICphYmlfcm91dGVfZ2V0UHJvdG9jb2xDb25zdHJhaW50cyAqYWJpX3JvdXRlX2dldE51bVZhbGlkYXRvcnMgKmFiaV9yb3V0ZV9nZXRWYWxpZGF0b3JDb25maWcgKmFiaV9yb3V0ZV9nZXRWYWxpZGF0b3JTdGF0ZSAqYWJpX3JvdXRlX2dldFZhbGlkYXRvck93bmVyQW5kTWFuYWdlciAqYWJpX3JvdXRlX2dldFBvb2xzICphYmlfcm91dGVfZ2V0UG9vbEFwcElkICphYmlfcm91dGVfZ2V0UG9vbEluZm8gKmFiaV9yb3V0ZV9nZXRDdXJNYXhTdGFrZVBlclBvb2wgKmFiaV9yb3V0ZV9kb2VzU3Rha2VyTmVlZFRvUGF5TUJSICphYmlfcm91dGVfZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50ICphYmlfcm91dGVfZ2V0VG9rZW5QYXlvdXRSYXRpbyAqYWJpX3JvdXRlX2dldE5vZGVQb29sQXNzaWdubWVudHMgKmFiaV9yb3V0ZV9nZXRORkRSZWdpc3RyeUlEICphYmlfcm91dGVfYWRkVmFsaWRhdG9yICphYmlfcm91dGVfY2hhbmdlVmFsaWRhdG9yTWFuYWdlciAqYWJpX3JvdXRlX2NoYW5nZVZhbGlkYXRvclN1bnNldEluZm8gKmFiaV9yb3V0ZV9jaGFuZ2VWYWxpZGF0b3JORkQgKmFiaV9yb3V0ZV9jaGFuZ2VWYWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcyAqYWJpX3JvdXRlX2NoYW5nZVZhbGlkYXRvclJld2FyZEluZm8gKmFiaV9yb3V0ZV9hZGRQb29sICphYmlfcm91dGVfYWRkU3Rha2UgKmFiaV9yb3V0ZV9zZXRUb2tlblBheW91dFJhdGlvICphYmlfcm91dGVfc3Rha2VVcGRhdGVkVmlhUmV3YXJkcyAqYWJpX3JvdXRlX3N0YWtlUmVtb3ZlZCAqYWJpX3JvdXRlX2ZpbmRQb29sRm9yU3Rha2VyICphYmlfcm91dGVfbW92ZVBvb2xUb05vZGUgKmFiaV9yb3V0ZV9lbXB0eVRva2VuUmV3YXJkcwoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIFVwZGF0ZUFwcGxpY2F0aW9uCgllcnI=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" + }, + "contract": { + "name": "ValidatorRegistry", + "desc": "", + "methods": [ + { + "name": "updateApplication", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "createApplication", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "initStakingContract", + "args": [ + { + "name": "approvalProgramSize", + "type": "uint64" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "loadStakingContractData", + "args": [ + { + "name": "offset", + "type": "uint64" + }, + { + "name": "data", + "type": "byte[]" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "finalizeStakingContract", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "gas", + "desc": "gas is a dummy no-op call that can be used to pool-up resource references and opcode cost", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "getMbrAmounts", + "desc": "Returns the MBR amounts needed for various actions:[addValidatorMbr: uint64 - mbr needed to add a new validator - paid to validator contractaddPoolMbr: uint64 - mbr needed to add a new pool - paid to validatorpoolInitMbr: uint64 - mbr needed to initStorage() of pool - paid to pool itselfaddStakerMbr: uint64 - mbr staker needs to add to first staking payment (stays w/ validator)]", + "args": [], + "returns": { + "type": "(uint64,uint64,uint64,uint64)" + } + }, + { + "name": "getProtocolConstraints", + "desc": "Returns the protocol constraints so that UIs can limit what users specify for validator configuration parameters.", + "args": [], + "returns": { + "type": "(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)" + } + }, + { + "name": "getNumValidators", + "desc": "Returns the current number of validators", + "args": [], + "returns": { + "type": "uint64" + } + }, + { + "name": "getValidatorConfig", + "args": [ + { + "name": "validatorId", + "type": "uint64" + } + ], + "returns": { + "type": "(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" + } + }, + { + "name": "getValidatorState", + "args": [ + { + "name": "validatorId", + "type": "uint64" + } + ], + "returns": { + "type": "(uint16,uint64,uint64,uint64)" + } + }, + { + "name": "getValidatorOwnerAndManager", + "args": [ + { + "name": "validatorId", + "type": "uint64" + } + ], + "returns": { + "type": "(address,address)" + } + }, + { + "name": "getPools", + "desc": "Return list of all pools for this validator.", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "@return{PoolInfo[]}- array of poolsNot callable from other contracts because>1K return but can be called w/ simulate which bumps log returns" + } + ], + "returns": { + "type": "(uint64,uint16,uint64)[]" + } + }, + { + "name": "getPoolAppId", + "args": [ + { + "name": "validatorId", + "type": "uint64" + }, + { + "name": "poolId", + "type": "uint64" + } + ], + "returns": { + "type": "uint64" + } + }, + { + "name": "getPoolInfo", + "args": [ + { + "name": "poolKey", + "type": "(uint64,uint64,uint64)" + } + ], + "returns": { + "type": "(uint64,uint16,uint64)" + } + }, + { + "name": "getCurMaxStakePerPool", + "desc": "Calculate the maximum stake per pool for a given validator.Normally this would be maxAlgoPerPool, but it should also never go above MaxAllowedStake / numPools soas pools are added the max allowed per pool can reduce.", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator." + } + ], + "returns": { + "type": "uint64" + } + }, + { + "name": "doesStakerNeedToPayMBR", + "desc": "Helper callers can call w/ simulate to determine if 'AddStaker' MBR should be included w/ staking amount", + "args": [ + { + "name": "staker", + "type": "address" + } + ], + "returns": { + "type": "bool" + } + }, + { + "name": "getStakedPoolsForAccount", + "desc": "Retrieves the staked pools for an account.", + "args": [ + { + "name": "staker", + "type": "address", + "desc": "The account to retrieve staked pools for.@return{ValidatorPoolKey[]}- The array of staked pools for the account." + } + ], + "returns": { + "type": "(uint64,uint64,uint64)[]" + } + }, + { + "name": "getTokenPayoutRatio", + "desc": "Retrieves the token payout ratio for a given validator - returning the pool ratios of whole so that tokenpayouts across pools can be based on a stable snaphost of stake.", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator.@return{PoolTokenPayoutRatio}- The token payout ratio for the validator." + } + ], + "returns": { + "type": "(uint64[24],uint64)" + } + }, + { + "name": "getNodePoolAssignments", + "args": [ + { + "name": "validatorId", + "type": "uint64" + } + ], + "returns": { + "type": "((uint64[3])[8])" + } + }, + { + "name": "getNFDRegistryID", + "args": [], + "returns": { + "type": "uint64" + } + }, + { + "name": "addValidator", + "desc": "Adds a new validatorRequires at least 10 ALGO as the 'fee' for the transaction to help dissuade spammed validator adds.", + "args": [ + { + "name": "mbrPayment", + "type": "pay", + "desc": "payment from caller which covers mbr increase of new validator storage" + }, + { + "name": "nfdName", + "type": "string", + "desc": "(Optional) Name of nfd (used as double-check against id specified in config)" + }, + { + "name": "config", + "type": "(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)", + "desc": "ValidatorConfig struct" + } + ], + "returns": { + "type": "uint64", + "desc": "{uint64}validator id" + } + }, + { + "name": "changeValidatorManager", + "desc": "Changes the Validator manager for a specific Validator id.[ ONLY OWNER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator to change the manager for." + }, + { + "name": "manager", + "type": "address", + "desc": "The new manager address." + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "changeValidatorSunsetInfo", + "desc": "Updates the sunset information for a given validator.[ ONLY OWNER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator to update." + }, + { + "name": "sunsettingOn", + "type": "uint64", + "desc": "The new sunset timestamp." + }, + { + "name": "sunsettingTo", + "type": "uint64", + "desc": "The new sunset to validator id." + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "changeValidatorNFD", + "desc": "Changes the NFD for a validator in the validatorList contract.[ ONLY OWNER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator to update." + }, + { + "name": "nfdAppID", + "type": "uint64", + "desc": "The application id of the NFD to assign to the validator." + }, + { + "name": "nfdName", + "type": "string", + "desc": "The name of the NFD (which must match)" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "changeValidatorCommissionAddress", + "desc": "Change the commission address that validator rewards are sent to.[ ONLY OWNER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64" + }, + { + "name": "commissionAddress", + "type": "address" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "changeValidatorRewardInfo", + "desc": "Allow the additional rewards (gating entry, additional token rewards) information be changed at will.[ ONLY OWNER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64" + }, + { + "name": "EntryGatingType", + "type": "uint8" + }, + { + "name": "EntryGatingAddress", + "type": "address" + }, + { + "name": "EntryGatingAssets", + "type": "uint64[4]" + }, + { + "name": "GatingAssetMinBalance", + "type": "uint64" + }, + { + "name": "RewardPerPayout", + "type": "uint64" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "addPool", + "desc": "Adds a new pool to a validator's pool set, returning the 'key' to reference the pool in the future for staking, etc.The caller must pay the cost of the validators MBR increase as well as the MBR that will be needed for the pool itself.[ ONLY OWNER OR MANAGER CAN call ]", + "args": [ + { + "name": "mbrPayment", + "type": "pay", + "desc": "payment from caller which covers mbr increase of adding a new pool" + }, + { + "name": "validatorId", + "type": "uint64", + "desc": "is id of validator to pool to (must be owner or manager)" + }, + { + "name": "nodeNum", + "type": "uint64", + "desc": "is node number to add to" + } + ], + "returns": { + "type": "(uint64,uint64,uint64)", + "desc": "{ValidatorPoolKey}pool key to created pool" + } + }, + { + "name": "addStake", + "desc": "Adds stake to a validator pool.", + "args": [ + { + "name": "stakedAmountPayment", + "type": "pay", + "desc": "payment coming from staker to place into a pool" + }, + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator." + }, + { + "name": "valueToVerify", + "type": "uint64", + "desc": "only if validator has gating to enter - this is asset id or nfd id that corresponds to gating.Txn sender is factored in as well if that is part of gating.*" + } + ], + "returns": { + "type": "(uint64,uint64,uint64)", + "desc": "{ValidatorPoolKey}- The key of the validator pool." + } + }, + { + "name": "setTokenPayoutRatio", + "desc": "setTokenPayoutRatio is called by Staking Pool # 1 (ONLY) to ask the validator (us) to calculate the ratiosof stake in the pools for subsequent token payouts (ie: 2 pools, '100' algo total staked, 60 in pool 1, and 40in pool 2) This is done so we have a stable snapshot of stake - taken once per epoch - only triggered bypool 1 doing payout. pools other than 1 doing payout call pool 1 to ask it do it first.It would be 60/40% in the poolPctOfWhole values. The token reward payouts then use these values instead oftheir 'current' stake which changes as part of the payouts themselves (and people could be changing stakeduring the epoch updates across pools)Multiple pools will call us via pool 1 (pool2->pool1->validator, etc.) so don't assert on pool1 calling multipletimes in same epoch. Just return.", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "validator id (and thus pool) calling us. Verified so that sender MUST be pool 1 of this validator." + } + ], + "returns": { + "type": "(uint64[24],uint64)", + "desc": "PoolTokenPayoutRatio - the finished ratio data" + } + }, + { + "name": "stakeUpdatedViaRewards", + "desc": "stakeUpdatedViaRewards is called by Staking pools to inform the validator (us) that a particular amount of totalstake has been added to the specified pool. This is used to update the stats we have in our PoolInfo storage.The calling App id is validated against our pool list as well.", + "args": [ + { + "name": "poolKey", + "type": "(uint64,uint64,uint64)", + "desc": "ValidatorPoolKey type" + }, + { + "name": "algoToAdd", + "type": "uint64", + "desc": "amount this validator's total stake increased via rewards" + }, + { + "name": "rewardTokenAmountReserved", + "type": "uint64", + "desc": "amount this validator's total stake increased via rewards (that should be" + }, + { + "name": "validatorCommission", + "type": "uint64", + "desc": "the commission amount the validator was paid, if any" + }, + { + "name": "saturatedBurnToFeeSink", + "type": "uint64", + "desc": "if the pool was in saturated state, the amount sent back to the fee sink.seen as 'accounted for/pending spent')" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "stakeRemoved", + "desc": "stakeRemoved is called by Staking pools to inform the validator (us) that a particular amount of total stake has been removedfrom the specified pool. This is used to update the stats we have in our PoolInfo storage.If any amount of rewardRemoved is specified, then that amount of reward is sent to the useThe calling App id is validated against our pool list as well.", + "args": [ + { + "name": "poolKey", + "type": "(uint64,uint64,uint64)", + "desc": "calling us from which stake was removed" + }, + { + "name": "staker", + "type": "address" + }, + { + "name": "amountRemoved", + "type": "uint64", + "desc": "algo amount removed" + }, + { + "name": "rewardRemoved", + "type": "uint64", + "desc": "if applicable, amount of token reward removed (by pool 1 caller) or TO remove and pay out (via pool 1 from different pool caller)" + }, + { + "name": "stakerRemoved", + "type": "bool" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "findPoolForStaker", + "desc": "Finds the pool for a staker based on the provided validator id, staker address, and amount to stake.First checks the stakers 'already staked list' for the validator preferring those (adding if possible) then addsto new pool if necessary.", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator." + }, + { + "name": "staker", + "type": "address", + "desc": "The address of the staker." + }, + { + "name": "amountToStake", + "type": "uint64", + "desc": "The amount to stake." + } + ], + "returns": { + "type": "((uint64,uint64,uint64),bool,bool)", + "desc": "{ValidatorPoolKey, boolean, boolean}- The pool for the staker, true/false on whether the staker is 'new'to this VALIDATOR, and true/false if staker is new to the protocol." + } + }, + { + "name": "movePoolToNode", + "desc": "Find the specified pool (in any node number) and move it to the specified node.The pool account is forced offline if moved so prior node will still run for 320 rounds butnew key goes online on new node soon after (320 rounds after it goes online)No-op if success, asserts if not found or can't move (no space in target)[ ONLY OWNER OR MANAGER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator." + }, + { + "name": "poolAppId", + "type": "uint64" + }, + { + "name": "nodeNum", + "type": "uint64" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "emptyTokenRewards", + "desc": "Sends the reward tokens held in pool 1 to specified receiver.This is intended to be used by the owner when they want to get reward tokens 'back' which they sent tothe first pool (likely because validator is sunsetting. Any tokens currently 'reserved' for stakers to claim willNOT be sent as they must be held back for stakers to later claim.[ ONLY OWNER CAN CALL]", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator." + }, + { + "name": "receiver", + "type": "address", + "desc": "the account to send the tokens to (must already be opted-in to the reward token)" + } + ], + "returns": { + "type": "uint64", + "desc": "{uint64}the amount of reward token sent" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/reti/ValidatorRegistry.arc4.json b/examples/reti/ValidatorRegistry.arc4.json new file mode 100755 index 000000000..c030549dd --- /dev/null +++ b/examples/reti/ValidatorRegistry.arc4.json @@ -0,0 +1,579 @@ +{ + "name": "ValidatorRegistry", + "desc": "", + "methods": [ + { + "name": "updateApplication", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "createApplication", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "initStakingContract", + "args": [ + { + "name": "approvalProgramSize", + "type": "uint64" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "loadStakingContractData", + "args": [ + { + "name": "offset", + "type": "uint64" + }, + { + "name": "data", + "type": "byte[]" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "finalizeStakingContract", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "gas", + "desc": "gas is a dummy no-op call that can be used to pool-up resource references and opcode cost", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "getMbrAmounts", + "desc": "Returns the MBR amounts needed for various actions:[addValidatorMbr: uint64 - mbr needed to add a new validator - paid to validator contractaddPoolMbr: uint64 - mbr needed to add a new pool - paid to validatorpoolInitMbr: uint64 - mbr needed to initStorage() of pool - paid to pool itselfaddStakerMbr: uint64 - mbr staker needs to add to first staking payment (stays w/ validator)]", + "args": [], + "returns": { + "type": "(uint64,uint64,uint64,uint64)" + } + }, + { + "name": "getProtocolConstraints", + "desc": "Returns the protocol constraints so that UIs can limit what users specify for validator configuration parameters.", + "args": [], + "returns": { + "type": "(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)" + } + }, + { + "name": "getNumValidators", + "desc": "Returns the current number of validators", + "args": [], + "returns": { + "type": "uint64" + } + }, + { + "name": "getValidatorConfig", + "args": [ + { + "name": "validatorId", + "type": "uint64" + } + ], + "returns": { + "type": "(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" + } + }, + { + "name": "getValidatorState", + "args": [ + { + "name": "validatorId", + "type": "uint64" + } + ], + "returns": { + "type": "(uint16,uint64,uint64,uint64)" + } + }, + { + "name": "getValidatorOwnerAndManager", + "args": [ + { + "name": "validatorId", + "type": "uint64" + } + ], + "returns": { + "type": "(address,address)" + } + }, + { + "name": "getPools", + "desc": "Return list of all pools for this validator.", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "@return{PoolInfo[]}- array of poolsNot callable from other contracts because>1K return but can be called w/ simulate which bumps log returns" + } + ], + "returns": { + "type": "(uint64,uint16,uint64)[]" + } + }, + { + "name": "getPoolAppId", + "args": [ + { + "name": "validatorId", + "type": "uint64" + }, + { + "name": "poolId", + "type": "uint64" + } + ], + "returns": { + "type": "uint64" + } + }, + { + "name": "getPoolInfo", + "args": [ + { + "name": "poolKey", + "type": "(uint64,uint64,uint64)" + } + ], + "returns": { + "type": "(uint64,uint16,uint64)" + } + }, + { + "name": "getCurMaxStakePerPool", + "desc": "Calculate the maximum stake per pool for a given validator.Normally this would be maxAlgoPerPool, but it should also never go above MaxAllowedStake / numPools soas pools are added the max allowed per pool can reduce.", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator." + } + ], + "returns": { + "type": "uint64" + } + }, + { + "name": "doesStakerNeedToPayMBR", + "desc": "Helper callers can call w/ simulate to determine if 'AddStaker' MBR should be included w/ staking amount", + "args": [ + { + "name": "staker", + "type": "address" + } + ], + "returns": { + "type": "bool" + } + }, + { + "name": "getStakedPoolsForAccount", + "desc": "Retrieves the staked pools for an account.", + "args": [ + { + "name": "staker", + "type": "address", + "desc": "The account to retrieve staked pools for.@return{ValidatorPoolKey[]}- The array of staked pools for the account." + } + ], + "returns": { + "type": "(uint64,uint64,uint64)[]" + } + }, + { + "name": "getTokenPayoutRatio", + "desc": "Retrieves the token payout ratio for a given validator - returning the pool ratios of whole so that tokenpayouts across pools can be based on a stable snaphost of stake.", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator.@return{PoolTokenPayoutRatio}- The token payout ratio for the validator." + } + ], + "returns": { + "type": "(uint64[24],uint64)" + } + }, + { + "name": "getNodePoolAssignments", + "args": [ + { + "name": "validatorId", + "type": "uint64" + } + ], + "returns": { + "type": "((uint64[3])[8])" + } + }, + { + "name": "getNFDRegistryID", + "args": [], + "returns": { + "type": "uint64" + } + }, + { + "name": "addValidator", + "desc": "Adds a new validatorRequires at least 10 ALGO as the 'fee' for the transaction to help dissuade spammed validator adds.", + "args": [ + { + "name": "mbrPayment", + "type": "pay", + "desc": "payment from caller which covers mbr increase of new validator storage" + }, + { + "name": "nfdName", + "type": "string", + "desc": "(Optional) Name of nfd (used as double-check against id specified in config)" + }, + { + "name": "config", + "type": "(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)", + "desc": "ValidatorConfig struct" + } + ], + "returns": { + "type": "uint64", + "desc": "{uint64}validator id" + } + }, + { + "name": "changeValidatorManager", + "desc": "Changes the Validator manager for a specific Validator id.[ ONLY OWNER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator to change the manager for." + }, + { + "name": "manager", + "type": "address", + "desc": "The new manager address." + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "changeValidatorSunsetInfo", + "desc": "Updates the sunset information for a given validator.[ ONLY OWNER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator to update." + }, + { + "name": "sunsettingOn", + "type": "uint64", + "desc": "The new sunset timestamp." + }, + { + "name": "sunsettingTo", + "type": "uint64", + "desc": "The new sunset to validator id." + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "changeValidatorNFD", + "desc": "Changes the NFD for a validator in the validatorList contract.[ ONLY OWNER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator to update." + }, + { + "name": "nfdAppID", + "type": "uint64", + "desc": "The application id of the NFD to assign to the validator." + }, + { + "name": "nfdName", + "type": "string", + "desc": "The name of the NFD (which must match)" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "changeValidatorCommissionAddress", + "desc": "Change the commission address that validator rewards are sent to.[ ONLY OWNER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64" + }, + { + "name": "commissionAddress", + "type": "address" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "changeValidatorRewardInfo", + "desc": "Allow the additional rewards (gating entry, additional token rewards) information be changed at will.[ ONLY OWNER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64" + }, + { + "name": "EntryGatingType", + "type": "uint8" + }, + { + "name": "EntryGatingAddress", + "type": "address" + }, + { + "name": "EntryGatingAssets", + "type": "uint64[4]" + }, + { + "name": "GatingAssetMinBalance", + "type": "uint64" + }, + { + "name": "RewardPerPayout", + "type": "uint64" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "addPool", + "desc": "Adds a new pool to a validator's pool set, returning the 'key' to reference the pool in the future for staking, etc.The caller must pay the cost of the validators MBR increase as well as the MBR that will be needed for the pool itself.[ ONLY OWNER OR MANAGER CAN call ]", + "args": [ + { + "name": "mbrPayment", + "type": "pay", + "desc": "payment from caller which covers mbr increase of adding a new pool" + }, + { + "name": "validatorId", + "type": "uint64", + "desc": "is id of validator to pool to (must be owner or manager)" + }, + { + "name": "nodeNum", + "type": "uint64", + "desc": "is node number to add to" + } + ], + "returns": { + "type": "(uint64,uint64,uint64)", + "desc": "{ValidatorPoolKey}pool key to created pool" + } + }, + { + "name": "addStake", + "desc": "Adds stake to a validator pool.", + "args": [ + { + "name": "stakedAmountPayment", + "type": "pay", + "desc": "payment coming from staker to place into a pool" + }, + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator." + }, + { + "name": "valueToVerify", + "type": "uint64", + "desc": "only if validator has gating to enter - this is asset id or nfd id that corresponds to gating.Txn sender is factored in as well if that is part of gating.*" + } + ], + "returns": { + "type": "(uint64,uint64,uint64)", + "desc": "{ValidatorPoolKey}- The key of the validator pool." + } + }, + { + "name": "setTokenPayoutRatio", + "desc": "setTokenPayoutRatio is called by Staking Pool # 1 (ONLY) to ask the validator (us) to calculate the ratiosof stake in the pools for subsequent token payouts (ie: 2 pools, '100' algo total staked, 60 in pool 1, and 40in pool 2) This is done so we have a stable snapshot of stake - taken once per epoch - only triggered bypool 1 doing payout. pools other than 1 doing payout call pool 1 to ask it do it first.It would be 60/40% in the poolPctOfWhole values. The token reward payouts then use these values instead oftheir 'current' stake which changes as part of the payouts themselves (and people could be changing stakeduring the epoch updates across pools)Multiple pools will call us via pool 1 (pool2->pool1->validator, etc.) so don't assert on pool1 calling multipletimes in same epoch. Just return.", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "validator id (and thus pool) calling us. Verified so that sender MUST be pool 1 of this validator." + } + ], + "returns": { + "type": "(uint64[24],uint64)", + "desc": "PoolTokenPayoutRatio - the finished ratio data" + } + }, + { + "name": "stakeUpdatedViaRewards", + "desc": "stakeUpdatedViaRewards is called by Staking pools to inform the validator (us) that a particular amount of totalstake has been added to the specified pool. This is used to update the stats we have in our PoolInfo storage.The calling App id is validated against our pool list as well.", + "args": [ + { + "name": "poolKey", + "type": "(uint64,uint64,uint64)", + "desc": "ValidatorPoolKey type" + }, + { + "name": "algoToAdd", + "type": "uint64", + "desc": "amount this validator's total stake increased via rewards" + }, + { + "name": "rewardTokenAmountReserved", + "type": "uint64", + "desc": "amount this validator's total stake increased via rewards (that should be" + }, + { + "name": "validatorCommission", + "type": "uint64", + "desc": "the commission amount the validator was paid, if any" + }, + { + "name": "saturatedBurnToFeeSink", + "type": "uint64", + "desc": "if the pool was in saturated state, the amount sent back to the fee sink.seen as 'accounted for/pending spent')" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "stakeRemoved", + "desc": "stakeRemoved is called by Staking pools to inform the validator (us) that a particular amount of total stake has been removedfrom the specified pool. This is used to update the stats we have in our PoolInfo storage.If any amount of rewardRemoved is specified, then that amount of reward is sent to the useThe calling App id is validated against our pool list as well.", + "args": [ + { + "name": "poolKey", + "type": "(uint64,uint64,uint64)", + "desc": "calling us from which stake was removed" + }, + { + "name": "staker", + "type": "address" + }, + { + "name": "amountRemoved", + "type": "uint64", + "desc": "algo amount removed" + }, + { + "name": "rewardRemoved", + "type": "uint64", + "desc": "if applicable, amount of token reward removed (by pool 1 caller) or TO remove and pay out (via pool 1 from different pool caller)" + }, + { + "name": "stakerRemoved", + "type": "bool" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "findPoolForStaker", + "desc": "Finds the pool for a staker based on the provided validator id, staker address, and amount to stake.First checks the stakers 'already staked list' for the validator preferring those (adding if possible) then addsto new pool if necessary.", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator." + }, + { + "name": "staker", + "type": "address", + "desc": "The address of the staker." + }, + { + "name": "amountToStake", + "type": "uint64", + "desc": "The amount to stake." + } + ], + "returns": { + "type": "((uint64,uint64,uint64),bool,bool)", + "desc": "{ValidatorPoolKey, boolean, boolean}- The pool for the staker, true/false on whether the staker is 'new'to this VALIDATOR, and true/false if staker is new to the protocol." + } + }, + { + "name": "movePoolToNode", + "desc": "Find the specified pool (in any node number) and move it to the specified node.The pool account is forced offline if moved so prior node will still run for 320 rounds butnew key goes online on new node soon after (320 rounds after it goes online)No-op if success, asserts if not found or can't move (no space in target)[ ONLY OWNER OR MANAGER CAN CHANGE ]", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator." + }, + { + "name": "poolAppId", + "type": "uint64" + }, + { + "name": "nodeNum", + "type": "uint64" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "emptyTokenRewards", + "desc": "Sends the reward tokens held in pool 1 to specified receiver.This is intended to be used by the owner when they want to get reward tokens 'back' which they sent tothe first pool (likely because validator is sunsetting. Any tokens currently 'reserved' for stakers to claim willNOT be sent as they must be held back for stakers to later claim.[ ONLY OWNER CAN CALL]", + "args": [ + { + "name": "validatorId", + "type": "uint64", + "desc": "The id of the validator." + }, + { + "name": "receiver", + "type": "address", + "desc": "the account to send the tokens to (must already be opted-in to the reward token)" + } + ], + "returns": { + "type": "uint64", + "desc": "{uint64}the amount of reward token sent" + } + } + ] +} \ No newline at end of file diff --git a/examples/reti/ValidatorRegistry.clear.teal b/examples/reti/ValidatorRegistry.clear.teal new file mode 100644 index 000000000..e9f1d65b3 --- /dev/null +++ b/examples/reti/ValidatorRegistry.clear.teal @@ -0,0 +1 @@ +#pragma version 10 \ No newline at end of file diff --git a/examples/reti/ValidatorRegistry.src_map.json b/examples/reti/ValidatorRegistry.src_map.json new file mode 100755 index 000000000..62fb2a920 --- /dev/null +++ b/examples/reti/ValidatorRegistry.src_map.json @@ -0,0 +1,27582 @@ +[ + { + "teal": 1, + "source": 165, + "pc": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183 + ] + }, + { + "teal": 13, + "source": 165, + "pc": [ + 184, + 185 + ] + }, + { + "teal": 14, + "source": 165, + "pc": [ + 186 + ] + }, + { + "teal": 15, + "source": 165, + "pc": [ + 187, + 188 + ] + }, + { + "teal": 16, + "source": 165, + "pc": [ + 189 + ] + }, + { + "teal": 17, + "source": 165, + "pc": [ + 190, + 191 + ] + }, + { + "teal": 18, + "source": 165, + "pc": [ + 192 + ] + }, + { + "teal": 19, + "source": 165, + "pc": [ + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218 + ] + }, + { + "teal": 23, + "source": 165, + "errorMessage": "The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?", + "pc": [ + 219 + ] + }, + { + "teal": 28, + "source": 198, + "pc": [ + 220, + 221, + 222 + ] + }, + { + "teal": 29, + "source": 198, + "pc": [ + 223 + ] + }, + { + "teal": 30, + "source": 198, + "pc": [ + 224 + ] + }, + { + "teal": 34, + "source": 198, + "pc": [ + 225, + 226, + 227 + ] + }, + { + "teal": 38, + "source": 199, + "pc": [ + 228, + 229 + ] + }, + { + "teal": 39, + "source": 199, + "pc": [ + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 258, + 259, + 260, + 261, + 262, + 263 + ] + }, + { + "teal": 40, + "source": 199, + "pc": [ + 264 + ] + }, + { + "teal": 41, + "source": 199, + "pc": [ + 265 + ] + }, + { + "teal": 45, + "source": 201, + "pc": [ + 266, + 267 + ] + }, + { + "teal": 46, + "source": 201, + "pc": [ + 268 + ] + }, + { + "teal": 50, + "source": 202, + "pc": [ + 269, + 270 + ] + }, + { + "teal": 51, + "source": 202, + "pc": [ + 271 + ] + }, + { + "teal": 52, + "source": 202, + "pc": [ + 272, + 273 + ] + }, + { + "teal": 53, + "source": 202, + "pc": [ + 274 + ] + }, + { + "teal": 54, + "source": 202, + "pc": [ + 275, + 276 + ] + }, + { + "teal": 55, + "source": 202, + "pc": [ + 277 + ] + }, + { + "teal": 56, + "source": 202, + "pc": [ + 278 + ] + }, + { + "teal": 57, + "source": 198, + "pc": [ + 279 + ] + }, + { + "teal": 62, + "source": 205, + "pc": [ + 280, + 281, + 282 + ] + }, + { + "teal": 63, + "source": 205, + "pc": [ + 283 + ] + }, + { + "teal": 64, + "source": 205, + "pc": [ + 284 + ] + }, + { + "teal": 68, + "source": 205, + "pc": [ + 285, + 286, + 287 + ] + }, + { + "teal": 72, + "source": 206, + "pc": [ + 288, + 289 + ] + }, + { + "teal": 73, + "source": 206, + "pc": [ + 290 + ] + }, + { + "teal": 74, + "source": 206, + "pc": [ + 291, + 292 + ] + }, + { + "teal": 75, + "source": 206, + "pc": [ + 293 + ] + }, + { + "teal": 76, + "source": 206, + "pc": [ + 294, + 295 + ] + }, + { + "teal": 77, + "source": 206, + "pc": [ + 296 + ] + }, + { + "teal": 78, + "source": 206, + "pc": [ + 297 + ] + }, + { + "teal": 82, + "source": 207, + "pc": [ + 298, + 299 + ] + }, + { + "teal": 83, + "source": 207, + "pc": [ + 300 + ] + }, + { + "teal": 84, + "source": 207, + "pc": [ + 301 + ] + }, + { + "teal": 88, + "source": 208, + "pc": [ + 302, + 303 + ] + }, + { + "teal": 89, + "source": 208, + "pc": [ + 304 + ] + }, + { + "teal": 90, + "source": 208, + "pc": [ + 305 + ] + }, + { + "teal": 94, + "source": 209, + "pc": [ + 306, + 307 + ] + }, + { + "teal": 95, + "source": 209, + "pc": [ + 308 + ] + }, + { + "teal": 96, + "source": 209, + "pc": [ + 309 + ] + }, + { + "teal": 97, + "source": 205, + "pc": [ + 310 + ] + }, + { + "teal": 102, + "source": 212, + "pc": [ + 311, + 312, + 313 + ] + }, + { + "teal": 103, + "source": 212, + "pc": [ + 314 + ] + }, + { + "teal": 106, + "source": 212, + "pc": [ + 315, + 316, + 317 + ] + }, + { + "teal": 107, + "source": 212, + "pc": [ + 318 + ] + }, + { + "teal": 108, + "source": 212, + "pc": [ + 319 + ] + }, + { + "teal": 112, + "source": 212, + "pc": [ + 320, + 321, + 322 + ] + }, + { + "teal": 116, + "source": 214, + "pc": [ + 323, + 324 + ] + }, + { + "teal": 117, + "source": 214, + "pc": [ + 325, + 326 + ] + }, + { + "teal": 118, + "source": 214, + "pc": [ + 327 + ] + }, + { + "teal": 119, + "source": 214, + "pc": [ + 328 + ] + }, + { + "teal": 120, + "source": 212, + "pc": [ + 329 + ] + }, + { + "teal": 125, + "source": 217, + "pc": [ + 330, + 331, + 332 + ] + }, + { + "teal": 126, + "source": 217, + "pc": [ + 333, + 334, + 335 + ] + }, + { + "teal": 129, + "source": 217, + "pc": [ + 336, + 337, + 338 + ] + }, + { + "teal": 130, + "source": 217, + "pc": [ + 339 + ] + }, + { + "teal": 133, + "source": 217, + "pc": [ + 340, + 341, + 342 + ] + }, + { + "teal": 134, + "source": 217, + "pc": [ + 343 + ] + }, + { + "teal": 135, + "source": 217, + "pc": [ + 344 + ] + }, + { + "teal": 139, + "source": 217, + "pc": [ + 345, + 346, + 347 + ] + }, + { + "teal": 143, + "source": 218, + "pc": [ + 348, + 349 + ] + }, + { + "teal": 144, + "source": 218, + "pc": [ + 350 + ] + }, + { + "teal": 145, + "source": 218, + "pc": [ + 351 + ] + }, + { + "teal": 146, + "source": 218, + "pc": [ + 352 + ] + }, + { + "teal": 147, + "source": 218, + "pc": [ + 353 + ] + }, + { + "teal": 148, + "source": 218, + "pc": [ + 354 + ] + }, + { + "teal": 152, + "source": 219, + "pc": [ + 355, + 356 + ] + }, + { + "teal": 153, + "source": 219, + "pc": [ + 357, + 358 + ] + }, + { + "teal": 154, + "source": 219, + "pc": [ + 359, + 360 + ] + }, + { + "teal": 155, + "source": 219, + "pc": [ + 361 + ] + }, + { + "teal": 156, + "source": 217, + "pc": [ + 362 + ] + }, + { + "teal": 161, + "source": 222, + "pc": [ + 363, + 364, + 365 + ] + }, + { + "teal": 162, + "source": 222, + "pc": [ + 366 + ] + }, + { + "teal": 163, + "source": 222, + "pc": [ + 367 + ] + }, + { + "teal": 167, + "source": 222, + "pc": [ + 368, + 369, + 370 + ] + }, + { + "teal": 171, + "source": 223, + "pc": [ + 371, + 372 + ] + }, + { + "teal": 172, + "source": 223, + "pc": [ + 373 + ] + }, + { + "teal": 173, + "source": 223, + "pc": [ + 374, + 375 + ] + }, + { + "teal": 174, + "source": 223, + "pc": [ + 376 + ] + }, + { + "teal": 175, + "source": 223, + "pc": [ + 377, + 378 + ] + }, + { + "teal": 176, + "source": 223, + "pc": [ + 379 + ] + }, + { + "teal": 177, + "source": 223, + "pc": [ + 380 + ] + }, + { + "teal": 178, + "source": 222, + "pc": [ + 381 + ] + }, + { + "teal": 183, + "source": 229, + "pc": [ + 382, + 383, + 384 + ] + }, + { + "teal": 184, + "source": 229, + "pc": [ + 385 + ] + }, + { + "teal": 185, + "source": 229, + "pc": [ + 386 + ] + }, + { + "teal": 191, + "source": 229, + "pc": [ + 387, + 388, + 389 + ] + }, + { + "teal": 192, + "source": 229, + "pc": [ + 390 + ] + }, + { + "teal": 197, + "source": 240, + "pc": [ + 391 + ] + }, + { + "teal": 200, + "source": 240, + "pc": [ + 392, + 393, + 394 + ] + }, + { + "teal": 201, + "source": 240, + "pc": [ + 395 + ] + }, + { + "teal": 202, + "source": 240, + "pc": [ + 396 + ] + }, + { + "teal": 203, + "source": 240, + "pc": [ + 397 + ] + }, + { + "teal": 204, + "source": 240, + "pc": [ + 398 + ] + }, + { + "teal": 216, + "source": 240, + "pc": [ + 399, + 400, + 401 + ] + }, + { + "teal": 241, + "source": 244, + "pc": [ + 402, + 403, + 404 + ] + }, + { + "teal": 242, + "source": 244, + "pc": [ + 405, + 406, + 407 + ] + }, + { + "teal": 243, + "source": 244, + "pc": [ + 408 + ] + }, + { + "teal": 244, + "source": 254, + "pc": [ + 409, + 410 + ] + }, + { + "teal": 245, + "source": 253, + "pc": [ + 411, + 412 + ] + }, + { + "teal": 246, + "source": 252, + "pc": [ + 413 + ] + }, + { + "teal": 247, + "source": 252, + "pc": [ + 414, + 415 + ] + }, + { + "teal": 248, + "source": 249, + "pc": [ + 416, + 417 + ] + }, + { + "teal": 249, + "source": 246, + "pc": [ + 418 + ] + }, + { + "teal": 250, + "source": 245, + "pc": [ + 419, + 420, + 421 + ] + }, + { + "teal": 251, + "source": 245, + "pc": [ + 422 + ] + }, + { + "teal": 252, + "source": 245, + "pc": [ + 423 + ] + }, + { + "teal": 253, + "source": 257, + "pc": [ + 424, + 425 + ] + }, + { + "teal": 254, + "source": 258, + "pc": [ + 426, + 427, + 428 + ] + }, + { + "teal": 255, + "source": 258, + "pc": [ + 429, + 430, + 431 + ] + }, + { + "teal": 256, + "source": 257, + "pc": [ + 432 + ] + }, + { + "teal": 257, + "source": 257, + "pc": [ + 433 + ] + }, + { + "teal": 258, + "source": 257, + "pc": [ + 434 + ] + }, + { + "teal": 259, + "source": 262, + "pc": [ + 435, + 436, + 437 + ] + }, + { + "teal": 260, + "source": 261, + "pc": [ + 438, + 439, + 440 + ] + }, + { + "teal": 261, + "source": 261, + "pc": [ + 441 + ] + }, + { + "teal": 262, + "source": 261, + "pc": [ + 442 + ] + }, + { + "teal": 263, + "source": 240, + "pc": [ + 443 + ] + }, + { + "teal": 268, + "source": 270, + "pc": [ + 444 + ] + }, + { + "teal": 271, + "source": 270, + "pc": [ + 445, + 446, + 447 + ] + }, + { + "teal": 272, + "source": 270, + "pc": [ + 448 + ] + }, + { + "teal": 273, + "source": 270, + "pc": [ + 449 + ] + }, + { + "teal": 274, + "source": 270, + "pc": [ + 450 + ] + }, + { + "teal": 275, + "source": 270, + "pc": [ + 451 + ] + }, + { + "teal": 281, + "source": 270, + "pc": [ + 452, + 453, + 454 + ] + }, + { + "teal": 297, + "source": 276, + "pc": [ + 455, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 472, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 481, + 482, + 483, + 484, + 485, + 486, + 487, + 488, + 489, + 490, + 491, + 492, + 493, + 494, + 495, + 496 + ] + }, + { + "teal": 298, + "source": 277, + "pc": [ + 497, + 498, + 499 + ] + }, + { + "teal": 299, + "source": 277, + "pc": [ + 500 + ] + }, + { + "teal": 300, + "source": 277, + "pc": [ + 501 + ] + }, + { + "teal": 301, + "source": 278, + "pc": [ + 502, + 503, + 504 + ] + }, + { + "teal": 302, + "source": 278, + "pc": [ + 505 + ] + }, + { + "teal": 303, + "source": 278, + "pc": [ + 506 + ] + }, + { + "teal": 304, + "source": 279, + "pc": [ + 507, + 508, + 509 + ] + }, + { + "teal": 305, + "source": 279, + "pc": [ + 510 + ] + }, + { + "teal": 306, + "source": 279, + "pc": [ + 511 + ] + }, + { + "teal": 307, + "source": 280, + "pc": [ + 512, + 513, + 514, + 515, + 516, + 517, + 518, + 519, + 520, + 521 + ] + }, + { + "teal": 308, + "source": 280, + "pc": [ + 522 + ] + }, + { + "teal": 309, + "source": 281, + "pc": [ + 523, + 524, + 525, + 526, + 527, + 528, + 529, + 530, + 531, + 532 + ] + }, + { + "teal": 310, + "source": 281, + "pc": [ + 533 + ] + }, + { + "teal": 311, + "source": 282, + "pc": [ + 534, + 535, + 536, + 537, + 538, + 539, + 540, + 541, + 542, + 543 + ] + }, + { + "teal": 312, + "source": 282, + "pc": [ + 544 + ] + }, + { + "teal": 313, + "source": 270, + "pc": [ + 545 + ] + }, + { + "teal": 318, + "source": 290, + "pc": [ + 546 + ] + }, + { + "teal": 321, + "source": 290, + "pc": [ + 547, + 548, + 549 + ] + }, + { + "teal": 322, + "source": 290, + "pc": [ + 550 + ] + }, + { + "teal": 323, + "source": 290, + "pc": [ + 551 + ] + }, + { + "teal": 324, + "source": 290, + "pc": [ + 552 + ] + }, + { + "teal": 325, + "source": 290, + "pc": [ + 553 + ] + }, + { + "teal": 326, + "source": 290, + "pc": [ + 554 + ] + }, + { + "teal": 332, + "source": 290, + "pc": [ + 555, + 556, + 557 + ] + }, + { + "teal": 336, + "source": 291, + "pc": [ + 558, + 559 + ] + }, + { + "teal": 337, + "source": 291, + "pc": [ + 560 + ] + }, + { + "teal": 338, + "source": 290, + "pc": [ + 561 + ] + }, + { + "teal": 343, + "source": 295, + "pc": [ + 562 + ] + }, + { + "teal": 346, + "source": 295, + "pc": [ + 563, + 564, + 565 + ] + }, + { + "teal": 347, + "source": 295, + "pc": [ + 566 + ] + }, + { + "teal": 350, + "source": 295, + "pc": [ + 567, + 568, + 569 + ] + }, + { + "teal": 351, + "source": 295, + "pc": [ + 570 + ] + }, + { + "teal": 352, + "source": 295, + "pc": [ + 571 + ] + }, + { + "teal": 353, + "source": 295, + "pc": [ + 572 + ] + }, + { + "teal": 354, + "source": 295, + "pc": [ + 573 + ] + }, + { + "teal": 358, + "source": 295, + "pc": [ + 574, + 575, + 576 + ] + }, + { + "teal": 362, + "source": 296, + "pc": [ + 577 + ] + }, + { + "teal": 363, + "source": 296, + "pc": [ + 578, + 579 + ] + }, + { + "teal": 364, + "source": 296, + "pc": [ + 580 + ] + }, + { + "teal": 365, + "source": 296, + "pc": [ + 581, + 582 + ] + }, + { + "teal": 366, + "source": 296, + "pc": [ + 583 + ] + }, + { + "teal": 367, + "source": 296, + "pc": [ + 584 + ] + }, + { + "teal": 368, + "source": 296, + "pc": [ + 585, + 586 + ] + }, + { + "teal": 369, + "source": 296, + "pc": [ + 587 + ] + }, + { + "teal": 370, + "source": 295, + "pc": [ + 588 + ] + }, + { + "teal": 375, + "source": 300, + "pc": [ + 589 + ] + }, + { + "teal": 378, + "source": 300, + "pc": [ + 590, + 591, + 592 + ] + }, + { + "teal": 379, + "source": 300, + "pc": [ + 593 + ] + }, + { + "teal": 382, + "source": 300, + "pc": [ + 594, + 595, + 596 + ] + }, + { + "teal": 383, + "source": 300, + "pc": [ + 597 + ] + }, + { + "teal": 384, + "source": 300, + "pc": [ + 598 + ] + }, + { + "teal": 385, + "source": 300, + "pc": [ + 599 + ] + }, + { + "teal": 386, + "source": 300, + "pc": [ + 600 + ] + }, + { + "teal": 390, + "source": 300, + "pc": [ + 601, + 602, + 603 + ] + }, + { + "teal": 394, + "source": 301, + "pc": [ + 604, + 605 + ] + }, + { + "teal": 395, + "source": 301, + "pc": [ + 606, + 607 + ] + }, + { + "teal": 396, + "source": 301, + "pc": [ + 608 + ] + }, + { + "teal": 397, + "source": 301, + "pc": [ + 609, + 610 + ] + }, + { + "teal": 398, + "source": 301, + "pc": [ + 611 + ] + }, + { + "teal": 399, + "source": 301, + "pc": [ + 612 + ] + }, + { + "teal": 400, + "source": 301, + "pc": [ + 613, + 614 + ] + }, + { + "teal": 401, + "source": 301, + "pc": [ + 615 + ] + }, + { + "teal": 402, + "source": 300, + "pc": [ + 616 + ] + }, + { + "teal": 407, + "source": 305, + "pc": [ + 617 + ] + }, + { + "teal": 410, + "source": 305, + "pc": [ + 618, + 619, + 620 + ] + }, + { + "teal": 411, + "source": 305, + "pc": [ + 621 + ] + }, + { + "teal": 414, + "source": 305, + "pc": [ + 622, + 623, + 624 + ] + }, + { + "teal": 415, + "source": 305, + "pc": [ + 625 + ] + }, + { + "teal": 416, + "source": 305, + "pc": [ + 626 + ] + }, + { + "teal": 417, + "source": 305, + "pc": [ + 627 + ] + }, + { + "teal": 418, + "source": 305, + "pc": [ + 628 + ] + }, + { + "teal": 422, + "source": 305, + "pc": [ + 629, + 630, + 631 + ] + }, + { + "teal": 429, + "source": 307, + "pc": [ + 632 + ] + }, + { + "teal": 430, + "source": 307, + "pc": [ + 633, + 634 + ] + }, + { + "teal": 431, + "source": 307, + "pc": [ + 635 + ] + }, + { + "teal": 432, + "source": 307, + "pc": [ + 636, + 637 + ] + }, + { + "teal": 433, + "source": 307, + "pc": [ + 638 + ] + }, + { + "teal": 434, + "source": 307, + "pc": [ + 639 + ] + }, + { + "teal": 435, + "source": 307, + "pc": [ + 640, + 641 + ] + }, + { + "teal": 436, + "source": 307, + "pc": [ + 642 + ] + }, + { + "teal": 437, + "source": 308, + "pc": [ + 643, + 644 + ] + }, + { + "teal": 438, + "source": 308, + "pc": [ + 645, + 646 + ] + }, + { + "teal": 439, + "source": 308, + "pc": [ + 647 + ] + }, + { + "teal": 440, + "source": 308, + "pc": [ + 648, + 649 + ] + }, + { + "teal": 441, + "source": 308, + "pc": [ + 650 + ] + }, + { + "teal": 442, + "source": 308, + "pc": [ + 651 + ] + }, + { + "teal": 443, + "source": 308, + "pc": [ + 652, + 653 + ] + }, + { + "teal": 444, + "source": 308, + "pc": [ + 654 + ] + }, + { + "teal": 445, + "source": 308, + "pc": [ + 655 + ] + }, + { + "teal": 446, + "source": 305, + "pc": [ + 656 + ] + }, + { + "teal": 451, + "source": 319, + "pc": [ + 657 + ] + }, + { + "teal": 454, + "source": 319, + "pc": [ + 658, + 659, + 660 + ] + }, + { + "teal": 455, + "source": 319, + "pc": [ + 661 + ] + }, + { + "teal": 458, + "source": 319, + "pc": [ + 662, + 663, + 664 + ] + }, + { + "teal": 459, + "source": 319, + "pc": [ + 665 + ] + }, + { + "teal": 460, + "source": 319, + "pc": [ + 666 + ] + }, + { + "teal": 461, + "source": 319, + "pc": [ + 667, + 668 + ] + }, + { + "teal": 462, + "source": 319, + "pc": [ + 669 + ] + }, + { + "teal": 463, + "source": 319, + "pc": [ + 670 + ] + }, + { + "teal": 464, + "source": 319, + "pc": [ + 671, + 672, + 673 + ] + }, + { + "teal": 465, + "source": 319, + "pc": [ + 674 + ] + }, + { + "teal": 466, + "source": 319, + "pc": [ + 675 + ] + }, + { + "teal": 467, + "source": 319, + "pc": [ + 676 + ] + }, + { + "teal": 468, + "source": 319, + "pc": [ + 677 + ] + }, + { + "teal": 469, + "source": 319, + "pc": [ + 678 + ] + }, + { + "teal": 470, + "source": 319, + "pc": [ + 679 + ] + }, + { + "teal": 479, + "source": 319, + "pc": [ + 680, + 681, + 682 + ] + }, + { + "teal": 482, + "source": 319, + "pc": [ + 683 + ] + }, + { + "teal": 483, + "source": 319, + "pc": [ + 684, + 685 + ] + }, + { + "teal": 487, + "source": 320, + "pc": [ + 686 + ] + }, + { + "teal": 488, + "source": 320, + "pc": [ + 687, + 688 + ] + }, + { + "teal": 492, + "source": 321, + "pc": [ + 689, + 690 + ] + }, + { + "teal": 493, + "source": 321, + "pc": [ + 691, + 692 + ] + }, + { + "teal": 494, + "source": 321, + "pc": [ + 693 + ] + }, + { + "teal": 495, + "source": 321, + "pc": [ + 694, + 695 + ] + }, + { + "teal": 496, + "source": 321, + "pc": [ + 696 + ] + }, + { + "teal": 497, + "source": 321, + "pc": [ + 697 + ] + }, + { + "teal": 498, + "source": 321, + "pc": [ + 698, + 699 + ] + }, + { + "teal": 499, + "source": 321, + "pc": [ + 700 + ] + }, + { + "teal": 500, + "source": 321, + "pc": [ + 701, + 702 + ] + }, + { + "teal": 504, + "source": 322, + "pc": [ + 703 + ] + }, + { + "teal": 505, + "source": 322, + "pc": [ + 704, + 705 + ] + }, + { + "teal": 510, + "source": 322, + "pc": [ + 706, + 707 + ] + }, + { + "teal": 511, + "source": 322, + "pc": [ + 708 + ] + }, + { + "teal": 512, + "source": 322, + "pc": [ + 709 + ] + }, + { + "teal": 513, + "source": 322, + "pc": [ + 710, + 711, + 712 + ] + }, + { + "teal": 518, + "source": 323, + "pc": [ + 713, + 714 + ] + }, + { + "teal": 519, + "source": 323, + "pc": [ + 715, + 716 + ] + }, + { + "teal": 520, + "source": 323, + "pc": [ + 717, + 718 + ] + }, + { + "teal": 521, + "source": 323, + "pc": [ + 719 + ] + }, + { + "teal": 522, + "source": 323, + "pc": [ + 720 + ] + }, + { + "teal": 523, + "source": 323, + "pc": [ + 721 + ] + }, + { + "teal": 524, + "source": 323, + "pc": [ + 722 + ] + }, + { + "teal": 525, + "source": 323, + "pc": [ + 723 + ] + }, + { + "teal": 526, + "source": 323, + "pc": [ + 724 + ] + }, + { + "teal": 527, + "source": 323, + "pc": [ + 725 + ] + }, + { + "teal": 528, + "source": 323, + "pc": [ + 726 + ] + }, + { + "teal": 529, + "source": 323, + "pc": [ + 727, + 728, + 729 + ] + }, + { + "teal": 532, + "source": 325, + "pc": [ + 730, + 731, + 732 + ] + }, + { + "teal": 537, + "source": 327, + "pc": [ + 733, + 734 + ] + }, + { + "teal": 538, + "source": 327, + "pc": [ + 735, + 736 + ] + }, + { + "teal": 539, + "source": 327, + "pc": [ + 737, + 738 + ] + }, + { + "teal": 540, + "source": 327, + "pc": [ + 739, + 740 + ] + }, + { + "teal": 541, + "source": 327, + "pc": [ + 741 + ] + }, + { + "teal": 542, + "source": 327, + "pc": [ + 742, + 743 + ] + }, + { + "teal": 543, + "source": 327, + "pc": [ + 744 + ] + }, + { + "teal": 544, + "source": 327, + "pc": [ + 745 + ] + }, + { + "teal": 545, + "source": 327, + "pc": [ + 746, + 747 + ] + }, + { + "teal": 550, + "source": 322, + "pc": [ + 748, + 749 + ] + }, + { + "teal": 551, + "source": 322, + "pc": [ + 750 + ] + }, + { + "teal": 552, + "source": 322, + "pc": [ + 751 + ] + }, + { + "teal": 553, + "source": 322, + "pc": [ + 752, + 753 + ] + }, + { + "teal": 554, + "source": 322, + "pc": [ + 754, + 755, + 756 + ] + }, + { + "teal": 559, + "source": 329, + "pc": [ + 757, + 758 + ] + }, + { + "teal": 562, + "source": 319, + "pc": [ + 759, + 760 + ] + }, + { + "teal": 565, + "source": 319, + "pc": [ + 761, + 762 + ] + }, + { + "teal": 566, + "source": 319, + "pc": [ + 763 + ] + }, + { + "teal": 571, + "source": 336, + "pc": [ + 764 + ] + }, + { + "teal": 574, + "source": 336, + "pc": [ + 765, + 766, + 767 + ] + }, + { + "teal": 575, + "source": 336, + "pc": [ + 768 + ] + }, + { + "teal": 578, + "source": 336, + "pc": [ + 769, + 770, + 771 + ] + }, + { + "teal": 579, + "source": 336, + "pc": [ + 772 + ] + }, + { + "teal": 582, + "source": 336, + "pc": [ + 773, + 774, + 775 + ] + }, + { + "teal": 583, + "source": 336, + "pc": [ + 776 + ] + }, + { + "teal": 584, + "source": 336, + "pc": [ + 777 + ] + }, + { + "teal": 585, + "source": 336, + "pc": [ + 778 + ] + }, + { + "teal": 586, + "source": 336, + "pc": [ + 779 + ] + }, + { + "teal": 587, + "source": 336, + "pc": [ + 780 + ] + }, + { + "teal": 591, + "source": 336, + "pc": [ + 781, + 782, + 783 + ] + }, + { + "teal": 598, + "source": 338, + "pc": [ + 784, + 785 + ] + }, + { + "teal": 599, + "source": 338, + "pc": [ + 786 + ] + }, + { + "teal": 600, + "source": 338, + "pc": [ + 787 + ] + }, + { + "teal": 601, + "source": 338, + "pc": [ + 788 + ] + }, + { + "teal": 602, + "source": 338, + "pc": [ + 789, + 790, + 791 + ] + }, + { + "teal": 603, + "source": 338, + "pc": [ + 792, + 793 + ] + }, + { + "teal": 604, + "source": 338, + "pc": [ + 794 + ] + }, + { + "teal": 605, + "source": 338, + "pc": [ + 795 + ] + }, + { + "teal": 606, + "source": 338, + "pc": [ + 796 + ] + }, + { + "teal": 610, + "source": 337, + "errorMessage": "pool id must be between 1 and number of pools for this validator", + "pc": [ + 797 + ] + }, + { + "teal": 614, + "source": 341, + "pc": [ + 798, + 799 + ] + }, + { + "teal": 615, + "source": 341, + "pc": [ + 800, + 801 + ] + }, + { + "teal": 616, + "source": 341, + "pc": [ + 802 + ] + }, + { + "teal": 617, + "source": 341, + "pc": [ + 803 + ] + }, + { + "teal": 618, + "source": 341, + "pc": [ + 804, + 805 + ] + }, + { + "teal": 619, + "source": 341, + "pc": [ + 806 + ] + }, + { + "teal": 620, + "source": 341, + "pc": [ + 807 + ] + }, + { + "teal": 621, + "source": 341, + "pc": [ + 808 + ] + }, + { + "teal": 622, + "source": 341, + "pc": [ + 809 + ] + }, + { + "teal": 623, + "source": 341, + "pc": [ + 810 + ] + }, + { + "teal": 624, + "source": 341, + "pc": [ + 811 + ] + }, + { + "teal": 625, + "source": 341, + "pc": [ + 812, + 813 + ] + }, + { + "teal": 626, + "source": 341, + "pc": [ + 814 + ] + }, + { + "teal": 627, + "source": 341, + "pc": [ + 815 + ] + }, + { + "teal": 628, + "source": 341, + "pc": [ + 816, + 817 + ] + }, + { + "teal": 629, + "source": 341, + "pc": [ + 818 + ] + }, + { + "teal": 630, + "source": 341, + "pc": [ + 819 + ] + }, + { + "teal": 631, + "source": 336, + "pc": [ + 820 + ] + }, + { + "teal": 636, + "source": 345, + "pc": [ + 821 + ] + }, + { + "teal": 639, + "source": 345, + "pc": [ + 822, + 823, + 824 + ] + }, + { + "teal": 640, + "source": 345, + "pc": [ + 825 + ] + }, + { + "teal": 641, + "source": 345, + "pc": [ + 826 + ] + }, + { + "teal": 642, + "source": 345, + "pc": [ + 827 + ] + }, + { + "teal": 643, + "source": 345, + "pc": [ + 828 + ] + }, + { + "teal": 646, + "source": 345, + "errorMessage": "argument 0 (poolKey) for getPoolInfo must be a (uint64,uint64,uint64)", + "pc": [ + 829 + ] + }, + { + "teal": 649, + "source": 345, + "pc": [ + 830, + 831, + 832 + ] + }, + { + "teal": 650, + "source": 345, + "pc": [ + 833 + ] + }, + { + "teal": 651, + "source": 345, + "pc": [ + 834 + ] + }, + { + "teal": 652, + "source": 345, + "pc": [ + 835 + ] + }, + { + "teal": 653, + "source": 345, + "pc": [ + 836 + ] + }, + { + "teal": 657, + "source": 345, + "pc": [ + 837, + 838, + 839 + ] + }, + { + "teal": 661, + "source": 346, + "pc": [ + 840, + 841 + ] + }, + { + "teal": 662, + "source": 346, + "pc": [ + 842, + 843 + ] + }, + { + "teal": 663, + "source": 346, + "pc": [ + 844, + 845, + 846 + ] + }, + { + "teal": 664, + "source": 346, + "pc": [ + 847 + ] + }, + { + "teal": 665, + "source": 346, + "pc": [ + 848 + ] + }, + { + "teal": 666, + "source": 346, + "pc": [ + 849 + ] + }, + { + "teal": 667, + "source": 346, + "pc": [ + 850, + 851 + ] + }, + { + "teal": 668, + "source": 346, + "pc": [ + 852 + ] + }, + { + "teal": 669, + "source": 346, + "pc": [ + 853 + ] + }, + { + "teal": 670, + "source": 346, + "pc": [ + 854, + 855 + ] + }, + { + "teal": 671, + "source": 346, + "pc": [ + 856 + ] + }, + { + "teal": 672, + "source": 346, + "pc": [ + 857, + 858 + ] + }, + { + "teal": 673, + "source": 346, + "pc": [ + 859, + 860, + 861 + ] + }, + { + "teal": 674, + "source": 346, + "pc": [ + 862 + ] + }, + { + "teal": 675, + "source": 346, + "pc": [ + 863 + ] + }, + { + "teal": 676, + "source": 346, + "pc": [ + 864 + ] + }, + { + "teal": 677, + "source": 346, + "pc": [ + 865, + 866 + ] + }, + { + "teal": 678, + "source": 346, + "pc": [ + 867 + ] + }, + { + "teal": 679, + "source": 345, + "pc": [ + 868 + ] + }, + { + "teal": 684, + "source": 356, + "pc": [ + 869 + ] + }, + { + "teal": 687, + "source": 356, + "pc": [ + 870, + 871, + 872 + ] + }, + { + "teal": 688, + "source": 356, + "pc": [ + 873 + ] + }, + { + "teal": 691, + "source": 356, + "pc": [ + 874, + 875, + 876 + ] + }, + { + "teal": 692, + "source": 356, + "pc": [ + 877 + ] + }, + { + "teal": 693, + "source": 356, + "pc": [ + 878 + ] + }, + { + "teal": 694, + "source": 356, + "pc": [ + 879 + ] + }, + { + "teal": 695, + "source": 356, + "pc": [ + 880 + ] + }, + { + "teal": 696, + "source": 356, + "pc": [ + 881 + ] + }, + { + "teal": 706, + "source": 356, + "pc": [ + 882, + 883, + 884 + ] + }, + { + "teal": 709, + "source": 356, + "pc": [ + 885 + ] + }, + { + "teal": 710, + "source": 356, + "pc": [ + 886, + 887 + ] + }, + { + "teal": 714, + "source": 357, + "pc": [ + 888, + 889 + ] + }, + { + "teal": 715, + "source": 357, + "pc": [ + 890, + 891 + ] + }, + { + "teal": 716, + "source": 357, + "pc": [ + 892 + ] + }, + { + "teal": 717, + "source": 357, + "pc": [ + 893, + 894 + ] + }, + { + "teal": 718, + "source": 357, + "pc": [ + 895 + ] + }, + { + "teal": 719, + "source": 357, + "pc": [ + 896 + ] + }, + { + "teal": 720, + "source": 357, + "pc": [ + 897, + 898 + ] + }, + { + "teal": 721, + "source": 357, + "pc": [ + 899 + ] + }, + { + "teal": 722, + "source": 357, + "pc": [ + 900 + ] + }, + { + "teal": 723, + "source": 357, + "pc": [ + 901, + 902 + ] + }, + { + "teal": 727, + "source": 358, + "pc": [ + 903, + 904, + 905 + ] + }, + { + "teal": 728, + "source": 358, + "pc": [ + 906, + 907 + ] + }, + { + "teal": 729, + "source": 358, + "pc": [ + 908 + ] + }, + { + "teal": 730, + "source": 358, + "pc": [ + 909, + 910 + ] + }, + { + "teal": 734, + "source": 359, + "pc": [ + 911, + 912, + 913 + ] + }, + { + "teal": 735, + "source": 359, + "pc": [ + 914 + ] + }, + { + "teal": 736, + "source": 359, + "pc": [ + 915 + ] + }, + { + "teal": 737, + "source": 359, + "pc": [ + 916, + 917 + ] + }, + { + "teal": 738, + "source": 359, + "pc": [ + 918 + ] + }, + { + "teal": 739, + "source": 359, + "pc": [ + 919 + ] + }, + { + "teal": 740, + "source": 359, + "pc": [ + 920, + 921 + ] + }, + { + "teal": 741, + "source": 359, + "pc": [ + 922 + ] + }, + { + "teal": 742, + "source": 359, + "pc": [ + 923 + ] + }, + { + "teal": 743, + "source": 359, + "pc": [ + 924, + 925 + ] + }, + { + "teal": 748, + "source": 360, + "pc": [ + 926, + 927 + ] + }, + { + "teal": 749, + "source": 360, + "pc": [ + 928 + ] + }, + { + "teal": 750, + "source": 360, + "pc": [ + 929 + ] + }, + { + "teal": 751, + "source": 360, + "pc": [ + 930, + 931, + 932 + ] + }, + { + "teal": 756, + "source": 361, + "pc": [ + 933, + 934, + 935 + ] + }, + { + "teal": 757, + "source": 361, + "pc": [ + 936, + 937 + ] + }, + { + "teal": 763, + "source": 363, + "pc": [ + 938, + 939 + ] + }, + { + "teal": 764, + "source": 363, + "pc": [ + 940, + 941 + ] + }, + { + "teal": 765, + "source": 363, + "pc": [ + 942 + ] + }, + { + "teal": 766, + "source": 363, + "pc": [ + 943, + 944, + 945 + ] + }, + { + "teal": 771, + "source": 364, + "pc": [ + 946, + 947 + ] + }, + { + "teal": 772, + "source": 364, + "pc": [ + 948, + 949 + ] + }, + { + "teal": 777, + "source": 366, + "pc": [ + 950, + 951 + ] + }, + { + "teal": 780, + "source": 356, + "pc": [ + 952, + 953 + ] + }, + { + "teal": 783, + "source": 356, + "pc": [ + 954, + 955 + ] + }, + { + "teal": 784, + "source": 356, + "pc": [ + 956 + ] + }, + { + "teal": 789, + "source": 374, + "pc": [ + 957 + ] + }, + { + "teal": 792, + "source": 374, + "pc": [ + 958, + 959, + 960 + ] + }, + { + "teal": 793, + "source": 374, + "pc": [ + 961 + ] + }, + { + "teal": 794, + "source": 374, + "pc": [ + 962 + ] + }, + { + "teal": 795, + "source": 374, + "pc": [ + 963, + 964 + ] + }, + { + "teal": 796, + "source": 374, + "pc": [ + 965 + ] + }, + { + "teal": 799, + "source": 374, + "errorMessage": "argument 0 (staker) for doesStakerNeedToPayMBR must be a address", + "pc": [ + 966 + ] + }, + { + "teal": 802, + "source": 374, + "pc": [ + 967, + 968, + 969 + ] + }, + { + "teal": 803, + "source": 374, + "pc": [ + 970, + 971 + ] + }, + { + "teal": 804, + "source": 374, + "pc": [ + 972 + ] + }, + { + "teal": 805, + "source": 374, + "pc": [ + 973, + 974 + ] + }, + { + "teal": 806, + "source": 374, + "pc": [ + 975 + ] + }, + { + "teal": 807, + "source": 374, + "pc": [ + 976 + ] + }, + { + "teal": 808, + "source": 374, + "pc": [ + 977 + ] + }, + { + "teal": 809, + "source": 374, + "pc": [ + 978 + ] + }, + { + "teal": 810, + "source": 374, + "pc": [ + 979 + ] + }, + { + "teal": 817, + "source": 374, + "pc": [ + 980, + 981, + 982 + ] + }, + { + "teal": 821, + "source": 375, + "pc": [ + 983 + ] + }, + { + "teal": 822, + "source": 375, + "pc": [ + 984, + 985 + ] + }, + { + "teal": 823, + "source": 375, + "pc": [ + 986 + ] + }, + { + "teal": 824, + "source": 375, + "pc": [ + 987 + ] + }, + { + "teal": 825, + "source": 375, + "pc": [ + 988 + ] + }, + { + "teal": 826, + "source": 375, + "pc": [ + 989 + ] + }, + { + "teal": 827, + "source": 375, + "pc": [ + 990 + ] + }, + { + "teal": 828, + "source": 374, + "pc": [ + 991 + ] + }, + { + "teal": 833, + "source": 384, + "pc": [ + 992 + ] + }, + { + "teal": 836, + "source": 384, + "pc": [ + 993, + 994, + 995 + ] + }, + { + "teal": 837, + "source": 384, + "pc": [ + 996 + ] + }, + { + "teal": 838, + "source": 384, + "pc": [ + 997 + ] + }, + { + "teal": 839, + "source": 384, + "pc": [ + 998, + 999 + ] + }, + { + "teal": 840, + "source": 384, + "pc": [ + 1000 + ] + }, + { + "teal": 843, + "source": 384, + "errorMessage": "argument 0 (staker) for getStakedPoolsForAccount must be a address", + "pc": [ + 1001 + ] + }, + { + "teal": 846, + "source": 384, + "pc": [ + 1002, + 1003, + 1004 + ] + }, + { + "teal": 847, + "source": 384, + "pc": [ + 1005 + ] + }, + { + "teal": 848, + "source": 384, + "pc": [ + 1006 + ] + }, + { + "teal": 849, + "source": 384, + "pc": [ + 1007 + ] + }, + { + "teal": 850, + "source": 384, + "pc": [ + 1008 + ] + }, + { + "teal": 851, + "source": 384, + "pc": [ + 1009 + ] + }, + { + "teal": 852, + "source": 384, + "pc": [ + 1010, + 1011, + 1012 + ] + }, + { + "teal": 853, + "source": 384, + "pc": [ + 1013 + ] + }, + { + "teal": 854, + "source": 384, + "pc": [ + 1014 + ] + }, + { + "teal": 855, + "source": 384, + "pc": [ + 1015 + ] + }, + { + "teal": 856, + "source": 384, + "pc": [ + 1016 + ] + }, + { + "teal": 857, + "source": 384, + "pc": [ + 1017 + ] + }, + { + "teal": 858, + "source": 384, + "pc": [ + 1018 + ] + }, + { + "teal": 867, + "source": 384, + "pc": [ + 1019, + 1020, + 1021 + ] + }, + { + "teal": 870, + "source": 384, + "pc": [ + 1022 + ] + }, + { + "teal": 871, + "source": 384, + "pc": [ + 1023, + 1024 + ] + }, + { + "teal": 876, + "source": 385, + "pc": [ + 1025 + ] + }, + { + "teal": 877, + "source": 385, + "pc": [ + 1026, + 1027 + ] + }, + { + "teal": 878, + "source": 385, + "pc": [ + 1028 + ] + }, + { + "teal": 879, + "source": 385, + "pc": [ + 1029 + ] + }, + { + "teal": 880, + "source": 385, + "pc": [ + 1030 + ] + }, + { + "teal": 881, + "source": 385, + "pc": [ + 1031 + ] + }, + { + "teal": 882, + "source": 385, + "pc": [ + 1032 + ] + }, + { + "teal": 883, + "source": 385, + "pc": [ + 1033, + 1034, + 1035 + ] + }, + { + "teal": 888, + "source": 386, + "pc": [ + 1036 + ] + }, + { + "teal": 889, + "source": 386, + "pc": [ + 1037, + 1038, + 1039 + ] + }, + { + "teal": 894, + "source": 388, + "pc": [ + 1040 + ] + }, + { + "teal": 895, + "source": 388, + "pc": [ + 1041, + 1042 + ] + }, + { + "teal": 899, + "source": 389, + "pc": [ + 1043 + ] + }, + { + "teal": 900, + "source": 389, + "pc": [ + 1044, + 1045 + ] + }, + { + "teal": 901, + "source": 389, + "pc": [ + 1046 + ] + }, + { + "teal": 902, + "source": 389, + "pc": [ + 1047 + ] + }, + { + "teal": 905, + "source": 389, + "errorMessage": "box value does not exist: this.stakerPoolSet(staker).value", + "pc": [ + 1048 + ] + }, + { + "teal": 906, + "source": 389, + "pc": [ + 1049, + 1050 + ] + }, + { + "teal": 910, + "source": 390, + "pc": [ + 1051 + ] + }, + { + "teal": 911, + "source": 390, + "pc": [ + 1052, + 1053 + ] + }, + { + "teal": 916, + "source": 390, + "pc": [ + 1054, + 1055 + ] + }, + { + "teal": 917, + "source": 390, + "pc": [ + 1056, + 1057 + ] + }, + { + "teal": 918, + "source": 390, + "pc": [ + 1058 + ] + }, + { + "teal": 919, + "source": 390, + "pc": [ + 1059, + 1060, + 1061 + ] + }, + { + "teal": 924, + "source": 391, + "pc": [ + 1062, + 1063 + ] + }, + { + "teal": 925, + "source": 391, + "pc": [ + 1064, + 1065 + ] + }, + { + "teal": 926, + "source": 391, + "pc": [ + 1066 + ] + }, + { + "teal": 927, + "source": 391, + "pc": [ + 1067 + ] + }, + { + "teal": 928, + "source": 391, + "pc": [ + 1068 + ] + }, + { + "teal": 929, + "source": 391, + "pc": [ + 1069 + ] + }, + { + "teal": 930, + "source": 391, + "pc": [ + 1070 + ] + }, + { + "teal": 931, + "source": 391, + "pc": [ + 1071 + ] + }, + { + "teal": 932, + "source": 391, + "pc": [ + 1072 + ] + }, + { + "teal": 933, + "source": 391, + "pc": [ + 1073 + ] + }, + { + "teal": 934, + "source": 391, + "pc": [ + 1074 + ] + }, + { + "teal": 935, + "source": 391, + "pc": [ + 1075, + 1076, + 1077 + ] + }, + { + "teal": 940, + "source": 392, + "pc": [ + 1078, + 1079 + ] + }, + { + "teal": 941, + "source": 392, + "pc": [ + 1080, + 1081 + ] + }, + { + "teal": 942, + "source": 392, + "pc": [ + 1082, + 1083 + ] + }, + { + "teal": 943, + "source": 392, + "pc": [ + 1084 + ] + }, + { + "teal": 944, + "source": 392, + "pc": [ + 1085 + ] + }, + { + "teal": 945, + "source": 392, + "pc": [ + 1086 + ] + }, + { + "teal": 946, + "source": 392, + "pc": [ + 1087 + ] + }, + { + "teal": 947, + "source": 392, + "pc": [ + 1088 + ] + }, + { + "teal": 948, + "source": 392, + "pc": [ + 1089, + 1090 + ] + }, + { + "teal": 955, + "source": 390, + "pc": [ + 1091, + 1092 + ] + }, + { + "teal": 956, + "source": 390, + "pc": [ + 1093 + ] + }, + { + "teal": 957, + "source": 390, + "pc": [ + 1094 + ] + }, + { + "teal": 958, + "source": 390, + "pc": [ + 1095, + 1096 + ] + }, + { + "teal": 959, + "source": 390, + "pc": [ + 1097, + 1098, + 1099 + ] + }, + { + "teal": 964, + "source": 395, + "pc": [ + 1100, + 1101 + ] + }, + { + "teal": 968, + "source": 384, + "pc": [ + 1102, + 1103 + ] + }, + { + "teal": 971, + "source": 384, + "pc": [ + 1104, + 1105 + ] + }, + { + "teal": 972, + "source": 384, + "pc": [ + 1106 + ] + }, + { + "teal": 977, + "source": 406, + "pc": [ + 1107 + ] + }, + { + "teal": 980, + "source": 406, + "pc": [ + 1108, + 1109, + 1110 + ] + }, + { + "teal": 981, + "source": 406, + "pc": [ + 1111 + ] + }, + { + "teal": 984, + "source": 406, + "pc": [ + 1112, + 1113, + 1114 + ] + }, + { + "teal": 985, + "source": 406, + "pc": [ + 1115 + ] + }, + { + "teal": 986, + "source": 406, + "pc": [ + 1116 + ] + }, + { + "teal": 987, + "source": 406, + "pc": [ + 1117 + ] + }, + { + "teal": 988, + "source": 406, + "pc": [ + 1118 + ] + }, + { + "teal": 998, + "source": 406, + "pc": [ + 1119, + 1120, + 1121 + ] + }, + { + "teal": 1002, + "source": 407, + "pc": [ + 1122, + 1123 + ] + }, + { + "teal": 1003, + "source": 407, + "pc": [ + 1124, + 1125 + ] + }, + { + "teal": 1004, + "source": 407, + "pc": [ + 1126 + ] + }, + { + "teal": 1005, + "source": 407, + "pc": [ + 1127, + 1128 + ] + }, + { + "teal": 1006, + "source": 407, + "pc": [ + 1129 + ] + }, + { + "teal": 1007, + "source": 407, + "pc": [ + 1130 + ] + }, + { + "teal": 1008, + "source": 407, + "pc": [ + 1131, + 1132 + ] + }, + { + "teal": 1009, + "source": 407, + "pc": [ + 1133 + ] + }, + { + "teal": 1010, + "source": 406, + "pc": [ + 1134 + ] + }, + { + "teal": 1015, + "source": 411, + "pc": [ + 1135 + ] + }, + { + "teal": 1018, + "source": 411, + "pc": [ + 1136, + 1137, + 1138 + ] + }, + { + "teal": 1019, + "source": 411, + "pc": [ + 1139 + ] + }, + { + "teal": 1022, + "source": 411, + "pc": [ + 1140, + 1141, + 1142 + ] + }, + { + "teal": 1023, + "source": 411, + "pc": [ + 1143 + ] + }, + { + "teal": 1024, + "source": 411, + "pc": [ + 1144 + ] + }, + { + "teal": 1025, + "source": 411, + "pc": [ + 1145 + ] + }, + { + "teal": 1026, + "source": 411, + "pc": [ + 1146 + ] + }, + { + "teal": 1030, + "source": 411, + "pc": [ + 1147, + 1148, + 1149 + ] + }, + { + "teal": 1034, + "source": 412, + "pc": [ + 1150 + ] + }, + { + "teal": 1035, + "source": 412, + "pc": [ + 1151, + 1152 + ] + }, + { + "teal": 1036, + "source": 412, + "pc": [ + 1153 + ] + }, + { + "teal": 1037, + "source": 412, + "pc": [ + 1154 + ] + }, + { + "teal": 1038, + "source": 412, + "pc": [ + 1155 + ] + }, + { + "teal": 1039, + "source": 412, + "pc": [ + 1156 + ] + }, + { + "teal": 1040, + "source": 412, + "pc": [ + 1157 + ] + }, + { + "teal": 1043, + "source": 412, + "errorMessage": "the specified validator id doesn't exist", + "pc": [ + 1158 + ] + }, + { + "teal": 1047, + "source": 414, + "pc": [ + 1159, + 1160 + ] + }, + { + "teal": 1048, + "source": 414, + "pc": [ + 1161, + 1162 + ] + }, + { + "teal": 1049, + "source": 414, + "pc": [ + 1163 + ] + }, + { + "teal": 1050, + "source": 414, + "pc": [ + 1164, + 1165 + ] + }, + { + "teal": 1051, + "source": 414, + "pc": [ + 1166 + ] + }, + { + "teal": 1052, + "source": 414, + "pc": [ + 1167 + ] + }, + { + "teal": 1053, + "source": 414, + "pc": [ + 1168, + 1169 + ] + }, + { + "teal": 1054, + "source": 414, + "pc": [ + 1170 + ] + }, + { + "teal": 1055, + "source": 411, + "pc": [ + 1171 + ] + }, + { + "teal": 1060, + "source": 417, + "pc": [ + 1172 + ] + }, + { + "teal": 1063, + "source": 417, + "pc": [ + 1173, + 1174, + 1175 + ] + }, + { + "teal": 1064, + "source": 417, + "pc": [ + 1176 + ] + }, + { + "teal": 1065, + "source": 417, + "pc": [ + 1177 + ] + }, + { + "teal": 1066, + "source": 417, + "pc": [ + 1178 + ] + }, + { + "teal": 1067, + "source": 417, + "pc": [ + 1179 + ] + }, + { + "teal": 1068, + "source": 417, + "pc": [ + 1180 + ] + }, + { + "teal": 1072, + "source": 417, + "pc": [ + 1181, + 1182, + 1183 + ] + }, + { + "teal": 1076, + "source": 418, + "pc": [ + 1184, + 1185 + ] + }, + { + "teal": 1077, + "source": 417, + "pc": [ + 1186 + ] + }, + { + "teal": 1082, + "source": 429, + "pc": [ + 1187 + ] + }, + { + "teal": 1085, + "source": 429, + "pc": [ + 1188, + 1189, + 1190 + ] + }, + { + "teal": 1086, + "source": 429, + "pc": [ + 1191 + ] + }, + { + "teal": 1087, + "source": 429, + "pc": [ + 1192 + ] + }, + { + "teal": 1088, + "source": 429, + "pc": [ + 1193, + 1194 + ] + }, + { + "teal": 1089, + "source": 429, + "pc": [ + 1195 + ] + }, + { + "teal": 1092, + "source": 429, + "errorMessage": "argument 0 (config) for addValidator must be a (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)", + "pc": [ + 1196 + ] + }, + { + "teal": 1095, + "source": 429, + "pc": [ + 1197, + 1198, + 1199 + ] + }, + { + "teal": 1096, + "source": 429, + "pc": [ + 1200, + 1201, + 1202 + ] + }, + { + "teal": 1099, + "source": 429, + "pc": [ + 1203, + 1204 + ] + }, + { + "teal": 1100, + "source": 429, + "pc": [ + 1205 + ] + }, + { + "teal": 1101, + "source": 429, + "pc": [ + 1206 + ] + }, + { + "teal": 1102, + "source": 429, + "pc": [ + 1207 + ] + }, + { + "teal": 1103, + "source": 429, + "pc": [ + 1208, + 1209 + ] + }, + { + "teal": 1104, + "source": 429, + "pc": [ + 1210 + ] + }, + { + "teal": 1105, + "source": 429, + "pc": [ + 1211 + ] + }, + { + "teal": 1108, + "source": 429, + "errorMessage": "argument 2 (mbrPayment) for addValidator must be a pay transaction", + "pc": [ + 1212 + ] + }, + { + "teal": 1111, + "source": 429, + "pc": [ + 1213, + 1214, + 1215 + ] + }, + { + "teal": 1112, + "source": 429, + "pc": [ + 1216 + ] + }, + { + "teal": 1113, + "source": 429, + "pc": [ + 1217 + ] + }, + { + "teal": 1114, + "source": 429, + "pc": [ + 1218 + ] + }, + { + "teal": 1115, + "source": 429, + "pc": [ + 1219 + ] + }, + { + "teal": 1116, + "source": 429, + "pc": [ + 1220 + ] + }, + { + "teal": 1128, + "source": 429, + "pc": [ + 1221, + 1222, + 1223 + ] + }, + { + "teal": 1131, + "source": 429, + "pc": [ + 1224 + ] + }, + { + "teal": 1135, + "source": 430, + "pc": [ + 1225, + 1226 + ] + }, + { + "teal": 1136, + "source": 430, + "pc": [ + 1227, + 1228, + 1229 + ] + }, + { + "teal": 1140, + "source": 431, + "pc": [ + 1230, + 1231 + ] + }, + { + "teal": 1141, + "source": 431, + "pc": [ + 1232, + 1233, + 1234 + ] + }, + { + "teal": 1142, + "source": 431, + "pc": [ + 1235, + 1236 + ] + }, + { + "teal": 1143, + "source": 431, + "pc": [ + 1237 + ] + }, + { + "teal": 1144, + "source": 431, + "pc": [ + 1238 + ] + }, + { + "teal": 1148, + "source": 432, + "pc": [ + 1239, + 1240 + ] + }, + { + "teal": 1149, + "source": 432, + "pc": [ + 1241, + 1242, + 1243 + ] + }, + { + "teal": 1150, + "source": 432, + "pc": [ + 1244, + 1245 + ] + }, + { + "teal": 1151, + "source": 432, + "pc": [ + 1246 + ] + }, + { + "teal": 1152, + "source": 432, + "pc": [ + 1247 + ] + }, + { + "teal": 1156, + "source": 433, + "pc": [ + 1248, + 1249 + ] + }, + { + "teal": 1157, + "source": 433, + "pc": [ + 1250, + 1251 + ] + }, + { + "teal": 1158, + "source": 433, + "pc": [ + 1252, + 1253, + 1254 + ] + }, + { + "teal": 1159, + "source": 433, + "pc": [ + 1255 + ] + }, + { + "teal": 1162, + "source": 433, + "errorMessage": "sender must be owner to add new validator", + "pc": [ + 1256 + ] + }, + { + "teal": 1167, + "source": 435, + "pc": [ + 1257, + 1258 + ] + }, + { + "teal": 1168, + "source": 435, + "pc": [ + 1259, + 1260 + ] + }, + { + "teal": 1169, + "source": 435, + "pc": [ + 1261, + 1262 + ] + }, + { + "teal": 1170, + "source": 435, + "pc": [ + 1263 + ] + }, + { + "teal": 1173, + "source": 435, + "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", + "pc": [ + 1264 + ] + }, + { + "teal": 1176, + "source": 435, + "pc": [ + 1265, + 1266 + ] + }, + { + "teal": 1177, + "source": 435, + "pc": [ + 1267, + 1268 + ] + }, + { + "teal": 1178, + "source": 435, + "pc": [ + 1269, + 1270, + 1271 + ] + }, + { + "teal": 1179, + "source": 435, + "pc": [ + 1272, + 1273, + 1274 + ] + }, + { + "teal": 1180, + "source": 435, + "pc": [ + 1275 + ] + }, + { + "teal": 1181, + "source": 435, + "pc": [ + 1276 + ] + }, + { + "teal": 1184, + "source": 435, + "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"amount\",\"expected\":\"this.getMbrAmounts().addValidatorMbr\"}", + "pc": [ + 1277 + ] + }, + { + "teal": 1188, + "source": 437, + "pc": [ + 1278, + 1279 + ] + }, + { + "teal": 1189, + "source": 437, + "pc": [ + 1280, + 1281 + ] + }, + { + "teal": 1190, + "source": 437, + "pc": [ + 1282, + 1283, + 1284, + 1285, + 1286 + ] + }, + { + "teal": 1191, + "source": 437, + "pc": [ + 1287 + ] + }, + { + "teal": 1194, + "source": 437, + "errorMessage": "fee must be 10 ALGO or more to prevent spamming of validators", + "pc": [ + 1288 + ] + }, + { + "teal": 1198, + "source": 440, + "pc": [ + 1289, + 1290 + ] + }, + { + "teal": 1199, + "source": 440, + "pc": [ + 1291 + ] + }, + { + "teal": 1200, + "source": 440, + "pc": [ + 1292 + ] + }, + { + "teal": 1201, + "source": 440, + "pc": [ + 1293 + ] + }, + { + "teal": 1202, + "source": 440, + "pc": [ + 1294, + 1295 + ] + }, + { + "teal": 1206, + "source": 441, + "pc": [ + 1296, + 1297 + ] + }, + { + "teal": 1207, + "source": 441, + "pc": [ + 1298, + 1299 + ] + }, + { + "teal": 1208, + "source": 441, + "pc": [ + 1300 + ] + }, + { + "teal": 1212, + "source": 443, + "pc": [ + 1301 + ] + }, + { + "teal": 1213, + "source": 443, + "pc": [ + 1302, + 1303 + ] + }, + { + "teal": 1214, + "source": 443, + "pc": [ + 1304 + ] + }, + { + "teal": 1215, + "source": 443, + "pc": [ + 1305 + ] + }, + { + "teal": 1216, + "source": 443, + "pc": [ + 1306, + 1307, + 1308 + ] + }, + { + "teal": 1217, + "source": 443, + "pc": [ + 1309 + ] + }, + { + "teal": 1218, + "source": 443, + "pc": [ + 1310 + ] + }, + { + "teal": 1222, + "source": 444, + "pc": [ + 1311 + ] + }, + { + "teal": 1223, + "source": 444, + "pc": [ + 1312, + 1313 + ] + }, + { + "teal": 1224, + "source": 444, + "pc": [ + 1314 + ] + }, + { + "teal": 1225, + "source": 444, + "pc": [ + 1315, + 1316 + ] + }, + { + "teal": 1226, + "source": 444, + "pc": [ + 1317 + ] + }, + { + "teal": 1227, + "source": 444, + "pc": [ + 1318 + ] + }, + { + "teal": 1228, + "source": 444, + "pc": [ + 1319, + 1320 + ] + }, + { + "teal": 1229, + "source": 444, + "pc": [ + 1321 + ] + }, + { + "teal": 1233, + "source": 445, + "pc": [ + 1322 + ] + }, + { + "teal": 1234, + "source": 445, + "pc": [ + 1323, + 1324 + ] + }, + { + "teal": 1235, + "source": 445, + "pc": [ + 1325 + ] + }, + { + "teal": 1236, + "source": 445, + "pc": [ + 1326 + ] + }, + { + "teal": 1237, + "source": 445, + "pc": [ + 1327, + 1328 + ] + }, + { + "teal": 1238, + "source": 445, + "pc": [ + 1329 + ] + }, + { + "teal": 1239, + "source": 445, + "pc": [ + 1330 + ] + }, + { + "teal": 1240, + "source": 445, + "pc": [ + 1331, + 1332 + ] + }, + { + "teal": 1241, + "source": 445, + "pc": [ + 1333 + ] + }, + { + "teal": 1246, + "source": 448, + "pc": [ + 1334, + 1335 + ] + }, + { + "teal": 1247, + "source": 448, + "pc": [ + 1336, + 1337, + 1338 + ] + }, + { + "teal": 1248, + "source": 448, + "pc": [ + 1339 + ] + }, + { + "teal": 1249, + "source": 448, + "pc": [ + 1340 + ] + }, + { + "teal": 1250, + "source": 448, + "pc": [ + 1341 + ] + }, + { + "teal": 1251, + "source": 448, + "pc": [ + 1342, + 1343, + 1344 + ] + }, + { + "teal": 1260, + "source": 450, + "pc": [ + 1345 + ] + }, + { + "teal": 1261, + "source": 450, + "pc": [ + 1346, + 1347 + ] + }, + { + "teal": 1262, + "source": 450, + "pc": [ + 1348, + 1349 + ] + }, + { + "teal": 1266, + "source": 451, + "pc": [ + 1350, + 1351 + ] + }, + { + "teal": 1267, + "source": 451, + "pc": [ + 1352, + 1353 + ] + }, + { + "teal": 1271, + "source": 452, + "pc": [ + 1354, + 1355 + ] + }, + { + "teal": 1272, + "source": 452, + "pc": [ + 1356, + 1357 + ] + }, + { + "teal": 1273, + "source": 452, + "pc": [ + 1358, + 1359 + ] + }, + { + "teal": 1274, + "source": 452, + "pc": [ + 1360, + 1361 + ] + }, + { + "teal": 1275, + "source": 452, + "pc": [ + 1362, + 1363 + ] + }, + { + "teal": 1276, + "source": 452, + "pc": [ + 1364, + 1365, + 1366 + ] + }, + { + "teal": 1277, + "source": 452, + "pc": [ + 1367 + ] + }, + { + "teal": 1278, + "source": 452, + "pc": [ + 1368 + ] + }, + { + "teal": 1279, + "source": 452, + "pc": [ + 1369, + 1370 + ] + }, + { + "teal": 1283, + "source": 453, + "pc": [ + 1371, + 1372 + ] + }, + { + "teal": 1284, + "source": 453, + "pc": [ + 1373, + 1374, + 1375 + ] + }, + { + "teal": 1285, + "source": 453, + "pc": [ + 1376 + ] + }, + { + "teal": 1286, + "source": 453, + "pc": [ + 1377, + 1378 + ] + }, + { + "teal": 1289, + "source": 450, + "pc": [ + 1379 + ] + }, + { + "teal": 1290, + "source": 450, + "pc": [ + 1380, + 1381 + ] + }, + { + "teal": 1293, + "source": 450, + "pc": [ + 1382 + ] + }, + { + "teal": 1297, + "source": 455, + "pc": [ + 1383, + 1384 + ] + }, + { + "teal": 1298, + "source": 455, + "pc": [ + 1385 + ] + }, + { + "teal": 1299, + "source": 455, + "pc": [ + 1386 + ] + }, + { + "teal": 1300, + "source": 455, + "pc": [ + 1387 + ] + }, + { + "teal": 1303, + "source": 455, + "errorMessage": "provided NFD isn't valid", + "pc": [ + 1388 + ] + }, + { + "teal": 1310, + "source": 458, + "pc": [ + 1389, + 1390 + ] + }, + { + "teal": 1311, + "source": 458, + "pc": [ + 1391, + 1392 + ] + }, + { + "teal": 1312, + "source": 458, + "pc": [ + 1393, + 1394, + 1395 + ] + }, + { + "teal": 1313, + "source": 458, + "pc": [ + 1396 + ] + }, + { + "teal": 1314, + "source": 458, + "pc": [ + 1397, + 1398 + ] + }, + { + "teal": 1315, + "source": 458, + "pc": [ + 1399 + ] + }, + { + "teal": 1318, + "source": 458, + "errorMessage": "global state value does not exist: AppID.fromUint64(config.nfdForInfo).globalState('i.owner.a')", + "pc": [ + 1400 + ] + }, + { + "teal": 1319, + "source": 458, + "pc": [ + 1401 + ] + }, + { + "teal": 1322, + "source": 457, + "errorMessage": "If specifying NFD, account adding validator must be owner", + "pc": [ + 1402 + ] + }, + { + "teal": 1329, + "source": 463, + "pc": [ + 1403, + 1404 + ] + }, + { + "teal": 1330, + "source": 463, + "pc": [ + 1405, + 1406, + 1407 + ] + }, + { + "teal": 1331, + "source": 463, + "pc": [ + 1408 + ] + }, + { + "teal": 1332, + "source": 463, + "pc": [ + 1409, + 1410 + ] + }, + { + "teal": 1333, + "source": 463, + "pc": [ + 1411 + ] + }, + { + "teal": 1334, + "source": 463, + "pc": [ + 1412 + ] + }, + { + "teal": 1335, + "source": 463, + "pc": [ + 1413, + 1414, + 1415 + ] + }, + { + "teal": 1336, + "source": 464, + "pc": [ + 1416, + 1417 + ] + }, + { + "teal": 1337, + "source": 464, + "pc": [ + 1418, + 1419, + 1420 + ] + }, + { + "teal": 1338, + "source": 464, + "pc": [ + 1421 + ] + }, + { + "teal": 1339, + "source": 464, + "pc": [ + 1422, + 1423 + ] + }, + { + "teal": 1340, + "source": 464, + "pc": [ + 1424 + ] + }, + { + "teal": 1341, + "source": 463, + "pc": [ + 1425 + ] + }, + { + "teal": 1344, + "source": 462, + "pc": [ + 1426, + 1427, + 1428 + ] + }, + { + "teal": 1352, + "source": 468, + "pc": [ + 1429, + 1430 + ] + }, + { + "teal": 1353, + "source": 468, + "pc": [ + 1431, + 1432, + 1433 + ] + }, + { + "teal": 1354, + "source": 468, + "pc": [ + 1434 + ] + }, + { + "teal": 1355, + "source": 468, + "pc": [ + 1435, + 1436, + 1437 + ] + }, + { + "teal": 1358, + "source": 467, + "errorMessage": "provided NFD App id for gating must be valid NFD", + "pc": [ + 1438 + ] + }, + { + "teal": 1363, + "source": 473, + "pc": [ + 1439, + 1440 + ] + }, + { + "teal": 1366, + "source": 429, + "pc": [ + 1441, + 1442 + ] + }, + { + "teal": 1367, + "source": 429, + "pc": [ + 1443 + ] + }, + { + "teal": 1372, + "source": 483, + "pc": [ + 1444, + 1445, + 1446 + ] + }, + { + "teal": 1373, + "source": 483, + "pc": [ + 1447 + ] + }, + { + "teal": 1374, + "source": 483, + "pc": [ + 1448 + ] + }, + { + "teal": 1375, + "source": 483, + "pc": [ + 1449, + 1450 + ] + }, + { + "teal": 1376, + "source": 483, + "pc": [ + 1451 + ] + }, + { + "teal": 1379, + "source": 483, + "errorMessage": "argument 0 (manager) for changeValidatorManager must be a address", + "pc": [ + 1452 + ] + }, + { + "teal": 1382, + "source": 483, + "pc": [ + 1453, + 1454, + 1455 + ] + }, + { + "teal": 1383, + "source": 483, + "pc": [ + 1456 + ] + }, + { + "teal": 1386, + "source": 483, + "pc": [ + 1457, + 1458, + 1459 + ] + }, + { + "teal": 1387, + "source": 483, + "pc": [ + 1460 + ] + }, + { + "teal": 1388, + "source": 483, + "pc": [ + 1461 + ] + }, + { + "teal": 1398, + "source": 483, + "pc": [ + 1462, + 1463, + 1464 + ] + }, + { + "teal": 1405, + "source": 485, + "pc": [ + 1465, + 1466 + ] + }, + { + "teal": 1406, + "source": 485, + "pc": [ + 1467 + ] + }, + { + "teal": 1407, + "source": 485, + "pc": [ + 1468, + 1469 + ] + }, + { + "teal": 1408, + "source": 485, + "pc": [ + 1470 + ] + }, + { + "teal": 1409, + "source": 485, + "pc": [ + 1471, + 1472 + ] + }, + { + "teal": 1410, + "source": 485, + "pc": [ + 1473 + ] + }, + { + "teal": 1411, + "source": 485, + "pc": [ + 1474 + ] + }, + { + "teal": 1412, + "source": 485, + "pc": [ + 1475, + 1476 + ] + }, + { + "teal": 1413, + "source": 485, + "pc": [ + 1477 + ] + }, + { + "teal": 1414, + "source": 485, + "pc": [ + 1478 + ] + }, + { + "teal": 1417, + "source": 484, + "errorMessage": "can only be called by validator owner", + "pc": [ + 1479 + ] + }, + { + "teal": 1421, + "source": 488, + "pc": [ + 1480, + 1481 + ] + }, + { + "teal": 1422, + "source": 488, + "pc": [ + 1482, + 1483 + ] + }, + { + "teal": 1423, + "source": 488, + "pc": [ + 1484 + ] + }, + { + "teal": 1424, + "source": 488, + "pc": [ + 1485, + 1486 + ] + }, + { + "teal": 1425, + "source": 488, + "pc": [ + 1487 + ] + }, + { + "teal": 1426, + "source": 488, + "pc": [ + 1488 + ] + }, + { + "teal": 1427, + "source": 488, + "pc": [ + 1489, + 1490 + ] + }, + { + "teal": 1428, + "source": 488, + "pc": [ + 1491 + ] + }, + { + "teal": 1429, + "source": 483, + "pc": [ + 1492 + ] + }, + { + "teal": 1434, + "source": 499, + "pc": [ + 1493, + 1494, + 1495 + ] + }, + { + "teal": 1435, + "source": 499, + "pc": [ + 1496 + ] + }, + { + "teal": 1438, + "source": 499, + "pc": [ + 1497, + 1498, + 1499 + ] + }, + { + "teal": 1439, + "source": 499, + "pc": [ + 1500 + ] + }, + { + "teal": 1442, + "source": 499, + "pc": [ + 1501, + 1502, + 1503 + ] + }, + { + "teal": 1443, + "source": 499, + "pc": [ + 1504 + ] + }, + { + "teal": 1446, + "source": 499, + "pc": [ + 1505, + 1506, + 1507 + ] + }, + { + "teal": 1447, + "source": 499, + "pc": [ + 1508 + ] + }, + { + "teal": 1448, + "source": 499, + "pc": [ + 1509 + ] + }, + { + "teal": 1459, + "source": 499, + "pc": [ + 1510, + 1511, + 1512 + ] + }, + { + "teal": 1466, + "source": 501, + "pc": [ + 1513, + 1514 + ] + }, + { + "teal": 1467, + "source": 501, + "pc": [ + 1515 + ] + }, + { + "teal": 1468, + "source": 501, + "pc": [ + 1516, + 1517 + ] + }, + { + "teal": 1469, + "source": 501, + "pc": [ + 1518 + ] + }, + { + "teal": 1470, + "source": 501, + "pc": [ + 1519, + 1520 + ] + }, + { + "teal": 1471, + "source": 501, + "pc": [ + 1521 + ] + }, + { + "teal": 1472, + "source": 501, + "pc": [ + 1522 + ] + }, + { + "teal": 1473, + "source": 501, + "pc": [ + 1523, + 1524 + ] + }, + { + "teal": 1474, + "source": 501, + "pc": [ + 1525 + ] + }, + { + "teal": 1475, + "source": 501, + "pc": [ + 1526 + ] + }, + { + "teal": 1478, + "source": 500, + "errorMessage": "can only be called by validator owner", + "pc": [ + 1527 + ] + }, + { + "teal": 1482, + "source": 504, + "pc": [ + 1528, + 1529 + ] + }, + { + "teal": 1483, + "source": 504, + "pc": [ + 1530, + 1531 + ] + }, + { + "teal": 1484, + "source": 504, + "pc": [ + 1532 + ] + }, + { + "teal": 1485, + "source": 504, + "pc": [ + 1533 + ] + }, + { + "teal": 1486, + "source": 504, + "pc": [ + 1534, + 1535 + ] + }, + { + "teal": 1487, + "source": 504, + "pc": [ + 1536 + ] + }, + { + "teal": 1488, + "source": 504, + "pc": [ + 1537 + ] + }, + { + "teal": 1489, + "source": 504, + "pc": [ + 1538, + 1539 + ] + }, + { + "teal": 1490, + "source": 504, + "pc": [ + 1540 + ] + }, + { + "teal": 1494, + "source": 505, + "pc": [ + 1541, + 1542, + 1543 + ] + }, + { + "teal": 1495, + "source": 505, + "pc": [ + 1544, + 1545 + ] + }, + { + "teal": 1496, + "source": 505, + "pc": [ + 1546 + ] + }, + { + "teal": 1497, + "source": 505, + "pc": [ + 1547 + ] + }, + { + "teal": 1498, + "source": 505, + "pc": [ + 1548, + 1549 + ] + }, + { + "teal": 1499, + "source": 505, + "pc": [ + 1550 + ] + }, + { + "teal": 1500, + "source": 505, + "pc": [ + 1551 + ] + }, + { + "teal": 1501, + "source": 505, + "pc": [ + 1552, + 1553 + ] + }, + { + "teal": 1502, + "source": 505, + "pc": [ + 1554 + ] + }, + { + "teal": 1503, + "source": 499, + "pc": [ + 1555 + ] + }, + { + "teal": 1508, + "source": 516, + "pc": [ + 1556, + 1557, + 1558 + ] + }, + { + "teal": 1509, + "source": 516, + "pc": [ + 1559, + 1560, + 1561 + ] + }, + { + "teal": 1512, + "source": 516, + "pc": [ + 1562, + 1563, + 1564 + ] + }, + { + "teal": 1513, + "source": 516, + "pc": [ + 1565 + ] + }, + { + "teal": 1516, + "source": 516, + "pc": [ + 1566, + 1567, + 1568 + ] + }, + { + "teal": 1517, + "source": 516, + "pc": [ + 1569 + ] + }, + { + "teal": 1520, + "source": 516, + "pc": [ + 1570, + 1571, + 1572 + ] + }, + { + "teal": 1521, + "source": 516, + "pc": [ + 1573 + ] + }, + { + "teal": 1522, + "source": 516, + "pc": [ + 1574 + ] + }, + { + "teal": 1533, + "source": 516, + "pc": [ + 1575, + 1576, + 1577 + ] + }, + { + "teal": 1540, + "source": 519, + "pc": [ + 1578, + 1579 + ] + }, + { + "teal": 1541, + "source": 519, + "pc": [ + 1580 + ] + }, + { + "teal": 1542, + "source": 519, + "pc": [ + 1581, + 1582 + ] + }, + { + "teal": 1543, + "source": 519, + "pc": [ + 1583 + ] + }, + { + "teal": 1544, + "source": 519, + "pc": [ + 1584, + 1585 + ] + }, + { + "teal": 1545, + "source": 519, + "pc": [ + 1586 + ] + }, + { + "teal": 1546, + "source": 519, + "pc": [ + 1587 + ] + }, + { + "teal": 1547, + "source": 519, + "pc": [ + 1588, + 1589 + ] + }, + { + "teal": 1548, + "source": 519, + "pc": [ + 1590 + ] + }, + { + "teal": 1549, + "source": 519, + "pc": [ + 1591 + ] + }, + { + "teal": 1552, + "source": 518, + "errorMessage": "can only be called by validator owner", + "pc": [ + 1592 + ] + }, + { + "teal": 1560, + "source": 523, + "pc": [ + 1593 + ] + }, + { + "teal": 1561, + "source": 523, + "pc": [ + 1594, + 1595 + ] + }, + { + "teal": 1562, + "source": 523, + "pc": [ + 1596, + 1597 + ] + }, + { + "teal": 1566, + "source": 524, + "pc": [ + 1598, + 1599 + ] + }, + { + "teal": 1567, + "source": 524, + "pc": [ + 1600, + 1601 + ] + }, + { + "teal": 1571, + "source": 525, + "pc": [ + 1602, + 1603 + ] + }, + { + "teal": 1572, + "source": 525, + "pc": [ + 1604, + 1605 + ] + }, + { + "teal": 1573, + "source": 525, + "pc": [ + 1606, + 1607 + ] + }, + { + "teal": 1574, + "source": 525, + "pc": [ + 1608, + 1609 + ] + }, + { + "teal": 1575, + "source": 525, + "pc": [ + 1610, + 1611 + ] + }, + { + "teal": 1576, + "source": 525, + "pc": [ + 1612 + ] + }, + { + "teal": 1577, + "source": 525, + "pc": [ + 1613, + 1614 + ] + }, + { + "teal": 1581, + "source": 526, + "pc": [ + 1615, + 1616 + ] + }, + { + "teal": 1582, + "source": 526, + "pc": [ + 1617, + 1618 + ] + }, + { + "teal": 1585, + "source": 523, + "pc": [ + 1619 + ] + }, + { + "teal": 1586, + "source": 523, + "pc": [ + 1620, + 1621 + ] + }, + { + "teal": 1589, + "source": 523, + "pc": [ + 1622 + ] + }, + { + "teal": 1596, + "source": 530, + "pc": [ + 1623, + 1624 + ] + }, + { + "teal": 1597, + "source": 530, + "pc": [ + 1625, + 1626 + ] + }, + { + "teal": 1598, + "source": 530, + "pc": [ + 1627, + 1628 + ] + }, + { + "teal": 1599, + "source": 530, + "pc": [ + 1629 + ] + }, + { + "teal": 1602, + "source": 530, + "errorMessage": "global state value does not exist: AppID.fromUint64(nfdAppID).globalState('i.owner.a')", + "pc": [ + 1630 + ] + }, + { + "teal": 1603, + "source": 530, + "pc": [ + 1631 + ] + }, + { + "teal": 1606, + "source": 529, + "errorMessage": "If specifying NFD, account adding validator must be owner", + "pc": [ + 1632 + ] + }, + { + "teal": 1610, + "source": 533, + "pc": [ + 1633, + 1634 + ] + }, + { + "teal": 1611, + "source": 533, + "pc": [ + 1635, + 1636 + ] + }, + { + "teal": 1612, + "source": 533, + "pc": [ + 1637 + ] + }, + { + "teal": 1613, + "source": 533, + "pc": [ + 1638 + ] + }, + { + "teal": 1614, + "source": 533, + "pc": [ + 1639, + 1640 + ] + }, + { + "teal": 1615, + "source": 533, + "pc": [ + 1641 + ] + }, + { + "teal": 1616, + "source": 533, + "pc": [ + 1642 + ] + }, + { + "teal": 1617, + "source": 533, + "pc": [ + 1643, + 1644 + ] + }, + { + "teal": 1618, + "source": 533, + "pc": [ + 1645 + ] + }, + { + "teal": 1619, + "source": 516, + "pc": [ + 1646 + ] + }, + { + "teal": 1624, + "source": 540, + "pc": [ + 1647, + 1648, + 1649 + ] + }, + { + "teal": 1625, + "source": 540, + "pc": [ + 1650 + ] + }, + { + "teal": 1626, + "source": 540, + "pc": [ + 1651 + ] + }, + { + "teal": 1627, + "source": 540, + "pc": [ + 1652, + 1653 + ] + }, + { + "teal": 1628, + "source": 540, + "pc": [ + 1654 + ] + }, + { + "teal": 1631, + "source": 540, + "errorMessage": "argument 0 (commissionAddress) for changeValidatorCommissionAddress must be a address", + "pc": [ + 1655 + ] + }, + { + "teal": 1634, + "source": 540, + "pc": [ + 1656, + 1657, + 1658 + ] + }, + { + "teal": 1635, + "source": 540, + "pc": [ + 1659 + ] + }, + { + "teal": 1638, + "source": 540, + "pc": [ + 1660, + 1661, + 1662 + ] + }, + { + "teal": 1639, + "source": 540, + "pc": [ + 1663 + ] + }, + { + "teal": 1640, + "source": 540, + "pc": [ + 1664 + ] + }, + { + "teal": 1647, + "source": 540, + "pc": [ + 1665, + 1666, + 1667 + ] + }, + { + "teal": 1654, + "source": 542, + "pc": [ + 1668, + 1669 + ] + }, + { + "teal": 1655, + "source": 542, + "pc": [ + 1670 + ] + }, + { + "teal": 1656, + "source": 542, + "pc": [ + 1671, + 1672 + ] + }, + { + "teal": 1657, + "source": 542, + "pc": [ + 1673 + ] + }, + { + "teal": 1658, + "source": 542, + "pc": [ + 1674, + 1675 + ] + }, + { + "teal": 1659, + "source": 542, + "pc": [ + 1676 + ] + }, + { + "teal": 1660, + "source": 542, + "pc": [ + 1677 + ] + }, + { + "teal": 1661, + "source": 542, + "pc": [ + 1678, + 1679 + ] + }, + { + "teal": 1662, + "source": 542, + "pc": [ + 1680 + ] + }, + { + "teal": 1663, + "source": 542, + "pc": [ + 1681 + ] + }, + { + "teal": 1666, + "source": 541, + "errorMessage": "can only be called by validator owner", + "pc": [ + 1682 + ] + }, + { + "teal": 1670, + "source": 545, + "pc": [ + 1683, + 1684 + ] + }, + { + "teal": 1671, + "source": 545, + "pc": [ + 1685, + 1686 + ] + }, + { + "teal": 1672, + "source": 545, + "pc": [ + 1687 + ] + }, + { + "teal": 1673, + "source": 545, + "pc": [ + 1688 + ] + }, + { + "teal": 1677, + "source": 546, + "pc": [ + 1689, + 1690, + 1691 + ] + }, + { + "teal": 1678, + "source": 546, + "pc": [ + 1692, + 1693 + ] + }, + { + "teal": 1679, + "source": 546, + "pc": [ + 1694 + ] + }, + { + "teal": 1680, + "source": 546, + "pc": [ + 1695, + 1696 + ] + }, + { + "teal": 1681, + "source": 546, + "pc": [ + 1697 + ] + }, + { + "teal": 1682, + "source": 546, + "pc": [ + 1698 + ] + }, + { + "teal": 1683, + "source": 546, + "pc": [ + 1699, + 1700 + ] + }, + { + "teal": 1684, + "source": 546, + "pc": [ + 1701 + ] + }, + { + "teal": 1685, + "source": 540, + "pc": [ + 1702 + ] + }, + { + "teal": 1690, + "source": 559, + "pc": [ + 1703, + 1704, + 1705 + ] + }, + { + "teal": 1691, + "source": 559, + "pc": [ + 1706 + ] + }, + { + "teal": 1694, + "source": 558, + "pc": [ + 1707, + 1708, + 1709 + ] + }, + { + "teal": 1695, + "source": 558, + "pc": [ + 1710 + ] + }, + { + "teal": 1698, + "source": 557, + "pc": [ + 1711, + 1712, + 1713 + ] + }, + { + "teal": 1699, + "source": 557, + "pc": [ + 1714 + ] + }, + { + "teal": 1700, + "source": 557, + "pc": [ + 1715 + ] + }, + { + "teal": 1701, + "source": 557, + "pc": [ + 1716, + 1717 + ] + }, + { + "teal": 1702, + "source": 557, + "pc": [ + 1718 + ] + }, + { + "teal": 1705, + "source": 557, + "errorMessage": "argument 2 (EntryGatingAssets) for changeValidatorRewardInfo must be a uint64[4]", + "pc": [ + 1719 + ] + }, + { + "teal": 1708, + "source": 556, + "pc": [ + 1720, + 1721, + 1722 + ] + }, + { + "teal": 1709, + "source": 556, + "pc": [ + 1723 + ] + }, + { + "teal": 1710, + "source": 556, + "pc": [ + 1724 + ] + }, + { + "teal": 1711, + "source": 556, + "pc": [ + 1725, + 1726 + ] + }, + { + "teal": 1712, + "source": 556, + "pc": [ + 1727 + ] + }, + { + "teal": 1715, + "source": 556, + "errorMessage": "argument 3 (EntryGatingAddress) for changeValidatorRewardInfo must be a address", + "pc": [ + 1728 + ] + }, + { + "teal": 1718, + "source": 555, + "pc": [ + 1729, + 1730, + 1731 + ] + }, + { + "teal": 1719, + "source": 555, + "pc": [ + 1732 + ] + }, + { + "teal": 1720, + "source": 555, + "pc": [ + 1733 + ] + }, + { + "teal": 1721, + "source": 555, + "pc": [ + 1734 + ] + }, + { + "teal": 1722, + "source": 555, + "pc": [ + 1735 + ] + }, + { + "teal": 1725, + "source": 555, + "errorMessage": "argument 4 (EntryGatingType) for changeValidatorRewardInfo must be a uint8", + "pc": [ + 1736 + ] + }, + { + "teal": 1726, + "source": 555, + "pc": [ + 1737 + ] + }, + { + "teal": 1729, + "source": 554, + "pc": [ + 1738, + 1739, + 1740 + ] + }, + { + "teal": 1730, + "source": 554, + "pc": [ + 1741 + ] + }, + { + "teal": 1733, + "source": 553, + "pc": [ + 1742, + 1743, + 1744 + ] + }, + { + "teal": 1734, + "source": 553, + "pc": [ + 1745 + ] + }, + { + "teal": 1735, + "source": 553, + "pc": [ + 1746 + ] + }, + { + "teal": 1742, + "source": 553, + "pc": [ + 1747, + 1748, + 1749 + ] + }, + { + "teal": 1749, + "source": 562, + "pc": [ + 1750, + 1751 + ] + }, + { + "teal": 1750, + "source": 562, + "pc": [ + 1752 + ] + }, + { + "teal": 1751, + "source": 562, + "pc": [ + 1753, + 1754 + ] + }, + { + "teal": 1752, + "source": 562, + "pc": [ + 1755 + ] + }, + { + "teal": 1753, + "source": 562, + "pc": [ + 1756, + 1757 + ] + }, + { + "teal": 1754, + "source": 562, + "pc": [ + 1758 + ] + }, + { + "teal": 1755, + "source": 562, + "pc": [ + 1759 + ] + }, + { + "teal": 1756, + "source": 562, + "pc": [ + 1760, + 1761 + ] + }, + { + "teal": 1757, + "source": 562, + "pc": [ + 1762 + ] + }, + { + "teal": 1758, + "source": 562, + "pc": [ + 1763 + ] + }, + { + "teal": 1761, + "source": 561, + "errorMessage": "can only be called by validator owner", + "pc": [ + 1764 + ] + }, + { + "teal": 1765, + "source": 566, + "pc": [ + 1765, + 1766 + ] + }, + { + "teal": 1766, + "source": 566, + "pc": [ + 1767, + 1768 + ] + }, + { + "teal": 1767, + "source": 566, + "pc": [ + 1769 + ] + }, + { + "teal": 1768, + "source": 566, + "pc": [ + 1770, + 1771, + 1772 + ] + }, + { + "teal": 1769, + "source": 566, + "pc": [ + 1773 + ] + }, + { + "teal": 1770, + "source": 566, + "pc": [ + 1774, + 1775 + ] + }, + { + "teal": 1771, + "source": 566, + "pc": [ + 1776 + ] + }, + { + "teal": 1772, + "source": 566, + "pc": [ + 1777 + ] + }, + { + "teal": 1773, + "source": 566, + "pc": [ + 1778, + 1779 + ] + }, + { + "teal": 1774, + "source": 566, + "pc": [ + 1780 + ] + }, + { + "teal": 1778, + "source": 567, + "pc": [ + 1781, + 1782 + ] + }, + { + "teal": 1779, + "source": 567, + "pc": [ + 1783, + 1784 + ] + }, + { + "teal": 1780, + "source": 567, + "pc": [ + 1785 + ] + }, + { + "teal": 1781, + "source": 567, + "pc": [ + 1786, + 1787 + ] + }, + { + "teal": 1782, + "source": 567, + "pc": [ + 1788 + ] + }, + { + "teal": 1783, + "source": 567, + "pc": [ + 1789 + ] + }, + { + "teal": 1784, + "source": 567, + "pc": [ + 1790, + 1791 + ] + }, + { + "teal": 1785, + "source": 567, + "pc": [ + 1792 + ] + }, + { + "teal": 1789, + "source": 568, + "pc": [ + 1793, + 1794 + ] + }, + { + "teal": 1790, + "source": 568, + "pc": [ + 1795, + 1796 + ] + }, + { + "teal": 1791, + "source": 568, + "pc": [ + 1797 + ] + }, + { + "teal": 1792, + "source": 568, + "pc": [ + 1798, + 1799 + ] + }, + { + "teal": 1793, + "source": 568, + "pc": [ + 1800 + ] + }, + { + "teal": 1794, + "source": 568, + "pc": [ + 1801 + ] + }, + { + "teal": 1795, + "source": 568, + "pc": [ + 1802, + 1803 + ] + }, + { + "teal": 1796, + "source": 568, + "pc": [ + 1804 + ] + }, + { + "teal": 1800, + "source": 569, + "pc": [ + 1805, + 1806 + ] + }, + { + "teal": 1801, + "source": 569, + "pc": [ + 1807, + 1808 + ] + }, + { + "teal": 1802, + "source": 569, + "pc": [ + 1809 + ] + }, + { + "teal": 1803, + "source": 569, + "pc": [ + 1810 + ] + }, + { + "teal": 1804, + "source": 569, + "pc": [ + 1811, + 1812 + ] + }, + { + "teal": 1805, + "source": 569, + "pc": [ + 1813 + ] + }, + { + "teal": 1806, + "source": 569, + "pc": [ + 1814 + ] + }, + { + "teal": 1807, + "source": 569, + "pc": [ + 1815, + 1816 + ] + }, + { + "teal": 1808, + "source": 569, + "pc": [ + 1817 + ] + }, + { + "teal": 1812, + "source": 570, + "pc": [ + 1818, + 1819, + 1820 + ] + }, + { + "teal": 1813, + "source": 570, + "pc": [ + 1821, + 1822 + ] + }, + { + "teal": 1814, + "source": 570, + "pc": [ + 1823 + ] + }, + { + "teal": 1815, + "source": 570, + "pc": [ + 1824 + ] + }, + { + "teal": 1816, + "source": 570, + "pc": [ + 1825, + 1826 + ] + }, + { + "teal": 1817, + "source": 570, + "pc": [ + 1827 + ] + }, + { + "teal": 1818, + "source": 570, + "pc": [ + 1828 + ] + }, + { + "teal": 1819, + "source": 570, + "pc": [ + 1829, + 1830 + ] + }, + { + "teal": 1820, + "source": 570, + "pc": [ + 1831 + ] + }, + { + "teal": 1821, + "source": 553, + "pc": [ + 1832 + ] + }, + { + "teal": 1826, + "source": 584, + "pc": [ + 1833 + ] + }, + { + "teal": 1829, + "source": 584, + "pc": [ + 1834, + 1835, + 1836 + ] + }, + { + "teal": 1830, + "source": 584, + "pc": [ + 1837 + ] + }, + { + "teal": 1833, + "source": 584, + "pc": [ + 1838, + 1839, + 1840 + ] + }, + { + "teal": 1834, + "source": 584, + "pc": [ + 1841 + ] + }, + { + "teal": 1837, + "source": 584, + "pc": [ + 1842, + 1843 + ] + }, + { + "teal": 1838, + "source": 584, + "pc": [ + 1844 + ] + }, + { + "teal": 1839, + "source": 584, + "pc": [ + 1845 + ] + }, + { + "teal": 1840, + "source": 584, + "pc": [ + 1846 + ] + }, + { + "teal": 1841, + "source": 584, + "pc": [ + 1847, + 1848 + ] + }, + { + "teal": 1842, + "source": 584, + "pc": [ + 1849 + ] + }, + { + "teal": 1843, + "source": 584, + "pc": [ + 1850 + ] + }, + { + "teal": 1846, + "source": 584, + "errorMessage": "argument 2 (mbrPayment) for addPool must be a pay transaction", + "pc": [ + 1851 + ] + }, + { + "teal": 1849, + "source": 584, + "pc": [ + 1852, + 1853, + 1854 + ] + }, + { + "teal": 1850, + "source": 584, + "pc": [ + 1855 + ] + }, + { + "teal": 1851, + "source": 584, + "pc": [ + 1856 + ] + }, + { + "teal": 1852, + "source": 584, + "pc": [ + 1857 + ] + }, + { + "teal": 1853, + "source": 584, + "pc": [ + 1858 + ] + }, + { + "teal": 1866, + "source": 584, + "pc": [ + 1859, + 1860, + 1861 + ] + }, + { + "teal": 1869, + "source": 584, + "pc": [ + 1862 + ] + }, + { + "teal": 1870, + "source": 584, + "pc": [ + 1863 + ] + }, + { + "teal": 1878, + "source": 587, + "pc": [ + 1864, + 1865 + ] + }, + { + "teal": 1879, + "source": 587, + "pc": [ + 1866 + ] + }, + { + "teal": 1880, + "source": 587, + "pc": [ + 1867, + 1868 + ] + }, + { + "teal": 1881, + "source": 587, + "pc": [ + 1869 + ] + }, + { + "teal": 1882, + "source": 587, + "pc": [ + 1870, + 1871 + ] + }, + { + "teal": 1883, + "source": 587, + "pc": [ + 1872 + ] + }, + { + "teal": 1884, + "source": 587, + "pc": [ + 1873 + ] + }, + { + "teal": 1885, + "source": 587, + "pc": [ + 1874, + 1875 + ] + }, + { + "teal": 1886, + "source": 587, + "pc": [ + 1876 + ] + }, + { + "teal": 1887, + "source": 587, + "pc": [ + 1877 + ] + }, + { + "teal": 1888, + "source": 587, + "pc": [ + 1878 + ] + }, + { + "teal": 1889, + "source": 587, + "pc": [ + 1879, + 1880, + 1881 + ] + }, + { + "teal": 1890, + "source": 588, + "pc": [ + 1882, + 1883 + ] + }, + { + "teal": 1891, + "source": 588, + "pc": [ + 1884, + 1885 + ] + }, + { + "teal": 1892, + "source": 588, + "pc": [ + 1886, + 1887 + ] + }, + { + "teal": 1893, + "source": 588, + "pc": [ + 1888 + ] + }, + { + "teal": 1894, + "source": 588, + "pc": [ + 1889, + 1890 + ] + }, + { + "teal": 1895, + "source": 588, + "pc": [ + 1891 + ] + }, + { + "teal": 1896, + "source": 588, + "pc": [ + 1892 + ] + }, + { + "teal": 1897, + "source": 588, + "pc": [ + 1893, + 1894 + ] + }, + { + "teal": 1898, + "source": 588, + "pc": [ + 1895 + ] + }, + { + "teal": 1899, + "source": 588, + "pc": [ + 1896 + ] + }, + { + "teal": 1900, + "source": 587, + "pc": [ + 1897 + ] + }, + { + "teal": 1904, + "source": 586, + "errorMessage": "can only be called by owner or manager of validator", + "pc": [ + 1898 + ] + }, + { + "teal": 1909, + "source": 593, + "pc": [ + 1899, + 1900 + ] + }, + { + "teal": 1910, + "source": 593, + "pc": [ + 1901, + 1902 + ] + }, + { + "teal": 1911, + "source": 593, + "pc": [ + 1903, + 1904 + ] + }, + { + "teal": 1912, + "source": 593, + "pc": [ + 1905 + ] + }, + { + "teal": 1915, + "source": 593, + "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", + "pc": [ + 1906 + ] + }, + { + "teal": 1918, + "source": 593, + "pc": [ + 1907, + 1908 + ] + }, + { + "teal": 1919, + "source": 593, + "pc": [ + 1909, + 1910 + ] + }, + { + "teal": 1920, + "source": 593, + "pc": [ + 1911, + 1912, + 1913 + ] + }, + { + "teal": 1921, + "source": 593, + "pc": [ + 1914, + 1915, + 1916 + ] + }, + { + "teal": 1922, + "source": 593, + "pc": [ + 1917 + ] + }, + { + "teal": 1923, + "source": 593, + "pc": [ + 1918 + ] + }, + { + "teal": 1926, + "source": 593, + "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"amount\",\"expected\":\"this.getMbrAmounts().addPoolMbr\"}", + "pc": [ + 1919 + ] + }, + { + "teal": 1930, + "source": 595, + "pc": [ + 1920 + ] + }, + { + "teal": 1931, + "source": 595, + "pc": [ + 1921, + 1922 + ] + }, + { + "teal": 1932, + "source": 595, + "pc": [ + 1923 + ] + }, + { + "teal": 1933, + "source": 595, + "pc": [ + 1924 + ] + }, + { + "teal": 1934, + "source": 595, + "pc": [ + 1925 + ] + }, + { + "teal": 1935, + "source": 595, + "pc": [ + 1926 + ] + }, + { + "teal": 1936, + "source": 595, + "pc": [ + 1927 + ] + }, + { + "teal": 1939, + "source": 595, + "errorMessage": "specified validator id isn't valid", + "pc": [ + 1928 + ] + }, + { + "teal": 1943, + "source": 597, + "pc": [ + 1929, + 1930 + ] + }, + { + "teal": 1944, + "source": 597, + "pc": [ + 1931, + 1932 + ] + }, + { + "teal": 1945, + "source": 597, + "pc": [ + 1933 + ] + }, + { + "teal": 1946, + "source": 597, + "pc": [ + 1934, + 1935 + ] + }, + { + "teal": 1947, + "source": 597, + "pc": [ + 1936 + ] + }, + { + "teal": 1948, + "source": 597, + "pc": [ + 1937 + ] + }, + { + "teal": 1949, + "source": 597, + "pc": [ + 1938, + 1939 + ] + }, + { + "teal": 1950, + "source": 597, + "pc": [ + 1940 + ] + }, + { + "teal": 1951, + "source": 597, + "pc": [ + 1941 + ] + }, + { + "teal": 1952, + "source": 597, + "pc": [ + 1942, + 1943 + ] + }, + { + "teal": 1957, + "source": 598, + "pc": [ + 1944, + 1945 + ] + }, + { + "teal": 1958, + "source": 29, + "pc": [ + 1946 + ] + }, + { + "teal": 1959, + "source": 598, + "pc": [ + 1947 + ] + }, + { + "teal": 1960, + "source": 598, + "pc": [ + 1948, + 1949, + 1950 + ] + }, + { + "teal": 1964, + "source": 599, + "errorMessage": "already at max pool size", + "pc": [ + 1951 + ] + }, + { + "teal": 1969, + "source": 601, + "pc": [ + 1952, + 1953 + ] + }, + { + "teal": 1970, + "source": 601, + "pc": [ + 1954 + ] + }, + { + "teal": 1971, + "source": 601, + "pc": [ + 1955 + ] + }, + { + "teal": 1972, + "source": 601, + "pc": [ + 1956, + 1957 + ] + }, + { + "teal": 1994, + "source": 604, + "pc": [ + 1958 + ] + }, + { + "teal": 1995, + "source": 604, + "pc": [ + 1959, + 1960 + ] + }, + { + "teal": 1996, + "source": 604, + "pc": [ + 1961, + 1962 + ] + }, + { + "teal": 2000, + "source": 605, + "pc": [ + 1963 + ] + }, + { + "teal": 2001, + "source": 605, + "pc": [ + 1964, + 1965 + ] + }, + { + "teal": 2008, + "source": 607, + "pc": [ + 1966, + 1967 + ] + }, + { + "teal": 2009, + "source": 607, + "pc": [ + 1968 + ] + }, + { + "teal": 2010, + "source": 607, + "pc": [ + 1969, + 1970 + ] + }, + { + "teal": 2011, + "source": 607, + "pc": [ + 1971 + ] + }, + { + "teal": 2012, + "source": 607, + "pc": [ + 1972, + 1973 + ] + }, + { + "teal": 2013, + "source": 608, + "pc": [ + 1974, + 1975 + ] + }, + { + "teal": 2014, + "source": 608, + "pc": [ + 1976, + 1977 + ] + }, + { + "teal": 2015, + "source": 608, + "pc": [ + 1978, + 1979 + ] + }, + { + "teal": 2016, + "source": 608, + "pc": [ + 1980 + ] + }, + { + "teal": 2019, + "source": 608, + "errorMessage": "box value does not exist: this.stakingPoolApprovalProgram.size", + "pc": [ + 1981 + ] + }, + { + "teal": 2020, + "source": 608, + "pc": [ + 1982, + 1983 + ] + }, + { + "teal": 2021, + "source": 608, + "pc": [ + 1984 + ] + }, + { + "teal": 2022, + "source": 608, + "pc": [ + 1985 + ] + }, + { + "teal": 2023, + "source": 608, + "pc": [ + 1986, + 1987 + ] + }, + { + "teal": 2027, + "source": 610, + "pc": [ + 1988, + 1989, + 1990 + ] + }, + { + "teal": 2028, + "source": 610, + "pc": [ + 1991, + 1992 + ] + }, + { + "teal": 2032, + "source": 611, + "pc": [ + 1993, + 1994 + ] + }, + { + "teal": 2033, + "source": 611, + "pc": [ + 1995, + 1996 + ] + }, + { + "teal": 2037, + "source": 612, + "pc": [ + 1997, + 1998 + ] + }, + { + "teal": 2038, + "source": 612, + "pc": [ + 1999, + 2000 + ] + }, + { + "teal": 2042, + "source": 613, + "pc": [ + 2001, + 2002 + ] + }, + { + "teal": 2043, + "source": 613, + "pc": [ + 2003, + 2004 + ] + }, + { + "teal": 2054, + "source": 616, + "pc": [ + 2005, + 2006, + 2007, + 2008, + 2009, + 2010 + ] + }, + { + "teal": 2055, + "source": 616, + "pc": [ + 2011, + 2012 + ] + }, + { + "teal": 2056, + "source": 617, + "pc": [ + 2013, + 2014, + 2015 + ] + }, + { + "teal": 2057, + "source": 617, + "pc": [ + 2016 + ] + }, + { + "teal": 2058, + "source": 617, + "pc": [ + 2017, + 2018 + ] + }, + { + "teal": 2059, + "source": 618, + "pc": [ + 2019, + 2020 + ] + }, + { + "teal": 2060, + "source": 618, + "pc": [ + 2021 + ] + }, + { + "teal": 2061, + "source": 618, + "pc": [ + 2022, + 2023 + ] + }, + { + "teal": 2062, + "source": 619, + "pc": [ + 2024, + 2025 + ] + }, + { + "teal": 2063, + "source": 619, + "pc": [ + 2026 + ] + }, + { + "teal": 2064, + "source": 619, + "pc": [ + 2027, + 2028 + ] + }, + { + "teal": 2065, + "source": 620, + "pc": [ + 2029, + 2030 + ] + }, + { + "teal": 2066, + "source": 620, + "pc": [ + 2031 + ] + }, + { + "teal": 2067, + "source": 620, + "pc": [ + 2032 + ] + }, + { + "teal": 2068, + "source": 620, + "pc": [ + 2033, + 2034 + ] + }, + { + "teal": 2069, + "source": 620, + "pc": [ + 2035 + ] + }, + { + "teal": 2070, + "source": 620, + "pc": [ + 2036 + ] + }, + { + "teal": 2071, + "source": 620, + "pc": [ + 2037, + 2038 + ] + }, + { + "teal": 2072, + "source": 620, + "pc": [ + 2039 + ] + }, + { + "teal": 2073, + "source": 620, + "pc": [ + 2040 + ] + }, + { + "teal": 2074, + "source": 620, + "pc": [ + 2041 + ] + }, + { + "teal": 2075, + "source": 620, + "pc": [ + 2042, + 2043 + ] + }, + { + "teal": 2078, + "source": 604, + "pc": [ + 2044 + ] + }, + { + "teal": 2079, + "source": 604, + "pc": [ + 2045, + 2046 + ] + }, + { + "teal": 2082, + "source": 604, + "pc": [ + 2047 + ] + }, + { + "teal": 2086, + "source": 624, + "pc": [ + 2048, + 2049 + ] + }, + { + "teal": 2087, + "source": 624, + "pc": [ + 2050, + 2051 + ] + }, + { + "teal": 2088, + "source": 624, + "pc": [ + 2052 + ] + }, + { + "teal": 2089, + "source": 624, + "pc": [ + 2053, + 2054, + 2055 + ] + }, + { + "teal": 2090, + "source": 624, + "pc": [ + 2056 + ] + }, + { + "teal": 2091, + "source": 624, + "pc": [ + 2057, + 2058 + ] + }, + { + "teal": 2092, + "source": 624, + "pc": [ + 2059 + ] + }, + { + "teal": 2093, + "source": 624, + "pc": [ + 2060 + ] + }, + { + "teal": 2094, + "source": 624, + "pc": [ + 2061, + 2062 + ] + }, + { + "teal": 2095, + "source": 624, + "pc": [ + 2063 + ] + }, + { + "teal": 2099, + "source": 627, + "pc": [ + 2064, + 2065 + ] + }, + { + "teal": 2100, + "source": 627, + "pc": [ + 2066, + 2067 + ] + }, + { + "teal": 2104, + "source": 628, + "pc": [ + 2068, + 2069 + ] + }, + { + "teal": 2105, + "source": 628, + "pc": [ + 2070, + 2071 + ] + }, + { + "teal": 2106, + "source": 628, + "pc": [ + 2072 + ] + }, + { + "teal": 2107, + "source": 628, + "pc": [ + 2073 + ] + }, + { + "teal": 2108, + "source": 628, + "pc": [ + 2074, + 2075 + ] + }, + { + "teal": 2109, + "source": 628, + "pc": [ + 2076 + ] + }, + { + "teal": 2110, + "source": 628, + "pc": [ + 2077 + ] + }, + { + "teal": 2111, + "source": 628, + "pc": [ + 2078 + ] + }, + { + "teal": 2112, + "source": 628, + "pc": [ + 2079 + ] + }, + { + "teal": 2113, + "source": 628, + "pc": [ + 2080, + 2081 + ] + }, + { + "teal": 2114, + "source": 628, + "pc": [ + 2082 + ] + }, + { + "teal": 2115, + "source": 628, + "pc": [ + 2083 + ] + }, + { + "teal": 2116, + "source": 628, + "pc": [ + 2084, + 2085 + ] + }, + { + "teal": 2117, + "source": 628, + "pc": [ + 2086 + ] + }, + { + "teal": 2118, + "source": 628, + "pc": [ + 2087 + ] + }, + { + "teal": 2119, + "source": 628, + "pc": [ + 2088, + 2089 + ] + }, + { + "teal": 2120, + "source": 628, + "pc": [ + 2090 + ] + }, + { + "teal": 2124, + "source": 629, + "pc": [ + 2091, + 2092 + ] + }, + { + "teal": 2125, + "source": 629, + "pc": [ + 2093, + 2094 + ] + }, + { + "teal": 2126, + "source": 629, + "pc": [ + 2095, + 2096 + ] + }, + { + "teal": 2127, + "source": 629, + "pc": [ + 2097, + 2098, + 2099 + ] + }, + { + "teal": 2131, + "source": 637, + "pc": [ + 2100, + 2101 + ] + }, + { + "teal": 2132, + "source": 637, + "pc": [ + 2102 + ] + }, + { + "teal": 2133, + "source": 637, + "pc": [ + 2103, + 2104 + ] + }, + { + "teal": 2134, + "source": 637, + "pc": [ + 2105 + ] + }, + { + "teal": 2135, + "source": 637, + "pc": [ + 2106 + ] + }, + { + "teal": 2136, + "source": 637, + "pc": [ + 2107, + 2108 + ] + }, + { + "teal": 2137, + "source": 637, + "pc": [ + 2109 + ] + }, + { + "teal": 2138, + "source": 637, + "pc": [ + 2110 + ] + }, + { + "teal": 2141, + "source": 584, + "pc": [ + 2111, + 2112 + ] + }, + { + "teal": 2144, + "source": 584, + "pc": [ + 2113, + 2114 + ] + }, + { + "teal": 2145, + "source": 584, + "pc": [ + 2115 + ] + }, + { + "teal": 2150, + "source": 649, + "pc": [ + 2116 + ] + }, + { + "teal": 2153, + "source": 649, + "pc": [ + 2117, + 2118, + 2119 + ] + }, + { + "teal": 2154, + "source": 649, + "pc": [ + 2120 + ] + }, + { + "teal": 2157, + "source": 649, + "pc": [ + 2121, + 2122, + 2123 + ] + }, + { + "teal": 2158, + "source": 649, + "pc": [ + 2124 + ] + }, + { + "teal": 2161, + "source": 649, + "pc": [ + 2125, + 2126 + ] + }, + { + "teal": 2162, + "source": 649, + "pc": [ + 2127 + ] + }, + { + "teal": 2163, + "source": 649, + "pc": [ + 2128 + ] + }, + { + "teal": 2164, + "source": 649, + "pc": [ + 2129 + ] + }, + { + "teal": 2165, + "source": 649, + "pc": [ + 2130, + 2131 + ] + }, + { + "teal": 2166, + "source": 649, + "pc": [ + 2132 + ] + }, + { + "teal": 2167, + "source": 649, + "pc": [ + 2133 + ] + }, + { + "teal": 2170, + "source": 649, + "errorMessage": "argument 2 (stakedAmountPayment) for addStake must be a pay transaction", + "pc": [ + 2134 + ] + }, + { + "teal": 2173, + "source": 649, + "pc": [ + 2135, + 2136, + 2137 + ] + }, + { + "teal": 2174, + "source": 649, + "pc": [ + 2138 + ] + }, + { + "teal": 2175, + "source": 649, + "pc": [ + 2139 + ] + }, + { + "teal": 2176, + "source": 649, + "pc": [ + 2140 + ] + }, + { + "teal": 2177, + "source": 649, + "pc": [ + 2141 + ] + }, + { + "teal": 2189, + "source": 649, + "pc": [ + 2142, + 2143, + 2144 + ] + }, + { + "teal": 2192, + "source": 649, + "pc": [ + 2145 + ] + }, + { + "teal": 2193, + "source": 649, + "pc": [ + 2146, + 2147 + ] + }, + { + "teal": 2197, + "source": 650, + "pc": [ + 2148 + ] + }, + { + "teal": 2198, + "source": 650, + "pc": [ + 2149, + 2150 + ] + }, + { + "teal": 2199, + "source": 650, + "pc": [ + 2151 + ] + }, + { + "teal": 2200, + "source": 650, + "pc": [ + 2152 + ] + }, + { + "teal": 2201, + "source": 650, + "pc": [ + 2153 + ] + }, + { + "teal": 2202, + "source": 650, + "pc": [ + 2154 + ] + }, + { + "teal": 2203, + "source": 650, + "pc": [ + 2155 + ] + }, + { + "teal": 2206, + "source": 650, + "errorMessage": "specified validator id isn't valid", + "pc": [ + 2156 + ] + }, + { + "teal": 2211, + "source": 653, + "pc": [ + 2157, + 2158 + ] + }, + { + "teal": 2212, + "source": 653, + "pc": [ + 2159 + ] + }, + { + "teal": 2213, + "source": 653, + "pc": [ + 2160 + ] + }, + { + "teal": 2214, + "source": 653, + "pc": [ + 2161, + 2162 + ] + }, + { + "teal": 2215, + "source": 653, + "pc": [ + 2163 + ] + }, + { + "teal": 2216, + "source": 653, + "pc": [ + 2164 + ] + }, + { + "teal": 2217, + "source": 653, + "pc": [ + 2165, + 2166 + ] + }, + { + "teal": 2218, + "source": 653, + "pc": [ + 2167 + ] + }, + { + "teal": 2219, + "source": 653, + "pc": [ + 2168 + ] + }, + { + "teal": 2220, + "source": 653, + "pc": [ + 2169 + ] + }, + { + "teal": 2221, + "source": 653, + "pc": [ + 2170 + ] + }, + { + "teal": 2222, + "source": 653, + "pc": [ + 2171, + 2172, + 2173 + ] + }, + { + "teal": 2230, + "source": 655, + "pc": [ + 2174, + 2175 + ] + }, + { + "teal": 2231, + "source": 655, + "pc": [ + 2176 + ] + }, + { + "teal": 2232, + "source": 655, + "pc": [ + 2177 + ] + }, + { + "teal": 2233, + "source": 655, + "pc": [ + 2178, + 2179 + ] + }, + { + "teal": 2234, + "source": 655, + "pc": [ + 2180 + ] + }, + { + "teal": 2235, + "source": 655, + "pc": [ + 2181 + ] + }, + { + "teal": 2236, + "source": 655, + "pc": [ + 2182, + 2183 + ] + }, + { + "teal": 2237, + "source": 655, + "pc": [ + 2184 + ] + }, + { + "teal": 2238, + "source": 655, + "pc": [ + 2185 + ] + }, + { + "teal": 2239, + "source": 655, + "pc": [ + 2186, + 2187 + ] + }, + { + "teal": 2240, + "source": 655, + "pc": [ + 2188 + ] + }, + { + "teal": 2243, + "source": 654, + "errorMessage": "can't stake with a validator that is past its sunsetting time", + "pc": [ + 2189 + ] + }, + { + "teal": 2248, + "source": 660, + "pc": [ + 2190, + 2191 + ] + }, + { + "teal": 2249, + "source": 660, + "pc": [ + 2192, + 2193 + ] + }, + { + "teal": 2257, + "source": 664, + "pc": [ + 2194, + 2195 + ] + }, + { + "teal": 2258, + "source": 665, + "pc": [ + 2196, + 2197 + ] + }, + { + "teal": 2259, + "source": 665, + "pc": [ + 2198, + 2199 + ] + }, + { + "teal": 2260, + "source": 665, + "pc": [ + 2200 + ] + }, + { + "teal": 2263, + "source": 665, + "errorMessage": "transaction verification failed: {\"txn\":\"stakedAmountPayment\",\"field\":\"sender\",\"expected\":\"staker\"}", + "pc": [ + 2201 + ] + }, + { + "teal": 2266, + "source": 664, + "pc": [ + 2202, + 2203 + ] + }, + { + "teal": 2267, + "source": 666, + "pc": [ + 2204, + 2205 + ] + }, + { + "teal": 2268, + "source": 666, + "pc": [ + 2206, + 2207 + ] + }, + { + "teal": 2269, + "source": 666, + "pc": [ + 2208 + ] + }, + { + "teal": 2272, + "source": 666, + "errorMessage": "transaction verification failed: {\"txn\":\"stakedAmountPayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", + "pc": [ + 2209 + ] + }, + { + "teal": 2279, + "source": 672, + "pc": [ + 2210, + 2211 + ] + }, + { + "teal": 2280, + "source": 672, + "pc": [ + 2212 + ] + }, + { + "teal": 2281, + "source": 672, + "pc": [ + 2213 + ] + }, + { + "teal": 2282, + "source": 672, + "pc": [ + 2214, + 2215 + ] + }, + { + "teal": 2283, + "source": 672, + "pc": [ + 2216 + ] + }, + { + "teal": 2284, + "source": 672, + "pc": [ + 2217 + ] + }, + { + "teal": 2285, + "source": 672, + "pc": [ + 2218, + 2219 + ] + }, + { + "teal": 2286, + "source": 672, + "pc": [ + 2220 + ] + }, + { + "teal": 2287, + "source": 672, + "pc": [ + 2221 + ] + }, + { + "teal": 2288, + "source": 672, + "pc": [ + 2222, + 2223, + 2224 + ] + }, + { + "teal": 2289, + "source": 672, + "pc": [ + 2225 + ] + }, + { + "teal": 2292, + "source": 671, + "errorMessage": "total staked for all of a validators pools may not exceed hard cap", + "pc": [ + 2226 + ] + }, + { + "teal": 2296, + "source": 678, + "pc": [ + 2227, + 2228 + ] + }, + { + "teal": 2297, + "source": 678, + "pc": [ + 2229, + 2230 + ] + }, + { + "teal": 2298, + "source": 678, + "pc": [ + 2231, + 2232, + 2233 + ] + }, + { + "teal": 2302, + "source": 680, + "pc": [ + 2234, + 2235 + ] + }, + { + "teal": 2303, + "source": 680, + "pc": [ + 2236, + 2237 + ] + }, + { + "teal": 2304, + "source": 680, + "pc": [ + 2238, + 2239 + ] + }, + { + "teal": 2308, + "source": 681, + "pc": [ + 2240 + ] + }, + { + "teal": 2309, + "source": 681, + "pc": [ + 2241, + 2242 + ] + }, + { + "teal": 2314, + "source": 683, + "pc": [ + 2243 + ] + }, + { + "teal": 2315, + "source": 683, + "pc": [ + 2244, + 2245 + ] + }, + { + "teal": 2316, + "source": 683, + "pc": [ + 2246 + ] + }, + { + "teal": 2317, + "source": 683, + "pc": [ + 2247 + ] + }, + { + "teal": 2318, + "source": 683, + "pc": [ + 2248 + ] + }, + { + "teal": 2319, + "source": 683, + "pc": [ + 2249 + ] + }, + { + "teal": 2320, + "source": 683, + "pc": [ + 2250 + ] + }, + { + "teal": 2321, + "source": 683, + "pc": [ + 2251, + 2252, + 2253 + ] + }, + { + "teal": 2326, + "source": 686, + "pc": [ + 2254, + 2255, + 2256 + ] + }, + { + "teal": 2327, + "source": 686, + "pc": [ + 2257, + 2258, + 2259 + ] + }, + { + "teal": 2328, + "source": 686, + "pc": [ + 2260 + ] + }, + { + "teal": 2329, + "source": 686, + "pc": [ + 2261, + 2262 + ] + }, + { + "teal": 2333, + "source": 687, + "pc": [ + 2263, + 2264 + ] + }, + { + "teal": 2334, + "source": 687, + "pc": [ + 2265, + 2266 + ] + }, + { + "teal": 2335, + "source": 687, + "pc": [ + 2267 + ] + }, + { + "teal": 2336, + "source": 687, + "pc": [ + 2268, + 2269 + ] + }, + { + "teal": 2340, + "source": 688, + "pc": [ + 2270 + ] + }, + { + "teal": 2341, + "source": 688, + "pc": [ + 2271, + 2272 + ] + }, + { + "teal": 2342, + "source": 688, + "pc": [ + 2273 + ] + }, + { + "teal": 2343, + "source": 688, + "pc": [ + 2274, + 2275, + 2276 + ] + }, + { + "teal": 2344, + "source": 688, + "pc": [ + 2277 + ] + }, + { + "teal": 2345, + "source": 688, + "pc": [ + 2278 + ] + }, + { + "teal": 2350, + "source": 692, + "pc": [ + 2279, + 2280 + ] + }, + { + "teal": 2351, + "source": 692, + "pc": [ + 2281, + 2282 + ] + }, + { + "teal": 2352, + "source": 692, + "pc": [ + 2283, + 2284 + ] + }, + { + "teal": 2353, + "source": 692, + "pc": [ + 2285, + 2286, + 2287 + ] + }, + { + "teal": 2354, + "source": 692, + "pc": [ + 2288, + 2289 + ] + }, + { + "teal": 2360, + "source": 694, + "pc": [ + 2290, + 2291 + ] + }, + { + "teal": 2361, + "source": 694, + "pc": [ + 2292, + 2293 + ] + }, + { + "teal": 2362, + "source": 694, + "pc": [ + 2294, + 2295 + ] + }, + { + "teal": 2363, + "source": 694, + "pc": [ + 2296, + 2297 + ] + }, + { + "teal": 2364, + "source": 694, + "pc": [ + 2298 + ] + }, + { + "teal": 2365, + "source": 694, + "pc": [ + 2299, + 2300 + ] + }, + { + "teal": 2369, + "source": 695, + "pc": [ + 2301, + 2302 + ] + }, + { + "teal": 2370, + "source": 695, + "pc": [ + 2303, + 2304 + ] + }, + { + "teal": 2371, + "source": 695, + "pc": [ + 2305, + 2306 + ] + }, + { + "teal": 2372, + "source": 695, + "pc": [ + 2307, + 2308, + 2309 + ] + }, + { + "teal": 2373, + "source": 695, + "pc": [ + 2310 + ] + }, + { + "teal": 2374, + "source": 695, + "pc": [ + 2311, + 2312 + ] + }, + { + "teal": 2379, + "source": 696, + "pc": [ + 2313, + 2314 + ] + }, + { + "teal": 2380, + "source": 696, + "pc": [ + 2315, + 2316 + ] + }, + { + "teal": 2381, + "source": 696, + "pc": [ + 2317, + 2318 + ] + }, + { + "teal": 2382, + "source": 696, + "pc": [ + 2319, + 2320, + 2321 + ] + }, + { + "teal": 2383, + "source": 696, + "pc": [ + 2322 + ] + }, + { + "teal": 2384, + "source": 696, + "pc": [ + 2323 + ] + }, + { + "teal": 2385, + "source": 696, + "pc": [ + 2324 + ] + }, + { + "teal": 2386, + "source": 696, + "pc": [ + 2325, + 2326, + 2327 + ] + }, + { + "teal": 2390, + "source": 697, + "errorMessage": "No pool available with free stake. Validator needs to add another pool", + "pc": [ + 2328 + ] + }, + { + "teal": 2395, + "source": 701, + "pc": [ + 2329, + 2330 + ] + }, + { + "teal": 2396, + "source": 701, + "pc": [ + 2331, + 2332 + ] + }, + { + "teal": 2397, + "source": 701, + "pc": [ + 2333, + 2334 + ] + }, + { + "teal": 2398, + "source": 701, + "pc": [ + 2335, + 2336, + 2337 + ] + }, + { + "teal": 2399, + "source": 701, + "pc": [ + 2338, + 2339 + ] + }, + { + "teal": 2400, + "source": 701, + "pc": [ + 2340, + 2341, + 2342 + ] + }, + { + "teal": 2410, + "source": 709, + "pc": [ + 2343, + 2344 + ] + }, + { + "teal": 2411, + "source": 708, + "pc": [ + 2345, + 2346 + ] + }, + { + "teal": 2412, + "source": 707, + "pc": [ + 2347, + 2348 + ] + }, + { + "teal": 2413, + "source": 706, + "pc": [ + 2349, + 2350 + ] + }, + { + "teal": 2414, + "source": 706, + "pc": [ + 2351, + 2352 + ] + }, + { + "teal": 2415, + "source": 706, + "pc": [ + 2353, + 2354 + ] + }, + { + "teal": 2416, + "source": 706, + "pc": [ + 2355, + 2356, + 2357 + ] + }, + { + "teal": 2417, + "source": 705, + "pc": [ + 2358, + 2359 + ] + }, + { + "teal": 2418, + "source": 704, + "pc": [ + 2360, + 2361, + 2362 + ] + }, + { + "teal": 2422, + "source": 719, + "pc": [ + 2363, + 2364 + ] + }, + { + "teal": 2423, + "source": 719, + "pc": [ + 2365, + 2366 + ] + }, + { + "teal": 2424, + "source": 719, + "pc": [ + 2367, + 2368 + ] + }, + { + "teal": 2425, + "source": 719, + "pc": [ + 2369, + 2370, + 2371 + ] + }, + { + "teal": 2428, + "source": 649, + "pc": [ + 2372, + 2373 + ] + }, + { + "teal": 2431, + "source": 649, + "pc": [ + 2374, + 2375 + ] + }, + { + "teal": 2432, + "source": 649, + "pc": [ + 2376 + ] + }, + { + "teal": 2437, + "source": 737, + "pc": [ + 2377 + ] + }, + { + "teal": 2440, + "source": 737, + "pc": [ + 2378, + 2379, + 2380 + ] + }, + { + "teal": 2441, + "source": 737, + "pc": [ + 2381 + ] + }, + { + "teal": 2444, + "source": 737, + "pc": [ + 2382, + 2383, + 2384 + ] + }, + { + "teal": 2445, + "source": 737, + "pc": [ + 2385 + ] + }, + { + "teal": 2446, + "source": 737, + "pc": [ + 2386 + ] + }, + { + "teal": 2447, + "source": 737, + "pc": [ + 2387 + ] + }, + { + "teal": 2448, + "source": 737, + "pc": [ + 2388 + ] + }, + { + "teal": 2466, + "source": 737, + "pc": [ + 2389, + 2390, + 2391 + ] + }, + { + "teal": 2469, + "source": 737, + "pc": [ + 2392 + ] + }, + { + "teal": 2470, + "source": 737, + "pc": [ + 2393, + 2394 + ] + }, + { + "teal": 2474, + "source": 739, + "pc": [ + 2395, + 2396 + ] + }, + { + "teal": 2475, + "source": 739, + "pc": [ + 2397 + ] + }, + { + "teal": 2476, + "source": 739, + "pc": [ + 2398 + ] + }, + { + "teal": 2477, + "source": 739, + "pc": [ + 2399, + 2400 + ] + }, + { + "teal": 2478, + "source": 739, + "pc": [ + 2401 + ] + }, + { + "teal": 2479, + "source": 739, + "pc": [ + 2402 + ] + }, + { + "teal": 2480, + "source": 739, + "pc": [ + 2403, + 2404 + ] + }, + { + "teal": 2481, + "source": 739, + "pc": [ + 2405 + ] + }, + { + "teal": 2482, + "source": 739, + "pc": [ + 2406 + ] + }, + { + "teal": 2483, + "source": 739, + "pc": [ + 2407, + 2408 + ] + }, + { + "teal": 2487, + "source": 740, + "pc": [ + 2409, + 2410 + ] + }, + { + "teal": 2488, + "source": 740, + "pc": [ + 2411 + ] + }, + { + "teal": 2489, + "source": 740, + "pc": [ + 2412 + ] + }, + { + "teal": 2490, + "source": 740, + "pc": [ + 2413 + ] + }, + { + "teal": 2495, + "source": 742, + "pc": [ + 2414, + 2415 + ] + }, + { + "teal": 2496, + "source": 742, + "pc": [ + 2416, + 2417 + ] + }, + { + "teal": 2497, + "source": 742, + "pc": [ + 2418, + 2419 + ] + }, + { + "teal": 2498, + "source": 742, + "pc": [ + 2420 + ] + }, + { + "teal": 2499, + "source": 742, + "pc": [ + 2421 + ] + }, + { + "teal": 2500, + "source": 742, + "pc": [ + 2422, + 2423, + 2424 + ] + }, + { + "teal": 2505, + "source": 743, + "pc": [ + 2425, + 2426 + ] + }, + { + "teal": 2506, + "source": 743, + "pc": [ + 2427, + 2428 + ] + }, + { + "teal": 2507, + "source": 743, + "pc": [ + 2429 + ] + }, + { + "teal": 2508, + "source": 743, + "pc": [ + 2430, + 2431 + ] + }, + { + "teal": 2509, + "source": 743, + "pc": [ + 2432 + ] + }, + { + "teal": 2510, + "source": 743, + "pc": [ + 2433 + ] + }, + { + "teal": 2511, + "source": 743, + "pc": [ + 2434, + 2435 + ] + }, + { + "teal": 2512, + "source": 743, + "pc": [ + 2436 + ] + }, + { + "teal": 2513, + "source": 743, + "pc": [ + 2437, + 2438, + 2439 + ] + }, + { + "teal": 2518, + "source": 749, + "pc": [ + 2440, + 2441 + ] + }, + { + "teal": 2519, + "source": 749, + "pc": [ + 2442, + 2443 + ] + }, + { + "teal": 2523, + "source": 750, + "pc": [ + 2444, + 2445 + ] + }, + { + "teal": 2524, + "source": 750, + "pc": [ + 2446 + ] + }, + { + "teal": 2525, + "source": 750, + "pc": [ + 2447 + ] + }, + { + "teal": 2526, + "source": 750, + "pc": [ + 2448, + 2449 + ] + }, + { + "teal": 2527, + "source": 750, + "pc": [ + 2450 + ] + }, + { + "teal": 2528, + "source": 750, + "pc": [ + 2451 + ] + }, + { + "teal": 2529, + "source": 750, + "pc": [ + 2452, + 2453 + ] + }, + { + "teal": 2530, + "source": 750, + "pc": [ + 2454 + ] + }, + { + "teal": 2531, + "source": 750, + "pc": [ + 2455 + ] + }, + { + "teal": 2532, + "source": 750, + "pc": [ + 2456, + 2457 + ] + }, + { + "teal": 2537, + "source": 751, + "pc": [ + 2458, + 2459 + ] + }, + { + "teal": 2538, + "source": 751, + "pc": [ + 2460 + ] + }, + { + "teal": 2539, + "source": 751, + "pc": [ + 2461 + ] + }, + { + "teal": 2540, + "source": 751, + "pc": [ + 2462, + 2463, + 2464 + ] + }, + { + "teal": 2546, + "source": 753, + "pc": [ + 2465, + 2466 + ] + }, + { + "teal": 2547, + "source": 753, + "pc": [ + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478 + ] + }, + { + "teal": 2548, + "source": 753, + "pc": [ + 2479 + ] + }, + { + "teal": 2551, + "source": 753, + "errorMessage": "global state value does not exist: AppID.fromUint64(pool1AppID).globalState('lastPayout')", + "pc": [ + 2480 + ] + }, + { + "teal": 2552, + "source": 753, + "pc": [ + 2481, + 2482 + ] + }, + { + "teal": 2553, + "source": 753, + "pc": [ + 2483 + ] + }, + { + "teal": 2554, + "source": 753, + "pc": [ + 2484, + 2485, + 2486 + ] + }, + { + "teal": 2559, + "source": 754, + "pc": [ + 2487, + 2488 + ] + }, + { + "teal": 2560, + "source": 754, + "pc": [ + 2489, + 2490 + ] + }, + { + "teal": 2561, + "source": 754, + "pc": [ + 2491 + ] + }, + { + "teal": 2562, + "source": 754, + "pc": [ + 2492, + 2493 + ] + }, + { + "teal": 2563, + "source": 754, + "pc": [ + 2494 + ] + }, + { + "teal": 2564, + "source": 754, + "pc": [ + 2495 + ] + }, + { + "teal": 2565, + "source": 754, + "pc": [ + 2496, + 2497 + ] + }, + { + "teal": 2566, + "source": 754, + "pc": [ + 2498 + ] + }, + { + "teal": 2567, + "source": 754, + "pc": [ + 2499, + 2500, + 2501 + ] + }, + { + "teal": 2572, + "source": 756, + "pc": [ + 2502, + 2503, + 2504 + ] + }, + { + "teal": 2573, + "source": 756, + "pc": [ + 2505, + 2506 + ] + }, + { + "teal": 2574, + "source": 756, + "pc": [ + 2507 + ] + }, + { + "teal": 2575, + "source": 756, + "pc": [ + 2508, + 2509 + ] + }, + { + "teal": 2576, + "source": 756, + "pc": [ + 2510 + ] + }, + { + "teal": 2577, + "source": 756, + "pc": [ + 2511 + ] + }, + { + "teal": 2578, + "source": 756, + "pc": [ + 2512, + 2513 + ] + }, + { + "teal": 2579, + "source": 756, + "pc": [ + 2514 + ] + }, + { + "teal": 2580, + "source": 756, + "pc": [ + 2515 + ] + }, + { + "teal": 2581, + "source": 756, + "pc": [ + 2516, + 2517 + ] + }, + { + "teal": 2585, + "source": 757, + "pc": [ + 2518, + 2519 + ] + }, + { + "teal": 2586, + "source": 757, + "pc": [ + 2520, + 2521 + ] + }, + { + "teal": 2587, + "source": 757, + "pc": [ + 2522, + 2523 + ] + }, + { + "teal": 2588, + "source": 757, + "pc": [ + 2524 + ] + }, + { + "teal": 2589, + "source": 757, + "pc": [ + 2525 + ] + }, + { + "teal": 2590, + "source": 757, + "pc": [ + 2526, + 2527 + ] + }, + { + "teal": 2595, + "source": 759, + "pc": [ + 2528, + 2529 + ] + }, + { + "teal": 2596, + "source": 759, + "pc": [ + 2530, + 2531 + ] + }, + { + "teal": 2597, + "source": 759, + "pc": [ + 2532, + 2533 + ] + }, + { + "teal": 2598, + "source": 759, + "pc": [ + 2534 + ] + }, + { + "teal": 2599, + "source": 759, + "pc": [ + 2535 + ] + }, + { + "teal": 2600, + "source": 759, + "pc": [ + 2536, + 2537 + ] + }, + { + "teal": 2601, + "source": 759, + "pc": [ + 2538 + ] + }, + { + "teal": 2602, + "source": 759, + "pc": [ + 2539, + 2540, + 2541 + ] + }, + { + "teal": 2607, + "source": 760, + "pc": [ + 2542, + 2543 + ] + }, + { + "teal": 2608, + "source": 760, + "pc": [ + 2544, + 2545 + ] + }, + { + "teal": 2609, + "source": 760, + "pc": [ + 2546 + ] + }, + { + "teal": 2610, + "source": 760, + "pc": [ + 2547, + 2548 + ] + }, + { + "teal": 2611, + "source": 760, + "pc": [ + 2549 + ] + }, + { + "teal": 2612, + "source": 760, + "pc": [ + 2550 + ] + }, + { + "teal": 2613, + "source": 760, + "pc": [ + 2551, + 2552 + ] + }, + { + "teal": 2614, + "source": 760, + "pc": [ + 2553 + ] + }, + { + "teal": 2615, + "source": 760, + "pc": [ + 2554, + 2555, + 2556 + ] + }, + { + "teal": 2622, + "source": 763, + "pc": [ + 2557, + 2558 + ] + }, + { + "teal": 2623, + "source": 763, + "pc": [ + 2559, + 2560 + ] + }, + { + "teal": 2624, + "source": 763, + "pc": [ + 2561 + ] + }, + { + "teal": 2625, + "source": 763, + "pc": [ + 2562 + ] + }, + { + "teal": 2626, + "source": 763, + "pc": [ + 2563, + 2564 + ] + }, + { + "teal": 2627, + "source": 763, + "pc": [ + 2565 + ] + }, + { + "teal": 2628, + "source": 763, + "pc": [ + 2566 + ] + }, + { + "teal": 2629, + "source": 763, + "pc": [ + 2567, + 2568 + ] + }, + { + "teal": 2630, + "source": 763, + "pc": [ + 2569 + ] + }, + { + "teal": 2634, + "source": 765, + "pc": [ + 2570, + 2571 + ] + }, + { + "teal": 2635, + "source": 765, + "pc": [ + 2572, + 2573 + ] + }, + { + "teal": 2636, + "source": 765, + "pc": [ + 2574 + ] + }, + { + "teal": 2637, + "source": 765, + "pc": [ + 2575, + 2576 + ] + }, + { + "teal": 2638, + "source": 765, + "pc": [ + 2577 + ] + }, + { + "teal": 2639, + "source": 765, + "pc": [ + 2578 + ] + }, + { + "teal": 2640, + "source": 765, + "pc": [ + 2579, + 2580 + ] + }, + { + "teal": 2641, + "source": 765, + "pc": [ + 2581 + ] + }, + { + "teal": 2642, + "source": 765, + "pc": [ + 2582 + ] + }, + { + "teal": 2643, + "source": 765, + "pc": [ + 2583, + 2584 + ] + }, + { + "teal": 2647, + "source": 766, + "pc": [ + 2585, + 2586 + ] + }, + { + "teal": 2648, + "source": 766, + "pc": [ + 2587 + ] + }, + { + "teal": 2649, + "source": 766, + "pc": [ + 2588 + ] + }, + { + "teal": 2650, + "source": 766, + "pc": [ + 2589, + 2590 + ] + }, + { + "teal": 2651, + "source": 766, + "pc": [ + 2591 + ] + }, + { + "teal": 2652, + "source": 766, + "pc": [ + 2592 + ] + }, + { + "teal": 2653, + "source": 766, + "pc": [ + 2593, + 2594 + ] + }, + { + "teal": 2654, + "source": 766, + "pc": [ + 2595 + ] + }, + { + "teal": 2655, + "source": 766, + "pc": [ + 2596 + ] + }, + { + "teal": 2656, + "source": 766, + "pc": [ + 2597, + 2598 + ] + }, + { + "teal": 2660, + "source": 767, + "pc": [ + 2599 + ] + }, + { + "teal": 2661, + "source": 767, + "pc": [ + 2600, + 2601 + ] + }, + { + "teal": 2666, + "source": 767, + "pc": [ + 2602, + 2603 + ] + }, + { + "teal": 2667, + "source": 767, + "pc": [ + 2604, + 2605 + ] + }, + { + "teal": 2668, + "source": 767, + "pc": [ + 2606 + ] + }, + { + "teal": 2669, + "source": 767, + "pc": [ + 2607, + 2608, + 2609 + ] + }, + { + "teal": 2676, + "source": 773, + "pc": [ + 2610, + 2611 + ] + }, + { + "teal": 2677, + "source": 773, + "pc": [ + 2612, + 2613 + ] + }, + { + "teal": 2678, + "source": 773, + "pc": [ + 2614, + 2615 + ] + }, + { + "teal": 2679, + "source": 773, + "pc": [ + 2616 + ] + }, + { + "teal": 2680, + "source": 773, + "pc": [ + 2617 + ] + }, + { + "teal": 2681, + "source": 773, + "pc": [ + 2618, + 2619 + ] + }, + { + "teal": 2682, + "source": 773, + "pc": [ + 2620 + ] + }, + { + "teal": 2683, + "source": 773, + "pc": [ + 2621 + ] + }, + { + "teal": 2684, + "source": 773, + "pc": [ + 2622 + ] + }, + { + "teal": 2685, + "source": 773, + "pc": [ + 2623, + 2624 + ] + }, + { + "teal": 2686, + "source": 773, + "pc": [ + 2625 + ] + }, + { + "teal": 2687, + "source": 773, + "pc": [ + 2626 + ] + }, + { + "teal": 2688, + "source": 773, + "pc": [ + 2627, + 2628 + ] + }, + { + "teal": 2689, + "source": 773, + "pc": [ + 2629 + ] + }, + { + "teal": 2690, + "source": 773, + "pc": [ + 2630 + ] + }, + { + "teal": 2691, + "source": 773, + "pc": [ + 2631, + 2632 + ] + }, + { + "teal": 2692, + "source": 772, + "pc": [ + 2633 + ] + }, + { + "teal": 2693, + "source": 772, + "pc": [ + 2634 + ] + }, + { + "teal": 2694, + "source": 774, + "pc": [ + 2635, + 2636 + ] + }, + { + "teal": 2695, + "source": 772, + "pc": [ + 2637 + ] + }, + { + "teal": 2696, + "source": 772, + "pc": [ + 2638 + ] + }, + { + "teal": 2697, + "source": 772, + "pc": [ + 2639 + ] + }, + { + "teal": 2698, + "source": 772, + "pc": [ + 2640 + ] + }, + { + "teal": 2699, + "source": 772, + "pc": [ + 2641 + ] + }, + { + "teal": 2702, + "source": 772, + "errorMessage": "wideRatio failed", + "pc": [ + 2642 + ] + }, + { + "teal": 2703, + "source": 772, + "pc": [ + 2643, + 2644 + ] + }, + { + "teal": 2707, + "source": 776, + "pc": [ + 2645, + 2646 + ] + }, + { + "teal": 2708, + "source": 776, + "pc": [ + 2647, + 2648 + ] + }, + { + "teal": 2709, + "source": 776, + "pc": [ + 2649 + ] + }, + { + "teal": 2710, + "source": 776, + "pc": [ + 2650 + ] + }, + { + "teal": 2711, + "source": 776, + "pc": [ + 2651 + ] + }, + { + "teal": 2712, + "source": 776, + "pc": [ + 2652, + 2653 + ] + }, + { + "teal": 2713, + "source": 776, + "pc": [ + 2654 + ] + }, + { + "teal": 2714, + "source": 776, + "pc": [ + 2655 + ] + }, + { + "teal": 2715, + "source": 776, + "pc": [ + 2656, + 2657 + ] + }, + { + "teal": 2716, + "source": 776, + "pc": [ + 2658 + ] + }, + { + "teal": 2717, + "source": 776, + "pc": [ + 2659 + ] + }, + { + "teal": 2718, + "source": 776, + "pc": [ + 2660, + 2661 + ] + }, + { + "teal": 2719, + "source": 776, + "pc": [ + 2662 + ] + }, + { + "teal": 2724, + "source": 767, + "pc": [ + 2663, + 2664 + ] + }, + { + "teal": 2725, + "source": 767, + "pc": [ + 2665 + ] + }, + { + "teal": 2726, + "source": 767, + "pc": [ + 2666 + ] + }, + { + "teal": 2727, + "source": 767, + "pc": [ + 2667, + 2668 + ] + }, + { + "teal": 2728, + "source": 767, + "pc": [ + 2669, + 2670, + 2671 + ] + }, + { + "teal": 2733, + "source": 778, + "pc": [ + 2672, + 2673 + ] + }, + { + "teal": 2734, + "source": 778, + "pc": [ + 2674, + 2675 + ] + }, + { + "teal": 2735, + "source": 778, + "pc": [ + 2676 + ] + }, + { + "teal": 2736, + "source": 778, + "pc": [ + 2677, + 2678 + ] + }, + { + "teal": 2737, + "source": 778, + "pc": [ + 2679 + ] + }, + { + "teal": 2738, + "source": 778, + "pc": [ + 2680 + ] + }, + { + "teal": 2739, + "source": 778, + "pc": [ + 2681, + 2682 + ] + }, + { + "teal": 2740, + "source": 778, + "pc": [ + 2683 + ] + }, + { + "teal": 2744, + "source": 737, + "pc": [ + 2684, + 2685 + ] + }, + { + "teal": 2747, + "source": 737, + "pc": [ + 2686, + 2687 + ] + }, + { + "teal": 2748, + "source": 737, + "pc": [ + 2688 + ] + }, + { + "teal": 2753, + "source": 797, + "pc": [ + 2689, + 2690, + 2691 + ] + }, + { + "teal": 2754, + "source": 797, + "pc": [ + 2692 + ] + }, + { + "teal": 2757, + "source": 796, + "pc": [ + 2693, + 2694, + 2695 + ] + }, + { + "teal": 2758, + "source": 796, + "pc": [ + 2696 + ] + }, + { + "teal": 2761, + "source": 795, + "pc": [ + 2697, + 2698, + 2699 + ] + }, + { + "teal": 2762, + "source": 795, + "pc": [ + 2700 + ] + }, + { + "teal": 2765, + "source": 794, + "pc": [ + 2701, + 2702, + 2703 + ] + }, + { + "teal": 2766, + "source": 794, + "pc": [ + 2704 + ] + }, + { + "teal": 2769, + "source": 793, + "pc": [ + 2705, + 2706, + 2707 + ] + }, + { + "teal": 2770, + "source": 793, + "pc": [ + 2708 + ] + }, + { + "teal": 2771, + "source": 793, + "pc": [ + 2709 + ] + }, + { + "teal": 2772, + "source": 793, + "pc": [ + 2710 + ] + }, + { + "teal": 2773, + "source": 793, + "pc": [ + 2711 + ] + }, + { + "teal": 2776, + "source": 793, + "errorMessage": "argument 4 (poolKey) for stakeUpdatedViaRewards must be a (uint64,uint64,uint64)", + "pc": [ + 2712 + ] + }, + { + "teal": 2779, + "source": 792, + "pc": [ + 2713, + 2714, + 2715 + ] + }, + { + "teal": 2780, + "source": 792, + "pc": [ + 2716 + ] + }, + { + "teal": 2781, + "source": 792, + "pc": [ + 2717 + ] + }, + { + "teal": 2795, + "source": 792, + "pc": [ + 2718, + 2719, + 2720 + ] + }, + { + "teal": 2799, + "source": 799, + "pc": [ + 2721, + 2722 + ] + }, + { + "teal": 2800, + "source": 799, + "pc": [ + 2723, + 2724, + 2725 + ] + }, + { + "teal": 2804, + "source": 802, + "pc": [ + 2726, + 2727 + ] + }, + { + "teal": 2805, + "source": 802, + "pc": [ + 2728, + 2729 + ] + }, + { + "teal": 2806, + "source": 802, + "pc": [ + 2730, + 2731, + 2732 + ] + }, + { + "teal": 2807, + "source": 802, + "pc": [ + 2733 + ] + }, + { + "teal": 2808, + "source": 802, + "pc": [ + 2734 + ] + }, + { + "teal": 2809, + "source": 802, + "pc": [ + 2735 + ] + }, + { + "teal": 2810, + "source": 802, + "pc": [ + 2736, + 2737 + ] + }, + { + "teal": 2811, + "source": 802, + "pc": [ + 2738 + ] + }, + { + "teal": 2812, + "source": 802, + "pc": [ + 2739 + ] + }, + { + "teal": 2813, + "source": 802, + "pc": [ + 2740, + 2741 + ] + }, + { + "teal": 2814, + "source": 802, + "pc": [ + 2742 + ] + }, + { + "teal": 2815, + "source": 802, + "pc": [ + 2743, + 2744 + ] + }, + { + "teal": 2816, + "source": 802, + "pc": [ + 2745, + 2746 + ] + }, + { + "teal": 2817, + "source": 802, + "pc": [ + 2747, + 2748, + 2749 + ] + }, + { + "teal": 2818, + "source": 802, + "pc": [ + 2750 + ] + }, + { + "teal": 2819, + "source": 802, + "pc": [ + 2751 + ] + }, + { + "teal": 2820, + "source": 802, + "pc": [ + 2752 + ] + }, + { + "teal": 2821, + "source": 802, + "pc": [ + 2753, + 2754 + ] + }, + { + "teal": 2822, + "source": 802, + "pc": [ + 2755 + ] + }, + { + "teal": 2823, + "source": 802, + "pc": [ + 2756 + ] + }, + { + "teal": 2824, + "source": 802, + "pc": [ + 2757, + 2758 + ] + }, + { + "teal": 2825, + "source": 802, + "pc": [ + 2759 + ] + }, + { + "teal": 2826, + "source": 802, + "pc": [ + 2760 + ] + }, + { + "teal": 2827, + "source": 802, + "pc": [ + 2761 + ] + }, + { + "teal": 2828, + "source": 802, + "pc": [ + 2762, + 2763 + ] + }, + { + "teal": 2829, + "source": 802, + "pc": [ + 2764, + 2765, + 2766 + ] + }, + { + "teal": 2830, + "source": 802, + "pc": [ + 2767 + ] + }, + { + "teal": 2831, + "source": 802, + "pc": [ + 2768 + ] + }, + { + "teal": 2832, + "source": 802, + "pc": [ + 2769 + ] + }, + { + "teal": 2833, + "source": 802, + "pc": [ + 2770, + 2771 + ] + }, + { + "teal": 2834, + "source": 802, + "pc": [ + 2772 + ] + }, + { + "teal": 2835, + "source": 802, + "pc": [ + 2773 + ] + }, + { + "teal": 2836, + "source": 802, + "pc": [ + 2774, + 2775 + ] + }, + { + "teal": 2837, + "source": 802, + "pc": [ + 2776 + ] + }, + { + "teal": 2838, + "source": 802, + "pc": [ + 2777 + ] + }, + { + "teal": 2839, + "source": 802, + "pc": [ + 2778 + ] + }, + { + "teal": 2840, + "source": 802, + "pc": [ + 2779, + 2780 + ] + }, + { + "teal": 2841, + "source": 802, + "pc": [ + 2781, + 2782, + 2783 + ] + }, + { + "teal": 2842, + "source": 802, + "pc": [ + 2784 + ] + }, + { + "teal": 2843, + "source": 802, + "pc": [ + 2785 + ] + }, + { + "teal": 2844, + "source": 802, + "pc": [ + 2786 + ] + }, + { + "teal": 2845, + "source": 802, + "pc": [ + 2787, + 2788 + ] + }, + { + "teal": 2846, + "source": 802, + "pc": [ + 2789 + ] + }, + { + "teal": 2850, + "source": 803, + "pc": [ + 2790, + 2791 + ] + }, + { + "teal": 2851, + "source": 803, + "pc": [ + 2792 + ] + }, + { + "teal": 2852, + "source": 803, + "pc": [ + 2793 + ] + }, + { + "teal": 2853, + "source": 803, + "pc": [ + 2794 + ] + }, + { + "teal": 2854, + "source": 803, + "pc": [ + 2795, + 2796 + ] + }, + { + "teal": 2855, + "source": 803, + "pc": [ + 2797, + 2798, + 2799 + ] + }, + { + "teal": 2856, + "source": 803, + "pc": [ + 2800 + ] + }, + { + "teal": 2857, + "source": 803, + "pc": [ + 2801 + ] + }, + { + "teal": 2858, + "source": 803, + "pc": [ + 2802 + ] + }, + { + "teal": 2859, + "source": 803, + "pc": [ + 2803, + 2804 + ] + }, + { + "teal": 2860, + "source": 803, + "pc": [ + 2805 + ] + }, + { + "teal": 2861, + "source": 803, + "pc": [ + 2806 + ] + }, + { + "teal": 2862, + "source": 803, + "pc": [ + 2807, + 2808 + ] + }, + { + "teal": 2863, + "source": 803, + "pc": [ + 2809 + ] + }, + { + "teal": 2864, + "source": 803, + "pc": [ + 2810 + ] + }, + { + "teal": 2865, + "source": 803, + "pc": [ + 2811 + ] + }, + { + "teal": 2866, + "source": 803, + "pc": [ + 2812, + 2813 + ] + }, + { + "teal": 2867, + "source": 803, + "pc": [ + 2814, + 2815, + 2816 + ] + }, + { + "teal": 2868, + "source": 803, + "pc": [ + 2817 + ] + }, + { + "teal": 2869, + "source": 803, + "pc": [ + 2818 + ] + }, + { + "teal": 2870, + "source": 803, + "pc": [ + 2819 + ] + }, + { + "teal": 2871, + "source": 803, + "pc": [ + 2820, + 2821 + ] + }, + { + "teal": 2872, + "source": 803, + "pc": [ + 2822 + ] + }, + { + "teal": 2876, + "source": 804, + "pc": [ + 2823, + 2824 + ] + }, + { + "teal": 2877, + "source": 804, + "pc": [ + 2825 + ] + }, + { + "teal": 2878, + "source": 804, + "pc": [ + 2826 + ] + }, + { + "teal": 2879, + "source": 804, + "pc": [ + 2827 + ] + }, + { + "teal": 2880, + "source": 804, + "pc": [ + 2828, + 2829 + ] + }, + { + "teal": 2881, + "source": 804, + "pc": [ + 2830, + 2831, + 2832 + ] + }, + { + "teal": 2882, + "source": 804, + "pc": [ + 2833 + ] + }, + { + "teal": 2883, + "source": 804, + "pc": [ + 2834 + ] + }, + { + "teal": 2884, + "source": 804, + "pc": [ + 2835 + ] + }, + { + "teal": 2885, + "source": 804, + "pc": [ + 2836, + 2837 + ] + }, + { + "teal": 2886, + "source": 804, + "pc": [ + 2838 + ] + }, + { + "teal": 2887, + "source": 804, + "pc": [ + 2839 + ] + }, + { + "teal": 2888, + "source": 804, + "pc": [ + 2840, + 2841 + ] + }, + { + "teal": 2889, + "source": 804, + "pc": [ + 2842 + ] + }, + { + "teal": 2890, + "source": 804, + "pc": [ + 2843 + ] + }, + { + "teal": 2891, + "source": 804, + "pc": [ + 2844 + ] + }, + { + "teal": 2892, + "source": 804, + "pc": [ + 2845, + 2846 + ] + }, + { + "teal": 2893, + "source": 804, + "pc": [ + 2847, + 2848, + 2849 + ] + }, + { + "teal": 2894, + "source": 804, + "pc": [ + 2850 + ] + }, + { + "teal": 2895, + "source": 804, + "pc": [ + 2851 + ] + }, + { + "teal": 2896, + "source": 804, + "pc": [ + 2852 + ] + }, + { + "teal": 2897, + "source": 804, + "pc": [ + 2853, + 2854 + ] + }, + { + "teal": 2898, + "source": 804, + "pc": [ + 2855 + ] + }, + { + "teal": 2902, + "source": 806, + "pc": [ + 2856, + 2857 + ] + }, + { + "teal": 2903, + "source": 806, + "pc": [ + 2858 + ] + }, + { + "teal": 2904, + "source": 806, + "pc": [ + 2859, + 2860 + ] + }, + { + "teal": 2905, + "source": 806, + "pc": [ + 2861 + ] + }, + { + "teal": 2906, + "source": 806, + "pc": [ + 2862, + 2863 + ] + }, + { + "teal": 2907, + "source": 806, + "pc": [ + 2864 + ] + }, + { + "teal": 2908, + "source": 806, + "pc": [ + 2865 + ] + }, + { + "teal": 2912, + "source": 809, + "pc": [ + 2866, + 2867 + ] + }, + { + "teal": 2913, + "source": 809, + "pc": [ + 2868, + 2869, + 2870 + ] + }, + { + "teal": 2914, + "source": 809, + "pc": [ + 2871 + ] + }, + { + "teal": 2915, + "source": 809, + "pc": [ + 2872, + 2873, + 2874 + ] + }, + { + "teal": 2916, + "source": 792, + "pc": [ + 2875 + ] + }, + { + "teal": 2921, + "source": 839, + "pc": [ + 2876, + 2877, + 2878 + ] + }, + { + "teal": 2922, + "source": 839, + "pc": [ + 2879 + ] + }, + { + "teal": 2923, + "source": 839, + "pc": [ + 2880 + ] + }, + { + "teal": 2924, + "source": 839, + "pc": [ + 2881 + ] + }, + { + "teal": 2925, + "source": 839, + "pc": [ + 2882 + ] + }, + { + "teal": 2928, + "source": 839, + "errorMessage": "argument 0 (stakerRemoved) for stakeRemoved must be a bool", + "pc": [ + 2883 + ] + }, + { + "teal": 2929, + "source": 839, + "pc": [ + 2884 + ] + }, + { + "teal": 2930, + "source": 839, + "pc": [ + 2885 + ] + }, + { + "teal": 2933, + "source": 838, + "pc": [ + 2886, + 2887, + 2888 + ] + }, + { + "teal": 2934, + "source": 838, + "pc": [ + 2889 + ] + }, + { + "teal": 2937, + "source": 837, + "pc": [ + 2890, + 2891, + 2892 + ] + }, + { + "teal": 2938, + "source": 837, + "pc": [ + 2893 + ] + }, + { + "teal": 2941, + "source": 836, + "pc": [ + 2894, + 2895, + 2896 + ] + }, + { + "teal": 2942, + "source": 836, + "pc": [ + 2897 + ] + }, + { + "teal": 2943, + "source": 836, + "pc": [ + 2898 + ] + }, + { + "teal": 2944, + "source": 836, + "pc": [ + 2899, + 2900 + ] + }, + { + "teal": 2945, + "source": 836, + "pc": [ + 2901 + ] + }, + { + "teal": 2948, + "source": 836, + "errorMessage": "argument 3 (staker) for stakeRemoved must be a address", + "pc": [ + 2902 + ] + }, + { + "teal": 2951, + "source": 835, + "pc": [ + 2903, + 2904, + 2905 + ] + }, + { + "teal": 2952, + "source": 835, + "pc": [ + 2906 + ] + }, + { + "teal": 2953, + "source": 835, + "pc": [ + 2907 + ] + }, + { + "teal": 2954, + "source": 835, + "pc": [ + 2908 + ] + }, + { + "teal": 2955, + "source": 835, + "pc": [ + 2909 + ] + }, + { + "teal": 2958, + "source": 835, + "errorMessage": "argument 4 (poolKey) for stakeRemoved must be a (uint64,uint64,uint64)", + "pc": [ + 2910 + ] + }, + { + "teal": 2961, + "source": 834, + "pc": [ + 2911, + 2912, + 2913 + ] + }, + { + "teal": 2962, + "source": 834, + "pc": [ + 2914 + ] + }, + { + "teal": 2963, + "source": 834, + "pc": [ + 2915 + ] + }, + { + "teal": 2978, + "source": 834, + "pc": [ + 2916, + 2917, + 2918 + ] + }, + { + "teal": 2981, + "source": 834, + "pc": [ + 2919 + ] + }, + { + "teal": 2982, + "source": 834, + "pc": [ + 2920, + 2921 + ] + }, + { + "teal": 2987, + "source": 841, + "pc": [ + 2922, + 2923 + ] + }, + { + "teal": 2988, + "source": 841, + "pc": [ + 2924, + 2925 + ] + }, + { + "teal": 2989, + "source": 841, + "pc": [ + 2926 + ] + }, + { + "teal": 2990, + "source": 841, + "pc": [ + 2927, + 2928, + 2929 + ] + }, + { + "teal": 2995, + "source": 842, + "pc": [ + 2930 + ] + }, + { + "teal": 2996, + "source": 842, + "pc": [ + 2931, + 2932 + ] + }, + { + "teal": 2997, + "source": 842, + "pc": [ + 2933, + 2934 + ] + }, + { + "teal": 2998, + "source": 842, + "pc": [ + 2935 + ] + }, + { + "teal": 2999, + "source": 842, + "pc": [ + 2936, + 2937 + ] + }, + { + "teal": 3000, + "source": 842, + "pc": [ + 2938, + 2939 + ] + }, + { + "teal": 3001, + "source": 842, + "pc": [ + 2940 + ] + }, + { + "teal": 3002, + "source": 842, + "pc": [ + 2941, + 2942 + ] + }, + { + "teal": 3003, + "source": 842, + "pc": [ + 2943, + 2944 + ] + }, + { + "teal": 3004, + "source": 842, + "pc": [ + 2945, + 2946 + ] + }, + { + "teal": 3005, + "source": 842, + "pc": [ + 2947, + 2948 + ] + }, + { + "teal": 3006, + "source": 842, + "pc": [ + 2949 + ] + }, + { + "teal": 3011, + "source": 844, + "pc": [ + 2950, + 2951 + ] + }, + { + "teal": 3012, + "source": 844, + "pc": [ + 2952, + 2953, + 2954 + ] + }, + { + "teal": 3016, + "source": 848, + "pc": [ + 2955, + 2956 + ] + }, + { + "teal": 3017, + "source": 848, + "pc": [ + 2957 + ] + }, + { + "teal": 3018, + "source": 848, + "pc": [ + 2958 + ] + }, + { + "teal": 3019, + "source": 848, + "pc": [ + 2959 + ] + }, + { + "teal": 3020, + "source": 848, + "pc": [ + 2960, + 2961, + 2962 + ] + }, + { + "teal": 3021, + "source": 848, + "pc": [ + 2963, + 2964 + ] + }, + { + "teal": 3022, + "source": 848, + "pc": [ + 2965 + ] + }, + { + "teal": 3023, + "source": 848, + "pc": [ + 2966 + ] + }, + { + "teal": 3024, + "source": 848, + "pc": [ + 2967 + ] + }, + { + "teal": 3028, + "source": 848, + "errorMessage": "should only be called if algo or reward was removed", + "pc": [ + 2968 + ] + }, + { + "teal": 3032, + "source": 851, + "pc": [ + 2969, + 2970 + ] + }, + { + "teal": 3033, + "source": 851, + "pc": [ + 2971, + 2972 + ] + }, + { + "teal": 3034, + "source": 851, + "pc": [ + 2973, + 2974, + 2975 + ] + }, + { + "teal": 3035, + "source": 851, + "pc": [ + 2976 + ] + }, + { + "teal": 3036, + "source": 851, + "pc": [ + 2977 + ] + }, + { + "teal": 3037, + "source": 851, + "pc": [ + 2978 + ] + }, + { + "teal": 3038, + "source": 851, + "pc": [ + 2979, + 2980 + ] + }, + { + "teal": 3039, + "source": 851, + "pc": [ + 2981 + ] + }, + { + "teal": 3040, + "source": 851, + "pc": [ + 2982 + ] + }, + { + "teal": 3041, + "source": 851, + "pc": [ + 2983, + 2984 + ] + }, + { + "teal": 3042, + "source": 851, + "pc": [ + 2985 + ] + }, + { + "teal": 3043, + "source": 851, + "pc": [ + 2986, + 2987 + ] + }, + { + "teal": 3044, + "source": 851, + "pc": [ + 2988, + 2989 + ] + }, + { + "teal": 3045, + "source": 851, + "pc": [ + 2990, + 2991, + 2992 + ] + }, + { + "teal": 3046, + "source": 851, + "pc": [ + 2993 + ] + }, + { + "teal": 3047, + "source": 851, + "pc": [ + 2994 + ] + }, + { + "teal": 3048, + "source": 851, + "pc": [ + 2995 + ] + }, + { + "teal": 3049, + "source": 851, + "pc": [ + 2996, + 2997 + ] + }, + { + "teal": 3050, + "source": 851, + "pc": [ + 2998 + ] + }, + { + "teal": 3051, + "source": 851, + "pc": [ + 2999 + ] + }, + { + "teal": 3052, + "source": 851, + "pc": [ + 3000, + 3001 + ] + }, + { + "teal": 3053, + "source": 851, + "pc": [ + 3002 + ] + }, + { + "teal": 3054, + "source": 851, + "pc": [ + 3003 + ] + }, + { + "teal": 3055, + "source": 851, + "pc": [ + 3004 + ] + }, + { + "teal": 3056, + "source": 851, + "pc": [ + 3005, + 3006 + ] + }, + { + "teal": 3057, + "source": 851, + "pc": [ + 3007, + 3008, + 3009 + ] + }, + { + "teal": 3058, + "source": 851, + "pc": [ + 3010 + ] + }, + { + "teal": 3059, + "source": 851, + "pc": [ + 3011 + ] + }, + { + "teal": 3060, + "source": 851, + "pc": [ + 3012 + ] + }, + { + "teal": 3061, + "source": 851, + "pc": [ + 3013, + 3014 + ] + }, + { + "teal": 3062, + "source": 851, + "pc": [ + 3015 + ] + }, + { + "teal": 3063, + "source": 851, + "pc": [ + 3016 + ] + }, + { + "teal": 3064, + "source": 851, + "pc": [ + 3017, + 3018 + ] + }, + { + "teal": 3065, + "source": 851, + "pc": [ + 3019 + ] + }, + { + "teal": 3066, + "source": 851, + "pc": [ + 3020 + ] + }, + { + "teal": 3067, + "source": 851, + "pc": [ + 3021 + ] + }, + { + "teal": 3068, + "source": 851, + "pc": [ + 3022, + 3023 + ] + }, + { + "teal": 3069, + "source": 851, + "pc": [ + 3024, + 3025, + 3026 + ] + }, + { + "teal": 3070, + "source": 851, + "pc": [ + 3027 + ] + }, + { + "teal": 3071, + "source": 851, + "pc": [ + 3028 + ] + }, + { + "teal": 3072, + "source": 851, + "pc": [ + 3029 + ] + }, + { + "teal": 3073, + "source": 851, + "pc": [ + 3030, + 3031 + ] + }, + { + "teal": 3074, + "source": 851, + "pc": [ + 3032 + ] + }, + { + "teal": 3078, + "source": 852, + "pc": [ + 3033, + 3034 + ] + }, + { + "teal": 3079, + "source": 852, + "pc": [ + 3035 + ] + }, + { + "teal": 3080, + "source": 852, + "pc": [ + 3036 + ] + }, + { + "teal": 3081, + "source": 852, + "pc": [ + 3037 + ] + }, + { + "teal": 3082, + "source": 852, + "pc": [ + 3038, + 3039 + ] + }, + { + "teal": 3083, + "source": 852, + "pc": [ + 3040, + 3041, + 3042 + ] + }, + { + "teal": 3084, + "source": 852, + "pc": [ + 3043 + ] + }, + { + "teal": 3085, + "source": 852, + "pc": [ + 3044 + ] + }, + { + "teal": 3086, + "source": 852, + "pc": [ + 3045 + ] + }, + { + "teal": 3087, + "source": 852, + "pc": [ + 3046, + 3047 + ] + }, + { + "teal": 3088, + "source": 852, + "pc": [ + 3048 + ] + }, + { + "teal": 3089, + "source": 852, + "pc": [ + 3049 + ] + }, + { + "teal": 3090, + "source": 852, + "pc": [ + 3050, + 3051 + ] + }, + { + "teal": 3091, + "source": 852, + "pc": [ + 3052 + ] + }, + { + "teal": 3092, + "source": 852, + "pc": [ + 3053 + ] + }, + { + "teal": 3093, + "source": 852, + "pc": [ + 3054 + ] + }, + { + "teal": 3094, + "source": 852, + "pc": [ + 3055, + 3056 + ] + }, + { + "teal": 3095, + "source": 852, + "pc": [ + 3057, + 3058, + 3059 + ] + }, + { + "teal": 3096, + "source": 852, + "pc": [ + 3060 + ] + }, + { + "teal": 3097, + "source": 852, + "pc": [ + 3061 + ] + }, + { + "teal": 3098, + "source": 852, + "pc": [ + 3062 + ] + }, + { + "teal": 3099, + "source": 852, + "pc": [ + 3063, + 3064 + ] + }, + { + "teal": 3100, + "source": 852, + "pc": [ + 3065 + ] + }, + { + "teal": 3104, + "source": 853, + "pc": [ + 3066, + 3067 + ] + }, + { + "teal": 3105, + "source": 853, + "pc": [ + 3068 + ] + }, + { + "teal": 3106, + "source": 853, + "pc": [ + 3069, + 3070 + ] + }, + { + "teal": 3107, + "source": 853, + "pc": [ + 3071 + ] + }, + { + "teal": 3108, + "source": 853, + "pc": [ + 3072, + 3073 + ] + }, + { + "teal": 3109, + "source": 853, + "pc": [ + 3074 + ] + }, + { + "teal": 3110, + "source": 853, + "pc": [ + 3075 + ] + }, + { + "teal": 3115, + "source": 855, + "pc": [ + 3076, + 3077 + ] + }, + { + "teal": 3116, + "source": 855, + "pc": [ + 3078 + ] + }, + { + "teal": 3117, + "source": 855, + "pc": [ + 3079 + ] + }, + { + "teal": 3118, + "source": 855, + "pc": [ + 3080, + 3081, + 3082 + ] + }, + { + "teal": 3123, + "source": 856, + "pc": [ + 3083, + 3084 + ] + }, + { + "teal": 3124, + "source": 856, + "pc": [ + 3085 + ] + }, + { + "teal": 3125, + "source": 856, + "pc": [ + 3086 + ] + }, + { + "teal": 3126, + "source": 856, + "pc": [ + 3087, + 3088 + ] + }, + { + "teal": 3127, + "source": 856, + "pc": [ + 3089, + 3090, + 3091 + ] + }, + { + "teal": 3128, + "source": 856, + "pc": [ + 3092 + ] + }, + { + "teal": 3129, + "source": 856, + "pc": [ + 3093 + ] + }, + { + "teal": 3130, + "source": 856, + "pc": [ + 3094 + ] + }, + { + "teal": 3131, + "source": 856, + "pc": [ + 3095, + 3096 + ] + }, + { + "teal": 3132, + "source": 856, + "pc": [ + 3097 + ] + }, + { + "teal": 3133, + "source": 856, + "pc": [ + 3098 + ] + }, + { + "teal": 3134, + "source": 856, + "pc": [ + 3099, + 3100 + ] + }, + { + "teal": 3138, + "source": 857, + "pc": [ + 3101, + 3102 + ] + }, + { + "teal": 3139, + "source": 857, + "pc": [ + 3103 + ] + }, + { + "teal": 3140, + "source": 857, + "pc": [ + 3104 + ] + }, + { + "teal": 3143, + "source": 857, + "errorMessage": "rewardRemoved can't be set if validator doesn't have reward token!", + "pc": [ + 3105 + ] + }, + { + "teal": 3150, + "source": 859, + "pc": [ + 3106, + 3107 + ] + }, + { + "teal": 3151, + "source": 859, + "pc": [ + 3108 + ] + }, + { + "teal": 3152, + "source": 859, + "pc": [ + 3109 + ] + }, + { + "teal": 3153, + "source": 859, + "pc": [ + 3110, + 3111 + ] + }, + { + "teal": 3154, + "source": 859, + "pc": [ + 3112, + 3113, + 3114 + ] + }, + { + "teal": 3155, + "source": 859, + "pc": [ + 3115 + ] + }, + { + "teal": 3156, + "source": 859, + "pc": [ + 3116 + ] + }, + { + "teal": 3157, + "source": 859, + "pc": [ + 3117 + ] + }, + { + "teal": 3158, + "source": 859, + "pc": [ + 3118, + 3119 + ] + }, + { + "teal": 3159, + "source": 859, + "pc": [ + 3120 + ] + }, + { + "teal": 3160, + "source": 859, + "pc": [ + 3121 + ] + }, + { + "teal": 3161, + "source": 859, + "pc": [ + 3122, + 3123 + ] + }, + { + "teal": 3162, + "source": 859, + "pc": [ + 3124 + ] + }, + { + "teal": 3165, + "source": 858, + "errorMessage": "reward being removed must be covered by hold back amount", + "pc": [ + 3125 + ] + }, + { + "teal": 3169, + "source": 864, + "pc": [ + 3126, + 3127 + ] + }, + { + "teal": 3170, + "source": 864, + "pc": [ + 3128 + ] + }, + { + "teal": 3171, + "source": 864, + "pc": [ + 3129 + ] + }, + { + "teal": 3172, + "source": 864, + "pc": [ + 3130 + ] + }, + { + "teal": 3173, + "source": 864, + "pc": [ + 3131, + 3132 + ] + }, + { + "teal": 3174, + "source": 864, + "pc": [ + 3133, + 3134, + 3135 + ] + }, + { + "teal": 3175, + "source": 864, + "pc": [ + 3136 + ] + }, + { + "teal": 3176, + "source": 864, + "pc": [ + 3137 + ] + }, + { + "teal": 3177, + "source": 864, + "pc": [ + 3138 + ] + }, + { + "teal": 3178, + "source": 864, + "pc": [ + 3139, + 3140 + ] + }, + { + "teal": 3179, + "source": 864, + "pc": [ + 3141 + ] + }, + { + "teal": 3180, + "source": 864, + "pc": [ + 3142 + ] + }, + { + "teal": 3181, + "source": 864, + "pc": [ + 3143, + 3144 + ] + }, + { + "teal": 3182, + "source": 864, + "pc": [ + 3145 + ] + }, + { + "teal": 3183, + "source": 864, + "pc": [ + 3146 + ] + }, + { + "teal": 3184, + "source": 864, + "pc": [ + 3147 + ] + }, + { + "teal": 3185, + "source": 864, + "pc": [ + 3148, + 3149 + ] + }, + { + "teal": 3186, + "source": 864, + "pc": [ + 3150, + 3151, + 3152 + ] + }, + { + "teal": 3187, + "source": 864, + "pc": [ + 3153 + ] + }, + { + "teal": 3188, + "source": 864, + "pc": [ + 3154 + ] + }, + { + "teal": 3189, + "source": 864, + "pc": [ + 3155 + ] + }, + { + "teal": 3190, + "source": 864, + "pc": [ + 3156, + 3157 + ] + }, + { + "teal": 3191, + "source": 864, + "pc": [ + 3158 + ] + }, + { + "teal": 3196, + "source": 869, + "pc": [ + 3159, + 3160 + ] + }, + { + "teal": 3197, + "source": 869, + "pc": [ + 3161, + 3162, + 3163 + ] + }, + { + "teal": 3198, + "source": 869, + "pc": [ + 3164 + ] + }, + { + "teal": 3199, + "source": 869, + "pc": [ + 3165 + ] + }, + { + "teal": 3200, + "source": 869, + "pc": [ + 3166 + ] + }, + { + "teal": 3201, + "source": 869, + "pc": [ + 3167, + 3168, + 3169 + ] + }, + { + "teal": 3209, + "source": 870, + "pc": [ + 3170 + ] + }, + { + "teal": 3210, + "source": 870, + "pc": [ + 3171, + 3172 + ] + }, + { + "teal": 3211, + "source": 870, + "pc": [ + 3173, + 3174 + ] + }, + { + "teal": 3212, + "source": 870, + "pc": [ + 3175, + 3176 + ] + }, + { + "teal": 3213, + "source": 870, + "pc": [ + 3177, + 3178 + ] + }, + { + "teal": 3217, + "source": 871, + "pc": [ + 3179, + 3180 + ] + }, + { + "teal": 3218, + "source": 871, + "pc": [ + 3181 + ] + }, + { + "teal": 3219, + "source": 871, + "pc": [ + 3182 + ] + }, + { + "teal": 3220, + "source": 871, + "pc": [ + 3183, + 3184 + ] + }, + { + "teal": 3221, + "source": 871, + "pc": [ + 3185, + 3186, + 3187 + ] + }, + { + "teal": 3222, + "source": 871, + "pc": [ + 3188 + ] + }, + { + "teal": 3223, + "source": 871, + "pc": [ + 3189 + ] + }, + { + "teal": 3224, + "source": 871, + "pc": [ + 3190 + ] + }, + { + "teal": 3225, + "source": 871, + "pc": [ + 3191, + 3192 + ] + }, + { + "teal": 3226, + "source": 871, + "pc": [ + 3193 + ] + }, + { + "teal": 3227, + "source": 871, + "pc": [ + 3194 + ] + }, + { + "teal": 3228, + "source": 871, + "pc": [ + 3195, + 3196 + ] + }, + { + "teal": 3232, + "source": 872, + "pc": [ + 3197, + 3198 + ] + }, + { + "teal": 3233, + "source": 872, + "pc": [ + 3199, + 3200 + ] + }, + { + "teal": 3234, + "source": 872, + "pc": [ + 3201, + 3202 + ] + }, + { + "teal": 3235, + "source": 872, + "pc": [ + 3203 + ] + }, + { + "teal": 3236, + "source": 872, + "pc": [ + 3204, + 3205 + ] + }, + { + "teal": 3237, + "source": 872, + "pc": [ + 3206, + 3207 + ] + }, + { + "teal": 3238, + "source": 872, + "pc": [ + 3208 + ] + }, + { + "teal": 3239, + "source": 872, + "pc": [ + 3209, + 3210 + ] + }, + { + "teal": 3242, + "source": 870, + "pc": [ + 3211 + ] + }, + { + "teal": 3243, + "source": 870, + "pc": [ + 3212, + 3213 + ] + }, + { + "teal": 3246, + "source": 870, + "pc": [ + 3214 + ] + }, + { + "teal": 3249, + "source": 855, + "pc": [ + 3215, + 3216, + 3217 + ] + }, + { + "teal": 3257, + "source": 897, + "pc": [ + 3218, + 3219 + ] + }, + { + "teal": 3258, + "source": 897, + "pc": [ + 3220, + 3221, + 3222 + ] + }, + { + "teal": 3263, + "source": 899, + "pc": [ + 3223, + 3224 + ] + }, + { + "teal": 3264, + "source": 899, + "pc": [ + 3225, + 3226 + ] + }, + { + "teal": 3265, + "source": 899, + "pc": [ + 3227, + 3228, + 3229 + ] + }, + { + "teal": 3266, + "source": 899, + "pc": [ + 3230 + ] + }, + { + "teal": 3267, + "source": 899, + "pc": [ + 3231 + ] + }, + { + "teal": 3268, + "source": 899, + "pc": [ + 3232 + ] + }, + { + "teal": 3269, + "source": 899, + "pc": [ + 3233, + 3234 + ] + }, + { + "teal": 3270, + "source": 899, + "pc": [ + 3235 + ] + }, + { + "teal": 3271, + "source": 899, + "pc": [ + 3236 + ] + }, + { + "teal": 3272, + "source": 899, + "pc": [ + 3237 + ] + }, + { + "teal": 3273, + "source": 899, + "pc": [ + 3238 + ] + }, + { + "teal": 3274, + "source": 899, + "pc": [ + 3239, + 3240 + ] + }, + { + "teal": 3275, + "source": 899, + "pc": [ + 3241, + 3242 + ] + }, + { + "teal": 3276, + "source": 899, + "pc": [ + 3243, + 3244, + 3245 + ] + }, + { + "teal": 3277, + "source": 899, + "pc": [ + 3246 + ] + }, + { + "teal": 3278, + "source": 899, + "pc": [ + 3247 + ] + }, + { + "teal": 3279, + "source": 899, + "pc": [ + 3248 + ] + }, + { + "teal": 3280, + "source": 899, + "pc": [ + 3249, + 3250 + ] + }, + { + "teal": 3281, + "source": 899, + "pc": [ + 3251 + ] + }, + { + "teal": 3282, + "source": 899, + "pc": [ + 3252 + ] + }, + { + "teal": 3283, + "source": 899, + "pc": [ + 3253 + ] + }, + { + "teal": 3284, + "source": 899, + "pc": [ + 3254 + ] + }, + { + "teal": 3285, + "source": 899, + "pc": [ + 3255, + 3256 + ] + }, + { + "teal": 3286, + "source": 899, + "pc": [ + 3257 + ] + }, + { + "teal": 3287, + "source": 899, + "pc": [ + 3258, + 3259 + ] + }, + { + "teal": 3288, + "source": 899, + "pc": [ + 3260, + 3261, + 3262 + ] + }, + { + "teal": 3289, + "source": 899, + "pc": [ + 3263 + ] + }, + { + "teal": 3290, + "source": 899, + "pc": [ + 3264 + ] + }, + { + "teal": 3291, + "source": 899, + "pc": [ + 3265 + ] + }, + { + "teal": 3292, + "source": 899, + "pc": [ + 3266, + 3267 + ] + }, + { + "teal": 3293, + "source": 899, + "pc": [ + 3268 + ] + }, + { + "teal": 3294, + "source": 899, + "pc": [ + 3269 + ] + }, + { + "teal": 3295, + "source": 899, + "pc": [ + 3270 + ] + }, + { + "teal": 3296, + "source": 899, + "pc": [ + 3271 + ] + }, + { + "teal": 3297, + "source": 899, + "pc": [ + 3272 + ] + }, + { + "teal": 3298, + "source": 899, + "pc": [ + 3273, + 3274, + 3275 + ] + }, + { + "teal": 3299, + "source": 899, + "pc": [ + 3276 + ] + }, + { + "teal": 3300, + "source": 899, + "pc": [ + 3277, + 3278 + ] + }, + { + "teal": 3301, + "source": 899, + "pc": [ + 3279, + 3280, + 3281 + ] + }, + { + "teal": 3302, + "source": 899, + "pc": [ + 3282 + ] + }, + { + "teal": 3303, + "source": 899, + "pc": [ + 3283 + ] + }, + { + "teal": 3304, + "source": 899, + "pc": [ + 3284 + ] + }, + { + "teal": 3305, + "source": 899, + "pc": [ + 3285, + 3286 + ] + }, + { + "teal": 3306, + "source": 899, + "pc": [ + 3287 + ] + }, + { + "teal": 3314, + "source": 902, + "pc": [ + 3288, + 3289 + ] + }, + { + "teal": 3315, + "source": 902, + "pc": [ + 3290, + 3291, + 3292 + ] + }, + { + "teal": 3316, + "source": 902, + "pc": [ + 3293 + ] + }, + { + "teal": 3317, + "source": 902, + "pc": [ + 3294 + ] + }, + { + "teal": 3318, + "source": 903, + "pc": [ + 3295, + 3296 + ] + }, + { + "teal": 3319, + "source": 903, + "pc": [ + 3297, + 3298, + 3299 + ] + }, + { + "teal": 3320, + "source": 903, + "pc": [ + 3300 + ] + }, + { + "teal": 3321, + "source": 903, + "pc": [ + 3301 + ] + }, + { + "teal": 3322, + "source": 903, + "pc": [ + 3302 + ] + }, + { + "teal": 3323, + "source": 904, + "pc": [ + 3303, + 3304 + ] + }, + { + "teal": 3324, + "source": 904, + "pc": [ + 3305, + 3306, + 3307 + ] + }, + { + "teal": 3325, + "source": 904, + "pc": [ + 3308 + ] + }, + { + "teal": 3326, + "source": 904, + "pc": [ + 3309 + ] + }, + { + "teal": 3327, + "source": 904, + "pc": [ + 3310 + ] + }, + { + "teal": 3328, + "source": 901, + "pc": [ + 3311, + 3312 + ] + }, + { + "teal": 3329, + "source": 901, + "pc": [ + 3313, + 3314, + 3315 + ] + }, + { + "teal": 3330, + "source": 901, + "pc": [ + 3316, + 3317 + ] + }, + { + "teal": 3334, + "source": 906, + "pc": [ + 3318, + 3319 + ] + }, + { + "teal": 3335, + "source": 906, + "pc": [ + 3320, + 3321 + ] + }, + { + "teal": 3336, + "source": 906, + "pc": [ + 3322, + 3323 + ] + }, + { + "teal": 3337, + "source": 906, + "pc": [ + 3324 + ] + }, + { + "teal": 3338, + "source": 906, + "pc": [ + 3325 + ] + }, + { + "teal": 3339, + "source": 906, + "pc": [ + 3326, + 3327 + ] + }, + { + "teal": 3343, + "source": 907, + "pc": [ + 3328, + 3329 + ] + }, + { + "teal": 3344, + "source": 907, + "pc": [ + 3330, + 3331 + ] + }, + { + "teal": 3345, + "source": 907, + "pc": [ + 3332, + 3333 + ] + }, + { + "teal": 3346, + "source": 907, + "pc": [ + 3334 + ] + }, + { + "teal": 3347, + "source": 907, + "pc": [ + 3335 + ] + }, + { + "teal": 3348, + "source": 907, + "pc": [ + 3336, + 3337 + ] + }, + { + "teal": 3353, + "source": 909, + "pc": [ + 3338, + 3339 + ] + }, + { + "teal": 3354, + "source": 909, + "pc": [ + 3340, + 3341, + 3342 + ] + }, + { + "teal": 3359, + "source": 910, + "pc": [ + 3343, + 3344 + ] + }, + { + "teal": 3360, + "source": 910, + "pc": [ + 3345 + ] + }, + { + "teal": 3361, + "source": 910, + "pc": [ + 3346 + ] + }, + { + "teal": 3362, + "source": 910, + "pc": [ + 3347 + ] + }, + { + "teal": 3363, + "source": 910, + "pc": [ + 3348, + 3349 + ] + }, + { + "teal": 3364, + "source": 910, + "pc": [ + 3350, + 3351, + 3352 + ] + }, + { + "teal": 3365, + "source": 910, + "pc": [ + 3353 + ] + }, + { + "teal": 3366, + "source": 910, + "pc": [ + 3354 + ] + }, + { + "teal": 3367, + "source": 910, + "pc": [ + 3355 + ] + }, + { + "teal": 3368, + "source": 910, + "pc": [ + 3356, + 3357 + ] + }, + { + "teal": 3369, + "source": 910, + "pc": [ + 3358 + ] + }, + { + "teal": 3370, + "source": 910, + "pc": [ + 3359 + ] + }, + { + "teal": 3371, + "source": 910, + "pc": [ + 3360 + ] + }, + { + "teal": 3372, + "source": 910, + "pc": [ + 3361 + ] + }, + { + "teal": 3373, + "source": 910, + "pc": [ + 3362 + ] + }, + { + "teal": 3374, + "source": 910, + "pc": [ + 3363 + ] + }, + { + "teal": 3375, + "source": 910, + "pc": [ + 3364, + 3365 + ] + }, + { + "teal": 3376, + "source": 910, + "pc": [ + 3366, + 3367, + 3368 + ] + }, + { + "teal": 3377, + "source": 910, + "pc": [ + 3369 + ] + }, + { + "teal": 3378, + "source": 910, + "pc": [ + 3370 + ] + }, + { + "teal": 3379, + "source": 910, + "pc": [ + 3371 + ] + }, + { + "teal": 3380, + "source": 910, + "pc": [ + 3372, + 3373 + ] + }, + { + "teal": 3381, + "source": 910, + "pc": [ + 3374 + ] + }, + { + "teal": 3387, + "source": 913, + "pc": [ + 3375, + 3376 + ] + }, + { + "teal": 3388, + "source": 913, + "pc": [ + 3377, + 3378, + 3379 + ] + }, + { + "teal": 3393, + "source": 914, + "pc": [ + 3380, + 3381 + ] + }, + { + "teal": 3394, + "source": 914, + "pc": [ + 3382 + ] + }, + { + "teal": 3395, + "source": 914, + "pc": [ + 3383 + ] + }, + { + "teal": 3396, + "source": 914, + "pc": [ + 3384 + ] + }, + { + "teal": 3397, + "source": 914, + "pc": [ + 3385, + 3386 + ] + }, + { + "teal": 3398, + "source": 914, + "pc": [ + 3387 + ] + }, + { + "teal": 3399, + "source": 914, + "pc": [ + 3388 + ] + }, + { + "teal": 3404, + "source": 834, + "pc": [ + 3389 + ] + }, + { + "teal": 3409, + "source": 930, + "pc": [ + 3390 + ] + }, + { + "teal": 3412, + "source": 933, + "pc": [ + 3391, + 3392, + 3393 + ] + }, + { + "teal": 3413, + "source": 933, + "pc": [ + 3394 + ] + }, + { + "teal": 3416, + "source": 932, + "pc": [ + 3395, + 3396, + 3397 + ] + }, + { + "teal": 3417, + "source": 932, + "pc": [ + 3398 + ] + }, + { + "teal": 3418, + "source": 932, + "pc": [ + 3399 + ] + }, + { + "teal": 3419, + "source": 932, + "pc": [ + 3400, + 3401 + ] + }, + { + "teal": 3420, + "source": 932, + "pc": [ + 3402 + ] + }, + { + "teal": 3423, + "source": 932, + "errorMessage": "argument 1 (staker) for findPoolForStaker must be a address", + "pc": [ + 3403 + ] + }, + { + "teal": 3426, + "source": 931, + "pc": [ + 3404, + 3405, + 3406 + ] + }, + { + "teal": 3427, + "source": 931, + "pc": [ + 3407 + ] + }, + { + "teal": 3430, + "source": 930, + "pc": [ + 3408, + 3409, + 3410 + ] + }, + { + "teal": 3431, + "source": 930, + "pc": [ + 3411 + ] + }, + { + "teal": 3432, + "source": 930, + "pc": [ + 3412 + ] + }, + { + "teal": 3433, + "source": 930, + "pc": [ + 3413 + ] + }, + { + "teal": 3434, + "source": 930, + "pc": [ + 3414 + ] + }, + { + "teal": 3448, + "source": 930, + "pc": [ + 3415, + 3416, + 3417 + ] + }, + { + "teal": 3451, + "source": 930, + "pc": [ + 3418 + ] + }, + { + "teal": 3452, + "source": 930, + "pc": [ + 3419, + 3420 + ] + }, + { + "teal": 3456, + "source": 935, + "pc": [ + 3421 + ] + }, + { + "teal": 3457, + "source": 935, + "pc": [ + 3422, + 3423 + ] + }, + { + "teal": 3461, + "source": 936, + "pc": [ + 3424 + ] + }, + { + "teal": 3462, + "source": 936, + "pc": [ + 3425, + 3426 + ] + }, + { + "teal": 3466, + "source": 944, + "pc": [ + 3427, + 3428 + ] + }, + { + "teal": 3467, + "source": 944, + "pc": [ + 3429, + 3430, + 3431 + ] + }, + { + "teal": 3468, + "source": 944, + "pc": [ + 3432, + 3433 + ] + }, + { + "teal": 3473, + "source": 947, + "pc": [ + 3434 + ] + }, + { + "teal": 3474, + "source": 947, + "pc": [ + 3435, + 3436 + ] + }, + { + "teal": 3475, + "source": 947, + "pc": [ + 3437 + ] + }, + { + "teal": 3476, + "source": 947, + "pc": [ + 3438 + ] + }, + { + "teal": 3477, + "source": 947, + "pc": [ + 3439 + ] + }, + { + "teal": 3478, + "source": 947, + "pc": [ + 3440 + ] + }, + { + "teal": 3479, + "source": 947, + "pc": [ + 3441, + 3442, + 3443 + ] + }, + { + "teal": 3484, + "source": 948, + "pc": [ + 3444 + ] + }, + { + "teal": 3485, + "source": 948, + "pc": [ + 3445, + 3446 + ] + }, + { + "teal": 3486, + "source": 948, + "pc": [ + 3447 + ] + }, + { + "teal": 3487, + "source": 948, + "pc": [ + 3448 + ] + }, + { + "teal": 3490, + "source": 948, + "errorMessage": "box value does not exist: this.stakerPoolSet(staker).value", + "pc": [ + 3449 + ] + }, + { + "teal": 3491, + "source": 948, + "pc": [ + 3450, + 3451 + ] + }, + { + "teal": 3495, + "source": 949, + "pc": [ + 3452, + 3453 + ] + }, + { + "teal": 3496, + "source": 949, + "pc": [ + 3454 + ] + }, + { + "teal": 3497, + "source": 949, + "pc": [ + 3455 + ] + }, + { + "teal": 3498, + "source": 949, + "pc": [ + 3456 + ] + }, + { + "teal": 3502, + "source": 950, + "pc": [ + 3457 + ] + }, + { + "teal": 3503, + "source": 950, + "pc": [ + 3458, + 3459 + ] + }, + { + "teal": 3508, + "source": 950, + "pc": [ + 3460, + 3461 + ] + }, + { + "teal": 3509, + "source": 950, + "pc": [ + 3462, + 3463 + ] + }, + { + "teal": 3510, + "source": 950, + "pc": [ + 3464 + ] + }, + { + "teal": 3511, + "source": 950, + "pc": [ + 3465, + 3466, + 3467 + ] + }, + { + "teal": 3516, + "source": 951, + "pc": [ + 3468, + 3469 + ] + }, + { + "teal": 3517, + "source": 951, + "pc": [ + 3470, + 3471 + ] + }, + { + "teal": 3518, + "source": 951, + "pc": [ + 3472 + ] + }, + { + "teal": 3519, + "source": 951, + "pc": [ + 3473, + 3474, + 3475 + ] + }, + { + "teal": 3524, + "source": 952, + "pc": [ + 3476 + ] + }, + { + "teal": 3525, + "source": 952, + "pc": [ + 3477, + 3478 + ] + }, + { + "teal": 3526, + "source": 952, + "pc": [ + 3479, + 3480 + ] + }, + { + "teal": 3527, + "source": 952, + "pc": [ + 3481 + ] + }, + { + "teal": 3528, + "source": 952, + "pc": [ + 3482, + 3483 + ] + }, + { + "teal": 3529, + "source": 952, + "pc": [ + 3484, + 3485 + ] + }, + { + "teal": 3530, + "source": 952, + "pc": [ + 3486 + ] + }, + { + "teal": 3531, + "source": 952, + "pc": [ + 3487, + 3488 + ] + }, + { + "teal": 3532, + "source": 952, + "pc": [ + 3489, + 3490 + ] + }, + { + "teal": 3533, + "source": 952, + "pc": [ + 3491, + 3492 + ] + }, + { + "teal": 3534, + "source": 952, + "pc": [ + 3493, + 3494 + ] + }, + { + "teal": 3535, + "source": 952, + "pc": [ + 3495 + ] + }, + { + "teal": 3541, + "source": 954, + "pc": [ + 3496, + 3497 + ] + }, + { + "teal": 3542, + "source": 954, + "pc": [ + 3498, + 3499 + ] + }, + { + "teal": 3543, + "source": 954, + "pc": [ + 3500 + ] + }, + { + "teal": 3544, + "source": 954, + "pc": [ + 3501 + ] + }, + { + "teal": 3545, + "source": 954, + "pc": [ + 3502 + ] + }, + { + "teal": 3546, + "source": 954, + "pc": [ + 3503 + ] + }, + { + "teal": 3547, + "source": 954, + "pc": [ + 3504 + ] + }, + { + "teal": 3548, + "source": 954, + "pc": [ + 3505 + ] + }, + { + "teal": 3549, + "source": 954, + "pc": [ + 3506 + ] + }, + { + "teal": 3550, + "source": 954, + "pc": [ + 3507 + ] + }, + { + "teal": 3551, + "source": 954, + "pc": [ + 3508 + ] + }, + { + "teal": 3552, + "source": 954, + "pc": [ + 3509, + 3510, + 3511 + ] + }, + { + "teal": 3555, + "source": 955, + "pc": [ + 3512, + 3513, + 3514 + ] + }, + { + "teal": 3560, + "source": 957, + "pc": [ + 3515 + ] + }, + { + "teal": 3561, + "source": 957, + "pc": [ + 3516, + 3517 + ] + }, + { + "teal": 3566, + "source": 958, + "pc": [ + 3518, + 3519 + ] + }, + { + "teal": 3567, + "source": 958, + "pc": [ + 3520, + 3521 + ] + }, + { + "teal": 3568, + "source": 958, + "pc": [ + 3522 + ] + }, + { + "teal": 3569, + "source": 958, + "pc": [ + 3523 + ] + }, + { + "teal": 3570, + "source": 958, + "pc": [ + 3524 + ] + }, + { + "teal": 3571, + "source": 958, + "pc": [ + 3525 + ] + }, + { + "teal": 3572, + "source": 958, + "pc": [ + 3526 + ] + }, + { + "teal": 3573, + "source": 958, + "pc": [ + 3527 + ] + }, + { + "teal": 3574, + "source": 958, + "pc": [ + 3528 + ] + }, + { + "teal": 3575, + "source": 958, + "pc": [ + 3529, + 3530 + ] + }, + { + "teal": 3576, + "source": 958, + "pc": [ + 3531 + ] + }, + { + "teal": 3577, + "source": 958, + "pc": [ + 3532, + 3533, + 3534 + ] + }, + { + "teal": 3582, + "source": 960, + "pc": [ + 3535 + ] + }, + { + "teal": 3583, + "source": 960, + "pc": [ + 3536, + 3537 + ] + }, + { + "teal": 3590, + "source": 962, + "pc": [ + 3538, + 3539 + ] + }, + { + "teal": 3591, + "source": 962, + "pc": [ + 3540, + 3541 + ] + }, + { + "teal": 3592, + "source": 962, + "pc": [ + 3542, + 3543 + ] + }, + { + "teal": 3593, + "source": 962, + "pc": [ + 3544 + ] + }, + { + "teal": 3594, + "source": 962, + "pc": [ + 3545 + ] + }, + { + "teal": 3595, + "source": 962, + "pc": [ + 3546 + ] + }, + { + "teal": 3596, + "source": 962, + "pc": [ + 3547 + ] + }, + { + "teal": 3597, + "source": 962, + "pc": [ + 3548 + ] + }, + { + "teal": 3598, + "source": 962, + "pc": [ + 3549 + ] + }, + { + "teal": 3599, + "source": 962, + "pc": [ + 3550 + ] + }, + { + "teal": 3600, + "source": 962, + "pc": [ + 3551 + ] + }, + { + "teal": 3601, + "source": 962, + "pc": [ + 3552 + ] + }, + { + "teal": 3602, + "source": 962, + "pc": [ + 3553, + 3554 + ] + }, + { + "teal": 3603, + "source": 962, + "pc": [ + 3555 + ] + }, + { + "teal": 3604, + "source": 962, + "pc": [ + 3556 + ] + }, + { + "teal": 3605, + "source": 962, + "pc": [ + 3557, + 3558 + ] + }, + { + "teal": 3606, + "source": 962, + "pc": [ + 3559 + ] + }, + { + "teal": 3607, + "source": 962, + "pc": [ + 3560 + ] + }, + { + "teal": 3608, + "source": 962, + "pc": [ + 3561 + ] + }, + { + "teal": 3609, + "source": 962, + "pc": [ + 3562, + 3563 + ] + }, + { + "teal": 3610, + "source": 962, + "pc": [ + 3564 + ] + }, + { + "teal": 3611, + "source": 962, + "pc": [ + 3565 + ] + }, + { + "teal": 3612, + "source": 962, + "pc": [ + 3566, + 3567 + ] + }, + { + "teal": 3613, + "source": 962, + "pc": [ + 3568 + ] + }, + { + "teal": 3614, + "source": 962, + "pc": [ + 3569 + ] + }, + { + "teal": 3615, + "source": 963, + "pc": [ + 3570, + 3571 + ] + }, + { + "teal": 3616, + "source": 962, + "pc": [ + 3572 + ] + }, + { + "teal": 3617, + "source": 964, + "pc": [ + 3573, + 3574 + ] + }, + { + "teal": 3618, + "source": 963, + "pc": [ + 3575 + ] + }, + { + "teal": 3619, + "source": 961, + "pc": [ + 3576, + 3577, + 3578 + ] + }, + { + "teal": 3624, + "source": 966, + "pc": [ + 3579, + 3580 + ] + }, + { + "teal": 3625, + "source": 966, + "pc": [ + 3581, + 3582 + ] + }, + { + "teal": 3626, + "source": 966, + "pc": [ + 3583 + ] + }, + { + "teal": 3627, + "source": 966, + "pc": [ + 3584 + ] + }, + { + "teal": 3628, + "source": 966, + "pc": [ + 3585 + ] + }, + { + "teal": 3629, + "source": 966, + "pc": [ + 3586 + ] + }, + { + "teal": 3630, + "source": 966, + "pc": [ + 3587, + 3588 + ] + }, + { + "teal": 3631, + "source": 966, + "pc": [ + 3589 + ] + }, + { + "teal": 3632, + "source": 966, + "pc": [ + 3590, + 3591 + ] + }, + { + "teal": 3633, + "source": 966, + "pc": [ + 3592 + ] + }, + { + "teal": 3634, + "source": 966, + "pc": [ + 3593 + ] + }, + { + "teal": 3635, + "source": 966, + "pc": [ + 3594, + 3595 + ] + }, + { + "teal": 3636, + "source": 966, + "pc": [ + 3596 + ] + }, + { + "teal": 3637, + "source": 966, + "pc": [ + 3597 + ] + }, + { + "teal": 3638, + "source": 966, + "pc": [ + 3598, + 3599, + 3600 + ] + }, + { + "teal": 3647, + "source": 950, + "pc": [ + 3601, + 3602 + ] + }, + { + "teal": 3648, + "source": 950, + "pc": [ + 3603 + ] + }, + { + "teal": 3649, + "source": 950, + "pc": [ + 3604 + ] + }, + { + "teal": 3650, + "source": 950, + "pc": [ + 3605, + 3606 + ] + }, + { + "teal": 3651, + "source": 950, + "pc": [ + 3607, + 3608, + 3609 + ] + }, + { + "teal": 3661, + "source": 974, + "pc": [ + 3610, + 3611 + ] + }, + { + "teal": 3662, + "source": 974, + "pc": [ + 3612, + 3613 + ] + }, + { + "teal": 3663, + "source": 974, + "pc": [ + 3614 + ] + }, + { + "teal": 3664, + "source": 974, + "pc": [ + 3615 + ] + }, + { + "teal": 3665, + "source": 974, + "pc": [ + 3616, + 3617 + ] + }, + { + "teal": 3666, + "source": 974, + "pc": [ + 3618 + ] + }, + { + "teal": 3667, + "source": 974, + "pc": [ + 3619 + ] + }, + { + "teal": 3668, + "source": 974, + "pc": [ + 3620, + 3621 + ] + }, + { + "teal": 3669, + "source": 974, + "pc": [ + 3622 + ] + }, + { + "teal": 3670, + "source": 974, + "pc": [ + 3623 + ] + }, + { + "teal": 3671, + "source": 974, + "pc": [ + 3624 + ] + }, + { + "teal": 3674, + "source": 973, + "errorMessage": "must stake at least the minimum for this pool", + "pc": [ + 3625 + ] + }, + { + "teal": 3678, + "source": 979, + "pc": [ + 3626, + 3627 + ] + }, + { + "teal": 3679, + "source": 979, + "pc": [ + 3628, + 3629 + ] + }, + { + "teal": 3680, + "source": 979, + "pc": [ + 3630 + ] + }, + { + "teal": 3681, + "source": 979, + "pc": [ + 3631, + 3632 + ] + }, + { + "teal": 3682, + "source": 979, + "pc": [ + 3633 + ] + }, + { + "teal": 3683, + "source": 979, + "pc": [ + 3634 + ] + }, + { + "teal": 3684, + "source": 979, + "pc": [ + 3635, + 3636 + ] + }, + { + "teal": 3685, + "source": 979, + "pc": [ + 3637 + ] + }, + { + "teal": 3686, + "source": 979, + "pc": [ + 3638, + 3639 + ] + }, + { + "teal": 3690, + "source": 980, + "pc": [ + 3640, + 3641 + ] + }, + { + "teal": 3691, + "source": 980, + "pc": [ + 3642, + 3643 + ] + }, + { + "teal": 3692, + "source": 980, + "pc": [ + 3644 + ] + }, + { + "teal": 3693, + "source": 980, + "pc": [ + 3645, + 3646 + ] + }, + { + "teal": 3694, + "source": 980, + "pc": [ + 3647 + ] + }, + { + "teal": 3695, + "source": 980, + "pc": [ + 3648 + ] + }, + { + "teal": 3696, + "source": 980, + "pc": [ + 3649, + 3650 + ] + }, + { + "teal": 3697, + "source": 980, + "pc": [ + 3651 + ] + }, + { + "teal": 3698, + "source": 980, + "pc": [ + 3652 + ] + }, + { + "teal": 3699, + "source": 980, + "pc": [ + 3653, + 3654 + ] + }, + { + "teal": 3703, + "source": 981, + "pc": [ + 3655 + ] + }, + { + "teal": 3704, + "source": 981, + "pc": [ + 3656, + 3657 + ] + }, + { + "teal": 3709, + "source": 981, + "pc": [ + 3658, + 3659 + ] + }, + { + "teal": 3710, + "source": 981, + "pc": [ + 3660, + 3661 + ] + }, + { + "teal": 3711, + "source": 981, + "pc": [ + 3662 + ] + }, + { + "teal": 3712, + "source": 981, + "pc": [ + 3663, + 3664, + 3665 + ] + }, + { + "teal": 3717, + "source": 982, + "pc": [ + 3666, + 3667 + ] + }, + { + "teal": 3718, + "source": 982, + "pc": [ + 3668, + 3669 + ] + }, + { + "teal": 3719, + "source": 982, + "pc": [ + 3670, + 3671 + ] + }, + { + "teal": 3720, + "source": 982, + "pc": [ + 3672 + ] + }, + { + "teal": 3721, + "source": 982, + "pc": [ + 3673, + 3674 + ] + }, + { + "teal": 3722, + "source": 982, + "pc": [ + 3675 + ] + }, + { + "teal": 3723, + "source": 982, + "pc": [ + 3676 + ] + }, + { + "teal": 3724, + "source": 982, + "pc": [ + 3677 + ] + }, + { + "teal": 3725, + "source": 982, + "pc": [ + 3678 + ] + }, + { + "teal": 3726, + "source": 982, + "pc": [ + 3679, + 3680 + ] + }, + { + "teal": 3727, + "source": 982, + "pc": [ + 3681 + ] + }, + { + "teal": 3728, + "source": 982, + "pc": [ + 3682, + 3683 + ] + }, + { + "teal": 3729, + "source": 982, + "pc": [ + 3684 + ] + }, + { + "teal": 3730, + "source": 982, + "pc": [ + 3685, + 3686, + 3687 + ] + }, + { + "teal": 3739, + "source": 984, + "pc": [ + 3688, + 3689 + ] + }, + { + "teal": 3740, + "source": 984, + "pc": [ + 3690 + ] + }, + { + "teal": 3741, + "source": 984, + "pc": [ + 3691, + 3692 + ] + }, + { + "teal": 3742, + "source": 984, + "pc": [ + 3693 + ] + }, + { + "teal": 3743, + "source": 984, + "pc": [ + 3694 + ] + }, + { + "teal": 3744, + "source": 984, + "pc": [ + 3695 + ] + }, + { + "teal": 3745, + "source": 984, + "pc": [ + 3696 + ] + }, + { + "teal": 3746, + "source": 984, + "pc": [ + 3697, + 3698 + ] + }, + { + "teal": 3747, + "source": 984, + "pc": [ + 3699, + 3700 + ] + }, + { + "teal": 3748, + "source": 984, + "pc": [ + 3701, + 3702 + ] + }, + { + "teal": 3749, + "source": 984, + "pc": [ + 3703 + ] + }, + { + "teal": 3750, + "source": 984, + "pc": [ + 3704 + ] + }, + { + "teal": 3751, + "source": 984, + "pc": [ + 3705 + ] + }, + { + "teal": 3752, + "source": 984, + "pc": [ + 3706 + ] + }, + { + "teal": 3753, + "source": 984, + "pc": [ + 3707 + ] + }, + { + "teal": 3754, + "source": 984, + "pc": [ + 3708 + ] + }, + { + "teal": 3755, + "source": 984, + "pc": [ + 3709 + ] + }, + { + "teal": 3756, + "source": 984, + "pc": [ + 3710 + ] + }, + { + "teal": 3757, + "source": 985, + "pc": [ + 3711, + 3712 + ] + }, + { + "teal": 3758, + "source": 985, + "pc": [ + 3713 + ] + }, + { + "teal": 3759, + "source": 985, + "pc": [ + 3714, + 3715 + ] + }, + { + "teal": 3760, + "source": 985, + "pc": [ + 3716 + ] + }, + { + "teal": 3761, + "source": 986, + "pc": [ + 3717 + ] + }, + { + "teal": 3762, + "source": 986, + "pc": [ + 3718, + 3719 + ] + }, + { + "teal": 3763, + "source": 986, + "pc": [ + 3720 + ] + }, + { + "teal": 3764, + "source": 983, + "pc": [ + 3721 + ] + }, + { + "teal": 3765, + "source": 983, + "pc": [ + 3722, + 3723, + 3724 + ] + }, + { + "teal": 3772, + "source": 981, + "pc": [ + 3725, + 3726 + ] + }, + { + "teal": 3773, + "source": 981, + "pc": [ + 3727 + ] + }, + { + "teal": 3774, + "source": 981, + "pc": [ + 3728 + ] + }, + { + "teal": 3775, + "source": 981, + "pc": [ + 3729, + 3730 + ] + }, + { + "teal": 3776, + "source": 981, + "pc": [ + 3731, + 3732, + 3733 + ] + }, + { + "teal": 3781, + "source": 991, + "pc": [ + 3734, + 3735 + ] + }, + { + "teal": 3782, + "source": 991, + "pc": [ + 3736 + ] + }, + { + "teal": 3783, + "source": 991, + "pc": [ + 3737, + 3738 + ] + }, + { + "teal": 3784, + "source": 991, + "pc": [ + 3739 + ] + }, + { + "teal": 3785, + "source": 991, + "pc": [ + 3740, + 3741 + ] + }, + { + "teal": 3786, + "source": 991, + "pc": [ + 3742 + ] + }, + { + "teal": 3787, + "source": 991, + "pc": [ + 3743, + 3744 + ] + }, + { + "teal": 3788, + "source": 991, + "pc": [ + 3745 + ] + }, + { + "teal": 3789, + "source": 991, + "pc": [ + 3746, + 3747 + ] + }, + { + "teal": 3790, + "source": 991, + "pc": [ + 3748 + ] + }, + { + "teal": 3791, + "source": 991, + "pc": [ + 3749 + ] + }, + { + "teal": 3792, + "source": 991, + "pc": [ + 3750, + 3751 + ] + }, + { + "teal": 3793, + "source": 991, + "pc": [ + 3752 + ] + }, + { + "teal": 3794, + "source": 991, + "pc": [ + 3753 + ] + }, + { + "teal": 3798, + "source": 930, + "pc": [ + 3754, + 3755 + ] + }, + { + "teal": 3801, + "source": 930, + "pc": [ + 3756, + 3757 + ] + }, + { + "teal": 3802, + "source": 930, + "pc": [ + 3758 + ] + }, + { + "teal": 3807, + "source": 1005, + "pc": [ + 3759, + 3760, + 3761 + ] + }, + { + "teal": 3808, + "source": 1005, + "pc": [ + 3762 + ] + }, + { + "teal": 3811, + "source": 1005, + "pc": [ + 3763, + 3764, + 3765 + ] + }, + { + "teal": 3812, + "source": 1005, + "pc": [ + 3766 + ] + }, + { + "teal": 3815, + "source": 1005, + "pc": [ + 3767, + 3768, + 3769 + ] + }, + { + "teal": 3816, + "source": 1005, + "pc": [ + 3770 + ] + }, + { + "teal": 3819, + "source": 1005, + "pc": [ + 3771, + 3772, + 3773 + ] + }, + { + "teal": 3820, + "source": 1005, + "pc": [ + 3774 + ] + }, + { + "teal": 3821, + "source": 1005, + "pc": [ + 3775 + ] + }, + { + "teal": 3835, + "source": 1005, + "pc": [ + 3776, + 3777, + 3778 + ] + }, + { + "teal": 3838, + "source": 1005, + "pc": [ + 3779 + ] + }, + { + "teal": 3839, + "source": 1005, + "pc": [ + 3780, + 3781 + ] + }, + { + "teal": 3847, + "source": 1008, + "pc": [ + 3782, + 3783 + ] + }, + { + "teal": 3848, + "source": 1008, + "pc": [ + 3784 + ] + }, + { + "teal": 3849, + "source": 1008, + "pc": [ + 3785, + 3786 + ] + }, + { + "teal": 3850, + "source": 1008, + "pc": [ + 3787 + ] + }, + { + "teal": 3851, + "source": 1008, + "pc": [ + 3788, + 3789 + ] + }, + { + "teal": 3852, + "source": 1008, + "pc": [ + 3790 + ] + }, + { + "teal": 3853, + "source": 1008, + "pc": [ + 3791 + ] + }, + { + "teal": 3854, + "source": 1008, + "pc": [ + 3792, + 3793 + ] + }, + { + "teal": 3855, + "source": 1008, + "pc": [ + 3794 + ] + }, + { + "teal": 3856, + "source": 1008, + "pc": [ + 3795 + ] + }, + { + "teal": 3857, + "source": 1008, + "pc": [ + 3796 + ] + }, + { + "teal": 3858, + "source": 1008, + "pc": [ + 3797, + 3798, + 3799 + ] + }, + { + "teal": 3859, + "source": 1009, + "pc": [ + 3800, + 3801 + ] + }, + { + "teal": 3860, + "source": 1009, + "pc": [ + 3802, + 3803 + ] + }, + { + "teal": 3861, + "source": 1009, + "pc": [ + 3804, + 3805 + ] + }, + { + "teal": 3862, + "source": 1009, + "pc": [ + 3806 + ] + }, + { + "teal": 3863, + "source": 1009, + "pc": [ + 3807, + 3808 + ] + }, + { + "teal": 3864, + "source": 1009, + "pc": [ + 3809 + ] + }, + { + "teal": 3865, + "source": 1009, + "pc": [ + 3810 + ] + }, + { + "teal": 3866, + "source": 1009, + "pc": [ + 3811, + 3812 + ] + }, + { + "teal": 3867, + "source": 1009, + "pc": [ + 3813 + ] + }, + { + "teal": 3868, + "source": 1009, + "pc": [ + 3814 + ] + }, + { + "teal": 3869, + "source": 1008, + "pc": [ + 3815 + ] + }, + { + "teal": 3873, + "source": 1007, + "errorMessage": "can only be called by owner or manager of validator", + "pc": [ + 3816 + ] + }, + { + "teal": 3877, + "source": 1013, + "pc": [ + 3817, + 3818 + ] + }, + { + "teal": 3878, + "source": 1013, + "pc": [ + 3819, + 3820 + ] + }, + { + "teal": 3879, + "source": 1013, + "pc": [ + 3821 + ] + }, + { + "teal": 3880, + "source": 1013, + "pc": [ + 3822, + 3823 + ] + }, + { + "teal": 3881, + "source": 1013, + "pc": [ + 3824 + ] + }, + { + "teal": 3882, + "source": 1013, + "pc": [ + 3825 + ] + }, + { + "teal": 3883, + "source": 1013, + "pc": [ + 3826, + 3827 + ] + }, + { + "teal": 3884, + "source": 1013, + "pc": [ + 3828 + ] + }, + { + "teal": 3885, + "source": 1013, + "pc": [ + 3829, + 3830 + ] + }, + { + "teal": 3889, + "source": 1014, + "pc": [ + 3831, + 3832 + ] + }, + { + "teal": 3890, + "source": 1014, + "pc": [ + 3833 + ] + }, + { + "teal": 3891, + "source": 1014, + "pc": [ + 3834 + ] + }, + { + "teal": 3892, + "source": 1014, + "pc": [ + 3835 + ] + }, + { + "teal": 3893, + "source": 1014, + "pc": [ + 3836, + 3837, + 3838 + ] + }, + { + "teal": 3894, + "source": 1014, + "pc": [ + 3839, + 3840 + ] + }, + { + "teal": 3895, + "source": 1014, + "pc": [ + 3841 + ] + }, + { + "teal": 3896, + "source": 1014, + "pc": [ + 3842 + ] + }, + { + "teal": 3897, + "source": 1014, + "pc": [ + 3843 + ] + }, + { + "teal": 3901, + "source": 1014, + "errorMessage": "node number out of allowable range", + "pc": [ + 3844 + ] + }, + { + "teal": 3905, + "source": 1016, + "pc": [ + 3845 + ] + }, + { + "teal": 3906, + "source": 1016, + "pc": [ + 3846, + 3847 + ] + }, + { + "teal": 3911, + "source": 1016, + "pc": [ + 3848, + 3849 + ] + }, + { + "teal": 3912, + "source": 1016, + "pc": [ + 3850 + ] + }, + { + "teal": 3913, + "source": 1016, + "pc": [ + 3851 + ] + }, + { + "teal": 3914, + "source": 1016, + "pc": [ + 3852, + 3853, + 3854 + ] + }, + { + "teal": 3918, + "source": 1017, + "pc": [ + 3855 + ] + }, + { + "teal": 3919, + "source": 1017, + "pc": [ + 3856, + 3857 + ] + }, + { + "teal": 3924, + "source": 1017, + "pc": [ + 3858, + 3859 + ] + }, + { + "teal": 3925, + "source": 1017, + "pc": [ + 3860, + 3861 + ] + }, + { + "teal": 3926, + "source": 1017, + "pc": [ + 3862 + ] + }, + { + "teal": 3927, + "source": 1017, + "pc": [ + 3863, + 3864, + 3865 + ] + }, + { + "teal": 3932, + "source": 1018, + "pc": [ + 3866, + 3867 + ] + }, + { + "teal": 3933, + "source": 1018, + "pc": [ + 3868 + ] + }, + { + "teal": 3934, + "source": 1018, + "pc": [ + 3869, + 3870 + ] + }, + { + "teal": 3935, + "source": 1018, + "pc": [ + 3871 + ] + }, + { + "teal": 3936, + "source": 1018, + "pc": [ + 3872 + ] + }, + { + "teal": 3937, + "source": 1018, + "pc": [ + 3873 + ] + }, + { + "teal": 3938, + "source": 1018, + "pc": [ + 3874 + ] + }, + { + "teal": 3939, + "source": 1018, + "pc": [ + 3875 + ] + }, + { + "teal": 3940, + "source": 1018, + "pc": [ + 3876, + 3877 + ] + }, + { + "teal": 3941, + "source": 1018, + "pc": [ + 3878 + ] + }, + { + "teal": 3942, + "source": 1018, + "pc": [ + 3879 + ] + }, + { + "teal": 3943, + "source": 1018, + "pc": [ + 3880 + ] + }, + { + "teal": 3944, + "source": 1018, + "pc": [ + 3881 + ] + }, + { + "teal": 3945, + "source": 1018, + "pc": [ + 3882 + ] + }, + { + "teal": 3946, + "source": 1018, + "pc": [ + 3883 + ] + }, + { + "teal": 3947, + "source": 1018, + "pc": [ + 3884, + 3885 + ] + }, + { + "teal": 3948, + "source": 1018, + "pc": [ + 3886 + ] + }, + { + "teal": 3949, + "source": 1018, + "pc": [ + 3887, + 3888, + 3889 + ] + }, + { + "teal": 3954, + "source": 1019, + "pc": [ + 3890, + 3891 + ] + }, + { + "teal": 3955, + "source": 1019, + "pc": [ + 3892 + ] + }, + { + "teal": 3956, + "source": 1019, + "pc": [ + 3893 + ] + }, + { + "teal": 3957, + "source": 1019, + "pc": [ + 3894, + 3895 + ] + }, + { + "teal": 3958, + "source": 1019, + "pc": [ + 3896 + ] + }, + { + "teal": 3961, + "source": 1019, + "errorMessage": "can't move to same node", + "pc": [ + 3897 + ] + }, + { + "teal": 3965, + "source": 1021, + "pc": [ + 3898, + 3899 + ] + }, + { + "teal": 3966, + "source": 1021, + "pc": [ + 3900, + 3901 + ] + }, + { + "teal": 3967, + "source": 1021, + "pc": [ + 3902 + ] + }, + { + "teal": 3968, + "source": 1021, + "pc": [ + 3903 + ] + }, + { + "teal": 3969, + "source": 1021, + "pc": [ + 3904 + ] + }, + { + "teal": 3970, + "source": 1021, + "pc": [ + 3905 + ] + }, + { + "teal": 3971, + "source": 1021, + "pc": [ + 3906 + ] + }, + { + "teal": 3972, + "source": 1021, + "pc": [ + 3907, + 3908 + ] + }, + { + "teal": 3973, + "source": 1021, + "pc": [ + 3909 + ] + }, + { + "teal": 3974, + "source": 1021, + "pc": [ + 3910 + ] + }, + { + "teal": 3975, + "source": 1021, + "pc": [ + 3911 + ] + }, + { + "teal": 3976, + "source": 1021, + "pc": [ + 3912, + 3913 + ] + }, + { + "teal": 3977, + "source": 1021, + "pc": [ + 3914 + ] + }, + { + "teal": 3978, + "source": 1021, + "pc": [ + 3915, + 3916 + ] + }, + { + "teal": 3979, + "source": 1021, + "pc": [ + 3917 + ] + }, + { + "teal": 3980, + "source": 1021, + "pc": [ + 3918 + ] + }, + { + "teal": 3981, + "source": 1021, + "pc": [ + 3919, + 3920 + ] + }, + { + "teal": 3982, + "source": 1021, + "pc": [ + 3921 + ] + }, + { + "teal": 3988, + "source": 1024, + "pc": [ + 3922 + ] + }, + { + "teal": 3989, + "source": 1024, + "pc": [ + 3923, + 3924 + ] + }, + { + "teal": 3990, + "source": 1024, + "pc": [ + 3925, + 3926 + ] + }, + { + "teal": 3991, + "source": 1024, + "pc": [ + 3927, + 3928, + 3929, + 3930, + 3931, + 3932 + ] + }, + { + "teal": 3992, + "source": 1024, + "pc": [ + 3933, + 3934 + ] + }, + { + "teal": 3996, + "source": 1025, + "pc": [ + 3935, + 3936 + ] + }, + { + "teal": 3997, + "source": 1025, + "pc": [ + 3937, + 3938 + ] + }, + { + "teal": 4000, + "source": 1024, + "pc": [ + 3939 + ] + }, + { + "teal": 4001, + "source": 1024, + "pc": [ + 3940, + 3941 + ] + }, + { + "teal": 4004, + "source": 1024, + "pc": [ + 3942 + ] + }, + { + "teal": 4008, + "source": 1029, + "pc": [ + 3943, + 3944 + ] + }, + { + "teal": 4009, + "source": 1029, + "pc": [ + 3945, + 3946 + ] + }, + { + "teal": 4010, + "source": 1029, + "pc": [ + 3947, + 3948 + ] + }, + { + "teal": 4011, + "source": 1029, + "pc": [ + 3949, + 3950, + 3951 + ] + }, + { + "teal": 4015, + "source": 1030, + "pc": [ + 3952 + ] + }, + { + "teal": 4022, + "source": 1017, + "pc": [ + 3953, + 3954 + ] + }, + { + "teal": 4023, + "source": 1017, + "pc": [ + 3955 + ] + }, + { + "teal": 4024, + "source": 1017, + "pc": [ + 3956 + ] + }, + { + "teal": 4025, + "source": 1017, + "pc": [ + 3957, + 3958 + ] + }, + { + "teal": 4026, + "source": 1017, + "pc": [ + 3959, + 3960, + 3961 + ] + }, + { + "teal": 4033, + "source": 1016, + "pc": [ + 3962, + 3963 + ] + }, + { + "teal": 4034, + "source": 1016, + "pc": [ + 3964 + ] + }, + { + "teal": 4035, + "source": 1016, + "pc": [ + 3965 + ] + }, + { + "teal": 4036, + "source": 1016, + "pc": [ + 3966, + 3967 + ] + }, + { + "teal": 4037, + "source": 1016, + "pc": [ + 3968, + 3969, + 3970 + ] + }, + { + "teal": 4041, + "source": 1034, + "errorMessage": "couldn't find pool app id in nodes to move", + "pc": [ + 3971 + ] + }, + { + "teal": 4042, + "source": 1005, + "pc": [ + 3972 + ] + }, + { + "teal": 4047, + "source": 1048, + "pc": [ + 3973 + ] + }, + { + "teal": 4050, + "source": 1048, + "pc": [ + 3974, + 3975, + 3976 + ] + }, + { + "teal": 4051, + "source": 1048, + "pc": [ + 3977 + ] + }, + { + "teal": 4052, + "source": 1048, + "pc": [ + 3978 + ] + }, + { + "teal": 4053, + "source": 1048, + "pc": [ + 3979, + 3980 + ] + }, + { + "teal": 4054, + "source": 1048, + "pc": [ + 3981 + ] + }, + { + "teal": 4057, + "source": 1048, + "errorMessage": "argument 0 (receiver) for emptyTokenRewards must be a address", + "pc": [ + 3982 + ] + }, + { + "teal": 4060, + "source": 1048, + "pc": [ + 3983, + 3984, + 3985 + ] + }, + { + "teal": 4061, + "source": 1048, + "pc": [ + 3986 + ] + }, + { + "teal": 4064, + "source": 1048, + "pc": [ + 3987, + 3988, + 3989 + ] + }, + { + "teal": 4065, + "source": 1048, + "pc": [ + 3990 + ] + }, + { + "teal": 4066, + "source": 1048, + "pc": [ + 3991 + ] + }, + { + "teal": 4067, + "source": 1048, + "pc": [ + 3992 + ] + }, + { + "teal": 4068, + "source": 1048, + "pc": [ + 3993 + ] + }, + { + "teal": 4069, + "source": 1048, + "pc": [ + 3994 + ] + }, + { + "teal": 4083, + "source": 1048, + "pc": [ + 3995, + 3996, + 3997 + ] + }, + { + "teal": 4086, + "source": 1048, + "pc": [ + 3998 + ] + }, + { + "teal": 4087, + "source": 1048, + "pc": [ + 3999, + 4000 + ] + }, + { + "teal": 4094, + "source": 1050, + "pc": [ + 4001, + 4002 + ] + }, + { + "teal": 4095, + "source": 1050, + "pc": [ + 4003 + ] + }, + { + "teal": 4096, + "source": 1050, + "pc": [ + 4004, + 4005 + ] + }, + { + "teal": 4097, + "source": 1050, + "pc": [ + 4006 + ] + }, + { + "teal": 4098, + "source": 1050, + "pc": [ + 4007, + 4008 + ] + }, + { + "teal": 4099, + "source": 1050, + "pc": [ + 4009 + ] + }, + { + "teal": 4100, + "source": 1050, + "pc": [ + 4010 + ] + }, + { + "teal": 4101, + "source": 1050, + "pc": [ + 4011, + 4012 + ] + }, + { + "teal": 4102, + "source": 1050, + "pc": [ + 4013 + ] + }, + { + "teal": 4103, + "source": 1050, + "pc": [ + 4014 + ] + }, + { + "teal": 4106, + "source": 1049, + "errorMessage": "can only be called by validator owner", + "pc": [ + 4015 + ] + }, + { + "teal": 4110, + "source": 1053, + "pc": [ + 4016, + 4017 + ] + }, + { + "teal": 4111, + "source": 1053, + "pc": [ + 4018 + ] + }, + { + "teal": 4112, + "source": 1053, + "pc": [ + 4019 + ] + }, + { + "teal": 4113, + "source": 1053, + "pc": [ + 4020, + 4021 + ] + }, + { + "teal": 4114, + "source": 1053, + "pc": [ + 4022 + ] + }, + { + "teal": 4115, + "source": 1053, + "pc": [ + 4023 + ] + }, + { + "teal": 4116, + "source": 1053, + "pc": [ + 4024, + 4025 + ] + }, + { + "teal": 4117, + "source": 1053, + "pc": [ + 4026 + ] + }, + { + "teal": 4118, + "source": 1053, + "pc": [ + 4027 + ] + }, + { + "teal": 4119, + "source": 1053, + "pc": [ + 4028, + 4029 + ] + }, + { + "teal": 4123, + "source": 1054, + "pc": [ + 4030, + 4031 + ] + }, + { + "teal": 4124, + "source": 1054, + "pc": [ + 4032 + ] + }, + { + "teal": 4125, + "source": 1054, + "pc": [ + 4033 + ] + }, + { + "teal": 4126, + "source": 1054, + "pc": [ + 4034, + 4035 + ] + }, + { + "teal": 4127, + "source": 1054, + "pc": [ + 4036 + ] + }, + { + "teal": 4128, + "source": 1054, + "pc": [ + 4037 + ] + }, + { + "teal": 4129, + "source": 1054, + "pc": [ + 4038, + 4039 + ] + }, + { + "teal": 4130, + "source": 1054, + "pc": [ + 4040 + ] + }, + { + "teal": 4131, + "source": 1054, + "pc": [ + 4041 + ] + }, + { + "teal": 4132, + "source": 1054, + "pc": [ + 4042, + 4043 + ] + }, + { + "teal": 4136, + "source": 1055, + "pc": [ + 4044, + 4045 + ] + }, + { + "teal": 4137, + "source": 1055, + "pc": [ + 4046 + ] + }, + { + "teal": 4138, + "source": 1055, + "pc": [ + 4047 + ] + }, + { + "teal": 4141, + "source": 1055, + "errorMessage": "this validator doesn't have a reward token defined", + "pc": [ + 4048 + ] + }, + { + "teal": 4145, + "source": 1056, + "pc": [ + 4049, + 4050 + ] + }, + { + "teal": 4146, + "source": 1056, + "pc": [ + 4051 + ] + }, + { + "teal": 4147, + "source": 1056, + "pc": [ + 4052 + ] + }, + { + "teal": 4148, + "source": 1056, + "pc": [ + 4053, + 4054 + ] + }, + { + "teal": 4149, + "source": 1056, + "pc": [ + 4055 + ] + }, + { + "teal": 4150, + "source": 1056, + "pc": [ + 4056 + ] + }, + { + "teal": 4151, + "source": 1056, + "pc": [ + 4057, + 4058 + ] + }, + { + "teal": 4152, + "source": 1056, + "pc": [ + 4059 + ] + }, + { + "teal": 4153, + "source": 1056, + "pc": [ + 4060 + ] + }, + { + "teal": 4154, + "source": 1056, + "pc": [ + 4061, + 4062 + ] + }, + { + "teal": 4159, + "source": 1059, + "pc": [ + 4063, + 4064 + ] + }, + { + "teal": 4160, + "source": 1059, + "pc": [ + 4065, + 4066 + ] + }, + { + "teal": 4161, + "source": 1059, + "pc": [ + 4067 + ] + }, + { + "teal": 4162, + "source": 1059, + "pc": [ + 4068, + 4069 + ] + }, + { + "teal": 4163, + "source": 1059, + "pc": [ + 4070, + 4071 + ] + }, + { + "teal": 4164, + "source": 1059, + "pc": [ + 4072 + ] + }, + { + "teal": 4165, + "source": 1059, + "pc": [ + 4073, + 4074 + ] + }, + { + "teal": 4166, + "source": 1059, + "pc": [ + 4075 + ] + }, + { + "teal": 4167, + "source": 1058, + "pc": [ + 4076, + 4077 + ] + }, + { + "teal": 4174, + "source": 1062, + "pc": [ + 4078 + ] + }, + { + "teal": 4175, + "source": 1062, + "pc": [ + 4079, + 4080 + ] + }, + { + "teal": 4176, + "source": 1062, + "pc": [ + 4081, + 4082 + ] + }, + { + "teal": 4177, + "source": 1062, + "pc": [ + 4083, + 4084 + ] + }, + { + "teal": 4178, + "source": 1062, + "pc": [ + 4085, + 4086 + ] + }, + { + "teal": 4182, + "source": 1063, + "pc": [ + 4087, + 4088 + ] + }, + { + "teal": 4183, + "source": 1063, + "pc": [ + 4089, + 4090 + ] + }, + { + "teal": 4187, + "source": 1064, + "pc": [ + 4091, + 4092 + ] + }, + { + "teal": 4188, + "source": 1064, + "pc": [ + 4093, + 4094 + ] + }, + { + "teal": 4189, + "source": 1064, + "pc": [ + 4095, + 4096 + ] + }, + { + "teal": 4190, + "source": 1064, + "pc": [ + 4097 + ] + }, + { + "teal": 4191, + "source": 1064, + "pc": [ + 4098, + 4099 + ] + }, + { + "teal": 4192, + "source": 1064, + "pc": [ + 4100, + 4101 + ] + }, + { + "teal": 4193, + "source": 1064, + "pc": [ + 4102 + ] + }, + { + "teal": 4194, + "source": 1064, + "pc": [ + 4103, + 4104 + ] + }, + { + "teal": 4197, + "source": 1062, + "pc": [ + 4105 + ] + }, + { + "teal": 4198, + "source": 1062, + "pc": [ + 4106, + 4107 + ] + }, + { + "teal": 4201, + "source": 1062, + "pc": [ + 4108 + ] + }, + { + "teal": 4208, + "source": 1067, + "pc": [ + 4109, + 4110 + ] + }, + { + "teal": 4209, + "source": 1067, + "pc": [ + 4111, + 4112 + ] + }, + { + "teal": 4210, + "source": 1067, + "pc": [ + 4113 + ] + }, + { + "teal": 4211, + "source": 1067, + "pc": [ + 4114, + 4115 + ] + }, + { + "teal": 4212, + "source": 1067, + "pc": [ + 4116, + 4117 + ] + }, + { + "teal": 4213, + "source": 1067, + "pc": [ + 4118 + ] + }, + { + "teal": 4214, + "source": 1067, + "pc": [ + 4119, + 4120 + ] + }, + { + "teal": 4215, + "source": 1067, + "pc": [ + 4121 + ] + }, + { + "teal": 4218, + "source": 1066, + "errorMessage": "balance of remaining reward tokens should match the held back amount", + "pc": [ + 4122 + ] + }, + { + "teal": 4222, + "source": 1070, + "pc": [ + 4123, + 4124 + ] + }, + { + "teal": 4225, + "source": 1048, + "pc": [ + 4125, + 4126 + ] + }, + { + "teal": 4228, + "source": 1048, + "pc": [ + 4127, + 4128 + ] + }, + { + "teal": 4229, + "source": 1048, + "pc": [ + 4129 + ] + }, + { + "teal": 4240, + "source": 1167, + "pc": [ + 4130, + 4131, + 4132 + ] + }, + { + "teal": 4244, + "source": 1168, + "pc": [ + 4133 + ] + }, + { + "teal": 4245, + "source": 1168, + "pc": [ + 4134, + 4135 + ] + }, + { + "teal": 4246, + "source": 1168, + "pc": [ + 4136, + 4137, + 4138 + ] + }, + { + "teal": 4247, + "source": 1168, + "pc": [ + 4139 + ] + }, + { + "teal": 4248, + "source": 1168, + "pc": [ + 4140 + ] + }, + { + "teal": 4249, + "source": 1168, + "pc": [ + 4141 + ] + }, + { + "teal": 4250, + "source": 1168, + "pc": [ + 4142 + ] + }, + { + "teal": 4251, + "source": 1168, + "pc": [ + 4143 + ] + }, + { + "teal": 4252, + "source": 1168, + "pc": [ + 4144 + ] + }, + { + "teal": 4255, + "source": 1168, + "errorMessage": "the specified validator id isn't valid", + "pc": [ + 4145 + ] + }, + { + "teal": 4259, + "source": 1169, + "pc": [ + 4146, + 4147 + ] + }, + { + "teal": 4260, + "source": 1169, + "pc": [ + 4148, + 4149, + 4150 + ] + }, + { + "teal": 4261, + "source": 1169, + "pc": [ + 4151 + ] + }, + { + "teal": 4262, + "source": 29, + "pc": [ + 4152 + ] + }, + { + "teal": 4263, + "source": 1169, + "pc": [ + 4153 + ] + }, + { + "teal": 4266, + "source": 1169, + "errorMessage": "pool id not in valid range", + "pc": [ + 4154 + ] + }, + { + "teal": 4273, + "source": 1171, + "pc": [ + 4155, + 4156 + ] + }, + { + "teal": 4274, + "source": 1171, + "pc": [ + 4157, + 4158, + 4159 + ] + }, + { + "teal": 4275, + "source": 1171, + "pc": [ + 4160 + ] + }, + { + "teal": 4276, + "source": 1171, + "pc": [ + 4161 + ] + }, + { + "teal": 4277, + "source": 1171, + "pc": [ + 4162 + ] + }, + { + "teal": 4278, + "source": 1171, + "pc": [ + 4163 + ] + }, + { + "teal": 4279, + "source": 1171, + "pc": [ + 4164, + 4165, + 4166 + ] + }, + { + "teal": 4280, + "source": 1171, + "pc": [ + 4167, + 4168 + ] + }, + { + "teal": 4281, + "source": 1171, + "pc": [ + 4169, + 4170, + 4171 + ] + }, + { + "teal": 4282, + "source": 1171, + "pc": [ + 4172 + ] + }, + { + "teal": 4283, + "source": 1171, + "pc": [ + 4173, + 4174 + ] + }, + { + "teal": 4284, + "source": 1171, + "pc": [ + 4175, + 4176 + ] + }, + { + "teal": 4285, + "source": 1171, + "pc": [ + 4177 + ] + }, + { + "teal": 4286, + "source": 1171, + "pc": [ + 4178, + 4179 + ] + }, + { + "teal": 4287, + "source": 1171, + "pc": [ + 4180, + 4181, + 4182 + ] + }, + { + "teal": 4288, + "source": 1171, + "pc": [ + 4183 + ] + }, + { + "teal": 4289, + "source": 1171, + "pc": [ + 4184 + ] + }, + { + "teal": 4290, + "source": 1171, + "pc": [ + 4185 + ] + }, + { + "teal": 4291, + "source": 1171, + "pc": [ + 4186, + 4187 + ] + }, + { + "teal": 4292, + "source": 1171, + "pc": [ + 4188 + ] + }, + { + "teal": 4293, + "source": 1171, + "pc": [ + 4189 + ] + }, + { + "teal": 4294, + "source": 1171, + "pc": [ + 4190 + ] + }, + { + "teal": 4295, + "source": 1171, + "pc": [ + 4191 + ] + }, + { + "teal": 4299, + "source": 1170, + "errorMessage": "pool id outside of range of pools created for this validator", + "pc": [ + 4192 + ] + }, + { + "teal": 4306, + "source": 1177, + "pc": [ + 4193, + 4194 + ] + }, + { + "teal": 4307, + "source": 1177, + "pc": [ + 4195, + 4196, + 4197 + ] + }, + { + "teal": 4308, + "source": 1177, + "pc": [ + 4198 + ] + }, + { + "teal": 4309, + "source": 1177, + "pc": [ + 4199, + 4200 + ] + }, + { + "teal": 4310, + "source": 1177, + "pc": [ + 4201, + 4202 + ] + }, + { + "teal": 4311, + "source": 1177, + "pc": [ + 4203, + 4204, + 4205 + ] + }, + { + "teal": 4312, + "source": 1177, + "pc": [ + 4206 + ] + }, + { + "teal": 4313, + "source": 1177, + "pc": [ + 4207 + ] + }, + { + "teal": 4314, + "source": 1177, + "pc": [ + 4208 + ] + }, + { + "teal": 4315, + "source": 1177, + "pc": [ + 4209, + 4210 + ] + }, + { + "teal": 4316, + "source": 1177, + "pc": [ + 4211 + ] + }, + { + "teal": 4317, + "source": 1177, + "pc": [ + 4212 + ] + }, + { + "teal": 4318, + "source": 1177, + "pc": [ + 4213 + ] + }, + { + "teal": 4319, + "source": 1177, + "pc": [ + 4214 + ] + }, + { + "teal": 4320, + "source": 1177, + "pc": [ + 4215 + ] + }, + { + "teal": 4321, + "source": 1177, + "pc": [ + 4216 + ] + }, + { + "teal": 4322, + "source": 1177, + "pc": [ + 4217, + 4218 + ] + }, + { + "teal": 4323, + "source": 1177, + "pc": [ + 4219, + 4220, + 4221 + ] + }, + { + "teal": 4324, + "source": 1177, + "pc": [ + 4222 + ] + }, + { + "teal": 4325, + "source": 1177, + "pc": [ + 4223 + ] + }, + { + "teal": 4326, + "source": 1177, + "pc": [ + 4224 + ] + }, + { + "teal": 4327, + "source": 1177, + "pc": [ + 4225, + 4226 + ] + }, + { + "teal": 4328, + "source": 1177, + "pc": [ + 4227 + ] + }, + { + "teal": 4329, + "source": 1177, + "pc": [ + 4228 + ] + }, + { + "teal": 4330, + "source": 1177, + "pc": [ + 4229 + ] + }, + { + "teal": 4333, + "source": 1176, + "errorMessage": "The passed in app id doesn't match the passed in ids", + "pc": [ + 4230 + ] + }, + { + "teal": 4337, + "source": 1181, + "pc": [ + 4231, + 4232 + ] + }, + { + "teal": 4338, + "source": 1181, + "pc": [ + 4233, + 4234 + ] + }, + { + "teal": 4339, + "source": 1181, + "pc": [ + 4235, + 4236, + 4237 + ] + }, + { + "teal": 4340, + "source": 1181, + "pc": [ + 4238 + ] + }, + { + "teal": 4341, + "source": 1181, + "pc": [ + 4239, + 4240 + ] + }, + { + "teal": 4342, + "source": 1181, + "pc": [ + 4241 + ] + }, + { + "teal": 4343, + "source": 1181, + "pc": [ + 4242 + ] + }, + { + "teal": 4344, + "source": 1181, + "pc": [ + 4243 + ] + }, + { + "teal": 4348, + "source": 1183, + "pc": [ + 4244, + 4245 + ] + }, + { + "teal": 4349, + "source": 1183, + "pc": [ + 4246, + 4247, + 4248 + ] + }, + { + "teal": 4350, + "source": 1183, + "pc": [ + 4249 + ] + }, + { + "teal": 4351, + "source": 1183, + "pc": [ + 4250, + 4251 + ] + }, + { + "teal": 4352, + "source": 1183, + "pc": [ + 4252, + 4253, + 4254 + ] + }, + { + "teal": 4353, + "source": 1183, + "pc": [ + 4255 + ] + }, + { + "teal": 4354, + "source": 1183, + "pc": [ + 4256, + 4257, + 4258, + 4259, + 4260, + 4261, + 4262, + 4263, + 4264, + 4265, + 4266, + 4267, + 4268 + ] + }, + { + "teal": 4355, + "source": 1183, + "pc": [ + 4269 + ] + }, + { + "teal": 4358, + "source": 1183, + "errorMessage": "global state value does not exist: AppID.fromUint64(poolKey.poolAppId).globalState('validatorId')", + "pc": [ + 4270 + ] + }, + { + "teal": 4359, + "source": 1183, + "pc": [ + 4271 + ] + }, + { + "teal": 4360, + "source": 1183, + "pc": [ + 4272 + ] + }, + { + "teal": 4364, + "source": 1184, + "pc": [ + 4273, + 4274 + ] + }, + { + "teal": 4365, + "source": 1184, + "pc": [ + 4275, + 4276, + 4277 + ] + }, + { + "teal": 4366, + "source": 1184, + "pc": [ + 4278 + ] + }, + { + "teal": 4367, + "source": 1184, + "pc": [ + 4279, + 4280 + ] + }, + { + "teal": 4368, + "source": 1184, + "pc": [ + 4281, + 4282, + 4283 + ] + }, + { + "teal": 4369, + "source": 1184, + "pc": [ + 4284 + ] + }, + { + "teal": 4370, + "source": 1184, + "pc": [ + 4285, + 4286, + 4287, + 4288, + 4289, + 4290, + 4291, + 4292 + ] + }, + { + "teal": 4371, + "source": 1184, + "pc": [ + 4293 + ] + }, + { + "teal": 4374, + "source": 1184, + "errorMessage": "global state value does not exist: AppID.fromUint64(poolKey.poolAppId).globalState('poolId')", + "pc": [ + 4294 + ] + }, + { + "teal": 4375, + "source": 1184, + "pc": [ + 4295 + ] + }, + { + "teal": 4376, + "source": 1184, + "pc": [ + 4296 + ] + }, + { + "teal": 4377, + "source": 1167, + "pc": [ + 4297 + ] + }, + { + "teal": 4386, + "source": 1193, + "pc": [ + 4298, + 4299, + 4300 + ] + }, + { + "teal": 4389, + "source": 1193, + "pc": [ + 4301 + ] + }, + { + "teal": 4390, + "source": 1193, + "pc": [ + 4302 + ] + }, + { + "teal": 4394, + "source": 1194, + "pc": [ + 4303 + ] + }, + { + "teal": 4395, + "source": 1194, + "pc": [ + 4304, + 4305 + ] + }, + { + "teal": 4396, + "source": 1194, + "pc": [ + 4306 + ] + }, + { + "teal": 4397, + "source": 1194, + "pc": [ + 4307 + ] + }, + { + "teal": 4398, + "source": 1194, + "pc": [ + 4308, + 4309 + ] + }, + { + "teal": 4403, + "source": 1195, + "pc": [ + 4310, + 4311 + ] + }, + { + "teal": 4404, + "source": 1195, + "pc": [ + 4312 + ] + }, + { + "teal": 4405, + "source": 1194, + "pc": [ + 4313 + ] + }, + { + "teal": 4406, + "source": 1194, + "pc": [ + 4314, + 4315 + ] + }, + { + "teal": 4407, + "source": 1194, + "pc": [ + 4316 + ] + }, + { + "teal": 4408, + "source": 1194, + "pc": [ + 4317 + ] + }, + { + "teal": 4409, + "source": 1194, + "pc": [ + 4318, + 4319 + ] + }, + { + "teal": 4410, + "source": 1194, + "pc": [ + 4320 + ] + }, + { + "teal": 4411, + "source": 1195, + "pc": [ + 4321 + ] + }, + { + "teal": 4412, + "source": 1195, + "pc": [ + 4322 + ] + }, + { + "teal": 4413, + "source": 1195, + "pc": [ + 4323 + ] + }, + { + "teal": 4414, + "source": 1195, + "pc": [ + 4324, + 4325, + 4326 + ] + }, + { + "teal": 4419, + "source": 1198, + "pc": [ + 4327, + 4328 + ] + }, + { + "teal": 4420, + "source": 1198, + "pc": [ + 4329 + ] + }, + { + "teal": 4421, + "source": 1194, + "pc": [ + 4330 + ] + }, + { + "teal": 4422, + "source": 1194, + "pc": [ + 4331, + 4332 + ] + }, + { + "teal": 4423, + "source": 1194, + "pc": [ + 4333 + ] + }, + { + "teal": 4424, + "source": 1194, + "pc": [ + 4334 + ] + }, + { + "teal": 4425, + "source": 1194, + "pc": [ + 4335, + 4336 + ] + }, + { + "teal": 4426, + "source": 1194, + "pc": [ + 4337 + ] + }, + { + "teal": 4427, + "source": 1198, + "pc": [ + 4338 + ] + }, + { + "teal": 4428, + "source": 1198, + "pc": [ + 4339, + 4340 + ] + }, + { + "teal": 4429, + "source": 1198, + "pc": [ + 4341 + ] + }, + { + "teal": 4432, + "source": 1198, + "errorMessage": "global state value does not exist: AppID.fromUint64(validatorConfig.nfdForInfo).globalState('i.owner.a')", + "pc": [ + 4342 + ] + }, + { + "teal": 4433, + "source": 1198, + "pc": [ + 4343, + 4344 + ] + }, + { + "teal": 4438, + "source": 1200, + "pc": [ + 4345 + ] + }, + { + "teal": 4439, + "source": 1200, + "pc": [ + 4346, + 4347 + ] + }, + { + "teal": 4440, + "source": 1194, + "pc": [ + 4348 + ] + }, + { + "teal": 4441, + "source": 1194, + "pc": [ + 4349, + 4350 + ] + }, + { + "teal": 4442, + "source": 1194, + "pc": [ + 4351 + ] + }, + { + "teal": 4443, + "source": 1194, + "pc": [ + 4352 + ] + }, + { + "teal": 4444, + "source": 1194, + "pc": [ + 4353, + 4354 + ] + }, + { + "teal": 4445, + "source": 1194, + "pc": [ + 4355 + ] + }, + { + "teal": 4446, + "source": 1200, + "pc": [ + 4356, + 4357 + ] + }, + { + "teal": 4447, + "source": 1200, + "pc": [ + 4358 + ] + }, + { + "teal": 4448, + "source": 1200, + "pc": [ + 4359 + ] + }, + { + "teal": 4449, + "source": 1200, + "pc": [ + 4360, + 4361, + 4362 + ] + }, + { + "teal": 4450, + "source": 1200, + "pc": [ + 4363, + 4364 + ] + }, + { + "teal": 4451, + "source": 1200, + "pc": [ + 4365, + 4366 + ] + }, + { + "teal": 4452, + "source": 1194, + "pc": [ + 4367 + ] + }, + { + "teal": 4453, + "source": 1194, + "pc": [ + 4368, + 4369 + ] + }, + { + "teal": 4454, + "source": 1194, + "pc": [ + 4370 + ] + }, + { + "teal": 4455, + "source": 1194, + "pc": [ + 4371 + ] + }, + { + "teal": 4456, + "source": 1194, + "pc": [ + 4372, + 4373 + ] + }, + { + "teal": 4457, + "source": 1194, + "pc": [ + 4374 + ] + }, + { + "teal": 4458, + "source": 1200, + "pc": [ + 4375, + 4376 + ] + }, + { + "teal": 4459, + "source": 1200, + "pc": [ + 4377 + ] + }, + { + "teal": 4460, + "source": 1200, + "pc": [ + 4378 + ] + }, + { + "teal": 4463, + "source": 1200, + "pc": [ + 4379, + 4380, + 4381 + ] + }, + { + "teal": 4468, + "source": 1202, + "pc": [ + 4382, + 4383 + ] + }, + { + "teal": 4469, + "source": 1202, + "pc": [ + 4384, + 4385 + ] + }, + { + "teal": 4470, + "source": 1202, + "pc": [ + 4386 + ] + }, + { + "teal": 4471, + "source": 1202, + "pc": [ + 4387, + 4388 + ] + }, + { + "teal": 4472, + "source": 1202, + "pc": [ + 4389 + ] + }, + { + "teal": 4473, + "source": 1202, + "pc": [ + 4390 + ] + }, + { + "teal": 4474, + "source": 1202, + "pc": [ + 4391, + 4392 + ] + }, + { + "teal": 4475, + "source": 1202, + "pc": [ + 4393 + ] + }, + { + "teal": 4480, + "source": 1193, + "pc": [ + 4394 + ] + }, + { + "teal": 4484, + "source": 1207, + "pc": [ + 4395, + 4396, + 4397 + ] + }, + { + "teal": 4491, + "source": 1210, + "pc": [ + 4398, + 4399 + ] + }, + { + "teal": 4492, + "source": 1210, + "pc": [ + 4400, + 4401, + 4402 + ] + }, + { + "teal": 4493, + "source": 1210, + "pc": [ + 4403 + ] + }, + { + "teal": 4494, + "source": 1210, + "pc": [ + 4404 + ] + }, + { + "teal": 4495, + "source": 1210, + "pc": [ + 4405 + ] + }, + { + "teal": 4496, + "source": 1210, + "pc": [ + 4406 + ] + }, + { + "teal": 4497, + "source": 1210, + "pc": [ + 4407, + 4408, + 4409 + ] + }, + { + "teal": 4498, + "source": 1210, + "pc": [ + 4410, + 4411 + ] + }, + { + "teal": 4499, + "source": 1210, + "pc": [ + 4412, + 4413, + 4414 + ] + }, + { + "teal": 4500, + "source": 1210, + "pc": [ + 4415 + ] + }, + { + "teal": 4501, + "source": 1210, + "pc": [ + 4416, + 4417 + ] + }, + { + "teal": 4502, + "source": 1210, + "pc": [ + 4418 + ] + }, + { + "teal": 4503, + "source": 1210, + "pc": [ + 4419 + ] + }, + { + "teal": 4507, + "source": 1209, + "errorMessage": "gating type not valid", + "pc": [ + 4420 + ] + }, + { + "teal": 4514, + "source": 1214, + "pc": [ + 4421, + 4422 + ] + }, + { + "teal": 4515, + "source": 1214, + "pc": [ + 4423, + 4424, + 4425 + ] + }, + { + "teal": 4516, + "source": 1214, + "pc": [ + 4426 + ] + }, + { + "teal": 4517, + "source": 1214, + "pc": [ + 4427 + ] + }, + { + "teal": 4518, + "source": 1214, + "pc": [ + 4428 + ] + }, + { + "teal": 4519, + "source": 1214, + "pc": [ + 4429 + ] + }, + { + "teal": 4520, + "source": 1214, + "pc": [ + 4430, + 4431, + 4432 + ] + }, + { + "teal": 4521, + "source": 1214, + "pc": [ + 4433, + 4434 + ] + }, + { + "teal": 4522, + "source": 1214, + "pc": [ + 4435, + 4436, + 4437 + ] + }, + { + "teal": 4523, + "source": 1214, + "pc": [ + 4438 + ] + }, + { + "teal": 4524, + "source": 1214, + "pc": [ + 4439, + 4440 + ] + }, + { + "teal": 4525, + "source": 1214, + "pc": [ + 4441 + ] + }, + { + "teal": 4526, + "source": 1214, + "pc": [ + 4442 + ] + }, + { + "teal": 4530, + "source": 1213, + "errorMessage": "epoch length not in allowable range", + "pc": [ + 4443 + ] + }, + { + "teal": 4537, + "source": 1218, + "pc": [ + 4444, + 4445 + ] + }, + { + "teal": 4538, + "source": 1218, + "pc": [ + 4446, + 4447, + 4448 + ] + }, + { + "teal": 4539, + "source": 1218, + "pc": [ + 4449 + ] + }, + { + "teal": 4540, + "source": 1218, + "pc": [ + 4450 + ] + }, + { + "teal": 4541, + "source": 1218, + "pc": [ + 4451 + ] + }, + { + "teal": 4542, + "source": 1218, + "pc": [ + 4452 + ] + }, + { + "teal": 4543, + "source": 1218, + "pc": [ + 4453, + 4454, + 4455 + ] + }, + { + "teal": 4544, + "source": 1218, + "pc": [ + 4456, + 4457 + ] + }, + { + "teal": 4545, + "source": 1218, + "pc": [ + 4458, + 4459, + 4460 + ] + }, + { + "teal": 4546, + "source": 1218, + "pc": [ + 4461 + ] + }, + { + "teal": 4547, + "source": 1218, + "pc": [ + 4462, + 4463 + ] + }, + { + "teal": 4548, + "source": 1218, + "pc": [ + 4464 + ] + }, + { + "teal": 4549, + "source": 1218, + "pc": [ + 4465 + ] + }, + { + "teal": 4553, + "source": 1217, + "errorMessage": "commission percentage not valid", + "pc": [ + 4466 + ] + }, + { + "teal": 4558, + "source": 1221, + "pc": [ + 4467, + 4468 + ] + }, + { + "teal": 4559, + "source": 1221, + "pc": [ + 4469, + 4470, + 4471 + ] + }, + { + "teal": 4560, + "source": 1221, + "pc": [ + 4472 + ] + }, + { + "teal": 4561, + "source": 1221, + "pc": [ + 4473 + ] + }, + { + "teal": 4562, + "source": 1221, + "pc": [ + 4474 + ] + }, + { + "teal": 4563, + "source": 1221, + "pc": [ + 4475, + 4476, + 4477 + ] + }, + { + "teal": 4571, + "source": 1223, + "pc": [ + 4478, + 4479 + ] + }, + { + "teal": 4572, + "source": 1223, + "pc": [ + 4480, + 4481, + 4482 + ] + }, + { + "teal": 4573, + "source": 1223, + "pc": [ + 4483, + 4484 + ] + }, + { + "teal": 4574, + "source": 1223, + "pc": [ + 4485 + ] + }, + { + "teal": 4577, + "source": 1222, + "errorMessage": "validatorCommissionAddress must be set if percent to validator is not 0", + "pc": [ + 4486 + ] + }, + { + "teal": 4582, + "source": 1227, + "pc": [ + 4487, + 4488 + ] + }, + { + "teal": 4583, + "source": 1227, + "pc": [ + 4489, + 4490, + 4491 + ] + }, + { + "teal": 4584, + "source": 1227, + "pc": [ + 4492 + ] + }, + { + "teal": 4585, + "source": 1227, + "pc": [ + 4493, + 4494 + ] + }, + { + "teal": 4586, + "source": 1227, + "pc": [ + 4495 + ] + }, + { + "teal": 4589, + "source": 1227, + "errorMessage": "staking pool must have minimum entry of 1 algo", + "pc": [ + 4496 + ] + }, + { + "teal": 4596, + "source": 1230, + "pc": [ + 4497, + 4498 + ] + }, + { + "teal": 4597, + "source": 1230, + "pc": [ + 4499, + 4500, + 4501 + ] + }, + { + "teal": 4598, + "source": 1230, + "pc": [ + 4502 + ] + }, + { + "teal": 4599, + "source": 1230, + "pc": [ + 4503 + ] + }, + { + "teal": 4600, + "source": 1230, + "pc": [ + 4504 + ] + }, + { + "teal": 4601, + "source": 1230, + "pc": [ + 4505 + ] + }, + { + "teal": 4602, + "source": 1230, + "pc": [ + 4506, + 4507, + 4508 + ] + }, + { + "teal": 4603, + "source": 1230, + "pc": [ + 4509, + 4510 + ] + }, + { + "teal": 4604, + "source": 1230, + "pc": [ + 4511, + 4512, + 4513 + ] + }, + { + "teal": 4605, + "source": 1230, + "pc": [ + 4514 + ] + }, + { + "teal": 4606, + "source": 1230, + "pc": [ + 4515, + 4516 + ] + }, + { + "teal": 4607, + "source": 1230, + "pc": [ + 4517 + ] + }, + { + "teal": 4608, + "source": 1230, + "pc": [ + 4518 + ] + }, + { + "teal": 4612, + "source": 1229, + "errorMessage": "number of pools per node exceeds allowed number", + "pc": [ + 4519 + ] + }, + { + "teal": 4617, + "source": 1233, + "pc": [ + 4520, + 4521 + ] + }, + { + "teal": 4618, + "source": 1233, + "pc": [ + 4522, + 4523, + 4524 + ] + }, + { + "teal": 4619, + "source": 1233, + "pc": [ + 4525 + ] + }, + { + "teal": 4620, + "source": 1233, + "pc": [ + 4526 + ] + }, + { + "teal": 4621, + "source": 1233, + "pc": [ + 4527 + ] + }, + { + "teal": 4622, + "source": 1233, + "pc": [ + 4528, + 4529, + 4530 + ] + }, + { + "teal": 4627, + "source": 1234, + "pc": [ + 4531, + 4532 + ] + }, + { + "teal": 4628, + "source": 1234, + "pc": [ + 4533, + 4534, + 4535 + ] + }, + { + "teal": 4629, + "source": 1234, + "pc": [ + 4536 + ] + }, + { + "teal": 4630, + "source": 1234, + "pc": [ + 4537, + 4538 + ] + }, + { + "teal": 4631, + "source": 1234, + "pc": [ + 4539 + ] + }, + { + "teal": 4634, + "source": 1234, + "errorMessage": "sunsettingOn must be later than now if set", + "pc": [ + 4540 + ] + }, + { + "teal": 4637, + "source": 1207, + "pc": [ + 4541 + ] + }, + { + "teal": 4651, + "source": 1249, + "pc": [ + 4542, + 4543, + 4544 + ] + }, + { + "teal": 4654, + "source": 1249, + "pc": [ + 4545 + ] + }, + { + "teal": 4655, + "source": 1249, + "pc": [ + 4546, + 4547 + ] + }, + { + "teal": 4659, + "source": 1256, + "pc": [ + 4548, + 4549 + ] + }, + { + "teal": 4660, + "source": 1256, + "pc": [ + 4550, + 4551 + ] + }, + { + "teal": 4661, + "source": 1256, + "pc": [ + 4552, + 4553, + 4554 + ] + }, + { + "teal": 4662, + "source": 1256, + "pc": [ + 4555 + ] + }, + { + "teal": 4663, + "source": 1256, + "pc": [ + 4556 + ] + }, + { + "teal": 4664, + "source": 1256, + "pc": [ + 4557 + ] + }, + { + "teal": 4665, + "source": 1256, + "pc": [ + 4558, + 4559 + ] + }, + { + "teal": 4666, + "source": 1256, + "pc": [ + 4560 + ] + }, + { + "teal": 4667, + "source": 1256, + "pc": [ + 4561 + ] + }, + { + "teal": 4668, + "source": 1256, + "pc": [ + 4562 + ] + }, + { + "teal": 4669, + "source": 1256, + "pc": [ + 4563 + ] + }, + { + "teal": 4670, + "source": 1256, + "pc": [ + 4564 + ] + }, + { + "teal": 4671, + "source": 1256, + "pc": [ + 4565 + ] + }, + { + "teal": 4672, + "source": 1256, + "pc": [ + 4566, + 4567 + ] + }, + { + "teal": 4673, + "source": 1256, + "pc": [ + 4568, + 4569, + 4570 + ] + }, + { + "teal": 4674, + "source": 1256, + "pc": [ + 4571 + ] + }, + { + "teal": 4675, + "source": 1256, + "pc": [ + 4572 + ] + }, + { + "teal": 4676, + "source": 1256, + "pc": [ + 4573 + ] + }, + { + "teal": 4677, + "source": 1256, + "pc": [ + 4574, + 4575 + ] + }, + { + "teal": 4678, + "source": 1256, + "pc": [ + 4576 + ] + }, + { + "teal": 4679, + "source": 1256, + "pc": [ + 4577 + ] + }, + { + "teal": 4680, + "source": 1256, + "pc": [ + 4578, + 4579 + ] + }, + { + "teal": 4693, + "source": 1265, + "pc": [ + 4580 + ] + }, + { + "teal": 4694, + "source": 1265, + "pc": [ + 4581 + ] + }, + { + "teal": 4695, + "source": 1265, + "pc": [ + 4582, + 4583 + ] + }, + { + "teal": 4699, + "source": 1265, + "pc": [ + 4584, + 4585 + ] + }, + { + "teal": 4700, + "source": 1265, + "pc": [ + 4586, + 4587 + ] + }, + { + "teal": 4701, + "source": 1265, + "pc": [ + 4588, + 4589 + ] + }, + { + "teal": 4702, + "source": 1265, + "pc": [ + 4590 + ] + }, + { + "teal": 4703, + "source": 1265, + "pc": [ + 4591, + 4592 + ] + }, + { + "teal": 4707, + "source": 1265, + "pc": [ + 4593, + 4594 + ] + }, + { + "teal": 4708, + "source": 1265, + "pc": [ + 4595, + 4596 + ] + }, + { + "teal": 4709, + "source": 1265, + "pc": [ + 4597 + ] + }, + { + "teal": 4710, + "source": 1265, + "pc": [ + 4598, + 4599 + ] + }, + { + "teal": 4713, + "source": 1265, + "pc": [ + 4600 + ] + }, + { + "teal": 4714, + "source": 1265, + "pc": [ + 4601, + 4602 + ] + }, + { + "teal": 4715, + "source": 1260, + "pc": [ + 4603 + ] + }, + { + "teal": 4716, + "source": 1260, + "pc": [ + 4604, + 4605 + ] + }, + { + "teal": 4717, + "source": 1260, + "pc": [ + 4606, + 4607 + ] + }, + { + "teal": 4718, + "source": 1260, + "pc": [ + 4608, + 4609, + 4610, + 4611, + 4612, + 4613 + ] + }, + { + "teal": 4719, + "source": 1260, + "pc": [ + 4614, + 4615 + ] + }, + { + "teal": 4723, + "source": 1261, + "pc": [ + 4616, + 4617 + ] + }, + { + "teal": 4724, + "source": 1261, + "pc": [ + 4618, + 4619 + ] + }, + { + "teal": 4734, + "source": 1267, + "pc": [ + 4620, + 4621 + ] + }, + { + "teal": 4735, + "source": 1267, + "pc": [ + 4622, + 4623 + ] + }, + { + "teal": 4736, + "source": 1267, + "pc": [ + 4624, + 4625 + ] + }, + { + "teal": 4739, + "source": 1260, + "pc": [ + 4626 + ] + }, + { + "teal": 4740, + "source": 1260, + "pc": [ + 4627, + 4628 + ] + }, + { + "teal": 4743, + "source": 1260, + "pc": [ + 4629 + ] + }, + { + "teal": 4744, + "source": 1260, + "pc": [ + 4630, + 4631 + ] + }, + { + "teal": 4745, + "source": 1260, + "pc": [ + 4632 + ] + }, + { + "teal": 4746, + "source": 1260, + "pc": [ + 4633 + ] + }, + { + "teal": 4747, + "source": 1260, + "pc": [ + 4634, + 4635 + ] + }, + { + "teal": 4748, + "source": 1260, + "pc": [ + 4636, + 4637, + 4638 + ] + }, + { + "teal": 4749, + "source": 1260, + "pc": [ + 4639 + ] + }, + { + "teal": 4754, + "source": 1270, + "pc": [ + 4640, + 4641 + ] + }, + { + "teal": 4755, + "source": 1270, + "pc": [ + 4642, + 4643, + 4644 + ] + }, + { + "teal": 4756, + "source": 1270, + "pc": [ + 4645 + ] + }, + { + "teal": 4757, + "source": 1270, + "pc": [ + 4646, + 4647, + 4648 + ] + }, + { + "teal": 4762, + "source": 1271, + "pc": [ + 4649 + ] + }, + { + "teal": 4763, + "source": 1271, + "pc": [ + 4650, + 4651 + ] + }, + { + "teal": 4764, + "source": 1271, + "pc": [ + 4652, + 4653 + ] + }, + { + "teal": 4765, + "source": 1271, + "pc": [ + 4654 + ] + }, + { + "teal": 4766, + "source": 1271, + "pc": [ + 4655, + 4656 + ] + }, + { + "teal": 4767, + "source": 1271, + "pc": [ + 4657, + 4658 + ] + }, + { + "teal": 4768, + "source": 1271, + "pc": [ + 4659 + ] + }, + { + "teal": 4769, + "source": 1271, + "pc": [ + 4660, + 4661 + ] + }, + { + "teal": 4770, + "source": 1271, + "pc": [ + 4662, + 4663 + ] + }, + { + "teal": 4771, + "source": 1271, + "pc": [ + 4664, + 4665 + ] + }, + { + "teal": 4772, + "source": 1271, + "pc": [ + 4666, + 4667 + ] + }, + { + "teal": 4773, + "source": 1271, + "pc": [ + 4668 + ] + }, + { + "teal": 4778, + "source": 1275, + "pc": [ + 4669, + 4670 + ] + }, + { + "teal": 4779, + "source": 1275, + "pc": [ + 4671, + 4672 + ] + }, + { + "teal": 4780, + "source": 1275, + "pc": [ + 4673 + ] + }, + { + "teal": 4783, + "source": 1275, + "errorMessage": "global state value does not exist: AppID.fromUint64(poolAppId).globalState('numStakers')", + "pc": [ + 4674 + ] + }, + { + "teal": 4784, + "source": 1275, + "pc": [ + 4675, + 4676 + ] + }, + { + "teal": 4788, + "source": 1276, + "pc": [ + 4677, + 4678 + ] + }, + { + "teal": 4789, + "source": 1276, + "pc": [ + 4679, + 4680 + ] + }, + { + "teal": 4790, + "source": 1276, + "pc": [ + 4681 + ] + }, + { + "teal": 4793, + "source": 1276, + "errorMessage": "global state value does not exist: AppID.fromUint64(poolAppId).globalState('staked')", + "pc": [ + 4682 + ] + }, + { + "teal": 4794, + "source": 1276, + "pc": [ + 4683, + 4684 + ] + }, + { + "teal": 4798, + "source": 1277, + "pc": [ + 4685, + 4686 + ] + }, + { + "teal": 4799, + "source": 1277, + "pc": [ + 4687, + 4688 + ] + }, + { + "teal": 4800, + "source": 1277, + "pc": [ + 4689, + 4690, + 4691 + ] + }, + { + "teal": 4801, + "source": 1277, + "pc": [ + 4692 + ] + }, + { + "teal": 4802, + "source": 1277, + "pc": [ + 4693 + ] + }, + { + "teal": 4803, + "source": 1277, + "pc": [ + 4694 + ] + }, + { + "teal": 4804, + "source": 1277, + "pc": [ + 4695, + 4696 + ] + }, + { + "teal": 4805, + "source": 1277, + "pc": [ + 4697 + ] + }, + { + "teal": 4806, + "source": 1277, + "pc": [ + 4698 + ] + }, + { + "teal": 4807, + "source": 1277, + "pc": [ + 4699 + ] + }, + { + "teal": 4808, + "source": 1277, + "pc": [ + 4700 + ] + }, + { + "teal": 4809, + "source": 1277, + "pc": [ + 4701, + 4702 + ] + }, + { + "teal": 4810, + "source": 1277, + "pc": [ + 4703 + ] + }, + { + "teal": 4811, + "source": 1277, + "pc": [ + 4704, + 4705, + 4706 + ] + }, + { + "teal": 4812, + "source": 1277, + "pc": [ + 4707 + ] + }, + { + "teal": 4813, + "source": 1277, + "pc": [ + 4708, + 4709 + ] + }, + { + "teal": 4814, + "source": 1277, + "pc": [ + 4710, + 4711, + 4712 + ] + }, + { + "teal": 4815, + "source": 1277, + "pc": [ + 4713 + ] + }, + { + "teal": 4816, + "source": 1277, + "pc": [ + 4714 + ] + }, + { + "teal": 4817, + "source": 1277, + "pc": [ + 4715 + ] + }, + { + "teal": 4818, + "source": 1277, + "pc": [ + 4716, + 4717 + ] + }, + { + "teal": 4819, + "source": 1277, + "pc": [ + 4718 + ] + }, + { + "teal": 4823, + "source": 1278, + "pc": [ + 4719, + 4720 + ] + }, + { + "teal": 4824, + "source": 1278, + "pc": [ + 4721, + 4722 + ] + }, + { + "teal": 4825, + "source": 1278, + "pc": [ + 4723, + 4724, + 4725 + ] + }, + { + "teal": 4826, + "source": 1278, + "pc": [ + 4726 + ] + }, + { + "teal": 4827, + "source": 1278, + "pc": [ + 4727 + ] + }, + { + "teal": 4828, + "source": 1278, + "pc": [ + 4728 + ] + }, + { + "teal": 4829, + "source": 1278, + "pc": [ + 4729, + 4730 + ] + }, + { + "teal": 4830, + "source": 1278, + "pc": [ + 4731 + ] + }, + { + "teal": 4831, + "source": 1278, + "pc": [ + 4732 + ] + }, + { + "teal": 4832, + "source": 1278, + "pc": [ + 4733, + 4734 + ] + }, + { + "teal": 4833, + "source": 1278, + "pc": [ + 4735 + ] + }, + { + "teal": 4834, + "source": 1278, + "pc": [ + 4736, + 4737 + ] + }, + { + "teal": 4835, + "source": 1278, + "pc": [ + 4738 + ] + }, + { + "teal": 4836, + "source": 1278, + "pc": [ + 4739 + ] + }, + { + "teal": 4837, + "source": 1278, + "pc": [ + 4740, + 4741 + ] + }, + { + "teal": 4838, + "source": 1278, + "pc": [ + 4742, + 4743, + 4744 + ] + }, + { + "teal": 4839, + "source": 1278, + "pc": [ + 4745 + ] + }, + { + "teal": 4840, + "source": 1278, + "pc": [ + 4746 + ] + }, + { + "teal": 4841, + "source": 1278, + "pc": [ + 4747 + ] + }, + { + "teal": 4842, + "source": 1278, + "pc": [ + 4748, + 4749 + ] + }, + { + "teal": 4843, + "source": 1278, + "pc": [ + 4750 + ] + }, + { + "teal": 4848, + "source": 1281, + "pc": [ + 4751, + 4752 + ] + }, + { + "teal": 4849, + "source": 1281, + "pc": [ + 4753, + 4754, + 4755 + ] + }, + { + "teal": 4854, + "source": 1282, + "pc": [ + 4756, + 4757 + ] + }, + { + "teal": 4855, + "source": 1282, + "pc": [ + 4758 + ] + }, + { + "teal": 4856, + "source": 1282, + "pc": [ + 4759 + ] + }, + { + "teal": 4857, + "source": 1282, + "pc": [ + 4760 + ] + }, + { + "teal": 4858, + "source": 1282, + "pc": [ + 4761, + 4762 + ] + }, + { + "teal": 4859, + "source": 1282, + "pc": [ + 4763, + 4764, + 4765 + ] + }, + { + "teal": 4860, + "source": 1282, + "pc": [ + 4766 + ] + }, + { + "teal": 4861, + "source": 1282, + "pc": [ + 4767 + ] + }, + { + "teal": 4862, + "source": 1282, + "pc": [ + 4768 + ] + }, + { + "teal": 4863, + "source": 1282, + "pc": [ + 4769, + 4770 + ] + }, + { + "teal": 4864, + "source": 1282, + "pc": [ + 4771 + ] + }, + { + "teal": 4865, + "source": 1282, + "pc": [ + 4772 + ] + }, + { + "teal": 4866, + "source": 1282, + "pc": [ + 4773 + ] + }, + { + "teal": 4867, + "source": 1282, + "pc": [ + 4774 + ] + }, + { + "teal": 4868, + "source": 1282, + "pc": [ + 4775 + ] + }, + { + "teal": 4869, + "source": 1282, + "pc": [ + 4776 + ] + }, + { + "teal": 4870, + "source": 1282, + "pc": [ + 4777, + 4778 + ] + }, + { + "teal": 4871, + "source": 1282, + "pc": [ + 4779, + 4780, + 4781 + ] + }, + { + "teal": 4872, + "source": 1282, + "pc": [ + 4782 + ] + }, + { + "teal": 4873, + "source": 1282, + "pc": [ + 4783 + ] + }, + { + "teal": 4874, + "source": 1282, + "pc": [ + 4784 + ] + }, + { + "teal": 4875, + "source": 1282, + "pc": [ + 4785, + 4786 + ] + }, + { + "teal": 4876, + "source": 1282, + "pc": [ + 4787 + ] + }, + { + "teal": 4882, + "source": 1284, + "pc": [ + 4788, + 4789 + ] + }, + { + "teal": 4883, + "source": 1284, + "pc": [ + 4790, + 4791, + 4792 + ] + }, + { + "teal": 4888, + "source": 1285, + "pc": [ + 4793, + 4794 + ] + }, + { + "teal": 4889, + "source": 1285, + "pc": [ + 4795 + ] + }, + { + "teal": 4890, + "source": 1285, + "pc": [ + 4796 + ] + }, + { + "teal": 4891, + "source": 1285, + "pc": [ + 4797 + ] + }, + { + "teal": 4892, + "source": 1285, + "pc": [ + 4798, + 4799 + ] + }, + { + "teal": 4893, + "source": 1285, + "pc": [ + 4800 + ] + }, + { + "teal": 4894, + "source": 1285, + "pc": [ + 4801 + ] + }, + { + "teal": 4899, + "source": 1287, + "pc": [ + 4802, + 4803 + ] + }, + { + "teal": 4900, + "source": 1287, + "pc": [ + 4804 + ] + }, + { + "teal": 4901, + "source": 1287, + "pc": [ + 4805 + ] + }, + { + "teal": 4902, + "source": 1287, + "pc": [ + 4806 + ] + }, + { + "teal": 4903, + "source": 1287, + "pc": [ + 4807, + 4808 + ] + }, + { + "teal": 4904, + "source": 1287, + "pc": [ + 4809, + 4810, + 4811 + ] + }, + { + "teal": 4905, + "source": 1287, + "pc": [ + 4812 + ] + }, + { + "teal": 4906, + "source": 1287, + "pc": [ + 4813 + ] + }, + { + "teal": 4907, + "source": 1287, + "pc": [ + 4814 + ] + }, + { + "teal": 4908, + "source": 1287, + "pc": [ + 4815, + 4816 + ] + }, + { + "teal": 4909, + "source": 1287, + "pc": [ + 4817 + ] + }, + { + "teal": 4910, + "source": 1287, + "pc": [ + 4818 + ] + }, + { + "teal": 4911, + "source": 1287, + "pc": [ + 4819, + 4820 + ] + }, + { + "teal": 4912, + "source": 1287, + "pc": [ + 4821, + 4822 + ] + }, + { + "teal": 4913, + "source": 1287, + "pc": [ + 4823, + 4824 + ] + }, + { + "teal": 4914, + "source": 1287, + "pc": [ + 4825 + ] + }, + { + "teal": 4915, + "source": 1287, + "pc": [ + 4826 + ] + }, + { + "teal": 4916, + "source": 1287, + "pc": [ + 4827 + ] + }, + { + "teal": 4917, + "source": 1287, + "pc": [ + 4828 + ] + }, + { + "teal": 4918, + "source": 1287, + "pc": [ + 4829, + 4830 + ] + }, + { + "teal": 4919, + "source": 1287, + "pc": [ + 4831, + 4832, + 4833 + ] + }, + { + "teal": 4920, + "source": 1287, + "pc": [ + 4834 + ] + }, + { + "teal": 4921, + "source": 1287, + "pc": [ + 4835 + ] + }, + { + "teal": 4922, + "source": 1287, + "pc": [ + 4836 + ] + }, + { + "teal": 4923, + "source": 1287, + "pc": [ + 4837, + 4838 + ] + }, + { + "teal": 4924, + "source": 1287, + "pc": [ + 4839 + ] + }, + { + "teal": 4928, + "source": 1288, + "pc": [ + 4840, + 4841 + ] + }, + { + "teal": 4929, + "source": 1288, + "pc": [ + 4842 + ] + }, + { + "teal": 4930, + "source": 1288, + "pc": [ + 4843, + 4844 + ] + }, + { + "teal": 4931, + "source": 1288, + "pc": [ + 4845, + 4846 + ] + }, + { + "teal": 4932, + "source": 1288, + "pc": [ + 4847, + 4848 + ] + }, + { + "teal": 4933, + "source": 1288, + "pc": [ + 4849 + ] + }, + { + "teal": 4934, + "source": 1288, + "pc": [ + 4850 + ] + }, + { + "teal": 4935, + "source": 1288, + "pc": [ + 4851, + 4852 + ] + }, + { + "teal": 4936, + "source": 1288, + "pc": [ + 4853 + ] + }, + { + "teal": 4937, + "source": 1288, + "pc": [ + 4854 + ] + }, + { + "teal": 4938, + "source": 1249, + "pc": [ + 4855 + ] + }, + { + "teal": 4942, + "source": 1291, + "pc": [ + 4856, + 4857, + 4858 + ] + }, + { + "teal": 4945, + "source": 1291, + "pc": [ + 4859 + ] + }, + { + "teal": 4946, + "source": 1291, + "pc": [ + 4860, + 4861 + ] + }, + { + "teal": 4950, + "source": 1292, + "pc": [ + 4862 + ] + }, + { + "teal": 4951, + "source": 1292, + "pc": [ + 4863, + 4864 + ] + }, + { + "teal": 4952, + "source": 1292, + "pc": [ + 4865 + ] + }, + { + "teal": 4953, + "source": 1292, + "pc": [ + 4866 + ] + }, + { + "teal": 4954, + "source": 1292, + "pc": [ + 4867 + ] + }, + { + "teal": 4955, + "source": 1292, + "pc": [ + 4868 + ] + }, + { + "teal": 4956, + "source": 1292, + "pc": [ + 4869 + ] + }, + { + "teal": 4960, + "source": 1294, + "pc": [ + 4870 + ] + }, + { + "teal": 4961, + "source": 1294, + "pc": [ + 4871, + 4872 + ] + }, + { + "teal": 4962, + "source": 1294, + "pc": [ + 4873 + ] + }, + { + "teal": 4963, + "source": 1294, + "pc": [ + 4874 + ] + }, + { + "teal": 4966, + "source": 1294, + "errorMessage": "box value does not exist: this.stakerPoolSet(staker).value", + "pc": [ + 4875 + ] + }, + { + "teal": 4967, + "source": 1294, + "pc": [ + 4876, + 4877 + ] + }, + { + "teal": 4971, + "source": 1295, + "pc": [ + 4878 + ] + }, + { + "teal": 4972, + "source": 1295, + "pc": [ + 4879, + 4880 + ] + }, + { + "teal": 4976, + "source": 1296, + "pc": [ + 4881 + ] + }, + { + "teal": 4977, + "source": 1296, + "pc": [ + 4882, + 4883 + ] + }, + { + "teal": 4982, + "source": 1296, + "pc": [ + 4884, + 4885 + ] + }, + { + "teal": 4983, + "source": 1296, + "pc": [ + 4886, + 4887 + ] + }, + { + "teal": 4984, + "source": 1296, + "pc": [ + 4888 + ] + }, + { + "teal": 4985, + "source": 1296, + "pc": [ + 4889, + 4890, + 4891 + ] + }, + { + "teal": 4990, + "source": 1297, + "pc": [ + 4892, + 4893 + ] + }, + { + "teal": 4991, + "source": 1297, + "pc": [ + 4894, + 4895 + ] + }, + { + "teal": 4992, + "source": 1297, + "pc": [ + 4896 + ] + }, + { + "teal": 4993, + "source": 1297, + "pc": [ + 4897 + ] + }, + { + "teal": 4994, + "source": 1297, + "pc": [ + 4898 + ] + }, + { + "teal": 4995, + "source": 1297, + "pc": [ + 4899 + ] + }, + { + "teal": 4996, + "source": 1297, + "pc": [ + 4900, + 4901 + ] + }, + { + "teal": 4997, + "source": 1297, + "pc": [ + 4902 + ] + }, + { + "teal": 4998, + "source": 1297, + "pc": [ + 4903, + 4904, + 4905 + ] + }, + { + "teal": 5003, + "source": 1299, + "pc": [ + 4906 + ] + }, + { + "teal": 5009, + "source": 1301, + "pc": [ + 4907, + 4908 + ] + }, + { + "teal": 5010, + "source": 1301, + "pc": [ + 4909 + ] + }, + { + "teal": 5011, + "source": 1301, + "pc": [ + 4910 + ] + }, + { + "teal": 5012, + "source": 1301, + "pc": [ + 4911 + ] + }, + { + "teal": 5013, + "source": 1301, + "pc": [ + 4912, + 4913, + 4914 + ] + }, + { + "teal": 5014, + "source": 1301, + "pc": [ + 4915, + 4916 + ] + }, + { + "teal": 5015, + "source": 1301, + "pc": [ + 4917, + 4918 + ] + }, + { + "teal": 5016, + "source": 1301, + "pc": [ + 4919 + ] + }, + { + "teal": 5017, + "source": 1301, + "pc": [ + 4920 + ] + }, + { + "teal": 5018, + "source": 1301, + "pc": [ + 4921 + ] + }, + { + "teal": 5019, + "source": 1301, + "pc": [ + 4922 + ] + }, + { + "teal": 5020, + "source": 1301, + "pc": [ + 4923 + ] + }, + { + "teal": 5021, + "source": 1301, + "pc": [ + 4924 + ] + }, + { + "teal": 5022, + "source": 1301, + "pc": [ + 4925 + ] + }, + { + "teal": 5023, + "source": 1301, + "pc": [ + 4926 + ] + }, + { + "teal": 5024, + "source": 1301, + "pc": [ + 4927 + ] + }, + { + "teal": 5025, + "source": 1301, + "pc": [ + 4928 + ] + }, + { + "teal": 5028, + "source": 1301, + "pc": [ + 4929, + 4930, + 4931 + ] + }, + { + "teal": 5033, + "source": 1302, + "pc": [ + 4932, + 4933 + ] + }, + { + "teal": 5034, + "source": 1302, + "pc": [ + 4934 + ] + }, + { + "teal": 5035, + "source": 1302, + "pc": [ + 4935 + ] + }, + { + "teal": 5036, + "source": 1302, + "pc": [ + 4936, + 4937 + ] + }, + { + "teal": 5043, + "source": 1296, + "pc": [ + 4938, + 4939 + ] + }, + { + "teal": 5044, + "source": 1296, + "pc": [ + 4940 + ] + }, + { + "teal": 5045, + "source": 1296, + "pc": [ + 4941 + ] + }, + { + "teal": 5046, + "source": 1296, + "pc": [ + 4942, + 4943 + ] + }, + { + "teal": 5047, + "source": 1296, + "pc": [ + 4944, + 4945, + 4946 + ] + }, + { + "teal": 5053, + "source": 1305, + "pc": [ + 4947, + 4948 + ] + }, + { + "teal": 5054, + "source": 1305, + "pc": [ + 4949 + ] + }, + { + "teal": 5055, + "source": 1305, + "pc": [ + 4950 + ] + }, + { + "teal": 5056, + "source": 1305, + "pc": [ + 4951, + 4952, + 4953 + ] + }, + { + "teal": 5060, + "source": 1306, + "errorMessage": "No empty slot available in the staker pool set", + "pc": [ + 4954 + ] + }, + { + "teal": 5065, + "source": 1308, + "pc": [ + 4955, + 4956 + ] + }, + { + "teal": 5066, + "source": 1308, + "pc": [ + 4957 + ] + }, + { + "teal": 5067, + "source": 1308, + "pc": [ + 4958 + ] + }, + { + "teal": 5068, + "source": 1308, + "pc": [ + 4959 + ] + }, + { + "teal": 5069, + "source": 1308, + "pc": [ + 4960 + ] + }, + { + "teal": 5070, + "source": 1308, + "pc": [ + 4961, + 4962 + ] + }, + { + "teal": 5071, + "source": 1308, + "pc": [ + 4963 + ] + }, + { + "teal": 5072, + "source": 1308, + "pc": [ + 4964, + 4965 + ] + }, + { + "teal": 5073, + "source": 1308, + "pc": [ + 4966 + ] + }, + { + "teal": 5074, + "source": 1308, + "pc": [ + 4967, + 4968 + ] + }, + { + "teal": 5075, + "source": 1308, + "pc": [ + 4969 + ] + }, + { + "teal": 5076, + "source": 1291, + "pc": [ + 4970 + ] + }, + { + "teal": 5087, + "source": 1319, + "pc": [ + 4971, + 4972, + 4973 + ] + }, + { + "teal": 5090, + "source": 1319, + "pc": [ + 4974 + ] + }, + { + "teal": 5091, + "source": 1319, + "pc": [ + 4975, + 4976 + ] + }, + { + "teal": 5095, + "source": 1321, + "pc": [ + 4977 + ] + }, + { + "teal": 5096, + "source": 1321, + "pc": [ + 4978, + 4979 + ] + }, + { + "teal": 5100, + "source": 1322, + "pc": [ + 4980 + ] + }, + { + "teal": 5101, + "source": 1322, + "pc": [ + 4981, + 4982 + ] + }, + { + "teal": 5105, + "source": 1323, + "pc": [ + 4983 + ] + }, + { + "teal": 5106, + "source": 1323, + "pc": [ + 4984, + 4985 + ] + }, + { + "teal": 5110, + "source": 1325, + "pc": [ + 4986 + ] + }, + { + "teal": 5111, + "source": 1325, + "pc": [ + 4987, + 4988 + ] + }, + { + "teal": 5112, + "source": 1325, + "pc": [ + 4989 + ] + }, + { + "teal": 5113, + "source": 1325, + "pc": [ + 4990 + ] + }, + { + "teal": 5116, + "source": 1325, + "errorMessage": "box value does not exist: this.stakerPoolSet(staker).value", + "pc": [ + 4991 + ] + }, + { + "teal": 5117, + "source": 1325, + "pc": [ + 4992, + 4993 + ] + }, + { + "teal": 5121, + "source": 1326, + "pc": [ + 4994 + ] + }, + { + "teal": 5122, + "source": 1326, + "pc": [ + 4995, + 4996 + ] + }, + { + "teal": 5127, + "source": 1326, + "pc": [ + 4997, + 4998 + ] + }, + { + "teal": 5128, + "source": 1326, + "pc": [ + 4999, + 5000 + ] + }, + { + "teal": 5129, + "source": 1326, + "pc": [ + 5001 + ] + }, + { + "teal": 5130, + "source": 1326, + "pc": [ + 5002, + 5003, + 5004 + ] + }, + { + "teal": 5135, + "source": 1327, + "pc": [ + 5005, + 5006 + ] + }, + { + "teal": 5136, + "source": 1327, + "pc": [ + 5007, + 5008 + ] + }, + { + "teal": 5137, + "source": 1327, + "pc": [ + 5009 + ] + }, + { + "teal": 5138, + "source": 1327, + "pc": [ + 5010 + ] + }, + { + "teal": 5139, + "source": 1327, + "pc": [ + 5011 + ] + }, + { + "teal": 5140, + "source": 1327, + "pc": [ + 5012 + ] + }, + { + "teal": 5141, + "source": 1327, + "pc": [ + 5013 + ] + }, + { + "teal": 5142, + "source": 1327, + "pc": [ + 5014 + ] + }, + { + "teal": 5143, + "source": 1327, + "pc": [ + 5015 + ] + }, + { + "teal": 5144, + "source": 1327, + "pc": [ + 5016 + ] + }, + { + "teal": 5145, + "source": 1327, + "pc": [ + 5017 + ] + }, + { + "teal": 5146, + "source": 1327, + "pc": [ + 5018, + 5019, + 5020 + ] + }, + { + "teal": 5149, + "source": 1328, + "pc": [ + 5021, + 5022, + 5023 + ] + }, + { + "teal": 5154, + "source": 1330, + "pc": [ + 5024, + 5025 + ] + }, + { + "teal": 5155, + "source": 1330, + "pc": [ + 5026 + ] + }, + { + "teal": 5156, + "source": 1330, + "pc": [ + 5027 + ] + }, + { + "teal": 5157, + "source": 1330, + "pc": [ + 5028, + 5029 + ] + }, + { + "teal": 5162, + "source": 1331, + "pc": [ + 5030, + 5031 + ] + }, + { + "teal": 5163, + "source": 1331, + "pc": [ + 5032, + 5033 + ] + }, + { + "teal": 5164, + "source": 1331, + "pc": [ + 5034 + ] + }, + { + "teal": 5165, + "source": 1331, + "pc": [ + 5035 + ] + }, + { + "teal": 5166, + "source": 1331, + "pc": [ + 5036 + ] + }, + { + "teal": 5167, + "source": 1331, + "pc": [ + 5037 + ] + }, + { + "teal": 5168, + "source": 1331, + "pc": [ + 5038 + ] + }, + { + "teal": 5169, + "source": 1331, + "pc": [ + 5039 + ] + }, + { + "teal": 5170, + "source": 1331, + "pc": [ + 5040 + ] + }, + { + "teal": 5171, + "source": 1331, + "pc": [ + 5041, + 5042 + ] + }, + { + "teal": 5172, + "source": 1331, + "pc": [ + 5043, + 5044, + 5045 + ] + }, + { + "teal": 5173, + "source": 1331, + "pc": [ + 5046 + ] + }, + { + "teal": 5174, + "source": 1331, + "pc": [ + 5047 + ] + }, + { + "teal": 5175, + "source": 1331, + "pc": [ + 5048, + 5049, + 5050 + ] + }, + { + "teal": 5181, + "source": 1332, + "pc": [ + 5051, + 5052 + ] + }, + { + "teal": 5182, + "source": 1332, + "pc": [ + 5053, + 5054 + ] + }, + { + "teal": 5183, + "source": 1332, + "pc": [ + 5055 + ] + }, + { + "teal": 5184, + "source": 1332, + "pc": [ + 5056 + ] + }, + { + "teal": 5185, + "source": 1332, + "pc": [ + 5057 + ] + }, + { + "teal": 5186, + "source": 1332, + "pc": [ + 5058 + ] + }, + { + "teal": 5187, + "source": 1332, + "pc": [ + 5059, + 5060 + ] + }, + { + "teal": 5188, + "source": 1332, + "pc": [ + 5061 + ] + }, + { + "teal": 5189, + "source": 1332, + "pc": [ + 5062, + 5063, + 5064 + ] + }, + { + "teal": 5194, + "source": 1333, + "pc": [ + 5065 + ] + }, + { + "teal": 5195, + "source": 1333, + "pc": [ + 5066, + 5067 + ] + }, + { + "teal": 5199, + "source": 1335, + "pc": [ + 5068, + 5069 + ] + }, + { + "teal": 5200, + "source": 1335, + "pc": [ + 5070 + ] + }, + { + "teal": 5201, + "source": 1335, + "pc": [ + 5071 + ] + }, + { + "teal": 5202, + "source": 1335, + "pc": [ + 5072, + 5073, + 5074, + 5075, + 5076, + 5077, + 5078, + 5079, + 5080, + 5081, + 5082, + 5083, + 5084, + 5085, + 5086, + 5087, + 5088, + 5089, + 5090, + 5091, + 5092, + 5093, + 5094, + 5095, + 5096, + 5097 + ] + }, + { + "teal": 5203, + "source": 1335, + "pc": [ + 5098 + ] + }, + { + "teal": 5204, + "source": 1335, + "pc": [ + 5099, + 5100 + ] + }, + { + "teal": 5205, + "source": 1335, + "pc": [ + 5101 + ] + }, + { + "teal": 5206, + "source": 1335, + "pc": [ + 5102, + 5103 + ] + }, + { + "teal": 5207, + "source": 1335, + "pc": [ + 5104 + ] + }, + { + "teal": 5208, + "source": 1332, + "pc": [ + 5105, + 5106, + 5107 + ] + }, + { + "teal": 5213, + "source": 1337, + "pc": [ + 5108, + 5109 + ] + }, + { + "teal": 5214, + "source": 1337, + "pc": [ + 5110 + ] + }, + { + "teal": 5215, + "source": 1337, + "pc": [ + 5111 + ] + }, + { + "teal": 5216, + "source": 1337, + "pc": [ + 5112, + 5113 + ] + }, + { + "teal": 5225, + "source": 1326, + "pc": [ + 5114, + 5115 + ] + }, + { + "teal": 5226, + "source": 1326, + "pc": [ + 5116 + ] + }, + { + "teal": 5227, + "source": 1326, + "pc": [ + 5117 + ] + }, + { + "teal": 5228, + "source": 1326, + "pc": [ + 5118, + 5119 + ] + }, + { + "teal": 5229, + "source": 1326, + "pc": [ + 5120, + 5121, + 5122 + ] + }, + { + "teal": 5235, + "source": 1341, + "pc": [ + 5123, + 5124 + ] + }, + { + "teal": 5236, + "source": 1341, + "pc": [ + 5125 + ] + }, + { + "teal": 5237, + "source": 1341, + "pc": [ + 5126, + 5127, + 5128 + ] + }, + { + "teal": 5241, + "source": 1342, + "errorMessage": "No matching slot found when told to remove a pool from the stakers set", + "pc": [ + 5129 + ] + }, + { + "teal": 5246, + "source": 1345, + "pc": [ + 5130, + 5131 + ] + }, + { + "teal": 5247, + "source": 1345, + "pc": [ + 5132 + ] + }, + { + "teal": 5248, + "source": 1345, + "pc": [ + 5133, + 5134 + ] + }, + { + "teal": 5249, + "source": 1345, + "pc": [ + 5135 + ] + }, + { + "teal": 5250, + "source": 1345, + "pc": [ + 5136 + ] + }, + { + "teal": 5251, + "source": 1345, + "pc": [ + 5137 + ] + }, + { + "teal": 5252, + "source": 1345, + "pc": [ + 5138 + ] + }, + { + "teal": 5253, + "source": 1345, + "pc": [ + 5139, + 5140 + ] + }, + { + "teal": 5254, + "source": 1345, + "pc": [ + 5141 + ] + }, + { + "teal": 5255, + "source": 1345, + "pc": [ + 5142 + ] + }, + { + "teal": 5256, + "source": 1345, + "pc": [ + 5143 + ] + }, + { + "teal": 5259, + "source": 1319, + "pc": [ + 5144, + 5145 + ] + }, + { + "teal": 5262, + "source": 1319, + "pc": [ + 5146, + 5147 + ] + }, + { + "teal": 5263, + "source": 1319, + "pc": [ + 5148 + ] + }, + { + "teal": 5267, + "source": 1348, + "pc": [ + 5149, + 5150, + 5151 + ] + }, + { + "teal": 5270, + "source": 1348, + "pc": [ + 5152 + ] + }, + { + "teal": 5271, + "source": 1348, + "pc": [ + 5153, + 5154 + ] + }, + { + "teal": 5275, + "source": 1349, + "pc": [ + 5155, + 5156 + ] + }, + { + "teal": 5276, + "source": 1349, + "pc": [ + 5157, + 5158 + ] + }, + { + "teal": 5277, + "source": 1349, + "pc": [ + 5159 + ] + }, + { + "teal": 5278, + "source": 1349, + "pc": [ + 5160, + 5161 + ] + }, + { + "teal": 5279, + "source": 1349, + "pc": [ + 5162 + ] + }, + { + "teal": 5280, + "source": 1349, + "pc": [ + 5163 + ] + }, + { + "teal": 5281, + "source": 1349, + "pc": [ + 5164, + 5165 + ] + }, + { + "teal": 5282, + "source": 1349, + "pc": [ + 5166 + ] + }, + { + "teal": 5283, + "source": 1349, + "pc": [ + 5167, + 5168 + ] + }, + { + "teal": 5287, + "source": 1350, + "pc": [ + 5169, + 5170, + 5171 + ] + }, + { + "teal": 5288, + "source": 1350, + "pc": [ + 5172 + ] + }, + { + "teal": 5289, + "source": 1350, + "pc": [ + 5173 + ] + }, + { + "teal": 5290, + "source": 1350, + "pc": [ + 5174, + 5175 + ] + }, + { + "teal": 5291, + "source": 1350, + "pc": [ + 5176 + ] + }, + { + "teal": 5292, + "source": 1350, + "pc": [ + 5177 + ] + }, + { + "teal": 5293, + "source": 1350, + "pc": [ + 5178, + 5179 + ] + }, + { + "teal": 5294, + "source": 1350, + "pc": [ + 5180 + ] + }, + { + "teal": 5295, + "source": 1350, + "pc": [ + 5181 + ] + }, + { + "teal": 5296, + "source": 1350, + "pc": [ + 5182, + 5183 + ] + }, + { + "teal": 5300, + "source": 1352, + "pc": [ + 5184, + 5185 + ] + }, + { + "teal": 5301, + "source": 1352, + "pc": [ + 5186 + ] + }, + { + "teal": 5302, + "source": 1352, + "pc": [ + 5187 + ] + }, + { + "teal": 5303, + "source": 1352, + "pc": [ + 5188 + ] + }, + { + "teal": 5304, + "source": 1352, + "pc": [ + 5189, + 5190, + 5191 + ] + }, + { + "teal": 5305, + "source": 1352, + "pc": [ + 5192, + 5193 + ] + }, + { + "teal": 5306, + "source": 1352, + "pc": [ + 5194 + ] + }, + { + "teal": 5307, + "source": 1352, + "pc": [ + 5195 + ] + }, + { + "teal": 5308, + "source": 1352, + "pc": [ + 5196 + ] + }, + { + "teal": 5312, + "source": 1352, + "errorMessage": "node number not in valid range", + "pc": [ + 5197 + ] + }, + { + "teal": 5316, + "source": 1354, + "pc": [ + 5198 + ] + }, + { + "teal": 5317, + "source": 1354, + "pc": [ + 5199, + 5200 + ] + }, + { + "teal": 5322, + "source": 1354, + "pc": [ + 5201, + 5202 + ] + }, + { + "teal": 5323, + "source": 1354, + "pc": [ + 5203, + 5204 + ] + }, + { + "teal": 5324, + "source": 1354, + "pc": [ + 5205 + ] + }, + { + "teal": 5325, + "source": 1354, + "pc": [ + 5206, + 5207, + 5208 + ] + }, + { + "teal": 5330, + "source": 1355, + "pc": [ + 5209, + 5210 + ] + }, + { + "teal": 5331, + "source": 1355, + "pc": [ + 5211 + ] + }, + { + "teal": 5332, + "source": 1355, + "pc": [ + 5212, + 5213 + ] + }, + { + "teal": 5333, + "source": 1355, + "pc": [ + 5214 + ] + }, + { + "teal": 5334, + "source": 1355, + "pc": [ + 5215 + ] + }, + { + "teal": 5335, + "source": 1355, + "pc": [ + 5216 + ] + }, + { + "teal": 5336, + "source": 1355, + "pc": [ + 5217 + ] + }, + { + "teal": 5337, + "source": 1355, + "pc": [ + 5218 + ] + }, + { + "teal": 5338, + "source": 1355, + "pc": [ + 5219 + ] + }, + { + "teal": 5339, + "source": 1355, + "pc": [ + 5220 + ] + }, + { + "teal": 5340, + "source": 1355, + "pc": [ + 5221, + 5222 + ] + }, + { + "teal": 5341, + "source": 1355, + "pc": [ + 5223 + ] + }, + { + "teal": 5342, + "source": 1355, + "pc": [ + 5224 + ] + }, + { + "teal": 5343, + "source": 1355, + "pc": [ + 5225 + ] + }, + { + "teal": 5344, + "source": 1355, + "pc": [ + 5226 + ] + }, + { + "teal": 5345, + "source": 1355, + "pc": [ + 5227 + ] + }, + { + "teal": 5346, + "source": 1355, + "pc": [ + 5228 + ] + }, + { + "teal": 5347, + "source": 1355, + "pc": [ + 5229 + ] + }, + { + "teal": 5348, + "source": 1355, + "pc": [ + 5230 + ] + }, + { + "teal": 5349, + "source": 1355, + "pc": [ + 5231, + 5232, + 5233 + ] + }, + { + "teal": 5354, + "source": 1357, + "pc": [ + 5234, + 5235 + ] + }, + { + "teal": 5355, + "source": 1357, + "pc": [ + 5236, + 5237 + ] + }, + { + "teal": 5356, + "source": 1357, + "pc": [ + 5238 + ] + }, + { + "teal": 5357, + "source": 1357, + "pc": [ + 5239 + ] + }, + { + "teal": 5358, + "source": 1357, + "pc": [ + 5240 + ] + }, + { + "teal": 5359, + "source": 1357, + "pc": [ + 5241 + ] + }, + { + "teal": 5360, + "source": 1357, + "pc": [ + 5242 + ] + }, + { + "teal": 5361, + "source": 1357, + "pc": [ + 5243 + ] + }, + { + "teal": 5362, + "source": 1357, + "pc": [ + 5244 + ] + }, + { + "teal": 5363, + "source": 1357, + "pc": [ + 5245, + 5246 + ] + }, + { + "teal": 5364, + "source": 1357, + "pc": [ + 5247 + ] + }, + { + "teal": 5365, + "source": 1357, + "pc": [ + 5248 + ] + }, + { + "teal": 5366, + "source": 1357, + "pc": [ + 5249 + ] + }, + { + "teal": 5367, + "source": 1357, + "pc": [ + 5250, + 5251 + ] + }, + { + "teal": 5368, + "source": 1357, + "pc": [ + 5252 + ] + }, + { + "teal": 5369, + "source": 1357, + "pc": [ + 5253 + ] + }, + { + "teal": 5370, + "source": 1357, + "pc": [ + 5254, + 5255 + ] + }, + { + "teal": 5371, + "source": 1357, + "pc": [ + 5256 + ] + }, + { + "teal": 5372, + "source": 1357, + "pc": [ + 5257 + ] + }, + { + "teal": 5373, + "source": 1357, + "pc": [ + 5258, + 5259 + ] + }, + { + "teal": 5374, + "source": 1357, + "pc": [ + 5260 + ] + }, + { + "teal": 5378, + "source": 1358, + "pc": [ + 5261 + ] + }, + { + "teal": 5385, + "source": 1354, + "pc": [ + 5262, + 5263 + ] + }, + { + "teal": 5386, + "source": 1354, + "pc": [ + 5264 + ] + }, + { + "teal": 5387, + "source": 1354, + "pc": [ + 5265 + ] + }, + { + "teal": 5388, + "source": 1354, + "pc": [ + 5266, + 5267 + ] + }, + { + "teal": 5389, + "source": 1354, + "pc": [ + 5268, + 5269, + 5270 + ] + }, + { + "teal": 5393, + "source": 1361, + "errorMessage": "no available space in specified node for this pool", + "pc": [ + 5271 + ] + }, + { + "teal": 5394, + "source": 1348, + "pc": [ + 5272 + ] + }, + { + "teal": 5404, + "source": 1371, + "pc": [ + 5273, + 5274, + 5275 + ] + }, + { + "teal": 5407, + "source": 1371, + "pc": [ + 5276 + ] + }, + { + "teal": 5408, + "source": 1371, + "pc": [ + 5277, + 5278 + ] + }, + { + "teal": 5412, + "source": 1372, + "pc": [ + 5279, + 5280 + ] + }, + { + "teal": 5413, + "source": 1372, + "pc": [ + 5281 + ] + }, + { + "teal": 5414, + "source": 1372, + "pc": [ + 5282 + ] + }, + { + "teal": 5415, + "source": 1372, + "pc": [ + 5283, + 5284 + ] + }, + { + "teal": 5416, + "source": 1372, + "pc": [ + 5285 + ] + }, + { + "teal": 5417, + "source": 1372, + "pc": [ + 5286 + ] + }, + { + "teal": 5418, + "source": 1372, + "pc": [ + 5287, + 5288 + ] + }, + { + "teal": 5419, + "source": 1372, + "pc": [ + 5289 + ] + }, + { + "teal": 5420, + "source": 1372, + "pc": [ + 5290 + ] + }, + { + "teal": 5421, + "source": 1372, + "pc": [ + 5291, + 5292 + ] + }, + { + "teal": 5426, + "source": 1373, + "pc": [ + 5293, + 5294 + ] + }, + { + "teal": 5427, + "source": 1373, + "pc": [ + 5295 + ] + }, + { + "teal": 5428, + "source": 1373, + "pc": [ + 5296 + ] + }, + { + "teal": 5429, + "source": 1373, + "pc": [ + 5297, + 5298, + 5299 + ] + }, + { + "teal": 5434, + "source": 1374, + "pc": [ + 5300 + ] + }, + { + "teal": 5439, + "source": 1376, + "pc": [ + 5301, + 5302 + ] + }, + { + "teal": 5440, + "source": 1376, + "pc": [ + 5303, + 5304 + ] + }, + { + "teal": 5444, + "source": 1377, + "pc": [ + 5305 + ] + }, + { + "teal": 5445, + "source": 1377, + "pc": [ + 5306, + 5307 + ] + }, + { + "teal": 5446, + "source": 1377, + "pc": [ + 5308 + ] + }, + { + "teal": 5447, + "source": 1377, + "pc": [ + 5309, + 5310 + ] + }, + { + "teal": 5448, + "source": 1377, + "pc": [ + 5311 + ] + }, + { + "teal": 5449, + "source": 1377, + "pc": [ + 5312 + ] + }, + { + "teal": 5450, + "source": 1377, + "pc": [ + 5313, + 5314 + ] + }, + { + "teal": 5451, + "source": 1377, + "pc": [ + 5315 + ] + }, + { + "teal": 5452, + "source": 1377, + "pc": [ + 5316, + 5317 + ] + }, + { + "teal": 5459, + "source": 1381, + "pc": [ + 5318, + 5319 + ] + }, + { + "teal": 5460, + "source": 1381, + "pc": [ + 5320 + ] + }, + { + "teal": 5461, + "source": 1381, + "pc": [ + 5321 + ] + }, + { + "teal": 5462, + "source": 1381, + "pc": [ + 5322 + ] + }, + { + "teal": 5463, + "source": 1381, + "pc": [ + 5323, + 5324, + 5325 + ] + }, + { + "teal": 5464, + "source": 1382, + "pc": [ + 5326, + 5327 + ] + }, + { + "teal": 5465, + "source": 1382, + "pc": [ + 5328, + 5329 + ] + }, + { + "teal": 5466, + "source": 1382, + "pc": [ + 5330 + ] + }, + { + "teal": 5467, + "source": 1381, + "pc": [ + 5331 + ] + }, + { + "teal": 5470, + "source": 1382, + "pc": [ + 5332 + ] + }, + { + "teal": 5471, + "source": 1382, + "pc": [ + 5333, + 5334, + 5335 + ] + }, + { + "teal": 5472, + "source": 1383, + "pc": [ + 5336, + 5337 + ] + }, + { + "teal": 5473, + "source": 1383, + "pc": [ + 5338, + 5339 + ] + }, + { + "teal": 5474, + "source": 1383, + "pc": [ + 5340 + ] + }, + { + "teal": 5475, + "source": 1382, + "pc": [ + 5341 + ] + }, + { + "teal": 5478, + "source": 1380, + "pc": [ + 5342, + 5343, + 5344 + ] + }, + { + "teal": 5483, + "source": 1385, + "pc": [ + 5345, + 5346 + ] + }, + { + "teal": 5484, + "source": 1385, + "pc": [ + 5347 + ] + }, + { + "teal": 5485, + "source": 1385, + "pc": [ + 5348 + ] + }, + { + "teal": 5486, + "source": 1385, + "pc": [ + 5349 + ] + }, + { + "teal": 5490, + "source": 1386, + "pc": [ + 5350, + 5351 + ] + }, + { + "teal": 5491, + "source": 1386, + "pc": [ + 5352 + ] + }, + { + "teal": 5492, + "source": 1386, + "pc": [ + 5353 + ] + }, + { + "teal": 5493, + "source": 1386, + "pc": [ + 5354, + 5355 + ] + }, + { + "teal": 5494, + "source": 1386, + "pc": [ + 5356 + ] + }, + { + "teal": 5495, + "source": 1386, + "pc": [ + 5357 + ] + }, + { + "teal": 5496, + "source": 1386, + "pc": [ + 5358, + 5359 + ] + }, + { + "teal": 5497, + "source": 1386, + "pc": [ + 5360 + ] + }, + { + "teal": 5498, + "source": 1386, + "pc": [ + 5361 + ] + }, + { + "teal": 5499, + "source": 1386, + "pc": [ + 5362, + 5363 + ] + }, + { + "teal": 5504, + "source": 1387, + "pc": [ + 5364, + 5365 + ] + }, + { + "teal": 5505, + "source": 1387, + "pc": [ + 5366 + ] + }, + { + "teal": 5506, + "source": 1387, + "pc": [ + 5367 + ] + }, + { + "teal": 5507, + "source": 1387, + "pc": [ + 5368, + 5369, + 5370 + ] + }, + { + "teal": 5512, + "source": 1388, + "pc": [ + 5371 + ] + }, + { + "teal": 5513, + "source": 1388, + "pc": [ + 5372, + 5373 + ] + }, + { + "teal": 5521, + "source": 1391, + "pc": [ + 5374, + 5375 + ] + }, + { + "teal": 5522, + "source": 1391, + "pc": [ + 5376, + 5377 + ] + }, + { + "teal": 5523, + "source": 1391, + "pc": [ + 5378, + 5379 + ] + }, + { + "teal": 5524, + "source": 1391, + "pc": [ + 5380 + ] + }, + { + "teal": 5525, + "source": 1391, + "pc": [ + 5381, + 5382 + ] + }, + { + "teal": 5526, + "source": 1391, + "pc": [ + 5383 + ] + }, + { + "teal": 5529, + "source": 1390, + "errorMessage": "must have required minimum balance of validator defined token to add stake", + "pc": [ + 5384 + ] + }, + { + "teal": 5535, + "source": 1395, + "pc": [ + 5385, + 5386 + ] + }, + { + "teal": 5536, + "source": 1395, + "pc": [ + 5387 + ] + }, + { + "teal": 5537, + "source": 1395, + "pc": [ + 5388 + ] + }, + { + "teal": 5538, + "source": 1395, + "pc": [ + 5389, + 5390, + 5391 + ] + }, + { + "teal": 5546, + "source": 1397, + "pc": [ + 5392, + 5393 + ] + }, + { + "teal": 5547, + "source": 1397, + "pc": [ + 5394, + 5395 + ] + }, + { + "teal": 5548, + "source": 1397, + "pc": [ + 5396 + ] + }, + { + "teal": 5549, + "source": 1397, + "pc": [ + 5397, + 5398 + ] + }, + { + "teal": 5550, + "source": 1397, + "pc": [ + 5399, + 5400, + 5401 + ] + }, + { + "teal": 5551, + "source": 1397, + "pc": [ + 5402 + ] + }, + { + "teal": 5554, + "source": 1396, + "errorMessage": "specified asset must be created by creator that the validator defined as a requirement to stake", + "pc": [ + 5403 + ] + }, + { + "teal": 5560, + "source": 1401, + "pc": [ + 5404, + 5405 + ] + }, + { + "teal": 5561, + "source": 1401, + "pc": [ + 5406, + 5407 + ] + }, + { + "teal": 5562, + "source": 1401, + "pc": [ + 5408 + ] + }, + { + "teal": 5563, + "source": 1401, + "pc": [ + 5409, + 5410, + 5411 + ] + }, + { + "teal": 5568, + "source": 1402, + "pc": [ + 5412, + 5413 + ] + }, + { + "teal": 5569, + "source": 1402, + "pc": [ + 5414 + ] + }, + { + "teal": 5570, + "source": 1402, + "pc": [ + 5415 + ] + }, + { + "teal": 5571, + "source": 1402, + "pc": [ + 5416 + ] + }, + { + "teal": 5575, + "source": 1403, + "pc": [ + 5417 + ] + }, + { + "teal": 5576, + "source": 1403, + "pc": [ + 5418, + 5419 + ] + }, + { + "teal": 5580, + "source": 1404, + "pc": [ + 5420, + 5421 + ] + }, + { + "teal": 5581, + "source": 1404, + "pc": [ + 5422, + 5423, + 5424 + ] + }, + { + "teal": 5582, + "source": 1404, + "pc": [ + 5425 + ] + }, + { + "teal": 5583, + "source": 1404, + "pc": [ + 5426, + 5427 + ] + }, + { + "teal": 5584, + "source": 1404, + "pc": [ + 5428, + 5429, + 5430 + ] + }, + { + "teal": 5585, + "source": 1404, + "pc": [ + 5431 + ] + }, + { + "teal": 5586, + "source": 1404, + "pc": [ + 5432, + 5433 + ] + }, + { + "teal": 5587, + "source": 1404, + "pc": [ + 5434 + ] + }, + { + "teal": 5588, + "source": 1404, + "pc": [ + 5435, + 5436 + ] + }, + { + "teal": 5594, + "source": 1405, + "pc": [ + 5437, + 5438 + ] + }, + { + "teal": 5595, + "source": 1405, + "pc": [ + 5439, + 5440 + ] + }, + { + "teal": 5596, + "source": 1405, + "pc": [ + 5441 + ] + }, + { + "teal": 5597, + "source": 1405, + "pc": [ + 5442, + 5443, + 5444 + ] + }, + { + "teal": 5602, + "source": 1406, + "pc": [ + 5445 + ] + }, + { + "teal": 5603, + "source": 1406, + "pc": [ + 5446, + 5447 + ] + }, + { + "teal": 5604, + "source": 1407, + "pc": [ + 5448, + 5449, + 5450 + ] + }, + { + "teal": 5610, + "source": 1404, + "pc": [ + 5451, + 5452 + ] + }, + { + "teal": 5611, + "source": 1404, + "pc": [ + 5453 + ] + }, + { + "teal": 5612, + "source": 1404, + "pc": [ + 5454 + ] + }, + { + "teal": 5613, + "source": 1404, + "pc": [ + 5455 + ] + }, + { + "teal": 5614, + "source": 1404, + "pc": [ + 5456, + 5457 + ] + }, + { + "teal": 5615, + "source": 1404, + "pc": [ + 5458 + ] + }, + { + "teal": 5616, + "source": 1404, + "pc": [ + 5459, + 5460, + 5461 + ] + }, + { + "teal": 5617, + "source": 1404, + "pc": [ + 5462, + 5463 + ] + }, + { + "teal": 5618, + "source": 1404, + "pc": [ + 5464, + 5465 + ] + }, + { + "teal": 5619, + "source": 1404, + "pc": [ + 5466, + 5467 + ] + }, + { + "teal": 5620, + "source": 1404, + "pc": [ + 5468 + ] + }, + { + "teal": 5621, + "source": 1404, + "pc": [ + 5469 + ] + }, + { + "teal": 5622, + "source": 1404, + "pc": [ + 5470 + ] + }, + { + "teal": 5623, + "source": 1404, + "pc": [ + 5471, + 5472 + ] + }, + { + "teal": 5624, + "source": 1404, + "pc": [ + 5473, + 5474, + 5475 + ] + }, + { + "teal": 5629, + "source": 1410, + "pc": [ + 5476, + 5477 + ] + }, + { + "teal": 5632, + "source": 1410, + "errorMessage": "specified asset must be identical to the asset id defined as a requirement to stake", + "pc": [ + 5478 + ] + }, + { + "teal": 5638, + "source": 1412, + "pc": [ + 5479, + 5480 + ] + }, + { + "teal": 5639, + "source": 1412, + "pc": [ + 5481, + 5482 + ] + }, + { + "teal": 5640, + "source": 1412, + "pc": [ + 5483 + ] + }, + { + "teal": 5641, + "source": 1412, + "pc": [ + 5484, + 5485, + 5486 + ] + }, + { + "teal": 5649, + "source": 1416, + "pc": [ + 5487, + 5488 + ] + }, + { + "teal": 5650, + "source": 1416, + "pc": [ + 5489, + 5490 + ] + }, + { + "teal": 5651, + "source": 1416, + "pc": [ + 5491 + ] + }, + { + "teal": 5652, + "source": 1416, + "pc": [ + 5492, + 5493 + ] + }, + { + "teal": 5653, + "source": 1416, + "pc": [ + 5494, + 5495, + 5496 + ] + }, + { + "teal": 5654, + "source": 1416, + "pc": [ + 5497 + ] + }, + { + "teal": 5655, + "source": 1416, + "pc": [ + 5498, + 5499, + 5500 + ] + }, + { + "teal": 5658, + "source": 1415, + "errorMessage": "specified asset must be created by creator that is one of the linked addresses in an nfd", + "pc": [ + 5501 + ] + }, + { + "teal": 5664, + "source": 1420, + "pc": [ + 5502, + 5503 + ] + }, + { + "teal": 5665, + "source": 1420, + "pc": [ + 5504, + 5505 + ] + }, + { + "teal": 5666, + "source": 1420, + "pc": [ + 5506 + ] + }, + { + "teal": 5667, + "source": 1420, + "pc": [ + 5507, + 5508, + 5509 + ] + }, + { + "teal": 5672, + "source": 1422, + "pc": [ + 5510, + 5511 + ] + }, + { + "teal": 5673, + "source": 1422, + "pc": [ + 5512, + 5513 + ] + }, + { + "teal": 5677, + "source": 1423, + "pc": [ + 5514, + 5515 + ] + }, + { + "teal": 5678, + "source": 1423, + "pc": [ + 5516, + 5517, + 5518 + ] + }, + { + "teal": 5681, + "source": 1423, + "errorMessage": "provided NFD must be valid", + "pc": [ + 5519 + ] + }, + { + "teal": 5689, + "source": 1427, + "pc": [ + 5520, + 5521 + ] + }, + { + "teal": 5690, + "source": 1427, + "pc": [ + 5522, + 5523 + ] + }, + { + "teal": 5691, + "source": 1427, + "pc": [ + 5524 + ] + }, + { + "teal": 5694, + "source": 1427, + "errorMessage": "global state value does not exist: AppID.fromUint64(userOfferedNFDAppID).globalState('i.owner.a')", + "pc": [ + 5525 + ] + }, + { + "teal": 5695, + "source": 1428, + "pc": [ + 5526, + 5527 + ] + }, + { + "teal": 5696, + "source": 1427, + "pc": [ + 5528 + ] + }, + { + "teal": 5697, + "source": 1428, + "pc": [ + 5529 + ] + }, + { + "teal": 5698, + "source": 1428, + "pc": [ + 5530, + 5531, + 5532 + ] + }, + { + "teal": 5699, + "source": 1428, + "pc": [ + 5533, + 5534 + ] + }, + { + "teal": 5700, + "source": 1428, + "pc": [ + 5535, + 5536 + ] + }, + { + "teal": 5701, + "source": 1428, + "pc": [ + 5537, + 5538, + 5539 + ] + }, + { + "teal": 5702, + "source": 1428, + "pc": [ + 5540 + ] + }, + { + "teal": 5706, + "source": 1426, + "errorMessage": "provided nfd for entry isn't owned or linked to the staker", + "pc": [ + 5541 + ] + }, + { + "teal": 5714, + "source": 1434, + "pc": [ + 5542, + 5543 + ] + }, + { + "teal": 5715, + "source": 1434, + "pc": [ + 5544, + 5545, + 5546, + 5547, + 5548, + 5549, + 5550, + 5551, + 5552, + 5553, + 5554, + 5555, + 5556, + 5557, + 5558 + ] + }, + { + "teal": 5716, + "source": 1434, + "pc": [ + 5559 + ] + }, + { + "teal": 5719, + "source": 1434, + "errorMessage": "global state value does not exist: AppID.fromUint64(userOfferedNFDAppID).globalState('i.parentAppID')", + "pc": [ + 5560 + ] + }, + { + "teal": 5720, + "source": 1434, + "pc": [ + 5561 + ] + }, + { + "teal": 5721, + "source": 1435, + "pc": [ + 5562, + 5563 + ] + }, + { + "teal": 5722, + "source": 1435, + "pc": [ + 5564, + 5565, + 5566 + ] + }, + { + "teal": 5723, + "source": 1435, + "pc": [ + 5567 + ] + }, + { + "teal": 5724, + "source": 1434, + "pc": [ + 5568 + ] + }, + { + "teal": 5727, + "source": 1433, + "errorMessage": "specified nfd must be a segment of the nfd the validator specified as a requirement", + "pc": [ + 5569 + ] + }, + { + "teal": 5730, + "source": 1371, + "pc": [ + 5570 + ] + }, + { + "teal": 5742, + "source": 1450, + "pc": [ + 5571, + 5572, + 5573 + ] + }, + { + "teal": 5745, + "source": 1450, + "pc": [ + 5574 + ] + }, + { + "teal": 5749, + "source": 1452, + "pc": [ + 5575, + 5576 + ] + }, + { + "teal": 5750, + "source": 1452, + "pc": [ + 5577, + 5578, + 5579, + 5580, + 5581, + 5582, + 5583, + 5584 + ] + }, + { + "teal": 5751, + "source": 1452, + "pc": [ + 5585 + ] + }, + { + "teal": 5754, + "source": 1452, + "errorMessage": "global state value does not exist: AppID.fromUint64(nfdAppID).globalState('i.name')", + "pc": [ + 5586 + ] + }, + { + "teal": 5755, + "source": 1452, + "pc": [ + 5587, + 5588 + ] + }, + { + "teal": 5763, + "source": 1454, + "pc": [ + 5589 + ] + }, + { + "teal": 5764, + "source": 1454, + "pc": [ + 5590, + 5591 + ] + }, + { + "teal": 5765, + "source": 1454, + "pc": [ + 5592, + 5593 + ] + }, + { + "teal": 5769, + "source": 1455, + "pc": [ + 5594, + 5595 + ] + }, + { + "teal": 5770, + "source": 1455, + "pc": [ + 5596, + 5597 + ] + }, + { + "teal": 5774, + "source": 1456, + "pc": [ + 5598, + 5599 + ] + }, + { + "teal": 5775, + "source": 1456, + "pc": [ + 5600, + 5601 + ] + }, + { + "teal": 5776, + "source": 1456, + "pc": [ + 5602, + 5603 + ] + }, + { + "teal": 5777, + "source": 1456, + "pc": [ + 5604, + 5605 + ] + }, + { + "teal": 5778, + "source": 1456, + "pc": [ + 5606, + 5607 + ] + }, + { + "teal": 5779, + "source": 1456, + "pc": [ + 5608 + ] + }, + { + "teal": 5780, + "source": 1456, + "pc": [ + 5609, + 5610 + ] + }, + { + "teal": 5784, + "source": 1457, + "pc": [ + 5611, + 5612 + ] + }, + { + "teal": 5785, + "source": 1457, + "pc": [ + 5613, + 5614 + ] + }, + { + "teal": 5788, + "source": 1454, + "pc": [ + 5615 + ] + }, + { + "teal": 5789, + "source": 1454, + "pc": [ + 5616, + 5617 + ] + }, + { + "teal": 5792, + "source": 1454, + "pc": [ + 5618 + ] + }, + { + "teal": 5796, + "source": 1459, + "pc": [ + 5619, + 5620 + ] + }, + { + "teal": 5797, + "source": 1459, + "pc": [ + 5621 + ] + }, + { + "teal": 5798, + "source": 1459, + "pc": [ + 5622 + ] + }, + { + "teal": 5799, + "source": 1459, + "pc": [ + 5623 + ] + }, + { + "teal": 5802, + "source": 1450, + "pc": [ + 5624, + 5625 + ] + }, + { + "teal": 5803, + "source": 1450, + "pc": [ + 5626 + ] + }, + { + "teal": 5814, + "source": 1470, + "pc": [ + 5627, + 5628, + 5629 + ] + }, + { + "teal": 5817, + "source": 1470, + "pc": [ + 5630 + ] + }, + { + "teal": 5818, + "source": 1470, + "pc": [ + 5631, + 5632 + ] + }, + { + "teal": 5825, + "source": 1471, + "pc": [ + 5633 + ] + }, + { + "teal": 5826, + "source": 1471, + "pc": [ + 5634, + 5635 + ] + }, + { + "teal": 5827, + "source": 1471, + "pc": [ + 5636, + 5637 + ] + }, + { + "teal": 5831, + "source": 1472, + "pc": [ + 5638, + 5639 + ] + }, + { + "teal": 5832, + "source": 1472, + "pc": [ + 5640, + 5641 + ] + }, + { + "teal": 5836, + "source": 1473, + "pc": [ + 5642, + 5643, + 5644, + 5645, + 5646, + 5647, + 5648, + 5649, + 5650, + 5651, + 5652, + 5653, + 5654, + 5655, + 5656 + ] + }, + { + "teal": 5837, + "source": 1473, + "pc": [ + 5657, + 5658 + ] + }, + { + "teal": 5838, + "source": 1473, + "pc": [ + 5659, + 5660, + 5661, + 5662, + 5663, + 5664, + 5665, + 5666, + 5667, + 5668, + 5669, + 5670, + 5671, + 5672, + 5673 + ] + }, + { + "teal": 5839, + "source": 1473, + "pc": [ + 5674, + 5675 + ] + }, + { + "teal": 5842, + "source": 1471, + "pc": [ + 5676 + ] + }, + { + "teal": 5843, + "source": 1471, + "pc": [ + 5677, + 5678 + ] + }, + { + "teal": 5846, + "source": 1471, + "pc": [ + 5679 + ] + }, + { + "teal": 5850, + "source": 1475, + "pc": [ + 5680, + 5681 + ] + }, + { + "teal": 5851, + "source": 1475, + "pc": [ + 5682, + 5683 + ] + }, + { + "teal": 5855, + "source": 1476, + "pc": [ + 5684 + ] + }, + { + "teal": 5856, + "source": 1476, + "pc": [ + 5685, + 5686 + ] + }, + { + "teal": 5861, + "source": 1476, + "pc": [ + 5687, + 5688 + ] + }, + { + "teal": 5862, + "source": 1476, + "pc": [ + 5689, + 5690 + ] + }, + { + "teal": 5863, + "source": 1476, + "pc": [ + 5691 + ] + }, + { + "teal": 5864, + "source": 1476, + "pc": [ + 5692 + ] + }, + { + "teal": 5865, + "source": 1476, + "pc": [ + 5693, + 5694, + 5695 + ] + }, + { + "teal": 5869, + "source": 1477, + "pc": [ + 5696, + 5697 + ] + }, + { + "teal": 5870, + "source": 1477, + "pc": [ + 5698, + 5699 + ] + }, + { + "teal": 5871, + "source": 1477, + "pc": [ + 5700, + 5701 + ] + }, + { + "teal": 5872, + "source": 1477, + "pc": [ + 5702 + ] + }, + { + "teal": 5873, + "source": 1477, + "pc": [ + 5703, + 5704 + ] + }, + { + "teal": 5878, + "source": 1478, + "pc": [ + 5705, + 5706 + ] + }, + { + "teal": 5879, + "source": 1478, + "pc": [ + 5707, + 5708 + ] + }, + { + "teal": 5880, + "source": 1478, + "pc": [ + 5709 + ] + }, + { + "teal": 5881, + "source": 1478, + "pc": [ + 5710 + ] + }, + { + "teal": 5882, + "source": 1478, + "pc": [ + 5711, + 5712, + 5713 + ] + }, + { + "teal": 5883, + "source": 1478, + "pc": [ + 5714, + 5715 + ] + }, + { + "teal": 5884, + "source": 1478, + "pc": [ + 5716, + 5717 + ] + }, + { + "teal": 5885, + "source": 1478, + "pc": [ + 5718 + ] + }, + { + "teal": 5886, + "source": 1478, + "pc": [ + 5719 + ] + }, + { + "teal": 5889, + "source": 1478, + "pc": [ + 5720, + 5721, + 5722 + ] + }, + { + "teal": 5894, + "source": 1479, + "pc": [ + 5723 + ] + }, + { + "teal": 5895, + "source": 1479, + "pc": [ + 5724, + 5725, + 5726 + ] + }, + { + "teal": 5902, + "source": 1476, + "pc": [ + 5727, + 5728 + ] + }, + { + "teal": 5903, + "source": 1476, + "pc": [ + 5729, + 5730 + ] + }, + { + "teal": 5904, + "source": 1476, + "pc": [ + 5731 + ] + }, + { + "teal": 5905, + "source": 1476, + "pc": [ + 5732, + 5733 + ] + }, + { + "teal": 5906, + "source": 1476, + "pc": [ + 5734, + 5735, + 5736 + ] + }, + { + "teal": 5911, + "source": 1482, + "pc": [ + 5737 + ] + }, + { + "teal": 5915, + "source": 1470, + "pc": [ + 5738, + 5739 + ] + }, + { + "teal": 5918, + "source": 1470, + "pc": [ + 5740, + 5741 + ] + }, + { + "teal": 5919, + "source": 1470, + "pc": [ + 5742 + ] + }, + { + "teal": 5927, + "source": 1490, + "pc": [ + 5743, + 5744, + 5745 + ] + }, + { + "teal": 5930, + "source": 1490, + "pc": [ + 5746 + ] + }, + { + "teal": 5934, + "source": 1491, + "pc": [ + 5747, + 5748, + 5749 + ] + }, + { + "teal": 5935, + "source": 1491, + "pc": [ + 5750, + 5751 + ] + }, + { + "teal": 5939, + "source": 1493, + "pc": [ + 5752, + 5753 + ] + }, + { + "teal": 5940, + "source": 1493, + "pc": [ + 5754, + 5755 + ] + }, + { + "teal": 5941, + "source": 1493, + "pc": [ + 5756 + ] + }, + { + "teal": 5942, + "source": 1493, + "pc": [ + 5757 + ] + }, + { + "teal": 5943, + "source": 1493, + "pc": [ + 5758, + 5759 + ] + }, + { + "teal": 5944, + "source": 1493, + "pc": [ + 5760 + ] + }, + { + "teal": 5945, + "source": 1493, + "pc": [ + 5761 + ] + }, + { + "teal": 5946, + "source": 1493, + "pc": [ + 5762 + ] + }, + { + "teal": 5947, + "source": 1493, + "pc": [ + 5763 + ] + }, + { + "teal": 5948, + "source": 1493, + "pc": [ + 5764 + ] + }, + { + "teal": 5951, + "source": 1493, + "errorMessage": "wideRatio failed", + "pc": [ + 5765 + ] + }, + { + "teal": 5954, + "source": 1490, + "pc": [ + 5766, + 5767 + ] + }, + { + "teal": 5955, + "source": 1490, + "pc": [ + 5768 + ] + }, + { + "teal": 5962, + "source": 1500, + "pc": [ + 5769, + 5770, + 5771 + ] + }, + { + "teal": 5965, + "source": 1500, + "pc": [ + 5772 + ] + }, + { + "teal": 5969, + "source": 1501, + "pc": [ + 5773, + 5774, + 5775 + ] + }, + { + "teal": 5970, + "source": 1501, + "pc": [ + 5776, + 5777 + ] + }, + { + "teal": 5974, + "source": 1503, + "pc": [ + 5778, + 5779 + ] + }, + { + "teal": 5975, + "source": 1503, + "pc": [ + 5780, + 5781, + 5782 + ] + }, + { + "teal": 5976, + "source": 1503, + "pc": [ + 5783 + ] + }, + { + "teal": 5977, + "source": 1503, + "pc": [ + 5784 + ] + }, + { + "teal": 5978, + "source": 1503, + "pc": [ + 5785, + 5786 + ] + }, + { + "teal": 5979, + "source": 1503, + "pc": [ + 5787 + ] + }, + { + "teal": 5980, + "source": 1503, + "pc": [ + 5788 + ] + }, + { + "teal": 5981, + "source": 1503, + "pc": [ + 5789 + ] + }, + { + "teal": 5982, + "source": 1503, + "pc": [ + 5790 + ] + }, + { + "teal": 5983, + "source": 1503, + "pc": [ + 5791 + ] + }, + { + "teal": 5986, + "source": 1503, + "errorMessage": "wideRatio failed", + "pc": [ + 5792 + ] + }, + { + "teal": 5989, + "source": 1500, + "pc": [ + 5793, + 5794 + ] + }, + { + "teal": 5990, + "source": 1500, + "pc": [ + 5795 + ] + }, + { + "teal": 5996, + "source": 1509, + "pc": [ + 5796, + 5797, + 5798 + ] + }, + { + "teal": 6000, + "source": 1512, + "pc": [ + 5799, + 5800, + 5801, + 5802, + 5803, + 5804, + 5805, + 5806 + ] + }, + { + "teal": 6001, + "source": 1509, + "pc": [ + 5807 + ] + }, + { + "teal": 6005, + "source": 1515, + "pc": [ + 5808, + 5809, + 5810 + ] + }, + { + "teal": 6009, + "source": 1518, + "pc": [ + 5811, + 5812, + 5813, + 5814, + 5815, + 5816, + 5817, + 5818, + 5819 + ] + }, + { + "teal": 6010, + "source": 1515, + "pc": [ + 5820 + ] + }, + { + "teal": 6014, + "source": 1521, + "pc": [ + 5821, + 5822, + 5823 + ] + }, + { + "teal": 6017, + "source": 1521, + "pc": [ + 5824 + ] + }, + { + "teal": 6021, + "source": 1530, + "pc": [ + 5825, + 5826 + ] + }, + { + "teal": 6022, + "source": 1530, + "pc": [ + 5827, + 5828 + ] + }, + { + "teal": 6026, + "source": 1531, + "pc": [ + 5829, + 5830 + ] + }, + { + "teal": 6027, + "source": 1531, + "pc": [ + 5831, + 5832 + ] + }, + { + "teal": 6028, + "source": 1531, + "pc": [ + 5833, + 5834 + ] + }, + { + "teal": 6029, + "source": 1531, + "pc": [ + 5835 + ] + }, + { + "teal": 6030, + "source": 1531, + "pc": [ + 5836 + ] + }, + { + "teal": 6031, + "source": 1531, + "pc": [ + 5837, + 5838 + ] + }, + { + "teal": 6035, + "source": 1532, + "pc": [ + 5839, + 5840 + ] + }, + { + "teal": 6036, + "source": 1532, + "pc": [ + 5841, + 5842 + ] + }, + { + "teal": 6037, + "source": 1532, + "pc": [ + 5843, + 5844 + ] + }, + { + "teal": 6038, + "source": 1532, + "pc": [ + 5845 + ] + }, + { + "teal": 6039, + "source": 1532, + "pc": [ + 5846 + ] + }, + { + "teal": 6040, + "source": 1532, + "pc": [ + 5847, + 5848 + ] + }, + { + "teal": 6044, + "source": 1533, + "pc": [ + 5849, + 5850 + ] + }, + { + "teal": 6045, + "source": 1533, + "pc": [ + 5851, + 5852 + ] + }, + { + "teal": 6046, + "source": 1533, + "pc": [ + 5853, + 5854 + ] + }, + { + "teal": 6047, + "source": 1533, + "pc": [ + 5855 + ] + }, + { + "teal": 6048, + "source": 1533, + "pc": [ + 5856 + ] + }, + { + "teal": 6049, + "source": 1533, + "pc": [ + 5857, + 5858 + ] + }, + { + "teal": 6053, + "source": 1534, + "pc": [ + 5859, + 5860 + ] + }, + { + "teal": 6054, + "source": 1534, + "pc": [ + 5861, + 5862 + ] + }, + { + "teal": 6055, + "source": 1534, + "pc": [ + 5863, + 5864 + ] + }, + { + "teal": 6056, + "source": 1534, + "pc": [ + 5865 + ] + }, + { + "teal": 6057, + "source": 1534, + "pc": [ + 5866 + ] + }, + { + "teal": 6058, + "source": 1534, + "pc": [ + 5867, + 5868 + ] + }, + { + "teal": 6062, + "source": 1535, + "pc": [ + 5869, + 5870 + ] + }, + { + "teal": 6063, + "source": 1535, + "pc": [ + 5871, + 5872 + ] + }, + { + "teal": 6064, + "source": 1535, + "pc": [ + 5873, + 5874 + ] + }, + { + "teal": 6065, + "source": 1535, + "pc": [ + 5875 + ] + }, + { + "teal": 6066, + "source": 1535, + "pc": [ + 5876 + ] + }, + { + "teal": 6067, + "source": 1535, + "pc": [ + 5877, + 5878 + ] + }, + { + "teal": 6071, + "source": 1536, + "pc": [ + 5879, + 5880 + ] + }, + { + "teal": 6072, + "source": 1536, + "pc": [ + 5881, + 5882 + ] + }, + { + "teal": 6073, + "source": 1536, + "pc": [ + 5883, + 5884 + ] + }, + { + "teal": 6074, + "source": 1536, + "pc": [ + 5885 + ] + }, + { + "teal": 6075, + "source": 1536, + "pc": [ + 5886 + ] + }, + { + "teal": 6076, + "source": 1536, + "pc": [ + 5887, + 5888 + ] + }, + { + "teal": 6080, + "source": 1537, + "pc": [ + 5889, + 5890 + ] + }, + { + "teal": 6081, + "source": 1537, + "pc": [ + 5891, + 5892 + ] + }, + { + "teal": 6082, + "source": 1537, + "pc": [ + 5893, + 5894 + ] + }, + { + "teal": 6083, + "source": 1537, + "pc": [ + 5895 + ] + }, + { + "teal": 6084, + "source": 1537, + "pc": [ + 5896 + ] + }, + { + "teal": 6085, + "source": 1537, + "pc": [ + 5897, + 5898 + ] + }, + { + "teal": 6089, + "source": 1538, + "pc": [ + 5899, + 5900 + ] + }, + { + "teal": 6092, + "source": 1521, + "pc": [ + 5901, + 5902 + ] + }, + { + "teal": 6093, + "source": 1521, + "pc": [ + 5903 + ] + }, + { + "teal": 6097, + "source": 1541, + "pc": [ + 5904, + 5905, + 5906 + ] + }, + { + "teal": 6101, + "source": 1545, + "pc": [ + 5907, + 5908, + 5909 + ] + }, + { + "teal": 6102, + "source": 1545, + "pc": [ + 5910, + 5911 + ] + }, + { + "teal": 6103, + "source": 1545, + "pc": [ + 5912, + 5913, + 5914 + ] + }, + { + "teal": 6104, + "source": 1545, + "pc": [ + 5915 + ] + }, + { + "teal": 6105, + "source": 1545, + "pc": [ + 5916 + ] + }, + { + "teal": 6106, + "source": 1541, + "pc": [ + 5917 + ] + }, + { + "teal": 6109, + "source": 165, + "pc": [ + 5918, + 5919, + 5920, + 5921, + 5922, + 5923 + ] + }, + { + "teal": 6110, + "source": 165, + "pc": [ + 5924, + 5925, + 5926 + ] + }, + { + "teal": 6111, + "source": 165, + "pc": [ + 5927, + 5928, + 5929, + 5930 + ] + }, + { + "teal": 6114, + "source": 165, + "errorMessage": "this contract does not implement the given ABI method for create NoOp", + "pc": [ + 5931 + ] + }, + { + "teal": 6117, + "source": 165, + "pc": [ + 5932, + 5933, + 5934, + 5935, + 5936, + 5937 + ] + }, + { + "teal": 6118, + "source": 165, + "pc": [ + 5938, + 5939, + 5940, + 5941, + 5942, + 5943 + ] + }, + { + "teal": 6119, + "source": 165, + "pc": [ + 5944, + 5945, + 5946, + 5947, + 5948, + 5949 + ] + }, + { + "teal": 6120, + "source": 165, + "pc": [ + 5950, + 5951, + 5952, + 5953, + 5954, + 5955 + ] + }, + { + "teal": 6121, + "source": 165, + "pc": [ + 5956, + 5957, + 5958, + 5959, + 5960, + 5961 + ] + }, + { + "teal": 6122, + "source": 165, + "pc": [ + 5962, + 5963, + 5964, + 5965, + 5966, + 5967 + ] + }, + { + "teal": 6123, + "source": 165, + "pc": [ + 5968, + 5969, + 5970, + 5971, + 5972, + 5973 + ] + }, + { + "teal": 6124, + "source": 165, + "pc": [ + 5974, + 5975, + 5976, + 5977, + 5978, + 5979 + ] + }, + { + "teal": 6125, + "source": 165, + "pc": [ + 5980, + 5981, + 5982, + 5983, + 5984, + 5985 + ] + }, + { + "teal": 6126, + "source": 165, + "pc": [ + 5986, + 5987, + 5988, + 5989, + 5990, + 5991 + ] + }, + { + "teal": 6127, + "source": 165, + "pc": [ + 5992, + 5993, + 5994, + 5995, + 5996, + 5997 + ] + }, + { + "teal": 6128, + "source": 165, + "pc": [ + 5998, + 5999, + 6000, + 6001, + 6002, + 6003 + ] + }, + { + "teal": 6129, + "source": 165, + "pc": [ + 6004, + 6005, + 6006, + 6007, + 6008, + 6009 + ] + }, + { + "teal": 6130, + "source": 165, + "pc": [ + 6010, + 6011, + 6012, + 6013, + 6014, + 6015 + ] + }, + { + "teal": 6131, + "source": 165, + "pc": [ + 6016, + 6017, + 6018, + 6019, + 6020, + 6021 + ] + }, + { + "teal": 6132, + "source": 165, + "pc": [ + 6022, + 6023, + 6024, + 6025, + 6026, + 6027 + ] + }, + { + "teal": 6133, + "source": 165, + "pc": [ + 6028, + 6029, + 6030, + 6031, + 6032, + 6033 + ] + }, + { + "teal": 6134, + "source": 165, + "pc": [ + 6034, + 6035, + 6036, + 6037, + 6038, + 6039 + ] + }, + { + "teal": 6135, + "source": 165, + "pc": [ + 6040, + 6041, + 6042, + 6043, + 6044, + 6045 + ] + }, + { + "teal": 6136, + "source": 165, + "pc": [ + 6046, + 6047, + 6048, + 6049, + 6050, + 6051 + ] + }, + { + "teal": 6137, + "source": 165, + "pc": [ + 6052, + 6053, + 6054, + 6055, + 6056, + 6057 + ] + }, + { + "teal": 6138, + "source": 165, + "pc": [ + 6058, + 6059, + 6060, + 6061, + 6062, + 6063 + ] + }, + { + "teal": 6139, + "source": 165, + "pc": [ + 6064, + 6065, + 6066, + 6067, + 6068, + 6069 + ] + }, + { + "teal": 6140, + "source": 165, + "pc": [ + 6070, + 6071, + 6072, + 6073, + 6074, + 6075 + ] + }, + { + "teal": 6141, + "source": 165, + "pc": [ + 6076, + 6077, + 6078, + 6079, + 6080, + 6081 + ] + }, + { + "teal": 6142, + "source": 165, + "pc": [ + 6082, + 6083, + 6084, + 6085, + 6086, + 6087 + ] + }, + { + "teal": 6143, + "source": 165, + "pc": [ + 6088, + 6089, + 6090, + 6091, + 6092, + 6093 + ] + }, + { + "teal": 6144, + "source": 165, + "pc": [ + 6094, + 6095, + 6096, + 6097, + 6098, + 6099 + ] + }, + { + "teal": 6145, + "source": 165, + "pc": [ + 6100, + 6101, + 6102, + 6103, + 6104, + 6105 + ] + }, + { + "teal": 6146, + "source": 165, + "pc": [ + 6106, + 6107, + 6108, + 6109, + 6110, + 6111 + ] + }, + { + "teal": 6147, + "source": 165, + "pc": [ + 6112, + 6113, + 6114, + 6115, + 6116, + 6117 + ] + }, + { + "teal": 6148, + "source": 165, + "pc": [ + 6118, + 6119, + 6120, + 6121, + 6122, + 6123 + ] + }, + { + "teal": 6149, + "source": 165, + "pc": [ + 6124, + 6125, + 6126, + 6127, + 6128, + 6129 + ] + }, + { + "teal": 6150, + "source": 165, + "pc": [ + 6130, + 6131, + 6132 + ] + }, + { + "teal": 6151, + "source": 165, + "pc": [ + 6133, + 6134, + 6135, + 6136, + 6137, + 6138, + 6139, + 6140, + 6141, + 6142, + 6143, + 6144, + 6145, + 6146, + 6147, + 6148, + 6149, + 6150, + 6151, + 6152, + 6153, + 6154, + 6155, + 6156, + 6157, + 6158, + 6159, + 6160, + 6161, + 6162, + 6163, + 6164, + 6165, + 6166, + 6167, + 6168, + 6169, + 6170, + 6171, + 6172, + 6173, + 6174, + 6175, + 6176, + 6177, + 6178, + 6179, + 6180, + 6181, + 6182, + 6183, + 6184, + 6185, + 6186, + 6187, + 6188, + 6189, + 6190, + 6191, + 6192, + 6193, + 6194, + 6195, + 6196, + 6197, + 6198, + 6199, + 6200 + ] + }, + { + "teal": 6154, + "source": 165, + "errorMessage": "this contract does not implement the given ABI method for call NoOp", + "pc": [ + 6201 + ] + }, + { + "teal": 6157, + "source": 165, + "pc": [ + 6202, + 6203, + 6204, + 6205, + 6206, + 6207 + ] + }, + { + "teal": 6158, + "source": 165, + "pc": [ + 6208, + 6209, + 6210 + ] + }, + { + "teal": 6159, + "source": 165, + "pc": [ + 6211, + 6212, + 6213, + 6214 + ] + }, + { + "teal": 6162, + "source": 165, + "errorMessage": "this contract does not implement the given ABI method for call UpdateApplication", + "pc": [ + 6215 + ] + } +] \ No newline at end of file diff --git a/examples/src/main/java/com/algorand/examples/ExampleUtils.java b/examples/src/main/java/com/algorand/examples/ExampleUtils.java index 07fc8c1e3..79cd594c9 100644 --- a/examples/src/main/java/com/algorand/examples/ExampleUtils.java +++ b/examples/src/main/java/com/algorand/examples/ExampleUtils.java @@ -36,10 +36,18 @@ public class ExampleUtils { private static int indexer_port = 8980; private static String indexer_token = "a".repeat(64); + private static String testnet_algod_host = "https://testnet-api.algonode.cloud"; + private static int testnet_algod_port = 443; + private static String testnet_algod_token = ""; + public static AlgodClient getAlgodClient() { return new AlgodClient(algod_host, algod_port, algod_token); } + public static AlgodClient getAlgodTestnetClient() { + return new AlgodClient(testnet_algod_host, testnet_algod_port, testnet_algod_token); + } + public static IndexerClient getIndexerClient() { return new IndexerClient(indexer_host, indexer_port, indexer_token); } diff --git a/examples/src/main/java/com/algorand/examples/Reti.java b/examples/src/main/java/com/algorand/examples/Reti.java new file mode 100644 index 000000000..681a7e563 --- /dev/null +++ b/examples/src/main/java/com/algorand/examples/Reti.java @@ -0,0 +1,393 @@ +package com.algorand.examples; + +import java.math.BigInteger; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.GeneralSecurityException; +import java.util.*; + +import com.algorand.algosdk.abi.Contract; +import com.algorand.algosdk.account.Account; +import com.algorand.algosdk.builder.transaction.MethodCallTransactionBuilder; +import com.algorand.algosdk.builder.transaction.PaymentTransactionBuilder; +import com.algorand.algosdk.crypto.Address; +import com.algorand.algosdk.transaction.*; +import com.algorand.algosdk.transaction.AtomicTransactionComposer.ExecuteResult; +import com.algorand.algosdk.transaction.Transaction; +import com.algorand.algosdk.util.Encoder; +import com.algorand.algosdk.v2.client.algod.SimulateTransaction; +import com.algorand.algosdk.v2.client.common.AlgodClient; +import com.algorand.algosdk.v2.client.common.Response; +import com.algorand.algosdk.v2.client.model.*; + +public class Reti { + static Long RETI_APP_ID_TESTNET = 673404372L; + + public static void main(String[] args) throws Exception { + // Get valid Reti testnet account + Account acct = recoverFromMnemonic(); + System.out.println("account address " + acct.getAddress().toString()); + + // Get # of Reti Validators in testnet + System.out.println(); + System.out.println("getNumberOfValidators"); + getNumberOfValidators(acct); + + // Get staked pools on account, there should be at least one + System.out.println(); + System.out.println("getStakedPoolsForAccount"); + getStakedPoolsForAccount(acct); + + // Add Stake to Validator Pool ID + System.out.println(); + System.out.println("addStake"); + addStake(acct); + + // Remove Stake from Validator Pool ID + System.out.println(); + System.out.println("removeStake"); + removeStake(acct); + } + + public static Account recoverFromMnemonic() throws GeneralSecurityException { + // example: ACCOUNT_RECOVER_MNEMONIC + // Space delimited 25 word mnemonic + String part1 = "panda course account pact six same"; + String part2 = "antique shed slender finger lab dose"; + String part3 = "reveal escape amateur since power left"; + String part4 = "trust update soup neck tuition about meadow"; + String mn = part1 + " " + part2 + " " + part3 + " " + part4; + return new Account(mn); + } + + public static void getNumberOfValidators(Account acct) { + try { + AlgodClient algodClient = ExampleUtils.getAlgodTestnetClient(); + Response rsp = algodClient.TransactionParams().execute(); + TransactionParametersResponse sp = rsp.body(); + + String jsonContract = Files.readString(Paths.get("reti/ValidatorRegistry.arc4.json")); + Contract contract = Encoder.decodeFromJson(jsonContract, Contract.class); + + List methodArgs = new ArrayList(); + + MethodCallParams mcp = MethodCallTransactionBuilder.Builder() + .applicationId(RETI_APP_ID_TESTNET) + .signer(acct.getTransactionSigner()) + .sender(acct.getAddress()) + .method(contract.getMethodByName("getNumValidators")) + .methodArguments(methodArgs) + .onComplete(Transaction.OnCompletion.NoOpOC) + .suggestedParams(sp) + .build(); + + AtomicTransactionComposer atc = new AtomicTransactionComposer(); + atc.addMethodCall(mcp); + + ExecuteResult res = atc.execute(algodClient, 250); + System.out.printf("App call (%s) confirmed in round %d\n", res.txIDs, res.confirmedRound); + res.methodResults.forEach(methodResult -> { + System.out.printf("Result from calling '%s' method: %s\n", methodResult.method.name, + methodResult.value); + }); + } catch (Exception e) { + System.out.println(e.toString()); + } + } + + public static void getStakedPoolsForAccount(Account acct) { + try { + AlgodClient algodClient = ExampleUtils.getAlgodTestnetClient(); + Response rsp = algodClient.TransactionParams().execute(); + TransactionParametersResponse sp = rsp.body(); + + String jsonContract = Files.readString(Paths.get("reti/ValidatorRegistry.arc4.json")); + Contract contract = Encoder.decodeFromJson(jsonContract, Contract.class); + + List methodArgs = new ArrayList(); + methodArgs.add(acct.getAddress()); + + MethodCallParams mcp = MethodCallTransactionBuilder.Builder() + .applicationId(RETI_APP_ID_TESTNET) + .signer(new EmptyTransactionSigner(acct.getAddress().toString())) + .sender(acct.getAddress()) + .method(contract.getMethodByName("getStakedPoolsForAccount")) + .methodArguments(methodArgs) + .onComplete(Transaction.OnCompletion.NoOpOC) + .suggestedParams(sp) + .build(); + + AtomicTransactionComposer atc = new AtomicTransactionComposer(); + atc.addMethodCall(mcp); + + SimulateRequest request = new SimulateRequest(); + request.allowEmptySignatures = true; + request.allowUnnamedResources = true; + + AtomicTransactionComposer.SimulateResult simulateResult = atc.simulate(algodClient, request); + Object resultsObj = simulateResult.getMethodResults().get(0).getReturnValue(); + List results = Arrays.stream(((Object[]) resultsObj)).toList(); + + for (Object o : results) { + List result = Arrays.stream(((Object[]) o)).toList(); + BigInteger validatorId = ((BigInteger) result.get(0)); + // BigInteger poolNum = ((BigInteger) result.get(1)); + BigInteger poolAppId = ((BigInteger) result.get(2)); + System.out.println("validator = " + validatorId + ", poolAppID = " + poolAppId); + getStakerInfo(acct, poolAppId); + } + } catch (Exception e) { + System.out.println(e); + } + } + + public static void getStakerInfo(Account acct, BigInteger poolAppID) { + String feeSink = "A7NMWS3NT3IUDMLVO26ULGXGIIOUQ3ND2TXSER6EBGRZNOBOUIQXHIBGDE"; + try { + AlgodClient algodClient = ExampleUtils.getAlgodTestnetClient(); + Response rsp = algodClient.TransactionParams().execute(); + TransactionParametersResponse sp = rsp.body(); + + String jsonContract = Files.readString(Paths.get("reti/StakingPool.arc4.json")); + Contract contract = Encoder.decodeFromJson(jsonContract, Contract.class); + + List methodArgs = new ArrayList(); + methodArgs.add(acct.getAddress()); + + MethodCallParams mcp = MethodCallTransactionBuilder.Builder() + .applicationId(poolAppID.longValue()) + .signer(new EmptyTransactionSigner(acct.getAddress().toString())) + .sender(acct.getAddress()) + .method(contract.getMethodByName("getStakerInfo")) + .methodArguments(methodArgs) + .onComplete(Transaction.OnCompletion.NoOpOC) + .suggestedParams(sp) + .build(); + + AtomicTransactionComposer atc = new AtomicTransactionComposer(); + atc.addMethodCall(mcp); + + SimulateRequest request = new SimulateRequest(); + request.allowEmptySignatures = true; + request.allowUnnamedResources = true; + + AtomicTransactionComposer.SimulateResult simulateResult = atc.simulate(algodClient, request); + Object resultsObj = simulateResult.getMethodResults().get(0).getReturnValue(); + List results = Arrays.stream(((Object[]) resultsObj)).toList(); + System.out.println("balance = " + results.get(1) + " microALGOS, poolAppID = " + poolAppID); + } catch (Exception e) { + System.out.println(e); + } + } + + public static void addStake(Account acct) { + Long validatorId = 1L; + Long poolAppId = 673421623L; + Long amount = 8000000L; + + try { + AlgodClient algodClient = ExampleUtils.getAlgodTestnetClient(); + Response rsp = algodClient.TransactionParams().execute(); + TransactionParametersResponse sp = rsp.body(); + + String jsonContract = Files.readString(Paths.get("reti/ValidatorRegistry.arc4.json")); + Contract validatorContract = Encoder.decodeFromJson(jsonContract, Contract.class); + + AtomicTransactionComposer atc = new AtomicTransactionComposer(); + + //Gas Call + List boxRefsGas = new ArrayList<>(); + boxRefsGas.add(new AppBoxReference(0L, getValidatorListBoxName(validatorId))); + boxRefsGas.add(new AppBoxReference(0L, new byte[0])); + boxRefsGas.add(new AppBoxReference(0L, new byte[0])); + boxRefsGas.add(new AppBoxReference(0L, new byte[0])); + boxRefsGas.add(new AppBoxReference(0L, new byte[0])); + boxRefsGas.add(new AppBoxReference(0L, new byte[0])); + boxRefsGas.add(new AppBoxReference(0L, getStakerPoolSetBoxName(acct.getAddress()))); + + MethodCallParams mcpGas = MethodCallTransactionBuilder.Builder() + .applicationId(RETI_APP_ID_TESTNET) + .signer(acct.getTransactionSigner()) + .sender(acct.getAddress()) + .method(validatorContract.getMethodByName("gas")) + .onComplete(Transaction.OnCompletion.NoOpOC) + .boxReferences(boxRefsGas) + .suggestedParams(sp) + .build(); + atc.addMethodCall(mcpGas); + + // addStake call + Transaction ptxn = PaymentTransactionBuilder.Builder() + .amount(amount) // 8 algos + .suggestedParams(sp) + .sender(acct.getAddress()) + .receiver(new Address().forApplication(RETI_APP_ID_TESTNET)) + .build(); + + // Construct TransactionWithSigner + TransactionWithSigner tws = new TransactionWithSigner(ptxn, + acct.getTransactionSigner()); + + List methodArgs = new ArrayList(); + methodArgs.add(tws); + methodArgs.add(BigInteger.valueOf(validatorId)); + methodArgs.add(BigInteger.ZERO); + + List foreignApps = new ArrayList(); + foreignApps.add(poolAppId); + + List boxRefs = new ArrayList<>(); + boxRefs.add(new AppBoxReference(poolAppId, getStakerLedgerBoxName())); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + + sp.fee = 1000L * 2; + + MethodCallParams mcp = MethodCallTransactionBuilder.Builder() + .applicationId(RETI_APP_ID_TESTNET) + .signer(acct.getTransactionSigner()) + .sender(acct.getAddress()) + .method(validatorContract.getMethodByName("addStake")) + .methodArguments(methodArgs) + .foreignApps(foreignApps) + .boxReferences(boxRefs) + .onComplete(Transaction.OnCompletion.NoOpOC) + .suggestedParams(sp) + .build(); + atc.addMethodCall(mcp); + + ExecuteResult res = atc.execute(algodClient, 250); + System.out.printf("App call (%s) confirmed in round %d\n", res.txIDs, res.confirmedRound); + res.methodResults.forEach(methodResult -> { + switch (methodResult.method.name) { + case "addStake": + List results = Arrays.stream(((Object[]) methodResult.value)).toList(); + System.out.println(amount + " additional microAlgos staked to poolAppId = " + results.get(2)); + break; + default: break; + } + }); + } catch (Exception e) { + System.out.println(e.toString()); + } + } + + public static void removeStake(Account acct) { + Long validatorId = 1L; + Long poolAppId = 673421623L; + + try { + AlgodClient algodClient = ExampleUtils.getAlgodTestnetClient(); + Response rsp = algodClient.TransactionParams().execute(); + TransactionParametersResponse sp = rsp.body(); + + String jsonContract = Files.readString(Paths.get("reti/ValidatorRegistry.arc4.json")); + Contract validatorContract = Encoder.decodeFromJson(jsonContract, Contract.class); + String stakingContractStr = Files.readString(Paths.get("reti/StakingPool.arc4.json")); + Contract stakingContract = Encoder.decodeFromJson(stakingContractStr, Contract.class); + + AtomicTransactionComposer atc = new AtomicTransactionComposer(); + + //Gas Call + List boxRefsGas = new ArrayList<>(); + boxRefsGas.add(new AppBoxReference(RETI_APP_ID_TESTNET, getValidatorListBoxName(validatorId))); + boxRefsGas.add(new AppBoxReference(RETI_APP_ID_TESTNET, new byte[0])); + boxRefsGas.add(new AppBoxReference(RETI_APP_ID_TESTNET, getStakerPoolSetBoxName(acct.getAddress()))); + boxRefsGas.add(new AppBoxReference(0L, new byte[0])); + boxRefsGas.add(new AppBoxReference(0L, new byte[0])); + boxRefsGas.add(new AppBoxReference(0L, new byte[0])); + boxRefsGas.add(new AppBoxReference(0L, new byte[0])); + + MethodCallParams mcpGas = MethodCallTransactionBuilder.Builder() + .applicationId(RETI_APP_ID_TESTNET) + .signer(acct.getTransactionSigner()) + .sender(acct.getAddress()) + .method(validatorContract.getMethodByName("gas")) + .onComplete(Transaction.OnCompletion.NoOpOC) + .boxReferences(boxRefsGas) + .suggestedParams(sp) + .build(); + atc.addMethodCall(mcpGas); + + List methodArgs = new ArrayList(); + methodArgs.add(acct.getAddress()); + methodArgs.add(BigInteger.valueOf(0L)); // 0 Removes all stake + + List foreignApps = new ArrayList(); + foreignApps.add(poolAppId); + + List boxRefs = new ArrayList<>(); + boxRefs.add(new AppBoxReference(poolAppId, getStakerLedgerBoxName())); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + boxRefs.add(new AppBoxReference(0L, new byte[0])); + + sp.fee = 1000L * 2; + + MethodCallParams mcp = MethodCallTransactionBuilder.Builder() + .applicationId(poolAppId) + .signer(acct.getTransactionSigner()) + .sender(acct.getAddress()) + .method(stakingContract.getMethodByName("removeStake")) + .methodArguments(methodArgs) + .foreignApps(foreignApps) + .boxReferences(boxRefs) + .onComplete(Transaction.OnCompletion.NoOpOC) + .suggestedParams(sp) + .build(); + atc.addMethodCall(mcp); + + ExecuteResult res = atc.execute(algodClient, 250); + System.out.printf("App call (%s) confirmed in round %d\n", res.txIDs, res.confirmedRound); + res.methodResults.forEach(methodResult -> { + switch (methodResult.method.name) { + case "removeStake": + System.out.println("All staked algos removed from poolAppId = " + poolAppId); + break; + default: break; + } + }); + } catch (Exception e) { + System.out.println(e.toString()); + } + } + + public static byte[] getStakerLedgerBoxName() { + String name = "stakers"; + return name.getBytes(StandardCharsets.UTF_8); + } + + public static byte[] getStakerPoolSetBoxName(Address stakerAccount) { + byte[] prefix = "sps".getBytes(); + byte[] combinedArray = new byte[prefix.length + stakerAccount.getBytes().length]; + + System.arraycopy(prefix, 0, combinedArray, 0, prefix.length); + System.arraycopy(stakerAccount.getBytes(), 0, combinedArray, prefix.length, stakerAccount.getBytes().length); + + return combinedArray; + } + + public static byte[] getValidatorListBoxName(long id) { + int EIGHT = 8; + + byte[] prefix = new byte[]{(byte) 'v'}; + ByteBuffer buffer = ByteBuffer.allocate(EIGHT).order(ByteOrder.BIG_ENDIAN).putLong(id); + byte[] ibytes = buffer.array(); + byte[] result = new byte[prefix.length + ibytes.length]; + + System.arraycopy(prefix, 0, result, 0, prefix.length); + System.arraycopy(ibytes, 0, result, prefix.length, ibytes.length); + + return result; + } +} diff --git a/pom.xml b/pom.xml index 659d1b7c2..985dc0521 100755 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.algorand algosdk - 2.5.0 + 2.5.1 jar ${project.groupId}:${project.artifactId} diff --git a/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java b/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java index 0ea9e3aee..aee271464 100644 --- a/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java +++ b/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java @@ -5,20 +5,18 @@ import com.algorand.algosdk.crypto.Digest; import com.algorand.algosdk.util.Encoder; import com.algorand.algosdk.v2.client.Utils; +import com.algorand.algosdk.v2.client.algod.PendingTransactionInformation; +import com.algorand.algosdk.v2.client.algod.SimulateTransaction; import com.algorand.algosdk.v2.client.common.AlgodClient; +import com.algorand.algosdk.v2.client.common.Client; import com.algorand.algosdk.v2.client.common.Response; -import com.algorand.algosdk.v2.client.model.PendingTransactionResponse; -import com.algorand.algosdk.v2.client.model.PostTransactionsResponse; +import com.algorand.algosdk.v2.client.model.*; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.ArrayUtils; import java.io.IOException; import java.nio.ByteBuffer; -import java.util.Arrays; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.HashMap; +import java.util.*; public class AtomicTransactionComposer { public enum Status { @@ -228,6 +226,58 @@ public List submit(AlgodClient client) throws Exception { return this.getTxIDs(); } + // Simulate simulates the transaction group against the network. + // + // The composer's status must be SUBMITTED or lower before calling this method. Simulation will not + // advance the status of the composer beyond SIGNED. + // + // The `request` argument can be used to customize the characteristics of the simulation. + // + // Returns a models.SimulateResponse and an ABIResult for each method call in this group. + public SimulateResult simulate(Client client, SimulateRequest request) throws Exception { + if (this.status.ordinal() > Status.SUBMITTED.ordinal()) { + throw new Exception("Status must be SUBMITTED or lower in order to call Simulate()"); + } + + List stxs = gatherSignatures(); + if (stxs == null) { + throw new Exception("Error gathering signatures"); + } + + SimulateRequestTransactionGroup txnGroups = new SimulateRequestTransactionGroup(); + txnGroups.txns = stxs; + request.txnGroups = new ArrayList<>(); + request.txnGroups.add(txnGroups); + + SimulateTransaction st = new SimulateTransaction(client); + SimulateResponse simulateResponse = st.request(request).execute().body(); + + if (simulateResponse == null) { + throw new Exception("Error in simulation response"); + } + + List methodResults = new ArrayList<>(); + for (int i = 0; i < stxs.size(); i++) { + SignedTransaction stx = stxs.get(i); + String txID = stx.transactionID; + PendingTransactionResponse pendingTransactionResponse = simulateResponse.txnGroups.get(0).txnResults.get(i).txnResult; + + ABIMethodResult methodResult = new ABIMethodResult(); + methodResult.setTxID(txID); + methodResult.setRawReturnValue(new byte[0]); + methodResult.setMethod(this.methodMap.get(i)); + + methodResult = parseMethodResponse(methodResult.getMethod(), methodResult, pendingTransactionResponse); + methodResults.add(methodResult); + } + + SimulateResult result = new SimulateResult(); + result.setMethodResults(methodResults); + result.setSimulateResponse(simulateResponse); + + return result; + } + /** * Send the transaction group to the network and wait until it's committed to a block. An error * will be thrown if submission or execution fails. @@ -326,6 +376,77 @@ public ExecuteResult execute(AlgodClient client, int waitRounds) throws Exceptio return new ExecuteResult(txInfo.confirmedRound, this.getTxIDs(), retList); } + public static class SimulateResult { + // The result of the transaction group simulation + private SimulateResponse simulateResponse; + // For each ABI method call in the executed group (created by the AddMethodCall method), this + // list contains information about the method call's return value + private List methodResults; + + // Getter and setter for simulateResponse + public SimulateResponse getSimulateResponse() { + return simulateResponse; + } + + public void setSimulateResponse(SimulateResponse simulateResponse) { + this.simulateResponse = simulateResponse; + } + + // Getter and setter for methodResults + public List getMethodResults() { + return methodResults; + } + + public void setMethodResults(List methodResults) { + this.methodResults = methodResults; + } + } + + /** + * Parses a single ABI Method transaction log into a ABI result object. + * + * @param method + * @param methodResult + * @param pendingTransactionResponse + * @return An ABIMethodResult object + */ + public ABIMethodResult parseMethodResponse(Method method, ABIMethodResult methodResult, PendingTransactionResponse pendingTransactionResponse) { + ABIMethodResult returnedResult = methodResult; + try { + returnedResult.setTransactionInfo(pendingTransactionResponse); + if (!method.returns.type.equals("void")) { + List logs = pendingTransactionResponse.logs; + if (logs == null || logs.isEmpty()) { + throw new Exception("App call transaction did not log a return value"); + } + + byte[] lastLog = logs.get(logs.size() - 1); + if (lastLog.length < 4 || !hasPrefix(lastLog, ABI_RET_HASH)) { + throw new Exception("App call transaction did not log a return value"); + } + + returnedResult.setRawReturnValue(Arrays.copyOfRange(lastLog, 4, lastLog.length)); + returnedResult.setReturnValue(method.returns.parsedType.decode(returnedResult.getRawReturnValue())); + } + } catch (Exception e) { + returnedResult.setDecodeError(e); + } + + return returnedResult; + } + + private static boolean hasPrefix(byte[] array, byte[] prefix) { + if (array.length < prefix.length) { + return false; + } + for (int i = 0; i < prefix.length; i++) { + if (array[i] != prefix[i]) { + return false; + } + } + return true; + } + private static boolean checkLogRet(byte[] logLine) { if (logLine.length < ABI_RET_HASH.length) return false; diff --git a/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java b/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java new file mode 100644 index 000000000..b4ca8b878 --- /dev/null +++ b/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java @@ -0,0 +1,62 @@ +package com.algorand.algosdk.transaction; + +import com.algorand.algosdk.crypto.Address; +import com.algorand.algosdk.util.Encoder; +import com.fasterxml.jackson.core.JsonProcessingException; + +import java.security.NoSuchAlgorithmException; +import java.util.Objects; + +public class EmptyTransactionSigner implements TxnSigner { + + private String authAddr = ""; + /** + * EmptyTransactionSigner is a TransactionSigner that produces signed transaction objects without + * signatures. This is useful for simulating transactions, but it won't work for actual submission. + */ + public EmptyTransactionSigner(String authAddr) { + super(); + this.authAddr = authAddr; + } + + /** + * SignTransactions returns SignedTxn bytes but does not sign them. + * + * @param txnGroup The group of transactions to be signed. + * @param indicesToSign The indexes of the transactions to sign. + * @return A list of signed transaction bytes. + */ + @Override + public SignedTransaction[] signTxnGroup(Transaction[] txnGroup, int[] indicesToSign) throws JsonProcessingException, NoSuchAlgorithmException { + SignedTransaction[] stxs = new SignedTransaction[indicesToSign.length]; + + for (int pos : indicesToSign) { + SignedTransaction stx = new SignedTransaction(); + stx.tx = txnGroup[pos]; + + if (authAddr != null) { + Address address = new Address(authAddr); + stx.authAddr(address.getBytes()); + } + + stxs[pos] = stx; + } + return stxs; + } + + /** + * Equals returns true if the other TransactionSigner equals this one. + * + * @param other The other TransactionSigner to compare. + * @return true if equal, false otherwise. + */ + @Override + public boolean equals(Object other) { + return other instanceof EmptyTransactionSigner; + } + + @Override + public int hashCode() { + return Objects.hash(EmptyTransactionSigner.class); + } +} diff --git a/src/main/java/com/algorand/algosdk/transaction/SignedTransaction.java b/src/main/java/com/algorand/algosdk/transaction/SignedTransaction.java index bed22aed6..b99c7de4c 100644 --- a/src/main/java/com/algorand/algosdk/transaction/SignedTransaction.java +++ b/src/main/java/com/algorand/algosdk/transaction/SignedTransaction.java @@ -68,7 +68,7 @@ public SignedTransaction(Transaction tx, LogicsigSignature lSig, String txId) { this(tx, new Signature(), new MultisigSignature(), lSig, txId); } - private SignedTransaction() { + SignedTransaction() { } public SignedTransaction authAddr(Address authAddr) { diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/ABIMethodResult.java b/src/main/java/com/algorand/algosdk/v2/client/model/ABIMethodResult.java new file mode 100644 index 000000000..d4adefbd0 --- /dev/null +++ b/src/main/java/com/algorand/algosdk/v2/client/model/ABIMethodResult.java @@ -0,0 +1,84 @@ +package com.algorand.algosdk.v2.client.model; + +import com.algorand.algosdk.abi.Method; +import com.algorand.algosdk.v2.client.algod.PendingTransactionInformation; + +import java.util.Arrays; + +public class ABIMethodResult { + // The TxID of the transaction that invoked the ABI method call. + private String txID; + // Information about the confirmed transaction that invoked the ABI method call. + private PendingTransactionResponse pendingTransactionResponse; + // Method that was called for this ABIMethodResult. + private Method method; + // The raw bytes of the return value from the ABI method call. This will be empty if the method does not return a value (return type "void"). + private byte[] rawReturnValue; + // The return value from the ABI method call. This will be null if the method does not return a value (return type "void"), or if the SDK was unable to decode the returned value. + private Object returnValue; + // If the SDK was unable to decode a return value, the error will be here. Make sure to check this before examining returnValue. + private Exception decodeError; + + // Getters and setters for all fields + + public String getTxID() { + return txID; + } + + public void setTxID(String txID) { + this.txID = txID; + } + + public PendingTransactionResponse getPendingTransactionResponse() { + return pendingTransactionResponse; + } + + public void setTransactionInfo(PendingTransactionResponse pendingTransactionResponse) { + this.pendingTransactionResponse = pendingTransactionResponse; + } + + public Method getMethod() { + return method; + } + + public void setMethod(Method method) { + this.method = method; + } + + public byte[] getRawReturnValue() { + return rawReturnValue; + } + + public void setRawReturnValue(byte[] rawReturnValue) { + this.rawReturnValue = rawReturnValue; + } + + public Object getReturnValue() { + return returnValue; + } + + public void setReturnValue(Object returnValue) { + this.returnValue = returnValue; + } + + public Exception getDecodeError() { + return decodeError; + } + + public void setDecodeError(Exception decodeError) { + this.decodeError = decodeError; + } + + // Optional: Override toString for easier debugging and logging + @Override + public String toString() { + return "ABIMethodResult{" + + "txID='" + txID + '\'' + + ", transactionInfo=" + pendingTransactionResponse + + ", method=" + method + + ", rawReturnValue=" + Arrays.toString(rawReturnValue) + + ", returnValue=" + returnValue + + ", decodeError=" + decodeError + + '}'; + } +} From c628b69b1724d4d322d2ad9ca152ce41e5405b02 Mon Sep 17 00:00:00 2001 From: Michael T Chuang Date: Mon, 9 Sep 2024 13:28:24 -0700 Subject: [PATCH 2/6] fix: accept suggested changes --- examples/pom.xml | 2 +- pom.xml | 2 +- .../AtomicTransactionComposer.java | 24 ++++++++++--------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/examples/pom.xml b/examples/pom.xml index f824dac96..7f2f33c08 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -95,7 +95,7 @@ com.algorand algosdk - 2.5.1 + 2.5.0 diff --git a/pom.xml b/pom.xml index 985dc0521..659d1b7c2 100755 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.algorand algosdk - 2.5.1 + 2.5.0 jar ${project.groupId}:${project.artifactId} diff --git a/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java b/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java index aee271464..69b55d90a 100644 --- a/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java +++ b/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java @@ -226,15 +226,17 @@ public List submit(AlgodClient client) throws Exception { return this.getTxIDs(); } - // Simulate simulates the transaction group against the network. - // - // The composer's status must be SUBMITTED or lower before calling this method. Simulation will not - // advance the status of the composer beyond SIGNED. - // - // The `request` argument can be used to customize the characteristics of the simulation. - // - // Returns a models.SimulateResponse and an ABIResult for each method call in this group. - public SimulateResult simulate(Client client, SimulateRequest request) throws Exception { + /** + * Simulate simulates the transaction group against the network. + *

+ * The composer's status must be SUBMITTED or lower before calling this method. Simulation will not + * advance the status of the composer beyond SIGNED. + *

+ * The `request` argument can be used to customize the characteristics of the simulation. + *

+ * Returns a models.SimulateResponse and an ABIResult for each method call in this group. + */ + public SimulateResult simulate(AlgodClient client, SimulateRequest request) throws Exception { if (this.status.ordinal() > Status.SUBMITTED.ordinal()) { throw new Exception("Status must be SUBMITTED or lower in order to call Simulate()"); } @@ -414,7 +416,7 @@ public ABIMethodResult parseMethodResponse(Method method, ABIMethodResult method ABIMethodResult returnedResult = methodResult; try { returnedResult.setTransactionInfo(pendingTransactionResponse); - if (!method.returns.type.equals("void")) { + if (!method.returns.type.equals(Method.Returns.VoidRetType)) { List logs = pendingTransactionResponse.logs; if (logs == null || logs.isEmpty()) { throw new Exception("App call transaction did not log a return value"); @@ -425,7 +427,7 @@ public ABIMethodResult parseMethodResponse(Method method, ABIMethodResult method throw new Exception("App call transaction did not log a return value"); } - returnedResult.setRawReturnValue(Arrays.copyOfRange(lastLog, 4, lastLog.length)); + returnedResult.setRawReturnValue(Arrays.copyOfRange(lastLog, ABI_RET_HASH.length, lastLog.length)); returnedResult.setReturnValue(method.returns.parsedType.decode(returnedResult.getRawReturnValue())); } } catch (Exception e) { From 730cf72763c3f71dbd60564613b1bba3574871f5 Mon Sep 17 00:00:00 2001 From: Michael T Chuang Date: Wed, 11 Sep 2024 15:22:47 -0700 Subject: [PATCH 3/6] fix: address more PR feedback --- examples/reti/StakingPool.approval.teal | 4366 --- examples/reti/StakingPool.arc32.json | 421 - examples/reti/StakingPool.clear.teal | 1 - examples/reti/StakingPool.src_map.json | 18868 ----------- examples/reti/ValidatorRegistry.approval.teal | 6162 ---- examples/reti/ValidatorRegistry.arc32.json | 806 - examples/reti/ValidatorRegistry.clear.teal | 1 - examples/reti/ValidatorRegistry.src_map.json | 27582 ---------------- .../main/java/com/algorand/examples/Reti.java | 5 +- .../AtomicTransactionComposer.java | 47 +- .../transaction/EmptyTransactionSigner.java | 5 +- .../transaction/SignedTransaction.java | 6 +- .../v2/client/model/ABIMethodResult.java | 84 - 13 files changed, 30 insertions(+), 58324 deletions(-) delete mode 100644 examples/reti/StakingPool.approval.teal delete mode 100644 examples/reti/StakingPool.arc32.json delete mode 100644 examples/reti/StakingPool.clear.teal delete mode 100644 examples/reti/StakingPool.src_map.json delete mode 100644 examples/reti/ValidatorRegistry.approval.teal delete mode 100755 examples/reti/ValidatorRegistry.arc32.json delete mode 100644 examples/reti/ValidatorRegistry.clear.teal delete mode 100755 examples/reti/ValidatorRegistry.src_map.json delete mode 100644 src/main/java/com/algorand/algosdk/v2/client/model/ABIMethodResult.java diff --git a/examples/reti/StakingPool.approval.teal b/examples/reti/StakingPool.approval.teal deleted file mode 100644 index a49c56377..000000000 --- a/examples/reti/StakingPool.approval.teal +++ /dev/null @@ -1,4366 +0,0 @@ -#pragma version 10 - -// This TEAL was generated by TEALScript v0.96.0 -// https://github.com/algorandfoundation/TEALScript - -// This contract is compliant with and/or implements the following ARCs: [ ARC4 ] - -// The following ten lines of TEAL handle initial program flow -// This pattern is used to make it easy for anyone to parse the start of the program and determine if a specific action is allowed -// Here, action refers to the OnComplete in combination with whether the app is being created or called -// Every possible action for this contract is represented in the switch statement -// If the action is not implemented in the contract, its respective branch will be "*NOT_IMPLEMENTED" which just contains "err" -txn ApplicationID -! -int 6 -* -txn OnCompletion -+ -switch *call_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *call_UpdateApplication *NOT_IMPLEMENTED *create_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED - -*NOT_IMPLEMENTED: - // The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID? - err - -// updateApplication()void -*abi_route_updateApplication: - // execute updateApplication()void - callsub updateApplication - int 1 - return - -// updateApplication(): void -updateApplication: - proto 0 0 - - // contracts/stakingPool.algo.ts:92 - // assert( - // this.txn.sender === Address.fromAddress('LZ4V2IRVLCXFJK4REJV4TAGEKEYTA2GMR6TC2344OB3L3AF3MWXZ6ZAFIQ'), - // 'Temporary: contract is upgradeable but only during testing and only from a development account', - // ) - txn Sender - addr LZ4V2IRVLCXFJK4REJV4TAGEKEYTA2GMR6TC2344OB3L3AF3MWXZ6ZAFIQ - == - - // Temporary: contract is upgradeable but only during testing and only from a development account - assert - retsub - -// createApplication(uint64,uint64,uint64,uint64)void -*abi_route_createApplication: - // minEntryStake: uint64 - txna ApplicationArgs 4 - btoi - - // poolId: uint64 - txna ApplicationArgs 3 - btoi - - // validatorId: uint64 - txna ApplicationArgs 2 - btoi - - // creatingContractId: uint64 - txna ApplicationArgs 1 - btoi - - // execute createApplication(uint64,uint64,uint64,uint64)void - callsub createApplication - int 1 - return - -// createApplication(creatingContractId: AppID, validatorId: uint64, poolId: uint64, minEntryStake: uint64): void -// -// Initialize the staking pool w/ owner and manager, but can only be created by the validator contract. -// @param {uint64} creatingContractId - id of contract that constructed us - the validator application (single global instance) -// @param {uint64} validatorId - id of validator we're a staking pool of -// @param {uint64} poolId - which pool id are we -// @param {uint64} minEntryStake - minimum amount to be in pool, but also minimum amount balance can't go below (without removing all!) -createApplication: - proto 4 0 - - // *if0_condition - // contracts/stakingPool.algo.ts:106 - // creatingContractId === AppID.fromUint64(0) - frame_dig -1 // creatingContractId: AppID - int 0 - == - bz *if0_else - - // *if0_consequent - // contracts/stakingPool.algo.ts:108 - // assert(validatorId === 0) - frame_dig -2 // validatorId: uint64 - int 0 - == - assert - - // contracts/stakingPool.algo.ts:109 - // assert(poolId === 0) - frame_dig -3 // poolId: uint64 - int 0 - == - assert - b *if0_end - -*if0_else: - // contracts/stakingPool.algo.ts:111 - // assert(validatorId !== 0) - frame_dig -2 // validatorId: uint64 - int 0 - != - assert - - // contracts/stakingPool.algo.ts:112 - // assert(poolId !== 0) - frame_dig -3 // poolId: uint64 - int 0 - != - assert - -*if0_end: - // contracts/stakingPool.algo.ts:114 - // assert(minEntryStake >= MIN_ALGO_STAKE_PER_POOL, 'staking pool must have minimum entry of 1 algo') - frame_dig -4 // minEntryStake: uint64 - int 1000000 - >= - - // staking pool must have minimum entry of 1 algo - assert - - // contracts/stakingPool.algo.ts:115 - // this.creatingValidatorContractAppId.value = creatingContractId - byte 0x63726561746f72417070 // "creatorApp" - frame_dig -1 // creatingContractId: AppID - app_global_put - - // contracts/stakingPool.algo.ts:116 - // this.validatorId.value = validatorId - byte 0x76616c696461746f724964 // "validatorId" - frame_dig -2 // validatorId: uint64 - app_global_put - - // contracts/stakingPool.algo.ts:117 - // this.poolId.value = poolId - byte 0x706f6f6c4964 // "poolId" - frame_dig -3 // poolId: uint64 - app_global_put - - // contracts/stakingPool.algo.ts:118 - // this.numStakers.value = 0 - byte 0x6e756d5374616b657273 // "numStakers" - int 0 - app_global_put - - // contracts/stakingPool.algo.ts:119 - // this.totalAlgoStaked.value = 0 - byte 0x7374616b6564 // "staked" - int 0 - app_global_put - - // contracts/stakingPool.algo.ts:120 - // this.minEntryStake.value = minEntryStake - byte 0x6d696e456e7472795374616b65 // "minEntryStake" - frame_dig -4 // minEntryStake: uint64 - app_global_put - - // contracts/stakingPool.algo.ts:121 - // this.lastPayout.value = globals.round - byte 0x6c6173745061796f7574 // "lastPayout" - global Round - app_global_put - - // contracts/stakingPool.algo.ts:122 - // this.epochNumber.value = 0 - byte 0x65706f63684e756d626572 // "epochNumber" - int 0 - app_global_put - - // contracts/stakingPool.algo.ts:124 - // this.setRoundsPerDay() - callsub setRoundsPerDay - - // contracts/stakingPool.algo.ts:125 - // this.binRoundStart.value = globals.round - (globals.round % this.roundsPerDay.value) - byte 0x62696e526f756e645374617274 // "binRoundStart" - global Round - global Round - byte 0x726f756e6473506572446179 // "roundsPerDay" - app_global_get - % - - - app_global_put - - // contracts/stakingPool.algo.ts:126 - // this.stakeAccumulator.value = 0 as uint128 - byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" - byte 0x00000000000000000000000000000000 - app_global_put - - // contracts/stakingPool.algo.ts:127 - // this.rewardAccumulator.value = 0 - byte 0x726577617264416363756d756c61746f72 // "rewardAccumulator" - int 0 - app_global_put - - // contracts/stakingPool.algo.ts:128 - // this.weightedMovingAverage.value = 0 as uint128 - byte 0x65776d61 // "ewma" - byte 0x00000000000000000000000000000000 - app_global_put - retsub - -// gas()void -*abi_route_gas: - // execute gas()void - callsub gas - int 1 - return - -// gas(): void -// -// gas is a dummy no-op call that can be used to pool-up resource references and opcode cost -gas: - proto 0 0 - retsub - -// costForBoxStorage(totalNumBytes: uint64): uint64 -costForBoxStorage: - proto 1 1 - - // contracts/stakingPool.algo.ts:140 - // return SCBOX_PERBOX + totalNumBytes * SCBOX_PERBYTE - int 2500 - frame_dig -1 // totalNumBytes: uint64 - int 400 - * - + - retsub - -// initStorage(pay)void -*abi_route_initStorage: - // mbrPayment: pay - txn GroupIndex - int 1 - - - dup - gtxns TypeEnum - int pay - == - - // argument 0 (mbrPayment) for initStorage must be a pay transaction - assert - - // execute initStorage(pay)void - callsub initStorage - int 1 - return - -// initStorage(mbrPayment: PayTxn): void -// -// Called after we're created and then funded, so we can create our large stakers ledger storage -// Caller has to get MBR amounts from ValidatorRegistry to know how much to fund us to cover the box storage cost -// If this is pool 1 AND the validator has specified a reward token, opt-in to that token -// so that the validator can seed the pool with future rewards of that token. -// @param mbrPayment payment from caller which covers mbr increase of new staking pools' storage -initStorage: - proto 1 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 3 - - // contracts/stakingPool.algo.ts:151 - // assert(!this.stakers.exists, 'staking pool already initialized') - byte 0x7374616b657273 // "stakers" - box_len - swap - pop - ! - - // staking pool already initialized - assert - - // contracts/stakingPool.algo.ts:154 - // validatorConfig = sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [this.validatorId.value], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:155 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:156 - // methodArgs: [this.validatorId.value] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - frame_bury 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - - // contracts/stakingPool.algo.ts:158 - // isTokenEligible = validatorConfig.rewardTokenId !== 0 - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 153 8 - btoi - int 0 - != - frame_bury 1 // isTokenEligible: bool - - // contracts/stakingPool.algo.ts:159 - // extraMBR = isTokenEligible && this.poolId.value === 1 ? ASSET_HOLDING_FEE : 0 - frame_dig 1 // isTokenEligible: bool - dup - bz *skip_and0 - byte 0x706f6f6c4964 // "poolId" - app_global_get - int 1 - == - && - -*skip_and0: - bz *ternary0_false - int 100000 - b *ternary0_end - -*ternary0_false: - int 0 - -*ternary0_end: - frame_bury 2 // extraMBR: uint64 - - // contracts/stakingPool.algo.ts:160 - // PoolInitMbr = - // ALGORAND_ACCOUNT_MIN_BALANCE + - // extraMBR + - // this.costForBoxStorage(7 /* 'stakers' name */ + len() * MAX_STAKERS_PER_POOL) - int 100000 - frame_dig 2 // extraMBR: uint64 - + - int 12807 - callsub costForBoxStorage - + - frame_bury 3 // PoolInitMbr: uint64 - - // contracts/stakingPool.algo.ts:166 - // verifyPayTxn(mbrPayment, { receiver: this.app.address, amount: PoolInitMbr }) - // verify receiver - frame_dig -1 // mbrPayment: PayTxn - gtxns Receiver - global CurrentApplicationAddress - == - - // transaction verification failed: {"txn":"mbrPayment","field":"receiver","expected":"this.app.address"} - assert - - // verify amount - frame_dig -1 // mbrPayment: PayTxn - gtxns Amount - frame_dig 3 // PoolInitMbr: uint64 - == - - // transaction verification failed: {"txn":"mbrPayment","field":"amount","expected":"PoolInitMbr"} - assert - - // contracts/stakingPool.algo.ts:167 - // this.stakers.create() - byte 0x7374616b657273 // "stakers" - int 12800 - box_create - pop - - // *if1_condition - // contracts/stakingPool.algo.ts:169 - // isTokenEligible && this.poolId.value === 1 - frame_dig 1 // isTokenEligible: bool - dup - bz *skip_and1 - byte 0x706f6f6c4964 // "poolId" - app_global_get - int 1 - == - && - -*skip_and1: - bz *if1_end - - // *if1_consequent - // contracts/stakingPool.algo.ts:171 - // sendAssetTransfer({ - // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId), - // assetReceiver: this.app.address, - // assetAmount: 0, - // }) - itxn_begin - int axfer - itxn_field TypeEnum - - // contracts/stakingPool.algo.ts:172 - // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId) - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 153 8 - btoi - itxn_field XferAsset - - // contracts/stakingPool.algo.ts:173 - // assetReceiver: this.app.address - global CurrentApplicationAddress - itxn_field AssetReceiver - - // contracts/stakingPool.algo.ts:174 - // assetAmount: 0 - int 0 - itxn_field AssetAmount - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - -*if1_end: - retsub - -// addStake(pay,address)uint64 -*abi_route_addStake: - // The ABI return prefix - byte 0x151f7c75 - - // staker: address - txna ApplicationArgs 1 - dup - len - int 32 - == - - // argument 0 (staker) for addStake must be a address - assert - - // stakedAmountPayment: pay - txn GroupIndex - int 1 - - - dup - gtxns TypeEnum - int pay - == - - // argument 1 (stakedAmountPayment) for addStake must be a pay transaction - assert - - // execute addStake(pay,address)uint64 - callsub addStake - itob - concat - log - int 1 - return - -// addStake(stakedAmountPayment: PayTxn, staker: Address): uint64 -// -// Adds stake to the given account. -// Can ONLY be called by the validator contract that created us -// Must receive payment from the validator contract for amount being staked. -// -// @param {PayTxn} stakedAmountPayment prior payment coming from validator contract to us on behalf of staker. -// @param {Address} staker - The account adding new stake -// @throws {Error} - Throws an error if the staking pool is full. -// @returns {uint64} new 'entry round' round number of stake add -addStake: - proto 2 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 4 - - // contracts/stakingPool.algo.ts:190 - // assert(this.stakers.exists, 'staking pool must be initialized first') - byte 0x7374616b657273 // "stakers" - box_len - swap - pop - - // staking pool must be initialized first - assert - - // contracts/stakingPool.algo.ts:193 - // assert( - // this.txn.sender === this.creatingValidatorContractAppId.value.address, - // 'stake can only be added via the validator contract', - // ) - txn Sender - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - app_params_get AppAddress - pop - == - - // stake can only be added via the validator contract - assert - - // contracts/stakingPool.algo.ts:197 - // assert(staker !== globals.zeroAddress) - frame_dig -2 // staker: Address - global ZeroAddress - != - assert - - // contracts/stakingPool.algo.ts:200 - // this.checkIfBinClosed() - callsub checkIfBinClosed - - // contracts/stakingPool.algo.ts:204 - // verifyPayTxn(stakedAmountPayment, { - // sender: this.creatingValidatorContractAppId.value.address, - // receiver: this.app.address, - // amount: stakedAmountPayment.amount, - // }) - // verify sender - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Sender - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - app_params_get AppAddress - pop - == - - // transaction verification failed: {"txn":"stakedAmountPayment","field":"sender","expected":"this.creatingValidatorContractAppId.value.address"} - assert - - // verify receiver - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Receiver - global CurrentApplicationAddress - == - - // transaction verification failed: {"txn":"stakedAmountPayment","field":"receiver","expected":"this.app.address"} - assert - - // verify amount - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Amount - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Amount - == - - // transaction verification failed: {"txn":"stakedAmountPayment","field":"amount","expected":"stakedAmountPayment.amount"} - assert - - // contracts/stakingPool.algo.ts:213 - // entryRound = globals.round + ALGORAND_STAKING_BLOCK_DELAY - global Round - int 320 - + - frame_bury 0 // entryRound: uint64 - - // contracts/stakingPool.algo.ts:214 - // firstEmpty = 0 - int 0 - frame_bury 1 // firstEmpty: uint64 - - // contracts/stakingPool.algo.ts:216 - // this.totalAlgoStaked.value += stakedAmountPayment.amount - byte 0x7374616b6564 // "staked" - app_global_get - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Amount - + - byte 0x7374616b6564 // "staked" - swap - app_global_put - - // contracts/stakingPool.algo.ts:218 - // roundsLeftInBin = this.binRoundStart.value + this.roundsPerDay.value - globals.round - byte 0x62696e526f756e645374617274 // "binRoundStart" - app_global_get - byte 0x726f756e6473506572446179 // "roundsPerDay" - app_global_get - + - global Round - - - frame_bury 2 // roundsLeftInBin: uint64 - - // contracts/stakingPool.algo.ts:219 - // this.stakeAccumulator.value = - // this.stakeAccumulator.value + (stakedAmountPayment.amount as uint128) * (roundsLeftInBin as uint128) - byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" - dup - app_global_get - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Amount - itob - frame_dig 2 // roundsLeftInBin: uint64 - itob - b* - b+ - dup - bitlen - int 128 - <= - - // this.stakeAccumulator.value + (stakedAmountPayment.amount as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits - assert - byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - b& - dup - len - dup - int 16 - - - swap - substring3 - app_global_put - - // contracts/stakingPool.algo.ts:223 - // for (let i = 0; i < this.stakers.value.length; i += 1) - int 0 - frame_bury 3 // i: uint64 - -*for_0: - // contracts/stakingPool.algo.ts:223 - // i < this.stakers.value.length - frame_dig 3 // i: uint64 - int 200 - < - bz *for_0_end - - // *if2_condition - // contracts/stakingPool.algo.ts:224 - // globals.opcodeBudget < 300 - global OpcodeBudget - int 300 - < - bz *if2_end - - // *if2_consequent - // contracts/stakingPool.algo.ts:225 - // increaseOpcodeBudget() - itxn_begin - int appl - itxn_field TypeEnum - int 0 - itxn_field Fee - byte b64 CoEB // #pragma version 10; int 1 - dup - itxn_field ApprovalProgram - itxn_field ClearStateProgram - int DeleteApplication - itxn_field OnCompletion - itxn_submit - -*if2_end: - // contracts/stakingPool.algo.ts:227 - // cmpStaker = clone(this.stakers.value[i]) - frame_dig 3 // i: uint64 - int 64 - * // acc * typeLength - int 64 - byte 0x7374616b657273 // "stakers" - cover 2 - box_extract - frame_bury 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // *if3_condition - // contracts/stakingPool.algo.ts:228 - // cmpStaker.account === staker - frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 0 32 - frame_dig -2 // staker: Address - == - bz *if3_end - - // *if3_consequent - // contracts/stakingPool.algo.ts:230 - // cmpStaker.balance += stakedAmountPayment.amount - frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) - int 32 // headOffset - frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Amount - + - itob - replace3 - frame_bury 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:231 - // cmpStaker.entryRound = entryRound - frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) - int 56 // headOffset - frame_dig 0 // entryRound: uint64 - itob - replace3 - frame_bury 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:234 - // this.stakers.value[i] = cmpStaker - frame_dig 3 // i: uint64 - int 64 - * // acc * typeLength - frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) - byte 0x7374616b657273 // "stakers" - cover 2 - box_replace - - // contracts/stakingPool.algo.ts:236 - // return entryRound - frame_dig 0 // entryRound: uint64 - b *addStake*return - -*if3_end: - // *if4_condition - // contracts/stakingPool.algo.ts:238 - // firstEmpty === 0 && cmpStaker.account === globals.zeroAddress - frame_dig 1 // firstEmpty: uint64 - int 0 - == - dup - bz *skip_and2 - frame_dig 4 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 0 32 - global ZeroAddress - == - && - -*skip_and2: - bz *if4_end - - // *if4_consequent - // contracts/stakingPool.algo.ts:239 - // firstEmpty = i + 1 - frame_dig 3 // i: uint64 - int 1 - + - frame_bury 1 // firstEmpty: uint64 - -*if4_end: - -*for_0_continue: - // contracts/stakingPool.algo.ts:223 - // i += 1 - frame_dig 3 // i: uint64 - int 1 - + - frame_bury 3 // i: uint64 - b *for_0 - -*for_0_end: - // *if5_condition - // contracts/stakingPool.algo.ts:243 - // firstEmpty === 0 - frame_dig 1 // firstEmpty: uint64 - int 0 - == - bz *if5_end - - // *if5_consequent - // Staking pool full - err - -*if5_end: - // contracts/stakingPool.algo.ts:250 - // assert(stakedAmountPayment.amount >= this.minEntryStake.value, 'must stake at least the minimum for this pool') - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Amount - byte 0x6d696e456e7472795374616b65 // "minEntryStake" - app_global_get - >= - - // must stake at least the minimum for this pool - assert - - // contracts/stakingPool.algo.ts:252 - // assert(this.stakers.value[firstEmpty - 1].account === globals.zeroAddress) - frame_dig 1 // firstEmpty: uint64 - int 1 - - - int 64 - * // acc * typeLength - int 0 - + - int 32 - byte 0x7374616b657273 // "stakers" - cover 2 - box_extract - global ZeroAddress - == - assert - - // contracts/stakingPool.algo.ts:253 - // this.stakers.value[firstEmpty - 1] = { - // account: staker, - // balance: stakedAmountPayment.amount, - // totalRewarded: 0, - // rewardTokenBalance: 0, - // entryRound: entryRound, - // } - frame_dig 1 // firstEmpty: uint64 - int 1 - - - int 64 - * // acc * typeLength - frame_dig -2 // staker: Address - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Amount - itob - concat - byte 0x0000000000000000 - concat - byte 0x0000000000000000 - concat - frame_dig 0 // entryRound: uint64 - itob - concat - byte 0x7374616b657273 // "stakers" - cover 2 - box_replace - - // contracts/stakingPool.algo.ts:260 - // this.numStakers.value += 1 - byte 0x6e756d5374616b657273 // "numStakers" - app_global_get - int 1 - + - byte 0x6e756d5374616b657273 // "numStakers" - swap - app_global_put - - // contracts/stakingPool.algo.ts:261 - // return entryRound - frame_dig 0 // entryRound: uint64 - -*addStake*return: - // set the subroutine return value - frame_bury 0 - - // pop all local variables from the stack - popn 4 - retsub - -// removeStake(address,uint64)void -*abi_route_removeStake: - // amountToUnstake: uint64 - txna ApplicationArgs 2 - btoi - - // staker: address - txna ApplicationArgs 1 - dup - len - int 32 - == - - // argument 1 (staker) for removeStake must be a address - assert - - // execute removeStake(address,uint64)void - callsub removeStake - int 1 - return - -// removeStake(staker: Address, amountToUnstake: uint64): void -// -// Removes stake on behalf of caller (removing own stake). If any token rewards exist, those are always sent in -// full. Also notifies the validator contract for this pools validator of the staker / balance changes. -// -// @param {Address} staker - account to remove. normally same as sender, but the validator owner or manager can also call -// this to remove the specified staker explicitly. The removed stake MUST only go to the staker of course. This is -// so a validator can shut down a poool and refund the stakers. It can also be used to kick out stakers who no longer -// meet the gating requirements (determined by the node daemon). -// @param {uint64} amountToUnstake - The amount of stake to be removed. Specify 0 to remove all stake. -// @throws {Error} If the account has insufficient balance or if the account is not found. -removeStake: - proto 2 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 6 - - // *if6_condition - // contracts/stakingPool.algo.ts:278 - // staker !== this.txn.sender - frame_dig -1 // staker: Address - txn Sender - != - bz *if6_end - - // *if6_consequent - // contracts/stakingPool.algo.ts:279 - // assert( - // this.isOwnerOrManagerCaller(), - // 'If staker is not sender in removeStake call, then sender MUST be owner or manager of validator', - // ) - callsub isOwnerOrManagerCaller - - // If staker is not sender in removeStake call, then sender MUST be owner or manager of validator - assert - -*if6_end: - // contracts/stakingPool.algo.ts:285 - // this.checkIfBinClosed() - callsub checkIfBinClosed - - // contracts/stakingPool.algo.ts:287 - // for (let i = 0; i < this.stakers.value.length; i += 1) - int 0 - frame_bury 0 // i: uint64 - -*for_1: - // contracts/stakingPool.algo.ts:287 - // i < this.stakers.value.length - frame_dig 0 // i: uint64 - int 200 - < - bz *for_1_end - - // *if7_condition - // contracts/stakingPool.algo.ts:288 - // globals.opcodeBudget < 300 - global OpcodeBudget - int 300 - < - bz *if7_end - - // *if7_consequent - // contracts/stakingPool.algo.ts:289 - // increaseOpcodeBudget() - itxn_begin - int appl - itxn_field TypeEnum - int 0 - itxn_field Fee - byte b64 CoEB // #pragma version 10; int 1 - dup - itxn_field ApprovalProgram - itxn_field ClearStateProgram - int DeleteApplication - itxn_field OnCompletion - itxn_submit - -*if7_end: - // contracts/stakingPool.algo.ts:291 - // cmpStaker = clone(this.stakers.value[i]) - frame_dig 0 // i: uint64 - int 64 - * // acc * typeLength - int 64 - byte 0x7374616b657273 // "stakers" - cover 2 - box_extract - frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // *if8_condition - // contracts/stakingPool.algo.ts:292 - // cmpStaker.account === staker - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 0 32 - frame_dig -1 // staker: Address - == - bz *if8_end - - // *if8_consequent - // *if9_condition - // contracts/stakingPool.algo.ts:293 - // amountToUnstake === 0 - frame_dig -2 // amountToUnstake: uint64 - int 0 - == - bz *if9_end - - // *if9_consequent - // contracts/stakingPool.algo.ts:295 - // amountToUnstake = cmpStaker.balance - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - frame_bury -2 // amountToUnstake: uint64 - -*if9_end: - // *if10_condition - // contracts/stakingPool.algo.ts:297 - // cmpStaker.balance < amountToUnstake - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - frame_dig -2 // amountToUnstake: uint64 - < - bz *if10_end - - // *if10_consequent - // Insufficient balance - err - -*if10_end: - // contracts/stakingPool.algo.ts:300 - // cmpStaker.balance -= amountToUnstake - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - int 32 // headOffset - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - frame_dig -2 // amountToUnstake: uint64 - - - itob - replace3 - frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:301 - // this.totalAlgoStaked.value -= amountToUnstake - byte 0x7374616b6564 // "staked" - app_global_get - frame_dig -2 // amountToUnstake: uint64 - - - byte 0x7374616b6564 // "staked" - swap - app_global_put - - // contracts/stakingPool.algo.ts:303 - // amountRewardTokenRemoved = 0 - int 0 - frame_bury 2 // amountRewardTokenRemoved: uint64 - - // *if11_condition - // contracts/stakingPool.algo.ts:304 - // cmpStaker.rewardTokenBalance > 0 - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 48 8 - btoi - int 0 - > - bz *if11_end - - // *if11_consequent - // *if12_condition - // contracts/stakingPool.algo.ts:306 - // this.poolId.value === 1 - byte 0x706f6f6c4964 // "poolId" - app_global_get - int 1 - == - bz *if12_else - - // *if12_consequent - // contracts/stakingPool.algo.ts:307 - // validatorConfig = sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [this.validatorId.value], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:308 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:309 - // methodArgs: [this.validatorId.value] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - frame_bury 3 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - - // contracts/stakingPool.algo.ts:315 - // sendAssetTransfer({ - // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId), - // assetReceiver: staker, - // assetAmount: cmpStaker.rewardTokenBalance, - // }) - itxn_begin - int axfer - itxn_field TypeEnum - - // contracts/stakingPool.algo.ts:316 - // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId) - frame_dig 3 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 153 8 - btoi - itxn_field XferAsset - - // contracts/stakingPool.algo.ts:317 - // assetReceiver: staker - frame_dig -1 // staker: Address - itxn_field AssetReceiver - - // contracts/stakingPool.algo.ts:318 - // assetAmount: cmpStaker.rewardTokenBalance - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 48 8 - btoi - itxn_field AssetAmount - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/stakingPool.algo.ts:320 - // amountRewardTokenRemoved = cmpStaker.rewardTokenBalance - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 48 8 - btoi - frame_bury 2 // amountRewardTokenRemoved: uint64 - - // contracts/stakingPool.algo.ts:321 - // cmpStaker.rewardTokenBalance = 0 - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - byte 0x0000000000000000 - replace2 48 - frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - b *if12_end - -*if12_else: - // contracts/stakingPool.algo.ts:326 - // amountRewardTokenRemoved = cmpStaker.rewardTokenBalance - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 48 8 - btoi - frame_bury 2 // amountRewardTokenRemoved: uint64 - - // contracts/stakingPool.algo.ts:327 - // cmpStaker.rewardTokenBalance = 0 - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - byte 0x0000000000000000 - replace2 48 - frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - -*if12_end: - -*if11_end: - // contracts/stakingPool.algo.ts:332 - // assert( - // cmpStaker.balance === 0 || cmpStaker.balance >= this.minEntryStake.value, - // 'cannot reduce balance below minimum allowed stake unless all is removed', - // ) - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - int 0 - == - dup - bnz *skip_or0 - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - byte 0x6d696e456e7472795374616b65 // "minEntryStake" - app_global_get - >= - || - -*skip_or0: - // cannot reduce balance below minimum allowed stake unless all is removed - assert - - // contracts/stakingPool.algo.ts:340 - // sendPayment({ - // amount: amountToUnstake, - // receiver: staker, - // note: 'unstaked', - // }) - itxn_begin - int pay - itxn_field TypeEnum - - // contracts/stakingPool.algo.ts:341 - // amount: amountToUnstake - frame_dig -2 // amountToUnstake: uint64 - itxn_field Amount - - // contracts/stakingPool.algo.ts:342 - // receiver: staker - frame_dig -1 // staker: Address - itxn_field Receiver - - // contracts/stakingPool.algo.ts:343 - // note: 'unstaked' - byte 0x756e7374616b6564 // "unstaked" - itxn_field Note - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/stakingPool.algo.ts:345 - // stakerRemoved = false - int 0 - frame_bury 4 // stakerRemoved: bool - - // *if13_condition - // contracts/stakingPool.algo.ts:346 - // cmpStaker.balance === 0 - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - int 0 - == - bz *if13_end - - // *if13_consequent - // contracts/stakingPool.algo.ts:348 - // this.numStakers.value -= 1 - byte 0x6e756d5374616b657273 // "numStakers" - app_global_get - int 1 - - - byte 0x6e756d5374616b657273 // "numStakers" - swap - app_global_put - - // contracts/stakingPool.algo.ts:349 - // cmpStaker.account = globals.zeroAddress - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - int 0 - global ZeroAddress - replace3 - frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:350 - // cmpStaker.totalRewarded = 0 - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - byte 0x0000000000000000 - replace2 40 - frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:351 - // cmpStaker.rewardTokenBalance = 0 - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - byte 0x0000000000000000 - replace2 48 - frame_bury 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:352 - // stakerRemoved = true - int 1 - frame_bury 4 // stakerRemoved: bool - -*if13_end: - // contracts/stakingPool.algo.ts:355 - // this.stakers.value[i] = cmpStaker - frame_dig 0 // i: uint64 - int 64 - * // acc * typeLength - frame_dig 1 // cmpStaker: (address,uint64,uint64,uint64,uint64) - byte 0x7374616b657273 // "stakers" - cover 2 - box_replace - - // contracts/stakingPool.algo.ts:357 - // roundsLeftInBin = this.binRoundStart.value + this.roundsPerDay.value - globals.round - byte 0x62696e526f756e645374617274 // "binRoundStart" - app_global_get - byte 0x726f756e6473506572446179 // "roundsPerDay" - app_global_get - + - global Round - - - frame_bury 5 // roundsLeftInBin: uint64 - - // contracts/stakingPool.algo.ts:358 - // subtractAmount: uint128 = (amountToUnstake as uint128) * (roundsLeftInBin as uint128) - frame_dig -2 // amountToUnstake: uint64 - itob - frame_dig 5 // roundsLeftInBin: uint64 - itob - b* - dup - bitlen - int 128 - <= - - // (amountToUnstake as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits - assert - byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - b& - dup - len - dup - int 16 - - - swap - substring3 - frame_bury 6 // subtractAmount: uint128 - - // contracts/stakingPool.algo.ts:359 - // this.stakeAccumulator.value = this.stakeAccumulator.value - subtractAmount - byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" - dup - app_global_get - frame_dig 6 // subtractAmount: uint128 - b- - dup - bitlen - int 128 - <= - - // this.stakeAccumulator.value - subtractAmount overflowed 128 bits - assert - byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - b& - dup - len - dup - int 16 - - - swap - substring3 - app_global_put - - // contracts/stakingPool.algo.ts:364 - // sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [ - // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, - // staker, - // amountToUnstake, - // amountRewardTokenRemoved, - // stakerRemoved, - // ], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:365 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:366 - // methodArgs: [ - // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, - // staker, - // amountToUnstake, - // amountRewardTokenRemoved, - // stakerRemoved, - // ] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - byte 0x706f6f6c4964 // "poolId" - app_global_get - itob - concat - txna Applications 0 - itob - concat - itxn_field ApplicationArgs - frame_dig -1 // staker: Address - itxn_field ApplicationArgs - frame_dig -2 // amountToUnstake: uint64 - itob - itxn_field ApplicationArgs - frame_dig 2 // amountRewardTokenRemoved: uint64 - itob - itxn_field ApplicationArgs - frame_dig 4 // stakerRemoved: bool - byte 0x00 - int 0 - uncover 2 - setbit - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/stakingPool.algo.ts:374 - // return - retsub - -*if8_end: - -*for_1_continue: - // contracts/stakingPool.algo.ts:287 - // i += 1 - frame_dig 0 // i: uint64 - int 1 - + - frame_bury 0 // i: uint64 - b *for_1 - -*for_1_end: - // account not found - err - retsub - -// claimTokens()void -*abi_route_claimTokens: - // execute claimTokens()void - callsub claimTokens - int 1 - return - -// claimTokens(): void -// -// Claims all the available reward tokens a staker has available, sending their entire balance to the staker from -// pool 1 (either directly, or via validator->pool1 to pay it out) -// Also notifies the validator contract for this pools validator of the staker / balance changes. -claimTokens: - proto 0 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 4 - - // contracts/stakingPool.algo.ts:389 - // staker = this.txn.sender - txn Sender - frame_bury 0 // staker: address - - // contracts/stakingPool.algo.ts:391 - // for (let i = 0; i < this.stakers.value.length; i += 1) - int 0 - frame_bury 1 // i: uint64 - -*for_2: - // contracts/stakingPool.algo.ts:391 - // i < this.stakers.value.length - frame_dig 1 // i: uint64 - int 200 - < - bz *for_2_end - - // *if14_condition - // contracts/stakingPool.algo.ts:392 - // globals.opcodeBudget < 300 - global OpcodeBudget - int 300 - < - bz *if14_end - - // *if14_consequent - // contracts/stakingPool.algo.ts:393 - // increaseOpcodeBudget() - itxn_begin - int appl - itxn_field TypeEnum - int 0 - itxn_field Fee - byte b64 CoEB // #pragma version 10; int 1 - dup - itxn_field ApprovalProgram - itxn_field ClearStateProgram - int DeleteApplication - itxn_field OnCompletion - itxn_submit - -*if14_end: - // contracts/stakingPool.algo.ts:395 - // cmpStaker = clone(this.stakers.value[i]) - frame_dig 1 // i: uint64 - int 64 - * // acc * typeLength - int 64 - byte 0x7374616b657273 // "stakers" - cover 2 - box_extract - frame_bury 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // *if15_condition - // contracts/stakingPool.algo.ts:396 - // cmpStaker.account === staker - frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 0 32 - frame_dig 0 // staker: address - == - bz *if15_end - - // *if15_consequent - // *if16_condition - // contracts/stakingPool.algo.ts:397 - // cmpStaker.rewardTokenBalance === 0 - frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 48 8 - btoi - int 0 - == - bz *if16_end - - // *if16_consequent - // contracts/stakingPool.algo.ts:398 - // return - retsub - -*if16_end: - // contracts/stakingPool.algo.ts:400 - // amountRewardTokenRemoved = 0 - int 0 - frame_bury 3 // amountRewardTokenRemoved: uint64 - - // *if17_condition - // contracts/stakingPool.algo.ts:402 - // this.poolId.value === 1 - byte 0x706f6f6c4964 // "poolId" - app_global_get - int 1 - == - bz *if17_else - - // *if17_consequent - // contracts/stakingPool.algo.ts:403 - // validatorConfig = sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [this.validatorId.value], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:404 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:405 - // methodArgs: [this.validatorId.value] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - frame_bury 4 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - - // contracts/stakingPool.algo.ts:410 - // sendAssetTransfer({ - // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId), - // assetReceiver: staker, - // assetAmount: cmpStaker.rewardTokenBalance, - // }) - itxn_begin - int axfer - itxn_field TypeEnum - - // contracts/stakingPool.algo.ts:411 - // xferAsset: AssetID.fromUint64(validatorConfig.rewardTokenId) - frame_dig 4 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 153 8 - btoi - itxn_field XferAsset - - // contracts/stakingPool.algo.ts:412 - // assetReceiver: staker - frame_dig 0 // staker: address - itxn_field AssetReceiver - - // contracts/stakingPool.algo.ts:413 - // assetAmount: cmpStaker.rewardTokenBalance - frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 48 8 - btoi - itxn_field AssetAmount - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/stakingPool.algo.ts:415 - // amountRewardTokenRemoved = cmpStaker.rewardTokenBalance - frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 48 8 - btoi - frame_bury 3 // amountRewardTokenRemoved: uint64 - - // contracts/stakingPool.algo.ts:416 - // cmpStaker.rewardTokenBalance = 0 - frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) - byte 0x0000000000000000 - replace2 48 - frame_bury 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) - b *if17_end - -*if17_else: - // contracts/stakingPool.algo.ts:421 - // amountRewardTokenRemoved = cmpStaker.rewardTokenBalance - frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 48 8 - btoi - frame_bury 3 // amountRewardTokenRemoved: uint64 - - // contracts/stakingPool.algo.ts:422 - // cmpStaker.rewardTokenBalance = 0 - frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) - byte 0x0000000000000000 - replace2 48 - frame_bury 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) - -*if17_end: - // contracts/stakingPool.algo.ts:426 - // this.stakers.value[i] = cmpStaker - frame_dig 1 // i: uint64 - int 64 - * // acc * typeLength - frame_dig 2 // cmpStaker: (address,uint64,uint64,uint64,uint64) - byte 0x7374616b657273 // "stakers" - cover 2 - box_replace - - // contracts/stakingPool.algo.ts:431 - // sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [ - // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, - // staker, - // 0, // no algo removed - // amountRewardTokenRemoved, - // false, // staker isn't being removed. - // ], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:432 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:433 - // methodArgs: [ - // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, - // staker, - // 0, // no algo removed - // amountRewardTokenRemoved, - // false, // staker isn't being removed. - // ] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - byte 0x706f6f6c4964 // "poolId" - app_global_get - itob - concat - txna Applications 0 - itob - concat - itxn_field ApplicationArgs - frame_dig 0 // staker: address - itxn_field ApplicationArgs - byte 0x0000000000000000 - itxn_field ApplicationArgs - frame_dig 3 // amountRewardTokenRemoved: uint64 - itob - itxn_field ApplicationArgs - int 0 - byte 0x00 - int 0 - uncover 2 - setbit - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/stakingPool.algo.ts:441 - // return - retsub - -*if15_end: - -*for_2_continue: - // contracts/stakingPool.algo.ts:391 - // i += 1 - frame_dig 1 // i: uint64 - int 1 - + - frame_bury 1 // i: uint64 - b *for_2 - -*for_2_end: - // account not found - err - retsub - -// getStakerInfo(address)(address,uint64,uint64,uint64,uint64) -*abi_route_getStakerInfo: - // The ABI return prefix - byte 0x151f7c75 - - // staker: address - txna ApplicationArgs 1 - dup - len - int 32 - == - - // argument 0 (staker) for getStakerInfo must be a address - assert - - // execute getStakerInfo(address)(address,uint64,uint64,uint64,uint64) - callsub getStakerInfo - concat - log - int 1 - return - -// getStakerInfo(staker: Address): StakedInfo -// -// Retrieves the staked information for a given staker. -// -// @param {Address} staker - The address of the staker. -// @returns {StakedInfo} - The staked information for the given staker. -// @throws {Error} - If the staker's account is not found. -getStakerInfo: - proto 1 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - - // contracts/stakingPool.algo.ts:456 - // for (let i = 0; i < this.stakers.value.length; i += 1) - int 0 - frame_bury 0 // i: uint64 - -*for_3: - // contracts/stakingPool.algo.ts:456 - // i < this.stakers.value.length - frame_dig 0 // i: uint64 - int 200 - < - bz *for_3_end - - // *if18_condition - // contracts/stakingPool.algo.ts:457 - // globals.opcodeBudget < 200 - global OpcodeBudget - int 200 - < - bz *if18_end - - // *if18_consequent - // contracts/stakingPool.algo.ts:458 - // increaseOpcodeBudget() - itxn_begin - int appl - itxn_field TypeEnum - int 0 - itxn_field Fee - byte b64 CoEB // #pragma version 10; int 1 - dup - itxn_field ApprovalProgram - itxn_field ClearStateProgram - int DeleteApplication - itxn_field OnCompletion - itxn_submit - -*if18_end: - // *if19_condition - // contracts/stakingPool.algo.ts:460 - // this.stakers.value[i].account === staker - frame_dig 0 // i: uint64 - int 64 - * // acc * typeLength - int 0 - + - int 32 - byte 0x7374616b657273 // "stakers" - cover 2 - box_extract - frame_dig -1 // staker: Address - == - bz *if19_end - - // *if19_consequent - // contracts/stakingPool.algo.ts:461 - // return this.stakers.value[i] - frame_dig 0 // i: uint64 - int 64 - * // acc * typeLength - int 64 - byte 0x7374616b657273 // "stakers" - cover 2 - box_extract - b *getStakerInfo*return - -*if19_end: - -*for_3_continue: - // contracts/stakingPool.algo.ts:456 - // i += 1 - frame_dig 0 // i: uint64 - int 1 - + - frame_bury 0 // i: uint64 - b *for_3 - -*for_3_end: - // account not found - err - -*getStakerInfo*return: - // set the subroutine return value - frame_bury 0 - retsub - -// payTokenReward(address,uint64,uint64)void -*abi_route_payTokenReward: - // amountToSend: uint64 - txna ApplicationArgs 3 - btoi - - // rewardToken: uint64 - txna ApplicationArgs 2 - btoi - - // staker: address - txna ApplicationArgs 1 - dup - len - int 32 - == - - // argument 2 (staker) for payTokenReward must be a address - assert - - // execute payTokenReward(address,uint64,uint64)void - callsub payTokenReward - int 1 - return - -// payTokenReward(staker: Address, rewardToken: uint64, amountToSend: uint64): void -// -// [Internal protocol method] Remove a specified amount of 'community token' rewards for a staker. -// This can ONLY be called by our validator and only if we're pool 1 - with the token. -// Note: this can also be called by validator as part of OWNER wanting to send the reward tokens -// somewhere else (ie if they're sunsetting their validator and need the reward tokens back). -// It's up to the validator to ensure that the balance in rewardTokenHeldBack is honored. -// @param staker - the staker account to send rewards to -// @param rewardToken - id of reward token (to avoid re-entrancy in calling validator back to get id) -// @param amountToSend - amount to send the staker (there is significant trust here(!) - also why only validator can call us -payTokenReward: - proto 3 0 - - // contracts/stakingPool.algo.ts:479 - // assert( - // this.txn.sender === this.creatingValidatorContractAppId.value.address, - // 'this can only be called via the validator contract', - // ) - txn Sender - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - app_params_get AppAddress - pop - == - - // this can only be called via the validator contract - assert - - // contracts/stakingPool.algo.ts:483 - // assert(this.poolId.value === 1, 'must be pool 1 in order to be called to pay out token rewards') - byte 0x706f6f6c4964 // "poolId" - app_global_get - int 1 - == - - // must be pool 1 in order to be called to pay out token rewards - assert - - // contracts/stakingPool.algo.ts:484 - // assert(rewardToken !== 0, 'can only claim token rewards from validator that has them') - frame_dig -2 // rewardToken: uint64 - int 0 - != - - // can only claim token rewards from validator that has them - assert - - // contracts/stakingPool.algo.ts:487 - // sendAssetTransfer({ - // xferAsset: AssetID.fromUint64(rewardToken), - // assetReceiver: staker, - // assetAmount: amountToSend, - // }) - itxn_begin - int axfer - itxn_field TypeEnum - - // contracts/stakingPool.algo.ts:488 - // xferAsset: AssetID.fromUint64(rewardToken) - frame_dig -2 // rewardToken: uint64 - itxn_field XferAsset - - // contracts/stakingPool.algo.ts:489 - // assetReceiver: staker - frame_dig -1 // staker: Address - itxn_field AssetReceiver - - // contracts/stakingPool.algo.ts:490 - // assetAmount: amountToSend - frame_dig -3 // amountToSend: uint64 - itxn_field AssetAmount - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - retsub - -// updateAlgodVer(string)void -*abi_route_updateAlgodVer: - // algodVer: string - txna ApplicationArgs 1 - extract 2 0 - - // execute updateAlgodVer(string)void - callsub updateAlgodVer - int 1 - return - -// updateAlgodVer(algodVer: string): void -// -// Update the (honor system) algod version for the node associated to this pool. The node management daemon -// should compare its current nodes version to the version stored in global state, updating when different. -// The reti node daemon composes its own version string using format: -// {major}.{minor}.{build} {branch} [{commit hash}], -// ie: 3.22.0 rel/stable [6b508975] -// [ ONLY OWNER OR MANAGER CAN CALL ] -// @param {string} algodVer - string representing the algorand node daemon version (reti node daemon composes its own meta version) -updateAlgodVer: - proto 1 0 - - // contracts/stakingPool.algo.ts:504 - // assert(this.isOwnerOrManagerCaller(), 'can only be called by owner or manager of validator') - callsub isOwnerOrManagerCaller - - // can only be called by owner or manager of validator - assert - - // contracts/stakingPool.algo.ts:505 - // this.algodVer.value = algodVer - byte 0x616c676f64566572 // "algodVer" - frame_dig -1 // algodVer: string - app_global_put - retsub - -// epochBalanceUpdate()void -*abi_route_epochBalanceUpdate: - // execute epochBalanceUpdate()void - callsub epochBalanceUpdate - int 1 - return - -// epochBalanceUpdate(): void -// -// Updates the balance of stakers in the pool based on the received 'rewards' (current balance vs known staked balance) -// stakers outstanding balance is adjusted based on their % of stake and time in the current epoch - so that balance -// compounds over time and staker can remove that amount at will. -// The validator is paid their percentage each epoch payout. -// -// Note: ANYONE can call this. -epochBalanceUpdate: - proto 0 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 37 - - // contracts/stakingPool.algo.ts:518 - // validatorConfig = sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [this.validatorId.value], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:519 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:520 - // methodArgs: [this.validatorId.value] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - frame_bury 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - - // contracts/stakingPool.algo.ts:527 - // epochRoundLength = validatorConfig.epochRoundLength as uint64 - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 169 4 - btoi - frame_bury 1 // epochRoundLength: uint64 - - // contracts/stakingPool.algo.ts:528 - // curRound = globals.round - global Round - frame_bury 2 // curRound: uint64 - - // contracts/stakingPool.algo.ts:529 - // thisEpochBegin = curRound - (curRound % epochRoundLength) - frame_dig 2 // curRound: uint64 - frame_dig 2 // curRound: uint64 - frame_dig 1 // epochRoundLength: uint64 - % - - - frame_bury 3 // thisEpochBegin: uint64 - - // *if20_condition - // contracts/stakingPool.algo.ts:532 - // this.lastPayout.exists - txna Applications 0 - byte 0x6c6173745061796f7574 // "lastPayout" - app_global_get_ex - swap - pop - bz *if20_end - - // *if20_consequent - // contracts/stakingPool.algo.ts:533 - // lastPayoutEpoch = this.lastPayout.value - (this.lastPayout.value % epochRoundLength) - byte 0x6c6173745061796f7574 // "lastPayout" - app_global_get - byte 0x6c6173745061796f7574 // "lastPayout" - app_global_get - frame_dig 1 // epochRoundLength: uint64 - % - - - frame_bury 4 // lastPayoutEpoch: uint64 - - // contracts/stakingPool.algo.ts:537 - // assert(lastPayoutEpoch !== thisEpochBegin, "can't call epochBalanceUpdate in same epoch as prior call") - frame_dig 4 // lastPayoutEpoch: uint64 - frame_dig 3 // thisEpochBegin: uint64 - != - - // can't call epochBalanceUpdate in same epoch as prior call - assert - -*if20_end: - // contracts/stakingPool.algo.ts:540 - // this.checkIfBinClosed() - callsub checkIfBinClosed - - // contracts/stakingPool.algo.ts:543 - // this.lastPayout.value = curRound - byte 0x6c6173745061796f7574 // "lastPayout" - frame_dig 2 // curRound: uint64 - app_global_put - - // contracts/stakingPool.algo.ts:544 - // this.epochNumber.value += 1 - byte 0x65706f63684e756d626572 // "epochNumber" - app_global_get - int 1 - + - byte 0x65706f63684e756d626572 // "epochNumber" - swap - app_global_put - - // contracts/stakingPool.algo.ts:549 - // isTokenEligible = validatorConfig.rewardTokenId !== 0 - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 153 8 - btoi - int 0 - != - frame_bury 5 // isTokenEligible: bool - - // contracts/stakingPool.algo.ts:550 - // poolOneAppID = this.app.id - txna Applications 0 - frame_bury 6 // poolOneAppID: uint64 - - // contracts/stakingPool.algo.ts:551 - // poolOneAddress = this.app.address - global CurrentApplicationAddress - frame_bury 7 // poolOneAddress: address - - // *if21_condition - // contracts/stakingPool.algo.ts:556 - // isTokenEligible - frame_dig 5 // isTokenEligible: bool - bz *if21_end - - // *if21_consequent - // *if22_condition - // contracts/stakingPool.algo.ts:557 - // this.poolId.value !== 1 - byte 0x706f6f6c4964 // "poolId" - app_global_get - int 1 - != - bz *if22_end - - // *if22_consequent - // contracts/stakingPool.algo.ts:559 - // poolOneAppID = sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [this.validatorId.value, 1], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "getPoolAppId(uint64,uint64)uint64" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:560 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:561 - // methodArgs: [this.validatorId.value, 1] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - itxn_field ApplicationArgs - byte 0x0000000000000001 - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - btoi - frame_bury 6 // poolOneAppID: uint64 - - // contracts/stakingPool.algo.ts:563 - // poolOneAddress = AppID.fromUint64(poolOneAppID).address - frame_dig 6 // poolOneAppID: uint64 - app_params_get AppAddress - pop - frame_bury 7 // poolOneAddress: address - -*if22_end: - // *if23_condition - // contracts/stakingPool.algo.ts:568 - // this.poolId.value === 1 - byte 0x706f6f6c4964 // "poolId" - app_global_get - int 1 - == - bz *if23_else - - // *if23_consequent - // contracts/stakingPool.algo.ts:569 - // tokenPayoutRatio = sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [this.validatorId.value], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "setTokenPayoutRatio(uint64)(uint64[24],uint64)" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:570 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:571 - // methodArgs: [this.validatorId.value] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - frame_bury 8 // tokenPayoutRatio: PoolTokenPayoutRatio - b *if23_end - -*if23_else: - // contracts/stakingPool.algo.ts:575 - // tokenPayoutRatio = sendMethodCall({ - // applicationID: AppID.fromUint64(poolOneAppID), - // methodArgs: [{ id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "proxiedSetTokenPayoutRatio((uint64,uint64,uint64))(uint64[24],uint64)" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:576 - // applicationID: AppID.fromUint64(poolOneAppID) - frame_dig 6 // poolOneAppID: uint64 - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:577 - // methodArgs: [{ id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - byte 0x706f6f6c4964 // "poolId" - app_global_get - itob - concat - txna Applications 0 - itob - concat - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - frame_bury 8 // tokenPayoutRatio: PoolTokenPayoutRatio - -*if23_end: - -*if21_end: - // contracts/stakingPool.algo.ts:584 - // validatorState = sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [this.validatorId.value], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "getValidatorState(uint64)(uint16,uint64,uint64,uint64)" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:585 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:586 - // methodArgs: [this.validatorId.value] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - frame_bury 9 // validatorState: (uint16,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:588 - // rewardTokenHeldBack = validatorState.rewardTokenHeldBack - frame_dig 9 // validatorState: (uint16,uint64,uint64,uint64) - extract 18 8 - btoi - frame_bury 10 // rewardTokenHeldBack: uint64 - - // contracts/stakingPool.algo.ts:594 - // algoRewardAvail = this.app.address.balance - this.totalAlgoStaked.value - this.app.address.minBalance - global CurrentApplicationAddress - acct_params_get AcctBalance - pop - byte 0x7374616b6564 // "staked" - app_global_get - - - global CurrentApplicationAddress - acct_params_get AcctMinBalance - pop - - - frame_bury 11 // algoRewardAvail: uint64 - - // contracts/stakingPool.algo.ts:595 - // isPoolSaturated = false - int 0 - frame_bury 12 // isPoolSaturated: bool - - // contracts/stakingPool.algo.ts:596 - // algoSaturationAmt = this.algoSaturationLevel() - callsub algoSaturationLevel - frame_bury 13 // algoSaturationAmt: uint64 - - // *if24_condition - // contracts/stakingPool.algo.ts:604 - // validatorState.totalAlgoStaked > algoSaturationAmt - frame_dig 9 // validatorState: (uint16,uint64,uint64,uint64) - extract 10 8 - btoi - frame_dig 13 // algoSaturationAmt: uint64 - > - bz *if24_end - - // *if24_consequent - // contracts/stakingPool.algo.ts:605 - // isPoolSaturated = true - int 1 - frame_bury 12 // isPoolSaturated: bool - -*if24_end: - // contracts/stakingPool.algo.ts:611 - // tokenRewardAvail = 0 - int 0 - frame_bury 14 // tokenRewardAvail: uint64 - - // contracts/stakingPool.algo.ts:612 - // tokenRewardPaidOut = 0 - int 0 - frame_bury 15 // tokenRewardPaidOut: uint64 - - // contracts/stakingPool.algo.ts:613 - // validatorCommissionPaidOut = 0 - int 0 - frame_bury 16 // validatorCommissionPaidOut: uint64 - - // contracts/stakingPool.algo.ts:614 - // excessToFeeSink = 0 - int 0 - frame_bury 17 // excessToFeeSink: uint64 - - // *if25_condition - // contracts/stakingPool.algo.ts:615 - // isTokenEligible - frame_dig 5 // isTokenEligible: bool - bz *if25_end - - // *if25_consequent - // contracts/stakingPool.algo.ts:616 - // tokenRewardBal = - // poolOneAddress.assetBalance(AssetID.fromUint64(validatorConfig.rewardTokenId)) - rewardTokenHeldBack - frame_dig 7 // poolOneAddress: address - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 153 8 - btoi - asset_holding_get AssetBalance - pop - frame_dig 10 // rewardTokenHeldBack: uint64 - - - frame_bury 18 // tokenRewardBal: uint64 - - // *if26_condition - // contracts/stakingPool.algo.ts:621 - // tokenRewardBal >= validatorConfig.rewardPerPayout - frame_dig 18 // tokenRewardBal: uint64 - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 161 8 - btoi - >= - bz *if26_end - - // *if26_consequent - // contracts/stakingPool.algo.ts:627 - // ourPoolPctOfWhole = tokenPayoutRatio.poolPctOfWhole[this.poolId.value - 1] - frame_dig 8 // tokenPayoutRatio: PoolTokenPayoutRatio - int 0 - byte 0x706f6f6c4964 // "poolId" - app_global_get - int 1 - - - int 8 - * // acc * typeLength - + - int 8 - extract3 - btoi - frame_bury 19 // ourPoolPctOfWhole: uint64 - - // contracts/stakingPool.algo.ts:630 - // tokenRewardAvail = wideRatio([validatorConfig.rewardPerPayout, ourPoolPctOfWhole], [1_000_000]) - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 161 8 - btoi - frame_dig 19 // ourPoolPctOfWhole: uint64 - mulw - int 0 - int 1_000_000 - divmodw - pop - pop - swap - ! - - // wideRatio failed - assert - frame_bury 14 // tokenRewardAvail: uint64 - -*if26_end: - -*if25_end: - // *if27_condition - // contracts/stakingPool.algo.ts:633 - // tokenRewardAvail === 0 - frame_dig 14 // tokenRewardAvail: uint64 - int 0 - == - bz *if27_end - - // *if27_consequent - // *if28_condition - // contracts/stakingPool.algo.ts:638 - // algoRewardAvail < 1_000_000 - frame_dig 11 // algoRewardAvail: uint64 - int 1_000_000 - < - bz *if28_end - - // *if28_consequent - // contracts/stakingPool.algo.ts:639 - // log('!token&&!noalgo to pay') - byte 0x21746f6b656e2626216e6f616c676f20746f20706179 // "!token&&!noalgo to pay" - log - - // contracts/stakingPool.algo.ts:640 - // return - retsub - -*if28_end: - -*if27_end: - // *if29_condition - // contracts/stakingPool.algo.ts:644 - // isPoolSaturated - frame_dig 12 // isPoolSaturated: bool - bz *if29_elseif1_condition - - // *if29_consequent - // contracts/stakingPool.algo.ts:647 - // diminishedReward = wideRatio([algoRewardAvail, algoSaturationAmt], [validatorState.totalAlgoStaked]) - frame_dig 11 // algoRewardAvail: uint64 - frame_dig 13 // algoSaturationAmt: uint64 - mulw - int 0 - frame_dig 9 // validatorState: (uint16,uint64,uint64,uint64) - extract 10 8 - btoi - divmodw - pop - pop - swap - ! - - // wideRatio failed - assert - frame_bury 20 // diminishedReward: uint64 - - // contracts/stakingPool.algo.ts:649 - // excessToFeeSink = algoRewardAvail - diminishedReward - frame_dig 11 // algoRewardAvail: uint64 - frame_dig 20 // diminishedReward: uint64 - - - frame_bury 17 // excessToFeeSink: uint64 - - // contracts/stakingPool.algo.ts:650 - // sendPayment({ - // amount: excessToFeeSink, - // receiver: this.getFeeSink(), - // note: 'pool saturated, excess to fee sink', - // }) - itxn_begin - int pay - itxn_field TypeEnum - - // contracts/stakingPool.algo.ts:651 - // amount: excessToFeeSink - frame_dig 17 // excessToFeeSink: uint64 - itxn_field Amount - - // contracts/stakingPool.algo.ts:652 - // receiver: this.getFeeSink() - callsub getFeeSink - itxn_field Receiver - - // contracts/stakingPool.algo.ts:653 - // note: 'pool saturated, excess to fee sink' - byte 0x706f6f6c207361747572617465642c2065786365737320746f206665652073696e6b // "pool saturated, excess to fee sink" - itxn_field Note - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/stakingPool.algo.ts:656 - // algoRewardAvail = diminishedReward - frame_dig 20 // diminishedReward: uint64 - frame_bury 11 // algoRewardAvail: uint64 - b *if29_end - -*if29_elseif1_condition: - // contracts/stakingPool.algo.ts:657 - // validatorConfig.percentToValidator !== 0 - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 173 4 - btoi - int 0 - != - bz *if29_end - - // *if29_elseif1_consequent - // contracts/stakingPool.algo.ts:660 - // validatorCommissionPaidOut = wideRatio( - // [algoRewardAvail, validatorConfig.percentToValidator as uint64], - // [1_000_000], - // ) - frame_dig 11 // algoRewardAvail: uint64 - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 173 4 - btoi - mulw - int 0 - int 1_000_000 - divmodw - pop - pop - swap - ! - - // wideRatio failed - assert - frame_bury 16 // validatorCommissionPaidOut: uint64 - - // contracts/stakingPool.algo.ts:666 - // algoRewardAvail -= validatorCommissionPaidOut - frame_dig 11 // algoRewardAvail: uint64 - frame_dig 16 // validatorCommissionPaidOut: uint64 - - - frame_bury 11 // algoRewardAvail: uint64 - - // *if30_condition - // contracts/stakingPool.algo.ts:673 - // validatorCommissionPaidOut > 0 - frame_dig 16 // validatorCommissionPaidOut: uint64 - int 0 - > - bz *if30_end - - // *if30_consequent - // contracts/stakingPool.algo.ts:676 - // managerTopOff = 0 - int 0 - frame_bury 21 // managerTopOff: uint64 - - // *if31_condition - // contracts/stakingPool.algo.ts:678 - // validatorConfig.manager !== validatorConfig.validatorCommissionAddress && - // validatorConfig.manager.balance - validatorConfig.manager.minBalance < 2_100_000 - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 40 32 - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 177 32 - != - dup - bz *skip_and3 - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 40 32 - acct_params_get AcctBalance - pop - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 40 32 - acct_params_get AcctMinBalance - pop - - - int 2_100_000 - < - && - -*skip_and3: - bz *if31_end - - // *if31_consequent - // contracts/stakingPool.algo.ts:681 - // managerTopOff = validatorCommissionPaidOut < 2_100_000 ? validatorCommissionPaidOut : 2_100_000 - frame_dig 16 // validatorCommissionPaidOut: uint64 - int 2_100_000 - < - bz *ternary1_false - frame_dig 16 // validatorCommissionPaidOut: uint64 - b *ternary1_end - -*ternary1_false: - int 2_100_000 - -*ternary1_end: - frame_bury 21 // managerTopOff: uint64 - - // contracts/stakingPool.algo.ts:682 - // sendPayment({ - // amount: managerTopOff, - // receiver: validatorConfig.manager, - // note: 'validator reward to manager for funding epoch updates', - // }) - itxn_begin - int pay - itxn_field TypeEnum - - // contracts/stakingPool.algo.ts:683 - // amount: managerTopOff - frame_dig 21 // managerTopOff: uint64 - itxn_field Amount - - // contracts/stakingPool.algo.ts:684 - // receiver: validatorConfig.manager - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 40 32 - itxn_field Receiver - - // contracts/stakingPool.algo.ts:685 - // note: 'validator reward to manager for funding epoch updates' - byte 0x76616c696461746f722072657761726420746f206d616e6167657220666f722066756e64696e672065706f63682075706461746573 // "validator reward to manager for funding epoch updates" - itxn_field Note - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - -*if31_end: - // *if32_condition - // contracts/stakingPool.algo.ts:688 - // validatorCommissionPaidOut - managerTopOff > 0 - frame_dig 16 // validatorCommissionPaidOut: uint64 - frame_dig 21 // managerTopOff: uint64 - - - int 0 - > - bz *if32_end - - // *if32_consequent - // contracts/stakingPool.algo.ts:689 - // sendPayment({ - // amount: validatorCommissionPaidOut - managerTopOff, - // receiver: validatorConfig.validatorCommissionAddress, - // note: 'validator reward', - // }) - itxn_begin - int pay - itxn_field TypeEnum - - // contracts/stakingPool.algo.ts:690 - // amount: validatorCommissionPaidOut - managerTopOff - frame_dig 16 // validatorCommissionPaidOut: uint64 - frame_dig 21 // managerTopOff: uint64 - - - itxn_field Amount - - // contracts/stakingPool.algo.ts:691 - // receiver: validatorConfig.validatorCommissionAddress - frame_dig 0 // validatorConfig: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 177 32 - itxn_field Receiver - - // contracts/stakingPool.algo.ts:692 - // note: 'validator reward' - byte 0x76616c696461746f7220726577617264 // "validator reward" - itxn_field Note - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - -*if32_end: - -*if30_end: - -*if29_end: - // contracts/stakingPool.algo.ts:704 - // increasedStake = 0 - int 0 - frame_bury 22 // increasedStake: uint64 - - // *if33_condition - // contracts/stakingPool.algo.ts:728 - // algoRewardAvail !== 0 || tokenRewardAvail !== 0 - frame_dig 11 // algoRewardAvail: uint64 - int 0 - != - dup - bnz *skip_or1 - frame_dig 14 // tokenRewardAvail: uint64 - int 0 - != - || - -*skip_or1: - bz *if33_end - - // *if33_consequent - // contracts/stakingPool.algo.ts:729 - // partialStakersTotalStake: uint64 = 0 - int 0 - frame_bury 23 // partialStakersTotalStake: uint64 - - // contracts/stakingPool.algo.ts:730 - // origAlgoReward = algoRewardAvail - frame_dig 11 // algoRewardAvail: uint64 - frame_bury 24 // origAlgoReward: uint64 - - // contracts/stakingPool.algo.ts:731 - // for (let i = 0; i < this.stakers.value.length; i += 1) - int 0 - frame_bury 25 // i: uint64 - -*for_4: - // contracts/stakingPool.algo.ts:731 - // i < this.stakers.value.length - frame_dig 25 // i: uint64 - int 200 - < - bz *for_4_end - - // *if34_condition - // contracts/stakingPool.algo.ts:732 - // globals.opcodeBudget < 400 - global OpcodeBudget - int 400 - < - bz *if34_end - - // *if34_consequent - // contracts/stakingPool.algo.ts:733 - // increaseOpcodeBudget() - itxn_begin - int appl - itxn_field TypeEnum - int 0 - itxn_field Fee - byte b64 CoEB // #pragma version 10; int 1 - dup - itxn_field ApprovalProgram - itxn_field ClearStateProgram - int DeleteApplication - itxn_field OnCompletion - itxn_submit - -*if34_end: - // contracts/stakingPool.algo.ts:735 - // cmpStaker = clone(this.stakers.value[i]) - frame_dig 25 // i: uint64 - int 64 - * // acc * typeLength - int 64 - byte 0x7374616b657273 // "stakers" - cover 2 - box_extract - frame_bury 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // *if35_condition - // contracts/stakingPool.algo.ts:736 - // cmpStaker.account !== globals.zeroAddress - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 0 32 - global ZeroAddress - != - bz *if35_end - - // *if35_consequent - // *if36_condition - // contracts/stakingPool.algo.ts:737 - // cmpStaker.entryRound >= thisEpochBegin - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 56 8 - btoi - frame_dig 3 // thisEpochBegin: uint64 - >= - bz *if36_else - - // *if36_consequent - // contracts/stakingPool.algo.ts:740 - // partialStakersTotalStake += cmpStaker.balance - frame_dig 23 // partialStakersTotalStake: uint64 - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - + - frame_bury 23 // partialStakersTotalStake: uint64 - b *if36_end - -*if36_else: - // contracts/stakingPool.algo.ts:744 - // timeInPool = thisEpochBegin - cmpStaker.entryRound - frame_dig 3 // thisEpochBegin: uint64 - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 56 8 - btoi - - - frame_bury 27 // timeInPool: uint64 - - // *if37_condition - // contracts/stakingPool.algo.ts:748 - // timeInPool < epochRoundLength - frame_dig 27 // timeInPool: uint64 - frame_dig 1 // epochRoundLength: uint64 - < - bz *if37_end - - // *if37_consequent - // contracts/stakingPool.algo.ts:749 - // partialStakersTotalStake += cmpStaker.balance - frame_dig 23 // partialStakersTotalStake: uint64 - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - + - frame_bury 23 // partialStakersTotalStake: uint64 - - // contracts/stakingPool.algo.ts:750 - // timePercentage = (timeInPool * 1000) / epochRoundLength - frame_dig 27 // timeInPool: uint64 - int 1000 - * - frame_dig 1 // epochRoundLength: uint64 - / - frame_bury 28 // timePercentage: uint64 - - // *if38_condition - // contracts/stakingPool.algo.ts:752 - // tokenRewardAvail > 0 - frame_dig 14 // tokenRewardAvail: uint64 - int 0 - > - bz *if38_end - - // *if38_consequent - // contracts/stakingPool.algo.ts:754 - // stakerTokenReward = wideRatio( - // [cmpStaker.balance, tokenRewardAvail, timePercentage], - // [this.totalAlgoStaked.value, 1000], - // ) - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - frame_dig 14 // tokenRewardAvail: uint64 - mulw - frame_dig 28 // timePercentage: uint64 - uncover 2 - dig 1 - * - cover 2 - mulw - cover 2 - + - swap - byte 0x7374616b6564 // "staked" - app_global_get - int 1000 - mulw - divmodw - pop - pop - swap - ! - - // wideRatio failed - assert - frame_bury 29 // stakerTokenReward: uint64 - - // contracts/stakingPool.algo.ts:761 - // tokenRewardAvail -= stakerTokenReward - frame_dig 14 // tokenRewardAvail: uint64 - frame_dig 29 // stakerTokenReward: uint64 - - - frame_bury 14 // tokenRewardAvail: uint64 - - // contracts/stakingPool.algo.ts:762 - // cmpStaker.rewardTokenBalance += stakerTokenReward - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - int 48 // headOffset - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 48 8 - btoi - frame_dig 29 // stakerTokenReward: uint64 - + - itob - replace3 - frame_bury 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:763 - // tokenRewardPaidOut += stakerTokenReward - frame_dig 15 // tokenRewardPaidOut: uint64 - frame_dig 29 // stakerTokenReward: uint64 - + - frame_bury 15 // tokenRewardPaidOut: uint64 - -*if38_end: - // contracts/stakingPool.algo.ts:766 - // stakerReward = wideRatio( - // [cmpStaker.balance, origAlgoReward, timePercentage], - // [this.totalAlgoStaked.value, 1000], - // ) - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - frame_dig 24 // origAlgoReward: uint64 - mulw - frame_dig 28 // timePercentage: uint64 - uncover 2 - dig 1 - * - cover 2 - mulw - cover 2 - + - swap - byte 0x7374616b6564 // "staked" - app_global_get - int 1000 - mulw - divmodw - pop - pop - swap - ! - - // wideRatio failed - assert - frame_bury 30 // stakerReward: uint64 - - // contracts/stakingPool.algo.ts:772 - // algoRewardAvail -= stakerReward - frame_dig 11 // algoRewardAvail: uint64 - frame_dig 30 // stakerReward: uint64 - - - frame_bury 11 // algoRewardAvail: uint64 - - // contracts/stakingPool.algo.ts:775 - // cmpStaker.balance += stakerReward - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - int 32 // headOffset - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - frame_dig 30 // stakerReward: uint64 - + - itob - replace3 - frame_bury 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:776 - // cmpStaker.totalRewarded += stakerReward - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - int 40 // headOffset - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 40 8 - btoi - frame_dig 30 // stakerReward: uint64 - + - itob - replace3 - frame_bury 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:777 - // increasedStake += stakerReward - frame_dig 22 // increasedStake: uint64 - frame_dig 30 // stakerReward: uint64 - + - frame_bury 22 // increasedStake: uint64 - - // contracts/stakingPool.algo.ts:779 - // this.stakers.value[i] = cmpStaker - frame_dig 25 // i: uint64 - int 64 - * // acc * typeLength - frame_dig 26 // cmpStaker: (address,uint64,uint64,uint64,uint64) - byte 0x7374616b657273 // "stakers" - cover 2 - box_replace - -*if37_end: - -*if36_end: - -*if35_end: - -*for_4_continue: - // contracts/stakingPool.algo.ts:731 - // i += 1 - frame_dig 25 // i: uint64 - int 1 - + - frame_bury 25 // i: uint64 - b *for_4 - -*for_4_end: - // contracts/stakingPool.algo.ts:787 - // newPoolTotalStake = this.totalAlgoStaked.value - partialStakersTotalStake - byte 0x7374616b6564 // "staked" - app_global_get - frame_dig 23 // partialStakersTotalStake: uint64 - - - frame_bury 31 // newPoolTotalStake: uint64 - - // *if39_condition - // contracts/stakingPool.algo.ts:791 - // newPoolTotalStake > 0 - frame_dig 31 // newPoolTotalStake: uint64 - int 0 - > - bz *if39_end - - // *if39_consequent - // contracts/stakingPool.algo.ts:793 - // for (let i = 0; i < this.stakers.value.length; i += 1) - int 0 - frame_bury 32 // i: uint64 - -*for_5: - // contracts/stakingPool.algo.ts:793 - // i < this.stakers.value.length - frame_dig 32 // i: uint64 - int 200 - < - bz *for_5_end - - // *if40_condition - // contracts/stakingPool.algo.ts:794 - // globals.opcodeBudget < 200 - global OpcodeBudget - int 200 - < - bz *if40_end - - // *if40_consequent - // contracts/stakingPool.algo.ts:795 - // increaseOpcodeBudget() - itxn_begin - int appl - itxn_field TypeEnum - int 0 - itxn_field Fee - byte b64 CoEB // #pragma version 10; int 1 - dup - itxn_field ApprovalProgram - itxn_field ClearStateProgram - int DeleteApplication - itxn_field OnCompletion - itxn_submit - -*if40_end: - // contracts/stakingPool.algo.ts:797 - // cmpStaker = clone(this.stakers.value[i]) - frame_dig 32 // i: uint64 - int 64 - * // acc * typeLength - int 64 - byte 0x7374616b657273 // "stakers" - cover 2 - box_extract - frame_bury 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // *if41_condition - // contracts/stakingPool.algo.ts:798 - // cmpStaker.account !== globals.zeroAddress && cmpStaker.entryRound < thisEpochBegin - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 0 32 - global ZeroAddress - != - dup - bz *skip_and4 - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 56 8 - btoi - frame_dig 3 // thisEpochBegin: uint64 - < - && - -*skip_and4: - bz *if41_end - - // *if41_consequent - // contracts/stakingPool.algo.ts:799 - // timeInPool = thisEpochBegin - cmpStaker.entryRound - frame_dig 3 // thisEpochBegin: uint64 - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 56 8 - btoi - - - frame_bury 34 // timeInPool: uint64 - - // *if42_condition - // contracts/stakingPool.algo.ts:801 - // timeInPool >= epochRoundLength - frame_dig 34 // timeInPool: uint64 - frame_dig 1 // epochRoundLength: uint64 - >= - bz *if42_end - - // *if42_consequent - // *if43_condition - // contracts/stakingPool.algo.ts:806 - // tokenRewardAvail > 0 - frame_dig 14 // tokenRewardAvail: uint64 - int 0 - > - bz *if43_end - - // *if43_consequent - // contracts/stakingPool.algo.ts:807 - // stakerTokenReward = wideRatio( - // [cmpStaker.balance, tokenRewardAvail], - // [newPoolTotalStake], - // ) - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - frame_dig 14 // tokenRewardAvail: uint64 - mulw - int 0 - frame_dig 31 // newPoolTotalStake: uint64 - divmodw - pop - pop - swap - ! - - // wideRatio failed - assert - frame_bury 35 // stakerTokenReward: uint64 - - // contracts/stakingPool.algo.ts:813 - // cmpStaker.rewardTokenBalance += stakerTokenReward - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - int 48 // headOffset - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 48 8 - btoi - frame_dig 35 // stakerTokenReward: uint64 - + - itob - replace3 - frame_bury 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:814 - // tokenRewardPaidOut += stakerTokenReward - frame_dig 15 // tokenRewardPaidOut: uint64 - frame_dig 35 // stakerTokenReward: uint64 - + - frame_bury 15 // tokenRewardPaidOut: uint64 - -*if43_end: - // *if44_condition - // contracts/stakingPool.algo.ts:816 - // algoRewardAvail > 0 - frame_dig 11 // algoRewardAvail: uint64 - int 0 - > - bz *if44_end - - // *if44_consequent - // contracts/stakingPool.algo.ts:817 - // stakerReward = wideRatio( - // [cmpStaker.balance, algoRewardAvail], - // [newPoolTotalStake], - // ) - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - frame_dig 11 // algoRewardAvail: uint64 - mulw - int 0 - frame_dig 31 // newPoolTotalStake: uint64 - divmodw - pop - pop - swap - ! - - // wideRatio failed - assert - frame_bury 36 // stakerReward: uint64 - - // contracts/stakingPool.algo.ts:823 - // cmpStaker.balance += stakerReward - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - int 32 // headOffset - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 32 8 - btoi - frame_dig 36 // stakerReward: uint64 - + - itob - replace3 - frame_bury 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:824 - // cmpStaker.totalRewarded += stakerReward - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - int 40 // headOffset - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - extract 40 8 - btoi - frame_dig 36 // stakerReward: uint64 - + - itob - replace3 - frame_bury 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - - // contracts/stakingPool.algo.ts:825 - // increasedStake += stakerReward - frame_dig 22 // increasedStake: uint64 - frame_dig 36 // stakerReward: uint64 - + - frame_bury 22 // increasedStake: uint64 - -*if44_end: - // contracts/stakingPool.algo.ts:829 - // this.stakers.value[i] = cmpStaker - frame_dig 32 // i: uint64 - int 64 - * // acc * typeLength - frame_dig 33 // cmpStaker: (address,uint64,uint64,uint64,uint64) - byte 0x7374616b657273 // "stakers" - cover 2 - box_replace - -*if42_end: - -*if41_end: - -*for_5_continue: - // contracts/stakingPool.algo.ts:793 - // i += 1 - frame_dig 32 // i: uint64 - int 1 - + - frame_bury 32 // i: uint64 - b *for_5 - -*for_5_end: - -*if39_end: - -*if33_end: - // contracts/stakingPool.algo.ts:839 - // roundsLeftInBin = this.binRoundStart.value + this.roundsPerDay.value - globals.round - byte 0x62696e526f756e645374617274 // "binRoundStart" - app_global_get - byte 0x726f756e6473506572446179 // "roundsPerDay" - app_global_get - + - global Round - - - frame_bury 37 // roundsLeftInBin: uint64 - - // contracts/stakingPool.algo.ts:840 - // this.totalAlgoStaked.value += increasedStake - byte 0x7374616b6564 // "staked" - app_global_get - frame_dig 22 // increasedStake: uint64 - + - byte 0x7374616b6564 // "staked" - swap - app_global_put - - // contracts/stakingPool.algo.ts:841 - // this.stakeAccumulator.value = - // this.stakeAccumulator.value + (increasedStake as uint128) * (roundsLeftInBin as uint128) - byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" - dup - app_global_get - frame_dig 22 // increasedStake: uint64 - itob - frame_dig 37 // roundsLeftInBin: uint64 - itob - b* - b+ - dup - bitlen - int 128 - <= - - // this.stakeAccumulator.value + (increasedStake as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits - assert - byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - b& - dup - len - dup - int 16 - - - swap - substring3 - app_global_put - - // contracts/stakingPool.algo.ts:843 - // this.rewardAccumulator.value = this.rewardAccumulator.value + increasedStake - byte 0x726577617264416363756d756c61746f72 // "rewardAccumulator" - dup - app_global_get - frame_dig 22 // increasedStake: uint64 - + - app_global_put - - // contracts/stakingPool.algo.ts:849 - // sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [ - // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, - // increasedStake, - // tokenRewardPaidOut, - // validatorCommissionPaidOut, - // excessToFeeSink, - // ], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "stakeUpdatedViaRewards((uint64,uint64,uint64),uint64,uint64,uint64,uint64)void" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:850 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:851 - // methodArgs: [ - // { id: this.validatorId.value, poolId: this.poolId.value, poolAppId: this.app.id }, - // increasedStake, - // tokenRewardPaidOut, - // validatorCommissionPaidOut, - // excessToFeeSink, - // ] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - byte 0x706f6f6c4964 // "poolId" - app_global_get - itob - concat - txna Applications 0 - itob - concat - itxn_field ApplicationArgs - frame_dig 22 // increasedStake: uint64 - itob - itxn_field ApplicationArgs - frame_dig 15 // tokenRewardPaidOut: uint64 - itob - itxn_field ApplicationArgs - frame_dig 16 // validatorCommissionPaidOut: uint64 - itob - itxn_field ApplicationArgs - frame_dig 17 // excessToFeeSink: uint64 - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - retsub - -// goOnline(pay,byte[],byte[],byte[],uint64,uint64,uint64)void -*abi_route_goOnline: - // voteKeyDilution: uint64 - txna ApplicationArgs 6 - btoi - - // voteLast: uint64 - txna ApplicationArgs 5 - btoi - - // voteFirst: uint64 - txna ApplicationArgs 4 - btoi - - // stateProofPK: byte[] - txna ApplicationArgs 3 - extract 2 0 - - // selectionPK: byte[] - txna ApplicationArgs 2 - extract 2 0 - - // votePK: byte[] - txna ApplicationArgs 1 - extract 2 0 - - // feePayment: pay - txn GroupIndex - int 1 - - - dup - gtxns TypeEnum - int pay - == - - // argument 6 (feePayment) for goOnline must be a pay transaction - assert - - // execute goOnline(pay,byte[],byte[],byte[],uint64,uint64,uint64)void - callsub goOnline - int 1 - return - -// goOnline(feePayment: PayTxn, votePK: bytes, selectionPK: bytes, stateProofPK: bytes, voteFirst: uint64, voteLast: uint64, voteKeyDilution: uint64): void -// -// Registers a staking pool key online against a participation key. -// [ ONLY OWNER OR MANAGER CAN CALL ] -// -// @param {PayTxn} feePayment - payment to cover extra fee of going online if offline - or 0 if not renewal -// @param {bytes} votePK - The vote public key. -// @param {bytes} selectionPK - The selection public key. -// @param {bytes} stateProofPK - The state proof public key. -// @param {uint64} voteFirst - The first vote index. -// @param {uint64} voteLast - The last vote index. -// @param {uint64} voteKeyDilution - The vote key dilution value. -// @throws {Error} Will throw an error if the caller is not the owner or a manager. -goOnline: - proto 7 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - - // contracts/stakingPool.algo.ts:883 - // assert(this.isOwnerOrManagerCaller(), 'can only be called by owner or manager of validator') - callsub isOwnerOrManagerCaller - - // can only be called by owner or manager of validator - assert - - // contracts/stakingPool.algo.ts:884 - // extraFee = this.getGoOnlineFee() - callsub getGoOnlineFee - frame_bury 0 // extraFee: uint64 - - // contracts/stakingPool.algo.ts:885 - // verifyPayTxn(feePayment, { receiver: this.app.address, amount: extraFee }) - // verify receiver - frame_dig -1 // feePayment: PayTxn - gtxns Receiver - global CurrentApplicationAddress - == - - // transaction verification failed: {"txn":"feePayment","field":"receiver","expected":"this.app.address"} - assert - - // verify amount - frame_dig -1 // feePayment: PayTxn - gtxns Amount - frame_dig 0 // extraFee: uint64 - == - - // transaction verification failed: {"txn":"feePayment","field":"amount","expected":"extraFee"} - assert - - // contracts/stakingPool.algo.ts:886 - // sendOnlineKeyRegistration({ - // votePK: votePK, - // selectionPK: selectionPK, - // stateProofPK: stateProofPK, - // voteFirst: voteFirst, - // voteLast: voteLast, - // voteKeyDilution: voteKeyDilution, - // fee: this.getGoOnlineFee(), - // }) - itxn_begin - int keyreg - itxn_field TypeEnum - - // contracts/stakingPool.algo.ts:887 - // votePK: votePK - frame_dig -2 // votePK: bytes - itxn_field VotePK - - // contracts/stakingPool.algo.ts:888 - // selectionPK: selectionPK - frame_dig -3 // selectionPK: bytes - itxn_field SelectionPK - - // contracts/stakingPool.algo.ts:889 - // stateProofPK: stateProofPK - frame_dig -4 // stateProofPK: bytes - itxn_field StateProofPK - - // contracts/stakingPool.algo.ts:890 - // voteFirst: voteFirst - frame_dig -5 // voteFirst: uint64 - itxn_field VoteFirst - - // contracts/stakingPool.algo.ts:891 - // voteLast: voteLast - frame_dig -6 // voteLast: uint64 - itxn_field VoteLast - - // contracts/stakingPool.algo.ts:892 - // voteKeyDilution: voteKeyDilution - frame_dig -7 // voteKeyDilution: uint64 - itxn_field VoteKeyDilution - - // contracts/stakingPool.algo.ts:893 - // fee: this.getGoOnlineFee() - callsub getGoOnlineFee - itxn_field Fee - - // Submit inner transaction - itxn_submit - retsub - -// goOffline()void -*abi_route_goOffline: - // execute goOffline()void - callsub goOffline - int 1 - return - -// goOffline(): void -// -// Marks a staking pool key OFFLINE. -// [ ONLY OWNER OR MANAGER CAN CALL ] -goOffline: - proto 0 0 - - // *if45_condition - // contracts/stakingPool.algo.ts:905 - // this.txn.sender !== this.creatingValidatorContractAppId.value.address - txn Sender - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - app_params_get AppAddress - pop - != - bz *if45_end - - // *if45_consequent - // contracts/stakingPool.algo.ts:906 - // assert(this.isOwnerOrManagerCaller(), 'can only be called by owner or manager of validator') - callsub isOwnerOrManagerCaller - - // can only be called by owner or manager of validator - assert - -*if45_end: - // contracts/stakingPool.algo.ts:909 - // sendOfflineKeyRegistration({}) - itxn_begin - int keyreg - itxn_field TypeEnum - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - retsub - -// linkToNFD(uint64,string)void -*abi_route_linkToNFD: - // nfdName: string - txna ApplicationArgs 2 - extract 2 0 - - // nfdAppId: uint64 - txna ApplicationArgs 1 - btoi - - // execute linkToNFD(uint64,string)void - callsub linkToNFD - int 1 - return - -// linkToNFD(nfdAppId: uint64, nfdName: string): void -linkToNFD: - proto 2 0 - - // contracts/stakingPool.algo.ts:916 - // assert(this.isOwnerOrManagerCaller(), 'can only be called by owner or manager of validator') - callsub isOwnerOrManagerCaller - - // can only be called by owner or manager of validator - assert - - // contracts/stakingPool.algo.ts:918 - // sendAppCall({ - // applicationID: AppID.fromUint64(this.nfdRegistryAppId), - // applicationArgs: ['verify_nfd_addr', nfdName, itob(nfdAppId), rawBytes(this.app.address)], - // applications: [AppID.fromUint64(nfdAppId)], - // }) - itxn_begin - int appl - itxn_field TypeEnum - - // contracts/stakingPool.algo.ts:919 - // applicationID: AppID.fromUint64(this.nfdRegistryAppId) - pushint TMPL_nfdRegistryAppId - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:920 - // applicationArgs: ['verify_nfd_addr', nfdName, itob(nfdAppId), rawBytes(this.app.address)] - byte 0x7665726966795f6e66645f61646472 // "verify_nfd_addr" - itxn_field ApplicationArgs - frame_dig -2 // nfdName: string - itxn_field ApplicationArgs - frame_dig -1 // nfdAppId: uint64 - itob - itxn_field ApplicationArgs - global CurrentApplicationAddress - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:921 - // applications: [AppID.fromUint64(nfdAppId)] - frame_dig -1 // nfdAppId: uint64 - itxn_field Applications - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - retsub - -// proxiedSetTokenPayoutRatio((uint64,uint64,uint64))(uint64[24],uint64) -*abi_route_proxiedSetTokenPayoutRatio: - // The ABI return prefix - byte 0x151f7c75 - - // poolKey: (uint64,uint64,uint64) - txna ApplicationArgs 1 - dup - len - int 24 - == - - // argument 0 (poolKey) for proxiedSetTokenPayoutRatio must be a (uint64,uint64,uint64) - assert - - // execute proxiedSetTokenPayoutRatio((uint64,uint64,uint64))(uint64[24],uint64) - callsub proxiedSetTokenPayoutRatio - concat - log - int 1 - return - -// proxiedSetTokenPayoutRatio(poolKey: ValidatorPoolKey): PoolTokenPayoutRatio -// -// proxiedSetTokenPayoutRatio is meant to be called by pools != 1 - calling US, pool #1 -// We need to verify that we are in fact being called by another of OUR pools (not us) -// and then we'll call the validator on their behalf to update the token payouts -// @param poolKey - ValidatorPoolKey tuple -proxiedSetTokenPayoutRatio: - proto 1 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - - // contracts/stakingPool.algo.ts:932 - // assert(this.validatorId.value === poolKey.id, 'caller must be part of same validator set!') - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - == - - // caller must be part of same validator set! - assert - - // contracts/stakingPool.algo.ts:933 - // assert(this.poolId.value === 1, 'callee must be pool 1') - byte 0x706f6f6c4964 // "poolId" - app_global_get - int 1 - == - - // callee must be pool 1 - assert - - // contracts/stakingPool.algo.ts:934 - // assert(poolKey.poolId !== 1, 'caller must NOT be pool 1') - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - != - - // caller must NOT be pool 1 - assert - - // contracts/stakingPool.algo.ts:936 - // callerPoolAppID = sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [poolKey.id, poolKey.poolId], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "getPoolAppId(uint64,uint64)uint64" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:937 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:938 - // methodArgs: [poolKey.id, poolKey.poolId] - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - itxn_field ApplicationArgs - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - btoi - frame_bury 0 // callerPoolAppID: uint64 - - // contracts/stakingPool.algo.ts:940 - // assert(callerPoolAppID === poolKey.poolAppId) - frame_dig 0 // callerPoolAppID: uint64 - frame_dig -1 // poolKey: ValidatorPoolKey - extract 16 8 - btoi - == - assert - - // contracts/stakingPool.algo.ts:941 - // assert(this.txn.sender === AppID.fromUint64(poolKey.poolAppId).address) - txn Sender - frame_dig -1 // poolKey: ValidatorPoolKey - extract 16 8 - btoi - app_params_get AppAddress - pop - == - assert - - // contracts/stakingPool.algo.ts:943 - // return sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [this.validatorId.value], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "setTokenPayoutRatio(uint64)(uint64[24],uint64)" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:944 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:945 - // methodArgs: [this.validatorId.value] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - - // set the subroutine return value - frame_bury 0 - retsub - -// isOwnerOrManagerCaller(): boolean -isOwnerOrManagerCaller: - proto 0 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - - // contracts/stakingPool.algo.ts:950 - // OwnerAndManager = sendMethodCall({ - // applicationID: this.creatingValidatorContractAppId.value, - // methodArgs: [this.validatorId.value], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "getValidatorOwnerAndManager(uint64)(address,address)" - itxn_field ApplicationArgs - - // contracts/stakingPool.algo.ts:951 - // applicationID: this.creatingValidatorContractAppId.value - byte 0x63726561746f72417070 // "creatorApp" - app_global_get - itxn_field ApplicationID - - // contracts/stakingPool.algo.ts:952 - // methodArgs: [this.validatorId.value] - byte 0x76616c696461746f724964 // "validatorId" - app_global_get - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - frame_bury 0 // OwnerAndManager: (address,address) - - // contracts/stakingPool.algo.ts:954 - // return this.txn.sender === OwnerAndManager[0] || this.txn.sender === OwnerAndManager[1] - txn Sender - frame_dig 0 // OwnerAndManager: (address,address) - extract 0 32 - == - dup - bnz *skip_or2 - txn Sender - frame_dig 0 // OwnerAndManager: (address,address) - extract 32 32 - == - || - -*skip_or2: - // set the subroutine return value - frame_bury 0 - retsub - -// getFeeSink(): Address -getFeeSink: - proto 0 1 - - // contracts/stakingPool.algo.ts:958 - // return this.feeSinkAddr - pushbytes TMPL_feeSinkAddr - retsub - -// algoSaturationLevel(): uint64 -// -// Returns the maximum allowed stake per validator based on a percentage of all current online stake before -// the validator is considered saturated - where rewards are diminished. -algoSaturationLevel: - proto 0 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - - // contracts/stakingPool.algo.ts:968 - // online = this.getCurrentOnlineStake() - callsub getCurrentOnlineStake - frame_bury 0 // online: uint64 - - // contracts/stakingPool.algo.ts:970 - // return wideRatio([online, MAX_VALIDATOR_SOFT_PCT_OF_ONLINE_1DECIMAL], [1000]) - frame_dig 0 // online: uint64 - int 100 - mulw - int 0 - int 1000 - divmodw - pop - pop - swap - ! - - // wideRatio failed - assert - - // set the subroutine return value - frame_bury 0 - retsub - -// getGoOnlineFee(): uint64 -getGoOnlineFee: - proto 0 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - - // contracts/stakingPool.algo.ts:977 - // isOnline = false - int 0 - frame_bury 0 // isOnline: bool - - // *if46_condition - // contracts/stakingPool.algo.ts:978 - // !isOnline - frame_dig 0 // isOnline: bool - ! - bz *if46_end - - // *if46_consequent - // contracts/stakingPool.algo.ts:981 - // return 2_000_000 - int 2_000_000 - b *getGoOnlineFee*return - -*if46_end: - // contracts/stakingPool.algo.ts:983 - // return 0 - int 0 - -*getGoOnlineFee*return: - // set the subroutine return value - frame_bury 0 - retsub - -// getCurrentOnlineStake(): uint64 -getCurrentOnlineStake: - proto 0 1 - - // contracts/stakingPool.algo.ts:989 - // return 2_000_000_000_000_000 - int 2_000_000_000_000_000 - retsub - -// checkIfBinClosed(): void -// -// Checks if the current round is in a 'new calculation bin' (approximately daily) -checkIfBinClosed: - proto 0 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 4 - - // contracts/stakingPool.algo.ts:996 - // currentBinSize = this.roundsPerDay.value as uint128 - byte 0x726f756e6473506572446179 // "roundsPerDay" - app_global_get - itob - frame_bury 0 // currentBinSize: unsafe uint128 - - // *if47_condition - // contracts/stakingPool.algo.ts:997 - // globals.round >= this.binRoundStart.value + (currentBinSize as uint64) - global Round - byte 0x62696e526f756e645374617274 // "binRoundStart" - app_global_get - frame_dig 0 // currentBinSize: unsafe uint128 - dup - bitlen - int 64 - <= - - // currentBinSize as uint64 overflowed 64 bits - assert - byte 0xFFFFFFFFFFFFFFFF - b& - dup - len - dup - int 8 - - - swap - substring3 - btoi - + - >= - bz *if47_end - - // *if47_consequent - // *if48_condition - // contracts/stakingPool.algo.ts:998 - // globals.opcodeBudget < 300 - global OpcodeBudget - int 300 - < - bz *if48_end - - // *if48_consequent - // contracts/stakingPool.algo.ts:999 - // increaseOpcodeBudget() - itxn_begin - int appl - itxn_field TypeEnum - int 0 - itxn_field Fee - byte b64 CoEB // #pragma version 10; int 1 - dup - itxn_field ApprovalProgram - itxn_field ClearStateProgram - int DeleteApplication - itxn_field OnCompletion - itxn_submit - -*if48_end: - // contracts/stakingPool.algo.ts:1001 - // approxRoundsPerYear: uint128 = currentBinSize * (365 as uint128) - frame_dig 0 // currentBinSize: unsafe uint128 - byte 0x0000000000000000000000000000016d - b* - dup - bitlen - int 128 - <= - - // currentBinSize * (365 as uint128) overflowed 128 bits - assert - byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - b& - dup - len - dup - int 16 - - - swap - substring3 - frame_bury 1 // approxRoundsPerYear: uint128 - - // contracts/stakingPool.algo.ts:1002 - // avgStake: uint128 = this.stakeAccumulator.value / currentBinSize - byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" - app_global_get - frame_dig 0 // currentBinSize: unsafe uint128 - b/ - dup - bitlen - int 128 - <= - - // this.stakeAccumulator.value / currentBinSize overflowed 128 bits - assert - byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - b& - dup - len - dup - int 16 - - - swap - substring3 - frame_bury 2 // avgStake: uint128 - - // *if49_condition - // contracts/stakingPool.algo.ts:1003 - // avgStake !== 0 - frame_dig 2 // avgStake: uint128 - byte 0x00000000000000000000000000000000 - b!= - bz *if49_end - - // *if49_consequent - // contracts/stakingPool.algo.ts:1007 - // apr: uint128 = - // (((this.rewardAccumulator.value as uint128) * (10000 as uint128)) / avgStake) * - // (approxRoundsPerYear / currentBinSize) - byte 0x726577617264416363756d756c61746f72 // "rewardAccumulator" - app_global_get - itob - byte 0x00000000000000000000000000002710 - b* - frame_dig 2 // avgStake: uint128 - b/ - frame_dig 1 // approxRoundsPerYear: uint128 - frame_dig 0 // currentBinSize: unsafe uint128 - b/ - b* - dup - bitlen - int 128 - <= - - // (((this.rewardAccumulator.value as uint128) * (10000 as uint128)) / avgStake) *\n (approxRoundsPerYear / currentBinSize) overflowed 128 bits - assert - byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - b& - dup - len - dup - int 16 - - - swap - substring3 - frame_bury 3 // apr: uint128 - - // contracts/stakingPool.algo.ts:1011 - // alpha: uint128 = 10 as uint128 - byte 0x0000000000000000000000000000000a - frame_bury 4 // alpha: unsafe uint128 - - // *if50_condition - // contracts/stakingPool.algo.ts:1013 - // avgStake > 300000000000 - frame_dig 2 // avgStake: uint128 - byte 0x000000000000000000000045d964b800 - b> - bz *if50_end - - // *if50_consequent - // contracts/stakingPool.algo.ts:1014 - // alpha = 90 as uint128 - byte 0x0000000000000000000000000000005a - frame_bury 4 // alpha: unsafe uint128 - -*if50_end: - // contracts/stakingPool.algo.ts:1016 - // this.weightedMovingAverage.value = - // (this.weightedMovingAverage.value * ((100 as uint128) - alpha)) / (100 as uint128) + - // (apr * alpha) / (100 as uint128) - byte 0x65776d61 // "ewma" - dup - app_global_get - byte 0x00000000000000000000000000000064 - frame_dig 4 // alpha: unsafe uint128 - b- - b* - byte 0x00000000000000000000000000000064 - b/ - frame_dig 3 // apr: uint128 - frame_dig 4 // alpha: unsafe uint128 - b* - byte 0x00000000000000000000000000000064 - b/ - b+ - dup - bitlen - int 128 - <= - - // (this.weightedMovingAverage.value * ((100 as uint128) - alpha)) / (100 as uint128) +\n (apr * alpha) / (100 as uint128) overflowed 128 bits - assert - byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - b& - dup - len - dup - int 16 - - - swap - substring3 - app_global_put - -*if49_end: - // contracts/stakingPool.algo.ts:1022 - // this.setRoundsPerDay() - callsub setRoundsPerDay - - // contracts/stakingPool.algo.ts:1023 - // this.stakeAccumulator.value = (this.totalAlgoStaked.value as uint128) * (this.roundsPerDay.value as uint128) - byte 0x7374616b65416363756d756c61746f72 // "stakeAccumulator" - byte 0x7374616b6564 // "staked" - app_global_get - itob - byte 0x726f756e6473506572446179 // "roundsPerDay" - app_global_get - itob - b* - dup - bitlen - int 128 - <= - - // (this.totalAlgoStaked.value as uint128) * (this.roundsPerDay.value as uint128) overflowed 128 bits - assert - byte 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - b& - dup - len - dup - int 16 - - - swap - substring3 - app_global_put - - // contracts/stakingPool.algo.ts:1024 - // this.rewardAccumulator.value = 0 - byte 0x726577617264416363756d756c61746f72 // "rewardAccumulator" - int 0 - app_global_put - - // contracts/stakingPool.algo.ts:1025 - // this.binRoundStart.value = globals.round - (globals.round % this.roundsPerDay.value) - byte 0x62696e526f756e645374617274 // "binRoundStart" - global Round - global Round - byte 0x726f756e6473506572446179 // "roundsPerDay" - app_global_get - % - - - app_global_put - -*if47_end: - retsub - -// setRoundsPerDay(): void -setRoundsPerDay: - proto 0 0 - - // contracts/stakingPool.algo.ts:1030 - // this.roundsPerDay.value = AVG_ROUNDS_PER_DAY - byte 0x726f756e6473506572446179 // "roundsPerDay" - int 30857 - app_global_put - retsub - -*create_NoOp: - method "createApplication(uint64,uint64,uint64,uint64)void" - txna ApplicationArgs 0 - match *abi_route_createApplication - - // this contract does not implement the given ABI method for create NoOp - err - -*call_NoOp: - method "gas()void" - method "initStorage(pay)void" - method "addStake(pay,address)uint64" - method "removeStake(address,uint64)void" - method "claimTokens()void" - method "getStakerInfo(address)(address,uint64,uint64,uint64,uint64)" - method "payTokenReward(address,uint64,uint64)void" - method "updateAlgodVer(string)void" - method "epochBalanceUpdate()void" - method "goOnline(pay,byte[],byte[],byte[],uint64,uint64,uint64)void" - method "goOffline()void" - method "linkToNFD(uint64,string)void" - method "proxiedSetTokenPayoutRatio((uint64,uint64,uint64))(uint64[24],uint64)" - txna ApplicationArgs 0 - match *abi_route_gas *abi_route_initStorage *abi_route_addStake *abi_route_removeStake *abi_route_claimTokens *abi_route_getStakerInfo *abi_route_payTokenReward *abi_route_updateAlgodVer *abi_route_epochBalanceUpdate *abi_route_goOnline *abi_route_goOffline *abi_route_linkToNFD *abi_route_proxiedSetTokenPayoutRatio - - // this contract does not implement the given ABI method for call NoOp - err - -*call_UpdateApplication: - method "updateApplication()void" - txna ApplicationArgs 0 - match *abi_route_updateApplication - - // this contract does not implement the given ABI method for call UpdateApplication - err \ No newline at end of file diff --git a/examples/reti/StakingPool.arc32.json b/examples/reti/StakingPool.arc32.json deleted file mode 100644 index f21f66c54..000000000 --- a/examples/reti/StakingPool.arc32.json +++ /dev/null @@ -1,421 +0,0 @@ -{ - "hints": { - "updateApplication()void": { - "call_config": { - "update_application": "CALL" - } - }, - "createApplication(uint64,uint64,uint64,uint64)void": { - "call_config": { - "no_op": "CREATE" - } - }, - "gas()void": { - "call_config": { - "no_op": "CALL" - } - }, - "initStorage(pay)void": { - "call_config": { - "no_op": "CALL" - } - }, - "addStake(pay,address)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "removeStake(address,uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "claimTokens()void": { - "call_config": { - "no_op": "CALL" - } - }, - "getStakerInfo(address)(address,uint64,uint64,uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "payTokenReward(address,uint64,uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "updateAlgodVer(string)void": { - "call_config": { - "no_op": "CALL" - } - }, - "epochBalanceUpdate()void": { - "call_config": { - "no_op": "CALL" - } - }, - "goOnline(pay,byte[],byte[],byte[],uint64,uint64,uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "goOffline()void": { - "call_config": { - "no_op": "CALL" - } - }, - "linkToNFD(uint64,string)void": { - "call_config": { - "no_op": "CALL" - } - }, - "proxiedSetTokenPayoutRatio((uint64,uint64,uint64))(uint64[24],uint64)": { - "call_config": { - "no_op": "CALL" - } - } - }, - "bare_call_config": { - "no_op": "NEVER", - "opt_in": "NEVER", - "close_out": "NEVER", - "update_application": "NEVER", - "delete_application": "NEVER" - }, - "schema": { - "local": { - "declared": {}, - "reserved": {} - }, - "global": { - "declared": { - "creatingValidatorContractAppId": { - "type": "uint64", - "key": "creatorApp" - }, - "validatorId": { - "type": "uint64", - "key": "validatorId" - }, - "poolId": { - "type": "uint64", - "key": "poolId" - }, - "numStakers": { - "type": "uint64", - "key": "numStakers" - }, - "totalAlgoStaked": { - "type": "uint64", - "key": "staked" - }, - "minEntryStake": { - "type": "uint64", - "key": "minEntryStake" - }, - "lastPayout": { - "type": "uint64", - "key": "lastPayout" - }, - "epochNumber": { - "type": "uint64", - "key": "epochNumber" - }, - "algodVer": { - "type": "bytes", - "key": "algodVer" - }, - "roundsPerDay": { - "type": "uint64", - "key": "roundsPerDay" - }, - "binRoundStart": { - "type": "uint64", - "key": "binRoundStart" - }, - "stakeAccumulator": { - "type": "bytes", - "key": "stakeAccumulator" - }, - "rewardAccumulator": { - "type": "uint64", - "key": "rewardAccumulator" - }, - "weightedMovingAverage": { - "type": "bytes", - "key": "ewma" - } - }, - "reserved": {} - } - }, - "state": { - "global": { - "num_byte_slices": 3, - "num_uints": 11 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjk2LjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCS8vIFRoZSByZXF1ZXN0ZWQgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRyYWN0LiBBcmUgeW91IHVzaW5nIHRoZSBjb3JyZWN0IE9uQ29tcGxldGU/IERpZCB5b3Ugc2V0IHlvdXIgYXBwIElEPwoJZXJyCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiB1cGRhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKTogdm9pZAp1cGRhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkyCgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IEFkZHJlc3MuZnJvbUFkZHJlc3MoJ0xaNFYySVJWTENYRkpLNFJFSlY0VEFHRUtFWVRBMkdNUjZUQzIzNDRPQjNMM0FGM01XWFo2WkFGSVEnKSwKCS8vICAgICAgICAgICAgICdUZW1wb3Jhcnk6IGNvbnRyYWN0IGlzIHVwZ3JhZGVhYmxlIGJ1dCBvbmx5IGR1cmluZyB0ZXN0aW5nIGFuZCBvbmx5IGZyb20gYSBkZXZlbG9wbWVudCBhY2NvdW50JywKCS8vICAgICAgICAgKQoJdHhuIFNlbmRlcgoJYWRkciBMWjRWMklSVkxDWEZKSzRSRUpWNFRBR0VLRVlUQTJHTVI2VEMyMzQ0T0IzTDNBRjNNV1haNlpBRklRCgk9PQoKCS8vIFRlbXBvcmFyeTogY29udHJhY3QgaXMgdXBncmFkZWFibGUgYnV0IG9ubHkgZHVyaW5nIHRlc3RpbmcgYW5kIG9ubHkgZnJvbSBhIGRldmVsb3BtZW50IGFjY291bnQKCWFzc2VydAoJcmV0c3ViCgovLyBjcmVhdGVBcHBsaWNhdGlvbih1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gbWluRW50cnlTdGFrZTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA0CglidG9pCgoJLy8gcG9vbElkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gY3JlYXRpbmdDb250cmFjdElkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGNyZWF0ZUFwcGxpY2F0aW9uKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIGNyZWF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyBjcmVhdGVBcHBsaWNhdGlvbihjcmVhdGluZ0NvbnRyYWN0SWQ6IEFwcElELCB2YWxpZGF0b3JJZDogdWludDY0LCBwb29sSWQ6IHVpbnQ2NCwgbWluRW50cnlTdGFrZTogdWludDY0KTogdm9pZAovLwovLyBJbml0aWFsaXplIHRoZSBzdGFraW5nIHBvb2wgdy8gb3duZXIgYW5kIG1hbmFnZXIsIGJ1dCBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSB2YWxpZGF0b3IgY29udHJhY3QuCi8vIEBwYXJhbSB7dWludDY0fSBjcmVhdGluZ0NvbnRyYWN0SWQgLSBpZCBvZiBjb250cmFjdCB0aGF0IGNvbnN0cnVjdGVkIHVzIC0gdGhlIHZhbGlkYXRvciBhcHBsaWNhdGlvbiAoc2luZ2xlIGdsb2JhbCBpbnN0YW5jZSkKLy8gQHBhcmFtIHt1aW50NjR9IHZhbGlkYXRvcklkIC0gaWQgb2YgdmFsaWRhdG9yIHdlJ3JlIGEgc3Rha2luZyBwb29sIG9mCi8vIEBwYXJhbSB7dWludDY0fSBwb29sSWQgLSB3aGljaCBwb29sIGlkIGFyZSB3ZQovLyBAcGFyYW0ge3VpbnQ2NH0gbWluRW50cnlTdGFrZSAtIG1pbmltdW0gYW1vdW50IHRvIGJlIGluIHBvb2wsIGJ1dCBhbHNvIG1pbmltdW0gYW1vdW50IGJhbGFuY2UgY2FuJ3QgZ28gYmVsb3cgKHdpdGhvdXQgcmVtb3ZpbmcgYWxsISkKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byA0IDAKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTA2CgkvLyBjcmVhdGluZ0NvbnRyYWN0SWQgPT09IEFwcElELmZyb21VaW50NjQoMCkKCWZyYW1lX2RpZyAtMSAvLyBjcmVhdGluZ0NvbnRyYWN0SWQ6IEFwcElECglpbnQgMAoJPT0KCWJ6ICppZjBfZWxzZQoKCS8vICppZjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTA4CgkvLyBhc3NlcnQodmFsaWRhdG9ySWQgPT09IDApCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJaW50IDAKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMDkKCS8vIGFzc2VydChwb29sSWQgPT09IDApCglmcmFtZV9kaWcgLTMgLy8gcG9vbElkOiB1aW50NjQKCWludCAwCgk9PQoJYXNzZXJ0CgliICppZjBfZW5kCgoqaWYwX2Vsc2U6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMTEKCS8vIGFzc2VydCh2YWxpZGF0b3JJZCAhPT0gMCkKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogdWludDY0CglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjExMgoJLy8gYXNzZXJ0KHBvb2xJZCAhPT0gMCkKCWZyYW1lX2RpZyAtMyAvLyBwb29sSWQ6IHVpbnQ2NAoJaW50IDAKCSE9Cglhc3NlcnQKCippZjBfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTE0CgkvLyBhc3NlcnQobWluRW50cnlTdGFrZSA+PSBNSU5fQUxHT19TVEFLRV9QRVJfUE9PTCwgJ3N0YWtpbmcgcG9vbCBtdXN0IGhhdmUgbWluaW11bSBlbnRyeSBvZiAxIGFsZ28nKQoJZnJhbWVfZGlnIC00IC8vIG1pbkVudHJ5U3Rha2U6IHVpbnQ2NAoJaW50IDEwMDAwMDAKCT49CgoJLy8gc3Rha2luZyBwb29sIG11c3QgaGF2ZSBtaW5pbXVtIGVudHJ5IG9mIDEgYWxnbwoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTE1CgkvLyB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZSA9IGNyZWF0aW5nQ29udHJhY3RJZAoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJZnJhbWVfZGlnIC0xIC8vIGNyZWF0aW5nQ29udHJhY3RJZDogQXBwSUQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTE2CgkvLyB0aGlzLnZhbGlkYXRvcklkLnZhbHVlID0gdmFsaWRhdG9ySWQKCWJ5dGUgMHg3NjYxNmM2OTY0NjE3NDZmNzI0OTY0IC8vICJ2YWxpZGF0b3JJZCIKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogdWludDY0CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjExNwoJLy8gdGhpcy5wb29sSWQudmFsdWUgPSBwb29sSWQKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWZyYW1lX2RpZyAtMyAvLyBwb29sSWQ6IHVpbnQ2NAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMTgKCS8vIHRoaXMubnVtU3Rha2Vycy52YWx1ZSA9IDAKCWJ5dGUgMHg2ZTc1NmQ1Mzc0NjE2YjY1NzI3MyAvLyAibnVtU3Rha2VycyIKCWludCAwCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjExOQoJLy8gdGhpcy50b3RhbEFsZ29TdGFrZWQudmFsdWUgPSAwCglieXRlIDB4NzM3NDYxNmI2NTY0IC8vICJzdGFrZWQiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMjAKCS8vIHRoaXMubWluRW50cnlTdGFrZS52YWx1ZSA9IG1pbkVudHJ5U3Rha2UKCWJ5dGUgMHg2ZDY5NmU0NTZlNzQ3Mjc5NTM3NDYxNmI2NSAvLyAibWluRW50cnlTdGFrZSIKCWZyYW1lX2RpZyAtNCAvLyBtaW5FbnRyeVN0YWtlOiB1aW50NjQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTIxCgkvLyB0aGlzLmxhc3RQYXlvdXQudmFsdWUgPSBnbG9iYWxzLnJvdW5kCglieXRlIDB4NmM2MTczNzQ1MDYxNzk2Zjc1NzQgLy8gImxhc3RQYXlvdXQiCglnbG9iYWwgUm91bmQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTIyCgkvLyB0aGlzLmVwb2NoTnVtYmVyLnZhbHVlID0gMAoJYnl0ZSAweDY1NzA2ZjYzNjg0ZTc1NmQ2MjY1NzIgLy8gImVwb2NoTnVtYmVyIgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTI0CgkvLyB0aGlzLnNldFJvdW5kc1BlckRheSgpCgljYWxsc3ViIHNldFJvdW5kc1BlckRheQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEyNQoJLy8gdGhpcy5iaW5Sb3VuZFN0YXJ0LnZhbHVlID0gZ2xvYmFscy5yb3VuZCAtIChnbG9iYWxzLnJvdW5kICUgdGhpcy5yb3VuZHNQZXJEYXkudmFsdWUpCglieXRlIDB4NjI2OTZlNTI2Zjc1NmU2NDUzNzQ2MTcyNzQgLy8gImJpblJvdW5kU3RhcnQiCglnbG9iYWwgUm91bmQKCWdsb2JhbCBSb3VuZAoJYnl0ZSAweDcyNmY3NTZlNjQ3MzUwNjU3MjQ0NjE3OSAvLyAicm91bmRzUGVyRGF5IgoJYXBwX2dsb2JhbF9nZXQKCSUKCS0KCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTI2CgkvLyB0aGlzLnN0YWtlQWNjdW11bGF0b3IudmFsdWUgPSAwIGFzIHVpbnQxMjgKCWJ5dGUgMHg3Mzc0NjE2YjY1NDE2MzYzNzU2ZDc1NmM2MTc0NmY3MiAvLyAic3Rha2VBY2N1bXVsYXRvciIKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMjcKCS8vIHRoaXMucmV3YXJkQWNjdW11bGF0b3IudmFsdWUgPSAwCglieXRlIDB4NzI2NTc3NjE3MjY0NDE2MzYzNzU2ZDc1NmM2MTc0NmY3MiAvLyAicmV3YXJkQWNjdW11bGF0b3IiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMjgKCS8vIHRoaXMud2VpZ2h0ZWRNb3ZpbmdBdmVyYWdlLnZhbHVlID0gMCBhcyB1aW50MTI4CglieXRlIDB4NjU3NzZkNjEgLy8gImV3bWEiCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIGdhcygpdm9pZAoqYWJpX3JvdXRlX2dhczoKCS8vIGV4ZWN1dGUgZ2FzKCl2b2lkCgljYWxsc3ViIGdhcwoJaW50IDEKCXJldHVybgoKLy8gZ2FzKCk6IHZvaWQKLy8KLy8gZ2FzIGlzIGEgZHVtbXkgbm8tb3AgY2FsbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBvb2wtdXAgcmVzb3VyY2UgcmVmZXJlbmNlcyBhbmQgb3Bjb2RlIGNvc3QKZ2FzOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGNvc3RGb3JCb3hTdG9yYWdlKHRvdGFsTnVtQnl0ZXM6IHVpbnQ2NCk6IHVpbnQ2NApjb3N0Rm9yQm94U3RvcmFnZToKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE0MAoJLy8gcmV0dXJuIFNDQk9YX1BFUkJPWCArIHRvdGFsTnVtQnl0ZXMgKiBTQ0JPWF9QRVJCWVRFCglpbnQgMjUwMAoJZnJhbWVfZGlnIC0xIC8vIHRvdGFsTnVtQnl0ZXM6IHVpbnQ2NAoJaW50IDQwMAoJKgoJKwoJcmV0c3ViCgovLyBpbml0U3RvcmFnZShwYXkpdm9pZAoqYWJpX3JvdXRlX2luaXRTdG9yYWdlOgoJLy8gbWJyUGF5bWVudDogcGF5Cgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBwYXkKCT09CgoJLy8gYXJndW1lbnQgMCAobWJyUGF5bWVudCkgZm9yIGluaXRTdG9yYWdlIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgaW5pdFN0b3JhZ2UocGF5KXZvaWQKCWNhbGxzdWIgaW5pdFN0b3JhZ2UKCWludCAxCglyZXR1cm4KCi8vIGluaXRTdG9yYWdlKG1iclBheW1lbnQ6IFBheVR4bik6IHZvaWQKLy8KLy8gQ2FsbGVkIGFmdGVyIHdlJ3JlIGNyZWF0ZWQgYW5kIHRoZW4gZnVuZGVkLCBzbyB3ZSBjYW4gY3JlYXRlIG91ciBsYXJnZSBzdGFrZXJzIGxlZGdlciBzdG9yYWdlCi8vIENhbGxlciBoYXMgdG8gZ2V0IE1CUiBhbW91bnRzIGZyb20gVmFsaWRhdG9yUmVnaXN0cnkgdG8ga25vdyBob3cgbXVjaCB0byBmdW5kIHVzIHRvIGNvdmVyIHRoZSBib3ggc3RvcmFnZSBjb3N0Ci8vIElmIHRoaXMgaXMgcG9vbCAxIEFORCB0aGUgdmFsaWRhdG9yIGhhcyBzcGVjaWZpZWQgYSByZXdhcmQgdG9rZW4sIG9wdC1pbiB0byB0aGF0IHRva2VuCi8vIHNvIHRoYXQgdGhlIHZhbGlkYXRvciBjYW4gc2VlZCB0aGUgcG9vbCB3aXRoIGZ1dHVyZSByZXdhcmRzIG9mIHRoYXQgdG9rZW4uCi8vIEBwYXJhbSBtYnJQYXltZW50IHBheW1lbnQgZnJvbSBjYWxsZXIgd2hpY2ggY292ZXJzIG1iciBpbmNyZWFzZSBvZiBuZXcgc3Rha2luZyBwb29scycgc3RvcmFnZQppbml0U3RvcmFnZToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDMKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNTEKCS8vIGFzc2VydCghdGhpcy5zdGFrZXJzLmV4aXN0cywgJ3N0YWtpbmcgcG9vbCBhbHJlYWR5IGluaXRpYWxpemVkJykKCWJ5dGUgMHg3Mzc0NjE2YjY1NzI3MyAvLyAic3Rha2VycyIKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoKCS8vIHN0YWtpbmcgcG9vbCBhbHJlYWR5IGluaXRpYWxpemVkCglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNTQKCS8vIHZhbGlkYXRvckNvbmZpZyA9IHNlbmRNZXRob2RDYWxsPHR5cGVvZiBWYWxpZGF0b3JSZWdpc3RyeS5wcm90b3R5cGUuZ2V0VmFsaWRhdG9yQ29uZmlnPih7CgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZSwKCS8vICAgICAgICAgICAgIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgImdldFZhbGlkYXRvckNvbmZpZyh1aW50NjQpKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNTUKCS8vIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTU2CgkvLyBtZXRob2RBcmdzOiBbdGhpcy52YWxpZGF0b3JJZC52YWx1ZV0KCWJ5dGUgMHg3NjYxNmM2OTY0NjE3NDZmNzI0OTY0IC8vICJ2YWxpZGF0b3JJZCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCWl0eG4gTnVtTG9ncwoJaW50IDEKCS0KCWl0eG5hcyBMb2dzCglleHRyYWN0IDQgMAoJZnJhbWVfYnVyeSAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTU4CgkvLyBpc1Rva2VuRWxpZ2libGUgPSB2YWxpZGF0b3JDb25maWcucmV3YXJkVG9rZW5JZCAhPT0gMAoJZnJhbWVfZGlnIDAgLy8gdmFsaWRhdG9yQ29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMTUzIDgKCWJ0b2kKCWludCAwCgkhPQoJZnJhbWVfYnVyeSAxIC8vIGlzVG9rZW5FbGlnaWJsZTogYm9vbAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE1OQoJLy8gZXh0cmFNQlIgPSBpc1Rva2VuRWxpZ2libGUgJiYgdGhpcy5wb29sSWQudmFsdWUgPT09IDEgPyBBU1NFVF9IT0xESU5HX0ZFRSA6IDAKCWZyYW1lX2RpZyAxIC8vIGlzVG9rZW5FbGlnaWJsZTogYm9vbAoJZHVwCglieiAqc2tpcF9hbmQwCglieXRlIDB4NzA2ZjZmNmM0OTY0IC8vICJwb29sSWQiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCT09CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJaW50IDEwMDAwMAoJYiAqdGVybmFyeTBfZW5kCgoqdGVybmFyeTBfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkwX2VuZDoKCWZyYW1lX2J1cnkgMiAvLyBleHRyYU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTYwCgkvLyBQb29sSW5pdE1iciA9CgkvLyAgICAgICAgICAgICBBTEdPUkFORF9BQ0NPVU5UX01JTl9CQUxBTkNFICsKCS8vICAgICAgICAgICAgIGV4dHJhTUJSICsKCS8vICAgICAgICAgICAgIHRoaXMuY29zdEZvckJveFN0b3JhZ2UoNyAvKiAnc3Rha2VycycgbmFtZSAqLyArIGxlbjxTdGFrZWRJbmZvPigpICogTUFYX1NUQUtFUlNfUEVSX1BPT0wpCglpbnQgMTAwMDAwCglmcmFtZV9kaWcgMiAvLyBleHRyYU1CUjogdWludDY0CgkrCglpbnQgMTI4MDcKCWNhbGxzdWIgY29zdEZvckJveFN0b3JhZ2UKCSsKCWZyYW1lX2J1cnkgMyAvLyBQb29sSW5pdE1icjogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTY2CgkvLyB2ZXJpZnlQYXlUeG4obWJyUGF5bWVudCwgeyByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywgYW1vdW50OiBQb29sSW5pdE1iciB9KQoJLy8gdmVyaWZ5IHJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5bWVudDogUGF5VHhuCglndHhucyBSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJtYnJQYXltZW50IiwiZmllbGQiOiJyZWNlaXZlciIsImV4cGVjdGVkIjoidGhpcy5hcHAuYWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYW1vdW50CglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWZyYW1lX2RpZyAzIC8vIFBvb2xJbml0TWJyOiB1aW50NjQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJtYnJQYXltZW50IiwiZmllbGQiOiJhbW91bnQiLCJleHBlY3RlZCI6IlBvb2xJbml0TWJyIn0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE2NwoJLy8gdGhpcy5zdGFrZXJzLmNyZWF0ZSgpCglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCglpbnQgMTI4MDAKCWJveF9jcmVhdGUKCXBvcAoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNjkKCS8vIGlzVG9rZW5FbGlnaWJsZSAmJiB0aGlzLnBvb2xJZC52YWx1ZSA9PT0gMQoJZnJhbWVfZGlnIDEgLy8gaXNUb2tlbkVsaWdpYmxlOiBib29sCglkdXAKCWJ6ICpza2lwX2FuZDEKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJPT0KCSYmCgoqc2tpcF9hbmQxOgoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE3MQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICAgICAgICAgIHhmZXJBc3NldDogQXNzZXRJRC5mcm9tVWludDY0KHZhbGlkYXRvckNvbmZpZy5yZXdhcmRUb2tlbklkKSwKCS8vICAgICAgICAgICAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgICAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE3MgoJLy8geGZlckFzc2V0OiBBc3NldElELmZyb21VaW50NjQodmFsaWRhdG9yQ29uZmlnLnJld2FyZFRva2VuSWQpCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxNTMgOAoJYnRvaQoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNzMKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxNzQKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjFfZW5kOgoJcmV0c3ViCgovLyBhZGRTdGFrZShwYXksYWRkcmVzcyl1aW50NjQKKmFiaV9yb3V0ZV9hZGRTdGFrZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3Rha2VyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHN0YWtlcikgZm9yIGFkZFN0YWtlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBzdGFrZWRBbW91bnRQYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAxIChzdGFrZWRBbW91bnRQYXltZW50KSBmb3IgYWRkU3Rha2UgbXVzdCBiZSBhIHBheSB0cmFuc2FjdGlvbgoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhZGRTdGFrZShwYXksYWRkcmVzcyl1aW50NjQKCWNhbGxzdWIgYWRkU3Rha2UKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhZGRTdGFrZShzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4sIHN0YWtlcjogQWRkcmVzcyk6IHVpbnQ2NAovLwovLyBBZGRzIHN0YWtlIHRvIHRoZSBnaXZlbiBhY2NvdW50LgovLyBDYW4gT05MWSBiZSBjYWxsZWQgYnkgdGhlIHZhbGlkYXRvciBjb250cmFjdCB0aGF0IGNyZWF0ZWQgdXMKLy8gTXVzdCByZWNlaXZlIHBheW1lbnQgZnJvbSB0aGUgdmFsaWRhdG9yIGNvbnRyYWN0IGZvciBhbW91bnQgYmVpbmcgc3Rha2VkLgovLwovLyBAcGFyYW0ge1BheVR4bn0gc3Rha2VkQW1vdW50UGF5bWVudCBwcmlvciBwYXltZW50IGNvbWluZyBmcm9tIHZhbGlkYXRvciBjb250cmFjdCB0byB1cyBvbiBiZWhhbGYgb2Ygc3Rha2VyLgovLyBAcGFyYW0ge0FkZHJlc3N9IHN0YWtlciAtIFRoZSBhY2NvdW50IGFkZGluZyBuZXcgc3Rha2UKLy8gQHRocm93cyB7RXJyb3J9IC0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzdGFraW5nIHBvb2wgaXMgZnVsbC4KLy8gQHJldHVybnMge3VpbnQ2NH0gbmV3ICdlbnRyeSByb3VuZCcgcm91bmQgbnVtYmVyIG9mIHN0YWtlIGFkZAphZGRTdGFrZToKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxOTAKCS8vIGFzc2VydCh0aGlzLnN0YWtlcnMuZXhpc3RzLCAnc3Rha2luZyBwb29sIG11c3QgYmUgaW5pdGlhbGl6ZWQgZmlyc3QnKQoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJYm94X2xlbgoJc3dhcAoJcG9wCgoJLy8gc3Rha2luZyBwb29sIG11c3QgYmUgaW5pdGlhbGl6ZWQgZmlyc3QKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjE5MwoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgdGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZS5hZGRyZXNzLAoJLy8gICAgICAgICAgICAgJ3N0YWtlIGNhbiBvbmx5IGJlIGFkZGVkIHZpYSB0aGUgdmFsaWRhdG9yIGNvbnRyYWN0JywKCS8vICAgICAgICAgKQoJdHhuIFNlbmRlcgoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJPT0KCgkvLyBzdGFrZSBjYW4gb25seSBiZSBhZGRlZCB2aWEgdGhlIHZhbGlkYXRvciBjb250cmFjdAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTk3CgkvLyBhc3NlcnQoc3Rha2VyICE9PSBnbG9iYWxzLnplcm9BZGRyZXNzKQoJZnJhbWVfZGlnIC0yIC8vIHN0YWtlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjAwCgkvLyB0aGlzLmNoZWNrSWZCaW5DbG9zZWQoKQoJY2FsbHN1YiBjaGVja0lmQmluQ2xvc2VkCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjA0CgkvLyB2ZXJpZnlQYXlUeG4oc3Rha2VkQW1vdW50UGF5bWVudCwgewoJLy8gICAgICAgICAgICAgc2VuZGVyOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZS5hZGRyZXNzLAoJLy8gICAgICAgICAgICAgcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICAgICAgICBhbW91bnQ6IHN0YWtlZEFtb3VudFBheW1lbnQuYW1vdW50LAoJLy8gICAgICAgICB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgU2VuZGVyCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJcG9wCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoic3Rha2VkQW1vdW50UGF5bWVudCIsImZpZWxkIjoic2VuZGVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZS5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIHZlcmlmeSByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgUmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoic3Rha2VkQW1vdW50UGF5bWVudCIsImZpZWxkIjoicmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgQW1vdW50CglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJzdGFrZWRBbW91bnRQYXltZW50IiwiZmllbGQiOiJhbW91bnQiLCJleHBlY3RlZCI6InN0YWtlZEFtb3VudFBheW1lbnQuYW1vdW50In0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjIxMwoJLy8gZW50cnlSb3VuZCA9IGdsb2JhbHMucm91bmQgKyBBTEdPUkFORF9TVEFLSU5HX0JMT0NLX0RFTEFZCglnbG9iYWwgUm91bmQKCWludCAzMjAKCSsKCWZyYW1lX2J1cnkgMCAvLyBlbnRyeVJvdW5kOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMTQKCS8vIGZpcnN0RW1wdHkgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIGZpcnN0RW1wdHk6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjIxNgoJLy8gdGhpcy50b3RhbEFsZ29TdGFrZWQudmFsdWUgKz0gc3Rha2VkQW1vdW50UGF5bWVudC5hbW91bnQKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCSsKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCXN3YXAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjE4CgkvLyByb3VuZHNMZWZ0SW5CaW4gPSB0aGlzLmJpblJvdW5kU3RhcnQudmFsdWUgKyB0aGlzLnJvdW5kc1BlckRheS52YWx1ZSAtIGdsb2JhbHMucm91bmQKCWJ5dGUgMHg2MjY5NmU1MjZmNzU2ZTY0NTM3NDYxNzI3NCAvLyAiYmluUm91bmRTdGFydCIKCWFwcF9nbG9iYWxfZ2V0CglieXRlIDB4NzI2Zjc1NmU2NDczNTA2NTcyNDQ2MTc5IC8vICJyb3VuZHNQZXJEYXkiCglhcHBfZ2xvYmFsX2dldAoJKwoJZ2xvYmFsIFJvdW5kCgktCglmcmFtZV9idXJ5IDIgLy8gcm91bmRzTGVmdEluQmluOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMTkKCS8vIHRoaXMuc3Rha2VBY2N1bXVsYXRvci52YWx1ZSA9CgkvLyAgICAgICAgICAgICB0aGlzLnN0YWtlQWNjdW11bGF0b3IudmFsdWUgKyAoc3Rha2VkQW1vdW50UGF5bWVudC5hbW91bnQgYXMgdWludDEyOCkgKiAocm91bmRzTGVmdEluQmluIGFzIHVpbnQxMjgpCglieXRlIDB4NzM3NDYxNmI2NTQxNjM2Mzc1NmQ3NTZjNjE3NDZmNzIgLy8gInN0YWtlQWNjdW11bGF0b3IiCglkdXAKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWl0b2IKCWZyYW1lX2RpZyAyIC8vIHJvdW5kc0xlZnRJbkJpbjogdWludDY0CglpdG9iCgliKgoJYisKCWR1cAoJYml0bGVuCglpbnQgMTI4Cgk8PQoKCS8vIHRoaXMuc3Rha2VBY2N1bXVsYXRvci52YWx1ZSArIChzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCBhcyB1aW50MTI4KSAqIChyb3VuZHNMZWZ0SW5CaW4gYXMgdWludDEyOCkgb3ZlcmZsb3dlZCAxMjggYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMTYKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjIzCgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3Rha2Vycy52YWx1ZS5sZW5ndGg7IGkgKz0gMSkKCWludCAwCglmcmFtZV9idXJ5IDMgLy8gaTogdWludDY0CgoqZm9yXzA6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMjMKCS8vIGkgPCB0aGlzLnN0YWtlcnMudmFsdWUubGVuZ3RoCglmcmFtZV9kaWcgMyAvLyBpOiB1aW50NjQKCWludCAyMDAKCTwKCWJ6ICpmb3JfMF9lbmQKCgkvLyAqaWYyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjI0CgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDMwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDMwMAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjIyNQoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMl9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMjcKCS8vIGNtcFN0YWtlciA9IGNsb25lKHRoaXMuc3Rha2Vycy52YWx1ZVtpXSkKCWZyYW1lX2RpZyAzIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA2NAoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjI4CgkvLyBjbXBTdGFrZXIuYWNjb3VudCA9PT0gc3Rha2VyCglmcmFtZV9kaWcgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMCAzMgoJZnJhbWVfZGlnIC0yIC8vIHN0YWtlcjogQWRkcmVzcwoJPT0KCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMzAKCS8vIGNtcFN0YWtlci5iYWxhbmNlICs9IHN0YWtlZEFtb3VudFBheW1lbnQuYW1vdW50CglmcmFtZV9kaWcgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWludCAzMiAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgQW1vdW50CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSA0IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjIzMQoJLy8gY21wU3Rha2VyLmVudHJ5Um91bmQgPSBlbnRyeVJvdW5kCglmcmFtZV9kaWcgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWludCA1NiAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgMCAvLyBlbnRyeVJvdW5kOiB1aW50NjQKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDQgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjM0CgkvLyB0aGlzLnN0YWtlcnMudmFsdWVbaV0gPSBjbXBTdGFrZXIKCWZyYW1lX2RpZyAzIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWZyYW1lX2RpZyA0IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyMzYKCS8vIHJldHVybiBlbnRyeVJvdW5kCglmcmFtZV9kaWcgMCAvLyBlbnRyeVJvdW5kOiB1aW50NjQKCWIgKmFkZFN0YWtlKnJldHVybgoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjM4CgkvLyBmaXJzdEVtcHR5ID09PSAwICYmIGNtcFN0YWtlci5hY2NvdW50ID09PSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgMSAvLyBmaXJzdEVtcHR5OiB1aW50NjQKCWludCAwCgk9PQoJZHVwCglieiAqc2tpcF9hbmQyCglmcmFtZV9kaWcgNCAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMCAzMgoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoJJiYKCipza2lwX2FuZDI6CglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjM5CgkvLyBmaXJzdEVtcHR5ID0gaSArIDEKCWZyYW1lX2RpZyAzIC8vIGk6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMSAvLyBmaXJzdEVtcHR5OiB1aW50NjQKCippZjRfZW5kOgoKKmZvcl8wX2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjIzCgkvLyBpICs9IDEKCWZyYW1lX2RpZyAzIC8vIGk6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMyAvLyBpOiB1aW50NjQKCWIgKmZvcl8wCgoqZm9yXzBfZW5kOgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjI0MwoJLy8gZmlyc3RFbXB0eSA9PT0gMAoJZnJhbWVfZGlnIDEgLy8gZmlyc3RFbXB0eTogdWludDY0CglpbnQgMAoJPT0KCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBTdGFraW5nIHBvb2wgZnVsbAoJZXJyCgoqaWY1X2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjI1MAoJLy8gYXNzZXJ0KHN0YWtlZEFtb3VudFBheW1lbnQuYW1vdW50ID49IHRoaXMubWluRW50cnlTdGFrZS52YWx1ZSwgJ211c3Qgc3Rha2UgYXQgbGVhc3QgdGhlIG1pbmltdW0gZm9yIHRoaXMgcG9vbCcpCglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWJ5dGUgMHg2ZDY5NmU0NTZlNzQ3Mjc5NTM3NDYxNmI2NSAvLyAibWluRW50cnlTdGFrZSIKCWFwcF9nbG9iYWxfZ2V0Cgk+PQoKCS8vIG11c3Qgc3Rha2UgYXQgbGVhc3QgdGhlIG1pbmltdW0gZm9yIHRoaXMgcG9vbAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjUyCgkvLyBhc3NlcnQodGhpcy5zdGFrZXJzLnZhbHVlW2ZpcnN0RW1wdHkgLSAxXS5hY2NvdW50ID09PSBnbG9iYWxzLnplcm9BZGRyZXNzKQoJZnJhbWVfZGlnIDEgLy8gZmlyc3RFbXB0eTogdWludDY0CglpbnQgMQoJLQoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCAwCgkrCglpbnQgMzIKCWJ5dGUgMHg3Mzc0NjE2YjY1NzI3MyAvLyAic3Rha2VycyIKCWNvdmVyIDIKCWJveF9leHRyYWN0CglnbG9iYWwgWmVyb0FkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyNTMKCS8vIHRoaXMuc3Rha2Vycy52YWx1ZVtmaXJzdEVtcHR5IC0gMV0gPSB7CgkvLyAgICAgICAgICAgICBhY2NvdW50OiBzdGFrZXIsCgkvLyAgICAgICAgICAgICBiYWxhbmNlOiBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCwKCS8vICAgICAgICAgICAgIHRvdGFsUmV3YXJkZWQ6IDAsCgkvLyAgICAgICAgICAgICByZXdhcmRUb2tlbkJhbGFuY2U6IDAsCgkvLyAgICAgICAgICAgICBlbnRyeVJvdW5kOiBlbnRyeVJvdW5kLAoJLy8gICAgICAgICB9CglmcmFtZV9kaWcgMSAvLyBmaXJzdEVtcHR5OiB1aW50NjQKCWludCAxCgktCglpbnQgNjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJZnJhbWVfZGlnIC0yIC8vIHN0YWtlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgQW1vdW50CglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCgljb25jYXQKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCgljb25jYXQKCWZyYW1lX2RpZyAwIC8vIGVudHJ5Um91bmQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0CglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjI2MAoJLy8gdGhpcy5udW1TdGFrZXJzLnZhbHVlICs9IDEKCWJ5dGUgMHg2ZTc1NmQ1Mzc0NjE2YjY1NzI3MyAvLyAibnVtU3Rha2VycyIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJKwoJYnl0ZSAweDZlNzU2ZDUzNzQ2MTZiNjU3MjczIC8vICJudW1TdGFrZXJzIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyNjEKCS8vIHJldHVybiBlbnRyeVJvdW5kCglmcmFtZV9kaWcgMCAvLyBlbnRyeVJvdW5kOiB1aW50NjQKCiphZGRTdGFrZSpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA0CglyZXRzdWIKCi8vIHJlbW92ZVN0YWtlKGFkZHJlc3MsdWludDY0KXZvaWQKKmFiaV9yb3V0ZV9yZW1vdmVTdGFrZToKCS8vIGFtb3VudFRvVW5zdGFrZTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gc3Rha2VyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDEgKHN0YWtlcikgZm9yIHJlbW92ZVN0YWtlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIHJlbW92ZVN0YWtlKGFkZHJlc3MsdWludDY0KXZvaWQKCWNhbGxzdWIgcmVtb3ZlU3Rha2UKCWludCAxCglyZXR1cm4KCi8vIHJlbW92ZVN0YWtlKHN0YWtlcjogQWRkcmVzcywgYW1vdW50VG9VbnN0YWtlOiB1aW50NjQpOiB2b2lkCi8vCi8vIFJlbW92ZXMgc3Rha2Ugb24gYmVoYWxmIG9mIGNhbGxlciAocmVtb3Zpbmcgb3duIHN0YWtlKS4gIElmIGFueSB0b2tlbiByZXdhcmRzIGV4aXN0LCB0aG9zZSBhcmUgYWx3YXlzIHNlbnQgaW4KLy8gZnVsbC4gQWxzbyBub3RpZmllcyB0aGUgdmFsaWRhdG9yIGNvbnRyYWN0IGZvciB0aGlzIHBvb2xzIHZhbGlkYXRvciBvZiB0aGUgc3Rha2VyIC8gYmFsYW5jZSBjaGFuZ2VzLgovLwovLyBAcGFyYW0ge0FkZHJlc3N9IHN0YWtlciAtIGFjY291bnQgdG8gcmVtb3ZlLiAgbm9ybWFsbHkgc2FtZSBhcyBzZW5kZXIsIGJ1dCB0aGUgdmFsaWRhdG9yIG93bmVyIG9yIG1hbmFnZXIgY2FuIGFsc28gY2FsbAovLyB0aGlzIHRvIHJlbW92ZSB0aGUgc3BlY2lmaWVkIHN0YWtlciBleHBsaWNpdGx5LiBUaGUgcmVtb3ZlZCBzdGFrZSBNVVNUIG9ubHkgZ28gdG8gdGhlIHN0YWtlciBvZiBjb3Vyc2UuICBUaGlzIGlzCi8vIHNvIGEgdmFsaWRhdG9yIGNhbiBzaHV0IGRvd24gYSBwb29vbCBhbmQgcmVmdW5kIHRoZSBzdGFrZXJzLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBraWNrIG91dCBzdGFrZXJzIHdobyBubyBsb25nZXIKLy8gbWVldCB0aGUgZ2F0aW5nIHJlcXVpcmVtZW50cyAoZGV0ZXJtaW5lZCBieSB0aGUgbm9kZSBkYWVtb24pLgovLyBAcGFyYW0ge3VpbnQ2NH0gYW1vdW50VG9VbnN0YWtlIC0gVGhlIGFtb3VudCBvZiBzdGFrZSB0byBiZSByZW1vdmVkLiAgU3BlY2lmeSAwIHRvIHJlbW92ZSBhbGwgc3Rha2UuCi8vIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYWNjb3VudCBoYXMgaW5zdWZmaWNpZW50IGJhbGFuY2Ugb3IgaWYgdGhlIGFjY291bnQgaXMgbm90IGZvdW5kLgpyZW1vdmVTdGFrZToKCXByb3RvIDIgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDYKCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mjc4CgkvLyBzdGFrZXIgIT09IHRoaXMudHhuLnNlbmRlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJdHhuIFNlbmRlcgoJIT0KCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyNzkKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgICAgICB0aGlzLmlzT3duZXJPck1hbmFnZXJDYWxsZXIoKSwKCS8vICAgICAgICAgICAgICAgICAnSWYgc3Rha2VyIGlzIG5vdCBzZW5kZXIgaW4gcmVtb3ZlU3Rha2UgY2FsbCwgdGhlbiBzZW5kZXIgTVVTVCBiZSBvd25lciBvciBtYW5hZ2VyIG9mIHZhbGlkYXRvcicsCgkvLyAgICAgICAgICAgICApCgljYWxsc3ViIGlzT3duZXJPck1hbmFnZXJDYWxsZXIKCgkvLyBJZiBzdGFrZXIgaXMgbm90IHNlbmRlciBpbiByZW1vdmVTdGFrZSBjYWxsLCB0aGVuIHNlbmRlciBNVVNUIGJlIG93bmVyIG9yIG1hbmFnZXIgb2YgdmFsaWRhdG9yCglhc3NlcnQKCippZjZfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mjg1CgkvLyB0aGlzLmNoZWNrSWZCaW5DbG9zZWQoKQoJY2FsbHN1YiBjaGVja0lmQmluQ2xvc2VkCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mjg3CgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3Rha2Vycy52YWx1ZS5sZW5ndGg7IGkgKz0gMSkKCWludCAwCglmcmFtZV9idXJ5IDAgLy8gaTogdWludDY0CgoqZm9yXzE6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyODcKCS8vIGkgPCB0aGlzLnN0YWtlcnMudmFsdWUubGVuZ3RoCglmcmFtZV9kaWcgMCAvLyBpOiB1aW50NjQKCWludCAyMDAKCTwKCWJ6ICpmb3JfMV9lbmQKCgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mjg4CgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDMwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDMwMAoJPAoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjI4OQoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyOTEKCS8vIGNtcFN0YWtlciA9IGNsb25lKHRoaXMuc3Rha2Vycy52YWx1ZVtpXSkKCWZyYW1lX2RpZyAwIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA2NAoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjkyCgkvLyBjbXBTdGFrZXIuYWNjb3VudCA9PT0gc3Rha2VyCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMCAzMgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJPT0KCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MjkzCgkvLyBhbW91bnRUb1Vuc3Rha2UgPT09IDAKCWZyYW1lX2RpZyAtMiAvLyBhbW91bnRUb1Vuc3Rha2U6IHVpbnQ2NAoJaW50IDAKCT09CglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mjk1CgkvLyBhbW91bnRUb1Vuc3Rha2UgPSBjbXBTdGFrZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDMyIDgKCWJ0b2kKCWZyYW1lX2J1cnkgLTIgLy8gYW1vdW50VG9VbnN0YWtlOiB1aW50NjQKCippZjlfZW5kOgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoyOTcKCS8vIGNtcFN0YWtlci5iYWxhbmNlIDwgYW1vdW50VG9VbnN0YWtlCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJZnJhbWVfZGlnIC0yIC8vIGFtb3VudFRvVW5zdGFrZTogdWludDY0Cgk8CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBJbnN1ZmZpY2llbnQgYmFsYW5jZQoJZXJyCgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMDAKCS8vIGNtcFN0YWtlci5iYWxhbmNlIC09IGFtb3VudFRvVW5zdGFrZQoJZnJhbWVfZGlnIDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglpbnQgMzIgLy8gaGVhZE9mZnNldAoJZnJhbWVfZGlnIDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDMyIDgKCWJ0b2kKCWZyYW1lX2RpZyAtMiAvLyBhbW91bnRUb1Vuc3Rha2U6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMDEKCS8vIHRoaXMudG90YWxBbGdvU3Rha2VkLnZhbHVlIC09IGFtb3VudFRvVW5zdGFrZQoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJYXBwX2dsb2JhbF9nZXQKCWZyYW1lX2RpZyAtMiAvLyBhbW91bnRUb1Vuc3Rha2U6IHVpbnQ2NAoJLQoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMDMKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IDAKCWludCAwCglmcmFtZV9idXJ5IDIgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjMwNAoJLy8gY21wU3Rha2VyLnJld2FyZFRva2VuQmFsYW5jZSA+IDAKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglpbnQgMAoJPgoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMDYKCS8vIHRoaXMucG9vbElkLnZhbHVlID09PSAxCglieXRlIDB4NzA2ZjZmNmM0OTY0IC8vICJwb29sSWQiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCT09CglieiAqaWYxMl9lbHNlCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzA3CgkvLyB2YWxpZGF0b3JDb25maWcgPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLmdldFZhbGlkYXRvckNvbmZpZz4oewoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJnZXRWYWxpZGF0b3JDb25maWcodWludDY0KSh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzA4CgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjMwOQoJLy8gbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMyAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjMxNQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhmZXJBc3NldDogQXNzZXRJRC5mcm9tVWludDY0KHZhbGlkYXRvckNvbmZpZy5yZXdhcmRUb2tlbklkKSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldFJlY2VpdmVyOiBzdGFrZXIsCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXRBbW91bnQ6IGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UsCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzE2CgkvLyB4ZmVyQXNzZXQ6IEFzc2V0SUQuZnJvbVVpbnQ2NCh2YWxpZGF0b3JDb25maWcucmV3YXJkVG9rZW5JZCkKCWZyYW1lX2RpZyAzIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE1MyA4CglidG9pCglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjMxNwoJLy8gYXNzZXRSZWNlaXZlcjogc3Rha2VyCglmcmFtZV9kaWcgLTEgLy8gc3Rha2VyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMTgKCS8vIGFzc2V0QW1vdW50OiBjbXBTdGFrZXIucmV3YXJkVG9rZW5CYWxhbmNlCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgNDggOAoJYnRvaQoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMjAKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglmcmFtZV9idXJ5IDIgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMjEKCS8vIGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UgPSAwCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglyZXBsYWNlMiA0OAoJZnJhbWVfYnVyeSAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYiAqaWYxMl9lbmQKCippZjEyX2Vsc2U6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMjYKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglmcmFtZV9idXJ5IDIgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozMjcKCS8vIGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UgPSAwCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglyZXBsYWNlMiA0OAoJZnJhbWVfYnVyeSAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKKmlmMTJfZW5kOgoKKmlmMTFfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzMyCgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICAgICAgICAgIGNtcFN0YWtlci5iYWxhbmNlID09PSAwIHx8IGNtcFN0YWtlci5iYWxhbmNlID49IHRoaXMubWluRW50cnlTdGFrZS52YWx1ZSwKCS8vICAgICAgICAgICAgICAgICAgICAgJ2Nhbm5vdCByZWR1Y2UgYmFsYW5jZSBiZWxvdyBtaW5pbXVtIGFsbG93ZWQgc3Rha2UgdW5sZXNzIGFsbCBpcyByZW1vdmVkJywKCS8vICAgICAgICAgICAgICAgICApCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJaW50IDAKCT09CglkdXAKCWJueiAqc2tpcF9vcjAKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAzMiA4CglidG9pCglieXRlIDB4NmQ2OTZlNDU2ZTc0NzI3OTUzNzQ2MTZiNjUgLy8gIm1pbkVudHJ5U3Rha2UiCglhcHBfZ2xvYmFsX2dldAoJPj0KCXx8Cgoqc2tpcF9vcjA6CgkvLyBjYW5ub3QgcmVkdWNlIGJhbGFuY2UgYmVsb3cgbWluaW11bSBhbGxvd2VkIHN0YWtlIHVubGVzcyBhbGwgaXMgcmVtb3ZlZAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzQwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogYW1vdW50VG9VbnN0YWtlLAoJLy8gICAgICAgICAgICAgICAgICAgICByZWNlaXZlcjogc3Rha2VyLAoJLy8gICAgICAgICAgICAgICAgICAgICBub3RlOiAndW5zdGFrZWQnLAoJLy8gICAgICAgICAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzQxCgkvLyBhbW91bnQ6IGFtb3VudFRvVW5zdGFrZQoJZnJhbWVfZGlnIC0yIC8vIGFtb3VudFRvVW5zdGFrZTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM0MgoJLy8gcmVjZWl2ZXI6IHN0YWtlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM0MwoJLy8gbm90ZTogJ3Vuc3Rha2VkJwoJYnl0ZSAweDc1NmU3Mzc0NjE2YjY1NjQgLy8gInVuc3Rha2VkIgoJaXR4bl9maWVsZCBOb3RlCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM0NQoJLy8gc3Rha2VyUmVtb3ZlZCA9IGZhbHNlCglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIHN0YWtlclJlbW92ZWQ6IGJvb2wKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM0NgoJLy8gY21wU3Rha2VyLmJhbGFuY2UgPT09IDAKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAzMiA4CglidG9pCglpbnQgMAoJPT0KCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM0OAoJLy8gdGhpcy5udW1TdGFrZXJzLnZhbHVlIC09IDEKCWJ5dGUgMHg2ZTc1NmQ1Mzc0NjE2YjY1NzI3MyAvLyAibnVtU3Rha2VycyIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJLQoJYnl0ZSAweDZlNzU2ZDUzNzQ2MTZiNjU3MjczIC8vICJudW1TdGFrZXJzIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozNDkKCS8vIGNtcFN0YWtlci5hY2NvdW50ID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglpbnQgMAoJZ2xvYmFsIFplcm9BZGRyZXNzCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM1MAoJLy8gY21wU3Rha2VyLnRvdGFsUmV3YXJkZWQgPSAwCglmcmFtZV9kaWcgMSAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglyZXBsYWNlMiA0MAoJZnJhbWVfYnVyeSAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM1MQoJLy8gY21wU3Rha2VyLnJld2FyZFRva2VuQmFsYW5jZSA9IDAKCWZyYW1lX2RpZyAxIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCXJlcGxhY2UyIDQ4CglmcmFtZV9idXJ5IDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzUyCgkvLyBzdGFrZXJSZW1vdmVkID0gdHJ1ZQoJaW50IDEKCWZyYW1lX2J1cnkgNCAvLyBzdGFrZXJSZW1vdmVkOiBib29sCgoqaWYxM19lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozNTUKCS8vIHRoaXMuc3Rha2Vycy52YWx1ZVtpXSA9IGNtcFN0YWtlcgoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpbnQgNjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJZnJhbWVfZGlnIDEgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM1NwoJLy8gcm91bmRzTGVmdEluQmluID0gdGhpcy5iaW5Sb3VuZFN0YXJ0LnZhbHVlICsgdGhpcy5yb3VuZHNQZXJEYXkudmFsdWUgLSBnbG9iYWxzLnJvdW5kCglieXRlIDB4NjI2OTZlNTI2Zjc1NmU2NDUzNzQ2MTcyNzQgLy8gImJpblJvdW5kU3RhcnQiCglhcHBfZ2xvYmFsX2dldAoJYnl0ZSAweDcyNmY3NTZlNjQ3MzUwNjU3MjQ0NjE3OSAvLyAicm91bmRzUGVyRGF5IgoJYXBwX2dsb2JhbF9nZXQKCSsKCWdsb2JhbCBSb3VuZAoJLQoJZnJhbWVfYnVyeSA1IC8vIHJvdW5kc0xlZnRJbkJpbjogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzU4CgkvLyBzdWJ0cmFjdEFtb3VudDogdWludDEyOCA9IChhbW91bnRUb1Vuc3Rha2UgYXMgdWludDEyOCkgKiAocm91bmRzTGVmdEluQmluIGFzIHVpbnQxMjgpCglmcmFtZV9kaWcgLTIgLy8gYW1vdW50VG9VbnN0YWtlOiB1aW50NjQKCWl0b2IKCWZyYW1lX2RpZyA1IC8vIHJvdW5kc0xlZnRJbkJpbjogdWludDY0CglpdG9iCgliKgoJZHVwCgliaXRsZW4KCWludCAxMjgKCTw9CgoJLy8gKGFtb3VudFRvVW5zdGFrZSBhcyB1aW50MTI4KSAqIChyb3VuZHNMZWZ0SW5CaW4gYXMgdWludDEyOCkgb3ZlcmZsb3dlZCAxMjggYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMTYKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWZyYW1lX2J1cnkgNiAvLyBzdWJ0cmFjdEFtb3VudDogdWludDEyOAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM1OQoJLy8gdGhpcy5zdGFrZUFjY3VtdWxhdG9yLnZhbHVlID0gdGhpcy5zdGFrZUFjY3VtdWxhdG9yLnZhbHVlIC0gc3VidHJhY3RBbW91bnQKCWJ5dGUgMHg3Mzc0NjE2YjY1NDE2MzYzNzU2ZDc1NmM2MTc0NmY3MiAvLyAic3Rha2VBY2N1bXVsYXRvciIKCWR1cAoJYXBwX2dsb2JhbF9nZXQKCWZyYW1lX2RpZyA2IC8vIHN1YnRyYWN0QW1vdW50OiB1aW50MTI4CgliLQoJZHVwCgliaXRsZW4KCWludCAxMjgKCTw9CgoJLy8gdGhpcy5zdGFrZUFjY3VtdWxhdG9yLnZhbHVlIC0gc3VidHJhY3RBbW91bnQgb3ZlcmZsb3dlZCAxMjggYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMTYKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzY0CgkvLyBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLnN0YWtlUmVtb3ZlZD4oewoJLy8gICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZSwKCS8vICAgICAgICAgICAgICAgICAgICAgbWV0aG9kQXJnczogWwoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogdGhpcy52YWxpZGF0b3JJZC52YWx1ZSwgcG9vbElkOiB0aGlzLnBvb2xJZC52YWx1ZSwgcG9vbEFwcElkOiB0aGlzLmFwcC5pZCB9LAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VyLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50VG9VbnN0YWtlLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VyUmVtb3ZlZCwKCS8vICAgICAgICAgICAgICAgICAgICAgXSwKCS8vICAgICAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAic3Rha2VSZW1vdmVkKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYWRkcmVzcyx1aW50NjQsdWludDY0LGJvb2wpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzY1CgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM2NgoJLy8gbWV0aG9kQXJnczogWwoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogdGhpcy52YWxpZGF0b3JJZC52YWx1ZSwgcG9vbElkOiB0aGlzLnBvb2xJZC52YWx1ZSwgcG9vbEFwcElkOiB0aGlzLmFwcC5pZCB9LAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VyLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50VG9VbnN0YWtlLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VyUmVtb3ZlZCwKCS8vICAgICAgICAgICAgICAgICAgICAgXQoJYnl0ZSAweDc2NjE2YzY5NjQ2MTc0NmY3MjQ5NjQgLy8gInZhbGlkYXRvcklkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCgljb25jYXQKCXR4bmEgQXBwbGljYXRpb25zIDAKCWl0b2IKCWNvbmNhdAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTIgLy8gYW1vdW50VG9VbnN0YWtlOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMiAvLyBhbW91bnRSZXdhcmRUb2tlblJlbW92ZWQ6IHVpbnQ2NAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyA0IC8vIHN0YWtlclJlbW92ZWQ6IGJvb2wKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozNzQKCS8vIHJldHVybgoJcmV0c3ViCgoqaWY4X2VuZDoKCipmb3JfMV9jb250aW51ZToKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjI4NwoJLy8gaSArPSAxCglmcmFtZV9kaWcgMCAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDAgLy8gaTogdWludDY0CgliICpmb3JfMQoKKmZvcl8xX2VuZDoKCS8vIGFjY291bnQgbm90IGZvdW5kCgllcnIKCXJldHN1YgoKLy8gY2xhaW1Ub2tlbnMoKXZvaWQKKmFiaV9yb3V0ZV9jbGFpbVRva2VuczoKCS8vIGV4ZWN1dGUgY2xhaW1Ub2tlbnMoKXZvaWQKCWNhbGxzdWIgY2xhaW1Ub2tlbnMKCWludCAxCglyZXR1cm4KCi8vIGNsYWltVG9rZW5zKCk6IHZvaWQKLy8KLy8gQ2xhaW1zIGFsbCB0aGUgYXZhaWxhYmxlIHJld2FyZCB0b2tlbnMgYSBzdGFrZXIgaGFzIGF2YWlsYWJsZSwgc2VuZGluZyB0aGVpciBlbnRpcmUgYmFsYW5jZSB0byB0aGUgc3Rha2VyIGZyb20KLy8gcG9vbCAxIChlaXRoZXIgZGlyZWN0bHksIG9yIHZpYSB2YWxpZGF0b3ItPnBvb2wxIHRvIHBheSBpdCBvdXQpCi8vIEFsc28gbm90aWZpZXMgdGhlIHZhbGlkYXRvciBjb250cmFjdCBmb3IgdGhpcyBwb29scyB2YWxpZGF0b3Igb2YgdGhlIHN0YWtlciAvIGJhbGFuY2UgY2hhbmdlcy4KY2xhaW1Ub2tlbnM6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mzg5CgkvLyBzdGFrZXIgPSB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWZyYW1lX2J1cnkgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozOTEKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGFrZXJzLnZhbHVlLmxlbmd0aDsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMSAvLyBpOiB1aW50NjQKCipmb3JfMjoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM5MQoJLy8gaSA8IHRoaXMuc3Rha2Vycy52YWx1ZS5sZW5ndGgKCWZyYW1lX2RpZyAxIC8vIGk6IHVpbnQ2NAoJaW50IDIwMAoJPAoJYnogKmZvcl8yX2VuZAoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzkyCgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDMwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDMwMAoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MzkzCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozOTUKCS8vIGNtcFN0YWtlciA9IGNsb25lKHRoaXMuc3Rha2Vycy52YWx1ZVtpXSkKCWZyYW1lX2RpZyAxIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA2NAoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgMiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyAqaWYxNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjM5NgoJLy8gY21wU3Rha2VyLmFjY291bnQgPT09IHN0YWtlcgoJZnJhbWVfZGlnIDIgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDAgMzIKCWZyYW1lX2RpZyAwIC8vIHN0YWtlcjogYWRkcmVzcwoJPT0KCWJ6ICppZjE1X2VuZAoKCS8vICppZjE1X2NvbnNlcXVlbnQKCS8vICppZjE2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Mzk3CgkvLyBjbXBTdGFrZXIucmV3YXJkVG9rZW5CYWxhbmNlID09PSAwCglmcmFtZV9kaWcgMiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgNDggOAoJYnRvaQoJaW50IDAKCT09CglieiAqaWYxNl9lbmQKCgkvLyAqaWYxNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozOTgKCS8vIHJldHVybgoJcmV0c3ViCgoqaWYxNl9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MDAKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IDAKCWludCAwCglmcmFtZV9idXJ5IDMgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyAqaWYxN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQwMgoJLy8gdGhpcy5wb29sSWQudmFsdWUgPT09IDEKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJPT0KCWJ6ICppZjE3X2Vsc2UKCgkvLyAqaWYxN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MDMKCS8vIHZhbGlkYXRvckNvbmZpZyA9IHNlbmRNZXRob2RDYWxsPHR5cGVvZiBWYWxpZGF0b3JSZWdpc3RyeS5wcm90b3R5cGUuZ2V0VmFsaWRhdG9yQ29uZmlnPih7CgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXSwKCS8vICAgICAgICAgICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgImdldFZhbGlkYXRvckNvbmZpZyh1aW50NjQpKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MDQKCS8vIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDA1CgkvLyBtZXRob2RBcmdzOiBbdGhpcy52YWxpZGF0b3JJZC52YWx1ZV0KCWJ5dGUgMHg3NjYxNmM2OTY0NjE3NDZmNzI0OTY0IC8vICJ2YWxpZGF0b3JJZCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCWl0eG4gTnVtTG9ncwoJaW50IDEKCS0KCWl0eG5hcyBMb2dzCglleHRyYWN0IDQgMAoJZnJhbWVfYnVyeSA0IC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDEwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgICAgICAgICAgICAgICAgICB4ZmVyQXNzZXQ6IEFzc2V0SUQuZnJvbVVpbnQ2NCh2YWxpZGF0b3JDb25maWcucmV3YXJkVG9rZW5JZCksCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldFJlY2VpdmVyOiBzdGFrZXIsCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldEFtb3VudDogY21wU3Rha2VyLnJld2FyZFRva2VuQmFsYW5jZSwKCS8vICAgICAgICAgICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQxMQoJLy8geGZlckFzc2V0OiBBc3NldElELmZyb21VaW50NjQodmFsaWRhdG9yQ29uZmlnLnJld2FyZFRva2VuSWQpCglmcmFtZV9kaWcgNCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxNTMgOAoJYnRvaQoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MTIKCS8vIGFzc2V0UmVjZWl2ZXI6IHN0YWtlcgoJZnJhbWVfZGlnIDAgLy8gc3Rha2VyOiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MTMKCS8vIGFzc2V0QW1vdW50OiBjbXBTdGFrZXIucmV3YXJkVG9rZW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgNDggOAoJYnRvaQoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MTUKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglmcmFtZV9idXJ5IDMgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MTYKCS8vIGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UgPSAwCglmcmFtZV9kaWcgMiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglyZXBsYWNlMiA0OAoJZnJhbWVfYnVyeSAyIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYiAqaWYxN19lbmQKCippZjE3X2Vsc2U6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MjEKCS8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCA9IGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglmcmFtZV9idXJ5IDMgLy8gYW1vdW50UmV3YXJkVG9rZW5SZW1vdmVkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MjIKCS8vIGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UgPSAwCglmcmFtZV9kaWcgMiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglyZXBsYWNlMiA0OAoJZnJhbWVfYnVyeSAyIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKKmlmMTdfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDI2CgkvLyB0aGlzLnN0YWtlcnMudmFsdWVbaV0gPSBjbXBTdGFrZXIKCWZyYW1lX2RpZyAxIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWZyYW1lX2RpZyAyIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0MzEKCS8vIHNlbmRNZXRob2RDYWxsPHR5cGVvZiBWYWxpZGF0b3JSZWdpc3RyeS5wcm90b3R5cGUuc3Rha2VSZW1vdmVkPih7CgkvLyAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgICAgICAgICBtZXRob2RBcmdzOiBbCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICB7IGlkOiB0aGlzLnZhbGlkYXRvcklkLnZhbHVlLCBwb29sSWQ6IHRoaXMucG9vbElkLnZhbHVlLCBwb29sQXBwSWQ6IHRoaXMuYXBwLmlkIH0sCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdGFrZXIsCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvLyBubyBhbGdvIHJlbW92ZWQKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZCwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAvLyBzdGFrZXIgaXNuJ3QgYmVpbmcgcmVtb3ZlZC4KCS8vICAgICAgICAgICAgICAgICAgICAgXSwKCS8vICAgICAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAic3Rha2VSZW1vdmVkKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYWRkcmVzcyx1aW50NjQsdWludDY0LGJvb2wpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDMyCgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQzMwoJLy8gbWV0aG9kQXJnczogWwoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogdGhpcy52YWxpZGF0b3JJZC52YWx1ZSwgcG9vbElkOiB0aGlzLnBvb2xJZC52YWx1ZSwgcG9vbEFwcElkOiB0aGlzLmFwcC5pZCB9LAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VyLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgMCwgLy8gbm8gYWxnbyByZW1vdmVkCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnRSZXdhcmRUb2tlblJlbW92ZWQsCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgLy8gc3Rha2VyIGlzbid0IGJlaW5nIHJlbW92ZWQuCgkvLyAgICAgICAgICAgICAgICAgICAgIF0KCWJ5dGUgMHg3NjYxNmM2OTY0NjE3NDZmNzI0OTY0IC8vICJ2YWxpZGF0b3JJZCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglieXRlIDB4NzA2ZjZmNmM0OTY0IC8vICJwb29sSWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJY29uY2F0Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglpdG9iCgljb25jYXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAzIC8vIGFtb3VudFJld2FyZFRva2VuUmVtb3ZlZDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJaW50IDAKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0NDEKCS8vIHJldHVybgoJcmV0c3ViCgoqaWYxNV9lbmQ6CgoqZm9yXzJfY29udGludWU6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czozOTEKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDEgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAxIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzIKCipmb3JfMl9lbmQ6CgkvLyBhY2NvdW50IG5vdCBmb3VuZAoJZXJyCglyZXRzdWIKCi8vIGdldFN0YWtlckluZm8oYWRkcmVzcykoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCiphYmlfcm91dGVfZ2V0U3Rha2VySW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3Rha2VyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHN0YWtlcikgZm9yIGdldFN0YWtlckluZm8gbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgZ2V0U3Rha2VySW5mbyhhZGRyZXNzKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgZ2V0U3Rha2VySW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGdldFN0YWtlckluZm8oc3Rha2VyOiBBZGRyZXNzKTogU3Rha2VkSW5mbwovLwovLyBSZXRyaWV2ZXMgdGhlIHN0YWtlZCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBzdGFrZXIuCi8vCi8vIEBwYXJhbSB7QWRkcmVzc30gc3Rha2VyIC0gVGhlIGFkZHJlc3Mgb2YgdGhlIHN0YWtlci4KLy8gQHJldHVybnMge1N0YWtlZEluZm99IC0gVGhlIHN0YWtlZCBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIHN0YWtlci4KLy8gQHRocm93cyB7RXJyb3J9IC0gSWYgdGhlIHN0YWtlcidzIGFjY291bnQgaXMgbm90IGZvdW5kLgpnZXRTdGFrZXJJbmZvOgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0NTYKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGFrZXJzLnZhbHVlLmxlbmd0aDsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMCAvLyBpOiB1aW50NjQKCipmb3JfMzoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQ1NgoJLy8gaSA8IHRoaXMuc3Rha2Vycy52YWx1ZS5sZW5ndGgKCWZyYW1lX2RpZyAwIC8vIGk6IHVpbnQ2NAoJaW50IDIwMAoJPAoJYnogKmZvcl8zX2VuZAoKCS8vICppZjE4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDU3CgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDIwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDIwMAoJPAoJYnogKmlmMThfZW5kCgoJLy8gKmlmMThfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDU4CgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWYxOF9lbmQ6CgkvLyAqaWYxOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQ2MAoJLy8gdGhpcy5zdGFrZXJzLnZhbHVlW2ldLmFjY291bnQgPT09IHN0YWtlcgoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpbnQgNjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDAKCSsKCWludCAzMgoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZXI6IEFkZHJlc3MKCT09CglieiAqaWYxOV9lbmQKCgkvLyAqaWYxOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0NjEKCS8vIHJldHVybiB0aGlzLnN0YWtlcnMudmFsdWVbaV0KCWZyYW1lX2RpZyAwIC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA2NAoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWIgKmdldFN0YWtlckluZm8qcmV0dXJuCgoqaWYxOV9lbmQ6CgoqZm9yXzNfY29udGludWU6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0NTYKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDAgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAwIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzMKCipmb3JfM19lbmQ6CgkvLyBhY2NvdW50IG5vdCBmb3VuZAoJZXJyCgoqZ2V0U3Rha2VySW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gcGF5VG9rZW5SZXdhcmQoYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQKKmFiaV9yb3V0ZV9wYXlUb2tlblJld2FyZDoKCS8vIGFtb3VudFRvU2VuZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgoJLy8gcmV3YXJkVG9rZW46IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHN0YWtlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAyIChzdGFrZXIpIGZvciBwYXlUb2tlblJld2FyZCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBwYXlUb2tlblJld2FyZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQpdm9pZAoJY2FsbHN1YiBwYXlUb2tlblJld2FyZAoJaW50IDEKCXJldHVybgoKLy8gcGF5VG9rZW5SZXdhcmQoc3Rha2VyOiBBZGRyZXNzLCByZXdhcmRUb2tlbjogdWludDY0LCBhbW91bnRUb1NlbmQ6IHVpbnQ2NCk6IHZvaWQKLy8KLy8gW0ludGVybmFsIHByb3RvY29sIG1ldGhvZF0gUmVtb3ZlIGEgc3BlY2lmaWVkIGFtb3VudCBvZiAnY29tbXVuaXR5IHRva2VuJyByZXdhcmRzIGZvciBhIHN0YWtlci4KLy8gVGhpcyBjYW4gT05MWSBiZSBjYWxsZWQgYnkgb3VyIHZhbGlkYXRvciBhbmQgb25seSBpZiB3ZSdyZSBwb29sIDEgLSB3aXRoIHRoZSB0b2tlbi4KLy8gTm90ZTogdGhpcyBjYW4gYWxzbyBiZSBjYWxsZWQgYnkgdmFsaWRhdG9yIGFzIHBhcnQgb2YgT1dORVIgd2FudGluZyB0byBzZW5kIHRoZSByZXdhcmQgdG9rZW5zCi8vIHNvbWV3aGVyZSBlbHNlIChpZSBpZiB0aGV5J3JlIHN1bnNldHRpbmcgdGhlaXIgdmFsaWRhdG9yIGFuZCBuZWVkIHRoZSByZXdhcmQgdG9rZW5zIGJhY2spLgovLyBJdCdzIHVwIHRvIHRoZSB2YWxpZGF0b3IgdG8gZW5zdXJlIHRoYXQgdGhlIGJhbGFuY2UgaW4gcmV3YXJkVG9rZW5IZWxkQmFjayBpcyBob25vcmVkLgovLyBAcGFyYW0gc3Rha2VyIC0gdGhlIHN0YWtlciBhY2NvdW50IHRvIHNlbmQgcmV3YXJkcyB0bwovLyBAcGFyYW0gcmV3YXJkVG9rZW4gLSBpZCBvZiByZXdhcmQgdG9rZW4gKHRvIGF2b2lkIHJlLWVudHJhbmN5IGluIGNhbGxpbmcgdmFsaWRhdG9yIGJhY2sgdG8gZ2V0IGlkKQovLyBAcGFyYW0gYW1vdW50VG9TZW5kIC0gYW1vdW50IHRvIHNlbmQgdGhlIHN0YWtlciAodGhlcmUgaXMgc2lnbmlmaWNhbnQgdHJ1c3QgaGVyZSghKSAtIGFsc28gd2h5IG9ubHkgdmFsaWRhdG9yIGNhbiBjYWxsIHVzCnBheVRva2VuUmV3YXJkOgoJcHJvdG8gMyAwCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDc5CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLmFkZHJlc3MsCgkvLyAgICAgICAgICAgICAndGhpcyBjYW4gb25seSBiZSBjYWxsZWQgdmlhIHRoZSB2YWxpZGF0b3IgY29udHJhY3QnLAoJLy8gICAgICAgICApCgl0eG4gU2VuZGVyCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJcG9wCgk9PQoKCS8vIHRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIHZpYSB0aGUgdmFsaWRhdG9yIGNvbnRyYWN0Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0ODMKCS8vIGFzc2VydCh0aGlzLnBvb2xJZC52YWx1ZSA9PT0gMSwgJ211c3QgYmUgcG9vbCAxIGluIG9yZGVyIHRvIGJlIGNhbGxlZCB0byBwYXkgb3V0IHRva2VuIHJld2FyZHMnKQoJYnl0ZSAweDcwNmY2ZjZjNDk2NCAvLyAicG9vbElkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgk9PQoKCS8vIG11c3QgYmUgcG9vbCAxIGluIG9yZGVyIHRvIGJlIGNhbGxlZCB0byBwYXkgb3V0IHRva2VuIHJld2FyZHMKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQ4NAoJLy8gYXNzZXJ0KHJld2FyZFRva2VuICE9PSAwLCAnY2FuIG9ubHkgY2xhaW0gdG9rZW4gcmV3YXJkcyBmcm9tIHZhbGlkYXRvciB0aGF0IGhhcyB0aGVtJykKCWZyYW1lX2RpZyAtMiAvLyByZXdhcmRUb2tlbjogdWludDY0CglpbnQgMAoJIT0KCgkvLyBjYW4gb25seSBjbGFpbSB0b2tlbiByZXdhcmRzIGZyb20gdmFsaWRhdG9yIHRoYXQgaGFzIHRoZW0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQ4NwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICAgICAgeGZlckFzc2V0OiBBc3NldElELmZyb21VaW50NjQocmV3YXJkVG9rZW4pLAoJLy8gICAgICAgICAgICAgYXNzZXRSZWNlaXZlcjogc3Rha2VyLAoJLy8gICAgICAgICAgICAgYXNzZXRBbW91bnQ6IGFtb3VudFRvU2VuZCwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjQ4OAoJLy8geGZlckFzc2V0OiBBc3NldElELmZyb21VaW50NjQocmV3YXJkVG9rZW4pCglmcmFtZV9kaWcgLTIgLy8gcmV3YXJkVG9rZW46IHVpbnQ2NAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo0ODkKCS8vIGFzc2V0UmVjZWl2ZXI6IHN0YWtlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NDkwCgkvLyBhc3NldEFtb3VudDogYW1vdW50VG9TZW5kCglmcmFtZV9kaWcgLTMgLy8gYW1vdW50VG9TZW5kOiB1aW50NjQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFsZ29kVmVyKHN0cmluZyl2b2lkCiphYmlfcm91dGVfdXBkYXRlQWxnb2RWZXI6CgkvLyBhbGdvZFZlcjogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoKCS8vIGV4ZWN1dGUgdXBkYXRlQWxnb2RWZXIoc3RyaW5nKXZvaWQKCWNhbGxzdWIgdXBkYXRlQWxnb2RWZXIKCWludCAxCglyZXR1cm4KCi8vIHVwZGF0ZUFsZ29kVmVyKGFsZ29kVmVyOiBzdHJpbmcpOiB2b2lkCi8vCi8vIFVwZGF0ZSB0aGUgKGhvbm9yIHN5c3RlbSkgYWxnb2QgdmVyc2lvbiBmb3IgdGhlIG5vZGUgYXNzb2NpYXRlZCB0byB0aGlzIHBvb2wuICBUaGUgbm9kZSBtYW5hZ2VtZW50IGRhZW1vbgovLyBzaG91bGQgY29tcGFyZSBpdHMgY3VycmVudCBub2RlcyB2ZXJzaW9uIHRvIHRoZSB2ZXJzaW9uIHN0b3JlZCBpbiBnbG9iYWwgc3RhdGUsIHVwZGF0aW5nIHdoZW4gZGlmZmVyZW50LgovLyBUaGUgcmV0aSBub2RlIGRhZW1vbiBjb21wb3NlcyBpdHMgb3duIHZlcnNpb24gc3RyaW5nIHVzaW5nIGZvcm1hdDoKLy8ge21ham9yfS57bWlub3J9LntidWlsZH0ge2JyYW5jaH0gW3tjb21taXQgaGFzaH1dLAovLyBpZTogMy4yMi4wIHJlbC9zdGFibGUgWzZiNTA4OTc1XQovLyBbIE9OTFkgT1dORVIgT1IgTUFOQUdFUiBDQU4gQ0FMTCBdCi8vIEBwYXJhbSB7c3RyaW5nfSBhbGdvZFZlciAtIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFsZ29yYW5kIG5vZGUgZGFlbW9uIHZlcnNpb24gKHJldGkgbm9kZSBkYWVtb24gY29tcG9zZXMgaXRzIG93biBtZXRhIHZlcnNpb24pCnVwZGF0ZUFsZ29kVmVyOgoJcHJvdG8gMSAwCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTA0CgkvLyBhc3NlcnQodGhpcy5pc093bmVyT3JNYW5hZ2VyQ2FsbGVyKCksICdjYW4gb25seSBiZSBjYWxsZWQgYnkgb3duZXIgb3IgbWFuYWdlciBvZiB2YWxpZGF0b3InKQoJY2FsbHN1YiBpc093bmVyT3JNYW5hZ2VyQ2FsbGVyCgoJLy8gY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IG93bmVyIG9yIG1hbmFnZXIgb2YgdmFsaWRhdG9yCglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1MDUKCS8vIHRoaXMuYWxnb2RWZXIudmFsdWUgPSBhbGdvZFZlcgoJYnl0ZSAweDYxNmM2NzZmNjQ1NjY1NzIgLy8gImFsZ29kVmVyIgoJZnJhbWVfZGlnIC0xIC8vIGFsZ29kVmVyOiBzdHJpbmcKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIGVwb2NoQmFsYW5jZVVwZGF0ZSgpdm9pZAoqYWJpX3JvdXRlX2Vwb2NoQmFsYW5jZVVwZGF0ZToKCS8vIGV4ZWN1dGUgZXBvY2hCYWxhbmNlVXBkYXRlKCl2b2lkCgljYWxsc3ViIGVwb2NoQmFsYW5jZVVwZGF0ZQoJaW50IDEKCXJldHVybgoKLy8gZXBvY2hCYWxhbmNlVXBkYXRlKCk6IHZvaWQKLy8KLy8gVXBkYXRlcyB0aGUgYmFsYW5jZSBvZiBzdGFrZXJzIGluIHRoZSBwb29sIGJhc2VkIG9uIHRoZSByZWNlaXZlZCAncmV3YXJkcycgKGN1cnJlbnQgYmFsYW5jZSB2cyBrbm93biBzdGFrZWQgYmFsYW5jZSkKLy8gc3Rha2VycyBvdXRzdGFuZGluZyBiYWxhbmNlIGlzIGFkanVzdGVkIGJhc2VkIG9uIHRoZWlyICUgb2Ygc3Rha2UgYW5kIHRpbWUgaW4gdGhlIGN1cnJlbnQgZXBvY2ggLSBzbyB0aGF0IGJhbGFuY2UKLy8gY29tcG91bmRzIG92ZXIgdGltZSBhbmQgc3Rha2VyIGNhbiByZW1vdmUgdGhhdCBhbW91bnQgYXQgd2lsbC4KLy8gVGhlIHZhbGlkYXRvciBpcyBwYWlkIHRoZWlyIHBlcmNlbnRhZ2UgZWFjaCBlcG9jaCBwYXlvdXQuCi8vCi8vIE5vdGU6IEFOWU9ORSBjYW4gY2FsbCB0aGlzLgplcG9jaEJhbGFuY2VVcGRhdGU6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAzNwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjUxOAoJLy8gdmFsaWRhdG9yQ29uZmlnID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIFZhbGlkYXRvclJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRWYWxpZGF0b3JDb25maWc+KHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiZ2V0VmFsaWRhdG9yQ29uZmlnKHVpbnQ2NCkodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjUxOQoJLy8gYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUKCWJ5dGUgMHg2MzcyNjU2MTc0NmY3MjQxNzA3MCAvLyAiY3JlYXRvckFwcCIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1MjAKCS8vIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXQoJYnl0ZSAweDc2NjE2YzY5NjQ2MTc0NmY3MjQ5NjQgLy8gInZhbGlkYXRvcklkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gdmFsaWRhdG9yQ29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1MjcKCS8vIGVwb2NoUm91bmRMZW5ndGggPSB2YWxpZGF0b3JDb25maWcuZXBvY2hSb3VuZExlbmd0aCBhcyB1aW50NjQKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE2OSA0CglidG9pCglmcmFtZV9idXJ5IDEgLy8gZXBvY2hSb3VuZExlbmd0aDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTI4CgkvLyBjdXJSb3VuZCA9IGdsb2JhbHMucm91bmQKCWdsb2JhbCBSb3VuZAoJZnJhbWVfYnVyeSAyIC8vIGN1clJvdW5kOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1MjkKCS8vIHRoaXNFcG9jaEJlZ2luID0gY3VyUm91bmQgLSAoY3VyUm91bmQgJSBlcG9jaFJvdW5kTGVuZ3RoKQoJZnJhbWVfZGlnIDIgLy8gY3VyUm91bmQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gY3VyUm91bmQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDEgLy8gZXBvY2hSb3VuZExlbmd0aDogdWludDY0CgklCgktCglmcmFtZV9idXJ5IDMgLy8gdGhpc0Vwb2NoQmVnaW46IHVpbnQ2NAoKCS8vICppZjIwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTMyCgkvLyB0aGlzLmxhc3RQYXlvdXQuZXhpc3RzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglieXRlIDB4NmM2MTczNzQ1MDYxNzk2Zjc1NzQgLy8gImxhc3RQYXlvdXQiCglhcHBfZ2xvYmFsX2dldF9leAoJc3dhcAoJcG9wCglieiAqaWYyMF9lbmQKCgkvLyAqaWYyMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1MzMKCS8vIGxhc3RQYXlvdXRFcG9jaCA9IHRoaXMubGFzdFBheW91dC52YWx1ZSAtICh0aGlzLmxhc3RQYXlvdXQudmFsdWUgJSBlcG9jaFJvdW5kTGVuZ3RoKQoJYnl0ZSAweDZjNjE3Mzc0NTA2MTc5NmY3NTc0IC8vICJsYXN0UGF5b3V0IgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgMHg2YzYxNzM3NDUwNjE3OTZmNzU3NCAvLyAibGFzdFBheW91dCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgMSAvLyBlcG9jaFJvdW5kTGVuZ3RoOiB1aW50NjQKCSUKCS0KCWZyYW1lX2J1cnkgNCAvLyBsYXN0UGF5b3V0RXBvY2g6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjUzNwoJLy8gYXNzZXJ0KGxhc3RQYXlvdXRFcG9jaCAhPT0gdGhpc0Vwb2NoQmVnaW4sICJjYW4ndCBjYWxsIGVwb2NoQmFsYW5jZVVwZGF0ZSBpbiBzYW1lIGVwb2NoIGFzIHByaW9yIGNhbGwiKQoJZnJhbWVfZGlnIDQgLy8gbGFzdFBheW91dEVwb2NoOiB1aW50NjQKCWZyYW1lX2RpZyAzIC8vIHRoaXNFcG9jaEJlZ2luOiB1aW50NjQKCSE9CgoJLy8gY2FuJ3QgY2FsbCBlcG9jaEJhbGFuY2VVcGRhdGUgaW4gc2FtZSBlcG9jaCBhcyBwcmlvciBjYWxsCglhc3NlcnQKCippZjIwX2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU0MAoJLy8gdGhpcy5jaGVja0lmQmluQ2xvc2VkKCkKCWNhbGxzdWIgY2hlY2tJZkJpbkNsb3NlZAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU0MwoJLy8gdGhpcy5sYXN0UGF5b3V0LnZhbHVlID0gY3VyUm91bmQKCWJ5dGUgMHg2YzYxNzM3NDUwNjE3OTZmNzU3NCAvLyAibGFzdFBheW91dCIKCWZyYW1lX2RpZyAyIC8vIGN1clJvdW5kOiB1aW50NjQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTQ0CgkvLyB0aGlzLmVwb2NoTnVtYmVyLnZhbHVlICs9IDEKCWJ5dGUgMHg2NTcwNmY2MzY4NGU3NTZkNjI2NTcyIC8vICJlcG9jaE51bWJlciIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJKwoJYnl0ZSAweDY1NzA2ZjYzNjg0ZTc1NmQ2MjY1NzIgLy8gImVwb2NoTnVtYmVyIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1NDkKCS8vIGlzVG9rZW5FbGlnaWJsZSA9IHZhbGlkYXRvckNvbmZpZy5yZXdhcmRUb2tlbklkICE9PSAwCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxNTMgOAoJYnRvaQoJaW50IDAKCSE9CglmcmFtZV9idXJ5IDUgLy8gaXNUb2tlbkVsaWdpYmxlOiBib29sCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTUwCgkvLyBwb29sT25lQXBwSUQgPSB0aGlzLmFwcC5pZAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJZnJhbWVfYnVyeSA2IC8vIHBvb2xPbmVBcHBJRDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTUxCgkvLyBwb29sT25lQWRkcmVzcyA9IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9idXJ5IDcgLy8gcG9vbE9uZUFkZHJlc3M6IGFkZHJlc3MKCgkvLyAqaWYyMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU1NgoJLy8gaXNUb2tlbkVsaWdpYmxlCglmcmFtZV9kaWcgNSAvLyBpc1Rva2VuRWxpZ2libGU6IGJvb2wKCWJ6ICppZjIxX2VuZAoKCS8vICppZjIxX2NvbnNlcXVlbnQKCS8vICppZjIyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTU3CgkvLyB0aGlzLnBvb2xJZC52YWx1ZSAhPT0gMQoJYnl0ZSAweDcwNmY2ZjZjNDk2NCAvLyAicG9vbElkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgkhPQoJYnogKmlmMjJfZW5kCgoJLy8gKmlmMjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTU5CgkvLyBwb29sT25lQXBwSUQgPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLmdldFBvb2xBcHBJZD4oewoJLy8gICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZSwKCS8vICAgICAgICAgICAgICAgICAgICAgbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWUsIDFdLAoJLy8gICAgICAgICAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJnZXRQb29sQXBwSWQodWludDY0LHVpbnQ2NCl1aW50NjQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU2MAoJLy8gYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUKCWJ5dGUgMHg2MzcyNjU2MTc0NmY3MjQxNzA3MCAvLyAiY3JlYXRvckFwcCIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1NjEKCS8vIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlLCAxXQoJYnl0ZSAweDc2NjE2YzY5NjQ2MTc0NmY3MjQ5NjQgLy8gInZhbGlkYXRvcklkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMQoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWJ0b2kKCWZyYW1lX2J1cnkgNiAvLyBwb29sT25lQXBwSUQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU2MwoJLy8gcG9vbE9uZUFkZHJlc3MgPSBBcHBJRC5mcm9tVWludDY0KHBvb2xPbmVBcHBJRCkuYWRkcmVzcwoJZnJhbWVfZGlnIDYgLy8gcG9vbE9uZUFwcElEOiB1aW50NjQKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJZnJhbWVfYnVyeSA3IC8vIHBvb2xPbmVBZGRyZXNzOiBhZGRyZXNzCgoqaWYyMl9lbmQ6CgkvLyAqaWYyM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU2OAoJLy8gdGhpcy5wb29sSWQudmFsdWUgPT09IDEKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJPT0KCWJ6ICppZjIzX2Vsc2UKCgkvLyAqaWYyM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1NjkKCS8vIHRva2VuUGF5b3V0UmF0aW8gPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLnNldFRva2VuUGF5b3V0UmF0aW8+KHsKCS8vICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUsCgkvLyAgICAgICAgICAgICAgICAgICAgIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXSwKCS8vICAgICAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAic2V0VG9rZW5QYXlvdXRSYXRpbyh1aW50NjQpKHVpbnQ2NFsyNF0sdWludDY0KSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTcwCgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU3MQoJLy8gbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgOCAvLyB0b2tlblBheW91dFJhdGlvOiBQb29sVG9rZW5QYXlvdXRSYXRpbwoJYiAqaWYyM19lbmQKCippZjIzX2Vsc2U6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1NzUKCS8vIHRva2VuUGF5b3V0UmF0aW8gPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgU3Rha2luZ1Bvb2wucHJvdG90eXBlLnByb3hpZWRTZXRUb2tlblBheW91dFJhdGlvPih7CgkvLyAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQocG9vbE9uZUFwcElEKSwKCS8vICAgICAgICAgICAgICAgICAgICAgbWV0aG9kQXJnczogW3sgaWQ6IHRoaXMudmFsaWRhdG9ySWQudmFsdWUsIHBvb2xJZDogdGhpcy5wb29sSWQudmFsdWUsIHBvb2xBcHBJZDogdGhpcy5hcHAuaWQgfV0sCgkvLyAgICAgICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgInByb3hpZWRTZXRUb2tlblBheW91dFJhdGlvKCh1aW50NjQsdWludDY0LHVpbnQ2NCkpKHVpbnQ2NFsyNF0sdWludDY0KSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTc2CgkvLyBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHBvb2xPbmVBcHBJRCkKCWZyYW1lX2RpZyA2IC8vIHBvb2xPbmVBcHBJRDogdWludDY0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1NzcKCS8vIG1ldGhvZEFyZ3M6IFt7IGlkOiB0aGlzLnZhbGlkYXRvcklkLnZhbHVlLCBwb29sSWQ6IHRoaXMucG9vbElkLnZhbHVlLCBwb29sQXBwSWQ6IHRoaXMuYXBwLmlkIH1dCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJYnl0ZSAweDcwNmY2ZjZjNDk2NCAvLyAicG9vbElkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWNvbmNhdAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJaXRvYgoJY29uY2F0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCWl0eG4gTnVtTG9ncwoJaW50IDEKCS0KCWl0eG5hcyBMb2dzCglleHRyYWN0IDQgMAoJZnJhbWVfYnVyeSA4IC8vIHRva2VuUGF5b3V0UmF0aW86IFBvb2xUb2tlblBheW91dFJhdGlvCgoqaWYyM19lbmQ6CgoqaWYyMV9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1ODQKCS8vIHZhbGlkYXRvclN0YXRlID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIFZhbGlkYXRvclJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRWYWxpZGF0b3JTdGF0ZT4oewoJLy8gICAgICAgICAgICAgYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUsCgkvLyAgICAgICAgICAgICBtZXRob2RBcmdzOiBbdGhpcy52YWxpZGF0b3JJZC52YWx1ZV0sCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJnZXRWYWxpZGF0b3JTdGF0ZSh1aW50NjQpKHVpbnQxNix1aW50NjQsdWludDY0LHVpbnQ2NCkiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjU4NQoJLy8gYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUKCWJ5dGUgMHg2MzcyNjU2MTc0NmY3MjQxNzA3MCAvLyAiY3JlYXRvckFwcCIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo1ODYKCS8vIG1ldGhvZEFyZ3M6IFt0aGlzLnZhbGlkYXRvcklkLnZhbHVlXQoJYnl0ZSAweDc2NjE2YzY5NjQ2MTc0NmY3MjQ5NjQgLy8gInZhbGlkYXRvcklkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDkgLy8gdmFsaWRhdG9yU3RhdGU6ICh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTg4CgkvLyByZXdhcmRUb2tlbkhlbGRCYWNrID0gdmFsaWRhdG9yU3RhdGUucmV3YXJkVG9rZW5IZWxkQmFjawoJZnJhbWVfZGlnIDkgLy8gdmFsaWRhdG9yU3RhdGU6ICh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE4IDgKCWJ0b2kKCWZyYW1lX2J1cnkgMTAgLy8gcmV3YXJkVG9rZW5IZWxkQmFjazogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTk0CgkvLyBhbGdvUmV3YXJkQXZhaWwgPSB0aGlzLmFwcC5hZGRyZXNzLmJhbGFuY2UgLSB0aGlzLnRvdGFsQWxnb1N0YWtlZC52YWx1ZSAtIHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglieXRlIDB4NzM3NDYxNmI2NTY0IC8vICJzdGFrZWQiCglhcHBfZ2xvYmFsX2dldAoJLQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglmcmFtZV9idXJ5IDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTk1CgkvLyBpc1Bvb2xTYXR1cmF0ZWQgPSBmYWxzZQoJaW50IDAKCWZyYW1lX2J1cnkgMTIgLy8gaXNQb29sU2F0dXJhdGVkOiBib29sCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NTk2CgkvLyBhbGdvU2F0dXJhdGlvbkFtdCA9IHRoaXMuYWxnb1NhdHVyYXRpb25MZXZlbCgpCgljYWxsc3ViIGFsZ29TYXR1cmF0aW9uTGV2ZWwKCWZyYW1lX2J1cnkgMTMgLy8gYWxnb1NhdHVyYXRpb25BbXQ6IHVpbnQ2NAoKCS8vICppZjI0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjA0CgkvLyB2YWxpZGF0b3JTdGF0ZS50b3RhbEFsZ29TdGFrZWQgPiBhbGdvU2F0dXJhdGlvbkFtdAoJZnJhbWVfZGlnIDkgLy8gdmFsaWRhdG9yU3RhdGU6ICh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDEwIDgKCWJ0b2kKCWZyYW1lX2RpZyAxMyAvLyBhbGdvU2F0dXJhdGlvbkFtdDogdWludDY0Cgk+CglieiAqaWYyNF9lbmQKCgkvLyAqaWYyNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2MDUKCS8vIGlzUG9vbFNhdHVyYXRlZCA9IHRydWUKCWludCAxCglmcmFtZV9idXJ5IDEyIC8vIGlzUG9vbFNhdHVyYXRlZDogYm9vbAoKKmlmMjRfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjExCgkvLyB0b2tlblJld2FyZEF2YWlsID0gMAoJaW50IDAKCWZyYW1lX2J1cnkgMTQgLy8gdG9rZW5SZXdhcmRBdmFpbDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjEyCgkvLyB0b2tlblJld2FyZFBhaWRPdXQgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxNSAvLyB0b2tlblJld2FyZFBhaWRPdXQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjYxMwoJLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxNiAvLyB2YWxpZGF0b3JDb21taXNzaW9uUGFpZE91dDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjE0CgkvLyBleGNlc3NUb0ZlZVNpbmsgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxNyAvLyBleGNlc3NUb0ZlZVNpbms6IHVpbnQ2NAoKCS8vICppZjI1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjE1CgkvLyBpc1Rva2VuRWxpZ2libGUKCWZyYW1lX2RpZyA1IC8vIGlzVG9rZW5FbGlnaWJsZTogYm9vbAoJYnogKmlmMjVfZW5kCgoJLy8gKmlmMjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjE2CgkvLyB0b2tlblJld2FyZEJhbCA9CgkvLyAgICAgICAgICAgICAgICAgcG9vbE9uZUFkZHJlc3MuYXNzZXRCYWxhbmNlKEFzc2V0SUQuZnJvbVVpbnQ2NCh2YWxpZGF0b3JDb25maWcucmV3YXJkVG9rZW5JZCkpIC0gcmV3YXJkVG9rZW5IZWxkQmFjawoJZnJhbWVfZGlnIDcgLy8gcG9vbE9uZUFkZHJlc3M6IGFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE1MyA4CglidG9pCglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEwIC8vIHJld2FyZFRva2VuSGVsZEJhY2s6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSAxOCAvLyB0b2tlblJld2FyZEJhbDogdWludDY0CgoJLy8gKmlmMjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2MjEKCS8vIHRva2VuUmV3YXJkQmFsID49IHZhbGlkYXRvckNvbmZpZy5yZXdhcmRQZXJQYXlvdXQKCWZyYW1lX2RpZyAxOCAvLyB0b2tlblJld2FyZEJhbDogdWludDY0CglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxNjEgOAoJYnRvaQoJPj0KCWJ6ICppZjI2X2VuZAoKCS8vICppZjI2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjYyNwoJLy8gb3VyUG9vbFBjdE9mV2hvbGUgPSB0b2tlblBheW91dFJhdGlvLnBvb2xQY3RPZldob2xlW3RoaXMucG9vbElkLnZhbHVlIC0gMV0KCWZyYW1lX2RpZyA4IC8vIHRva2VuUGF5b3V0UmF0aW86IFBvb2xUb2tlblBheW91dFJhdGlvCglpbnQgMAoJYnl0ZSAweDcwNmY2ZjZjNDk2NCAvLyAicG9vbElkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgktCglpbnQgOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWZyYW1lX2J1cnkgMTkgLy8gb3VyUG9vbFBjdE9mV2hvbGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjYzMAoJLy8gdG9rZW5SZXdhcmRBdmFpbCA9IHdpZGVSYXRpbyhbdmFsaWRhdG9yQ29uZmlnLnJld2FyZFBlclBheW91dCwgb3VyUG9vbFBjdE9mV2hvbGVdLCBbMV8wMDBfMDAwXSkKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE2MSA4CglidG9pCglmcmFtZV9kaWcgMTkgLy8gb3VyUG9vbFBjdE9mV2hvbGU6IHVpbnQ2NAoJbXVsdwoJaW50IDAKCWludCAxXzAwMF8wMDAKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CglmcmFtZV9idXJ5IDE0IC8vIHRva2VuUmV3YXJkQXZhaWw6IHVpbnQ2NAoKKmlmMjZfZW5kOgoKKmlmMjVfZW5kOgoJLy8gKmlmMjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2MzMKCS8vIHRva2VuUmV3YXJkQXZhaWwgPT09IDAKCWZyYW1lX2RpZyAxNCAvLyB0b2tlblJld2FyZEF2YWlsOiB1aW50NjQKCWludCAwCgk9PQoJYnogKmlmMjdfZW5kCgoJLy8gKmlmMjdfY29uc2VxdWVudAoJLy8gKmlmMjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2MzgKCS8vIGFsZ29SZXdhcmRBdmFpbCA8IDFfMDAwXzAwMAoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CglpbnQgMV8wMDBfMDAwCgk8CglieiAqaWYyOF9lbmQKCgkvLyAqaWYyOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2MzkKCS8vIGxvZygnIXRva2VuJiYhbm9hbGdvIHRvIHBheScpCglieXRlIDB4MjE3NDZmNmI2NTZlMjYyNjIxNmU2ZjYxNmM2NzZmMjA3NDZmMjA3MDYxNzkgLy8gIiF0b2tlbiYmIW5vYWxnbyB0byBwYXkiCglsb2cKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2NDAKCS8vIHJldHVybgoJcmV0c3ViCgoqaWYyOF9lbmQ6CgoqaWYyN19lbmQ6CgkvLyAqaWYyOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY0NAoJLy8gaXNQb29sU2F0dXJhdGVkCglmcmFtZV9kaWcgMTIgLy8gaXNQb29sU2F0dXJhdGVkOiBib29sCglieiAqaWYyOV9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vICppZjI5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY0NwoJLy8gZGltaW5pc2hlZFJld2FyZCA9IHdpZGVSYXRpbyhbYWxnb1Jld2FyZEF2YWlsLCBhbGdvU2F0dXJhdGlvbkFtdF0sIFt2YWxpZGF0b3JTdGF0ZS50b3RhbEFsZ29TdGFrZWRdKQoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CglmcmFtZV9kaWcgMTMgLy8gYWxnb1NhdHVyYXRpb25BbXQ6IHVpbnQ2NAoJbXVsdwoJaW50IDAKCWZyYW1lX2RpZyA5IC8vIHZhbGlkYXRvclN0YXRlOiAodWludDE2LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxMCA4CglidG9pCglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAyMCAvLyBkaW1pbmlzaGVkUmV3YXJkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2NDkKCS8vIGV4Y2Vzc1RvRmVlU2luayA9IGFsZ29SZXdhcmRBdmFpbCAtIGRpbWluaXNoZWRSZXdhcmQKCWZyYW1lX2RpZyAxMSAvLyBhbGdvUmV3YXJkQXZhaWw6IHVpbnQ2NAoJZnJhbWVfZGlnIDIwIC8vIGRpbWluaXNoZWRSZXdhcmQ6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSAxNyAvLyBleGNlc3NUb0ZlZVNpbms6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY1MAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgICAgICAgIGFtb3VudDogZXhjZXNzVG9GZWVTaW5rLAoJLy8gICAgICAgICAgICAgICAgIHJlY2VpdmVyOiB0aGlzLmdldEZlZVNpbmsoKSwKCS8vICAgICAgICAgICAgICAgICBub3RlOiAncG9vbCBzYXR1cmF0ZWQsIGV4Y2VzcyB0byBmZWUgc2luaycsCgkvLyAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY1MQoJLy8gYW1vdW50OiBleGNlc3NUb0ZlZVNpbmsKCWZyYW1lX2RpZyAxNyAvLyBleGNlc3NUb0ZlZVNpbms6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2NTIKCS8vIHJlY2VpdmVyOiB0aGlzLmdldEZlZVNpbmsoKQoJY2FsbHN1YiBnZXRGZWVTaW5rCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjUzCgkvLyBub3RlOiAncG9vbCBzYXR1cmF0ZWQsIGV4Y2VzcyB0byBmZWUgc2luaycKCWJ5dGUgMHg3MDZmNmY2YzIwNzM2MTc0NzU3MjYxNzQ2NTY0MmMyMDY1Nzg2MzY1NzM3MzIwNzQ2ZjIwNjY2NTY1MjA3MzY5NmU2YiAvLyAicG9vbCBzYXR1cmF0ZWQsIGV4Y2VzcyB0byBmZWUgc2luayIKCWl0eG5fZmllbGQgTm90ZQoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2NTYKCS8vIGFsZ29SZXdhcmRBdmFpbCA9IGRpbWluaXNoZWRSZXdhcmQKCWZyYW1lX2RpZyAyMCAvLyBkaW1pbmlzaGVkUmV3YXJkOiB1aW50NjQKCWZyYW1lX2J1cnkgMTEgLy8gYWxnb1Jld2FyZEF2YWlsOiB1aW50NjQKCWIgKmlmMjlfZW5kCgoqaWYyOV9lbHNlaWYxX2NvbmRpdGlvbjoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY1NwoJLy8gdmFsaWRhdG9yQ29uZmlnLnBlcmNlbnRUb1ZhbGlkYXRvciAhPT0gMAoJZnJhbWVfZGlnIDAgLy8gdmFsaWRhdG9yQ29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMTczIDQKCWJ0b2kKCWludCAwCgkhPQoJYnogKmlmMjlfZW5kCgoJLy8gKmlmMjlfZWxzZWlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2NjAKCS8vIHZhbGlkYXRvckNvbW1pc3Npb25QYWlkT3V0ID0gd2lkZVJhdGlvKAoJLy8gICAgICAgICAgICAgICAgIFthbGdvUmV3YXJkQXZhaWwsIHZhbGlkYXRvckNvbmZpZy5wZXJjZW50VG9WYWxpZGF0b3IgYXMgdWludDY0XSwKCS8vICAgICAgICAgICAgICAgICBbMV8wMDBfMDAwXSwKCS8vICAgICAgICAgICAgICkKCWZyYW1lX2RpZyAxMSAvLyBhbGdvUmV3YXJkQXZhaWw6IHVpbnQ2NAoJZnJhbWVfZGlnIDAgLy8gdmFsaWRhdG9yQ29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMTczIDQKCWJ0b2kKCW11bHcKCWludCAwCglpbnQgMV8wMDBfMDAwCglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAxNiAvLyB2YWxpZGF0b3JDb21taXNzaW9uUGFpZE91dDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjY2CgkvLyBhbGdvUmV3YXJkQXZhaWwgLT0gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQKCWZyYW1lX2RpZyAxMSAvLyBhbGdvUmV3YXJkQXZhaWw6IHVpbnQ2NAoJZnJhbWVfZGlnIDE2IC8vIHZhbGlkYXRvckNvbW1pc3Npb25QYWlkT3V0OiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgMTEgLy8gYWxnb1Jld2FyZEF2YWlsOiB1aW50NjQKCgkvLyAqaWYzMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY3MwoJLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQgPiAwCglmcmFtZV9kaWcgMTYgLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQ6IHVpbnQ2NAoJaW50IDAKCT4KCWJ6ICppZjMwX2VuZAoKCS8vICppZjMwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY3NgoJLy8gbWFuYWdlclRvcE9mZiA9IDAKCWludCAwCglmcmFtZV9idXJ5IDIxIC8vIG1hbmFnZXJUb3BPZmY6IHVpbnQ2NAoKCS8vICppZjMxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Njc4CgkvLyB2YWxpZGF0b3JDb25maWcubWFuYWdlciAhPT0gdmFsaWRhdG9yQ29uZmlnLnZhbGlkYXRvckNvbW1pc3Npb25BZGRyZXNzICYmCgkvLyAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckNvbmZpZy5tYW5hZ2VyLmJhbGFuY2UgLSB2YWxpZGF0b3JDb25maWcubWFuYWdlci5taW5CYWxhbmNlIDwgMl8xMDBfMDAwCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0MCAzMgoJZnJhbWVfZGlnIDAgLy8gdmFsaWRhdG9yQ29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMTc3IDMyCgkhPQoJZHVwCglieiAqc2tpcF9hbmQzCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JDb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0MCAzMgoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDQwIDMyCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDJfMTAwXzAwMAoJPAoJJiYKCipza2lwX2FuZDM6CglieiAqaWYzMV9lbmQKCgkvLyAqaWYzMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2ODEKCS8vIG1hbmFnZXJUb3BPZmYgPSB2YWxpZGF0b3JDb21taXNzaW9uUGFpZE91dCA8IDJfMTAwXzAwMCA/IHZhbGlkYXRvckNvbW1pc3Npb25QYWlkT3V0IDogMl8xMDBfMDAwCglmcmFtZV9kaWcgMTYgLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQ6IHVpbnQ2NAoJaW50IDJfMTAwXzAwMAoJPAoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgMTYgLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQ6IHVpbnQ2NAoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMl8xMDBfMDAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSAyMSAvLyBtYW5hZ2VyVG9wT2ZmOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2ODIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogbWFuYWdlclRvcE9mZiwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyOiB2YWxpZGF0b3JDb25maWcubWFuYWdlciwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6ICd2YWxpZGF0b3IgcmV3YXJkIHRvIG1hbmFnZXIgZm9yIGZ1bmRpbmcgZXBvY2ggdXBkYXRlcycsCgkvLyAgICAgICAgICAgICAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NjgzCgkvLyBhbW91bnQ6IG1hbmFnZXJUb3BPZmYKCWZyYW1lX2RpZyAyMSAvLyBtYW5hZ2VyVG9wT2ZmOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Njg0CgkvLyByZWNlaXZlcjogdmFsaWRhdG9yQ29uZmlnLm1hbmFnZXIKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDQwIDMyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Njg1CgkvLyBub3RlOiAndmFsaWRhdG9yIHJld2FyZCB0byBtYW5hZ2VyIGZvciBmdW5kaW5nIGVwb2NoIHVwZGF0ZXMnCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyMjA3MjY1Nzc2MTcyNjQyMDc0NmYyMDZkNjE2ZTYxNjc2NTcyMjA2NjZmNzIyMDY2NzU2ZTY0Njk2ZTY3MjA2NTcwNmY2MzY4MjA3NTcwNjQ2MTc0NjU3MyAvLyAidmFsaWRhdG9yIHJld2FyZCB0byBtYW5hZ2VyIGZvciBmdW5kaW5nIGVwb2NoIHVwZGF0ZXMiCglpdHhuX2ZpZWxkIE5vdGUKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYzMV9lbmQ6CgkvLyAqaWYzMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY4OAoJLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQgLSBtYW5hZ2VyVG9wT2ZmID4gMAoJZnJhbWVfZGlnIDE2IC8vIHZhbGlkYXRvckNvbW1pc3Npb25QYWlkT3V0OiB1aW50NjQKCWZyYW1lX2RpZyAyMSAvLyBtYW5hZ2VyVG9wT2ZmOiB1aW50NjQKCS0KCWludCAwCgk+CglieiAqaWYzMl9lbmQKCgkvLyAqaWYzMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2ODkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQgLSBtYW5hZ2VyVG9wT2ZmLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXI6IHZhbGlkYXRvckNvbmZpZy52YWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcywKCS8vICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6ICd2YWxpZGF0b3IgcmV3YXJkJywKCS8vICAgICAgICAgICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2OTAKCS8vIGFtb3VudDogdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQgLSBtYW5hZ2VyVG9wT2ZmCglmcmFtZV9kaWcgMTYgLy8gdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDIxIC8vIG1hbmFnZXJUb3BPZmY6IHVpbnQ2NAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo2OTEKCS8vIHJlY2VpdmVyOiB2YWxpZGF0b3JDb25maWcudmFsaWRhdG9yQ29tbWlzc2lvbkFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvckNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDE3NyAzMgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjY5MgoJLy8gbm90ZTogJ3ZhbGlkYXRvciByZXdhcmQnCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyMjA3MjY1Nzc2MTcyNjQgLy8gInZhbGlkYXRvciByZXdhcmQiCglpdHhuX2ZpZWxkIE5vdGUKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYzMl9lbmQ6CgoqaWYzMF9lbmQ6CgoqaWYyOV9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MDQKCS8vIGluY3JlYXNlZFN0YWtlID0gMAoJaW50IDAKCWZyYW1lX2J1cnkgMjIgLy8gaW5jcmVhc2VkU3Rha2U6IHVpbnQ2NAoKCS8vICppZjMzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzI4CgkvLyBhbGdvUmV3YXJkQXZhaWwgIT09IDAgfHwgdG9rZW5SZXdhcmRBdmFpbCAhPT0gMAoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CglpbnQgMAoJIT0KCWR1cAoJYm56ICpza2lwX29yMQoJZnJhbWVfZGlnIDE0IC8vIHRva2VuUmV3YXJkQXZhaWw6IHVpbnQ2NAoJaW50IDAKCSE9Cgl8fAoKKnNraXBfb3IxOgoJYnogKmlmMzNfZW5kCgoJLy8gKmlmMzNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzI5CgkvLyBwYXJ0aWFsU3Rha2Vyc1RvdGFsU3Rha2U6IHVpbnQ2NCA9IDAKCWludCAwCglmcmFtZV9idXJ5IDIzIC8vIHBhcnRpYWxTdGFrZXJzVG90YWxTdGFrZTogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzMwCgkvLyBvcmlnQWxnb1Jld2FyZCA9IGFsZ29SZXdhcmRBdmFpbAoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CglmcmFtZV9idXJ5IDI0IC8vIG9yaWdBbGdvUmV3YXJkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MzEKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGFrZXJzLnZhbHVlLmxlbmd0aDsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMjUgLy8gaTogdWludDY0CgoqZm9yXzQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MzEKCS8vIGkgPCB0aGlzLnN0YWtlcnMudmFsdWUubGVuZ3RoCglmcmFtZV9kaWcgMjUgLy8gaTogdWludDY0CglpbnQgMjAwCgk8CglieiAqZm9yXzRfZW5kCgoJLy8gKmlmMzRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MzIKCS8vIGdsb2JhbHMub3Bjb2RlQnVkZ2V0IDwgNDAwCglnbG9iYWwgT3Bjb2RlQnVkZ2V0CglpbnQgNDAwCgk8CglieiAqaWYzNF9lbmQKCgkvLyAqaWYzNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MzMKCS8vIGluY3JlYXNlT3Bjb2RlQnVkZ2V0KCkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWJ5dGUgYjY0IENvRUIgLy8gI3ByYWdtYSB2ZXJzaW9uIDEwOyBpbnQgMQoJZHVwCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoJaXR4bl9zdWJtaXQKCippZjM0X2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjczNQoJLy8gY21wU3Rha2VyID0gY2xvbmUodGhpcy5zdGFrZXJzLnZhbHVlW2ldKQoJZnJhbWVfZGlnIDI1IC8vIGk6IHVpbnQ2NAoJaW50IDY0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA2NAoJYnl0ZSAweDczNzQ2MTZiNjU3MjczIC8vICJzdGFrZXJzIgoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gKmlmMzVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3MzYKCS8vIGNtcFN0YWtlci5hY2NvdW50ICE9PSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDAgMzIKCWdsb2JhbCBaZXJvQWRkcmVzcwoJIT0KCWJ6ICppZjM1X2VuZAoKCS8vICppZjM1X2NvbnNlcXVlbnQKCS8vICppZjM2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzM3CgkvLyBjbXBTdGFrZXIuZW50cnlSb3VuZCA+PSB0aGlzRXBvY2hCZWdpbgoJZnJhbWVfZGlnIDI2IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA1NiA4CglidG9pCglmcmFtZV9kaWcgMyAvLyB0aGlzRXBvY2hCZWdpbjogdWludDY0Cgk+PQoJYnogKmlmMzZfZWxzZQoKCS8vICppZjM2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjc0MAoJLy8gcGFydGlhbFN0YWtlcnNUb3RhbFN0YWtlICs9IGNtcFN0YWtlci5iYWxhbmNlCglmcmFtZV9kaWcgMjMgLy8gcGFydGlhbFN0YWtlcnNUb3RhbFN0YWtlOiB1aW50NjQKCWZyYW1lX2RpZyAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJKwoJZnJhbWVfYnVyeSAyMyAvLyBwYXJ0aWFsU3Rha2Vyc1RvdGFsU3Rha2U6IHVpbnQ2NAoJYiAqaWYzNl9lbmQKCippZjM2X2Vsc2U6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NDQKCS8vIHRpbWVJblBvb2wgPSB0aGlzRXBvY2hCZWdpbiAtIGNtcFN0YWtlci5lbnRyeVJvdW5kCglmcmFtZV9kaWcgMyAvLyB0aGlzRXBvY2hCZWdpbjogdWludDY0CglmcmFtZV9kaWcgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDU2IDgKCWJ0b2kKCS0KCWZyYW1lX2J1cnkgMjcgLy8gdGltZUluUG9vbDogdWludDY0CgoJLy8gKmlmMzdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NDgKCS8vIHRpbWVJblBvb2wgPCBlcG9jaFJvdW5kTGVuZ3RoCglmcmFtZV9kaWcgMjcgLy8gdGltZUluUG9vbDogdWludDY0CglmcmFtZV9kaWcgMSAvLyBlcG9jaFJvdW5kTGVuZ3RoOiB1aW50NjQKCTwKCWJ6ICppZjM3X2VuZAoKCS8vICppZjM3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjc0OQoJLy8gcGFydGlhbFN0YWtlcnNUb3RhbFN0YWtlICs9IGNtcFN0YWtlci5iYWxhbmNlCglmcmFtZV9kaWcgMjMgLy8gcGFydGlhbFN0YWtlcnNUb3RhbFN0YWtlOiB1aW50NjQKCWZyYW1lX2RpZyAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJKwoJZnJhbWVfYnVyeSAyMyAvLyBwYXJ0aWFsU3Rha2Vyc1RvdGFsU3Rha2U6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjc1MAoJLy8gdGltZVBlcmNlbnRhZ2UgPSAodGltZUluUG9vbCAqIDEwMDApIC8gZXBvY2hSb3VuZExlbmd0aAoJZnJhbWVfZGlnIDI3IC8vIHRpbWVJblBvb2w6IHVpbnQ2NAoJaW50IDEwMDAKCSoKCWZyYW1lX2RpZyAxIC8vIGVwb2NoUm91bmRMZW5ndGg6IHVpbnQ2NAoJLwoJZnJhbWVfYnVyeSAyOCAvLyB0aW1lUGVyY2VudGFnZTogdWludDY0CgoJLy8gKmlmMzhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NTIKCS8vIHRva2VuUmV3YXJkQXZhaWwgPiAwCglmcmFtZV9kaWcgMTQgLy8gdG9rZW5SZXdhcmRBdmFpbDogdWludDY0CglpbnQgMAoJPgoJYnogKmlmMzhfZW5kCgoJLy8gKmlmMzhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzU0CgkvLyBzdGFrZXJUb2tlblJld2FyZCA9IHdpZGVSYXRpbygKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbXBTdGFrZXIuYmFsYW5jZSwgdG9rZW5SZXdhcmRBdmFpbCwgdGltZVBlcmNlbnRhZ2VdLAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMudG90YWxBbGdvU3Rha2VkLnZhbHVlLCAxMDAwXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoJZnJhbWVfZGlnIDI2IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAzMiA4CglidG9pCglmcmFtZV9kaWcgMTQgLy8gdG9rZW5SZXdhcmRBdmFpbDogdWludDY0CgltdWx3CglmcmFtZV9kaWcgMjggLy8gdGltZVBlcmNlbnRhZ2U6IHVpbnQ2NAoJdW5jb3ZlciAyCglkaWcgMQoJKgoJY292ZXIgMgoJbXVsdwoJY292ZXIgMgoJKwoJc3dhcAoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxMDAwCgltdWx3CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAyOSAvLyBzdGFrZXJUb2tlblJld2FyZDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzYxCgkvLyB0b2tlblJld2FyZEF2YWlsIC09IHN0YWtlclRva2VuUmV3YXJkCglmcmFtZV9kaWcgMTQgLy8gdG9rZW5SZXdhcmRBdmFpbDogdWludDY0CglmcmFtZV9kaWcgMjkgLy8gc3Rha2VyVG9rZW5SZXdhcmQ6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSAxNCAvLyB0b2tlblJld2FyZEF2YWlsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NjIKCS8vIGNtcFN0YWtlci5yZXdhcmRUb2tlbkJhbGFuY2UgKz0gc3Rha2VyVG9rZW5SZXdhcmQKCWZyYW1lX2RpZyAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWludCA0OCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDQ4IDgKCWJ0b2kKCWZyYW1lX2RpZyAyOSAvLyBzdGFrZXJUb2tlblJld2FyZDogdWludDY0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NjMKCS8vIHRva2VuUmV3YXJkUGFpZE91dCArPSBzdGFrZXJUb2tlblJld2FyZAoJZnJhbWVfZGlnIDE1IC8vIHRva2VuUmV3YXJkUGFpZE91dDogdWludDY0CglmcmFtZV9kaWcgMjkgLy8gc3Rha2VyVG9rZW5SZXdhcmQ6IHVpbnQ2NAoJKwoJZnJhbWVfYnVyeSAxNSAvLyB0b2tlblJld2FyZFBhaWRPdXQ6IHVpbnQ2NAoKKmlmMzhfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzY2CgkvLyBzdGFrZXJSZXdhcmQgPSB3aWRlUmF0aW8oCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbXBTdGFrZXIuYmFsYW5jZSwgb3JpZ0FsZ29SZXdhcmQsIHRpbWVQZXJjZW50YWdlXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMudG90YWxBbGdvU3Rha2VkLnZhbHVlLCAxMDAwXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCglmcmFtZV9kaWcgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDMyIDgKCWJ0b2kKCWZyYW1lX2RpZyAyNCAvLyBvcmlnQWxnb1Jld2FyZDogdWludDY0CgltdWx3CglmcmFtZV9kaWcgMjggLy8gdGltZVBlcmNlbnRhZ2U6IHVpbnQ2NAoJdW5jb3ZlciAyCglkaWcgMQoJKgoJY292ZXIgMgoJbXVsdwoJY292ZXIgMgoJKwoJc3dhcAoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxMDAwCgltdWx3CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAzMCAvLyBzdGFrZXJSZXdhcmQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjc3MgoJLy8gYWxnb1Jld2FyZEF2YWlsIC09IHN0YWtlclJld2FyZAoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CglmcmFtZV9kaWcgMzAgLy8gc3Rha2VyUmV3YXJkOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgMTEgLy8gYWxnb1Jld2FyZEF2YWlsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NzUKCS8vIGNtcFN0YWtlci5iYWxhbmNlICs9IHN0YWtlclJld2FyZAoJZnJhbWVfZGlnIDI2IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJaW50IDMyIC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJZnJhbWVfZGlnIDMwIC8vIHN0YWtlclJld2FyZDogdWludDY0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NzYKCS8vIGNtcFN0YWtlci50b3RhbFJld2FyZGVkICs9IHN0YWtlclJld2FyZAoJZnJhbWVfZGlnIDI2IC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJaW50IDQwIC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgNDAgOAoJYnRvaQoJZnJhbWVfZGlnIDMwIC8vIHN0YWtlclJld2FyZDogdWludDY0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyNiAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3NzcKCS8vIGluY3JlYXNlZFN0YWtlICs9IHN0YWtlclJld2FyZAoJZnJhbWVfZGlnIDIyIC8vIGluY3JlYXNlZFN0YWtlOiB1aW50NjQKCWZyYW1lX2RpZyAzMCAvLyBzdGFrZXJSZXdhcmQ6IHVpbnQ2NAoJKwoJZnJhbWVfYnVyeSAyMiAvLyBpbmNyZWFzZWRTdGFrZTogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Nzc5CgkvLyB0aGlzLnN0YWtlcnMudmFsdWVbaV0gPSBjbXBTdGFrZXIKCWZyYW1lX2RpZyAyNSAvLyBpOiB1aW50NjQKCWludCA2NAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglmcmFtZV9kaWcgMjYgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCgljb3ZlciAyCglib3hfcmVwbGFjZQoKKmlmMzdfZW5kOgoKKmlmMzZfZW5kOgoKKmlmMzVfZW5kOgoKKmZvcl80X2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzMxCgkvLyBpICs9IDEKCWZyYW1lX2RpZyAyNSAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDI1IC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzQKCipmb3JfNF9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3ODcKCS8vIG5ld1Bvb2xUb3RhbFN0YWtlID0gdGhpcy50b3RhbEFsZ29TdGFrZWQudmFsdWUgLSBwYXJ0aWFsU3Rha2Vyc1RvdGFsU3Rha2UKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgMjMgLy8gcGFydGlhbFN0YWtlcnNUb3RhbFN0YWtlOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgMzEgLy8gbmV3UG9vbFRvdGFsU3Rha2U6IHVpbnQ2NAoKCS8vICppZjM5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzkxCgkvLyBuZXdQb29sVG90YWxTdGFrZSA+IDAKCWZyYW1lX2RpZyAzMSAvLyBuZXdQb29sVG90YWxTdGFrZTogdWludDY0CglpbnQgMAoJPgoJYnogKmlmMzlfZW5kCgoJLy8gKmlmMzlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzkzCgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3Rha2Vycy52YWx1ZS5sZW5ndGg7IGkgKz0gMSkKCWludCAwCglmcmFtZV9idXJ5IDMyIC8vIGk6IHVpbnQ2NAoKKmZvcl81OgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzkzCgkvLyBpIDwgdGhpcy5zdGFrZXJzLnZhbHVlLmxlbmd0aAoJZnJhbWVfZGlnIDMyIC8vIGk6IHVpbnQ2NAoJaW50IDIwMAoJPAoJYnogKmZvcl81X2VuZAoKCS8vICppZjQwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Nzk0CgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDIwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDIwMAoJPAoJYnogKmlmNDBfZW5kCgoJLy8gKmlmNDBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Nzk1CgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWY0MF9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo3OTcKCS8vIGNtcFN0YWtlciA9IGNsb25lKHRoaXMuc3Rha2Vycy52YWx1ZVtpXSkKCWZyYW1lX2RpZyAzMiAvLyBpOiB1aW50NjQKCWludCA2NAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgNjQKCWJ5dGUgMHg3Mzc0NjE2YjY1NzI3MyAvLyAic3Rha2VycyIKCWNvdmVyIDIKCWJveF9leHRyYWN0CglmcmFtZV9idXJ5IDMzIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoKCS8vICppZjQxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6Nzk4CgkvLyBjbXBTdGFrZXIuYWNjb3VudCAhPT0gZ2xvYmFscy56ZXJvQWRkcmVzcyAmJiBjbXBTdGFrZXIuZW50cnlSb3VuZCA8IHRoaXNFcG9jaEJlZ2luCglmcmFtZV9kaWcgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDAgMzIKCWdsb2JhbCBaZXJvQWRkcmVzcwoJIT0KCWR1cAoJYnogKnNraXBfYW5kNAoJZnJhbWVfZGlnIDMzIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA1NiA4CglidG9pCglmcmFtZV9kaWcgMyAvLyB0aGlzRXBvY2hCZWdpbjogdWludDY0Cgk8CgkmJgoKKnNraXBfYW5kNDoKCWJ6ICppZjQxX2VuZAoKCS8vICppZjQxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjc5OQoJLy8gdGltZUluUG9vbCA9IHRoaXNFcG9jaEJlZ2luIC0gY21wU3Rha2VyLmVudHJ5Um91bmQKCWZyYW1lX2RpZyAzIC8vIHRoaXNFcG9jaEJlZ2luOiB1aW50NjQKCWZyYW1lX2RpZyAzMyAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgNTYgOAoJYnRvaQoJLQoJZnJhbWVfYnVyeSAzNCAvLyB0aW1lSW5Qb29sOiB1aW50NjQKCgkvLyAqaWY0Ml9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjgwMQoJLy8gdGltZUluUG9vbCA+PSBlcG9jaFJvdW5kTGVuZ3RoCglmcmFtZV9kaWcgMzQgLy8gdGltZUluUG9vbDogdWludDY0CglmcmFtZV9kaWcgMSAvLyBlcG9jaFJvdW5kTGVuZ3RoOiB1aW50NjQKCT49CglieiAqaWY0Ml9lbmQKCgkvLyAqaWY0Ml9jb25zZXF1ZW50CgkvLyAqaWY0M19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjgwNgoJLy8gdG9rZW5SZXdhcmRBdmFpbCA+IDAKCWZyYW1lX2RpZyAxNCAvLyB0b2tlblJld2FyZEF2YWlsOiB1aW50NjQKCWludCAwCgk+CglieiAqaWY0M19lbmQKCgkvLyAqaWY0M19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4MDcKCS8vIHN0YWtlclRva2VuUmV3YXJkID0gd2lkZVJhdGlvKAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NtcFN0YWtlci5iYWxhbmNlLCB0b2tlblJld2FyZEF2YWlsXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZXdQb29sVG90YWxTdGFrZV0sCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKCWZyYW1lX2RpZyAzMyAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJZnJhbWVfZGlnIDE0IC8vIHRva2VuUmV3YXJkQXZhaWw6IHVpbnQ2NAoJbXVsdwoJaW50IDAKCWZyYW1lX2RpZyAzMSAvLyBuZXdQb29sVG90YWxTdGFrZTogdWludDY0CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoKCS8vIHdpZGVSYXRpbyBmYWlsZWQKCWFzc2VydAoJZnJhbWVfYnVyeSAzNSAvLyBzdGFrZXJUb2tlblJld2FyZDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODEzCgkvLyBjbXBTdGFrZXIucmV3YXJkVG9rZW5CYWxhbmNlICs9IHN0YWtlclRva2VuUmV3YXJkCglmcmFtZV9kaWcgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglpbnQgNDggLy8gaGVhZE9mZnNldAoJZnJhbWVfZGlnIDMzIC8vIGNtcFN0YWtlcjogKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCA0OCA4CglidG9pCglmcmFtZV9kaWcgMzUgLy8gc3Rha2VyVG9rZW5SZXdhcmQ6IHVpbnQ2NAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODE0CgkvLyB0b2tlblJld2FyZFBhaWRPdXQgKz0gc3Rha2VyVG9rZW5SZXdhcmQKCWZyYW1lX2RpZyAxNSAvLyB0b2tlblJld2FyZFBhaWRPdXQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDM1IC8vIHN0YWtlclRva2VuUmV3YXJkOiB1aW50NjQKCSsKCWZyYW1lX2J1cnkgMTUgLy8gdG9rZW5SZXdhcmRQYWlkT3V0OiB1aW50NjQKCippZjQzX2VuZDoKCS8vICppZjQ0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODE2CgkvLyBhbGdvUmV3YXJkQXZhaWwgPiAwCglmcmFtZV9kaWcgMTEgLy8gYWxnb1Jld2FyZEF2YWlsOiB1aW50NjQKCWludCAwCgk+CglieiAqaWY0NF9lbmQKCgkvLyAqaWY0NF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4MTcKCS8vIHN0YWtlclJld2FyZCA9IHdpZGVSYXRpbygKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbXBTdGFrZXIuYmFsYW5jZSwgYWxnb1Jld2FyZEF2YWlsXSwKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZXdQb29sVG90YWxTdGFrZV0sCgkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKCWZyYW1lX2RpZyAzMyAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMzIgOAoJYnRvaQoJZnJhbWVfZGlnIDExIC8vIGFsZ29SZXdhcmRBdmFpbDogdWludDY0CgltdWx3CglpbnQgMAoJZnJhbWVfZGlnIDMxIC8vIG5ld1Bvb2xUb3RhbFN0YWtlOiB1aW50NjQKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CglmcmFtZV9idXJ5IDM2IC8vIHN0YWtlclJld2FyZDogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODIzCgkvLyBjbXBTdGFrZXIuYmFsYW5jZSArPSBzdGFrZXJSZXdhcmQKCWZyYW1lX2RpZyAzMyAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWludCAzMiAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDMyIDgKCWJ0b2kKCWZyYW1lX2RpZyAzNiAvLyBzdGFrZXJSZXdhcmQ6IHVpbnQ2NAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODI0CgkvLyBjbXBTdGFrZXIudG90YWxSZXdhcmRlZCArPSBzdGFrZXJSZXdhcmQKCWZyYW1lX2RpZyAzMyAvLyBjbXBTdGFrZXI6IChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKCWludCA0MCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDQwIDgKCWJ0b2kKCWZyYW1lX2RpZyAzNiAvLyBzdGFrZXJSZXdhcmQ6IHVpbnQ2NAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODI1CgkvLyBpbmNyZWFzZWRTdGFrZSArPSBzdGFrZXJSZXdhcmQKCWZyYW1lX2RpZyAyMiAvLyBpbmNyZWFzZWRTdGFrZTogdWludDY0CglmcmFtZV9kaWcgMzYgLy8gc3Rha2VyUmV3YXJkOiB1aW50NjQKCSsKCWZyYW1lX2J1cnkgMjIgLy8gaW5jcmVhc2VkU3Rha2U6IHVpbnQ2NAoKKmlmNDRfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODI5CgkvLyB0aGlzLnN0YWtlcnMudmFsdWVbaV0gPSBjbXBTdGFrZXIKCWZyYW1lX2RpZyAzMiAvLyBpOiB1aW50NjQKCWludCA2NAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglmcmFtZV9kaWcgMzMgLy8gY21wU3Rha2VyOiAoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCglieXRlIDB4NzM3NDYxNmI2NTcyNzMgLy8gInN0YWtlcnMiCgljb3ZlciAyCglib3hfcmVwbGFjZQoKKmlmNDJfZW5kOgoKKmlmNDFfZW5kOgoKKmZvcl81X2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6NzkzCgkvLyBpICs9IDEKCWZyYW1lX2RpZyAzMiAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDMyIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzUKCipmb3JfNV9lbmQ6CgoqaWYzOV9lbmQ6CgoqaWYzM19lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4MzkKCS8vIHJvdW5kc0xlZnRJbkJpbiA9IHRoaXMuYmluUm91bmRTdGFydC52YWx1ZSArIHRoaXMucm91bmRzUGVyRGF5LnZhbHVlIC0gZ2xvYmFscy5yb3VuZAoJYnl0ZSAweDYyNjk2ZTUyNmY3NTZlNjQ1Mzc0NjE3Mjc0IC8vICJiaW5Sb3VuZFN0YXJ0IgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgMHg3MjZmNzU2ZTY0NzM1MDY1NzI0NDYxNzkgLy8gInJvdW5kc1BlckRheSIKCWFwcF9nbG9iYWxfZ2V0CgkrCglnbG9iYWwgUm91bmQKCS0KCWZyYW1lX2J1cnkgMzcgLy8gcm91bmRzTGVmdEluQmluOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4NDAKCS8vIHRoaXMudG90YWxBbGdvU3Rha2VkLnZhbHVlICs9IGluY3JlYXNlZFN0YWtlCglieXRlIDB4NzM3NDYxNmI2NTY0IC8vICJzdGFrZWQiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIDIyIC8vIGluY3JlYXNlZFN0YWtlOiB1aW50NjQKCSsKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCXN3YXAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODQxCgkvLyB0aGlzLnN0YWtlQWNjdW11bGF0b3IudmFsdWUgPQoJLy8gICAgICAgICAgICAgdGhpcy5zdGFrZUFjY3VtdWxhdG9yLnZhbHVlICsgKGluY3JlYXNlZFN0YWtlIGFzIHVpbnQxMjgpICogKHJvdW5kc0xlZnRJbkJpbiBhcyB1aW50MTI4KQoJYnl0ZSAweDczNzQ2MTZiNjU0MTYzNjM3NTZkNzU2YzYxNzQ2ZjcyIC8vICJzdGFrZUFjY3VtdWxhdG9yIgoJZHVwCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIDIyIC8vIGluY3JlYXNlZFN0YWtlOiB1aW50NjQKCWl0b2IKCWZyYW1lX2RpZyAzNyAvLyByb3VuZHNMZWZ0SW5CaW46IHVpbnQ2NAoJaXRvYgoJYioKCWIrCglkdXAKCWJpdGxlbgoJaW50IDEyOAoJPD0KCgkvLyB0aGlzLnN0YWtlQWNjdW11bGF0b3IudmFsdWUgKyAoaW5jcmVhc2VkU3Rha2UgYXMgdWludDEyOCkgKiAocm91bmRzTGVmdEluQmluIGFzIHVpbnQxMjgpIG92ZXJmbG93ZWQgMTI4IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDE2CgktCglzd2FwCglzdWJzdHJpbmczCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg0MwoJLy8gdGhpcy5yZXdhcmRBY2N1bXVsYXRvci52YWx1ZSA9IHRoaXMucmV3YXJkQWNjdW11bGF0b3IudmFsdWUgKyBpbmNyZWFzZWRTdGFrZQoJYnl0ZSAweDcyNjU3NzYxNzI2NDQxNjM2Mzc1NmQ3NTZjNjE3NDZmNzIgLy8gInJld2FyZEFjY3VtdWxhdG9yIgoJZHVwCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIDIyIC8vIGluY3JlYXNlZFN0YWtlOiB1aW50NjQKCSsKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODQ5CgkvLyBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLnN0YWtlVXBkYXRlZFZpYVJld2FyZHM+KHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgbWV0aG9kQXJnczogWwoJLy8gICAgICAgICAgICAgICAgIHsgaWQ6IHRoaXMudmFsaWRhdG9ySWQudmFsdWUsIHBvb2xJZDogdGhpcy5wb29sSWQudmFsdWUsIHBvb2xBcHBJZDogdGhpcy5hcHAuaWQgfSwKCS8vICAgICAgICAgICAgICAgICBpbmNyZWFzZWRTdGFrZSwKCS8vICAgICAgICAgICAgICAgICB0b2tlblJld2FyZFBhaWRPdXQsCgkvLyAgICAgICAgICAgICAgICAgdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQsCgkvLyAgICAgICAgICAgICAgICAgZXhjZXNzVG9GZWVTaW5rLAoJLy8gICAgICAgICAgICAgXSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgInN0YWtlVXBkYXRlZFZpYVJld2FyZHMoKHVpbnQ2NCx1aW50NjQsdWludDY0KSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODUwCgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg1MQoJLy8gbWV0aG9kQXJnczogWwoJLy8gICAgICAgICAgICAgICAgIHsgaWQ6IHRoaXMudmFsaWRhdG9ySWQudmFsdWUsIHBvb2xJZDogdGhpcy5wb29sSWQudmFsdWUsIHBvb2xBcHBJZDogdGhpcy5hcHAuaWQgfSwKCS8vICAgICAgICAgICAgICAgICBpbmNyZWFzZWRTdGFrZSwKCS8vICAgICAgICAgICAgICAgICB0b2tlblJld2FyZFBhaWRPdXQsCgkvLyAgICAgICAgICAgICAgICAgdmFsaWRhdG9yQ29tbWlzc2lvblBhaWRPdXQsCgkvLyAgICAgICAgICAgICAgICAgZXhjZXNzVG9GZWVTaW5rLAoJLy8gICAgICAgICAgICAgXQoJYnl0ZSAweDc2NjE2YzY5NjQ2MTc0NmY3MjQ5NjQgLy8gInZhbGlkYXRvcklkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCgljb25jYXQKCXR4bmEgQXBwbGljYXRpb25zIDAKCWl0b2IKCWNvbmNhdAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAyMiAvLyBpbmNyZWFzZWRTdGFrZTogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIDE1IC8vIHRva2VuUmV3YXJkUGFpZE91dDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIDE2IC8vIHZhbGlkYXRvckNvbW1pc3Npb25QYWlkT3V0OiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMTcgLy8gZXhjZXNzVG9GZWVTaW5rOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBnb09ubGluZShwYXksYnl0ZVtdLGJ5dGVbXSxieXRlW10sdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2dvT25saW5lOgoJLy8gdm90ZUtleURpbHV0aW9uOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDYKCWJ0b2kKCgkvLyB2b3RlTGFzdDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA1CglidG9pCgoJLy8gdm90ZUZpcnN0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWJ0b2kKCgkvLyBzdGF0ZVByb29mUEs6IGJ5dGVbXQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZXh0cmFjdCAyIDAKCgkvLyBzZWxlY3Rpb25QSzogYnl0ZVtdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglleHRyYWN0IDIgMAoKCS8vIHZvdGVQSzogYnl0ZVtdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoKCS8vIGZlZVBheW1lbnQ6IHBheQoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgcGF5Cgk9PQoKCS8vIGFyZ3VtZW50IDYgKGZlZVBheW1lbnQpIGZvciBnb09ubGluZSBtdXN0IGJlIGEgcGF5IHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBleGVjdXRlIGdvT25saW5lKHBheSxieXRlW10sYnl0ZVtdLGJ5dGVbXSx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIGdvT25saW5lCglpbnQgMQoJcmV0dXJuCgovLyBnb09ubGluZShmZWVQYXltZW50OiBQYXlUeG4sIHZvdGVQSzogYnl0ZXMsIHNlbGVjdGlvblBLOiBieXRlcywgc3RhdGVQcm9vZlBLOiBieXRlcywgdm90ZUZpcnN0OiB1aW50NjQsIHZvdGVMYXN0OiB1aW50NjQsIHZvdGVLZXlEaWx1dGlvbjogdWludDY0KTogdm9pZAovLwovLyBSZWdpc3RlcnMgYSBzdGFraW5nIHBvb2wga2V5IG9ubGluZSBhZ2FpbnN0IGEgcGFydGljaXBhdGlvbiBrZXkuCi8vIFsgT05MWSBPV05FUiBPUiBNQU5BR0VSIENBTiBDQUxMIF0KLy8KLy8gQHBhcmFtIHtQYXlUeG59IGZlZVBheW1lbnQgLSBwYXltZW50IHRvIGNvdmVyIGV4dHJhIGZlZSBvZiBnb2luZyBvbmxpbmUgaWYgb2ZmbGluZSAtIG9yIDAgaWYgbm90IHJlbmV3YWwKLy8gQHBhcmFtIHtieXRlc30gdm90ZVBLIC0gVGhlIHZvdGUgcHVibGljIGtleS4KLy8gQHBhcmFtIHtieXRlc30gc2VsZWN0aW9uUEsgLSBUaGUgc2VsZWN0aW9uIHB1YmxpYyBrZXkuCi8vIEBwYXJhbSB7Ynl0ZXN9IHN0YXRlUHJvb2ZQSyAtIFRoZSBzdGF0ZSBwcm9vZiBwdWJsaWMga2V5LgovLyBAcGFyYW0ge3VpbnQ2NH0gdm90ZUZpcnN0IC0gVGhlIGZpcnN0IHZvdGUgaW5kZXguCi8vIEBwYXJhbSB7dWludDY0fSB2b3RlTGFzdCAtIFRoZSBsYXN0IHZvdGUgaW5kZXguCi8vIEBwYXJhbSB7dWludDY0fSB2b3RlS2V5RGlsdXRpb24gLSBUaGUgdm90ZSBrZXkgZGlsdXRpb24gdmFsdWUuCi8vIEB0aHJvd3Mge0Vycm9yfSBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBjYWxsZXIgaXMgbm90IHRoZSBvd25lciBvciBhIG1hbmFnZXIuCmdvT25saW5lOgoJcHJvdG8gNyAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4ODMKCS8vIGFzc2VydCh0aGlzLmlzT3duZXJPck1hbmFnZXJDYWxsZXIoKSwgJ2NhbiBvbmx5IGJlIGNhbGxlZCBieSBvd25lciBvciBtYW5hZ2VyIG9mIHZhbGlkYXRvcicpCgljYWxsc3ViIGlzT3duZXJPck1hbmFnZXJDYWxsZXIKCgkvLyBjYW4gb25seSBiZSBjYWxsZWQgYnkgb3duZXIgb3IgbWFuYWdlciBvZiB2YWxpZGF0b3IKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg4NAoJLy8gZXh0cmFGZWUgPSB0aGlzLmdldEdvT25saW5lRmVlKCkKCWNhbGxzdWIgZ2V0R29PbmxpbmVGZWUKCWZyYW1lX2J1cnkgMCAvLyBleHRyYUZlZTogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODg1CgkvLyB2ZXJpZnlQYXlUeG4oZmVlUGF5bWVudCwgeyByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywgYW1vdW50OiBleHRyYUZlZSB9KQoJLy8gdmVyaWZ5IHJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gZmVlUGF5bWVudDogUGF5VHhuCglndHhucyBSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJmZWVQYXltZW50IiwiZmllbGQiOiJyZWNlaXZlciIsImV4cGVjdGVkIjoidGhpcy5hcHAuYWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYW1vdW50CglmcmFtZV9kaWcgLTEgLy8gZmVlUGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWZyYW1lX2RpZyAwIC8vIGV4dHJhRmVlOiB1aW50NjQKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJmZWVQYXltZW50IiwiZmllbGQiOiJhbW91bnQiLCJleHBlY3RlZCI6ImV4dHJhRmVlIn0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg4NgoJLy8gc2VuZE9ubGluZUtleVJlZ2lzdHJhdGlvbih7CgkvLyAgICAgICAgICAgICB2b3RlUEs6IHZvdGVQSywKCS8vICAgICAgICAgICAgIHNlbGVjdGlvblBLOiBzZWxlY3Rpb25QSywKCS8vICAgICAgICAgICAgIHN0YXRlUHJvb2ZQSzogc3RhdGVQcm9vZlBLLAoJLy8gICAgICAgICAgICAgdm90ZUZpcnN0OiB2b3RlRmlyc3QsCgkvLyAgICAgICAgICAgICB2b3RlTGFzdDogdm90ZUxhc3QsCgkvLyAgICAgICAgICAgICB2b3RlS2V5RGlsdXRpb246IHZvdGVLZXlEaWx1dGlvbiwKCS8vICAgICAgICAgICAgIGZlZTogdGhpcy5nZXRHb09ubGluZUZlZSgpLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGtleXJlZwoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg4NwoJLy8gdm90ZVBLOiB2b3RlUEsKCWZyYW1lX2RpZyAtMiAvLyB2b3RlUEs6IGJ5dGVzCglpdHhuX2ZpZWxkIFZvdGVQSwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg4OAoJLy8gc2VsZWN0aW9uUEs6IHNlbGVjdGlvblBLCglmcmFtZV9kaWcgLTMgLy8gc2VsZWN0aW9uUEs6IGJ5dGVzCglpdHhuX2ZpZWxkIFNlbGVjdGlvblBLCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODg5CgkvLyBzdGF0ZVByb29mUEs6IHN0YXRlUHJvb2ZQSwoJZnJhbWVfZGlnIC00IC8vIHN0YXRlUHJvb2ZQSzogYnl0ZXMKCWl0eG5fZmllbGQgU3RhdGVQcm9vZlBLCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6ODkwCgkvLyB2b3RlRmlyc3Q6IHZvdGVGaXJzdAoJZnJhbWVfZGlnIC01IC8vIHZvdGVGaXJzdDogdWludDY0CglpdHhuX2ZpZWxkIFZvdGVGaXJzdAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg5MQoJLy8gdm90ZUxhc3Q6IHZvdGVMYXN0CglmcmFtZV9kaWcgLTYgLy8gdm90ZUxhc3Q6IHVpbnQ2NAoJaXR4bl9maWVsZCBWb3RlTGFzdAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjg5MgoJLy8gdm90ZUtleURpbHV0aW9uOiB2b3RlS2V5RGlsdXRpb24KCWZyYW1lX2RpZyAtNyAvLyB2b3RlS2V5RGlsdXRpb246IHVpbnQ2NAoJaXR4bl9maWVsZCBWb3RlS2V5RGlsdXRpb24KCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo4OTMKCS8vIGZlZTogdGhpcy5nZXRHb09ubGluZUZlZSgpCgljYWxsc3ViIGdldEdvT25saW5lRmVlCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gZ29PZmZsaW5lKCl2b2lkCiphYmlfcm91dGVfZ29PZmZsaW5lOgoJLy8gZXhlY3V0ZSBnb09mZmxpbmUoKXZvaWQKCWNhbGxzdWIgZ29PZmZsaW5lCglpbnQgMQoJcmV0dXJuCgovLyBnb09mZmxpbmUoKTogdm9pZAovLwovLyBNYXJrcyBhIHN0YWtpbmcgcG9vbCBrZXkgT0ZGTElORS4KLy8gWyBPTkxZIE9XTkVSIE9SIE1BTkFHRVIgQ0FOIENBTEwgXQpnb09mZmxpbmU6Cglwcm90byAwIDAKCgkvLyAqaWY0NV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkwNQoJLy8gdGhpcy50eG4uc2VuZGVyICE9PSB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZS5hZGRyZXNzCgl0eG4gU2VuZGVyCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJcG9wCgkhPQoJYnogKmlmNDVfZW5kCgoJLy8gKmlmNDVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTA2CgkvLyBhc3NlcnQodGhpcy5pc093bmVyT3JNYW5hZ2VyQ2FsbGVyKCksICdjYW4gb25seSBiZSBjYWxsZWQgYnkgb3duZXIgb3IgbWFuYWdlciBvZiB2YWxpZGF0b3InKQoJY2FsbHN1YiBpc093bmVyT3JNYW5hZ2VyQ2FsbGVyCgoJLy8gY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IG93bmVyIG9yIG1hbmFnZXIgb2YgdmFsaWRhdG9yCglhc3NlcnQKCippZjQ1X2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkwOQoJLy8gc2VuZE9mZmxpbmVLZXlSZWdpc3RyYXRpb24oe30pCglpdHhuX2JlZ2luCglpbnQga2V5cmVnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBsaW5rVG9ORkQodWludDY0LHN0cmluZyl2b2lkCiphYmlfcm91dGVfbGlua1RvTkZEOgoJLy8gbmZkTmFtZTogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglleHRyYWN0IDIgMAoKCS8vIG5mZEFwcElkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGxpbmtUb05GRCh1aW50NjQsc3RyaW5nKXZvaWQKCWNhbGxzdWIgbGlua1RvTkZECglpbnQgMQoJcmV0dXJuCgovLyBsaW5rVG9ORkQobmZkQXBwSWQ6IHVpbnQ2NCwgbmZkTmFtZTogc3RyaW5nKTogdm9pZApsaW5rVG9ORkQ6Cglwcm90byAyIDAKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5MTYKCS8vIGFzc2VydCh0aGlzLmlzT3duZXJPck1hbmFnZXJDYWxsZXIoKSwgJ2NhbiBvbmx5IGJlIGNhbGxlZCBieSBvd25lciBvciBtYW5hZ2VyIG9mIHZhbGlkYXRvcicpCgljYWxsc3ViIGlzT3duZXJPck1hbmFnZXJDYWxsZXIKCgkvLyBjYW4gb25seSBiZSBjYWxsZWQgYnkgb3duZXIgb3IgbWFuYWdlciBvZiB2YWxpZGF0b3IKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkxOAoJLy8gc2VuZEFwcENhbGwoewoJLy8gICAgICAgICAgICAgYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NCh0aGlzLm5mZFJlZ2lzdHJ5QXBwSWQpLAoJLy8gICAgICAgICAgICAgYXBwbGljYXRpb25BcmdzOiBbJ3ZlcmlmeV9uZmRfYWRkcicsIG5mZE5hbWUsIGl0b2IobmZkQXBwSWQpLCByYXdCeXRlcyh0aGlzLmFwcC5hZGRyZXNzKV0sCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbnM6IFtBcHBJRC5mcm9tVWludDY0KG5mZEFwcElkKV0sCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkxOQoJLy8gYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NCh0aGlzLm5mZFJlZ2lzdHJ5QXBwSWQpCglwdXNoaW50IFRNUExfbmZkUmVnaXN0cnlBcHBJZAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTIwCgkvLyBhcHBsaWNhdGlvbkFyZ3M6IFsndmVyaWZ5X25mZF9hZGRyJywgbmZkTmFtZSwgaXRvYihuZmRBcHBJZCksIHJhd0J5dGVzKHRoaXMuYXBwLmFkZHJlc3MpXQoJYnl0ZSAweDc2NjU3MjY5NjY3OTVmNmU2NjY0NWY2MTY0NjQ3MiAvLyAidmVyaWZ5X25mZF9hZGRyIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAtMiAvLyBuZmROYW1lOiBzdHJpbmcKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTEgLy8gbmZkQXBwSWQ6IHVpbnQ2NAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjkyMQoJLy8gYXBwbGljYXRpb25zOiBbQXBwSUQuZnJvbVVpbnQ2NChuZmRBcHBJZCldCglmcmFtZV9kaWcgLTEgLy8gbmZkQXBwSWQ6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHByb3hpZWRTZXRUb2tlblBheW91dFJhdGlvKCh1aW50NjQsdWludDY0LHVpbnQ2NCkpKHVpbnQ2NFsyNF0sdWludDY0KQoqYWJpX3JvdXRlX3Byb3hpZWRTZXRUb2tlblBheW91dFJhdGlvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBwb29sS2V5OiAodWludDY0LHVpbnQ2NCx1aW50NjQpCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDI0Cgk9PQoKCS8vIGFyZ3VtZW50IDAgKHBvb2xLZXkpIGZvciBwcm94aWVkU2V0VG9rZW5QYXlvdXRSYXRpbyBtdXN0IGJlIGEgKHVpbnQ2NCx1aW50NjQsdWludDY0KQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBwcm94aWVkU2V0VG9rZW5QYXlvdXRSYXRpbygodWludDY0LHVpbnQ2NCx1aW50NjQpKSh1aW50NjRbMjRdLHVpbnQ2NCkKCWNhbGxzdWIgcHJveGllZFNldFRva2VuUGF5b3V0UmF0aW8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBwcm94aWVkU2V0VG9rZW5QYXlvdXRSYXRpbyhwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5KTogUG9vbFRva2VuUGF5b3V0UmF0aW8KLy8KLy8gcHJveGllZFNldFRva2VuUGF5b3V0UmF0aW8gaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGJ5IHBvb2xzICE9IDEgLSBjYWxsaW5nIFVTLCBwb29sICMxCi8vIFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGluIGZhY3QgYmVpbmcgY2FsbGVkIGJ5IGFub3RoZXIgb2YgT1VSIHBvb2xzIChub3QgdXMpCi8vIGFuZCB0aGVuIHdlJ2xsIGNhbGwgdGhlIHZhbGlkYXRvciBvbiB0aGVpciBiZWhhbGYgdG8gdXBkYXRlIHRoZSB0b2tlbiBwYXlvdXRzCi8vIEBwYXJhbSBwb29sS2V5IC0gVmFsaWRhdG9yUG9vbEtleSB0dXBsZQpwcm94aWVkU2V0VG9rZW5QYXlvdXRSYXRpbzoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTMyCgkvLyBhc3NlcnQodGhpcy52YWxpZGF0b3JJZC52YWx1ZSA9PT0gcG9vbEtleS5pZCwgJ2NhbGxlciBtdXN0IGJlIHBhcnQgb2Ygc2FtZSB2YWxpZGF0b3Igc2V0IScpCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCgk9PQoKCS8vIGNhbGxlciBtdXN0IGJlIHBhcnQgb2Ygc2FtZSB2YWxpZGF0b3Igc2V0IQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTMzCgkvLyBhc3NlcnQodGhpcy5wb29sSWQudmFsdWUgPT09IDEsICdjYWxsZWUgbXVzdCBiZSBwb29sIDEnKQoJYnl0ZSAweDcwNmY2ZjZjNDk2NCAvLyAicG9vbElkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgk9PQoKCS8vIGNhbGxlZSBtdXN0IGJlIHBvb2wgMQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTM0CgkvLyBhc3NlcnQocG9vbEtleS5wb29sSWQgIT09IDEsICdjYWxsZXIgbXVzdCBOT1QgYmUgcG9vbCAxJykKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCSE9CgoJLy8gY2FsbGVyIG11c3QgTk9UIGJlIHBvb2wgMQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTM2CgkvLyBjYWxsZXJQb29sQXBwSUQgPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLmdldFBvb2xBcHBJZD4oewoJLy8gICAgICAgICAgICAgYXBwbGljYXRpb25JRDogdGhpcy5jcmVhdGluZ1ZhbGlkYXRvckNvbnRyYWN0QXBwSWQudmFsdWUsCgkvLyAgICAgICAgICAgICBtZXRob2RBcmdzOiBbcG9vbEtleS5pZCwgcG9vbEtleS5wb29sSWRdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiZ2V0UG9vbEFwcElkKHVpbnQ2NCx1aW50NjQpdWludDY0IgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5MzcKCS8vIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlCglieXRlIDB4NjM3MjY1NjE3NDZmNzI0MTcwNzAgLy8gImNyZWF0b3JBcHAiCglhcHBfZ2xvYmFsX2dldAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTM4CgkvLyBtZXRob2RBcmdzOiBbcG9vbEtleS5pZCwgcG9vbEtleS5wb29sSWRdCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglidG9pCglmcmFtZV9idXJ5IDAgLy8gY2FsbGVyUG9vbEFwcElEOiB1aW50NjQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5NDAKCS8vIGFzc2VydChjYWxsZXJQb29sQXBwSUQgPT09IHBvb2xLZXkucG9vbEFwcElkKQoJZnJhbWVfZGlnIDAgLy8gY2FsbGVyUG9vbEFwcElEOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDE2IDgKCWJ0b2kKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5NDEKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IEFwcElELmZyb21VaW50NjQocG9vbEtleS5wb29sQXBwSWQpLmFkZHJlc3MpCgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAxNiA4CglidG9pCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglwb3AKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5NDMKCS8vIHJldHVybiBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgVmFsaWRhdG9yUmVnaXN0cnkucHJvdG90eXBlLnNldFRva2VuUGF5b3V0UmF0aW8+KHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAic2V0VG9rZW5QYXlvdXRSYXRpbyh1aW50NjQpKHVpbnQ2NFsyNF0sdWludDY0KSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTQ0CgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk0NQoJLy8gbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gaXNPd25lck9yTWFuYWdlckNhbGxlcigpOiBib29sZWFuCmlzT3duZXJPck1hbmFnZXJDYWxsZXI6Cglwcm90byAwIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk1MAoJLy8gT3duZXJBbmRNYW5hZ2VyID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIFZhbGlkYXRvclJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRWYWxpZGF0b3JPd25lckFuZE1hbmFnZXI+KHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuY3JlYXRpbmdWYWxpZGF0b3JDb250cmFjdEFwcElkLnZhbHVlLAoJLy8gICAgICAgICAgICAgbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiZ2V0VmFsaWRhdG9yT3duZXJBbmRNYW5hZ2VyKHVpbnQ2NCkoYWRkcmVzcyxhZGRyZXNzKSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTUxCgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmNyZWF0aW5nVmFsaWRhdG9yQ29udHJhY3RBcHBJZC52YWx1ZQoJYnl0ZSAweDYzNzI2NTYxNzQ2ZjcyNDE3MDcwIC8vICJjcmVhdG9yQXBwIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk1MgoJLy8gbWV0aG9kQXJnczogW3RoaXMudmFsaWRhdG9ySWQudmFsdWVdCglieXRlIDB4NzY2MTZjNjk2NDYxNzQ2ZjcyNDk2NCAvLyAidmFsaWRhdG9ySWQiCglhcHBfZ2xvYmFsX2dldAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBPd25lckFuZE1hbmFnZXI6IChhZGRyZXNzLGFkZHJlc3MpCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTU0CgkvLyByZXR1cm4gdGhpcy50eG4uc2VuZGVyID09PSBPd25lckFuZE1hbmFnZXJbMF0gfHwgdGhpcy50eG4uc2VuZGVyID09PSBPd25lckFuZE1hbmFnZXJbMV0KCXR4biBTZW5kZXIKCWZyYW1lX2RpZyAwIC8vIE93bmVyQW5kTWFuYWdlcjogKGFkZHJlc3MsYWRkcmVzcykKCWV4dHJhY3QgMCAzMgoJPT0KCWR1cAoJYm56ICpza2lwX29yMgoJdHhuIFNlbmRlcgoJZnJhbWVfZGlnIDAgLy8gT3duZXJBbmRNYW5hZ2VyOiAoYWRkcmVzcyxhZGRyZXNzKQoJZXh0cmFjdCAzMiAzMgoJPT0KCXx8Cgoqc2tpcF9vcjI6CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gZ2V0RmVlU2luaygpOiBBZGRyZXNzCmdldEZlZVNpbms6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5NTgKCS8vIHJldHVybiB0aGlzLmZlZVNpbmtBZGRyCglwdXNoYnl0ZXMgVE1QTF9mZWVTaW5rQWRkcgoJcmV0c3ViCgovLyBhbGdvU2F0dXJhdGlvbkxldmVsKCk6IHVpbnQ2NAovLwovLyBSZXR1cm5zIHRoZSBtYXhpbXVtIGFsbG93ZWQgc3Rha2UgcGVyIHZhbGlkYXRvciBiYXNlZCBvbiBhIHBlcmNlbnRhZ2Ugb2YgYWxsIGN1cnJlbnQgb25saW5lIHN0YWtlIGJlZm9yZQovLyB0aGUgdmFsaWRhdG9yIGlzIGNvbnNpZGVyZWQgc2F0dXJhdGVkIC0gd2hlcmUgcmV3YXJkcyBhcmUgZGltaW5pc2hlZC4KYWxnb1NhdHVyYXRpb25MZXZlbDoKCXByb3RvIDAgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTY4CgkvLyBvbmxpbmUgPSB0aGlzLmdldEN1cnJlbnRPbmxpbmVTdGFrZSgpCgljYWxsc3ViIGdldEN1cnJlbnRPbmxpbmVTdGFrZQoJZnJhbWVfYnVyeSAwIC8vIG9ubGluZTogdWludDY0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTcwCgkvLyByZXR1cm4gd2lkZVJhdGlvKFtvbmxpbmUsIE1BWF9WQUxJREFUT1JfU09GVF9QQ1RfT0ZfT05MSU5FXzFERUNJTUFMXSwgWzEwMDBdKQoJZnJhbWVfZGlnIDAgLy8gb25saW5lOiB1aW50NjQKCWludCAxMDAKCW11bHcKCWludCAwCglpbnQgMTAwMAoJZGl2bW9kdwoJcG9wCglwb3AKCXN3YXAKCSEKCgkvLyB3aWRlUmF0aW8gZmFpbGVkCglhc3NlcnQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gZ2V0R29PbmxpbmVGZWUoKTogdWludDY0CmdldEdvT25saW5lRmVlOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5NzcKCS8vIGlzT25saW5lID0gZmFsc2UKCWludCAwCglmcmFtZV9idXJ5IDAgLy8gaXNPbmxpbmU6IGJvb2wKCgkvLyAqaWY0Nl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk3OAoJLy8gIWlzT25saW5lCglmcmFtZV9kaWcgMCAvLyBpc09ubGluZTogYm9vbAoJIQoJYnogKmlmNDZfZW5kCgoJLy8gKmlmNDZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTgxCgkvLyByZXR1cm4gMl8wMDBfMDAwCglpbnQgMl8wMDBfMDAwCgliICpnZXRHb09ubGluZUZlZSpyZXR1cm4KCippZjQ2X2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk4MwoJLy8gcmV0dXJuIDAKCWludCAwCgoqZ2V0R29PbmxpbmVGZWUqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIGdldEN1cnJlbnRPbmxpbmVTdGFrZSgpOiB1aW50NjQKZ2V0Q3VycmVudE9ubGluZVN0YWtlOgoJcHJvdG8gMCAxCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTg5CgkvLyByZXR1cm4gMl8wMDBfMDAwXzAwMF8wMDBfMDAwCglpbnQgMl8wMDBfMDAwXzAwMF8wMDBfMDAwCglyZXRzdWIKCi8vIGNoZWNrSWZCaW5DbG9zZWQoKTogdm9pZAovLwovLyBDaGVja3MgaWYgdGhlIGN1cnJlbnQgcm91bmQgaXMgaW4gYSAnbmV3IGNhbGN1bGF0aW9uIGJpbicgKGFwcHJveGltYXRlbHkgZGFpbHkpCmNoZWNrSWZCaW5DbG9zZWQ6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA0CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6OTk2CgkvLyBjdXJyZW50QmluU2l6ZSA9IHRoaXMucm91bmRzUGVyRGF5LnZhbHVlIGFzIHVpbnQxMjgKCWJ5dGUgMHg3MjZmNzU2ZTY0NzM1MDY1NzI0NDYxNzkgLy8gInJvdW5kc1BlckRheSIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglmcmFtZV9idXJ5IDAgLy8gY3VycmVudEJpblNpemU6IHVuc2FmZSB1aW50MTI4CgoJLy8gKmlmNDdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czo5OTcKCS8vIGdsb2JhbHMucm91bmQgPj0gdGhpcy5iaW5Sb3VuZFN0YXJ0LnZhbHVlICsgKGN1cnJlbnRCaW5TaXplIGFzIHVpbnQ2NCkKCWdsb2JhbCBSb3VuZAoJYnl0ZSAweDYyNjk2ZTUyNmY3NTZlNjQ1Mzc0NjE3Mjc0IC8vICJiaW5Sb3VuZFN0YXJ0IgoJYXBwX2dsb2JhbF9nZXQKCWZyYW1lX2RpZyAwIC8vIGN1cnJlbnRCaW5TaXplOiB1bnNhZmUgdWludDEyOAoJZHVwCgliaXRsZW4KCWludCA2NAoJPD0KCgkvLyBjdXJyZW50QmluU2l6ZSBhcyB1aW50NjQgb3ZlcmZsb3dlZCA2NCBiaXRzCglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDgKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWJ0b2kKCSsKCT49CglieiAqaWY0N19lbmQKCgkvLyAqaWY0N19jb25zZXF1ZW50CgkvLyAqaWY0OF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk5OAoJLy8gZ2xvYmFscy5vcGNvZGVCdWRnZXQgPCAzMDAKCWdsb2JhbCBPcGNvZGVCdWRnZXQKCWludCAzMDAKCTwKCWJ6ICppZjQ4X2VuZAoKCS8vICppZjQ4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjk5OQoJLy8gaW5jcmVhc2VPcGNvZGVCdWRnZXQoKQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJYnl0ZSBiNjQgQ29FQiAvLyAjcHJhZ21hIHZlcnNpb24gMTA7IGludCAxCglkdXAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCglpdHhuX3N1Ym1pdAoKKmlmNDhfZW5kOgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTAwMQoJLy8gYXBwcm94Um91bmRzUGVyWWVhcjogdWludDEyOCA9IGN1cnJlbnRCaW5TaXplICogKDM2NSBhcyB1aW50MTI4KQoJZnJhbWVfZGlnIDAgLy8gY3VycmVudEJpblNpemU6IHVuc2FmZSB1aW50MTI4CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNmQKCWIqCglkdXAKCWJpdGxlbgoJaW50IDEyOAoJPD0KCgkvLyBjdXJyZW50QmluU2l6ZSAqICgzNjUgYXMgdWludDEyOCkgb3ZlcmZsb3dlZCAxMjggYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMTYKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWZyYW1lX2J1cnkgMSAvLyBhcHByb3hSb3VuZHNQZXJZZWFyOiB1aW50MTI4CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTAwMgoJLy8gYXZnU3Rha2U6IHVpbnQxMjggPSB0aGlzLnN0YWtlQWNjdW11bGF0b3IudmFsdWUgLyBjdXJyZW50QmluU2l6ZQoJYnl0ZSAweDczNzQ2MTZiNjU0MTYzNjM3NTZkNzU2YzYxNzQ2ZjcyIC8vICJzdGFrZUFjY3VtdWxhdG9yIgoJYXBwX2dsb2JhbF9nZXQKCWZyYW1lX2RpZyAwIC8vIGN1cnJlbnRCaW5TaXplOiB1bnNhZmUgdWludDEyOAoJYi8KCWR1cAoJYml0bGVuCglpbnQgMTI4Cgk8PQoKCS8vIHRoaXMuc3Rha2VBY2N1bXVsYXRvci52YWx1ZSAvIGN1cnJlbnRCaW5TaXplIG92ZXJmbG93ZWQgMTI4IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDE2CgktCglzd2FwCglzdWJzdHJpbmczCglmcmFtZV9idXJ5IDIgLy8gYXZnU3Rha2U6IHVpbnQxMjgKCgkvLyAqaWY0OV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMDMKCS8vIGF2Z1N0YWtlICE9PSAwCglmcmFtZV9kaWcgMiAvLyBhdmdTdGFrZTogdWludDEyOAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCgliIT0KCWJ6ICppZjQ5X2VuZAoKCS8vICppZjQ5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMDcKCS8vIGFwcjogdWludDEyOCA9CgkvLyAgICAgICAgICAgICAgICAgICAgICgoKHRoaXMucmV3YXJkQWNjdW11bGF0b3IudmFsdWUgYXMgdWludDEyOCkgKiAoMTAwMDAgYXMgdWludDEyOCkpIC8gYXZnU3Rha2UpICoKCS8vICAgICAgICAgICAgICAgICAgICAgKGFwcHJveFJvdW5kc1BlclllYXIgLyBjdXJyZW50QmluU2l6ZSkKCWJ5dGUgMHg3MjY1Nzc2MTcyNjQ0MTYzNjM3NTZkNzU2YzYxNzQ2ZjcyIC8vICJyZXdhcmRBY2N1bXVsYXRvciIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MTAKCWIqCglmcmFtZV9kaWcgMiAvLyBhdmdTdGFrZTogdWludDEyOAoJYi8KCWZyYW1lX2RpZyAxIC8vIGFwcHJveFJvdW5kc1BlclllYXI6IHVpbnQxMjgKCWZyYW1lX2RpZyAwIC8vIGN1cnJlbnRCaW5TaXplOiB1bnNhZmUgdWludDEyOAoJYi8KCWIqCglkdXAKCWJpdGxlbgoJaW50IDEyOAoJPD0KCgkvLyAoKCh0aGlzLnJld2FyZEFjY3VtdWxhdG9yLnZhbHVlIGFzIHVpbnQxMjgpICogKDEwMDAwIGFzIHVpbnQxMjgpKSAvIGF2Z1N0YWtlKSAqXG4gICAgICAgICAgICAgICAgICAgIChhcHByb3hSb3VuZHNQZXJZZWFyIC8gY3VycmVudEJpblNpemUpIG92ZXJmbG93ZWQgMTI4IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDE2CgktCglzd2FwCglzdWJzdHJpbmczCglmcmFtZV9idXJ5IDMgLy8gYXByOiB1aW50MTI4CgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTAxMQoJLy8gYWxwaGE6IHVpbnQxMjggPSAxMCBhcyB1aW50MTI4CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEKCWZyYW1lX2J1cnkgNCAvLyBhbHBoYTogdW5zYWZlIHVpbnQxMjgKCgkvLyAqaWY1MF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMTMKCS8vIGF2Z1N0YWtlID4gMzAwMDAwMDAwMDAwCglmcmFtZV9kaWcgMiAvLyBhdmdTdGFrZTogdWludDEyOAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NWQ5NjRiODAwCgliPgoJYnogKmlmNTBfZW5kCgoJLy8gKmlmNTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTAxNAoJLy8gYWxwaGEgPSA5MCBhcyB1aW50MTI4CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNWEKCWZyYW1lX2J1cnkgNCAvLyBhbHBoYTogdW5zYWZlIHVpbnQxMjgKCippZjUwX2VuZDoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMTYKCS8vIHRoaXMud2VpZ2h0ZWRNb3ZpbmdBdmVyYWdlLnZhbHVlID0KCS8vICAgICAgICAgICAgICAgICAgICAgKHRoaXMud2VpZ2h0ZWRNb3ZpbmdBdmVyYWdlLnZhbHVlICogKCgxMDAgYXMgdWludDEyOCkgLSBhbHBoYSkpIC8gKDEwMCBhcyB1aW50MTI4KSArCgkvLyAgICAgICAgICAgICAgICAgICAgIChhcHIgKiBhbHBoYSkgLyAoMTAwIGFzIHVpbnQxMjgpCglieXRlIDB4NjU3NzZkNjEgLy8gImV3bWEiCglkdXAKCWFwcF9nbG9iYWxfZ2V0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKCWZyYW1lX2RpZyA0IC8vIGFscGhhOiB1bnNhZmUgdWludDEyOAoJYi0KCWIqCglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKCWIvCglmcmFtZV9kaWcgMyAvLyBhcHI6IHVpbnQxMjgKCWZyYW1lX2RpZyA0IC8vIGFscGhhOiB1bnNhZmUgdWludDEyOAoJYioKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAoJYi8KCWIrCglkdXAKCWJpdGxlbgoJaW50IDEyOAoJPD0KCgkvLyAodGhpcy53ZWlnaHRlZE1vdmluZ0F2ZXJhZ2UudmFsdWUgKiAoKDEwMCBhcyB1aW50MTI4KSAtIGFscGhhKSkgLyAoMTAwIGFzIHVpbnQxMjgpICtcbiAgICAgICAgICAgICAgICAgICAgKGFwciAqIGFscGhhKSAvICgxMDAgYXMgdWludDEyOCkgb3ZlcmZsb3dlZCAxMjggYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMTYKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWFwcF9nbG9iYWxfcHV0CgoqaWY0OV9lbmQ6CgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMDIyCgkvLyB0aGlzLnNldFJvdW5kc1BlckRheSgpCgljYWxsc3ViIHNldFJvdW5kc1BlckRheQoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMjMKCS8vIHRoaXMuc3Rha2VBY2N1bXVsYXRvci52YWx1ZSA9ICh0aGlzLnRvdGFsQWxnb1N0YWtlZC52YWx1ZSBhcyB1aW50MTI4KSAqICh0aGlzLnJvdW5kc1BlckRheS52YWx1ZSBhcyB1aW50MTI4KQoJYnl0ZSAweDczNzQ2MTZiNjU0MTYzNjM3NTZkNzU2YzYxNzQ2ZjcyIC8vICJzdGFrZUFjY3VtdWxhdG9yIgoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJYXBwX2dsb2JhbF9nZXQKCWl0b2IKCWJ5dGUgMHg3MjZmNzU2ZTY0NzM1MDY1NzI0NDYxNzkgLy8gInJvdW5kc1BlckRheSIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCgliKgoJZHVwCgliaXRsZW4KCWludCAxMjgKCTw9CgoJLy8gKHRoaXMudG90YWxBbGdvU3Rha2VkLnZhbHVlIGFzIHVpbnQxMjgpICogKHRoaXMucm91bmRzUGVyRGF5LnZhbHVlIGFzIHVpbnQxMjgpIG92ZXJmbG93ZWQgMTI4IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDE2CgktCglzd2FwCglzdWJzdHJpbmczCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0cy9zdGFraW5nUG9vbC5hbGdvLnRzOjEwMjQKCS8vIHRoaXMucmV3YXJkQWNjdW11bGF0b3IudmFsdWUgPSAwCglieXRlIDB4NzI2NTc3NjE3MjY0NDE2MzYzNzU2ZDc1NmM2MTc0NmY3MiAvLyAicmV3YXJkQWNjdW11bGF0b3IiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvc3Rha2luZ1Bvb2wuYWxnby50czoxMDI1CgkvLyB0aGlzLmJpblJvdW5kU3RhcnQudmFsdWUgPSBnbG9iYWxzLnJvdW5kIC0gKGdsb2JhbHMucm91bmQgJSB0aGlzLnJvdW5kc1BlckRheS52YWx1ZSkKCWJ5dGUgMHg2MjY5NmU1MjZmNzU2ZTY0NTM3NDYxNzI3NCAvLyAiYmluUm91bmRTdGFydCIKCWdsb2JhbCBSb3VuZAoJZ2xvYmFsIFJvdW5kCglieXRlIDB4NzI2Zjc1NmU2NDczNTA2NTcyNDQ2MTc5IC8vICJyb3VuZHNQZXJEYXkiCglhcHBfZ2xvYmFsX2dldAoJJQoJLQoJYXBwX2dsb2JhbF9wdXQKCippZjQ3X2VuZDoKCXJldHN1YgoKLy8gc2V0Um91bmRzUGVyRGF5KCk6IHZvaWQKc2V0Um91bmRzUGVyRGF5OgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL3N0YWtpbmdQb29sLmFsZ28udHM6MTAzMAoJLy8gdGhpcy5yb3VuZHNQZXJEYXkudmFsdWUgPSBBVkdfUk9VTkRTX1BFUl9EQVkKCWJ5dGUgMHg3MjZmNzU2ZTY0NzM1MDY1NzI0NDYxNzkgLy8gInJvdW5kc1BlckRheSIKCWludCAzMDg1NwoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbih1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiZ2FzKCl2b2lkIgoJbWV0aG9kICJpbml0U3RvcmFnZShwYXkpdm9pZCIKCW1ldGhvZCAiYWRkU3Rha2UocGF5LGFkZHJlc3MpdWludDY0IgoJbWV0aG9kICJyZW1vdmVTdGFrZShhZGRyZXNzLHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJjbGFpbVRva2Vucygpdm9pZCIKCW1ldGhvZCAiZ2V0U3Rha2VySW5mbyhhZGRyZXNzKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgInBheVRva2VuUmV3YXJkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJ1cGRhdGVBbGdvZFZlcihzdHJpbmcpdm9pZCIKCW1ldGhvZCAiZXBvY2hCYWxhbmNlVXBkYXRlKCl2b2lkIgoJbWV0aG9kICJnb09ubGluZShwYXksYnl0ZVtdLGJ5dGVbXSxieXRlW10sdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKCW1ldGhvZCAiZ29PZmZsaW5lKCl2b2lkIgoJbWV0aG9kICJsaW5rVG9ORkQodWludDY0LHN0cmluZyl2b2lkIgoJbWV0aG9kICJwcm94aWVkU2V0VG9rZW5QYXlvdXRSYXRpbygodWludDY0LHVpbnQ2NCx1aW50NjQpKSh1aW50NjRbMjRdLHVpbnQ2NCkiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2dhcyAqYWJpX3JvdXRlX2luaXRTdG9yYWdlICphYmlfcm91dGVfYWRkU3Rha2UgKmFiaV9yb3V0ZV9yZW1vdmVTdGFrZSAqYWJpX3JvdXRlX2NsYWltVG9rZW5zICphYmlfcm91dGVfZ2V0U3Rha2VySW5mbyAqYWJpX3JvdXRlX3BheVRva2VuUmV3YXJkICphYmlfcm91dGVfdXBkYXRlQWxnb2RWZXIgKmFiaV9yb3V0ZV9lcG9jaEJhbGFuY2VVcGRhdGUgKmFiaV9yb3V0ZV9nb09ubGluZSAqYWJpX3JvdXRlX2dvT2ZmbGluZSAqYWJpX3JvdXRlX2xpbmtUb05GRCAqYWJpX3JvdXRlX3Byb3hpZWRTZXRUb2tlblBheW91dFJhdGlvCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgVXBkYXRlQXBwbGljYXRpb24KCWVycg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" - }, - "contract": { - "name": "StakingPool", - "desc": "", - "methods": [ - { - "name": "updateApplication", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "createApplication", - "desc": "Initialize the staking pool w/ owner and manager, but can only be created by the validator contract.", - "args": [ - { - "name": "creatingContractId", - "type": "uint64", - "desc": "id of contract that constructed us - the validator application (single global instance)" - }, - { - "name": "validatorId", - "type": "uint64", - "desc": "id of validator we're a staking pool of" - }, - { - "name": "poolId", - "type": "uint64", - "desc": "which pool id are we" - }, - { - "name": "minEntryStake", - "type": "uint64", - "desc": "minimum amount to be in pool, but also minimum amount balance can't go below (without removing all!)" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "gas", - "desc": "gas is a dummy no-op call that can be used to pool-up resource references and opcode cost", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "initStorage", - "desc": "Called after we're created and then funded, so we can create our large stakers ledger storageCaller has to get MBR amounts from ValidatorRegistry to know how much to fund us to cover the box storage costIf this is pool 1 AND the validator has specified a reward token, opt-in to that tokenso that the validator can seed the pool with future rewards of that token.", - "args": [ - { - "name": "mbrPayment", - "type": "pay", - "desc": "payment from caller which covers mbr increase of new staking pools' storage" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "addStake", - "desc": "Adds stake to the given account.Can ONLY be called by the validator contract that created usMust receive payment from the validator contract for amount being staked.", - "args": [ - { - "name": "stakedAmountPayment", - "type": "pay", - "desc": "prior payment coming from validator contract to us on behalf of staker." - }, - { - "name": "staker", - "type": "address", - "desc": "The account adding new stake" - } - ], - "returns": { - "type": "uint64", - "desc": "{uint64}new 'entry round' round number of stake add" - } - }, - { - "name": "removeStake", - "desc": "Removes stake on behalf of caller (removing own stake). If any token rewards exist, those are always sent infull. Also notifies the validator contract for this pools validator of the staker / balance changes.", - "args": [ - { - "name": "staker", - "type": "address", - "desc": "account to remove. normally same as sender, but the validator owner or manager can also callthis to remove the specified staker explicitly. The removed stake MUST only go to the staker of course. This isso a validator can shut down a poool and refund the stakers. It can also be used to kick out stakers who no longermeet the gating requirements (determined by the node daemon)." - }, - { - "name": "amountToUnstake", - "type": "uint64", - "desc": "The amount of stake to be removed. Specify 0 to remove all stake." - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "claimTokens", - "desc": "Claims all the available reward tokens a staker has available, sending their entire balance to the staker frompool 1 (either directly, or via validator->pool1 to pay it out)Also notifies the validator contract for this pools validator of the staker / balance changes.", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "getStakerInfo", - "desc": "Retrieves the staked information for a given staker.", - "args": [ - { - "name": "staker", - "type": "address", - "desc": "The address of the staker." - } - ], - "returns": { - "type": "(address,uint64,uint64,uint64,uint64)", - "desc": "{StakedInfo}- The staked information for the given staker." - } - }, - { - "name": "payTokenReward", - "desc": "[Internal protocol method] Remove a specified amount of 'community token' rewards for a staker.This can ONLY be called by our validator and only if we're pool 1 - with the token.Note: this can also be called by validator as part of OWNER wanting to send the reward tokenssomewhere else (ie if they're sunsetting their validator and need the reward tokens back).It's up to the validator to ensure that the balance in rewardTokenHeldBack is honored.", - "args": [ - { - "name": "staker", - "type": "address", - "desc": "the staker account to send rewards to" - }, - { - "name": "rewardToken", - "type": "uint64", - "desc": "id of reward token (to avoid re-entrancy in calling validator back to get id)" - }, - { - "name": "amountToSend", - "type": "uint64", - "desc": "amount to send the staker (there is significant trust here(!) - also why only validator can call us" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "updateAlgodVer", - "desc": "Update the (honor system) algod version for the node associated to this pool. The node management daemonshould compare its current nodes version to the version stored in global state, updating when different.The reti node daemon composes its own version string using format:{major}.{minor}.{build}{branch}[{commit hash}],ie: 3.22.0 rel/stable [6b508975][ ONLY OWNER OR MANAGER CAN CALL ]", - "args": [ - { - "name": "algodVer", - "type": "string", - "desc": "string representing the algorand node daemon version (reti node daemon composes its own meta version)" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "epochBalanceUpdate", - "desc": "Updates the balance of stakers in the pool based on the received 'rewards' (current balance vs known staked balance)stakers outstanding balance is adjusted based on their % of stake and time in the current epoch - so that balancecompounds over time and staker can remove that amount at will.The validator is paid their percentage each epoch payout.Note: ANYONE can call this.", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "goOnline", - "desc": "Registers a staking pool key online against a participation key.[ ONLY OWNER OR MANAGER CAN CALL ]", - "args": [ - { - "name": "feePayment", - "type": "pay", - "desc": "payment to cover extra fee of going online if offline - or 0 if not renewal" - }, - { - "name": "votePK", - "type": "byte[]", - "desc": "The vote public key." - }, - { - "name": "selectionPK", - "type": "byte[]", - "desc": "The selection public key." - }, - { - "name": "stateProofPK", - "type": "byte[]", - "desc": "The state proof public key." - }, - { - "name": "voteFirst", - "type": "uint64", - "desc": "The first vote index." - }, - { - "name": "voteLast", - "type": "uint64", - "desc": "The last vote index." - }, - { - "name": "voteKeyDilution", - "type": "uint64", - "desc": "The vote key dilution value." - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "goOffline", - "desc": "Marks a staking pool key OFFLINE.[ ONLY OWNER OR MANAGER CAN CALL ]", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "linkToNFD", - "args": [ - { - "name": "nfdAppId", - "type": "uint64" - }, - { - "name": "nfdName", - "type": "string" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "proxiedSetTokenPayoutRatio", - "desc": "proxiedSetTokenPayoutRatio is meant to be called by pools != 1 - calling US, pool #1We need to verify that we are in fact being called by another of OUR pools (not us)and then we'll call the validator on their behalf to update the token payouts", - "args": [ - { - "name": "poolKey", - "type": "(uint64,uint64,uint64)", - "desc": "ValidatorPoolKey tuple" - } - ], - "returns": { - "type": "(uint64[24],uint64)" - } - } - ] - } -} \ No newline at end of file diff --git a/examples/reti/StakingPool.clear.teal b/examples/reti/StakingPool.clear.teal deleted file mode 100644 index e9f1d65b3..000000000 --- a/examples/reti/StakingPool.clear.teal +++ /dev/null @@ -1 +0,0 @@ -#pragma version 10 \ No newline at end of file diff --git a/examples/reti/StakingPool.src_map.json b/examples/reti/StakingPool.src_map.json deleted file mode 100644 index be6d4a373..000000000 --- a/examples/reti/StakingPool.src_map.json +++ /dev/null @@ -1,18868 +0,0 @@ -[ - { - "teal": 1, - "source": 36, - "pc": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293 - ] - }, - { - "teal": 13, - "source": 36, - "pc": [ - 294, - 295 - ] - }, - { - "teal": 14, - "source": 36, - "pc": [ - 296 - ] - }, - { - "teal": 15, - "source": 36, - "pc": [ - 297 - ] - }, - { - "teal": 16, - "source": 36, - "pc": [ - 298 - ] - }, - { - "teal": 17, - "source": 36, - "pc": [ - 299, - 300 - ] - }, - { - "teal": 18, - "source": 36, - "pc": [ - 301 - ] - }, - { - "teal": 19, - "source": 36, - "pc": [ - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327 - ] - }, - { - "teal": 23, - "source": 36, - "errorMessage": "The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?", - "pc": [ - 328 - ] - }, - { - "teal": 28, - "source": 91, - "pc": [ - 329, - 330, - 331 - ] - }, - { - "teal": 29, - "source": 91, - "pc": [ - 332 - ] - }, - { - "teal": 30, - "source": 91, - "pc": [ - 333 - ] - }, - { - "teal": 34, - "source": 91, - "pc": [ - 334, - 335, - 336 - ] - }, - { - "teal": 41, - "source": 93, - "pc": [ - 337, - 338 - ] - }, - { - "teal": 42, - "source": 93, - "pc": [ - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348, - 349, - 350, - 351, - 352, - 353, - 354, - 355, - 356, - 357, - 358, - 359, - 360, - 361, - 362, - 363, - 364, - 365, - 366, - 367, - 368, - 369, - 370, - 371, - 372 - ] - }, - { - "teal": 43, - "source": 93, - "pc": [ - 373 - ] - }, - { - "teal": 46, - "source": 92, - "errorMessage": "Temporary: contract is upgradeable but only during testing and only from a development account", - "pc": [ - 374 - ] - }, - { - "teal": 47, - "source": 91, - "pc": [ - 375 - ] - }, - { - "teal": 52, - "source": 105, - "pc": [ - 376, - 377, - 378 - ] - }, - { - "teal": 53, - "source": 105, - "pc": [ - 379 - ] - }, - { - "teal": 56, - "source": 105, - "pc": [ - 380, - 381, - 382 - ] - }, - { - "teal": 57, - "source": 105, - "pc": [ - 383 - ] - }, - { - "teal": 60, - "source": 105, - "pc": [ - 384, - 385, - 386 - ] - }, - { - "teal": 61, - "source": 105, - "pc": [ - 387 - ] - }, - { - "teal": 64, - "source": 105, - "pc": [ - 388, - 389, - 390 - ] - }, - { - "teal": 65, - "source": 105, - "pc": [ - 391 - ] - }, - { - "teal": 68, - "source": 105, - "pc": [ - 392, - 393, - 394 - ] - }, - { - "teal": 69, - "source": 105, - "pc": [ - 395 - ] - }, - { - "teal": 70, - "source": 105, - "pc": [ - 396 - ] - }, - { - "teal": 80, - "source": 105, - "pc": [ - 397, - 398, - 399 - ] - }, - { - "teal": 85, - "source": 106, - "pc": [ - 400, - 401 - ] - }, - { - "teal": 86, - "source": 106, - "pc": [ - 402 - ] - }, - { - "teal": 87, - "source": 106, - "pc": [ - 403 - ] - }, - { - "teal": 88, - "source": 106, - "pc": [ - 404, - 405, - 406 - ] - }, - { - "teal": 93, - "source": 108, - "pc": [ - 407, - 408 - ] - }, - { - "teal": 94, - "source": 108, - "pc": [ - 409 - ] - }, - { - "teal": 95, - "source": 108, - "pc": [ - 410 - ] - }, - { - "teal": 96, - "source": 108, - "pc": [ - 411 - ] - }, - { - "teal": 100, - "source": 109, - "pc": [ - 412, - 413 - ] - }, - { - "teal": 101, - "source": 109, - "pc": [ - 414 - ] - }, - { - "teal": 102, - "source": 109, - "pc": [ - 415 - ] - }, - { - "teal": 103, - "source": 109, - "pc": [ - 416 - ] - }, - { - "teal": 104, - "source": 106, - "pc": [ - 417, - 418, - 419 - ] - }, - { - "teal": 109, - "source": 111, - "pc": [ - 420, - 421 - ] - }, - { - "teal": 110, - "source": 111, - "pc": [ - 422 - ] - }, - { - "teal": 111, - "source": 111, - "pc": [ - 423 - ] - }, - { - "teal": 112, - "source": 111, - "pc": [ - 424 - ] - }, - { - "teal": 116, - "source": 112, - "pc": [ - 425, - 426 - ] - }, - { - "teal": 117, - "source": 112, - "pc": [ - 427 - ] - }, - { - "teal": 118, - "source": 112, - "pc": [ - 428 - ] - }, - { - "teal": 119, - "source": 112, - "pc": [ - 429 - ] - }, - { - "teal": 124, - "source": 114, - "pc": [ - 430, - 431 - ] - }, - { - "teal": 125, - "source": 114, - "pc": [ - 432, - 433 - ] - }, - { - "teal": 126, - "source": 114, - "pc": [ - 434 - ] - }, - { - "teal": 129, - "source": 114, - "errorMessage": "staking pool must have minimum entry of 1 algo", - "pc": [ - 435 - ] - }, - { - "teal": 133, - "source": 115, - "pc": [ - 436 - ] - }, - { - "teal": 134, - "source": 115, - "pc": [ - 437, - 438 - ] - }, - { - "teal": 135, - "source": 115, - "pc": [ - 439 - ] - }, - { - "teal": 139, - "source": 116, - "pc": [ - 440 - ] - }, - { - "teal": 140, - "source": 116, - "pc": [ - 441, - 442 - ] - }, - { - "teal": 141, - "source": 116, - "pc": [ - 443 - ] - }, - { - "teal": 145, - "source": 117, - "pc": [ - 444 - ] - }, - { - "teal": 146, - "source": 117, - "pc": [ - 445, - 446 - ] - }, - { - "teal": 147, - "source": 117, - "pc": [ - 447 - ] - }, - { - "teal": 151, - "source": 118, - "pc": [ - 448, - 449 - ] - }, - { - "teal": 152, - "source": 118, - "pc": [ - 450 - ] - }, - { - "teal": 153, - "source": 118, - "pc": [ - 451 - ] - }, - { - "teal": 157, - "source": 119, - "pc": [ - 452, - 453 - ] - }, - { - "teal": 158, - "source": 119, - "pc": [ - 454 - ] - }, - { - "teal": 159, - "source": 119, - "pc": [ - 455 - ] - }, - { - "teal": 163, - "source": 120, - "pc": [ - 456, - 457 - ] - }, - { - "teal": 164, - "source": 120, - "pc": [ - 458, - 459 - ] - }, - { - "teal": 165, - "source": 120, - "pc": [ - 460 - ] - }, - { - "teal": 169, - "source": 121, - "pc": [ - 461, - 462 - ] - }, - { - "teal": 170, - "source": 121, - "pc": [ - 463, - 464 - ] - }, - { - "teal": 171, - "source": 121, - "pc": [ - 465 - ] - }, - { - "teal": 175, - "source": 122, - "pc": [ - 466, - 467 - ] - }, - { - "teal": 176, - "source": 122, - "pc": [ - 468 - ] - }, - { - "teal": 177, - "source": 122, - "pc": [ - 469 - ] - }, - { - "teal": 181, - "source": 124, - "pc": [ - 470, - 471, - 472 - ] - }, - { - "teal": 185, - "source": 125, - "pc": [ - 473, - 474 - ] - }, - { - "teal": 186, - "source": 125, - "pc": [ - 475, - 476 - ] - }, - { - "teal": 187, - "source": 125, - "pc": [ - 477, - 478 - ] - }, - { - "teal": 188, - "source": 125, - "pc": [ - 479, - 480 - ] - }, - { - "teal": 189, - "source": 125, - "pc": [ - 481 - ] - }, - { - "teal": 190, - "source": 125, - "pc": [ - 482 - ] - }, - { - "teal": 191, - "source": 125, - "pc": [ - 483 - ] - }, - { - "teal": 192, - "source": 125, - "pc": [ - 484 - ] - }, - { - "teal": 196, - "source": 126, - "pc": [ - 485, - 486 - ] - }, - { - "teal": 197, - "source": 126, - "pc": [ - 487, - 488 - ] - }, - { - "teal": 198, - "source": 126, - "pc": [ - 489 - ] - }, - { - "teal": 202, - "source": 127, - "pc": [ - 490, - 491 - ] - }, - { - "teal": 203, - "source": 127, - "pc": [ - 492 - ] - }, - { - "teal": 204, - "source": 127, - "pc": [ - 493 - ] - }, - { - "teal": 208, - "source": 128, - "pc": [ - 494, - 495 - ] - }, - { - "teal": 209, - "source": 128, - "pc": [ - 496, - 497 - ] - }, - { - "teal": 210, - "source": 128, - "pc": [ - 498 - ] - }, - { - "teal": 211, - "source": 105, - "pc": [ - 499 - ] - }, - { - "teal": 216, - "source": 134, - "pc": [ - 500, - 501, - 502 - ] - }, - { - "teal": 217, - "source": 134, - "pc": [ - 503 - ] - }, - { - "teal": 218, - "source": 134, - "pc": [ - 504 - ] - }, - { - "teal": 224, - "source": 134, - "pc": [ - 505, - 506, - 507 - ] - }, - { - "teal": 225, - "source": 134, - "pc": [ - 508 - ] - }, - { - "teal": 229, - "source": 136, - "pc": [ - 509, - 510, - 511 - ] - }, - { - "teal": 233, - "source": 140, - "pc": [ - 512, - 513, - 514 - ] - }, - { - "teal": 234, - "source": 140, - "pc": [ - 515, - 516 - ] - }, - { - "teal": 235, - "source": 140, - "pc": [ - 517, - 518 - ] - }, - { - "teal": 236, - "source": 140, - "pc": [ - 519 - ] - }, - { - "teal": 237, - "source": 140, - "pc": [ - 520 - ] - }, - { - "teal": 238, - "source": 136, - "pc": [ - 521 - ] - }, - { - "teal": 243, - "source": 150, - "pc": [ - 522, - 523 - ] - }, - { - "teal": 244, - "source": 150, - "pc": [ - 524 - ] - }, - { - "teal": 245, - "source": 150, - "pc": [ - 525 - ] - }, - { - "teal": 246, - "source": 150, - "pc": [ - 526 - ] - }, - { - "teal": 247, - "source": 150, - "pc": [ - 527, - 528 - ] - }, - { - "teal": 248, - "source": 150, - "pc": [ - 529 - ] - }, - { - "teal": 249, - "source": 150, - "pc": [ - 530 - ] - }, - { - "teal": 252, - "source": 150, - "errorMessage": "argument 0 (mbrPayment) for initStorage must be a pay transaction", - "pc": [ - 531 - ] - }, - { - "teal": 255, - "source": 150, - "pc": [ - 532, - 533, - 534 - ] - }, - { - "teal": 256, - "source": 150, - "pc": [ - 535 - ] - }, - { - "teal": 257, - "source": 150, - "pc": [ - 536 - ] - }, - { - "teal": 267, - "source": 150, - "pc": [ - 537, - 538, - 539 - ] - }, - { - "teal": 270, - "source": 150, - "pc": [ - 540, - 541 - ] - }, - { - "teal": 271, - "source": 150, - "pc": [ - 542, - 543 - ] - }, - { - "teal": 275, - "source": 151, - "pc": [ - 544 - ] - }, - { - "teal": 276, - "source": 151, - "pc": [ - 545 - ] - }, - { - "teal": 277, - "source": 151, - "pc": [ - 546 - ] - }, - { - "teal": 278, - "source": 151, - "pc": [ - 547 - ] - }, - { - "teal": 279, - "source": 151, - "pc": [ - 548 - ] - }, - { - "teal": 282, - "source": 151, - "errorMessage": "staking pool already initialized", - "pc": [ - 549 - ] - }, - { - "teal": 289, - "source": 154, - "pc": [ - 550 - ] - }, - { - "teal": 290, - "source": 154, - "pc": [ - 551 - ] - }, - { - "teal": 291, - "source": 154, - "pc": [ - 552, - 553 - ] - }, - { - "teal": 292, - "source": 154, - "pc": [ - 554, - 555 - ] - }, - { - "teal": 293, - "source": 154, - "pc": [ - 556, - 557 - ] - }, - { - "teal": 297, - "source": 155, - "pc": [ - 558 - ] - }, - { - "teal": 298, - "source": 155, - "pc": [ - 559 - ] - }, - { - "teal": 299, - "source": 155, - "pc": [ - 560, - 561 - ] - }, - { - "teal": 303, - "source": 156, - "pc": [ - 562 - ] - }, - { - "teal": 304, - "source": 156, - "pc": [ - 563 - ] - }, - { - "teal": 305, - "source": 156, - "pc": [ - 564 - ] - }, - { - "teal": 306, - "source": 156, - "pc": [ - 565, - 566 - ] - }, - { - "teal": 309, - "source": 154, - "pc": [ - 567 - ] - }, - { - "teal": 310, - "source": 154, - "pc": [ - 568, - 569 - ] - }, - { - "teal": 313, - "source": 154, - "pc": [ - 570 - ] - }, - { - "teal": 314, - "source": 154, - "pc": [ - 571, - 572 - ] - }, - { - "teal": 315, - "source": 154, - "pc": [ - 573 - ] - }, - { - "teal": 316, - "source": 154, - "pc": [ - 574 - ] - }, - { - "teal": 317, - "source": 154, - "pc": [ - 575, - 576 - ] - }, - { - "teal": 318, - "source": 154, - "pc": [ - 577, - 578, - 579 - ] - }, - { - "teal": 319, - "source": 154, - "pc": [ - 580, - 581 - ] - }, - { - "teal": 323, - "source": 158, - "pc": [ - 582, - 583 - ] - }, - { - "teal": 324, - "source": 158, - "pc": [ - 584, - 585, - 586 - ] - }, - { - "teal": 325, - "source": 158, - "pc": [ - 587 - ] - }, - { - "teal": 326, - "source": 158, - "pc": [ - 588 - ] - }, - { - "teal": 327, - "source": 158, - "pc": [ - 589 - ] - }, - { - "teal": 328, - "source": 158, - "pc": [ - 590, - 591 - ] - }, - { - "teal": 332, - "source": 159, - "pc": [ - 592, - 593 - ] - }, - { - "teal": 333, - "source": 159, - "pc": [ - 594 - ] - }, - { - "teal": 334, - "source": 159, - "pc": [ - 595, - 596, - 597 - ] - }, - { - "teal": 335, - "source": 159, - "pc": [ - 598 - ] - }, - { - "teal": 336, - "source": 159, - "pc": [ - 599 - ] - }, - { - "teal": 337, - "source": 159, - "pc": [ - 600 - ] - }, - { - "teal": 338, - "source": 159, - "pc": [ - 601 - ] - }, - { - "teal": 339, - "source": 159, - "pc": [ - 602 - ] - }, - { - "teal": 342, - "source": 159, - "pc": [ - 603, - 604, - 605 - ] - }, - { - "teal": 343, - "source": 159, - "pc": [ - 606, - 607 - ] - }, - { - "teal": 344, - "source": 159, - "pc": [ - 608, - 609, - 610 - ] - }, - { - "teal": 347, - "source": 159, - "pc": [ - 611 - ] - }, - { - "teal": 350, - "source": 159, - "pc": [ - 612, - 613 - ] - }, - { - "teal": 357, - "source": 161, - "pc": [ - 614, - 615 - ] - }, - { - "teal": 358, - "source": 162, - "pc": [ - 616, - 617 - ] - }, - { - "teal": 359, - "source": 161, - "pc": [ - 618 - ] - }, - { - "teal": 360, - "source": 163, - "pc": [ - 619, - 620, - 621 - ] - }, - { - "teal": 361, - "source": 163, - "pc": [ - 622, - 623, - 624 - ] - }, - { - "teal": 362, - "source": 162, - "pc": [ - 625 - ] - }, - { - "teal": 363, - "source": 160, - "pc": [ - 626, - 627 - ] - }, - { - "teal": 368, - "source": 166, - "pc": [ - 628, - 629 - ] - }, - { - "teal": 369, - "source": 166, - "pc": [ - 630, - 631 - ] - }, - { - "teal": 370, - "source": 166, - "pc": [ - 632, - 633 - ] - }, - { - "teal": 371, - "source": 166, - "pc": [ - 634 - ] - }, - { - "teal": 374, - "source": 166, - "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", - "pc": [ - 635 - ] - }, - { - "teal": 377, - "source": 166, - "pc": [ - 636, - 637 - ] - }, - { - "teal": 378, - "source": 166, - "pc": [ - 638, - 639 - ] - }, - { - "teal": 379, - "source": 166, - "pc": [ - 640, - 641 - ] - }, - { - "teal": 380, - "source": 166, - "pc": [ - 642 - ] - }, - { - "teal": 383, - "source": 166, - "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"amount\",\"expected\":\"PoolInitMbr\"}", - "pc": [ - 643 - ] - }, - { - "teal": 387, - "source": 167, - "pc": [ - 644 - ] - }, - { - "teal": 388, - "source": 167, - "pc": [ - 645, - 646, - 647 - ] - }, - { - "teal": 389, - "source": 167, - "pc": [ - 648 - ] - }, - { - "teal": 390, - "source": 167, - "pc": [ - 649 - ] - }, - { - "teal": 395, - "source": 169, - "pc": [ - 650, - 651 - ] - }, - { - "teal": 396, - "source": 169, - "pc": [ - 652 - ] - }, - { - "teal": 397, - "source": 169, - "pc": [ - 653, - 654, - 655 - ] - }, - { - "teal": 398, - "source": 169, - "pc": [ - 656 - ] - }, - { - "teal": 399, - "source": 169, - "pc": [ - 657 - ] - }, - { - "teal": 400, - "source": 169, - "pc": [ - 658 - ] - }, - { - "teal": 401, - "source": 169, - "pc": [ - 659 - ] - }, - { - "teal": 402, - "source": 169, - "pc": [ - 660 - ] - }, - { - "teal": 405, - "source": 169, - "pc": [ - 661, - 662, - 663 - ] - }, - { - "teal": 414, - "source": 171, - "pc": [ - 664 - ] - }, - { - "teal": 415, - "source": 171, - "pc": [ - 665, - 666 - ] - }, - { - "teal": 416, - "source": 171, - "pc": [ - 667, - 668 - ] - }, - { - "teal": 420, - "source": 172, - "pc": [ - 669, - 670 - ] - }, - { - "teal": 421, - "source": 172, - "pc": [ - 671, - 672, - 673 - ] - }, - { - "teal": 422, - "source": 172, - "pc": [ - 674 - ] - }, - { - "teal": 423, - "source": 172, - "pc": [ - 675, - 676 - ] - }, - { - "teal": 427, - "source": 173, - "pc": [ - 677, - 678 - ] - }, - { - "teal": 428, - "source": 173, - "pc": [ - 679, - 680 - ] - }, - { - "teal": 432, - "source": 174, - "pc": [ - 681 - ] - }, - { - "teal": 433, - "source": 174, - "pc": [ - 682, - 683 - ] - }, - { - "teal": 436, - "source": 171, - "pc": [ - 684 - ] - }, - { - "teal": 437, - "source": 171, - "pc": [ - 685, - 686 - ] - }, - { - "teal": 440, - "source": 171, - "pc": [ - 687 - ] - }, - { - "teal": 443, - "source": 150, - "pc": [ - 688 - ] - }, - { - "teal": 448, - "source": 189, - "pc": [ - 689, - 690 - ] - }, - { - "teal": 451, - "source": 189, - "pc": [ - 691, - 692, - 693 - ] - }, - { - "teal": 452, - "source": 189, - "pc": [ - 694 - ] - }, - { - "teal": 453, - "source": 189, - "pc": [ - 695 - ] - }, - { - "teal": 454, - "source": 189, - "pc": [ - 696, - 697 - ] - }, - { - "teal": 455, - "source": 189, - "pc": [ - 698 - ] - }, - { - "teal": 458, - "source": 189, - "errorMessage": "argument 0 (staker) for addStake must be a address", - "pc": [ - 699 - ] - }, - { - "teal": 461, - "source": 189, - "pc": [ - 700, - 701 - ] - }, - { - "teal": 462, - "source": 189, - "pc": [ - 702 - ] - }, - { - "teal": 463, - "source": 189, - "pc": [ - 703 - ] - }, - { - "teal": 464, - "source": 189, - "pc": [ - 704 - ] - }, - { - "teal": 465, - "source": 189, - "pc": [ - 705, - 706 - ] - }, - { - "teal": 466, - "source": 189, - "pc": [ - 707 - ] - }, - { - "teal": 467, - "source": 189, - "pc": [ - 708 - ] - }, - { - "teal": 470, - "source": 189, - "errorMessage": "argument 1 (stakedAmountPayment) for addStake must be a pay transaction", - "pc": [ - 709 - ] - }, - { - "teal": 473, - "source": 189, - "pc": [ - 710, - 711, - 712 - ] - }, - { - "teal": 474, - "source": 189, - "pc": [ - 713 - ] - }, - { - "teal": 475, - "source": 189, - "pc": [ - 714 - ] - }, - { - "teal": 476, - "source": 189, - "pc": [ - 715 - ] - }, - { - "teal": 477, - "source": 189, - "pc": [ - 716 - ] - }, - { - "teal": 478, - "source": 189, - "pc": [ - 717 - ] - }, - { - "teal": 491, - "source": 189, - "pc": [ - 718, - 719, - 720 - ] - }, - { - "teal": 494, - "source": 189, - "pc": [ - 721, - 722 - ] - }, - { - "teal": 495, - "source": 189, - "pc": [ - 723, - 724 - ] - }, - { - "teal": 499, - "source": 190, - "pc": [ - 725 - ] - }, - { - "teal": 500, - "source": 190, - "pc": [ - 726 - ] - }, - { - "teal": 501, - "source": 190, - "pc": [ - 727 - ] - }, - { - "teal": 502, - "source": 190, - "pc": [ - 728 - ] - }, - { - "teal": 505, - "source": 190, - "errorMessage": "staking pool must be initialized first", - "pc": [ - 729 - ] - }, - { - "teal": 512, - "source": 194, - "pc": [ - 730, - 731 - ] - }, - { - "teal": 513, - "source": 194, - "pc": [ - 732 - ] - }, - { - "teal": 514, - "source": 194, - "pc": [ - 733 - ] - }, - { - "teal": 515, - "source": 194, - "pc": [ - 734, - 735 - ] - }, - { - "teal": 516, - "source": 194, - "pc": [ - 736 - ] - }, - { - "teal": 517, - "source": 194, - "pc": [ - 737 - ] - }, - { - "teal": 520, - "source": 193, - "errorMessage": "stake can only be added via the validator contract", - "pc": [ - 738 - ] - }, - { - "teal": 524, - "source": 197, - "pc": [ - 739, - 740 - ] - }, - { - "teal": 525, - "source": 197, - "pc": [ - 741, - 742 - ] - }, - { - "teal": 526, - "source": 197, - "pc": [ - 743 - ] - }, - { - "teal": 527, - "source": 197, - "pc": [ - 744 - ] - }, - { - "teal": 531, - "source": 200, - "pc": [ - 745, - 746, - 747 - ] - }, - { - "teal": 540, - "source": 204, - "pc": [ - 748, - 749 - ] - }, - { - "teal": 541, - "source": 205, - "pc": [ - 750, - 751 - ] - }, - { - "teal": 542, - "source": 205, - "pc": [ - 752 - ] - }, - { - "teal": 543, - "source": 205, - "pc": [ - 753 - ] - }, - { - "teal": 544, - "source": 205, - "pc": [ - 754, - 755 - ] - }, - { - "teal": 545, - "source": 205, - "pc": [ - 756 - ] - }, - { - "teal": 546, - "source": 205, - "pc": [ - 757 - ] - }, - { - "teal": 549, - "source": 205, - "errorMessage": "transaction verification failed: {\"txn\":\"stakedAmountPayment\",\"field\":\"sender\",\"expected\":\"this.creatingValidatorContractAppId.value.address\"}", - "pc": [ - 758 - ] - }, - { - "teal": 552, - "source": 204, - "pc": [ - 759, - 760 - ] - }, - { - "teal": 553, - "source": 206, - "pc": [ - 761, - 762 - ] - }, - { - "teal": 554, - "source": 206, - "pc": [ - 763, - 764 - ] - }, - { - "teal": 555, - "source": 206, - "pc": [ - 765 - ] - }, - { - "teal": 558, - "source": 206, - "errorMessage": "transaction verification failed: {\"txn\":\"stakedAmountPayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", - "pc": [ - 766 - ] - }, - { - "teal": 561, - "source": 204, - "pc": [ - 767, - 768 - ] - }, - { - "teal": 562, - "source": 207, - "pc": [ - 769, - 770 - ] - }, - { - "teal": 563, - "source": 207, - "pc": [ - 771, - 772 - ] - }, - { - "teal": 564, - "source": 207, - "pc": [ - 773, - 774 - ] - }, - { - "teal": 565, - "source": 207, - "pc": [ - 775 - ] - }, - { - "teal": 568, - "source": 207, - "errorMessage": "transaction verification failed: {\"txn\":\"stakedAmountPayment\",\"field\":\"amount\",\"expected\":\"stakedAmountPayment.amount\"}", - "pc": [ - 776 - ] - }, - { - "teal": 572, - "source": 213, - "pc": [ - 777, - 778 - ] - }, - { - "teal": 573, - "source": 213, - "pc": [ - 779, - 780, - 781 - ] - }, - { - "teal": 574, - "source": 213, - "pc": [ - 782 - ] - }, - { - "teal": 575, - "source": 213, - "pc": [ - 783, - 784 - ] - }, - { - "teal": 579, - "source": 214, - "pc": [ - 785 - ] - }, - { - "teal": 580, - "source": 214, - "pc": [ - 786, - 787 - ] - }, - { - "teal": 584, - "source": 216, - "pc": [ - 788, - 789 - ] - }, - { - "teal": 585, - "source": 216, - "pc": [ - 790 - ] - }, - { - "teal": 586, - "source": 216, - "pc": [ - 791, - 792 - ] - }, - { - "teal": 587, - "source": 216, - "pc": [ - 793, - 794 - ] - }, - { - "teal": 588, - "source": 216, - "pc": [ - 795 - ] - }, - { - "teal": 589, - "source": 216, - "pc": [ - 796, - 797 - ] - }, - { - "teal": 590, - "source": 216, - "pc": [ - 798 - ] - }, - { - "teal": 591, - "source": 216, - "pc": [ - 799 - ] - }, - { - "teal": 595, - "source": 218, - "pc": [ - 800, - 801 - ] - }, - { - "teal": 596, - "source": 218, - "pc": [ - 802 - ] - }, - { - "teal": 597, - "source": 218, - "pc": [ - 803, - 804 - ] - }, - { - "teal": 598, - "source": 218, - "pc": [ - 805 - ] - }, - { - "teal": 599, - "source": 218, - "pc": [ - 806 - ] - }, - { - "teal": 600, - "source": 218, - "pc": [ - 807, - 808 - ] - }, - { - "teal": 601, - "source": 218, - "pc": [ - 809 - ] - }, - { - "teal": 602, - "source": 218, - "pc": [ - 810, - 811 - ] - }, - { - "teal": 607, - "source": 219, - "pc": [ - 812, - 813 - ] - }, - { - "teal": 608, - "source": 219, - "pc": [ - 814 - ] - }, - { - "teal": 609, - "source": 220, - "pc": [ - 815 - ] - }, - { - "teal": 610, - "source": 220, - "pc": [ - 816, - 817 - ] - }, - { - "teal": 611, - "source": 220, - "pc": [ - 818, - 819 - ] - }, - { - "teal": 612, - "source": 220, - "pc": [ - 820 - ] - }, - { - "teal": 613, - "source": 220, - "pc": [ - 821, - 822 - ] - }, - { - "teal": 614, - "source": 220, - "pc": [ - 823 - ] - }, - { - "teal": 615, - "source": 220, - "pc": [ - 824 - ] - }, - { - "teal": 616, - "source": 220, - "pc": [ - 825 - ] - }, - { - "teal": 617, - "source": 220, - "pc": [ - 826 - ] - }, - { - "teal": 618, - "source": 220, - "pc": [ - 827 - ] - }, - { - "teal": 619, - "source": 220, - "pc": [ - 828, - 829 - ] - }, - { - "teal": 620, - "source": 220, - "pc": [ - 830 - ] - }, - { - "teal": 623, - "source": 220, - "errorMessage": "this.stakeAccumulator.value + (stakedAmountPayment.amount as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits", - "pc": [ - 831 - ] - }, - { - "teal": 624, - "source": 220, - "pc": [ - 832, - 833 - ] - }, - { - "teal": 625, - "source": 220, - "pc": [ - 834 - ] - }, - { - "teal": 626, - "source": 220, - "pc": [ - 835 - ] - }, - { - "teal": 627, - "source": 220, - "pc": [ - 836 - ] - }, - { - "teal": 628, - "source": 220, - "pc": [ - 837 - ] - }, - { - "teal": 629, - "source": 220, - "pc": [ - 838, - 839 - ] - }, - { - "teal": 630, - "source": 220, - "pc": [ - 840 - ] - }, - { - "teal": 631, - "source": 220, - "pc": [ - 841 - ] - }, - { - "teal": 632, - "source": 220, - "pc": [ - 842 - ] - }, - { - "teal": 633, - "source": 219, - "pc": [ - 843 - ] - }, - { - "teal": 637, - "source": 223, - "pc": [ - 844 - ] - }, - { - "teal": 638, - "source": 223, - "pc": [ - 845, - 846 - ] - }, - { - "teal": 643, - "source": 223, - "pc": [ - 847, - 848 - ] - }, - { - "teal": 644, - "source": 223, - "pc": [ - 849, - 850 - ] - }, - { - "teal": 645, - "source": 223, - "pc": [ - 851 - ] - }, - { - "teal": 646, - "source": 223, - "pc": [ - 852, - 853, - 854 - ] - }, - { - "teal": 651, - "source": 224, - "pc": [ - 855, - 856 - ] - }, - { - "teal": 652, - "source": 224, - "pc": [ - 857, - 858 - ] - }, - { - "teal": 653, - "source": 224, - "pc": [ - 859 - ] - }, - { - "teal": 654, - "source": 224, - "pc": [ - 860, - 861, - 862 - ] - }, - { - "teal": 659, - "source": 225, - "pc": [ - 863 - ] - }, - { - "teal": 660, - "source": 225, - "pc": [ - 864 - ] - }, - { - "teal": 661, - "source": 225, - "pc": [ - 865, - 866 - ] - }, - { - "teal": 662, - "source": 225, - "pc": [ - 867 - ] - }, - { - "teal": 663, - "source": 225, - "pc": [ - 868, - 869 - ] - }, - { - "teal": 664, - "source": 225, - "pc": [ - 870, - 871 - ] - }, - { - "teal": 665, - "source": 225, - "pc": [ - 872 - ] - }, - { - "teal": 666, - "source": 225, - "pc": [ - 873, - 874 - ] - }, - { - "teal": 667, - "source": 225, - "pc": [ - 875, - 876 - ] - }, - { - "teal": 668, - "source": 225, - "pc": [ - 877, - 878 - ] - }, - { - "teal": 669, - "source": 225, - "pc": [ - 879, - 880 - ] - }, - { - "teal": 670, - "source": 225, - "pc": [ - 881 - ] - }, - { - "teal": 675, - "source": 227, - "pc": [ - 882, - 883 - ] - }, - { - "teal": 676, - "source": 227, - "pc": [ - 884 - ] - }, - { - "teal": 677, - "source": 227, - "pc": [ - 885 - ] - }, - { - "teal": 678, - "source": 227, - "pc": [ - 886 - ] - }, - { - "teal": 679, - "source": 227, - "pc": [ - 887 - ] - }, - { - "teal": 680, - "source": 227, - "pc": [ - 888, - 889 - ] - }, - { - "teal": 681, - "source": 227, - "pc": [ - 890 - ] - }, - { - "teal": 682, - "source": 227, - "pc": [ - 891, - 892 - ] - }, - { - "teal": 687, - "source": 228, - "pc": [ - 893, - 894 - ] - }, - { - "teal": 688, - "source": 228, - "pc": [ - 895, - 896, - 897 - ] - }, - { - "teal": 689, - "source": 228, - "pc": [ - 898, - 899 - ] - }, - { - "teal": 690, - "source": 228, - "pc": [ - 900 - ] - }, - { - "teal": 691, - "source": 228, - "pc": [ - 901, - 902, - 903 - ] - }, - { - "teal": 696, - "source": 230, - "pc": [ - 904, - 905 - ] - }, - { - "teal": 697, - "source": 230, - "pc": [ - 906, - 907 - ] - }, - { - "teal": 698, - "source": 230, - "pc": [ - 908, - 909 - ] - }, - { - "teal": 699, - "source": 230, - "pc": [ - 910, - 911, - 912 - ] - }, - { - "teal": 700, - "source": 230, - "pc": [ - 913 - ] - }, - { - "teal": 701, - "source": 230, - "pc": [ - 914, - 915 - ] - }, - { - "teal": 702, - "source": 230, - "pc": [ - 916, - 917 - ] - }, - { - "teal": 703, - "source": 230, - "pc": [ - 918 - ] - }, - { - "teal": 704, - "source": 230, - "pc": [ - 919 - ] - }, - { - "teal": 705, - "source": 230, - "pc": [ - 920 - ] - }, - { - "teal": 706, - "source": 230, - "pc": [ - 921, - 922 - ] - }, - { - "teal": 710, - "source": 231, - "pc": [ - 923, - 924 - ] - }, - { - "teal": 711, - "source": 231, - "pc": [ - 925, - 926 - ] - }, - { - "teal": 712, - "source": 231, - "pc": [ - 927, - 928 - ] - }, - { - "teal": 713, - "source": 231, - "pc": [ - 929 - ] - }, - { - "teal": 714, - "source": 231, - "pc": [ - 930 - ] - }, - { - "teal": 715, - "source": 231, - "pc": [ - 931, - 932 - ] - }, - { - "teal": 719, - "source": 234, - "pc": [ - 933, - 934 - ] - }, - { - "teal": 720, - "source": 234, - "pc": [ - 935 - ] - }, - { - "teal": 721, - "source": 234, - "pc": [ - 936 - ] - }, - { - "teal": 722, - "source": 234, - "pc": [ - 937, - 938 - ] - }, - { - "teal": 723, - "source": 234, - "pc": [ - 939 - ] - }, - { - "teal": 724, - "source": 234, - "pc": [ - 940, - 941 - ] - }, - { - "teal": 725, - "source": 234, - "pc": [ - 942 - ] - }, - { - "teal": 729, - "source": 236, - "pc": [ - 943, - 944 - ] - }, - { - "teal": 730, - "source": 236, - "pc": [ - 945, - 946, - 947 - ] - }, - { - "teal": 736, - "source": 238, - "pc": [ - 948, - 949 - ] - }, - { - "teal": 737, - "source": 238, - "pc": [ - 950 - ] - }, - { - "teal": 738, - "source": 238, - "pc": [ - 951 - ] - }, - { - "teal": 739, - "source": 238, - "pc": [ - 952 - ] - }, - { - "teal": 740, - "source": 238, - "pc": [ - 953, - 954, - 955 - ] - }, - { - "teal": 741, - "source": 238, - "pc": [ - 956, - 957 - ] - }, - { - "teal": 742, - "source": 238, - "pc": [ - 958, - 959, - 960 - ] - }, - { - "teal": 743, - "source": 238, - "pc": [ - 961, - 962 - ] - }, - { - "teal": 744, - "source": 238, - "pc": [ - 963 - ] - }, - { - "teal": 745, - "source": 238, - "pc": [ - 964 - ] - }, - { - "teal": 748, - "source": 238, - "pc": [ - 965, - 966, - 967 - ] - }, - { - "teal": 753, - "source": 239, - "pc": [ - 968, - 969 - ] - }, - { - "teal": 754, - "source": 239, - "pc": [ - 970 - ] - }, - { - "teal": 755, - "source": 239, - "pc": [ - 971 - ] - }, - { - "teal": 756, - "source": 239, - "pc": [ - 972, - 973 - ] - }, - { - "teal": 763, - "source": 223, - "pc": [ - 974, - 975 - ] - }, - { - "teal": 764, - "source": 223, - "pc": [ - 976 - ] - }, - { - "teal": 765, - "source": 223, - "pc": [ - 977 - ] - }, - { - "teal": 766, - "source": 223, - "pc": [ - 978, - 979 - ] - }, - { - "teal": 767, - "source": 223, - "pc": [ - 980, - 981, - 982 - ] - }, - { - "teal": 773, - "source": 243, - "pc": [ - 983, - 984 - ] - }, - { - "teal": 774, - "source": 243, - "pc": [ - 985 - ] - }, - { - "teal": 775, - "source": 243, - "pc": [ - 986 - ] - }, - { - "teal": 776, - "source": 243, - "pc": [ - 987, - 988, - 989 - ] - }, - { - "teal": 780, - "source": 245, - "errorMessage": "Staking pool full", - "pc": [ - 990 - ] - }, - { - "teal": 785, - "source": 250, - "pc": [ - 991, - 992 - ] - }, - { - "teal": 786, - "source": 250, - "pc": [ - 993, - 994 - ] - }, - { - "teal": 787, - "source": 250, - "pc": [ - 995, - 996 - ] - }, - { - "teal": 788, - "source": 250, - "pc": [ - 997 - ] - }, - { - "teal": 789, - "source": 250, - "pc": [ - 998 - ] - }, - { - "teal": 792, - "source": 250, - "errorMessage": "must stake at least the minimum for this pool", - "pc": [ - 999 - ] - }, - { - "teal": 796, - "source": 252, - "pc": [ - 1000, - 1001 - ] - }, - { - "teal": 797, - "source": 252, - "pc": [ - 1002 - ] - }, - { - "teal": 798, - "source": 252, - "pc": [ - 1003 - ] - }, - { - "teal": 799, - "source": 252, - "pc": [ - 1004 - ] - }, - { - "teal": 800, - "source": 252, - "pc": [ - 1005 - ] - }, - { - "teal": 801, - "source": 252, - "pc": [ - 1006 - ] - }, - { - "teal": 802, - "source": 252, - "pc": [ - 1007 - ] - }, - { - "teal": 803, - "source": 252, - "pc": [ - 1008, - 1009 - ] - }, - { - "teal": 804, - "source": 252, - "pc": [ - 1010 - ] - }, - { - "teal": 805, - "source": 252, - "pc": [ - 1011, - 1012 - ] - }, - { - "teal": 806, - "source": 252, - "pc": [ - 1013 - ] - }, - { - "teal": 807, - "source": 252, - "pc": [ - 1014, - 1015 - ] - }, - { - "teal": 808, - "source": 252, - "pc": [ - 1016 - ] - }, - { - "teal": 809, - "source": 252, - "pc": [ - 1017 - ] - }, - { - "teal": 819, - "source": 253, - "pc": [ - 1018, - 1019 - ] - }, - { - "teal": 820, - "source": 253, - "pc": [ - 1020 - ] - }, - { - "teal": 821, - "source": 253, - "pc": [ - 1021 - ] - }, - { - "teal": 822, - "source": 253, - "pc": [ - 1022 - ] - }, - { - "teal": 823, - "source": 253, - "pc": [ - 1023 - ] - }, - { - "teal": 824, - "source": 254, - "pc": [ - 1024, - 1025 - ] - }, - { - "teal": 825, - "source": 255, - "pc": [ - 1026, - 1027 - ] - }, - { - "teal": 826, - "source": 255, - "pc": [ - 1028, - 1029 - ] - }, - { - "teal": 827, - "source": 255, - "pc": [ - 1030 - ] - }, - { - "teal": 828, - "source": 255, - "pc": [ - 1031 - ] - }, - { - "teal": 829, - "source": 256, - "pc": [ - 1032, - 1033 - ] - }, - { - "teal": 830, - "source": 256, - "pc": [ - 1034 - ] - }, - { - "teal": 831, - "source": 257, - "pc": [ - 1035, - 1036 - ] - }, - { - "teal": 832, - "source": 257, - "pc": [ - 1037 - ] - }, - { - "teal": 833, - "source": 258, - "pc": [ - 1038, - 1039 - ] - }, - { - "teal": 834, - "source": 258, - "pc": [ - 1040 - ] - }, - { - "teal": 835, - "source": 258, - "pc": [ - 1041 - ] - }, - { - "teal": 836, - "source": 253, - "pc": [ - 1042 - ] - }, - { - "teal": 837, - "source": 253, - "pc": [ - 1043, - 1044 - ] - }, - { - "teal": 838, - "source": 253, - "pc": [ - 1045 - ] - }, - { - "teal": 842, - "source": 260, - "pc": [ - 1046, - 1047 - ] - }, - { - "teal": 843, - "source": 260, - "pc": [ - 1048 - ] - }, - { - "teal": 844, - "source": 260, - "pc": [ - 1049 - ] - }, - { - "teal": 845, - "source": 260, - "pc": [ - 1050 - ] - }, - { - "teal": 846, - "source": 260, - "pc": [ - 1051, - 1052 - ] - }, - { - "teal": 847, - "source": 260, - "pc": [ - 1053 - ] - }, - { - "teal": 848, - "source": 260, - "pc": [ - 1054 - ] - }, - { - "teal": 852, - "source": 261, - "pc": [ - 1055, - 1056 - ] - }, - { - "teal": 856, - "source": 189, - "pc": [ - 1057, - 1058 - ] - }, - { - "teal": 859, - "source": 189, - "pc": [ - 1059, - 1060 - ] - }, - { - "teal": 860, - "source": 189, - "pc": [ - 1061 - ] - }, - { - "teal": 865, - "source": 275, - "pc": [ - 1062, - 1063, - 1064 - ] - }, - { - "teal": 866, - "source": 275, - "pc": [ - 1065 - ] - }, - { - "teal": 869, - "source": 275, - "pc": [ - 1066, - 1067, - 1068 - ] - }, - { - "teal": 870, - "source": 275, - "pc": [ - 1069 - ] - }, - { - "teal": 871, - "source": 275, - "pc": [ - 1070 - ] - }, - { - "teal": 872, - "source": 275, - "pc": [ - 1071, - 1072 - ] - }, - { - "teal": 873, - "source": 275, - "pc": [ - 1073 - ] - }, - { - "teal": 876, - "source": 275, - "errorMessage": "argument 1 (staker) for removeStake must be a address", - "pc": [ - 1074 - ] - }, - { - "teal": 879, - "source": 275, - "pc": [ - 1075, - 1076, - 1077 - ] - }, - { - "teal": 880, - "source": 275, - "pc": [ - 1078 - ] - }, - { - "teal": 881, - "source": 275, - "pc": [ - 1079 - ] - }, - { - "teal": 895, - "source": 275, - "pc": [ - 1080, - 1081, - 1082 - ] - }, - { - "teal": 898, - "source": 275, - "pc": [ - 1083, - 1084 - ] - }, - { - "teal": 899, - "source": 275, - "pc": [ - 1085, - 1086 - ] - }, - { - "teal": 904, - "source": 278, - "pc": [ - 1087, - 1088 - ] - }, - { - "teal": 905, - "source": 278, - "pc": [ - 1089, - 1090 - ] - }, - { - "teal": 906, - "source": 278, - "pc": [ - 1091 - ] - }, - { - "teal": 907, - "source": 278, - "pc": [ - 1092, - 1093, - 1094 - ] - }, - { - "teal": 915, - "source": 280, - "pc": [ - 1095, - 1096, - 1097 - ] - }, - { - "teal": 918, - "source": 279, - "errorMessage": "If staker is not sender in removeStake call, then sender MUST be owner or manager of validator", - "pc": [ - 1098 - ] - }, - { - "teal": 923, - "source": 285, - "pc": [ - 1099, - 1100, - 1101 - ] - }, - { - "teal": 927, - "source": 287, - "pc": [ - 1102 - ] - }, - { - "teal": 928, - "source": 287, - "pc": [ - 1103, - 1104 - ] - }, - { - "teal": 933, - "source": 287, - "pc": [ - 1105, - 1106 - ] - }, - { - "teal": 934, - "source": 287, - "pc": [ - 1107, - 1108 - ] - }, - { - "teal": 935, - "source": 287, - "pc": [ - 1109 - ] - }, - { - "teal": 936, - "source": 287, - "pc": [ - 1110, - 1111, - 1112 - ] - }, - { - "teal": 941, - "source": 288, - "pc": [ - 1113, - 1114 - ] - }, - { - "teal": 942, - "source": 288, - "pc": [ - 1115, - 1116 - ] - }, - { - "teal": 943, - "source": 288, - "pc": [ - 1117 - ] - }, - { - "teal": 944, - "source": 288, - "pc": [ - 1118, - 1119, - 1120 - ] - }, - { - "teal": 949, - "source": 289, - "pc": [ - 1121 - ] - }, - { - "teal": 950, - "source": 289, - "pc": [ - 1122 - ] - }, - { - "teal": 951, - "source": 289, - "pc": [ - 1123, - 1124 - ] - }, - { - "teal": 952, - "source": 289, - "pc": [ - 1125 - ] - }, - { - "teal": 953, - "source": 289, - "pc": [ - 1126, - 1127 - ] - }, - { - "teal": 954, - "source": 289, - "pc": [ - 1128, - 1129 - ] - }, - { - "teal": 955, - "source": 289, - "pc": [ - 1130 - ] - }, - { - "teal": 956, - "source": 289, - "pc": [ - 1131, - 1132 - ] - }, - { - "teal": 957, - "source": 289, - "pc": [ - 1133, - 1134 - ] - }, - { - "teal": 958, - "source": 289, - "pc": [ - 1135, - 1136 - ] - }, - { - "teal": 959, - "source": 289, - "pc": [ - 1137, - 1138 - ] - }, - { - "teal": 960, - "source": 289, - "pc": [ - 1139 - ] - }, - { - "teal": 965, - "source": 291, - "pc": [ - 1140, - 1141 - ] - }, - { - "teal": 966, - "source": 291, - "pc": [ - 1142 - ] - }, - { - "teal": 967, - "source": 291, - "pc": [ - 1143 - ] - }, - { - "teal": 968, - "source": 291, - "pc": [ - 1144 - ] - }, - { - "teal": 969, - "source": 291, - "pc": [ - 1145 - ] - }, - { - "teal": 970, - "source": 291, - "pc": [ - 1146, - 1147 - ] - }, - { - "teal": 971, - "source": 291, - "pc": [ - 1148 - ] - }, - { - "teal": 972, - "source": 291, - "pc": [ - 1149, - 1150 - ] - }, - { - "teal": 977, - "source": 292, - "pc": [ - 1151, - 1152 - ] - }, - { - "teal": 978, - "source": 292, - "pc": [ - 1153, - 1154, - 1155 - ] - }, - { - "teal": 979, - "source": 292, - "pc": [ - 1156, - 1157 - ] - }, - { - "teal": 980, - "source": 292, - "pc": [ - 1158 - ] - }, - { - "teal": 981, - "source": 292, - "pc": [ - 1159, - 1160, - 1161 - ] - }, - { - "teal": 987, - "source": 293, - "pc": [ - 1162, - 1163 - ] - }, - { - "teal": 988, - "source": 293, - "pc": [ - 1164 - ] - }, - { - "teal": 989, - "source": 293, - "pc": [ - 1165 - ] - }, - { - "teal": 990, - "source": 293, - "pc": [ - 1166, - 1167, - 1168 - ] - }, - { - "teal": 995, - "source": 295, - "pc": [ - 1169, - 1170 - ] - }, - { - "teal": 996, - "source": 295, - "pc": [ - 1171, - 1172, - 1173 - ] - }, - { - "teal": 997, - "source": 295, - "pc": [ - 1174 - ] - }, - { - "teal": 998, - "source": 295, - "pc": [ - 1175, - 1176 - ] - }, - { - "teal": 1004, - "source": 297, - "pc": [ - 1177, - 1178 - ] - }, - { - "teal": 1005, - "source": 297, - "pc": [ - 1179, - 1180, - 1181 - ] - }, - { - "teal": 1006, - "source": 297, - "pc": [ - 1182 - ] - }, - { - "teal": 1007, - "source": 297, - "pc": [ - 1183, - 1184 - ] - }, - { - "teal": 1008, - "source": 297, - "pc": [ - 1185 - ] - }, - { - "teal": 1009, - "source": 297, - "pc": [ - 1186, - 1187, - 1188 - ] - }, - { - "teal": 1013, - "source": 298, - "errorMessage": "Insufficient balance", - "pc": [ - 1189 - ] - }, - { - "teal": 1018, - "source": 300, - "pc": [ - 1190, - 1191 - ] - }, - { - "teal": 1019, - "source": 300, - "pc": [ - 1192, - 1193 - ] - }, - { - "teal": 1020, - "source": 300, - "pc": [ - 1194, - 1195 - ] - }, - { - "teal": 1021, - "source": 300, - "pc": [ - 1196, - 1197, - 1198 - ] - }, - { - "teal": 1022, - "source": 300, - "pc": [ - 1199 - ] - }, - { - "teal": 1023, - "source": 300, - "pc": [ - 1200, - 1201 - ] - }, - { - "teal": 1024, - "source": 300, - "pc": [ - 1202 - ] - }, - { - "teal": 1025, - "source": 300, - "pc": [ - 1203 - ] - }, - { - "teal": 1026, - "source": 300, - "pc": [ - 1204 - ] - }, - { - "teal": 1027, - "source": 300, - "pc": [ - 1205, - 1206 - ] - }, - { - "teal": 1031, - "source": 301, - "pc": [ - 1207, - 1208 - ] - }, - { - "teal": 1032, - "source": 301, - "pc": [ - 1209 - ] - }, - { - "teal": 1033, - "source": 301, - "pc": [ - 1210, - 1211 - ] - }, - { - "teal": 1034, - "source": 301, - "pc": [ - 1212 - ] - }, - { - "teal": 1035, - "source": 301, - "pc": [ - 1213, - 1214 - ] - }, - { - "teal": 1036, - "source": 301, - "pc": [ - 1215 - ] - }, - { - "teal": 1037, - "source": 301, - "pc": [ - 1216 - ] - }, - { - "teal": 1041, - "source": 303, - "pc": [ - 1217 - ] - }, - { - "teal": 1042, - "source": 303, - "pc": [ - 1218, - 1219 - ] - }, - { - "teal": 1047, - "source": 304, - "pc": [ - 1220, - 1221 - ] - }, - { - "teal": 1048, - "source": 304, - "pc": [ - 1222, - 1223, - 1224 - ] - }, - { - "teal": 1049, - "source": 304, - "pc": [ - 1225 - ] - }, - { - "teal": 1050, - "source": 304, - "pc": [ - 1226 - ] - }, - { - "teal": 1051, - "source": 304, - "pc": [ - 1227 - ] - }, - { - "teal": 1052, - "source": 304, - "pc": [ - 1228, - 1229, - 1230 - ] - }, - { - "teal": 1058, - "source": 306, - "pc": [ - 1231 - ] - }, - { - "teal": 1059, - "source": 306, - "pc": [ - 1232 - ] - }, - { - "teal": 1060, - "source": 306, - "pc": [ - 1233 - ] - }, - { - "teal": 1061, - "source": 306, - "pc": [ - 1234 - ] - }, - { - "teal": 1062, - "source": 306, - "pc": [ - 1235, - 1236, - 1237 - ] - }, - { - "teal": 1070, - "source": 307, - "pc": [ - 1238 - ] - }, - { - "teal": 1071, - "source": 307, - "pc": [ - 1239 - ] - }, - { - "teal": 1072, - "source": 307, - "pc": [ - 1240, - 1241 - ] - }, - { - "teal": 1073, - "source": 307, - "pc": [ - 1242, - 1243 - ] - }, - { - "teal": 1074, - "source": 307, - "pc": [ - 1244, - 1245 - ] - }, - { - "teal": 1078, - "source": 308, - "pc": [ - 1246 - ] - }, - { - "teal": 1079, - "source": 308, - "pc": [ - 1247 - ] - }, - { - "teal": 1080, - "source": 308, - "pc": [ - 1248, - 1249 - ] - }, - { - "teal": 1084, - "source": 309, - "pc": [ - 1250 - ] - }, - { - "teal": 1085, - "source": 309, - "pc": [ - 1251 - ] - }, - { - "teal": 1086, - "source": 309, - "pc": [ - 1252 - ] - }, - { - "teal": 1087, - "source": 309, - "pc": [ - 1253, - 1254 - ] - }, - { - "teal": 1090, - "source": 307, - "pc": [ - 1255 - ] - }, - { - "teal": 1091, - "source": 307, - "pc": [ - 1256, - 1257 - ] - }, - { - "teal": 1094, - "source": 307, - "pc": [ - 1258 - ] - }, - { - "teal": 1095, - "source": 307, - "pc": [ - 1259, - 1260 - ] - }, - { - "teal": 1096, - "source": 307, - "pc": [ - 1261 - ] - }, - { - "teal": 1097, - "source": 307, - "pc": [ - 1262 - ] - }, - { - "teal": 1098, - "source": 307, - "pc": [ - 1263, - 1264 - ] - }, - { - "teal": 1099, - "source": 307, - "pc": [ - 1265, - 1266, - 1267 - ] - }, - { - "teal": 1100, - "source": 307, - "pc": [ - 1268, - 1269 - ] - }, - { - "teal": 1108, - "source": 315, - "pc": [ - 1270 - ] - }, - { - "teal": 1109, - "source": 315, - "pc": [ - 1271, - 1272 - ] - }, - { - "teal": 1110, - "source": 315, - "pc": [ - 1273, - 1274 - ] - }, - { - "teal": 1114, - "source": 316, - "pc": [ - 1275, - 1276 - ] - }, - { - "teal": 1115, - "source": 316, - "pc": [ - 1277, - 1278, - 1279 - ] - }, - { - "teal": 1116, - "source": 316, - "pc": [ - 1280 - ] - }, - { - "teal": 1117, - "source": 316, - "pc": [ - 1281, - 1282 - ] - }, - { - "teal": 1121, - "source": 317, - "pc": [ - 1283, - 1284 - ] - }, - { - "teal": 1122, - "source": 317, - "pc": [ - 1285, - 1286 - ] - }, - { - "teal": 1126, - "source": 318, - "pc": [ - 1287, - 1288 - ] - }, - { - "teal": 1127, - "source": 318, - "pc": [ - 1289, - 1290, - 1291 - ] - }, - { - "teal": 1128, - "source": 318, - "pc": [ - 1292 - ] - }, - { - "teal": 1129, - "source": 318, - "pc": [ - 1293, - 1294 - ] - }, - { - "teal": 1132, - "source": 315, - "pc": [ - 1295 - ] - }, - { - "teal": 1133, - "source": 315, - "pc": [ - 1296, - 1297 - ] - }, - { - "teal": 1136, - "source": 315, - "pc": [ - 1298 - ] - }, - { - "teal": 1140, - "source": 320, - "pc": [ - 1299, - 1300 - ] - }, - { - "teal": 1141, - "source": 320, - "pc": [ - 1301, - 1302, - 1303 - ] - }, - { - "teal": 1142, - "source": 320, - "pc": [ - 1304 - ] - }, - { - "teal": 1143, - "source": 320, - "pc": [ - 1305, - 1306 - ] - }, - { - "teal": 1147, - "source": 321, - "pc": [ - 1307, - 1308 - ] - }, - { - "teal": 1148, - "source": 321, - "pc": [ - 1309, - 1310 - ] - }, - { - "teal": 1149, - "source": 321, - "pc": [ - 1311, - 1312 - ] - }, - { - "teal": 1150, - "source": 321, - "pc": [ - 1313, - 1314 - ] - }, - { - "teal": 1151, - "source": 306, - "pc": [ - 1315, - 1316, - 1317 - ] - }, - { - "teal": 1156, - "source": 326, - "pc": [ - 1318, - 1319 - ] - }, - { - "teal": 1157, - "source": 326, - "pc": [ - 1320, - 1321, - 1322 - ] - }, - { - "teal": 1158, - "source": 326, - "pc": [ - 1323 - ] - }, - { - "teal": 1159, - "source": 326, - "pc": [ - 1324, - 1325 - ] - }, - { - "teal": 1163, - "source": 327, - "pc": [ - 1326, - 1327 - ] - }, - { - "teal": 1164, - "source": 327, - "pc": [ - 1328, - 1329 - ] - }, - { - "teal": 1165, - "source": 327, - "pc": [ - 1330, - 1331 - ] - }, - { - "teal": 1166, - "source": 327, - "pc": [ - 1332, - 1333 - ] - }, - { - "teal": 1176, - "source": 333, - "pc": [ - 1334, - 1335 - ] - }, - { - "teal": 1177, - "source": 333, - "pc": [ - 1336, - 1337, - 1338 - ] - }, - { - "teal": 1178, - "source": 333, - "pc": [ - 1339 - ] - }, - { - "teal": 1179, - "source": 333, - "pc": [ - 1340 - ] - }, - { - "teal": 1180, - "source": 333, - "pc": [ - 1341 - ] - }, - { - "teal": 1181, - "source": 333, - "pc": [ - 1342 - ] - }, - { - "teal": 1182, - "source": 333, - "pc": [ - 1343, - 1344, - 1345 - ] - }, - { - "teal": 1183, - "source": 333, - "pc": [ - 1346, - 1347 - ] - }, - { - "teal": 1184, - "source": 333, - "pc": [ - 1348, - 1349, - 1350 - ] - }, - { - "teal": 1185, - "source": 333, - "pc": [ - 1351 - ] - }, - { - "teal": 1186, - "source": 333, - "pc": [ - 1352, - 1353 - ] - }, - { - "teal": 1187, - "source": 333, - "pc": [ - 1354 - ] - }, - { - "teal": 1188, - "source": 333, - "pc": [ - 1355 - ] - }, - { - "teal": 1189, - "source": 333, - "pc": [ - 1356 - ] - }, - { - "teal": 1193, - "source": 332, - "errorMessage": "cannot reduce balance below minimum allowed stake unless all is removed", - "pc": [ - 1357 - ] - }, - { - "teal": 1201, - "source": 340, - "pc": [ - 1358 - ] - }, - { - "teal": 1202, - "source": 340, - "pc": [ - 1359 - ] - }, - { - "teal": 1203, - "source": 340, - "pc": [ - 1360, - 1361 - ] - }, - { - "teal": 1207, - "source": 341, - "pc": [ - 1362, - 1363 - ] - }, - { - "teal": 1208, - "source": 341, - "pc": [ - 1364, - 1365 - ] - }, - { - "teal": 1212, - "source": 342, - "pc": [ - 1366, - 1367 - ] - }, - { - "teal": 1213, - "source": 342, - "pc": [ - 1368, - 1369 - ] - }, - { - "teal": 1217, - "source": 343, - "pc": [ - 1370, - 1371, - 1372, - 1373, - 1374, - 1375, - 1376, - 1377, - 1378, - 1379 - ] - }, - { - "teal": 1218, - "source": 343, - "pc": [ - 1380, - 1381 - ] - }, - { - "teal": 1221, - "source": 340, - "pc": [ - 1382 - ] - }, - { - "teal": 1222, - "source": 340, - "pc": [ - 1383, - 1384 - ] - }, - { - "teal": 1225, - "source": 340, - "pc": [ - 1385 - ] - }, - { - "teal": 1229, - "source": 345, - "pc": [ - 1386 - ] - }, - { - "teal": 1230, - "source": 345, - "pc": [ - 1387, - 1388 - ] - }, - { - "teal": 1235, - "source": 346, - "pc": [ - 1389, - 1390 - ] - }, - { - "teal": 1236, - "source": 346, - "pc": [ - 1391, - 1392, - 1393 - ] - }, - { - "teal": 1237, - "source": 346, - "pc": [ - 1394 - ] - }, - { - "teal": 1238, - "source": 346, - "pc": [ - 1395 - ] - }, - { - "teal": 1239, - "source": 346, - "pc": [ - 1396 - ] - }, - { - "teal": 1240, - "source": 346, - "pc": [ - 1397, - 1398, - 1399 - ] - }, - { - "teal": 1245, - "source": 348, - "pc": [ - 1400, - 1401 - ] - }, - { - "teal": 1246, - "source": 348, - "pc": [ - 1402 - ] - }, - { - "teal": 1247, - "source": 348, - "pc": [ - 1403 - ] - }, - { - "teal": 1248, - "source": 348, - "pc": [ - 1404 - ] - }, - { - "teal": 1249, - "source": 348, - "pc": [ - 1405, - 1406 - ] - }, - { - "teal": 1250, - "source": 348, - "pc": [ - 1407 - ] - }, - { - "teal": 1251, - "source": 348, - "pc": [ - 1408 - ] - }, - { - "teal": 1255, - "source": 349, - "pc": [ - 1409, - 1410 - ] - }, - { - "teal": 1256, - "source": 349, - "pc": [ - 1411 - ] - }, - { - "teal": 1257, - "source": 349, - "pc": [ - 1412, - 1413 - ] - }, - { - "teal": 1258, - "source": 349, - "pc": [ - 1414 - ] - }, - { - "teal": 1259, - "source": 349, - "pc": [ - 1415, - 1416 - ] - }, - { - "teal": 1263, - "source": 350, - "pc": [ - 1417, - 1418 - ] - }, - { - "teal": 1264, - "source": 350, - "pc": [ - 1419, - 1420 - ] - }, - { - "teal": 1265, - "source": 350, - "pc": [ - 1421, - 1422 - ] - }, - { - "teal": 1266, - "source": 350, - "pc": [ - 1423, - 1424 - ] - }, - { - "teal": 1270, - "source": 351, - "pc": [ - 1425, - 1426 - ] - }, - { - "teal": 1271, - "source": 351, - "pc": [ - 1427, - 1428 - ] - }, - { - "teal": 1272, - "source": 351, - "pc": [ - 1429, - 1430 - ] - }, - { - "teal": 1273, - "source": 351, - "pc": [ - 1431, - 1432 - ] - }, - { - "teal": 1277, - "source": 352, - "pc": [ - 1433 - ] - }, - { - "teal": 1278, - "source": 352, - "pc": [ - 1434, - 1435 - ] - }, - { - "teal": 1283, - "source": 355, - "pc": [ - 1436, - 1437 - ] - }, - { - "teal": 1284, - "source": 355, - "pc": [ - 1438 - ] - }, - { - "teal": 1285, - "source": 355, - "pc": [ - 1439 - ] - }, - { - "teal": 1286, - "source": 355, - "pc": [ - 1440, - 1441 - ] - }, - { - "teal": 1287, - "source": 355, - "pc": [ - 1442 - ] - }, - { - "teal": 1288, - "source": 355, - "pc": [ - 1443, - 1444 - ] - }, - { - "teal": 1289, - "source": 355, - "pc": [ - 1445 - ] - }, - { - "teal": 1293, - "source": 357, - "pc": [ - 1446, - 1447 - ] - }, - { - "teal": 1294, - "source": 357, - "pc": [ - 1448 - ] - }, - { - "teal": 1295, - "source": 357, - "pc": [ - 1449, - 1450 - ] - }, - { - "teal": 1296, - "source": 357, - "pc": [ - 1451 - ] - }, - { - "teal": 1297, - "source": 357, - "pc": [ - 1452 - ] - }, - { - "teal": 1298, - "source": 357, - "pc": [ - 1453, - 1454 - ] - }, - { - "teal": 1299, - "source": 357, - "pc": [ - 1455 - ] - }, - { - "teal": 1300, - "source": 357, - "pc": [ - 1456, - 1457 - ] - }, - { - "teal": 1304, - "source": 358, - "pc": [ - 1458, - 1459 - ] - }, - { - "teal": 1305, - "source": 358, - "pc": [ - 1460 - ] - }, - { - "teal": 1306, - "source": 358, - "pc": [ - 1461, - 1462 - ] - }, - { - "teal": 1307, - "source": 358, - "pc": [ - 1463 - ] - }, - { - "teal": 1308, - "source": 358, - "pc": [ - 1464 - ] - }, - { - "teal": 1309, - "source": 358, - "pc": [ - 1465 - ] - }, - { - "teal": 1310, - "source": 358, - "pc": [ - 1466 - ] - }, - { - "teal": 1311, - "source": 358, - "pc": [ - 1467, - 1468 - ] - }, - { - "teal": 1312, - "source": 358, - "pc": [ - 1469 - ] - }, - { - "teal": 1315, - "source": 358, - "errorMessage": "(amountToUnstake as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits", - "pc": [ - 1470 - ] - }, - { - "teal": 1316, - "source": 358, - "pc": [ - 1471, - 1472 - ] - }, - { - "teal": 1317, - "source": 358, - "pc": [ - 1473 - ] - }, - { - "teal": 1318, - "source": 358, - "pc": [ - 1474 - ] - }, - { - "teal": 1319, - "source": 358, - "pc": [ - 1475 - ] - }, - { - "teal": 1320, - "source": 358, - "pc": [ - 1476 - ] - }, - { - "teal": 1321, - "source": 358, - "pc": [ - 1477, - 1478 - ] - }, - { - "teal": 1322, - "source": 358, - "pc": [ - 1479 - ] - }, - { - "teal": 1323, - "source": 358, - "pc": [ - 1480 - ] - }, - { - "teal": 1324, - "source": 358, - "pc": [ - 1481 - ] - }, - { - "teal": 1325, - "source": 358, - "pc": [ - 1482, - 1483 - ] - }, - { - "teal": 1329, - "source": 359, - "pc": [ - 1484, - 1485 - ] - }, - { - "teal": 1330, - "source": 359, - "pc": [ - 1486 - ] - }, - { - "teal": 1331, - "source": 359, - "pc": [ - 1487 - ] - }, - { - "teal": 1332, - "source": 359, - "pc": [ - 1488, - 1489 - ] - }, - { - "teal": 1333, - "source": 359, - "pc": [ - 1490 - ] - }, - { - "teal": 1334, - "source": 359, - "pc": [ - 1491 - ] - }, - { - "teal": 1335, - "source": 359, - "pc": [ - 1492 - ] - }, - { - "teal": 1336, - "source": 359, - "pc": [ - 1493, - 1494 - ] - }, - { - "teal": 1337, - "source": 359, - "pc": [ - 1495 - ] - }, - { - "teal": 1340, - "source": 359, - "errorMessage": "this.stakeAccumulator.value - subtractAmount overflowed 128 bits", - "pc": [ - 1496 - ] - }, - { - "teal": 1341, - "source": 359, - "pc": [ - 1497, - 1498 - ] - }, - { - "teal": 1342, - "source": 359, - "pc": [ - 1499 - ] - }, - { - "teal": 1343, - "source": 359, - "pc": [ - 1500 - ] - }, - { - "teal": 1344, - "source": 359, - "pc": [ - 1501 - ] - }, - { - "teal": 1345, - "source": 359, - "pc": [ - 1502 - ] - }, - { - "teal": 1346, - "source": 359, - "pc": [ - 1503, - 1504 - ] - }, - { - "teal": 1347, - "source": 359, - "pc": [ - 1505 - ] - }, - { - "teal": 1348, - "source": 359, - "pc": [ - 1506 - ] - }, - { - "teal": 1349, - "source": 359, - "pc": [ - 1507 - ] - }, - { - "teal": 1350, - "source": 359, - "pc": [ - 1508 - ] - }, - { - "teal": 1363, - "source": 364, - "pc": [ - 1509 - ] - }, - { - "teal": 1364, - "source": 364, - "pc": [ - 1510 - ] - }, - { - "teal": 1365, - "source": 364, - "pc": [ - 1511, - 1512 - ] - }, - { - "teal": 1366, - "source": 364, - "pc": [ - 1513, - 1514 - ] - }, - { - "teal": 1367, - "source": 364, - "pc": [ - 1515, - 1516 - ] - }, - { - "teal": 1371, - "source": 365, - "pc": [ - 1517 - ] - }, - { - "teal": 1372, - "source": 365, - "pc": [ - 1518 - ] - }, - { - "teal": 1373, - "source": 365, - "pc": [ - 1519, - 1520 - ] - }, - { - "teal": 1383, - "source": 367, - "pc": [ - 1521 - ] - }, - { - "teal": 1384, - "source": 367, - "pc": [ - 1522 - ] - }, - { - "teal": 1385, - "source": 367, - "pc": [ - 1523 - ] - }, - { - "teal": 1386, - "source": 367, - "pc": [ - 1524 - ] - }, - { - "teal": 1387, - "source": 367, - "pc": [ - 1525 - ] - }, - { - "teal": 1388, - "source": 367, - "pc": [ - 1526 - ] - }, - { - "teal": 1389, - "source": 367, - "pc": [ - 1527 - ] - }, - { - "teal": 1390, - "source": 367, - "pc": [ - 1528, - 1529, - 1530 - ] - }, - { - "teal": 1391, - "source": 367, - "pc": [ - 1531 - ] - }, - { - "teal": 1392, - "source": 367, - "pc": [ - 1532 - ] - }, - { - "teal": 1393, - "source": 367, - "pc": [ - 1533, - 1534 - ] - }, - { - "teal": 1394, - "source": 368, - "pc": [ - 1535, - 1536 - ] - }, - { - "teal": 1395, - "source": 368, - "pc": [ - 1537, - 1538 - ] - }, - { - "teal": 1396, - "source": 369, - "pc": [ - 1539, - 1540 - ] - }, - { - "teal": 1397, - "source": 369, - "pc": [ - 1541 - ] - }, - { - "teal": 1398, - "source": 369, - "pc": [ - 1542, - 1543 - ] - }, - { - "teal": 1399, - "source": 370, - "pc": [ - 1544, - 1545 - ] - }, - { - "teal": 1400, - "source": 370, - "pc": [ - 1546 - ] - }, - { - "teal": 1401, - "source": 370, - "pc": [ - 1547, - 1548 - ] - }, - { - "teal": 1402, - "source": 371, - "pc": [ - 1549, - 1550 - ] - }, - { - "teal": 1403, - "source": 371, - "pc": [ - 1551, - 1552 - ] - }, - { - "teal": 1404, - "source": 371, - "pc": [ - 1553 - ] - }, - { - "teal": 1405, - "source": 371, - "pc": [ - 1554, - 1555 - ] - }, - { - "teal": 1406, - "source": 371, - "pc": [ - 1556 - ] - }, - { - "teal": 1407, - "source": 371, - "pc": [ - 1557, - 1558 - ] - }, - { - "teal": 1410, - "source": 364, - "pc": [ - 1559 - ] - }, - { - "teal": 1411, - "source": 364, - "pc": [ - 1560, - 1561 - ] - }, - { - "teal": 1414, - "source": 364, - "pc": [ - 1562 - ] - }, - { - "teal": 1418, - "source": 374, - "pc": [ - 1563 - ] - }, - { - "teal": 1425, - "source": 287, - "pc": [ - 1564, - 1565 - ] - }, - { - "teal": 1426, - "source": 287, - "pc": [ - 1566 - ] - }, - { - "teal": 1427, - "source": 287, - "pc": [ - 1567 - ] - }, - { - "teal": 1428, - "source": 287, - "pc": [ - 1568, - 1569 - ] - }, - { - "teal": 1429, - "source": 287, - "pc": [ - 1570, - 1571, - 1572 - ] - }, - { - "teal": 1433, - "source": 377, - "errorMessage": "account not found", - "pc": [ - 1573 - ] - }, - { - "teal": 1434, - "source": 275, - "pc": [ - 1574 - ] - }, - { - "teal": 1439, - "source": 385, - "pc": [ - 1575, - 1576, - 1577 - ] - }, - { - "teal": 1440, - "source": 385, - "pc": [ - 1578 - ] - }, - { - "teal": 1441, - "source": 385, - "pc": [ - 1579 - ] - }, - { - "teal": 1449, - "source": 385, - "pc": [ - 1580, - 1581, - 1582 - ] - }, - { - "teal": 1452, - "source": 385, - "pc": [ - 1583, - 1584 - ] - }, - { - "teal": 1453, - "source": 385, - "pc": [ - 1585, - 1586 - ] - }, - { - "teal": 1457, - "source": 389, - "pc": [ - 1587, - 1588 - ] - }, - { - "teal": 1458, - "source": 389, - "pc": [ - 1589, - 1590 - ] - }, - { - "teal": 1462, - "source": 391, - "pc": [ - 1591 - ] - }, - { - "teal": 1463, - "source": 391, - "pc": [ - 1592, - 1593 - ] - }, - { - "teal": 1468, - "source": 391, - "pc": [ - 1594, - 1595 - ] - }, - { - "teal": 1469, - "source": 391, - "pc": [ - 1596, - 1597 - ] - }, - { - "teal": 1470, - "source": 391, - "pc": [ - 1598 - ] - }, - { - "teal": 1471, - "source": 391, - "pc": [ - 1599, - 1600, - 1601 - ] - }, - { - "teal": 1476, - "source": 392, - "pc": [ - 1602, - 1603 - ] - }, - { - "teal": 1477, - "source": 392, - "pc": [ - 1604, - 1605 - ] - }, - { - "teal": 1478, - "source": 392, - "pc": [ - 1606 - ] - }, - { - "teal": 1479, - "source": 392, - "pc": [ - 1607, - 1608, - 1609 - ] - }, - { - "teal": 1484, - "source": 393, - "pc": [ - 1610 - ] - }, - { - "teal": 1485, - "source": 393, - "pc": [ - 1611 - ] - }, - { - "teal": 1486, - "source": 393, - "pc": [ - 1612, - 1613 - ] - }, - { - "teal": 1487, - "source": 393, - "pc": [ - 1614 - ] - }, - { - "teal": 1488, - "source": 393, - "pc": [ - 1615, - 1616 - ] - }, - { - "teal": 1489, - "source": 393, - "pc": [ - 1617, - 1618 - ] - }, - { - "teal": 1490, - "source": 393, - "pc": [ - 1619 - ] - }, - { - "teal": 1491, - "source": 393, - "pc": [ - 1620, - 1621 - ] - }, - { - "teal": 1492, - "source": 393, - "pc": [ - 1622, - 1623 - ] - }, - { - "teal": 1493, - "source": 393, - "pc": [ - 1624, - 1625 - ] - }, - { - "teal": 1494, - "source": 393, - "pc": [ - 1626, - 1627 - ] - }, - { - "teal": 1495, - "source": 393, - "pc": [ - 1628 - ] - }, - { - "teal": 1500, - "source": 395, - "pc": [ - 1629, - 1630 - ] - }, - { - "teal": 1501, - "source": 395, - "pc": [ - 1631 - ] - }, - { - "teal": 1502, - "source": 395, - "pc": [ - 1632 - ] - }, - { - "teal": 1503, - "source": 395, - "pc": [ - 1633 - ] - }, - { - "teal": 1504, - "source": 395, - "pc": [ - 1634 - ] - }, - { - "teal": 1505, - "source": 395, - "pc": [ - 1635, - 1636 - ] - }, - { - "teal": 1506, - "source": 395, - "pc": [ - 1637 - ] - }, - { - "teal": 1507, - "source": 395, - "pc": [ - 1638, - 1639 - ] - }, - { - "teal": 1512, - "source": 396, - "pc": [ - 1640, - 1641 - ] - }, - { - "teal": 1513, - "source": 396, - "pc": [ - 1642, - 1643, - 1644 - ] - }, - { - "teal": 1514, - "source": 396, - "pc": [ - 1645, - 1646 - ] - }, - { - "teal": 1515, - "source": 396, - "pc": [ - 1647 - ] - }, - { - "teal": 1516, - "source": 396, - "pc": [ - 1648, - 1649, - 1650 - ] - }, - { - "teal": 1522, - "source": 397, - "pc": [ - 1651, - 1652 - ] - }, - { - "teal": 1523, - "source": 397, - "pc": [ - 1653, - 1654, - 1655 - ] - }, - { - "teal": 1524, - "source": 397, - "pc": [ - 1656 - ] - }, - { - "teal": 1525, - "source": 397, - "pc": [ - 1657 - ] - }, - { - "teal": 1526, - "source": 397, - "pc": [ - 1658 - ] - }, - { - "teal": 1527, - "source": 397, - "pc": [ - 1659, - 1660, - 1661 - ] - }, - { - "teal": 1532, - "source": 398, - "pc": [ - 1662 - ] - }, - { - "teal": 1537, - "source": 400, - "pc": [ - 1663 - ] - }, - { - "teal": 1538, - "source": 400, - "pc": [ - 1664, - 1665 - ] - }, - { - "teal": 1543, - "source": 402, - "pc": [ - 1666 - ] - }, - { - "teal": 1544, - "source": 402, - "pc": [ - 1667 - ] - }, - { - "teal": 1545, - "source": 402, - "pc": [ - 1668 - ] - }, - { - "teal": 1546, - "source": 402, - "pc": [ - 1669 - ] - }, - { - "teal": 1547, - "source": 402, - "pc": [ - 1670, - 1671, - 1672 - ] - }, - { - "teal": 1555, - "source": 403, - "pc": [ - 1673 - ] - }, - { - "teal": 1556, - "source": 403, - "pc": [ - 1674 - ] - }, - { - "teal": 1557, - "source": 403, - "pc": [ - 1675, - 1676 - ] - }, - { - "teal": 1558, - "source": 403, - "pc": [ - 1677, - 1678 - ] - }, - { - "teal": 1559, - "source": 403, - "pc": [ - 1679, - 1680 - ] - }, - { - "teal": 1563, - "source": 404, - "pc": [ - 1681 - ] - }, - { - "teal": 1564, - "source": 404, - "pc": [ - 1682 - ] - }, - { - "teal": 1565, - "source": 404, - "pc": [ - 1683, - 1684 - ] - }, - { - "teal": 1569, - "source": 405, - "pc": [ - 1685 - ] - }, - { - "teal": 1570, - "source": 405, - "pc": [ - 1686 - ] - }, - { - "teal": 1571, - "source": 405, - "pc": [ - 1687 - ] - }, - { - "teal": 1572, - "source": 405, - "pc": [ - 1688, - 1689 - ] - }, - { - "teal": 1575, - "source": 403, - "pc": [ - 1690 - ] - }, - { - "teal": 1576, - "source": 403, - "pc": [ - 1691, - 1692 - ] - }, - { - "teal": 1579, - "source": 403, - "pc": [ - 1693 - ] - }, - { - "teal": 1580, - "source": 403, - "pc": [ - 1694, - 1695 - ] - }, - { - "teal": 1581, - "source": 403, - "pc": [ - 1696 - ] - }, - { - "teal": 1582, - "source": 403, - "pc": [ - 1697 - ] - }, - { - "teal": 1583, - "source": 403, - "pc": [ - 1698, - 1699 - ] - }, - { - "teal": 1584, - "source": 403, - "pc": [ - 1700, - 1701, - 1702 - ] - }, - { - "teal": 1585, - "source": 403, - "pc": [ - 1703, - 1704 - ] - }, - { - "teal": 1593, - "source": 410, - "pc": [ - 1705 - ] - }, - { - "teal": 1594, - "source": 410, - "pc": [ - 1706, - 1707 - ] - }, - { - "teal": 1595, - "source": 410, - "pc": [ - 1708, - 1709 - ] - }, - { - "teal": 1599, - "source": 411, - "pc": [ - 1710, - 1711 - ] - }, - { - "teal": 1600, - "source": 411, - "pc": [ - 1712, - 1713, - 1714 - ] - }, - { - "teal": 1601, - "source": 411, - "pc": [ - 1715 - ] - }, - { - "teal": 1602, - "source": 411, - "pc": [ - 1716, - 1717 - ] - }, - { - "teal": 1606, - "source": 412, - "pc": [ - 1718, - 1719 - ] - }, - { - "teal": 1607, - "source": 412, - "pc": [ - 1720, - 1721 - ] - }, - { - "teal": 1611, - "source": 413, - "pc": [ - 1722, - 1723 - ] - }, - { - "teal": 1612, - "source": 413, - "pc": [ - 1724, - 1725, - 1726 - ] - }, - { - "teal": 1613, - "source": 413, - "pc": [ - 1727 - ] - }, - { - "teal": 1614, - "source": 413, - "pc": [ - 1728, - 1729 - ] - }, - { - "teal": 1617, - "source": 410, - "pc": [ - 1730 - ] - }, - { - "teal": 1618, - "source": 410, - "pc": [ - 1731, - 1732 - ] - }, - { - "teal": 1621, - "source": 410, - "pc": [ - 1733 - ] - }, - { - "teal": 1625, - "source": 415, - "pc": [ - 1734, - 1735 - ] - }, - { - "teal": 1626, - "source": 415, - "pc": [ - 1736, - 1737, - 1738 - ] - }, - { - "teal": 1627, - "source": 415, - "pc": [ - 1739 - ] - }, - { - "teal": 1628, - "source": 415, - "pc": [ - 1740, - 1741 - ] - }, - { - "teal": 1632, - "source": 416, - "pc": [ - 1742, - 1743 - ] - }, - { - "teal": 1633, - "source": 416, - "pc": [ - 1744, - 1745 - ] - }, - { - "teal": 1634, - "source": 416, - "pc": [ - 1746, - 1747 - ] - }, - { - "teal": 1635, - "source": 416, - "pc": [ - 1748, - 1749 - ] - }, - { - "teal": 1636, - "source": 402, - "pc": [ - 1750, - 1751, - 1752 - ] - }, - { - "teal": 1641, - "source": 421, - "pc": [ - 1753, - 1754 - ] - }, - { - "teal": 1642, - "source": 421, - "pc": [ - 1755, - 1756, - 1757 - ] - }, - { - "teal": 1643, - "source": 421, - "pc": [ - 1758 - ] - }, - { - "teal": 1644, - "source": 421, - "pc": [ - 1759, - 1760 - ] - }, - { - "teal": 1648, - "source": 422, - "pc": [ - 1761, - 1762 - ] - }, - { - "teal": 1649, - "source": 422, - "pc": [ - 1763, - 1764 - ] - }, - { - "teal": 1650, - "source": 422, - "pc": [ - 1765, - 1766 - ] - }, - { - "teal": 1651, - "source": 422, - "pc": [ - 1767, - 1768 - ] - }, - { - "teal": 1656, - "source": 426, - "pc": [ - 1769, - 1770 - ] - }, - { - "teal": 1657, - "source": 426, - "pc": [ - 1771 - ] - }, - { - "teal": 1658, - "source": 426, - "pc": [ - 1772 - ] - }, - { - "teal": 1659, - "source": 426, - "pc": [ - 1773, - 1774 - ] - }, - { - "teal": 1660, - "source": 426, - "pc": [ - 1775 - ] - }, - { - "teal": 1661, - "source": 426, - "pc": [ - 1776, - 1777 - ] - }, - { - "teal": 1662, - "source": 426, - "pc": [ - 1778 - ] - }, - { - "teal": 1675, - "source": 431, - "pc": [ - 1779 - ] - }, - { - "teal": 1676, - "source": 431, - "pc": [ - 1780 - ] - }, - { - "teal": 1677, - "source": 431, - "pc": [ - 1781, - 1782 - ] - }, - { - "teal": 1678, - "source": 431, - "pc": [ - 1783, - 1784 - ] - }, - { - "teal": 1679, - "source": 431, - "pc": [ - 1785, - 1786 - ] - }, - { - "teal": 1683, - "source": 432, - "pc": [ - 1787 - ] - }, - { - "teal": 1684, - "source": 432, - "pc": [ - 1788 - ] - }, - { - "teal": 1685, - "source": 432, - "pc": [ - 1789, - 1790 - ] - }, - { - "teal": 1695, - "source": 434, - "pc": [ - 1791 - ] - }, - { - "teal": 1696, - "source": 434, - "pc": [ - 1792 - ] - }, - { - "teal": 1697, - "source": 434, - "pc": [ - 1793 - ] - }, - { - "teal": 1698, - "source": 434, - "pc": [ - 1794 - ] - }, - { - "teal": 1699, - "source": 434, - "pc": [ - 1795 - ] - }, - { - "teal": 1700, - "source": 434, - "pc": [ - 1796 - ] - }, - { - "teal": 1701, - "source": 434, - "pc": [ - 1797 - ] - }, - { - "teal": 1702, - "source": 434, - "pc": [ - 1798, - 1799, - 1800 - ] - }, - { - "teal": 1703, - "source": 434, - "pc": [ - 1801 - ] - }, - { - "teal": 1704, - "source": 434, - "pc": [ - 1802 - ] - }, - { - "teal": 1705, - "source": 434, - "pc": [ - 1803, - 1804 - ] - }, - { - "teal": 1706, - "source": 435, - "pc": [ - 1805, - 1806 - ] - }, - { - "teal": 1707, - "source": 435, - "pc": [ - 1807, - 1808 - ] - }, - { - "teal": 1708, - "source": 436, - "pc": [ - 1809, - 1810 - ] - }, - { - "teal": 1709, - "source": 436, - "pc": [ - 1811, - 1812 - ] - }, - { - "teal": 1710, - "source": 437, - "pc": [ - 1813, - 1814 - ] - }, - { - "teal": 1711, - "source": 437, - "pc": [ - 1815 - ] - }, - { - "teal": 1712, - "source": 437, - "pc": [ - 1816, - 1817 - ] - }, - { - "teal": 1713, - "source": 438, - "pc": [ - 1818 - ] - }, - { - "teal": 1714, - "source": 438, - "pc": [ - 1819, - 1820 - ] - }, - { - "teal": 1715, - "source": 438, - "pc": [ - 1821 - ] - }, - { - "teal": 1716, - "source": 438, - "pc": [ - 1822, - 1823 - ] - }, - { - "teal": 1717, - "source": 438, - "pc": [ - 1824 - ] - }, - { - "teal": 1718, - "source": 438, - "pc": [ - 1825, - 1826 - ] - }, - { - "teal": 1721, - "source": 431, - "pc": [ - 1827 - ] - }, - { - "teal": 1722, - "source": 431, - "pc": [ - 1828, - 1829 - ] - }, - { - "teal": 1725, - "source": 431, - "pc": [ - 1830 - ] - }, - { - "teal": 1729, - "source": 441, - "pc": [ - 1831 - ] - }, - { - "teal": 1736, - "source": 391, - "pc": [ - 1832, - 1833 - ] - }, - { - "teal": 1737, - "source": 391, - "pc": [ - 1834 - ] - }, - { - "teal": 1738, - "source": 391, - "pc": [ - 1835 - ] - }, - { - "teal": 1739, - "source": 391, - "pc": [ - 1836, - 1837 - ] - }, - { - "teal": 1740, - "source": 391, - "pc": [ - 1838, - 1839, - 1840 - ] - }, - { - "teal": 1744, - "source": 444, - "errorMessage": "account not found", - "pc": [ - 1841 - ] - }, - { - "teal": 1745, - "source": 385, - "pc": [ - 1842 - ] - }, - { - "teal": 1750, - "source": 455, - "pc": [ - 1843, - 1844 - ] - }, - { - "teal": 1753, - "source": 455, - "pc": [ - 1845, - 1846, - 1847 - ] - }, - { - "teal": 1754, - "source": 455, - "pc": [ - 1848 - ] - }, - { - "teal": 1755, - "source": 455, - "pc": [ - 1849 - ] - }, - { - "teal": 1756, - "source": 455, - "pc": [ - 1850, - 1851 - ] - }, - { - "teal": 1757, - "source": 455, - "pc": [ - 1852 - ] - }, - { - "teal": 1760, - "source": 455, - "errorMessage": "argument 0 (staker) for getStakerInfo must be a address", - "pc": [ - 1853 - ] - }, - { - "teal": 1763, - "source": 455, - "pc": [ - 1854, - 1855, - 1856 - ] - }, - { - "teal": 1764, - "source": 455, - "pc": [ - 1857 - ] - }, - { - "teal": 1765, - "source": 455, - "pc": [ - 1858 - ] - }, - { - "teal": 1766, - "source": 455, - "pc": [ - 1859 - ] - }, - { - "teal": 1767, - "source": 455, - "pc": [ - 1860 - ] - }, - { - "teal": 1777, - "source": 455, - "pc": [ - 1861, - 1862, - 1863 - ] - }, - { - "teal": 1780, - "source": 455, - "pc": [ - 1864, - 1865 - ] - }, - { - "teal": 1784, - "source": 456, - "pc": [ - 1866 - ] - }, - { - "teal": 1785, - "source": 456, - "pc": [ - 1867, - 1868 - ] - }, - { - "teal": 1790, - "source": 456, - "pc": [ - 1869, - 1870 - ] - }, - { - "teal": 1791, - "source": 456, - "pc": [ - 1871, - 1872 - ] - }, - { - "teal": 1792, - "source": 456, - "pc": [ - 1873 - ] - }, - { - "teal": 1793, - "source": 456, - "pc": [ - 1874, - 1875, - 1876 - ] - }, - { - "teal": 1798, - "source": 457, - "pc": [ - 1877, - 1878 - ] - }, - { - "teal": 1799, - "source": 457, - "pc": [ - 1879, - 1880 - ] - }, - { - "teal": 1800, - "source": 457, - "pc": [ - 1881 - ] - }, - { - "teal": 1801, - "source": 457, - "pc": [ - 1882, - 1883, - 1884 - ] - }, - { - "teal": 1806, - "source": 458, - "pc": [ - 1885 - ] - }, - { - "teal": 1807, - "source": 458, - "pc": [ - 1886 - ] - }, - { - "teal": 1808, - "source": 458, - "pc": [ - 1887, - 1888 - ] - }, - { - "teal": 1809, - "source": 458, - "pc": [ - 1889 - ] - }, - { - "teal": 1810, - "source": 458, - "pc": [ - 1890, - 1891 - ] - }, - { - "teal": 1811, - "source": 458, - "pc": [ - 1892, - 1893 - ] - }, - { - "teal": 1812, - "source": 458, - "pc": [ - 1894 - ] - }, - { - "teal": 1813, - "source": 458, - "pc": [ - 1895, - 1896 - ] - }, - { - "teal": 1814, - "source": 458, - "pc": [ - 1897, - 1898 - ] - }, - { - "teal": 1815, - "source": 458, - "pc": [ - 1899, - 1900 - ] - }, - { - "teal": 1816, - "source": 458, - "pc": [ - 1901, - 1902 - ] - }, - { - "teal": 1817, - "source": 458, - "pc": [ - 1903 - ] - }, - { - "teal": 1823, - "source": 460, - "pc": [ - 1904, - 1905 - ] - }, - { - "teal": 1824, - "source": 460, - "pc": [ - 1906 - ] - }, - { - "teal": 1825, - "source": 460, - "pc": [ - 1907 - ] - }, - { - "teal": 1826, - "source": 460, - "pc": [ - 1908 - ] - }, - { - "teal": 1827, - "source": 460, - "pc": [ - 1909 - ] - }, - { - "teal": 1828, - "source": 460, - "pc": [ - 1910, - 1911 - ] - }, - { - "teal": 1829, - "source": 460, - "pc": [ - 1912 - ] - }, - { - "teal": 1830, - "source": 460, - "pc": [ - 1913, - 1914 - ] - }, - { - "teal": 1831, - "source": 460, - "pc": [ - 1915 - ] - }, - { - "teal": 1832, - "source": 460, - "pc": [ - 1916, - 1917 - ] - }, - { - "teal": 1833, - "source": 460, - "pc": [ - 1918 - ] - }, - { - "teal": 1834, - "source": 460, - "pc": [ - 1919, - 1920, - 1921 - ] - }, - { - "teal": 1839, - "source": 461, - "pc": [ - 1922, - 1923 - ] - }, - { - "teal": 1840, - "source": 461, - "pc": [ - 1924 - ] - }, - { - "teal": 1841, - "source": 461, - "pc": [ - 1925 - ] - }, - { - "teal": 1842, - "source": 461, - "pc": [ - 1926 - ] - }, - { - "teal": 1843, - "source": 461, - "pc": [ - 1927 - ] - }, - { - "teal": 1844, - "source": 461, - "pc": [ - 1928, - 1929 - ] - }, - { - "teal": 1845, - "source": 461, - "pc": [ - 1930 - ] - }, - { - "teal": 1846, - "source": 461, - "pc": [ - 1931, - 1932, - 1933 - ] - }, - { - "teal": 1853, - "source": 456, - "pc": [ - 1934, - 1935 - ] - }, - { - "teal": 1854, - "source": 456, - "pc": [ - 1936 - ] - }, - { - "teal": 1855, - "source": 456, - "pc": [ - 1937 - ] - }, - { - "teal": 1856, - "source": 456, - "pc": [ - 1938, - 1939 - ] - }, - { - "teal": 1857, - "source": 456, - "pc": [ - 1940, - 1941, - 1942 - ] - }, - { - "teal": 1861, - "source": 464, - "errorMessage": "account not found", - "pc": [ - 1943 - ] - }, - { - "teal": 1865, - "source": 455, - "pc": [ - 1944, - 1945 - ] - }, - { - "teal": 1866, - "source": 455, - "pc": [ - 1946 - ] - }, - { - "teal": 1871, - "source": 477, - "pc": [ - 1947, - 1948, - 1949 - ] - }, - { - "teal": 1872, - "source": 477, - "pc": [ - 1950 - ] - }, - { - "teal": 1875, - "source": 477, - "pc": [ - 1951, - 1952, - 1953 - ] - }, - { - "teal": 1876, - "source": 477, - "pc": [ - 1954 - ] - }, - { - "teal": 1879, - "source": 477, - "pc": [ - 1955, - 1956, - 1957 - ] - }, - { - "teal": 1880, - "source": 477, - "pc": [ - 1958 - ] - }, - { - "teal": 1881, - "source": 477, - "pc": [ - 1959 - ] - }, - { - "teal": 1882, - "source": 477, - "pc": [ - 1960, - 1961 - ] - }, - { - "teal": 1883, - "source": 477, - "pc": [ - 1962 - ] - }, - { - "teal": 1886, - "source": 477, - "errorMessage": "argument 2 (staker) for payTokenReward must be a address", - "pc": [ - 1963 - ] - }, - { - "teal": 1889, - "source": 477, - "pc": [ - 1964, - 1965, - 1966 - ] - }, - { - "teal": 1890, - "source": 477, - "pc": [ - 1967 - ] - }, - { - "teal": 1891, - "source": 477, - "pc": [ - 1968 - ] - }, - { - "teal": 1904, - "source": 477, - "pc": [ - 1969, - 1970, - 1971 - ] - }, - { - "teal": 1911, - "source": 480, - "pc": [ - 1972, - 1973 - ] - }, - { - "teal": 1912, - "source": 480, - "pc": [ - 1974 - ] - }, - { - "teal": 1913, - "source": 480, - "pc": [ - 1975 - ] - }, - { - "teal": 1914, - "source": 480, - "pc": [ - 1976, - 1977 - ] - }, - { - "teal": 1915, - "source": 480, - "pc": [ - 1978 - ] - }, - { - "teal": 1916, - "source": 480, - "pc": [ - 1979 - ] - }, - { - "teal": 1919, - "source": 479, - "errorMessage": "this can only be called via the validator contract", - "pc": [ - 1980 - ] - }, - { - "teal": 1923, - "source": 483, - "pc": [ - 1981 - ] - }, - { - "teal": 1924, - "source": 483, - "pc": [ - 1982 - ] - }, - { - "teal": 1925, - "source": 483, - "pc": [ - 1983 - ] - }, - { - "teal": 1926, - "source": 483, - "pc": [ - 1984 - ] - }, - { - "teal": 1929, - "source": 483, - "errorMessage": "must be pool 1 in order to be called to pay out token rewards", - "pc": [ - 1985 - ] - }, - { - "teal": 1933, - "source": 484, - "pc": [ - 1986, - 1987 - ] - }, - { - "teal": 1934, - "source": 484, - "pc": [ - 1988 - ] - }, - { - "teal": 1935, - "source": 484, - "pc": [ - 1989 - ] - }, - { - "teal": 1938, - "source": 484, - "errorMessage": "can only claim token rewards from validator that has them", - "pc": [ - 1990 - ] - }, - { - "teal": 1946, - "source": 487, - "pc": [ - 1991 - ] - }, - { - "teal": 1947, - "source": 487, - "pc": [ - 1992, - 1993 - ] - }, - { - "teal": 1948, - "source": 487, - "pc": [ - 1994, - 1995 - ] - }, - { - "teal": 1952, - "source": 488, - "pc": [ - 1996, - 1997 - ] - }, - { - "teal": 1953, - "source": 488, - "pc": [ - 1998, - 1999 - ] - }, - { - "teal": 1957, - "source": 489, - "pc": [ - 2000, - 2001 - ] - }, - { - "teal": 1958, - "source": 489, - "pc": [ - 2002, - 2003 - ] - }, - { - "teal": 1962, - "source": 490, - "pc": [ - 2004, - 2005 - ] - }, - { - "teal": 1963, - "source": 490, - "pc": [ - 2006, - 2007 - ] - }, - { - "teal": 1966, - "source": 487, - "pc": [ - 2008 - ] - }, - { - "teal": 1967, - "source": 487, - "pc": [ - 2009, - 2010 - ] - }, - { - "teal": 1970, - "source": 487, - "pc": [ - 2011 - ] - }, - { - "teal": 1971, - "source": 477, - "pc": [ - 2012 - ] - }, - { - "teal": 1976, - "source": 503, - "pc": [ - 2013, - 2014, - 2015 - ] - }, - { - "teal": 1977, - "source": 503, - "pc": [ - 2016, - 2017, - 2018 - ] - }, - { - "teal": 1980, - "source": 503, - "pc": [ - 2019, - 2020, - 2021 - ] - }, - { - "teal": 1981, - "source": 503, - "pc": [ - 2022 - ] - }, - { - "teal": 1982, - "source": 503, - "pc": [ - 2023 - ] - }, - { - "teal": 1994, - "source": 503, - "pc": [ - 2024, - 2025, - 2026 - ] - }, - { - "teal": 1998, - "source": 504, - "pc": [ - 2027, - 2028, - 2029 - ] - }, - { - "teal": 2001, - "source": 504, - "errorMessage": "can only be called by owner or manager of validator", - "pc": [ - 2030 - ] - }, - { - "teal": 2005, - "source": 505, - "pc": [ - 2031, - 2032, - 2033, - 2034, - 2035, - 2036, - 2037, - 2038, - 2039, - 2040 - ] - }, - { - "teal": 2006, - "source": 505, - "pc": [ - 2041, - 2042 - ] - }, - { - "teal": 2007, - "source": 505, - "pc": [ - 2043 - ] - }, - { - "teal": 2008, - "source": 503, - "pc": [ - 2044 - ] - }, - { - "teal": 2013, - "source": 516, - "pc": [ - 2045, - 2046, - 2047 - ] - }, - { - "teal": 2014, - "source": 516, - "pc": [ - 2048 - ] - }, - { - "teal": 2015, - "source": 516, - "pc": [ - 2049 - ] - }, - { - "teal": 2026, - "source": 516, - "pc": [ - 2050, - 2051, - 2052 - ] - }, - { - "teal": 2029, - "source": 516, - "pc": [ - 2053, - 2054 - ] - }, - { - "teal": 2030, - "source": 516, - "pc": [ - 2055, - 2056 - ] - }, - { - "teal": 2037, - "source": 518, - "pc": [ - 2057 - ] - }, - { - "teal": 2038, - "source": 518, - "pc": [ - 2058 - ] - }, - { - "teal": 2039, - "source": 518, - "pc": [ - 2059, - 2060 - ] - }, - { - "teal": 2040, - "source": 518, - "pc": [ - 2061, - 2062 - ] - }, - { - "teal": 2041, - "source": 518, - "pc": [ - 2063, - 2064 - ] - }, - { - "teal": 2045, - "source": 519, - "pc": [ - 2065 - ] - }, - { - "teal": 2046, - "source": 519, - "pc": [ - 2066 - ] - }, - { - "teal": 2047, - "source": 519, - "pc": [ - 2067, - 2068 - ] - }, - { - "teal": 2051, - "source": 520, - "pc": [ - 2069 - ] - }, - { - "teal": 2052, - "source": 520, - "pc": [ - 2070 - ] - }, - { - "teal": 2053, - "source": 520, - "pc": [ - 2071 - ] - }, - { - "teal": 2054, - "source": 520, - "pc": [ - 2072, - 2073 - ] - }, - { - "teal": 2057, - "source": 518, - "pc": [ - 2074 - ] - }, - { - "teal": 2058, - "source": 518, - "pc": [ - 2075, - 2076 - ] - }, - { - "teal": 2061, - "source": 518, - "pc": [ - 2077 - ] - }, - { - "teal": 2062, - "source": 518, - "pc": [ - 2078, - 2079 - ] - }, - { - "teal": 2063, - "source": 518, - "pc": [ - 2080 - ] - }, - { - "teal": 2064, - "source": 518, - "pc": [ - 2081 - ] - }, - { - "teal": 2065, - "source": 518, - "pc": [ - 2082, - 2083 - ] - }, - { - "teal": 2066, - "source": 518, - "pc": [ - 2084, - 2085, - 2086 - ] - }, - { - "teal": 2067, - "source": 518, - "pc": [ - 2087, - 2088 - ] - }, - { - "teal": 2071, - "source": 527, - "pc": [ - 2089, - 2090 - ] - }, - { - "teal": 2072, - "source": 527, - "pc": [ - 2091, - 2092, - 2093 - ] - }, - { - "teal": 2073, - "source": 527, - "pc": [ - 2094 - ] - }, - { - "teal": 2074, - "source": 527, - "pc": [ - 2095, - 2096 - ] - }, - { - "teal": 2078, - "source": 528, - "pc": [ - 2097, - 2098 - ] - }, - { - "teal": 2079, - "source": 528, - "pc": [ - 2099, - 2100 - ] - }, - { - "teal": 2083, - "source": 529, - "pc": [ - 2101, - 2102 - ] - }, - { - "teal": 2084, - "source": 529, - "pc": [ - 2103, - 2104 - ] - }, - { - "teal": 2085, - "source": 529, - "pc": [ - 2105, - 2106 - ] - }, - { - "teal": 2086, - "source": 529, - "pc": [ - 2107 - ] - }, - { - "teal": 2087, - "source": 529, - "pc": [ - 2108 - ] - }, - { - "teal": 2088, - "source": 529, - "pc": [ - 2109, - 2110 - ] - }, - { - "teal": 2093, - "source": 532, - "pc": [ - 2111, - 2112, - 2113 - ] - }, - { - "teal": 2094, - "source": 532, - "pc": [ - 2114, - 2115 - ] - }, - { - "teal": 2095, - "source": 532, - "pc": [ - 2116 - ] - }, - { - "teal": 2096, - "source": 532, - "pc": [ - 2117 - ] - }, - { - "teal": 2097, - "source": 532, - "pc": [ - 2118 - ] - }, - { - "teal": 2098, - "source": 532, - "pc": [ - 2119, - 2120, - 2121 - ] - }, - { - "teal": 2103, - "source": 533, - "pc": [ - 2122, - 2123 - ] - }, - { - "teal": 2104, - "source": 533, - "pc": [ - 2124 - ] - }, - { - "teal": 2105, - "source": 533, - "pc": [ - 2125, - 2126 - ] - }, - { - "teal": 2106, - "source": 533, - "pc": [ - 2127 - ] - }, - { - "teal": 2107, - "source": 533, - "pc": [ - 2128, - 2129 - ] - }, - { - "teal": 2108, - "source": 533, - "pc": [ - 2130 - ] - }, - { - "teal": 2109, - "source": 533, - "pc": [ - 2131 - ] - }, - { - "teal": 2110, - "source": 533, - "pc": [ - 2132, - 2133 - ] - }, - { - "teal": 2114, - "source": 537, - "pc": [ - 2134, - 2135 - ] - }, - { - "teal": 2115, - "source": 537, - "pc": [ - 2136, - 2137 - ] - }, - { - "teal": 2116, - "source": 537, - "pc": [ - 2138 - ] - }, - { - "teal": 2119, - "source": 537, - "errorMessage": "can't call epochBalanceUpdate in same epoch as prior call", - "pc": [ - 2139 - ] - }, - { - "teal": 2124, - "source": 540, - "pc": [ - 2140, - 2141, - 2142 - ] - }, - { - "teal": 2128, - "source": 543, - "pc": [ - 2143, - 2144 - ] - }, - { - "teal": 2129, - "source": 543, - "pc": [ - 2145, - 2146 - ] - }, - { - "teal": 2130, - "source": 543, - "pc": [ - 2147 - ] - }, - { - "teal": 2134, - "source": 544, - "pc": [ - 2148, - 2149 - ] - }, - { - "teal": 2135, - "source": 544, - "pc": [ - 2150 - ] - }, - { - "teal": 2136, - "source": 544, - "pc": [ - 2151 - ] - }, - { - "teal": 2137, - "source": 544, - "pc": [ - 2152 - ] - }, - { - "teal": 2138, - "source": 544, - "pc": [ - 2153, - 2154 - ] - }, - { - "teal": 2139, - "source": 544, - "pc": [ - 2155 - ] - }, - { - "teal": 2140, - "source": 544, - "pc": [ - 2156 - ] - }, - { - "teal": 2144, - "source": 549, - "pc": [ - 2157, - 2158 - ] - }, - { - "teal": 2145, - "source": 549, - "pc": [ - 2159, - 2160, - 2161 - ] - }, - { - "teal": 2146, - "source": 549, - "pc": [ - 2162 - ] - }, - { - "teal": 2147, - "source": 549, - "pc": [ - 2163 - ] - }, - { - "teal": 2148, - "source": 549, - "pc": [ - 2164 - ] - }, - { - "teal": 2149, - "source": 549, - "pc": [ - 2165, - 2166 - ] - }, - { - "teal": 2153, - "source": 550, - "pc": [ - 2167, - 2168, - 2169 - ] - }, - { - "teal": 2154, - "source": 550, - "pc": [ - 2170, - 2171 - ] - }, - { - "teal": 2158, - "source": 551, - "pc": [ - 2172, - 2173 - ] - }, - { - "teal": 2159, - "source": 551, - "pc": [ - 2174, - 2175 - ] - }, - { - "teal": 2164, - "source": 556, - "pc": [ - 2176, - 2177 - ] - }, - { - "teal": 2165, - "source": 556, - "pc": [ - 2178, - 2179, - 2180 - ] - }, - { - "teal": 2171, - "source": 557, - "pc": [ - 2181 - ] - }, - { - "teal": 2172, - "source": 557, - "pc": [ - 2182 - ] - }, - { - "teal": 2173, - "source": 557, - "pc": [ - 2183 - ] - }, - { - "teal": 2174, - "source": 557, - "pc": [ - 2184 - ] - }, - { - "teal": 2175, - "source": 557, - "pc": [ - 2185, - 2186, - 2187 - ] - }, - { - "teal": 2183, - "source": 559, - "pc": [ - 2188 - ] - }, - { - "teal": 2184, - "source": 559, - "pc": [ - 2189 - ] - }, - { - "teal": 2185, - "source": 559, - "pc": [ - 2190, - 2191 - ] - }, - { - "teal": 2186, - "source": 559, - "pc": [ - 2192, - 2193 - ] - }, - { - "teal": 2187, - "source": 559, - "pc": [ - 2194, - 2195 - ] - }, - { - "teal": 2191, - "source": 560, - "pc": [ - 2196 - ] - }, - { - "teal": 2192, - "source": 560, - "pc": [ - 2197 - ] - }, - { - "teal": 2193, - "source": 560, - "pc": [ - 2198, - 2199 - ] - }, - { - "teal": 2197, - "source": 561, - "pc": [ - 2200 - ] - }, - { - "teal": 2198, - "source": 561, - "pc": [ - 2201 - ] - }, - { - "teal": 2199, - "source": 561, - "pc": [ - 2202 - ] - }, - { - "teal": 2200, - "source": 561, - "pc": [ - 2203, - 2204 - ] - }, - { - "teal": 2201, - "source": 561, - "pc": [ - 2205, - 2206, - 2207, - 2208, - 2209, - 2210, - 2211, - 2212, - 2213, - 2214 - ] - }, - { - "teal": 2202, - "source": 561, - "pc": [ - 2215, - 2216 - ] - }, - { - "teal": 2205, - "source": 559, - "pc": [ - 2217 - ] - }, - { - "teal": 2206, - "source": 559, - "pc": [ - 2218, - 2219 - ] - }, - { - "teal": 2209, - "source": 559, - "pc": [ - 2220 - ] - }, - { - "teal": 2210, - "source": 559, - "pc": [ - 2221, - 2222 - ] - }, - { - "teal": 2211, - "source": 559, - "pc": [ - 2223 - ] - }, - { - "teal": 2212, - "source": 559, - "pc": [ - 2224 - ] - }, - { - "teal": 2213, - "source": 559, - "pc": [ - 2225, - 2226 - ] - }, - { - "teal": 2214, - "source": 559, - "pc": [ - 2227, - 2228, - 2229 - ] - }, - { - "teal": 2215, - "source": 559, - "pc": [ - 2230 - ] - }, - { - "teal": 2216, - "source": 559, - "pc": [ - 2231, - 2232 - ] - }, - { - "teal": 2220, - "source": 563, - "pc": [ - 2233, - 2234 - ] - }, - { - "teal": 2221, - "source": 563, - "pc": [ - 2235, - 2236 - ] - }, - { - "teal": 2222, - "source": 563, - "pc": [ - 2237 - ] - }, - { - "teal": 2223, - "source": 563, - "pc": [ - 2238, - 2239 - ] - }, - { - "teal": 2229, - "source": 568, - "pc": [ - 2240 - ] - }, - { - "teal": 2230, - "source": 568, - "pc": [ - 2241 - ] - }, - { - "teal": 2231, - "source": 568, - "pc": [ - 2242 - ] - }, - { - "teal": 2232, - "source": 568, - "pc": [ - 2243 - ] - }, - { - "teal": 2233, - "source": 568, - "pc": [ - 2244, - 2245, - 2246 - ] - }, - { - "teal": 2241, - "source": 569, - "pc": [ - 2247 - ] - }, - { - "teal": 2242, - "source": 569, - "pc": [ - 2248 - ] - }, - { - "teal": 2243, - "source": 569, - "pc": [ - 2249, - 2250 - ] - }, - { - "teal": 2244, - "source": 569, - "pc": [ - 2251, - 2252 - ] - }, - { - "teal": 2245, - "source": 569, - "pc": [ - 2253, - 2254 - ] - }, - { - "teal": 2249, - "source": 570, - "pc": [ - 2255 - ] - }, - { - "teal": 2250, - "source": 570, - "pc": [ - 2256 - ] - }, - { - "teal": 2251, - "source": 570, - "pc": [ - 2257, - 2258 - ] - }, - { - "teal": 2255, - "source": 571, - "pc": [ - 2259 - ] - }, - { - "teal": 2256, - "source": 571, - "pc": [ - 2260 - ] - }, - { - "teal": 2257, - "source": 571, - "pc": [ - 2261 - ] - }, - { - "teal": 2258, - "source": 571, - "pc": [ - 2262, - 2263 - ] - }, - { - "teal": 2261, - "source": 569, - "pc": [ - 2264 - ] - }, - { - "teal": 2262, - "source": 569, - "pc": [ - 2265, - 2266 - ] - }, - { - "teal": 2265, - "source": 569, - "pc": [ - 2267 - ] - }, - { - "teal": 2266, - "source": 569, - "pc": [ - 2268, - 2269 - ] - }, - { - "teal": 2267, - "source": 569, - "pc": [ - 2270 - ] - }, - { - "teal": 2268, - "source": 569, - "pc": [ - 2271 - ] - }, - { - "teal": 2269, - "source": 569, - "pc": [ - 2272, - 2273 - ] - }, - { - "teal": 2270, - "source": 569, - "pc": [ - 2274, - 2275, - 2276 - ] - }, - { - "teal": 2271, - "source": 569, - "pc": [ - 2277, - 2278 - ] - }, - { - "teal": 2272, - "source": 568, - "pc": [ - 2279, - 2280, - 2281 - ] - }, - { - "teal": 2280, - "source": 575, - "pc": [ - 2282 - ] - }, - { - "teal": 2281, - "source": 575, - "pc": [ - 2283 - ] - }, - { - "teal": 2282, - "source": 575, - "pc": [ - 2284, - 2285 - ] - }, - { - "teal": 2283, - "source": 575, - "pc": [ - 2286, - 2287 - ] - }, - { - "teal": 2284, - "source": 575, - "pc": [ - 2288, - 2289 - ] - }, - { - "teal": 2288, - "source": 576, - "pc": [ - 2290, - 2291 - ] - }, - { - "teal": 2289, - "source": 576, - "pc": [ - 2292, - 2293 - ] - }, - { - "teal": 2293, - "source": 577, - "pc": [ - 2294 - ] - }, - { - "teal": 2294, - "source": 577, - "pc": [ - 2295 - ] - }, - { - "teal": 2295, - "source": 577, - "pc": [ - 2296 - ] - }, - { - "teal": 2296, - "source": 577, - "pc": [ - 2297 - ] - }, - { - "teal": 2297, - "source": 577, - "pc": [ - 2298 - ] - }, - { - "teal": 2298, - "source": 577, - "pc": [ - 2299 - ] - }, - { - "teal": 2299, - "source": 577, - "pc": [ - 2300 - ] - }, - { - "teal": 2300, - "source": 577, - "pc": [ - 2301, - 2302, - 2303 - ] - }, - { - "teal": 2301, - "source": 577, - "pc": [ - 2304 - ] - }, - { - "teal": 2302, - "source": 577, - "pc": [ - 2305 - ] - }, - { - "teal": 2303, - "source": 577, - "pc": [ - 2306, - 2307 - ] - }, - { - "teal": 2306, - "source": 575, - "pc": [ - 2308 - ] - }, - { - "teal": 2307, - "source": 575, - "pc": [ - 2309, - 2310 - ] - }, - { - "teal": 2310, - "source": 575, - "pc": [ - 2311 - ] - }, - { - "teal": 2311, - "source": 575, - "pc": [ - 2312, - 2313 - ] - }, - { - "teal": 2312, - "source": 575, - "pc": [ - 2314 - ] - }, - { - "teal": 2313, - "source": 575, - "pc": [ - 2315 - ] - }, - { - "teal": 2314, - "source": 575, - "pc": [ - 2316, - 2317 - ] - }, - { - "teal": 2315, - "source": 575, - "pc": [ - 2318, - 2319, - 2320 - ] - }, - { - "teal": 2316, - "source": 575, - "pc": [ - 2321, - 2322 - ] - }, - { - "teal": 2326, - "source": 584, - "pc": [ - 2323 - ] - }, - { - "teal": 2327, - "source": 584, - "pc": [ - 2324 - ] - }, - { - "teal": 2328, - "source": 584, - "pc": [ - 2325, - 2326 - ] - }, - { - "teal": 2329, - "source": 584, - "pc": [ - 2327, - 2328, - 2329, - 2330, - 2331, - 2332 - ] - }, - { - "teal": 2330, - "source": 584, - "pc": [ - 2333, - 2334 - ] - }, - { - "teal": 2334, - "source": 585, - "pc": [ - 2335 - ] - }, - { - "teal": 2335, - "source": 585, - "pc": [ - 2336 - ] - }, - { - "teal": 2336, - "source": 585, - "pc": [ - 2337, - 2338 - ] - }, - { - "teal": 2340, - "source": 586, - "pc": [ - 2339 - ] - }, - { - "teal": 2341, - "source": 586, - "pc": [ - 2340 - ] - }, - { - "teal": 2342, - "source": 586, - "pc": [ - 2341 - ] - }, - { - "teal": 2343, - "source": 586, - "pc": [ - 2342, - 2343 - ] - }, - { - "teal": 2346, - "source": 584, - "pc": [ - 2344 - ] - }, - { - "teal": 2347, - "source": 584, - "pc": [ - 2345, - 2346 - ] - }, - { - "teal": 2350, - "source": 584, - "pc": [ - 2347 - ] - }, - { - "teal": 2351, - "source": 584, - "pc": [ - 2348, - 2349 - ] - }, - { - "teal": 2352, - "source": 584, - "pc": [ - 2350 - ] - }, - { - "teal": 2353, - "source": 584, - "pc": [ - 2351 - ] - }, - { - "teal": 2354, - "source": 584, - "pc": [ - 2352, - 2353 - ] - }, - { - "teal": 2355, - "source": 584, - "pc": [ - 2354, - 2355, - 2356 - ] - }, - { - "teal": 2356, - "source": 584, - "pc": [ - 2357, - 2358 - ] - }, - { - "teal": 2360, - "source": 588, - "pc": [ - 2359, - 2360 - ] - }, - { - "teal": 2361, - "source": 588, - "pc": [ - 2361, - 2362, - 2363 - ] - }, - { - "teal": 2362, - "source": 588, - "pc": [ - 2364 - ] - }, - { - "teal": 2363, - "source": 588, - "pc": [ - 2365, - 2366 - ] - }, - { - "teal": 2367, - "source": 594, - "pc": [ - 2367, - 2368 - ] - }, - { - "teal": 2368, - "source": 594, - "pc": [ - 2369, - 2370 - ] - }, - { - "teal": 2369, - "source": 594, - "pc": [ - 2371 - ] - }, - { - "teal": 2370, - "source": 594, - "pc": [ - 2372, - 2373 - ] - }, - { - "teal": 2371, - "source": 594, - "pc": [ - 2374 - ] - }, - { - "teal": 2372, - "source": 594, - "pc": [ - 2375 - ] - }, - { - "teal": 2373, - "source": 594, - "pc": [ - 2376, - 2377 - ] - }, - { - "teal": 2374, - "source": 594, - "pc": [ - 2378, - 2379 - ] - }, - { - "teal": 2375, - "source": 594, - "pc": [ - 2380 - ] - }, - { - "teal": 2376, - "source": 594, - "pc": [ - 2381 - ] - }, - { - "teal": 2377, - "source": 594, - "pc": [ - 2382, - 2383 - ] - }, - { - "teal": 2381, - "source": 595, - "pc": [ - 2384 - ] - }, - { - "teal": 2382, - "source": 595, - "pc": [ - 2385, - 2386 - ] - }, - { - "teal": 2386, - "source": 596, - "pc": [ - 2387, - 2388, - 2389 - ] - }, - { - "teal": 2387, - "source": 596, - "pc": [ - 2390, - 2391 - ] - }, - { - "teal": 2392, - "source": 604, - "pc": [ - 2392, - 2393 - ] - }, - { - "teal": 2393, - "source": 604, - "pc": [ - 2394, - 2395, - 2396 - ] - }, - { - "teal": 2394, - "source": 604, - "pc": [ - 2397 - ] - }, - { - "teal": 2395, - "source": 604, - "pc": [ - 2398, - 2399 - ] - }, - { - "teal": 2396, - "source": 604, - "pc": [ - 2400 - ] - }, - { - "teal": 2397, - "source": 604, - "pc": [ - 2401, - 2402, - 2403 - ] - }, - { - "teal": 2402, - "source": 605, - "pc": [ - 2404 - ] - }, - { - "teal": 2403, - "source": 605, - "pc": [ - 2405, - 2406 - ] - }, - { - "teal": 2408, - "source": 611, - "pc": [ - 2407 - ] - }, - { - "teal": 2409, - "source": 611, - "pc": [ - 2408, - 2409 - ] - }, - { - "teal": 2413, - "source": 612, - "pc": [ - 2410 - ] - }, - { - "teal": 2414, - "source": 612, - "pc": [ - 2411, - 2412 - ] - }, - { - "teal": 2418, - "source": 613, - "pc": [ - 2413 - ] - }, - { - "teal": 2419, - "source": 613, - "pc": [ - 2414, - 2415 - ] - }, - { - "teal": 2423, - "source": 614, - "pc": [ - 2416 - ] - }, - { - "teal": 2424, - "source": 614, - "pc": [ - 2417, - 2418 - ] - }, - { - "teal": 2429, - "source": 615, - "pc": [ - 2419, - 2420 - ] - }, - { - "teal": 2430, - "source": 615, - "pc": [ - 2421, - 2422, - 2423 - ] - }, - { - "teal": 2436, - "source": 617, - "pc": [ - 2424, - 2425 - ] - }, - { - "teal": 2437, - "source": 617, - "pc": [ - 2426, - 2427 - ] - }, - { - "teal": 2438, - "source": 617, - "pc": [ - 2428, - 2429, - 2430 - ] - }, - { - "teal": 2439, - "source": 617, - "pc": [ - 2431 - ] - }, - { - "teal": 2440, - "source": 617, - "pc": [ - 2432, - 2433 - ] - }, - { - "teal": 2441, - "source": 617, - "pc": [ - 2434 - ] - }, - { - "teal": 2442, - "source": 617, - "pc": [ - 2435, - 2436 - ] - }, - { - "teal": 2443, - "source": 617, - "pc": [ - 2437 - ] - }, - { - "teal": 2444, - "source": 616, - "pc": [ - 2438, - 2439 - ] - }, - { - "teal": 2449, - "source": 621, - "pc": [ - 2440, - 2441 - ] - }, - { - "teal": 2450, - "source": 621, - "pc": [ - 2442, - 2443 - ] - }, - { - "teal": 2451, - "source": 621, - "pc": [ - 2444, - 2445, - 2446 - ] - }, - { - "teal": 2452, - "source": 621, - "pc": [ - 2447 - ] - }, - { - "teal": 2453, - "source": 621, - "pc": [ - 2448 - ] - }, - { - "teal": 2454, - "source": 621, - "pc": [ - 2449, - 2450, - 2451 - ] - }, - { - "teal": 2459, - "source": 627, - "pc": [ - 2452, - 2453 - ] - }, - { - "teal": 2460, - "source": 627, - "pc": [ - 2454 - ] - }, - { - "teal": 2461, - "source": 627, - "pc": [ - 2455 - ] - }, - { - "teal": 2462, - "source": 627, - "pc": [ - 2456 - ] - }, - { - "teal": 2463, - "source": 627, - "pc": [ - 2457 - ] - }, - { - "teal": 2464, - "source": 627, - "pc": [ - 2458 - ] - }, - { - "teal": 2465, - "source": 627, - "pc": [ - 2459, - 2460 - ] - }, - { - "teal": 2466, - "source": 627, - "pc": [ - 2461 - ] - }, - { - "teal": 2467, - "source": 627, - "pc": [ - 2462 - ] - }, - { - "teal": 2468, - "source": 627, - "pc": [ - 2463, - 2464 - ] - }, - { - "teal": 2469, - "source": 627, - "pc": [ - 2465 - ] - }, - { - "teal": 2470, - "source": 627, - "pc": [ - 2466 - ] - }, - { - "teal": 2471, - "source": 627, - "pc": [ - 2467, - 2468 - ] - }, - { - "teal": 2475, - "source": 630, - "pc": [ - 2469, - 2470 - ] - }, - { - "teal": 2476, - "source": 630, - "pc": [ - 2471, - 2472, - 2473 - ] - }, - { - "teal": 2477, - "source": 630, - "pc": [ - 2474 - ] - }, - { - "teal": 2478, - "source": 630, - "pc": [ - 2475, - 2476 - ] - }, - { - "teal": 2479, - "source": 630, - "pc": [ - 2477 - ] - }, - { - "teal": 2480, - "source": 630, - "pc": [ - 2478 - ] - }, - { - "teal": 2481, - "source": 630, - "pc": [ - 2479, - 2480 - ] - }, - { - "teal": 2482, - "source": 630, - "pc": [ - 2481 - ] - }, - { - "teal": 2483, - "source": 630, - "pc": [ - 2482 - ] - }, - { - "teal": 2484, - "source": 630, - "pc": [ - 2483 - ] - }, - { - "teal": 2485, - "source": 630, - "pc": [ - 2484 - ] - }, - { - "teal": 2486, - "source": 630, - "pc": [ - 2485 - ] - }, - { - "teal": 2489, - "source": 630, - "errorMessage": "wideRatio failed", - "pc": [ - 2486 - ] - }, - { - "teal": 2490, - "source": 630, - "pc": [ - 2487, - 2488 - ] - }, - { - "teal": 2498, - "source": 633, - "pc": [ - 2489, - 2490 - ] - }, - { - "teal": 2499, - "source": 633, - "pc": [ - 2491 - ] - }, - { - "teal": 2500, - "source": 633, - "pc": [ - 2492 - ] - }, - { - "teal": 2501, - "source": 633, - "pc": [ - 2493, - 2494, - 2495 - ] - }, - { - "teal": 2507, - "source": 638, - "pc": [ - 2496, - 2497 - ] - }, - { - "teal": 2508, - "source": 638, - "pc": [ - 2498, - 2499 - ] - }, - { - "teal": 2509, - "source": 638, - "pc": [ - 2500 - ] - }, - { - "teal": 2510, - "source": 638, - "pc": [ - 2501, - 2502, - 2503 - ] - }, - { - "teal": 2515, - "source": 639, - "pc": [ - 2504, - 2505, - 2506, - 2507, - 2508, - 2509, - 2510, - 2511, - 2512, - 2513, - 2514, - 2515, - 2516, - 2517, - 2518, - 2519, - 2520, - 2521, - 2522, - 2523, - 2524, - 2525, - 2526, - 2527 - ] - }, - { - "teal": 2516, - "source": 639, - "pc": [ - 2528 - ] - }, - { - "teal": 2520, - "source": 640, - "pc": [ - 2529 - ] - }, - { - "teal": 2528, - "source": 644, - "pc": [ - 2530, - 2531 - ] - }, - { - "teal": 2529, - "source": 644, - "pc": [ - 2532, - 2533, - 2534 - ] - }, - { - "teal": 2534, - "source": 647, - "pc": [ - 2535, - 2536 - ] - }, - { - "teal": 2535, - "source": 647, - "pc": [ - 2537, - 2538 - ] - }, - { - "teal": 2536, - "source": 647, - "pc": [ - 2539 - ] - }, - { - "teal": 2537, - "source": 647, - "pc": [ - 2540 - ] - }, - { - "teal": 2538, - "source": 647, - "pc": [ - 2541, - 2542 - ] - }, - { - "teal": 2539, - "source": 647, - "pc": [ - 2543, - 2544, - 2545 - ] - }, - { - "teal": 2540, - "source": 647, - "pc": [ - 2546 - ] - }, - { - "teal": 2541, - "source": 647, - "pc": [ - 2547 - ] - }, - { - "teal": 2542, - "source": 647, - "pc": [ - 2548 - ] - }, - { - "teal": 2543, - "source": 647, - "pc": [ - 2549 - ] - }, - { - "teal": 2544, - "source": 647, - "pc": [ - 2550 - ] - }, - { - "teal": 2545, - "source": 647, - "pc": [ - 2551 - ] - }, - { - "teal": 2548, - "source": 647, - "errorMessage": "wideRatio failed", - "pc": [ - 2552 - ] - }, - { - "teal": 2549, - "source": 647, - "pc": [ - 2553, - 2554 - ] - }, - { - "teal": 2553, - "source": 649, - "pc": [ - 2555, - 2556 - ] - }, - { - "teal": 2554, - "source": 649, - "pc": [ - 2557, - 2558 - ] - }, - { - "teal": 2555, - "source": 649, - "pc": [ - 2559 - ] - }, - { - "teal": 2556, - "source": 649, - "pc": [ - 2560, - 2561 - ] - }, - { - "teal": 2564, - "source": 650, - "pc": [ - 2562 - ] - }, - { - "teal": 2565, - "source": 650, - "pc": [ - 2563 - ] - }, - { - "teal": 2566, - "source": 650, - "pc": [ - 2564, - 2565 - ] - }, - { - "teal": 2570, - "source": 651, - "pc": [ - 2566, - 2567 - ] - }, - { - "teal": 2571, - "source": 651, - "pc": [ - 2568, - 2569 - ] - }, - { - "teal": 2575, - "source": 652, - "pc": [ - 2570, - 2571, - 2572 - ] - }, - { - "teal": 2576, - "source": 652, - "pc": [ - 2573, - 2574 - ] - }, - { - "teal": 2580, - "source": 653, - "pc": [ - 2575, - 2576, - 2577, - 2578, - 2579, - 2580, - 2581, - 2582, - 2583, - 2584, - 2585, - 2586, - 2587, - 2588, - 2589, - 2590, - 2591, - 2592, - 2593, - 2594, - 2595, - 2596, - 2597, - 2598, - 2599, - 2600, - 2601, - 2602, - 2603, - 2604, - 2605, - 2606, - 2607, - 2608, - 2609, - 2610 - ] - }, - { - "teal": 2581, - "source": 653, - "pc": [ - 2611, - 2612 - ] - }, - { - "teal": 2584, - "source": 650, - "pc": [ - 2613 - ] - }, - { - "teal": 2585, - "source": 650, - "pc": [ - 2614, - 2615 - ] - }, - { - "teal": 2588, - "source": 650, - "pc": [ - 2616 - ] - }, - { - "teal": 2592, - "source": 656, - "pc": [ - 2617, - 2618 - ] - }, - { - "teal": 2593, - "source": 656, - "pc": [ - 2619, - 2620 - ] - }, - { - "teal": 2594, - "source": 644, - "pc": [ - 2621, - 2622, - 2623 - ] - }, - { - "teal": 2599, - "source": 657, - "pc": [ - 2624, - 2625 - ] - }, - { - "teal": 2600, - "source": 657, - "pc": [ - 2626, - 2627, - 2628 - ] - }, - { - "teal": 2601, - "source": 657, - "pc": [ - 2629 - ] - }, - { - "teal": 2602, - "source": 657, - "pc": [ - 2630 - ] - }, - { - "teal": 2603, - "source": 657, - "pc": [ - 2631 - ] - }, - { - "teal": 2604, - "source": 657, - "pc": [ - 2632, - 2633, - 2634 - ] - }, - { - "teal": 2612, - "source": 661, - "pc": [ - 2635, - 2636 - ] - }, - { - "teal": 2613, - "source": 661, - "pc": [ - 2637, - 2638 - ] - }, - { - "teal": 2614, - "source": 661, - "pc": [ - 2639, - 2640, - 2641 - ] - }, - { - "teal": 2615, - "source": 661, - "pc": [ - 2642 - ] - }, - { - "teal": 2616, - "source": 660, - "pc": [ - 2643 - ] - }, - { - "teal": 2617, - "source": 660, - "pc": [ - 2644 - ] - }, - { - "teal": 2618, - "source": 662, - "pc": [ - 2645, - 2646 - ] - }, - { - "teal": 2619, - "source": 660, - "pc": [ - 2647 - ] - }, - { - "teal": 2620, - "source": 660, - "pc": [ - 2648 - ] - }, - { - "teal": 2621, - "source": 660, - "pc": [ - 2649 - ] - }, - { - "teal": 2622, - "source": 660, - "pc": [ - 2650 - ] - }, - { - "teal": 2623, - "source": 660, - "pc": [ - 2651 - ] - }, - { - "teal": 2626, - "source": 660, - "errorMessage": "wideRatio failed", - "pc": [ - 2652 - ] - }, - { - "teal": 2627, - "source": 660, - "pc": [ - 2653, - 2654 - ] - }, - { - "teal": 2631, - "source": 666, - "pc": [ - 2655, - 2656 - ] - }, - { - "teal": 2632, - "source": 666, - "pc": [ - 2657, - 2658 - ] - }, - { - "teal": 2633, - "source": 666, - "pc": [ - 2659 - ] - }, - { - "teal": 2634, - "source": 666, - "pc": [ - 2660, - 2661 - ] - }, - { - "teal": 2639, - "source": 673, - "pc": [ - 2662, - 2663 - ] - }, - { - "teal": 2640, - "source": 673, - "pc": [ - 2664 - ] - }, - { - "teal": 2641, - "source": 673, - "pc": [ - 2665 - ] - }, - { - "teal": 2642, - "source": 673, - "pc": [ - 2666, - 2667, - 2668 - ] - }, - { - "teal": 2647, - "source": 676, - "pc": [ - 2669 - ] - }, - { - "teal": 2648, - "source": 676, - "pc": [ - 2670, - 2671 - ] - }, - { - "teal": 2654, - "source": 678, - "pc": [ - 2672, - 2673 - ] - }, - { - "teal": 2655, - "source": 678, - "pc": [ - 2674, - 2675, - 2676 - ] - }, - { - "teal": 2656, - "source": 678, - "pc": [ - 2677, - 2678 - ] - }, - { - "teal": 2657, - "source": 678, - "pc": [ - 2679, - 2680, - 2681 - ] - }, - { - "teal": 2658, - "source": 678, - "pc": [ - 2682 - ] - }, - { - "teal": 2659, - "source": 678, - "pc": [ - 2683 - ] - }, - { - "teal": 2660, - "source": 678, - "pc": [ - 2684, - 2685, - 2686 - ] - }, - { - "teal": 2661, - "source": 679, - "pc": [ - 2687, - 2688 - ] - }, - { - "teal": 2662, - "source": 679, - "pc": [ - 2689, - 2690, - 2691 - ] - }, - { - "teal": 2663, - "source": 679, - "pc": [ - 2692, - 2693 - ] - }, - { - "teal": 2664, - "source": 679, - "pc": [ - 2694 - ] - }, - { - "teal": 2665, - "source": 679, - "pc": [ - 2695, - 2696 - ] - }, - { - "teal": 2666, - "source": 679, - "pc": [ - 2697, - 2698, - 2699 - ] - }, - { - "teal": 2667, - "source": 679, - "pc": [ - 2700, - 2701 - ] - }, - { - "teal": 2668, - "source": 679, - "pc": [ - 2702 - ] - }, - { - "teal": 2669, - "source": 679, - "pc": [ - 2703 - ] - }, - { - "teal": 2670, - "source": 679, - "pc": [ - 2704, - 2705 - ] - }, - { - "teal": 2671, - "source": 679, - "pc": [ - 2706 - ] - }, - { - "teal": 2672, - "source": 678, - "pc": [ - 2707 - ] - }, - { - "teal": 2675, - "source": 677, - "pc": [ - 2708, - 2709, - 2710 - ] - }, - { - "teal": 2680, - "source": 681, - "pc": [ - 2711, - 2712 - ] - }, - { - "teal": 2681, - "source": 681, - "pc": [ - 2713, - 2714 - ] - }, - { - "teal": 2682, - "source": 681, - "pc": [ - 2715 - ] - }, - { - "teal": 2683, - "source": 681, - "pc": [ - 2716, - 2717, - 2718 - ] - }, - { - "teal": 2684, - "source": 681, - "pc": [ - 2719, - 2720 - ] - }, - { - "teal": 2685, - "source": 681, - "pc": [ - 2721, - 2722, - 2723 - ] - }, - { - "teal": 2688, - "source": 681, - "pc": [ - 2724, - 2725 - ] - }, - { - "teal": 2691, - "source": 681, - "pc": [ - 2726, - 2727 - ] - }, - { - "teal": 2699, - "source": 682, - "pc": [ - 2728 - ] - }, - { - "teal": 2700, - "source": 682, - "pc": [ - 2729 - ] - }, - { - "teal": 2701, - "source": 682, - "pc": [ - 2730, - 2731 - ] - }, - { - "teal": 2705, - "source": 683, - "pc": [ - 2732, - 2733 - ] - }, - { - "teal": 2706, - "source": 683, - "pc": [ - 2734, - 2735 - ] - }, - { - "teal": 2710, - "source": 684, - "pc": [ - 2736, - 2737 - ] - }, - { - "teal": 2711, - "source": 684, - "pc": [ - 2738, - 2739, - 2740 - ] - }, - { - "teal": 2712, - "source": 684, - "pc": [ - 2741, - 2742 - ] - }, - { - "teal": 2716, - "source": 685, - "pc": [ - 2743, - 2744, - 2745, - 2746, - 2747, - 2748, - 2749, - 2750, - 2751, - 2752, - 2753, - 2754, - 2755, - 2756, - 2757, - 2758, - 2759, - 2760, - 2761, - 2762, - 2763, - 2764, - 2765, - 2766, - 2767, - 2768, - 2769, - 2770, - 2771, - 2772, - 2773, - 2774, - 2775, - 2776, - 2777, - 2778, - 2779, - 2780, - 2781, - 2782, - 2783, - 2784, - 2785, - 2786, - 2787, - 2788, - 2789, - 2790, - 2791, - 2792, - 2793, - 2794, - 2795, - 2796, - 2797 - ] - }, - { - "teal": 2717, - "source": 685, - "pc": [ - 2798, - 2799 - ] - }, - { - "teal": 2720, - "source": 682, - "pc": [ - 2800 - ] - }, - { - "teal": 2721, - "source": 682, - "pc": [ - 2801, - 2802 - ] - }, - { - "teal": 2724, - "source": 682, - "pc": [ - 2803 - ] - }, - { - "teal": 2730, - "source": 688, - "pc": [ - 2804, - 2805 - ] - }, - { - "teal": 2731, - "source": 688, - "pc": [ - 2806, - 2807 - ] - }, - { - "teal": 2732, - "source": 688, - "pc": [ - 2808 - ] - }, - { - "teal": 2733, - "source": 688, - "pc": [ - 2809 - ] - }, - { - "teal": 2734, - "source": 688, - "pc": [ - 2810 - ] - }, - { - "teal": 2735, - "source": 688, - "pc": [ - 2811, - 2812, - 2813 - ] - }, - { - "teal": 2744, - "source": 689, - "pc": [ - 2814 - ] - }, - { - "teal": 2745, - "source": 689, - "pc": [ - 2815 - ] - }, - { - "teal": 2746, - "source": 689, - "pc": [ - 2816, - 2817 - ] - }, - { - "teal": 2750, - "source": 690, - "pc": [ - 2818, - 2819 - ] - }, - { - "teal": 2751, - "source": 690, - "pc": [ - 2820, - 2821 - ] - }, - { - "teal": 2752, - "source": 690, - "pc": [ - 2822 - ] - }, - { - "teal": 2753, - "source": 690, - "pc": [ - 2823, - 2824 - ] - }, - { - "teal": 2757, - "source": 691, - "pc": [ - 2825, - 2826 - ] - }, - { - "teal": 2758, - "source": 691, - "pc": [ - 2827, - 2828, - 2829 - ] - }, - { - "teal": 2759, - "source": 691, - "pc": [ - 2830, - 2831 - ] - }, - { - "teal": 2763, - "source": 692, - "pc": [ - 2832, - 2833, - 2834, - 2835, - 2836, - 2837, - 2838, - 2839, - 2840, - 2841, - 2842, - 2843, - 2844, - 2845, - 2846, - 2847, - 2848, - 2849 - ] - }, - { - "teal": 2764, - "source": 692, - "pc": [ - 2850, - 2851 - ] - }, - { - "teal": 2767, - "source": 689, - "pc": [ - 2852 - ] - }, - { - "teal": 2768, - "source": 689, - "pc": [ - 2853, - 2854 - ] - }, - { - "teal": 2771, - "source": 689, - "pc": [ - 2855 - ] - }, - { - "teal": 2780, - "source": 704, - "pc": [ - 2856 - ] - }, - { - "teal": 2781, - "source": 704, - "pc": [ - 2857, - 2858 - ] - }, - { - "teal": 2786, - "source": 728, - "pc": [ - 2859, - 2860 - ] - }, - { - "teal": 2787, - "source": 728, - "pc": [ - 2861 - ] - }, - { - "teal": 2788, - "source": 728, - "pc": [ - 2862 - ] - }, - { - "teal": 2789, - "source": 728, - "pc": [ - 2863 - ] - }, - { - "teal": 2790, - "source": 728, - "pc": [ - 2864, - 2865, - 2866 - ] - }, - { - "teal": 2791, - "source": 728, - "pc": [ - 2867, - 2868 - ] - }, - { - "teal": 2792, - "source": 728, - "pc": [ - 2869 - ] - }, - { - "teal": 2793, - "source": 728, - "pc": [ - 2870 - ] - }, - { - "teal": 2794, - "source": 728, - "pc": [ - 2871 - ] - }, - { - "teal": 2797, - "source": 728, - "pc": [ - 2872, - 2873, - 2874 - ] - }, - { - "teal": 2802, - "source": 729, - "pc": [ - 2875 - ] - }, - { - "teal": 2803, - "source": 729, - "pc": [ - 2876, - 2877 - ] - }, - { - "teal": 2807, - "source": 730, - "pc": [ - 2878, - 2879 - ] - }, - { - "teal": 2808, - "source": 730, - "pc": [ - 2880, - 2881 - ] - }, - { - "teal": 2812, - "source": 731, - "pc": [ - 2882 - ] - }, - { - "teal": 2813, - "source": 731, - "pc": [ - 2883, - 2884 - ] - }, - { - "teal": 2818, - "source": 731, - "pc": [ - 2885, - 2886 - ] - }, - { - "teal": 2819, - "source": 731, - "pc": [ - 2887, - 2888 - ] - }, - { - "teal": 2820, - "source": 731, - "pc": [ - 2889 - ] - }, - { - "teal": 2821, - "source": 731, - "pc": [ - 2890, - 2891, - 2892 - ] - }, - { - "teal": 2826, - "source": 732, - "pc": [ - 2893, - 2894 - ] - }, - { - "teal": 2827, - "source": 732, - "pc": [ - 2895, - 2896 - ] - }, - { - "teal": 2828, - "source": 732, - "pc": [ - 2897 - ] - }, - { - "teal": 2829, - "source": 732, - "pc": [ - 2898, - 2899, - 2900 - ] - }, - { - "teal": 2834, - "source": 733, - "pc": [ - 2901 - ] - }, - { - "teal": 2835, - "source": 733, - "pc": [ - 2902 - ] - }, - { - "teal": 2836, - "source": 733, - "pc": [ - 2903, - 2904 - ] - }, - { - "teal": 2837, - "source": 733, - "pc": [ - 2905 - ] - }, - { - "teal": 2838, - "source": 733, - "pc": [ - 2906, - 2907 - ] - }, - { - "teal": 2839, - "source": 733, - "pc": [ - 2908, - 2909 - ] - }, - { - "teal": 2840, - "source": 733, - "pc": [ - 2910 - ] - }, - { - "teal": 2841, - "source": 733, - "pc": [ - 2911, - 2912 - ] - }, - { - "teal": 2842, - "source": 733, - "pc": [ - 2913, - 2914 - ] - }, - { - "teal": 2843, - "source": 733, - "pc": [ - 2915, - 2916 - ] - }, - { - "teal": 2844, - "source": 733, - "pc": [ - 2917, - 2918 - ] - }, - { - "teal": 2845, - "source": 733, - "pc": [ - 2919 - ] - }, - { - "teal": 2850, - "source": 735, - "pc": [ - 2920, - 2921 - ] - }, - { - "teal": 2851, - "source": 735, - "pc": [ - 2922 - ] - }, - { - "teal": 2852, - "source": 735, - "pc": [ - 2923 - ] - }, - { - "teal": 2853, - "source": 735, - "pc": [ - 2924 - ] - }, - { - "teal": 2854, - "source": 735, - "pc": [ - 2925 - ] - }, - { - "teal": 2855, - "source": 735, - "pc": [ - 2926, - 2927 - ] - }, - { - "teal": 2856, - "source": 735, - "pc": [ - 2928 - ] - }, - { - "teal": 2857, - "source": 735, - "pc": [ - 2929, - 2930 - ] - }, - { - "teal": 2862, - "source": 736, - "pc": [ - 2931, - 2932 - ] - }, - { - "teal": 2863, - "source": 736, - "pc": [ - 2933, - 2934, - 2935 - ] - }, - { - "teal": 2864, - "source": 736, - "pc": [ - 2936, - 2937 - ] - }, - { - "teal": 2865, - "source": 736, - "pc": [ - 2938 - ] - }, - { - "teal": 2866, - "source": 736, - "pc": [ - 2939, - 2940, - 2941 - ] - }, - { - "teal": 2872, - "source": 737, - "pc": [ - 2942, - 2943 - ] - }, - { - "teal": 2873, - "source": 737, - "pc": [ - 2944, - 2945, - 2946 - ] - }, - { - "teal": 2874, - "source": 737, - "pc": [ - 2947 - ] - }, - { - "teal": 2875, - "source": 737, - "pc": [ - 2948, - 2949 - ] - }, - { - "teal": 2876, - "source": 737, - "pc": [ - 2950 - ] - }, - { - "teal": 2877, - "source": 737, - "pc": [ - 2951, - 2952, - 2953 - ] - }, - { - "teal": 2882, - "source": 740, - "pc": [ - 2954, - 2955 - ] - }, - { - "teal": 2883, - "source": 740, - "pc": [ - 2956, - 2957 - ] - }, - { - "teal": 2884, - "source": 740, - "pc": [ - 2958, - 2959, - 2960 - ] - }, - { - "teal": 2885, - "source": 740, - "pc": [ - 2961 - ] - }, - { - "teal": 2886, - "source": 740, - "pc": [ - 2962 - ] - }, - { - "teal": 2887, - "source": 740, - "pc": [ - 2963, - 2964 - ] - }, - { - "teal": 2888, - "source": 737, - "pc": [ - 2965, - 2966, - 2967 - ] - }, - { - "teal": 2893, - "source": 744, - "pc": [ - 2968, - 2969 - ] - }, - { - "teal": 2894, - "source": 744, - "pc": [ - 2970, - 2971 - ] - }, - { - "teal": 2895, - "source": 744, - "pc": [ - 2972, - 2973, - 2974 - ] - }, - { - "teal": 2896, - "source": 744, - "pc": [ - 2975 - ] - }, - { - "teal": 2897, - "source": 744, - "pc": [ - 2976 - ] - }, - { - "teal": 2898, - "source": 744, - "pc": [ - 2977, - 2978 - ] - }, - { - "teal": 2903, - "source": 748, - "pc": [ - 2979, - 2980 - ] - }, - { - "teal": 2904, - "source": 748, - "pc": [ - 2981, - 2982 - ] - }, - { - "teal": 2905, - "source": 748, - "pc": [ - 2983 - ] - }, - { - "teal": 2906, - "source": 748, - "pc": [ - 2984, - 2985, - 2986 - ] - }, - { - "teal": 2911, - "source": 749, - "pc": [ - 2987, - 2988 - ] - }, - { - "teal": 2912, - "source": 749, - "pc": [ - 2989, - 2990 - ] - }, - { - "teal": 2913, - "source": 749, - "pc": [ - 2991, - 2992, - 2993 - ] - }, - { - "teal": 2914, - "source": 749, - "pc": [ - 2994 - ] - }, - { - "teal": 2915, - "source": 749, - "pc": [ - 2995 - ] - }, - { - "teal": 2916, - "source": 749, - "pc": [ - 2996, - 2997 - ] - }, - { - "teal": 2920, - "source": 750, - "pc": [ - 2998, - 2999 - ] - }, - { - "teal": 2921, - "source": 750, - "pc": [ - 3000, - 3001 - ] - }, - { - "teal": 2922, - "source": 750, - "pc": [ - 3002 - ] - }, - { - "teal": 2923, - "source": 750, - "pc": [ - 3003, - 3004 - ] - }, - { - "teal": 2924, - "source": 750, - "pc": [ - 3005 - ] - }, - { - "teal": 2925, - "source": 750, - "pc": [ - 3006, - 3007 - ] - }, - { - "teal": 2930, - "source": 752, - "pc": [ - 3008, - 3009 - ] - }, - { - "teal": 2931, - "source": 752, - "pc": [ - 3010 - ] - }, - { - "teal": 2932, - "source": 752, - "pc": [ - 3011 - ] - }, - { - "teal": 2933, - "source": 752, - "pc": [ - 3012, - 3013, - 3014 - ] - }, - { - "teal": 2941, - "source": 755, - "pc": [ - 3015, - 3016 - ] - }, - { - "teal": 2942, - "source": 755, - "pc": [ - 3017, - 3018, - 3019 - ] - }, - { - "teal": 2943, - "source": 755, - "pc": [ - 3020 - ] - }, - { - "teal": 2944, - "source": 755, - "pc": [ - 3021, - 3022 - ] - }, - { - "teal": 2945, - "source": 754, - "pc": [ - 3023 - ] - }, - { - "teal": 2946, - "source": 755, - "pc": [ - 3024, - 3025 - ] - }, - { - "teal": 2947, - "source": 754, - "pc": [ - 3026, - 3027 - ] - }, - { - "teal": 2948, - "source": 754, - "pc": [ - 3028, - 3029 - ] - }, - { - "teal": 2949, - "source": 754, - "pc": [ - 3030 - ] - }, - { - "teal": 2950, - "source": 754, - "pc": [ - 3031, - 3032 - ] - }, - { - "teal": 2951, - "source": 754, - "pc": [ - 3033 - ] - }, - { - "teal": 2952, - "source": 754, - "pc": [ - 3034, - 3035 - ] - }, - { - "teal": 2953, - "source": 754, - "pc": [ - 3036 - ] - }, - { - "teal": 2954, - "source": 754, - "pc": [ - 3037 - ] - }, - { - "teal": 2955, - "source": 756, - "pc": [ - 3038, - 3039 - ] - }, - { - "teal": 2956, - "source": 756, - "pc": [ - 3040 - ] - }, - { - "teal": 2957, - "source": 756, - "pc": [ - 3041, - 3042 - ] - }, - { - "teal": 2958, - "source": 754, - "pc": [ - 3043 - ] - }, - { - "teal": 2959, - "source": 754, - "pc": [ - 3044 - ] - }, - { - "teal": 2960, - "source": 754, - "pc": [ - 3045 - ] - }, - { - "teal": 2961, - "source": 754, - "pc": [ - 3046 - ] - }, - { - "teal": 2962, - "source": 754, - "pc": [ - 3047 - ] - }, - { - "teal": 2963, - "source": 754, - "pc": [ - 3048 - ] - }, - { - "teal": 2966, - "source": 754, - "errorMessage": "wideRatio failed", - "pc": [ - 3049 - ] - }, - { - "teal": 2967, - "source": 754, - "pc": [ - 3050, - 3051 - ] - }, - { - "teal": 2971, - "source": 761, - "pc": [ - 3052, - 3053 - ] - }, - { - "teal": 2972, - "source": 761, - "pc": [ - 3054, - 3055 - ] - }, - { - "teal": 2973, - "source": 761, - "pc": [ - 3056 - ] - }, - { - "teal": 2974, - "source": 761, - "pc": [ - 3057, - 3058 - ] - }, - { - "teal": 2978, - "source": 762, - "pc": [ - 3059, - 3060 - ] - }, - { - "teal": 2979, - "source": 762, - "pc": [ - 3061, - 3062 - ] - }, - { - "teal": 2980, - "source": 762, - "pc": [ - 3063, - 3064 - ] - }, - { - "teal": 2981, - "source": 762, - "pc": [ - 3065, - 3066, - 3067 - ] - }, - { - "teal": 2982, - "source": 762, - "pc": [ - 3068 - ] - }, - { - "teal": 2983, - "source": 762, - "pc": [ - 3069, - 3070 - ] - }, - { - "teal": 2984, - "source": 762, - "pc": [ - 3071 - ] - }, - { - "teal": 2985, - "source": 762, - "pc": [ - 3072 - ] - }, - { - "teal": 2986, - "source": 762, - "pc": [ - 3073 - ] - }, - { - "teal": 2987, - "source": 762, - "pc": [ - 3074, - 3075 - ] - }, - { - "teal": 2991, - "source": 763, - "pc": [ - 3076, - 3077 - ] - }, - { - "teal": 2992, - "source": 763, - "pc": [ - 3078, - 3079 - ] - }, - { - "teal": 2993, - "source": 763, - "pc": [ - 3080 - ] - }, - { - "teal": 2994, - "source": 763, - "pc": [ - 3081, - 3082 - ] - }, - { - "teal": 3002, - "source": 767, - "pc": [ - 3083, - 3084 - ] - }, - { - "teal": 3003, - "source": 767, - "pc": [ - 3085, - 3086, - 3087 - ] - }, - { - "teal": 3004, - "source": 767, - "pc": [ - 3088 - ] - }, - { - "teal": 3005, - "source": 767, - "pc": [ - 3089, - 3090 - ] - }, - { - "teal": 3006, - "source": 766, - "pc": [ - 3091 - ] - }, - { - "teal": 3007, - "source": 767, - "pc": [ - 3092, - 3093 - ] - }, - { - "teal": 3008, - "source": 766, - "pc": [ - 3094, - 3095 - ] - }, - { - "teal": 3009, - "source": 766, - "pc": [ - 3096, - 3097 - ] - }, - { - "teal": 3010, - "source": 766, - "pc": [ - 3098 - ] - }, - { - "teal": 3011, - "source": 766, - "pc": [ - 3099, - 3100 - ] - }, - { - "teal": 3012, - "source": 766, - "pc": [ - 3101 - ] - }, - { - "teal": 3013, - "source": 766, - "pc": [ - 3102, - 3103 - ] - }, - { - "teal": 3014, - "source": 766, - "pc": [ - 3104 - ] - }, - { - "teal": 3015, - "source": 766, - "pc": [ - 3105 - ] - }, - { - "teal": 3016, - "source": 768, - "pc": [ - 3106, - 3107 - ] - }, - { - "teal": 3017, - "source": 768, - "pc": [ - 3108 - ] - }, - { - "teal": 3018, - "source": 768, - "pc": [ - 3109, - 3110 - ] - }, - { - "teal": 3019, - "source": 766, - "pc": [ - 3111 - ] - }, - { - "teal": 3020, - "source": 766, - "pc": [ - 3112 - ] - }, - { - "teal": 3021, - "source": 766, - "pc": [ - 3113 - ] - }, - { - "teal": 3022, - "source": 766, - "pc": [ - 3114 - ] - }, - { - "teal": 3023, - "source": 766, - "pc": [ - 3115 - ] - }, - { - "teal": 3024, - "source": 766, - "pc": [ - 3116 - ] - }, - { - "teal": 3027, - "source": 766, - "errorMessage": "wideRatio failed", - "pc": [ - 3117 - ] - }, - { - "teal": 3028, - "source": 766, - "pc": [ - 3118, - 3119 - ] - }, - { - "teal": 3032, - "source": 772, - "pc": [ - 3120, - 3121 - ] - }, - { - "teal": 3033, - "source": 772, - "pc": [ - 3122, - 3123 - ] - }, - { - "teal": 3034, - "source": 772, - "pc": [ - 3124 - ] - }, - { - "teal": 3035, - "source": 772, - "pc": [ - 3125, - 3126 - ] - }, - { - "teal": 3039, - "source": 775, - "pc": [ - 3127, - 3128 - ] - }, - { - "teal": 3040, - "source": 775, - "pc": [ - 3129, - 3130 - ] - }, - { - "teal": 3041, - "source": 775, - "pc": [ - 3131, - 3132 - ] - }, - { - "teal": 3042, - "source": 775, - "pc": [ - 3133, - 3134, - 3135 - ] - }, - { - "teal": 3043, - "source": 775, - "pc": [ - 3136 - ] - }, - { - "teal": 3044, - "source": 775, - "pc": [ - 3137, - 3138 - ] - }, - { - "teal": 3045, - "source": 775, - "pc": [ - 3139 - ] - }, - { - "teal": 3046, - "source": 775, - "pc": [ - 3140 - ] - }, - { - "teal": 3047, - "source": 775, - "pc": [ - 3141 - ] - }, - { - "teal": 3048, - "source": 775, - "pc": [ - 3142, - 3143 - ] - }, - { - "teal": 3052, - "source": 776, - "pc": [ - 3144, - 3145 - ] - }, - { - "teal": 3053, - "source": 776, - "pc": [ - 3146, - 3147 - ] - }, - { - "teal": 3054, - "source": 776, - "pc": [ - 3148, - 3149 - ] - }, - { - "teal": 3055, - "source": 776, - "pc": [ - 3150, - 3151, - 3152 - ] - }, - { - "teal": 3056, - "source": 776, - "pc": [ - 3153 - ] - }, - { - "teal": 3057, - "source": 776, - "pc": [ - 3154, - 3155 - ] - }, - { - "teal": 3058, - "source": 776, - "pc": [ - 3156 - ] - }, - { - "teal": 3059, - "source": 776, - "pc": [ - 3157 - ] - }, - { - "teal": 3060, - "source": 776, - "pc": [ - 3158 - ] - }, - { - "teal": 3061, - "source": 776, - "pc": [ - 3159, - 3160 - ] - }, - { - "teal": 3065, - "source": 777, - "pc": [ - 3161, - 3162 - ] - }, - { - "teal": 3066, - "source": 777, - "pc": [ - 3163, - 3164 - ] - }, - { - "teal": 3067, - "source": 777, - "pc": [ - 3165 - ] - }, - { - "teal": 3068, - "source": 777, - "pc": [ - 3166, - 3167 - ] - }, - { - "teal": 3072, - "source": 779, - "pc": [ - 3168, - 3169 - ] - }, - { - "teal": 3073, - "source": 779, - "pc": [ - 3170 - ] - }, - { - "teal": 3074, - "source": 779, - "pc": [ - 3171 - ] - }, - { - "teal": 3075, - "source": 779, - "pc": [ - 3172, - 3173 - ] - }, - { - "teal": 3076, - "source": 779, - "pc": [ - 3174 - ] - }, - { - "teal": 3077, - "source": 779, - "pc": [ - 3175, - 3176 - ] - }, - { - "teal": 3078, - "source": 779, - "pc": [ - 3177 - ] - }, - { - "teal": 3089, - "source": 731, - "pc": [ - 3178, - 3179 - ] - }, - { - "teal": 3090, - "source": 731, - "pc": [ - 3180 - ] - }, - { - "teal": 3091, - "source": 731, - "pc": [ - 3181 - ] - }, - { - "teal": 3092, - "source": 731, - "pc": [ - 3182, - 3183 - ] - }, - { - "teal": 3093, - "source": 731, - "pc": [ - 3184, - 3185, - 3186 - ] - }, - { - "teal": 3098, - "source": 787, - "pc": [ - 3187, - 3188 - ] - }, - { - "teal": 3099, - "source": 787, - "pc": [ - 3189 - ] - }, - { - "teal": 3100, - "source": 787, - "pc": [ - 3190, - 3191 - ] - }, - { - "teal": 3101, - "source": 787, - "pc": [ - 3192 - ] - }, - { - "teal": 3102, - "source": 787, - "pc": [ - 3193, - 3194 - ] - }, - { - "teal": 3107, - "source": 791, - "pc": [ - 3195, - 3196 - ] - }, - { - "teal": 3108, - "source": 791, - "pc": [ - 3197 - ] - }, - { - "teal": 3109, - "source": 791, - "pc": [ - 3198 - ] - }, - { - "teal": 3110, - "source": 791, - "pc": [ - 3199, - 3200, - 3201 - ] - }, - { - "teal": 3115, - "source": 793, - "pc": [ - 3202 - ] - }, - { - "teal": 3116, - "source": 793, - "pc": [ - 3203, - 3204 - ] - }, - { - "teal": 3121, - "source": 793, - "pc": [ - 3205, - 3206 - ] - }, - { - "teal": 3122, - "source": 793, - "pc": [ - 3207, - 3208 - ] - }, - { - "teal": 3123, - "source": 793, - "pc": [ - 3209 - ] - }, - { - "teal": 3124, - "source": 793, - "pc": [ - 3210, - 3211, - 3212 - ] - }, - { - "teal": 3129, - "source": 794, - "pc": [ - 3213, - 3214 - ] - }, - { - "teal": 3130, - "source": 794, - "pc": [ - 3215, - 3216 - ] - }, - { - "teal": 3131, - "source": 794, - "pc": [ - 3217 - ] - }, - { - "teal": 3132, - "source": 794, - "pc": [ - 3218, - 3219, - 3220 - ] - }, - { - "teal": 3137, - "source": 795, - "pc": [ - 3221 - ] - }, - { - "teal": 3138, - "source": 795, - "pc": [ - 3222 - ] - }, - { - "teal": 3139, - "source": 795, - "pc": [ - 3223, - 3224 - ] - }, - { - "teal": 3140, - "source": 795, - "pc": [ - 3225 - ] - }, - { - "teal": 3141, - "source": 795, - "pc": [ - 3226, - 3227 - ] - }, - { - "teal": 3142, - "source": 795, - "pc": [ - 3228, - 3229 - ] - }, - { - "teal": 3143, - "source": 795, - "pc": [ - 3230 - ] - }, - { - "teal": 3144, - "source": 795, - "pc": [ - 3231, - 3232 - ] - }, - { - "teal": 3145, - "source": 795, - "pc": [ - 3233, - 3234 - ] - }, - { - "teal": 3146, - "source": 795, - "pc": [ - 3235, - 3236 - ] - }, - { - "teal": 3147, - "source": 795, - "pc": [ - 3237, - 3238 - ] - }, - { - "teal": 3148, - "source": 795, - "pc": [ - 3239 - ] - }, - { - "teal": 3153, - "source": 797, - "pc": [ - 3240, - 3241 - ] - }, - { - "teal": 3154, - "source": 797, - "pc": [ - 3242 - ] - }, - { - "teal": 3155, - "source": 797, - "pc": [ - 3243 - ] - }, - { - "teal": 3156, - "source": 797, - "pc": [ - 3244 - ] - }, - { - "teal": 3157, - "source": 797, - "pc": [ - 3245 - ] - }, - { - "teal": 3158, - "source": 797, - "pc": [ - 3246, - 3247 - ] - }, - { - "teal": 3159, - "source": 797, - "pc": [ - 3248 - ] - }, - { - "teal": 3160, - "source": 797, - "pc": [ - 3249, - 3250 - ] - }, - { - "teal": 3165, - "source": 798, - "pc": [ - 3251, - 3252 - ] - }, - { - "teal": 3166, - "source": 798, - "pc": [ - 3253, - 3254, - 3255 - ] - }, - { - "teal": 3167, - "source": 798, - "pc": [ - 3256, - 3257 - ] - }, - { - "teal": 3168, - "source": 798, - "pc": [ - 3258 - ] - }, - { - "teal": 3169, - "source": 798, - "pc": [ - 3259 - ] - }, - { - "teal": 3170, - "source": 798, - "pc": [ - 3260, - 3261, - 3262 - ] - }, - { - "teal": 3171, - "source": 798, - "pc": [ - 3263, - 3264 - ] - }, - { - "teal": 3172, - "source": 798, - "pc": [ - 3265, - 3266, - 3267 - ] - }, - { - "teal": 3173, - "source": 798, - "pc": [ - 3268 - ] - }, - { - "teal": 3174, - "source": 798, - "pc": [ - 3269, - 3270 - ] - }, - { - "teal": 3175, - "source": 798, - "pc": [ - 3271 - ] - }, - { - "teal": 3176, - "source": 798, - "pc": [ - 3272 - ] - }, - { - "teal": 3179, - "source": 798, - "pc": [ - 3273, - 3274, - 3275 - ] - }, - { - "teal": 3184, - "source": 799, - "pc": [ - 3276, - 3277 - ] - }, - { - "teal": 3185, - "source": 799, - "pc": [ - 3278, - 3279 - ] - }, - { - "teal": 3186, - "source": 799, - "pc": [ - 3280, - 3281, - 3282 - ] - }, - { - "teal": 3187, - "source": 799, - "pc": [ - 3283 - ] - }, - { - "teal": 3188, - "source": 799, - "pc": [ - 3284 - ] - }, - { - "teal": 3189, - "source": 799, - "pc": [ - 3285, - 3286 - ] - }, - { - "teal": 3194, - "source": 801, - "pc": [ - 3287, - 3288 - ] - }, - { - "teal": 3195, - "source": 801, - "pc": [ - 3289, - 3290 - ] - }, - { - "teal": 3196, - "source": 801, - "pc": [ - 3291 - ] - }, - { - "teal": 3197, - "source": 801, - "pc": [ - 3292, - 3293, - 3294 - ] - }, - { - "teal": 3203, - "source": 806, - "pc": [ - 3295, - 3296 - ] - }, - { - "teal": 3204, - "source": 806, - "pc": [ - 3297 - ] - }, - { - "teal": 3205, - "source": 806, - "pc": [ - 3298 - ] - }, - { - "teal": 3206, - "source": 806, - "pc": [ - 3299, - 3300, - 3301 - ] - }, - { - "teal": 3214, - "source": 808, - "pc": [ - 3302, - 3303 - ] - }, - { - "teal": 3215, - "source": 808, - "pc": [ - 3304, - 3305, - 3306 - ] - }, - { - "teal": 3216, - "source": 808, - "pc": [ - 3307 - ] - }, - { - "teal": 3217, - "source": 808, - "pc": [ - 3308, - 3309 - ] - }, - { - "teal": 3218, - "source": 807, - "pc": [ - 3310 - ] - }, - { - "teal": 3219, - "source": 807, - "pc": [ - 3311 - ] - }, - { - "teal": 3220, - "source": 809, - "pc": [ - 3312, - 3313 - ] - }, - { - "teal": 3221, - "source": 807, - "pc": [ - 3314 - ] - }, - { - "teal": 3222, - "source": 807, - "pc": [ - 3315 - ] - }, - { - "teal": 3223, - "source": 807, - "pc": [ - 3316 - ] - }, - { - "teal": 3224, - "source": 807, - "pc": [ - 3317 - ] - }, - { - "teal": 3225, - "source": 807, - "pc": [ - 3318 - ] - }, - { - "teal": 3228, - "source": 807, - "errorMessage": "wideRatio failed", - "pc": [ - 3319 - ] - }, - { - "teal": 3229, - "source": 807, - "pc": [ - 3320, - 3321 - ] - }, - { - "teal": 3233, - "source": 813, - "pc": [ - 3322, - 3323 - ] - }, - { - "teal": 3234, - "source": 813, - "pc": [ - 3324, - 3325 - ] - }, - { - "teal": 3235, - "source": 813, - "pc": [ - 3326, - 3327 - ] - }, - { - "teal": 3236, - "source": 813, - "pc": [ - 3328, - 3329, - 3330 - ] - }, - { - "teal": 3237, - "source": 813, - "pc": [ - 3331 - ] - }, - { - "teal": 3238, - "source": 813, - "pc": [ - 3332, - 3333 - ] - }, - { - "teal": 3239, - "source": 813, - "pc": [ - 3334 - ] - }, - { - "teal": 3240, - "source": 813, - "pc": [ - 3335 - ] - }, - { - "teal": 3241, - "source": 813, - "pc": [ - 3336 - ] - }, - { - "teal": 3242, - "source": 813, - "pc": [ - 3337, - 3338 - ] - }, - { - "teal": 3246, - "source": 814, - "pc": [ - 3339, - 3340 - ] - }, - { - "teal": 3247, - "source": 814, - "pc": [ - 3341, - 3342 - ] - }, - { - "teal": 3248, - "source": 814, - "pc": [ - 3343 - ] - }, - { - "teal": 3249, - "source": 814, - "pc": [ - 3344, - 3345 - ] - }, - { - "teal": 3255, - "source": 816, - "pc": [ - 3346, - 3347 - ] - }, - { - "teal": 3256, - "source": 816, - "pc": [ - 3348 - ] - }, - { - "teal": 3257, - "source": 816, - "pc": [ - 3349 - ] - }, - { - "teal": 3258, - "source": 816, - "pc": [ - 3350, - 3351, - 3352 - ] - }, - { - "teal": 3266, - "source": 818, - "pc": [ - 3353, - 3354 - ] - }, - { - "teal": 3267, - "source": 818, - "pc": [ - 3355, - 3356, - 3357 - ] - }, - { - "teal": 3268, - "source": 818, - "pc": [ - 3358 - ] - }, - { - "teal": 3269, - "source": 818, - "pc": [ - 3359, - 3360 - ] - }, - { - "teal": 3270, - "source": 817, - "pc": [ - 3361 - ] - }, - { - "teal": 3271, - "source": 817, - "pc": [ - 3362 - ] - }, - { - "teal": 3272, - "source": 819, - "pc": [ - 3363, - 3364 - ] - }, - { - "teal": 3273, - "source": 817, - "pc": [ - 3365 - ] - }, - { - "teal": 3274, - "source": 817, - "pc": [ - 3366 - ] - }, - { - "teal": 3275, - "source": 817, - "pc": [ - 3367 - ] - }, - { - "teal": 3276, - "source": 817, - "pc": [ - 3368 - ] - }, - { - "teal": 3277, - "source": 817, - "pc": [ - 3369 - ] - }, - { - "teal": 3280, - "source": 817, - "errorMessage": "wideRatio failed", - "pc": [ - 3370 - ] - }, - { - "teal": 3281, - "source": 817, - "pc": [ - 3371, - 3372 - ] - }, - { - "teal": 3285, - "source": 823, - "pc": [ - 3373, - 3374 - ] - }, - { - "teal": 3286, - "source": 823, - "pc": [ - 3375, - 3376 - ] - }, - { - "teal": 3287, - "source": 823, - "pc": [ - 3377, - 3378 - ] - }, - { - "teal": 3288, - "source": 823, - "pc": [ - 3379, - 3380, - 3381 - ] - }, - { - "teal": 3289, - "source": 823, - "pc": [ - 3382 - ] - }, - { - "teal": 3290, - "source": 823, - "pc": [ - 3383, - 3384 - ] - }, - { - "teal": 3291, - "source": 823, - "pc": [ - 3385 - ] - }, - { - "teal": 3292, - "source": 823, - "pc": [ - 3386 - ] - }, - { - "teal": 3293, - "source": 823, - "pc": [ - 3387 - ] - }, - { - "teal": 3294, - "source": 823, - "pc": [ - 3388, - 3389 - ] - }, - { - "teal": 3298, - "source": 824, - "pc": [ - 3390, - 3391 - ] - }, - { - "teal": 3299, - "source": 824, - "pc": [ - 3392, - 3393 - ] - }, - { - "teal": 3300, - "source": 824, - "pc": [ - 3394, - 3395 - ] - }, - { - "teal": 3301, - "source": 824, - "pc": [ - 3396, - 3397, - 3398 - ] - }, - { - "teal": 3302, - "source": 824, - "pc": [ - 3399 - ] - }, - { - "teal": 3303, - "source": 824, - "pc": [ - 3400, - 3401 - ] - }, - { - "teal": 3304, - "source": 824, - "pc": [ - 3402 - ] - }, - { - "teal": 3305, - "source": 824, - "pc": [ - 3403 - ] - }, - { - "teal": 3306, - "source": 824, - "pc": [ - 3404 - ] - }, - { - "teal": 3307, - "source": 824, - "pc": [ - 3405, - 3406 - ] - }, - { - "teal": 3311, - "source": 825, - "pc": [ - 3407, - 3408 - ] - }, - { - "teal": 3312, - "source": 825, - "pc": [ - 3409, - 3410 - ] - }, - { - "teal": 3313, - "source": 825, - "pc": [ - 3411 - ] - }, - { - "teal": 3314, - "source": 825, - "pc": [ - 3412, - 3413 - ] - }, - { - "teal": 3319, - "source": 829, - "pc": [ - 3414, - 3415 - ] - }, - { - "teal": 3320, - "source": 829, - "pc": [ - 3416 - ] - }, - { - "teal": 3321, - "source": 829, - "pc": [ - 3417 - ] - }, - { - "teal": 3322, - "source": 829, - "pc": [ - 3418, - 3419 - ] - }, - { - "teal": 3323, - "source": 829, - "pc": [ - 3420 - ] - }, - { - "teal": 3324, - "source": 829, - "pc": [ - 3421, - 3422 - ] - }, - { - "teal": 3325, - "source": 829, - "pc": [ - 3423 - ] - }, - { - "teal": 3334, - "source": 793, - "pc": [ - 3424, - 3425 - ] - }, - { - "teal": 3335, - "source": 793, - "pc": [ - 3426 - ] - }, - { - "teal": 3336, - "source": 793, - "pc": [ - 3427 - ] - }, - { - "teal": 3337, - "source": 793, - "pc": [ - 3428, - 3429 - ] - }, - { - "teal": 3338, - "source": 793, - "pc": [ - 3430, - 3431, - 3432 - ] - }, - { - "teal": 3347, - "source": 839, - "pc": [ - 3433, - 3434 - ] - }, - { - "teal": 3348, - "source": 839, - "pc": [ - 3435 - ] - }, - { - "teal": 3349, - "source": 839, - "pc": [ - 3436, - 3437 - ] - }, - { - "teal": 3350, - "source": 839, - "pc": [ - 3438 - ] - }, - { - "teal": 3351, - "source": 839, - "pc": [ - 3439 - ] - }, - { - "teal": 3352, - "source": 839, - "pc": [ - 3440, - 3441 - ] - }, - { - "teal": 3353, - "source": 839, - "pc": [ - 3442 - ] - }, - { - "teal": 3354, - "source": 839, - "pc": [ - 3443, - 3444 - ] - }, - { - "teal": 3358, - "source": 840, - "pc": [ - 3445, - 3446 - ] - }, - { - "teal": 3359, - "source": 840, - "pc": [ - 3447 - ] - }, - { - "teal": 3360, - "source": 840, - "pc": [ - 3448, - 3449 - ] - }, - { - "teal": 3361, - "source": 840, - "pc": [ - 3450 - ] - }, - { - "teal": 3362, - "source": 840, - "pc": [ - 3451, - 3452 - ] - }, - { - "teal": 3363, - "source": 840, - "pc": [ - 3453 - ] - }, - { - "teal": 3364, - "source": 840, - "pc": [ - 3454 - ] - }, - { - "teal": 3369, - "source": 841, - "pc": [ - 3455, - 3456 - ] - }, - { - "teal": 3370, - "source": 841, - "pc": [ - 3457 - ] - }, - { - "teal": 3371, - "source": 842, - "pc": [ - 3458 - ] - }, - { - "teal": 3372, - "source": 842, - "pc": [ - 3459, - 3460 - ] - }, - { - "teal": 3373, - "source": 842, - "pc": [ - 3461 - ] - }, - { - "teal": 3374, - "source": 842, - "pc": [ - 3462, - 3463 - ] - }, - { - "teal": 3375, - "source": 842, - "pc": [ - 3464 - ] - }, - { - "teal": 3376, - "source": 842, - "pc": [ - 3465 - ] - }, - { - "teal": 3377, - "source": 842, - "pc": [ - 3466 - ] - }, - { - "teal": 3378, - "source": 842, - "pc": [ - 3467 - ] - }, - { - "teal": 3379, - "source": 842, - "pc": [ - 3468 - ] - }, - { - "teal": 3380, - "source": 842, - "pc": [ - 3469, - 3470 - ] - }, - { - "teal": 3381, - "source": 842, - "pc": [ - 3471 - ] - }, - { - "teal": 3384, - "source": 842, - "errorMessage": "this.stakeAccumulator.value + (increasedStake as uint128) * (roundsLeftInBin as uint128) overflowed 128 bits", - "pc": [ - 3472 - ] - }, - { - "teal": 3385, - "source": 842, - "pc": [ - 3473, - 3474 - ] - }, - { - "teal": 3386, - "source": 842, - "pc": [ - 3475 - ] - }, - { - "teal": 3387, - "source": 842, - "pc": [ - 3476 - ] - }, - { - "teal": 3388, - "source": 842, - "pc": [ - 3477 - ] - }, - { - "teal": 3389, - "source": 842, - "pc": [ - 3478 - ] - }, - { - "teal": 3390, - "source": 842, - "pc": [ - 3479, - 3480 - ] - }, - { - "teal": 3391, - "source": 842, - "pc": [ - 3481 - ] - }, - { - "teal": 3392, - "source": 842, - "pc": [ - 3482 - ] - }, - { - "teal": 3393, - "source": 842, - "pc": [ - 3483 - ] - }, - { - "teal": 3394, - "source": 841, - "pc": [ - 3484 - ] - }, - { - "teal": 3398, - "source": 843, - "pc": [ - 3485, - 3486 - ] - }, - { - "teal": 3399, - "source": 843, - "pc": [ - 3487 - ] - }, - { - "teal": 3400, - "source": 843, - "pc": [ - 3488 - ] - }, - { - "teal": 3401, - "source": 843, - "pc": [ - 3489, - 3490 - ] - }, - { - "teal": 3402, - "source": 843, - "pc": [ - 3491 - ] - }, - { - "teal": 3403, - "source": 843, - "pc": [ - 3492 - ] - }, - { - "teal": 3416, - "source": 849, - "pc": [ - 3493 - ] - }, - { - "teal": 3417, - "source": 849, - "pc": [ - 3494 - ] - }, - { - "teal": 3418, - "source": 849, - "pc": [ - 3495, - 3496 - ] - }, - { - "teal": 3419, - "source": 849, - "pc": [ - 3497, - 3498, - 3499, - 3500, - 3501, - 3502 - ] - }, - { - "teal": 3420, - "source": 849, - "pc": [ - 3503, - 3504 - ] - }, - { - "teal": 3424, - "source": 850, - "pc": [ - 3505 - ] - }, - { - "teal": 3425, - "source": 850, - "pc": [ - 3506 - ] - }, - { - "teal": 3426, - "source": 850, - "pc": [ - 3507, - 3508 - ] - }, - { - "teal": 3436, - "source": 852, - "pc": [ - 3509 - ] - }, - { - "teal": 3437, - "source": 852, - "pc": [ - 3510 - ] - }, - { - "teal": 3438, - "source": 852, - "pc": [ - 3511 - ] - }, - { - "teal": 3439, - "source": 852, - "pc": [ - 3512 - ] - }, - { - "teal": 3440, - "source": 852, - "pc": [ - 3513 - ] - }, - { - "teal": 3441, - "source": 852, - "pc": [ - 3514 - ] - }, - { - "teal": 3442, - "source": 852, - "pc": [ - 3515 - ] - }, - { - "teal": 3443, - "source": 852, - "pc": [ - 3516, - 3517, - 3518 - ] - }, - { - "teal": 3444, - "source": 852, - "pc": [ - 3519 - ] - }, - { - "teal": 3445, - "source": 852, - "pc": [ - 3520 - ] - }, - { - "teal": 3446, - "source": 852, - "pc": [ - 3521, - 3522 - ] - }, - { - "teal": 3447, - "source": 853, - "pc": [ - 3523, - 3524 - ] - }, - { - "teal": 3448, - "source": 853, - "pc": [ - 3525 - ] - }, - { - "teal": 3449, - "source": 853, - "pc": [ - 3526, - 3527 - ] - }, - { - "teal": 3450, - "source": 854, - "pc": [ - 3528, - 3529 - ] - }, - { - "teal": 3451, - "source": 854, - "pc": [ - 3530 - ] - }, - { - "teal": 3452, - "source": 854, - "pc": [ - 3531, - 3532 - ] - }, - { - "teal": 3453, - "source": 855, - "pc": [ - 3533, - 3534 - ] - }, - { - "teal": 3454, - "source": 855, - "pc": [ - 3535 - ] - }, - { - "teal": 3455, - "source": 855, - "pc": [ - 3536, - 3537 - ] - }, - { - "teal": 3456, - "source": 856, - "pc": [ - 3538, - 3539 - ] - }, - { - "teal": 3457, - "source": 856, - "pc": [ - 3540 - ] - }, - { - "teal": 3458, - "source": 856, - "pc": [ - 3541, - 3542 - ] - }, - { - "teal": 3461, - "source": 849, - "pc": [ - 3543 - ] - }, - { - "teal": 3462, - "source": 849, - "pc": [ - 3544, - 3545 - ] - }, - { - "teal": 3465, - "source": 849, - "pc": [ - 3546 - ] - }, - { - "teal": 3466, - "source": 516, - "pc": [ - 3547 - ] - }, - { - "teal": 3471, - "source": 881, - "pc": [ - 3548, - 3549, - 3550 - ] - }, - { - "teal": 3472, - "source": 881, - "pc": [ - 3551 - ] - }, - { - "teal": 3475, - "source": 880, - "pc": [ - 3552, - 3553, - 3554 - ] - }, - { - "teal": 3476, - "source": 880, - "pc": [ - 3555 - ] - }, - { - "teal": 3479, - "source": 879, - "pc": [ - 3556, - 3557, - 3558 - ] - }, - { - "teal": 3480, - "source": 879, - "pc": [ - 3559 - ] - }, - { - "teal": 3483, - "source": 878, - "pc": [ - 3560, - 3561, - 3562 - ] - }, - { - "teal": 3484, - "source": 878, - "pc": [ - 3563, - 3564, - 3565 - ] - }, - { - "teal": 3487, - "source": 877, - "pc": [ - 3566, - 3567, - 3568 - ] - }, - { - "teal": 3488, - "source": 877, - "pc": [ - 3569, - 3570, - 3571 - ] - }, - { - "teal": 3491, - "source": 876, - "pc": [ - 3572, - 3573, - 3574 - ] - }, - { - "teal": 3492, - "source": 876, - "pc": [ - 3575, - 3576, - 3577 - ] - }, - { - "teal": 3495, - "source": 875, - "pc": [ - 3578, - 3579 - ] - }, - { - "teal": 3496, - "source": 875, - "pc": [ - 3580 - ] - }, - { - "teal": 3497, - "source": 875, - "pc": [ - 3581 - ] - }, - { - "teal": 3498, - "source": 875, - "pc": [ - 3582 - ] - }, - { - "teal": 3499, - "source": 875, - "pc": [ - 3583, - 3584 - ] - }, - { - "teal": 3500, - "source": 875, - "pc": [ - 3585 - ] - }, - { - "teal": 3501, - "source": 875, - "pc": [ - 3586 - ] - }, - { - "teal": 3504, - "source": 875, - "errorMessage": "argument 6 (feePayment) for goOnline must be a pay transaction", - "pc": [ - 3587 - ] - }, - { - "teal": 3507, - "source": 874, - "pc": [ - 3588, - 3589, - 3590 - ] - }, - { - "teal": 3508, - "source": 874, - "pc": [ - 3591 - ] - }, - { - "teal": 3509, - "source": 874, - "pc": [ - 3592 - ] - }, - { - "teal": 3525, - "source": 874, - "pc": [ - 3593, - 3594, - 3595 - ] - }, - { - "teal": 3528, - "source": 874, - "pc": [ - 3596, - 3597 - ] - }, - { - "teal": 3532, - "source": 883, - "pc": [ - 3598, - 3599, - 3600 - ] - }, - { - "teal": 3535, - "source": 883, - "errorMessage": "can only be called by owner or manager of validator", - "pc": [ - 3601 - ] - }, - { - "teal": 3539, - "source": 884, - "pc": [ - 3602, - 3603, - 3604 - ] - }, - { - "teal": 3540, - "source": 884, - "pc": [ - 3605, - 3606 - ] - }, - { - "teal": 3545, - "source": 885, - "pc": [ - 3607, - 3608 - ] - }, - { - "teal": 3546, - "source": 885, - "pc": [ - 3609, - 3610 - ] - }, - { - "teal": 3547, - "source": 885, - "pc": [ - 3611, - 3612 - ] - }, - { - "teal": 3548, - "source": 885, - "pc": [ - 3613 - ] - }, - { - "teal": 3551, - "source": 885, - "errorMessage": "transaction verification failed: {\"txn\":\"feePayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", - "pc": [ - 3614 - ] - }, - { - "teal": 3554, - "source": 885, - "pc": [ - 3615, - 3616 - ] - }, - { - "teal": 3555, - "source": 885, - "pc": [ - 3617, - 3618 - ] - }, - { - "teal": 3556, - "source": 885, - "pc": [ - 3619, - 3620 - ] - }, - { - "teal": 3557, - "source": 885, - "pc": [ - 3621 - ] - }, - { - "teal": 3560, - "source": 885, - "errorMessage": "transaction verification failed: {\"txn\":\"feePayment\",\"field\":\"amount\",\"expected\":\"extraFee\"}", - "pc": [ - 3622 - ] - }, - { - "teal": 3572, - "source": 886, - "pc": [ - 3623 - ] - }, - { - "teal": 3573, - "source": 886, - "pc": [ - 3624, - 3625 - ] - }, - { - "teal": 3574, - "source": 886, - "pc": [ - 3626, - 3627 - ] - }, - { - "teal": 3578, - "source": 887, - "pc": [ - 3628, - 3629 - ] - }, - { - "teal": 3579, - "source": 887, - "pc": [ - 3630, - 3631 - ] - }, - { - "teal": 3583, - "source": 888, - "pc": [ - 3632, - 3633 - ] - }, - { - "teal": 3584, - "source": 888, - "pc": [ - 3634, - 3635 - ] - }, - { - "teal": 3588, - "source": 889, - "pc": [ - 3636, - 3637 - ] - }, - { - "teal": 3589, - "source": 889, - "pc": [ - 3638, - 3639 - ] - }, - { - "teal": 3593, - "source": 890, - "pc": [ - 3640, - 3641 - ] - }, - { - "teal": 3594, - "source": 890, - "pc": [ - 3642, - 3643 - ] - }, - { - "teal": 3598, - "source": 891, - "pc": [ - 3644, - 3645 - ] - }, - { - "teal": 3599, - "source": 891, - "pc": [ - 3646, - 3647 - ] - }, - { - "teal": 3603, - "source": 892, - "pc": [ - 3648, - 3649 - ] - }, - { - "teal": 3604, - "source": 892, - "pc": [ - 3650, - 3651 - ] - }, - { - "teal": 3608, - "source": 893, - "pc": [ - 3652, - 3653, - 3654 - ] - }, - { - "teal": 3609, - "source": 893, - "pc": [ - 3655, - 3656 - ] - }, - { - "teal": 3612, - "source": 886, - "pc": [ - 3657 - ] - }, - { - "teal": 3613, - "source": 874, - "pc": [ - 3658 - ] - }, - { - "teal": 3618, - "source": 902, - "pc": [ - 3659, - 3660, - 3661 - ] - }, - { - "teal": 3619, - "source": 902, - "pc": [ - 3662 - ] - }, - { - "teal": 3620, - "source": 902, - "pc": [ - 3663 - ] - }, - { - "teal": 3627, - "source": 902, - "pc": [ - 3664, - 3665, - 3666 - ] - }, - { - "teal": 3632, - "source": 905, - "pc": [ - 3667, - 3668 - ] - }, - { - "teal": 3633, - "source": 905, - "pc": [ - 3669 - ] - }, - { - "teal": 3634, - "source": 905, - "pc": [ - 3670 - ] - }, - { - "teal": 3635, - "source": 905, - "pc": [ - 3671, - 3672 - ] - }, - { - "teal": 3636, - "source": 905, - "pc": [ - 3673 - ] - }, - { - "teal": 3637, - "source": 905, - "pc": [ - 3674 - ] - }, - { - "teal": 3638, - "source": 905, - "pc": [ - 3675, - 3676, - 3677 - ] - }, - { - "teal": 3643, - "source": 906, - "pc": [ - 3678, - 3679, - 3680 - ] - }, - { - "teal": 3646, - "source": 906, - "errorMessage": "can only be called by owner or manager of validator", - "pc": [ - 3681 - ] - }, - { - "teal": 3651, - "source": 909, - "pc": [ - 3682 - ] - }, - { - "teal": 3652, - "source": 909, - "pc": [ - 3683, - 3684 - ] - }, - { - "teal": 3653, - "source": 909, - "pc": [ - 3685, - 3686 - ] - }, - { - "teal": 3656, - "source": 909, - "pc": [ - 3687 - ] - }, - { - "teal": 3657, - "source": 909, - "pc": [ - 3688, - 3689 - ] - }, - { - "teal": 3660, - "source": 909, - "pc": [ - 3690 - ] - }, - { - "teal": 3661, - "source": 902, - "pc": [ - 3691 - ] - }, - { - "teal": 3666, - "source": 915, - "pc": [ - 3692, - 3693, - 3694 - ] - }, - { - "teal": 3667, - "source": 915, - "pc": [ - 3695, - 3696, - 3697 - ] - }, - { - "teal": 3670, - "source": 915, - "pc": [ - 3698, - 3699, - 3700 - ] - }, - { - "teal": 3671, - "source": 915, - "pc": [ - 3701 - ] - }, - { - "teal": 3674, - "source": 915, - "pc": [ - 3702, - 3703, - 3704 - ] - }, - { - "teal": 3675, - "source": 915, - "pc": [ - 3705 - ] - }, - { - "teal": 3676, - "source": 915, - "pc": [ - 3706 - ] - }, - { - "teal": 3680, - "source": 915, - "pc": [ - 3707, - 3708, - 3709 - ] - }, - { - "teal": 3684, - "source": 916, - "pc": [ - 3710, - 3711, - 3712 - ] - }, - { - "teal": 3687, - "source": 916, - "errorMessage": "can only be called by owner or manager of validator", - "pc": [ - 3713 - ] - }, - { - "teal": 3695, - "source": 918, - "pc": [ - 3714 - ] - }, - { - "teal": 3696, - "source": 918, - "pc": [ - 3715 - ] - }, - { - "teal": 3697, - "source": 918, - "pc": [ - 3716, - 3717 - ] - }, - { - "teal": 3701, - "source": 919, - "pc": [ - 3718, - 3719 - ] - }, - { - "teal": 3702, - "source": 919, - "pc": [ - 3720, - 3721 - ] - }, - { - "teal": 3706, - "source": 920, - "pc": [ - 3722, - 3723, - 3724, - 3725, - 3726, - 3727, - 3728, - 3729, - 3730, - 3731, - 3732, - 3733, - 3734, - 3735, - 3736, - 3737, - 3738 - ] - }, - { - "teal": 3707, - "source": 920, - "pc": [ - 3739, - 3740 - ] - }, - { - "teal": 3708, - "source": 920, - "pc": [ - 3741, - 3742 - ] - }, - { - "teal": 3709, - "source": 920, - "pc": [ - 3743, - 3744 - ] - }, - { - "teal": 3710, - "source": 920, - "pc": [ - 3745, - 3746 - ] - }, - { - "teal": 3711, - "source": 920, - "pc": [ - 3747 - ] - }, - { - "teal": 3712, - "source": 920, - "pc": [ - 3748, - 3749 - ] - }, - { - "teal": 3713, - "source": 920, - "pc": [ - 3750, - 3751 - ] - }, - { - "teal": 3714, - "source": 920, - "pc": [ - 3752, - 3753 - ] - }, - { - "teal": 3718, - "source": 921, - "pc": [ - 3754, - 3755 - ] - }, - { - "teal": 3719, - "source": 921, - "pc": [ - 3756, - 3757 - ] - }, - { - "teal": 3722, - "source": 918, - "pc": [ - 3758 - ] - }, - { - "teal": 3723, - "source": 918, - "pc": [ - 3759, - 3760 - ] - }, - { - "teal": 3726, - "source": 918, - "pc": [ - 3761 - ] - }, - { - "teal": 3727, - "source": 915, - "pc": [ - 3762 - ] - }, - { - "teal": 3732, - "source": 931, - "pc": [ - 3763, - 3764 - ] - }, - { - "teal": 3735, - "source": 931, - "pc": [ - 3765, - 3766, - 3767 - ] - }, - { - "teal": 3736, - "source": 931, - "pc": [ - 3768 - ] - }, - { - "teal": 3737, - "source": 931, - "pc": [ - 3769 - ] - }, - { - "teal": 3738, - "source": 931, - "pc": [ - 3770, - 3771 - ] - }, - { - "teal": 3739, - "source": 931, - "pc": [ - 3772 - ] - }, - { - "teal": 3742, - "source": 931, - "errorMessage": "argument 0 (poolKey) for proxiedSetTokenPayoutRatio must be a (uint64,uint64,uint64)", - "pc": [ - 3773 - ] - }, - { - "teal": 3745, - "source": 931, - "pc": [ - 3774, - 3775, - 3776 - ] - }, - { - "teal": 3746, - "source": 931, - "pc": [ - 3777 - ] - }, - { - "teal": 3747, - "source": 931, - "pc": [ - 3778 - ] - }, - { - "teal": 3748, - "source": 931, - "pc": [ - 3779 - ] - }, - { - "teal": 3749, - "source": 931, - "pc": [ - 3780 - ] - }, - { - "teal": 3758, - "source": 931, - "pc": [ - 3781, - 3782, - 3783 - ] - }, - { - "teal": 3761, - "source": 931, - "pc": [ - 3784, - 3785 - ] - }, - { - "teal": 3765, - "source": 932, - "pc": [ - 3786 - ] - }, - { - "teal": 3766, - "source": 932, - "pc": [ - 3787 - ] - }, - { - "teal": 3767, - "source": 932, - "pc": [ - 3788, - 3789 - ] - }, - { - "teal": 3768, - "source": 932, - "pc": [ - 3790, - 3791, - 3792 - ] - }, - { - "teal": 3769, - "source": 932, - "pc": [ - 3793 - ] - }, - { - "teal": 3770, - "source": 932, - "pc": [ - 3794 - ] - }, - { - "teal": 3773, - "source": 932, - "errorMessage": "caller must be part of same validator set!", - "pc": [ - 3795 - ] - }, - { - "teal": 3777, - "source": 933, - "pc": [ - 3796 - ] - }, - { - "teal": 3778, - "source": 933, - "pc": [ - 3797 - ] - }, - { - "teal": 3779, - "source": 933, - "pc": [ - 3798 - ] - }, - { - "teal": 3780, - "source": 933, - "pc": [ - 3799 - ] - }, - { - "teal": 3783, - "source": 933, - "errorMessage": "callee must be pool 1", - "pc": [ - 3800 - ] - }, - { - "teal": 3787, - "source": 934, - "pc": [ - 3801, - 3802 - ] - }, - { - "teal": 3788, - "source": 934, - "pc": [ - 3803, - 3804, - 3805 - ] - }, - { - "teal": 3789, - "source": 934, - "pc": [ - 3806 - ] - }, - { - "teal": 3790, - "source": 934, - "pc": [ - 3807 - ] - }, - { - "teal": 3791, - "source": 934, - "pc": [ - 3808 - ] - }, - { - "teal": 3794, - "source": 934, - "errorMessage": "caller must NOT be pool 1", - "pc": [ - 3809 - ] - }, - { - "teal": 3801, - "source": 936, - "pc": [ - 3810 - ] - }, - { - "teal": 3802, - "source": 936, - "pc": [ - 3811 - ] - }, - { - "teal": 3803, - "source": 936, - "pc": [ - 3812, - 3813 - ] - }, - { - "teal": 3804, - "source": 936, - "pc": [ - 3814, - 3815 - ] - }, - { - "teal": 3805, - "source": 936, - "pc": [ - 3816, - 3817 - ] - }, - { - "teal": 3809, - "source": 937, - "pc": [ - 3818 - ] - }, - { - "teal": 3810, - "source": 937, - "pc": [ - 3819 - ] - }, - { - "teal": 3811, - "source": 937, - "pc": [ - 3820, - 3821 - ] - }, - { - "teal": 3815, - "source": 938, - "pc": [ - 3822, - 3823 - ] - }, - { - "teal": 3816, - "source": 938, - "pc": [ - 3824, - 3825, - 3826 - ] - }, - { - "teal": 3817, - "source": 938, - "pc": [ - 3827 - ] - }, - { - "teal": 3818, - "source": 938, - "pc": [ - 3828 - ] - }, - { - "teal": 3819, - "source": 938, - "pc": [ - 3829, - 3830 - ] - }, - { - "teal": 3820, - "source": 938, - "pc": [ - 3831, - 3832 - ] - }, - { - "teal": 3821, - "source": 938, - "pc": [ - 3833, - 3834, - 3835 - ] - }, - { - "teal": 3822, - "source": 938, - "pc": [ - 3836 - ] - }, - { - "teal": 3823, - "source": 938, - "pc": [ - 3837 - ] - }, - { - "teal": 3824, - "source": 938, - "pc": [ - 3838, - 3839 - ] - }, - { - "teal": 3827, - "source": 936, - "pc": [ - 3840 - ] - }, - { - "teal": 3828, - "source": 936, - "pc": [ - 3841, - 3842 - ] - }, - { - "teal": 3831, - "source": 936, - "pc": [ - 3843 - ] - }, - { - "teal": 3832, - "source": 936, - "pc": [ - 3844, - 3845 - ] - }, - { - "teal": 3833, - "source": 936, - "pc": [ - 3846 - ] - }, - { - "teal": 3834, - "source": 936, - "pc": [ - 3847 - ] - }, - { - "teal": 3835, - "source": 936, - "pc": [ - 3848, - 3849 - ] - }, - { - "teal": 3836, - "source": 936, - "pc": [ - 3850, - 3851, - 3852 - ] - }, - { - "teal": 3837, - "source": 936, - "pc": [ - 3853 - ] - }, - { - "teal": 3838, - "source": 936, - "pc": [ - 3854, - 3855 - ] - }, - { - "teal": 3842, - "source": 940, - "pc": [ - 3856, - 3857 - ] - }, - { - "teal": 3843, - "source": 940, - "pc": [ - 3858, - 3859 - ] - }, - { - "teal": 3844, - "source": 940, - "pc": [ - 3860, - 3861, - 3862 - ] - }, - { - "teal": 3845, - "source": 940, - "pc": [ - 3863 - ] - }, - { - "teal": 3846, - "source": 940, - "pc": [ - 3864 - ] - }, - { - "teal": 3847, - "source": 940, - "pc": [ - 3865 - ] - }, - { - "teal": 3851, - "source": 941, - "pc": [ - 3866, - 3867 - ] - }, - { - "teal": 3852, - "source": 941, - "pc": [ - 3868, - 3869 - ] - }, - { - "teal": 3853, - "source": 941, - "pc": [ - 3870, - 3871, - 3872 - ] - }, - { - "teal": 3854, - "source": 941, - "pc": [ - 3873 - ] - }, - { - "teal": 3855, - "source": 941, - "pc": [ - 3874, - 3875 - ] - }, - { - "teal": 3856, - "source": 941, - "pc": [ - 3876 - ] - }, - { - "teal": 3857, - "source": 941, - "pc": [ - 3877 - ] - }, - { - "teal": 3858, - "source": 941, - "pc": [ - 3878 - ] - }, - { - "teal": 3865, - "source": 943, - "pc": [ - 3879 - ] - }, - { - "teal": 3866, - "source": 943, - "pc": [ - 3880 - ] - }, - { - "teal": 3867, - "source": 943, - "pc": [ - 3881, - 3882 - ] - }, - { - "teal": 3868, - "source": 943, - "pc": [ - 3883, - 3884 - ] - }, - { - "teal": 3869, - "source": 943, - "pc": [ - 3885, - 3886 - ] - }, - { - "teal": 3873, - "source": 944, - "pc": [ - 3887 - ] - }, - { - "teal": 3874, - "source": 944, - "pc": [ - 3888 - ] - }, - { - "teal": 3875, - "source": 944, - "pc": [ - 3889, - 3890 - ] - }, - { - "teal": 3879, - "source": 945, - "pc": [ - 3891 - ] - }, - { - "teal": 3880, - "source": 945, - "pc": [ - 3892 - ] - }, - { - "teal": 3881, - "source": 945, - "pc": [ - 3893 - ] - }, - { - "teal": 3882, - "source": 945, - "pc": [ - 3894, - 3895 - ] - }, - { - "teal": 3885, - "source": 943, - "pc": [ - 3896 - ] - }, - { - "teal": 3886, - "source": 943, - "pc": [ - 3897, - 3898 - ] - }, - { - "teal": 3889, - "source": 943, - "pc": [ - 3899 - ] - }, - { - "teal": 3890, - "source": 943, - "pc": [ - 3900, - 3901 - ] - }, - { - "teal": 3891, - "source": 943, - "pc": [ - 3902 - ] - }, - { - "teal": 3892, - "source": 943, - "pc": [ - 3903 - ] - }, - { - "teal": 3893, - "source": 943, - "pc": [ - 3904, - 3905 - ] - }, - { - "teal": 3894, - "source": 943, - "pc": [ - 3906, - 3907, - 3908 - ] - }, - { - "teal": 3897, - "source": 931, - "pc": [ - 3909, - 3910 - ] - }, - { - "teal": 3898, - "source": 931, - "pc": [ - 3911 - ] - }, - { - "teal": 3902, - "source": 949, - "pc": [ - 3912, - 3913, - 3914 - ] - }, - { - "teal": 3905, - "source": 949, - "pc": [ - 3915, - 3916 - ] - }, - { - "teal": 3912, - "source": 950, - "pc": [ - 3917 - ] - }, - { - "teal": 3913, - "source": 950, - "pc": [ - 3918 - ] - }, - { - "teal": 3914, - "source": 950, - "pc": [ - 3919, - 3920 - ] - }, - { - "teal": 3915, - "source": 950, - "pc": [ - 3921, - 3922, - 3923, - 3924, - 3925, - 3926 - ] - }, - { - "teal": 3916, - "source": 950, - "pc": [ - 3927, - 3928 - ] - }, - { - "teal": 3920, - "source": 951, - "pc": [ - 3929 - ] - }, - { - "teal": 3921, - "source": 951, - "pc": [ - 3930 - ] - }, - { - "teal": 3922, - "source": 951, - "pc": [ - 3931, - 3932 - ] - }, - { - "teal": 3926, - "source": 952, - "pc": [ - 3933 - ] - }, - { - "teal": 3927, - "source": 952, - "pc": [ - 3934 - ] - }, - { - "teal": 3928, - "source": 952, - "pc": [ - 3935 - ] - }, - { - "teal": 3929, - "source": 952, - "pc": [ - 3936, - 3937 - ] - }, - { - "teal": 3932, - "source": 950, - "pc": [ - 3938 - ] - }, - { - "teal": 3933, - "source": 950, - "pc": [ - 3939, - 3940 - ] - }, - { - "teal": 3936, - "source": 950, - "pc": [ - 3941 - ] - }, - { - "teal": 3937, - "source": 950, - "pc": [ - 3942, - 3943 - ] - }, - { - "teal": 3938, - "source": 950, - "pc": [ - 3944 - ] - }, - { - "teal": 3939, - "source": 950, - "pc": [ - 3945 - ] - }, - { - "teal": 3940, - "source": 950, - "pc": [ - 3946, - 3947 - ] - }, - { - "teal": 3941, - "source": 950, - "pc": [ - 3948, - 3949, - 3950 - ] - }, - { - "teal": 3942, - "source": 950, - "pc": [ - 3951, - 3952 - ] - }, - { - "teal": 3946, - "source": 954, - "pc": [ - 3953, - 3954 - ] - }, - { - "teal": 3947, - "source": 954, - "pc": [ - 3955, - 3956 - ] - }, - { - "teal": 3948, - "source": 954, - "pc": [ - 3957, - 3958, - 3959 - ] - }, - { - "teal": 3949, - "source": 954, - "pc": [ - 3960 - ] - }, - { - "teal": 3950, - "source": 954, - "pc": [ - 3961 - ] - }, - { - "teal": 3951, - "source": 954, - "pc": [ - 3962, - 3963, - 3964 - ] - }, - { - "teal": 3952, - "source": 954, - "pc": [ - 3965, - 3966 - ] - }, - { - "teal": 3953, - "source": 954, - "pc": [ - 3967, - 3968 - ] - }, - { - "teal": 3954, - "source": 954, - "pc": [ - 3969, - 3970, - 3971 - ] - }, - { - "teal": 3955, - "source": 954, - "pc": [ - 3972 - ] - }, - { - "teal": 3956, - "source": 954, - "pc": [ - 3973 - ] - }, - { - "teal": 3960, - "source": 949, - "pc": [ - 3974, - 3975 - ] - }, - { - "teal": 3961, - "source": 949, - "pc": [ - 3976 - ] - }, - { - "teal": 3965, - "source": 957, - "pc": [ - 3977, - 3978, - 3979 - ] - }, - { - "teal": 3969, - "source": 958, - "pc": [ - 3980, - 3981, - 3982, - 3983, - 3984, - 3985, - 3986, - 3987, - 3988, - 3989, - 3990, - 3991, - 3992, - 3993, - 3994, - 3995, - 3996, - 3997, - 3998, - 3999, - 4000, - 4001, - 4002, - 4003, - 4004, - 4005, - 4006, - 4007, - 4008, - 4009, - 4010, - 4011, - 4012, - 4013 - ] - }, - { - "teal": 3970, - "source": 957, - "pc": [ - 4014 - ] - }, - { - "teal": 3977, - "source": 967, - "pc": [ - 4015, - 4016, - 4017 - ] - }, - { - "teal": 3980, - "source": 967, - "pc": [ - 4018, - 4019 - ] - }, - { - "teal": 3984, - "source": 968, - "pc": [ - 4020, - 4021, - 4022 - ] - }, - { - "teal": 3985, - "source": 968, - "pc": [ - 4023, - 4024 - ] - }, - { - "teal": 3989, - "source": 970, - "pc": [ - 4025, - 4026 - ] - }, - { - "teal": 3990, - "source": 970, - "pc": [ - 4027, - 4028 - ] - }, - { - "teal": 3991, - "source": 970, - "pc": [ - 4029 - ] - }, - { - "teal": 3992, - "source": 970, - "pc": [ - 4030 - ] - }, - { - "teal": 3993, - "source": 970, - "pc": [ - 4031, - 4032 - ] - }, - { - "teal": 3994, - "source": 970, - "pc": [ - 4033 - ] - }, - { - "teal": 3995, - "source": 970, - "pc": [ - 4034 - ] - }, - { - "teal": 3996, - "source": 970, - "pc": [ - 4035 - ] - }, - { - "teal": 3997, - "source": 970, - "pc": [ - 4036 - ] - }, - { - "teal": 3998, - "source": 970, - "pc": [ - 4037 - ] - }, - { - "teal": 4001, - "source": 970, - "errorMessage": "wideRatio failed", - "pc": [ - 4038 - ] - }, - { - "teal": 4004, - "source": 967, - "pc": [ - 4039, - 4040 - ] - }, - { - "teal": 4005, - "source": 967, - "pc": [ - 4041 - ] - }, - { - "teal": 4009, - "source": 973, - "pc": [ - 4042, - 4043, - 4044 - ] - }, - { - "teal": 4012, - "source": 973, - "pc": [ - 4045, - 4046 - ] - }, - { - "teal": 4016, - "source": 977, - "pc": [ - 4047 - ] - }, - { - "teal": 4017, - "source": 977, - "pc": [ - 4048, - 4049 - ] - }, - { - "teal": 4022, - "source": 978, - "pc": [ - 4050, - 4051 - ] - }, - { - "teal": 4023, - "source": 978, - "pc": [ - 4052 - ] - }, - { - "teal": 4024, - "source": 978, - "pc": [ - 4053, - 4054, - 4055 - ] - }, - { - "teal": 4029, - "source": 981, - "pc": [ - 4056, - 4057, - 4058, - 4059 - ] - }, - { - "teal": 4030, - "source": 981, - "pc": [ - 4060, - 4061, - 4062 - ] - }, - { - "teal": 4035, - "source": 983, - "pc": [ - 4063 - ] - }, - { - "teal": 4039, - "source": 973, - "pc": [ - 4064, - 4065 - ] - }, - { - "teal": 4040, - "source": 973, - "pc": [ - 4066 - ] - }, - { - "teal": 4044, - "source": 986, - "pc": [ - 4067, - 4068, - 4069 - ] - }, - { - "teal": 4048, - "source": 989, - "pc": [ - 4070, - 4071, - 4072, - 4073, - 4074, - 4075, - 4076, - 4077, - 4078 - ] - }, - { - "teal": 4049, - "source": 986, - "pc": [ - 4079 - ] - }, - { - "teal": 4055, - "source": 995, - "pc": [ - 4080, - 4081, - 4082 - ] - }, - { - "teal": 4058, - "source": 995, - "pc": [ - 4083, - 4084 - ] - }, - { - "teal": 4059, - "source": 995, - "pc": [ - 4085, - 4086 - ] - }, - { - "teal": 4063, - "source": 996, - "pc": [ - 4087, - 4088 - ] - }, - { - "teal": 4064, - "source": 996, - "pc": [ - 4089 - ] - }, - { - "teal": 4065, - "source": 996, - "pc": [ - 4090 - ] - }, - { - "teal": 4066, - "source": 996, - "pc": [ - 4091, - 4092 - ] - }, - { - "teal": 4071, - "source": 997, - "pc": [ - 4093, - 4094 - ] - }, - { - "teal": 4072, - "source": 997, - "pc": [ - 4095, - 4096 - ] - }, - { - "teal": 4073, - "source": 997, - "pc": [ - 4097 - ] - }, - { - "teal": 4074, - "source": 997, - "pc": [ - 4098, - 4099 - ] - }, - { - "teal": 4075, - "source": 997, - "pc": [ - 4100 - ] - }, - { - "teal": 4076, - "source": 997, - "pc": [ - 4101 - ] - }, - { - "teal": 4077, - "source": 997, - "pc": [ - 4102 - ] - }, - { - "teal": 4078, - "source": 997, - "pc": [ - 4103 - ] - }, - { - "teal": 4081, - "source": 997, - "errorMessage": "currentBinSize as uint64 overflowed 64 bits", - "pc": [ - 4104 - ] - }, - { - "teal": 4082, - "source": 997, - "pc": [ - 4105, - 4106, - 4107, - 4108, - 4109, - 4110, - 4111, - 4112, - 4113, - 4114 - ] - }, - { - "teal": 4083, - "source": 997, - "pc": [ - 4115 - ] - }, - { - "teal": 4084, - "source": 997, - "pc": [ - 4116 - ] - }, - { - "teal": 4085, - "source": 997, - "pc": [ - 4117 - ] - }, - { - "teal": 4086, - "source": 997, - "pc": [ - 4118 - ] - }, - { - "teal": 4087, - "source": 997, - "pc": [ - 4119, - 4120 - ] - }, - { - "teal": 4088, - "source": 997, - "pc": [ - 4121 - ] - }, - { - "teal": 4089, - "source": 997, - "pc": [ - 4122 - ] - }, - { - "teal": 4090, - "source": 997, - "pc": [ - 4123 - ] - }, - { - "teal": 4091, - "source": 997, - "pc": [ - 4124 - ] - }, - { - "teal": 4092, - "source": 997, - "pc": [ - 4125 - ] - }, - { - "teal": 4093, - "source": 997, - "pc": [ - 4126 - ] - }, - { - "teal": 4094, - "source": 997, - "pc": [ - 4127, - 4128, - 4129 - ] - }, - { - "teal": 4100, - "source": 998, - "pc": [ - 4130, - 4131 - ] - }, - { - "teal": 4101, - "source": 998, - "pc": [ - 4132, - 4133 - ] - }, - { - "teal": 4102, - "source": 998, - "pc": [ - 4134 - ] - }, - { - "teal": 4103, - "source": 998, - "pc": [ - 4135, - 4136, - 4137 - ] - }, - { - "teal": 4108, - "source": 999, - "pc": [ - 4138 - ] - }, - { - "teal": 4109, - "source": 999, - "pc": [ - 4139 - ] - }, - { - "teal": 4110, - "source": 999, - "pc": [ - 4140, - 4141 - ] - }, - { - "teal": 4111, - "source": 999, - "pc": [ - 4142 - ] - }, - { - "teal": 4112, - "source": 999, - "pc": [ - 4143, - 4144 - ] - }, - { - "teal": 4113, - "source": 999, - "pc": [ - 4145, - 4146 - ] - }, - { - "teal": 4114, - "source": 999, - "pc": [ - 4147 - ] - }, - { - "teal": 4115, - "source": 999, - "pc": [ - 4148, - 4149 - ] - }, - { - "teal": 4116, - "source": 999, - "pc": [ - 4150, - 4151 - ] - }, - { - "teal": 4117, - "source": 999, - "pc": [ - 4152, - 4153 - ] - }, - { - "teal": 4118, - "source": 999, - "pc": [ - 4154, - 4155 - ] - }, - { - "teal": 4119, - "source": 999, - "pc": [ - 4156 - ] - }, - { - "teal": 4124, - "source": 1001, - "pc": [ - 4157, - 4158 - ] - }, - { - "teal": 4125, - "source": 1001, - "pc": [ - 4159, - 4160, - 4161, - 4162, - 4163, - 4164, - 4165, - 4166, - 4167, - 4168, - 4169, - 4170, - 4171, - 4172, - 4173, - 4174, - 4175, - 4176 - ] - }, - { - "teal": 4126, - "source": 1001, - "pc": [ - 4177 - ] - }, - { - "teal": 4127, - "source": 1001, - "pc": [ - 4178 - ] - }, - { - "teal": 4128, - "source": 1001, - "pc": [ - 4179 - ] - }, - { - "teal": 4129, - "source": 1001, - "pc": [ - 4180, - 4181 - ] - }, - { - "teal": 4130, - "source": 1001, - "pc": [ - 4182 - ] - }, - { - "teal": 4133, - "source": 1001, - "errorMessage": "currentBinSize * (365 as uint128) overflowed 128 bits", - "pc": [ - 4183 - ] - }, - { - "teal": 4134, - "source": 1001, - "pc": [ - 4184, - 4185 - ] - }, - { - "teal": 4135, - "source": 1001, - "pc": [ - 4186 - ] - }, - { - "teal": 4136, - "source": 1001, - "pc": [ - 4187 - ] - }, - { - "teal": 4137, - "source": 1001, - "pc": [ - 4188 - ] - }, - { - "teal": 4138, - "source": 1001, - "pc": [ - 4189 - ] - }, - { - "teal": 4139, - "source": 1001, - "pc": [ - 4190, - 4191 - ] - }, - { - "teal": 4140, - "source": 1001, - "pc": [ - 4192 - ] - }, - { - "teal": 4141, - "source": 1001, - "pc": [ - 4193 - ] - }, - { - "teal": 4142, - "source": 1001, - "pc": [ - 4194 - ] - }, - { - "teal": 4143, - "source": 1001, - "pc": [ - 4195, - 4196 - ] - }, - { - "teal": 4147, - "source": 1002, - "pc": [ - 4197, - 4198 - ] - }, - { - "teal": 4148, - "source": 1002, - "pc": [ - 4199 - ] - }, - { - "teal": 4149, - "source": 1002, - "pc": [ - 4200, - 4201 - ] - }, - { - "teal": 4150, - "source": 1002, - "pc": [ - 4202 - ] - }, - { - "teal": 4151, - "source": 1002, - "pc": [ - 4203 - ] - }, - { - "teal": 4152, - "source": 1002, - "pc": [ - 4204 - ] - }, - { - "teal": 4153, - "source": 1002, - "pc": [ - 4205, - 4206 - ] - }, - { - "teal": 4154, - "source": 1002, - "pc": [ - 4207 - ] - }, - { - "teal": 4157, - "source": 1002, - "errorMessage": "this.stakeAccumulator.value / currentBinSize overflowed 128 bits", - "pc": [ - 4208 - ] - }, - { - "teal": 4158, - "source": 1002, - "pc": [ - 4209, - 4210 - ] - }, - { - "teal": 4159, - "source": 1002, - "pc": [ - 4211 - ] - }, - { - "teal": 4160, - "source": 1002, - "pc": [ - 4212 - ] - }, - { - "teal": 4161, - "source": 1002, - "pc": [ - 4213 - ] - }, - { - "teal": 4162, - "source": 1002, - "pc": [ - 4214 - ] - }, - { - "teal": 4163, - "source": 1002, - "pc": [ - 4215, - 4216 - ] - }, - { - "teal": 4164, - "source": 1002, - "pc": [ - 4217 - ] - }, - { - "teal": 4165, - "source": 1002, - "pc": [ - 4218 - ] - }, - { - "teal": 4166, - "source": 1002, - "pc": [ - 4219 - ] - }, - { - "teal": 4167, - "source": 1002, - "pc": [ - 4220, - 4221 - ] - }, - { - "teal": 4172, - "source": 1003, - "pc": [ - 4222, - 4223 - ] - }, - { - "teal": 4173, - "source": 1003, - "pc": [ - 4224, - 4225 - ] - }, - { - "teal": 4174, - "source": 1003, - "pc": [ - 4226 - ] - }, - { - "teal": 4175, - "source": 1003, - "pc": [ - 4227, - 4228, - 4229 - ] - }, - { - "teal": 4182, - "source": 1008, - "pc": [ - 4230, - 4231 - ] - }, - { - "teal": 4183, - "source": 1008, - "pc": [ - 4232 - ] - }, - { - "teal": 4184, - "source": 1008, - "pc": [ - 4233 - ] - }, - { - "teal": 4185, - "source": 1008, - "pc": [ - 4234, - 4235, - 4236, - 4237, - 4238, - 4239, - 4240, - 4241, - 4242, - 4243, - 4244, - 4245, - 4246, - 4247, - 4248, - 4249, - 4250, - 4251 - ] - }, - { - "teal": 4186, - "source": 1008, - "pc": [ - 4252 - ] - }, - { - "teal": 4187, - "source": 1008, - "pc": [ - 4253, - 4254 - ] - }, - { - "teal": 4188, - "source": 1008, - "pc": [ - 4255 - ] - }, - { - "teal": 4189, - "source": 1009, - "pc": [ - 4256, - 4257 - ] - }, - { - "teal": 4190, - "source": 1009, - "pc": [ - 4258, - 4259 - ] - }, - { - "teal": 4191, - "source": 1009, - "pc": [ - 4260 - ] - }, - { - "teal": 4192, - "source": 1008, - "pc": [ - 4261 - ] - }, - { - "teal": 4193, - "source": 1008, - "pc": [ - 4262 - ] - }, - { - "teal": 4194, - "source": 1008, - "pc": [ - 4263 - ] - }, - { - "teal": 4195, - "source": 1008, - "pc": [ - 4264, - 4265 - ] - }, - { - "teal": 4196, - "source": 1008, - "pc": [ - 4266 - ] - }, - { - "teal": 4199, - "source": 1008, - "errorMessage": "(((this.rewardAccumulator.value as uint128) * (10000 as uint128)) / avgStake) *\\n (approxRoundsPerYear / currentBinSize) overflowed 128 bits", - "pc": [ - 4267 - ] - }, - { - "teal": 4200, - "source": 1008, - "pc": [ - 4268, - 4269 - ] - }, - { - "teal": 4201, - "source": 1008, - "pc": [ - 4270 - ] - }, - { - "teal": 4202, - "source": 1008, - "pc": [ - 4271 - ] - }, - { - "teal": 4203, - "source": 1008, - "pc": [ - 4272 - ] - }, - { - "teal": 4204, - "source": 1008, - "pc": [ - 4273 - ] - }, - { - "teal": 4205, - "source": 1008, - "pc": [ - 4274, - 4275 - ] - }, - { - "teal": 4206, - "source": 1008, - "pc": [ - 4276 - ] - }, - { - "teal": 4207, - "source": 1008, - "pc": [ - 4277 - ] - }, - { - "teal": 4208, - "source": 1008, - "pc": [ - 4278 - ] - }, - { - "teal": 4209, - "source": 1007, - "pc": [ - 4279, - 4280 - ] - }, - { - "teal": 4213, - "source": 1011, - "pc": [ - 4281, - 4282, - 4283, - 4284, - 4285, - 4286, - 4287, - 4288, - 4289, - 4290, - 4291, - 4292, - 4293, - 4294, - 4295, - 4296, - 4297, - 4298 - ] - }, - { - "teal": 4214, - "source": 1011, - "pc": [ - 4299, - 4300 - ] - }, - { - "teal": 4219, - "source": 1013, - "pc": [ - 4301, - 4302 - ] - }, - { - "teal": 4220, - "source": 1013, - "pc": [ - 4303, - 4304, - 4305, - 4306, - 4307, - 4308, - 4309, - 4310, - 4311, - 4312, - 4313, - 4314, - 4315, - 4316, - 4317, - 4318, - 4319, - 4320 - ] - }, - { - "teal": 4221, - "source": 1013, - "pc": [ - 4321 - ] - }, - { - "teal": 4222, - "source": 1013, - "pc": [ - 4322, - 4323, - 4324 - ] - }, - { - "teal": 4227, - "source": 1014, - "pc": [ - 4325, - 4326, - 4327, - 4328, - 4329, - 4330, - 4331, - 4332, - 4333, - 4334, - 4335, - 4336, - 4337, - 4338, - 4339, - 4340, - 4341, - 4342 - ] - }, - { - "teal": 4228, - "source": 1014, - "pc": [ - 4343, - 4344 - ] - }, - { - "teal": 4235, - "source": 1016, - "pc": [ - 4345, - 4346 - ] - }, - { - "teal": 4236, - "source": 1016, - "pc": [ - 4347 - ] - }, - { - "teal": 4237, - "source": 1017, - "pc": [ - 4348 - ] - }, - { - "teal": 4238, - "source": 1017, - "pc": [ - 4349, - 4350 - ] - }, - { - "teal": 4239, - "source": 1017, - "pc": [ - 4351, - 4352 - ] - }, - { - "teal": 4240, - "source": 1017, - "pc": [ - 4353 - ] - }, - { - "teal": 4241, - "source": 1017, - "pc": [ - 4354 - ] - }, - { - "teal": 4242, - "source": 1017, - "pc": [ - 4355, - 4356 - ] - }, - { - "teal": 4243, - "source": 1017, - "pc": [ - 4357 - ] - }, - { - "teal": 4244, - "source": 1018, - "pc": [ - 4358, - 4359 - ] - }, - { - "teal": 4245, - "source": 1018, - "pc": [ - 4360, - 4361 - ] - }, - { - "teal": 4246, - "source": 1018, - "pc": [ - 4362 - ] - }, - { - "teal": 4247, - "source": 1018, - "pc": [ - 4363, - 4364 - ] - }, - { - "teal": 4248, - "source": 1018, - "pc": [ - 4365 - ] - }, - { - "teal": 4249, - "source": 1017, - "pc": [ - 4366 - ] - }, - { - "teal": 4250, - "source": 1017, - "pc": [ - 4367 - ] - }, - { - "teal": 4251, - "source": 1017, - "pc": [ - 4368 - ] - }, - { - "teal": 4252, - "source": 1017, - "pc": [ - 4369, - 4370 - ] - }, - { - "teal": 4253, - "source": 1017, - "pc": [ - 4371 - ] - }, - { - "teal": 4256, - "source": 1017, - "errorMessage": "(this.weightedMovingAverage.value * ((100 as uint128) - alpha)) / (100 as uint128) +\\n (apr * alpha) / (100 as uint128) overflowed 128 bits", - "pc": [ - 4372 - ] - }, - { - "teal": 4257, - "source": 1017, - "pc": [ - 4373, - 4374 - ] - }, - { - "teal": 4258, - "source": 1017, - "pc": [ - 4375 - ] - }, - { - "teal": 4259, - "source": 1017, - "pc": [ - 4376 - ] - }, - { - "teal": 4260, - "source": 1017, - "pc": [ - 4377 - ] - }, - { - "teal": 4261, - "source": 1017, - "pc": [ - 4378 - ] - }, - { - "teal": 4262, - "source": 1017, - "pc": [ - 4379, - 4380 - ] - }, - { - "teal": 4263, - "source": 1017, - "pc": [ - 4381 - ] - }, - { - "teal": 4264, - "source": 1017, - "pc": [ - 4382 - ] - }, - { - "teal": 4265, - "source": 1017, - "pc": [ - 4383 - ] - }, - { - "teal": 4266, - "source": 1016, - "pc": [ - 4384 - ] - }, - { - "teal": 4271, - "source": 1022, - "pc": [ - 4385, - 4386, - 4387 - ] - }, - { - "teal": 4275, - "source": 1023, - "pc": [ - 4388, - 4389 - ] - }, - { - "teal": 4276, - "source": 1023, - "pc": [ - 4390, - 4391 - ] - }, - { - "teal": 4277, - "source": 1023, - "pc": [ - 4392 - ] - }, - { - "teal": 4278, - "source": 1023, - "pc": [ - 4393 - ] - }, - { - "teal": 4279, - "source": 1023, - "pc": [ - 4394, - 4395 - ] - }, - { - "teal": 4280, - "source": 1023, - "pc": [ - 4396 - ] - }, - { - "teal": 4281, - "source": 1023, - "pc": [ - 4397 - ] - }, - { - "teal": 4282, - "source": 1023, - "pc": [ - 4398 - ] - }, - { - "teal": 4283, - "source": 1023, - "pc": [ - 4399 - ] - }, - { - "teal": 4284, - "source": 1023, - "pc": [ - 4400 - ] - }, - { - "teal": 4285, - "source": 1023, - "pc": [ - 4401, - 4402 - ] - }, - { - "teal": 4286, - "source": 1023, - "pc": [ - 4403 - ] - }, - { - "teal": 4289, - "source": 1023, - "errorMessage": "(this.totalAlgoStaked.value as uint128) * (this.roundsPerDay.value as uint128) overflowed 128 bits", - "pc": [ - 4404 - ] - }, - { - "teal": 4290, - "source": 1023, - "pc": [ - 4405, - 4406 - ] - }, - { - "teal": 4291, - "source": 1023, - "pc": [ - 4407 - ] - }, - { - "teal": 4292, - "source": 1023, - "pc": [ - 4408 - ] - }, - { - "teal": 4293, - "source": 1023, - "pc": [ - 4409 - ] - }, - { - "teal": 4294, - "source": 1023, - "pc": [ - 4410 - ] - }, - { - "teal": 4295, - "source": 1023, - "pc": [ - 4411, - 4412 - ] - }, - { - "teal": 4296, - "source": 1023, - "pc": [ - 4413 - ] - }, - { - "teal": 4297, - "source": 1023, - "pc": [ - 4414 - ] - }, - { - "teal": 4298, - "source": 1023, - "pc": [ - 4415 - ] - }, - { - "teal": 4299, - "source": 1023, - "pc": [ - 4416 - ] - }, - { - "teal": 4303, - "source": 1024, - "pc": [ - 4417, - 4418 - ] - }, - { - "teal": 4304, - "source": 1024, - "pc": [ - 4419 - ] - }, - { - "teal": 4305, - "source": 1024, - "pc": [ - 4420 - ] - }, - { - "teal": 4309, - "source": 1025, - "pc": [ - 4421, - 4422 - ] - }, - { - "teal": 4310, - "source": 1025, - "pc": [ - 4423, - 4424 - ] - }, - { - "teal": 4311, - "source": 1025, - "pc": [ - 4425, - 4426 - ] - }, - { - "teal": 4312, - "source": 1025, - "pc": [ - 4427, - 4428 - ] - }, - { - "teal": 4313, - "source": 1025, - "pc": [ - 4429 - ] - }, - { - "teal": 4314, - "source": 1025, - "pc": [ - 4430 - ] - }, - { - "teal": 4315, - "source": 1025, - "pc": [ - 4431 - ] - }, - { - "teal": 4316, - "source": 1025, - "pc": [ - 4432 - ] - }, - { - "teal": 4319, - "source": 995, - "pc": [ - 4433 - ] - }, - { - "teal": 4323, - "source": 1029, - "pc": [ - 4434, - 4435, - 4436 - ] - }, - { - "teal": 4327, - "source": 1030, - "pc": [ - 4437, - 4438 - ] - }, - { - "teal": 4328, - "source": 1030, - "pc": [ - 4439, - 4440, - 4441, - 4442 - ] - }, - { - "teal": 4329, - "source": 1030, - "pc": [ - 4443 - ] - }, - { - "teal": 4330, - "source": 1029, - "pc": [ - 4444 - ] - }, - { - "teal": 4333, - "source": 36, - "pc": [ - 4445, - 4446, - 4447, - 4448, - 4449, - 4450 - ] - }, - { - "teal": 4334, - "source": 36, - "pc": [ - 4451, - 4452, - 4453 - ] - }, - { - "teal": 4335, - "source": 36, - "pc": [ - 4454, - 4455, - 4456, - 4457 - ] - }, - { - "teal": 4338, - "source": 36, - "errorMessage": "this contract does not implement the given ABI method for create NoOp", - "pc": [ - 4458 - ] - }, - { - "teal": 4341, - "source": 36, - "pc": [ - 4459, - 4460, - 4461, - 4462, - 4463, - 4464 - ] - }, - { - "teal": 4342, - "source": 36, - "pc": [ - 4465, - 4466, - 4467, - 4468, - 4469, - 4470 - ] - }, - { - "teal": 4343, - "source": 36, - "pc": [ - 4471, - 4472, - 4473, - 4474, - 4475, - 4476 - ] - }, - { - "teal": 4344, - "source": 36, - "pc": [ - 4477, - 4478, - 4479, - 4480, - 4481, - 4482 - ] - }, - { - "teal": 4345, - "source": 36, - "pc": [ - 4483, - 4484, - 4485, - 4486, - 4487, - 4488 - ] - }, - { - "teal": 4346, - "source": 36, - "pc": [ - 4489, - 4490, - 4491, - 4492, - 4493, - 4494 - ] - }, - { - "teal": 4347, - "source": 36, - "pc": [ - 4495, - 4496, - 4497, - 4498, - 4499, - 4500 - ] - }, - { - "teal": 4348, - "source": 36, - "pc": [ - 4501, - 4502, - 4503, - 4504, - 4505, - 4506 - ] - }, - { - "teal": 4349, - "source": 36, - "pc": [ - 4507, - 4508, - 4509, - 4510, - 4511, - 4512 - ] - }, - { - "teal": 4350, - "source": 36, - "pc": [ - 4513, - 4514, - 4515, - 4516, - 4517, - 4518 - ] - }, - { - "teal": 4351, - "source": 36, - "pc": [ - 4519, - 4520, - 4521, - 4522, - 4523, - 4524 - ] - }, - { - "teal": 4352, - "source": 36, - "pc": [ - 4525, - 4526, - 4527, - 4528, - 4529, - 4530 - ] - }, - { - "teal": 4353, - "source": 36, - "pc": [ - 4531, - 4532 - ] - }, - { - "teal": 4354, - "source": 36, - "pc": [ - 4533, - 4534, - 4535 - ] - }, - { - "teal": 4355, - "source": 36, - "pc": [ - 4536, - 4537, - 4538, - 4539, - 4540, - 4541, - 4542, - 4543, - 4544, - 4545, - 4546, - 4547, - 4548, - 4549, - 4550, - 4551, - 4552, - 4553, - 4554, - 4555, - 4556, - 4557, - 4558, - 4559, - 4560, - 4561, - 4562, - 4563 - ] - }, - { - "teal": 4358, - "source": 36, - "errorMessage": "this contract does not implement the given ABI method for call NoOp", - "pc": [ - 4564 - ] - }, - { - "teal": 4361, - "source": 36, - "pc": [ - 4565, - 4566, - 4567, - 4568, - 4569, - 4570 - ] - }, - { - "teal": 4362, - "source": 36, - "pc": [ - 4571, - 4572, - 4573 - ] - }, - { - "teal": 4363, - "source": 36, - "pc": [ - 4574, - 4575, - 4576, - 4577 - ] - }, - { - "teal": 4366, - "source": 36, - "errorMessage": "this contract does not implement the given ABI method for call UpdateApplication", - "pc": [ - 4578 - ] - } -] \ No newline at end of file diff --git a/examples/reti/ValidatorRegistry.approval.teal b/examples/reti/ValidatorRegistry.approval.teal deleted file mode 100644 index 48388a366..000000000 --- a/examples/reti/ValidatorRegistry.approval.teal +++ /dev/null @@ -1,6162 +0,0 @@ -#pragma version 10 - -// This TEAL was generated by TEALScript v0.96.0 -// https://github.com/algorandfoundation/TEALScript - -// This contract is compliant with and/or implements the following ARCs: [ ARC4 ] - -// The following ten lines of TEAL handle initial program flow -// This pattern is used to make it easy for anyone to parse the start of the program and determine if a specific action is allowed -// Here, action refers to the OnComplete in combination with whether the app is being created or called -// Every possible action for this contract is represented in the switch statement -// If the action is not implemented in the contract, its respective branch will be "*NOT_IMPLEMENTED" which just contains "err" -txn ApplicationID -! -int 6 -* -txn OnCompletion -+ -switch *call_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *call_UpdateApplication *NOT_IMPLEMENTED *create_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED - -*NOT_IMPLEMENTED: - // The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID? - err - -// updateApplication()void -*abi_route_updateApplication: - // execute updateApplication()void - callsub updateApplication - int 1 - return - -// updateApplication(): void -updateApplication: - proto 0 0 - - // contracts/validatorRegistry.algo.ts:199 - // assert(this.txn.sender === Address.fromAddress('LZ4V2IRVLCXFJK4REJV4TAGEKEYTA2GMR6TC2344OB3L3AF3MWXZ6ZAFIQ')) - txn Sender - addr LZ4V2IRVLCXFJK4REJV4TAGEKEYTA2GMR6TC2344OB3L3AF3MWXZ6ZAFIQ - == - assert - - // contracts/validatorRegistry.algo.ts:201 - // this.stakingPoolApprovalProgram.delete() - byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" - box_del - - // contracts/validatorRegistry.algo.ts:202 - // this.stakingPoolInitialized.value = false - byte 0x696e6974 // "init" - int 0 - byte 0x00 - int 0 - uncover 2 - setbit - app_global_put - retsub - -// createApplication()void -*abi_route_createApplication: - // execute createApplication()void - callsub createApplication - int 1 - return - -// createApplication(): void -createApplication: - proto 0 0 - - // contracts/validatorRegistry.algo.ts:206 - // this.stakingPoolInitialized.value = false - byte 0x696e6974 // "init" - int 0 - byte 0x00 - int 0 - uncover 2 - setbit - app_global_put - - // contracts/validatorRegistry.algo.ts:207 - // this.numValidators.value = 0 - byte 0x6e756d56 // "numV" - int 0 - app_global_put - - // contracts/validatorRegistry.algo.ts:208 - // this.numStakers.value = 0 - byte 0x6e756d5374616b657273 // "numStakers" - int 0 - app_global_put - - // contracts/validatorRegistry.algo.ts:209 - // this.totalAlgoStaked.value = 0 - byte 0x7374616b6564 // "staked" - int 0 - app_global_put - retsub - -// initStakingContract(uint64)void -*abi_route_initStakingContract: - // approvalProgramSize: uint64 - txna ApplicationArgs 1 - btoi - - // execute initStakingContract(uint64)void - callsub initStakingContract - int 1 - return - -// initStakingContract(approvalProgramSize: uint64): void -initStakingContract: - proto 1 0 - - // contracts/validatorRegistry.algo.ts:214 - // this.stakingPoolApprovalProgram.create(approvalProgramSize) - byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" - frame_dig -1 // approvalProgramSize: uint64 - box_create - pop - retsub - -// loadStakingContractData(uint64,byte[])void -*abi_route_loadStakingContractData: - // data: byte[] - txna ApplicationArgs 2 - extract 2 0 - - // offset: uint64 - txna ApplicationArgs 1 - btoi - - // execute loadStakingContractData(uint64,byte[])void - callsub loadStakingContractData - int 1 - return - -// loadStakingContractData(offset: uint64, data: bytes): void -loadStakingContractData: - proto 2 0 - - // contracts/validatorRegistry.algo.ts:218 - // assert(!this.stakingPoolInitialized.value) - byte 0x696e6974 // "init" - app_global_get - int 0 - getbit - ! - assert - - // contracts/validatorRegistry.algo.ts:219 - // this.stakingPoolApprovalProgram.replace(offset, data) - byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" - frame_dig -1 // offset: uint64 - frame_dig -2 // data: bytes - box_replace - retsub - -// finalizeStakingContract()void -*abi_route_finalizeStakingContract: - // execute finalizeStakingContract()void - callsub finalizeStakingContract - int 1 - return - -// finalizeStakingContract(): void -finalizeStakingContract: - proto 0 0 - - // contracts/validatorRegistry.algo.ts:223 - // this.stakingPoolInitialized.value = true - byte 0x696e6974 // "init" - int 1 - byte 0x00 - int 0 - uncover 2 - setbit - app_global_put - retsub - -// gas()void -*abi_route_gas: - // execute gas()void - callsub gas - int 1 - return - -// gas(): void -// -// gas is a dummy no-op call that can be used to pool-up resource references and opcode cost -gas: - proto 0 0 - retsub - -// getMbrAmounts()(uint64,uint64,uint64,uint64) -*abi_route_getMbrAmounts: - // The ABI return prefix - byte 0x151f7c75 - - // execute getMbrAmounts()(uint64,uint64,uint64,uint64) - callsub getMbrAmounts - concat - log - int 1 - return - -// getMbrAmounts(): MbrAmounts -// -// Returns the MBR amounts needed for various actions: -// [ -// addValidatorMbr: uint64 - mbr needed to add a new validator - paid to validator contract -// addPoolMbr: uint64 - mbr needed to add a new pool - paid to validator -// poolInitMbr: uint64 - mbr needed to initStorage() of pool - paid to pool itself -// addStakerMbr: uint64 - mbr staker needs to add to first staking payment (stays w/ validator) -// ] -getMbrAmounts: - proto 0 1 - - // contracts/validatorRegistry.algo.ts:243 - // return { - // addValidatorMbr: this.costForBoxStorage(1 /* v prefix */ + len() + len()), - // addPoolMbr: this.minBalanceForAccount( - // 1, - // // we could calculate this directly by referencing the size of stakingPoolApprovalProgram but it would - // // mean our callers would have to reference the box AND buy up i/o - so just go max on extra pages - // 3, - // 0, - // 0, - // 0, - // StakingPool.schema.global.numUint, - // StakingPool.schema.global.numByteSlice, - // ), - // poolInitMbr: - // ALGORAND_ACCOUNT_MIN_BALANCE + - // this.costForBoxStorage(7 /* 'stakers' name */ + len() * MAX_STAKERS_PER_POOL), - // addStakerMbr: - // // how much to charge for first time a staker adds stake - since we add a tracking box per staker - // this.costForBoxStorage( - // 3 /* 'sps' prefix */ + len

() + len() * MAX_POOLS_PER_STAKER, - // ), // size of key + all values - // } - int 1101 - callsub costForBoxStorage - itob - int 3 - int 11 - int 0 - dupn 2 - int 3 - int 1 - callsub minBalanceForAccount - itob - concat - int 100000 - int 12807 - callsub costForBoxStorage - + - itob - concat - int 179 - callsub costForBoxStorage - itob - concat - retsub - -// getProtocolConstraints()(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64) -*abi_route_getProtocolConstraints: - // The ABI return prefix - byte 0x151f7c75 - - // execute getProtocolConstraints()(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64) - callsub getProtocolConstraints - concat - log - int 1 - return - -// getProtocolConstraints(): Constraints -// -// Returns the protocol constraints so that UIs can limit what users specify for validator configuration parameters. -getProtocolConstraints: - proto 0 1 - - // contracts/validatorRegistry.algo.ts:271 - // return { - // epochPayoutRoundsMin: MIN_EPOCH_LENGTH, - // epochPayoutRoundsMax: MAX_EPOCH_LENGTH, - // minPctToValidatorWFourDecimals: MIN_PCT_TO_VALIDATOR, - // maxPctToValidatorWFourDecimals: MAX_PCT_TO_VALIDATOR, - // minEntryStake: MIN_ALGO_STAKE_PER_POOL, - // maxAlgoPerPool: this.maxAlgoAllowedPerPool(), - // maxAlgoPerValidator: this.maxAllowedStake(), - // amtConsideredSaturated: this.algoSaturationLevel(), - // maxNodes: MAX_NODES, - // maxPoolsPerNode: MAX_POOLS_PER_NODE, - // maxStakersPerPool: MAX_STAKERS_PER_POOL, - // } - byte 0x000000000000000100000000000f4240000000000000000000000000000f424000000000000f4240 - callsub maxAlgoAllowedPerPool - itob - concat - callsub maxAllowedStake - itob - concat - callsub algoSaturationLevel - itob - concat - byte 0x0000000000000008 - concat - byte 0x0000000000000003 - concat - byte 0x00000000000000c8 - concat - retsub - -// getNumValidators()uint64 -*abi_route_getNumValidators: - // The ABI return prefix - byte 0x151f7c75 - - // execute getNumValidators()uint64 - callsub getNumValidators - itob - concat - log - int 1 - return - -// getNumValidators(): uint64 -// -// Returns the current number of validators -getNumValidators: - proto 0 1 - - // contracts/validatorRegistry.algo.ts:291 - // return this.numValidators.value - byte 0x6e756d56 // "numV" - app_global_get - retsub - -// getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) -*abi_route_getValidatorConfig: - // The ABI return prefix - byte 0x151f7c75 - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - callsub getValidatorConfig - concat - log - int 1 - return - -// getValidatorConfig(validatorId: ValidatorIdType): ValidatorConfig -getValidatorConfig: - proto 1 1 - - // contracts/validatorRegistry.algo.ts:296 - // return this.validatorList(validatorId).value.config - int 0 - int 242 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - retsub - -// getValidatorState(uint64)(uint16,uint64,uint64,uint64) -*abi_route_getValidatorState: - // The ABI return prefix - byte 0x151f7c75 - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute getValidatorState(uint64)(uint16,uint64,uint64,uint64) - callsub getValidatorState - concat - log - int 1 - return - -// getValidatorState(validatorId: ValidatorIdType): ValidatorCurState -getValidatorState: - proto 1 1 - - // contracts/validatorRegistry.algo.ts:301 - // return this.validatorList(validatorId).value.state - int 242 // headOffset - int 26 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - retsub - -// getValidatorOwnerAndManager(uint64)(address,address) -*abi_route_getValidatorOwnerAndManager: - // The ABI return prefix - byte 0x151f7c75 - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute getValidatorOwnerAndManager(uint64)(address,address) - callsub getValidatorOwnerAndManager - concat - log - int 1 - return - -// getValidatorOwnerAndManager(validatorId: ValidatorIdType): [Address, Address] -getValidatorOwnerAndManager: - proto 1 1 - - // contracts/validatorRegistry.algo.ts:306 - // return [ - // this.validatorList(validatorId).value.config.owner, - // this.validatorList(validatorId).value.config.manager, - // ] - int 8 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - int 40 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - concat - retsub - -// getPools(uint64)(uint64,uint16,uint64)[] -*abi_route_getPools: - // The ABI return prefix - byte 0x151f7c75 - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute getPools(uint64)(uint64,uint16,uint64)[] - callsub getPools - dup - len - int 18 - / - itob - extract 6 2 - swap - concat - concat - log - int 1 - return - -// getPools(validatorId: ValidatorIdType): PoolInfo[] -// -// Return list of all pools for this validator. -// @param {uint64} validatorId -// @return {PoolInfo[]} - array of pools -// Not callable from other contracts because >1K return but can be called w/ simulate which bumps log returns -getPools: - proto 1 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 2 - - // contracts/validatorRegistry.algo.ts:320 - // retData: PoolInfo[] = [] - byte 0x - frame_bury 0 // retData: PoolInfo[] - - // contracts/validatorRegistry.algo.ts:321 - // poolSet = clone(this.validatorList(validatorId).value.pools) - int 268 // headOffset - int 432 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - frame_bury 1 // poolSet: (uint64,uint16,uint64)[24] - - // contracts/validatorRegistry.algo.ts:322 - // for (let i = 0; i < poolSet.length; i += 1) - int 0 - frame_bury 2 // i: uint64 - -*for_0: - // contracts/validatorRegistry.algo.ts:322 - // i < poolSet.length - frame_dig 2 // i: uint64 - int 24 - < - bz *for_0_end - - // *if0_condition - // contracts/validatorRegistry.algo.ts:323 - // poolSet[i].poolAppId === 0 - frame_dig 1 // poolSet: (uint64,uint16,uint64)[24] - frame_dig 2 // i: uint64 - int 18 - * // acc * typeLength - int 0 - + - int 8 - extract3 - btoi - int 0 - == - bz *if0_end - - // *if0_consequent - b *for_0_end - -*if0_end: - // contracts/validatorRegistry.algo.ts:327 - // retData.push(poolSet[i]) - frame_dig 0 // retData: PoolInfo[] - frame_dig 1 // poolSet: (uint64,uint16,uint64)[24] - frame_dig 2 // i: uint64 - int 18 - * // acc * typeLength - int 18 - extract3 - concat - frame_bury 0 // retData: PoolInfo[] - -*for_0_continue: - // contracts/validatorRegistry.algo.ts:322 - // i += 1 - frame_dig 2 // i: uint64 - int 1 - + - frame_bury 2 // i: uint64 - b *for_0 - -*for_0_end: - // contracts/validatorRegistry.algo.ts:329 - // return retData - frame_dig 0 // retData: PoolInfo[] - - // set the subroutine return value - frame_bury 0 - - // pop all local variables from the stack - popn 2 - retsub - -// getPoolAppId(uint64,uint64)uint64 -*abi_route_getPoolAppId: - // The ABI return prefix - byte 0x151f7c75 - - // poolId: uint64 - txna ApplicationArgs 2 - btoi - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute getPoolAppId(uint64,uint64)uint64 - callsub getPoolAppId - itob - concat - log - int 1 - return - -// getPoolAppId(validatorId: uint64, poolId: uint64): uint64 -getPoolAppId: - proto 2 1 - - // contracts/validatorRegistry.algo.ts:337 - // assert( - // poolId !== 0 && poolId <= this.validatorList(validatorId).value.pools.length, - // 'pool id must be between 1 and number of pools for this validator', - // ) - frame_dig -2 // poolId: uint64 - int 0 - != - dup - bz *skip_and0 - frame_dig -2 // poolId: uint64 - int 24 - <= - && - -*skip_and0: - // pool id must be between 1 and number of pools for this validator - assert - - // contracts/validatorRegistry.algo.ts:341 - // return this.validatorList(validatorId).value.pools[poolId - 1].poolAppId - int 268 // headOffset - frame_dig -2 // poolId: uint64 - int 1 - - - int 18 - * // acc * typeLength - + - int 0 - + - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: uint64 - itob - concat - cover 2 - box_extract - btoi - retsub - -// getPoolInfo((uint64,uint64,uint64))(uint64,uint16,uint64) -*abi_route_getPoolInfo: - // The ABI return prefix - byte 0x151f7c75 - - // poolKey: (uint64,uint64,uint64) - txna ApplicationArgs 1 - dup - len - int 24 - == - - // argument 0 (poolKey) for getPoolInfo must be a (uint64,uint64,uint64) - assert - - // execute getPoolInfo((uint64,uint64,uint64))(uint64,uint16,uint64) - callsub getPoolInfo - concat - log - int 1 - return - -// getPoolInfo(poolKey: ValidatorPoolKey): PoolInfo -getPoolInfo: - proto 1 1 - - // contracts/validatorRegistry.algo.ts:346 - // return this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1] - int 268 // headOffset - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 18 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - retsub - -// getCurMaxStakePerPool(uint64)uint64 -*abi_route_getCurMaxStakePerPool: - // The ABI return prefix - byte 0x151f7c75 - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute getCurMaxStakePerPool(uint64)uint64 - callsub getCurMaxStakePerPool - itob - concat - log - int 1 - return - -// getCurMaxStakePerPool(validatorId: ValidatorIdType): uint64 -// -// Calculate the maximum stake per pool for a given validator. -// Normally this would be maxAlgoPerPool, but it should also never go above MaxAllowedStake / numPools so -// as pools are added the max allowed per pool can reduce. -// -// @param {ValidatorIdType} validatorId - The id of the validator. -getCurMaxStakePerPool: - proto 1 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 2 - - // contracts/validatorRegistry.algo.ts:357 - // numPools = this.validatorList(validatorId).value.state.numPools as uint64 - int 242 - int 2 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 0 // numPools: uint64 - - // contracts/validatorRegistry.algo.ts:358 - // hardMaxDividedBetweenPools = this.maxAllowedStake() / numPools - callsub maxAllowedStake - frame_dig 0 // numPools: uint64 - / - frame_bury 1 // hardMaxDividedBetweenPools: uint64 - - // contracts/validatorRegistry.algo.ts:359 - // maxPerPool: uint64 = this.validatorList(validatorId).value.config.maxAlgoPerPool - int 217 - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 2 // maxPerPool: uint64 - - // *if1_condition - // contracts/validatorRegistry.algo.ts:360 - // maxPerPool === 0 - frame_dig 2 // maxPerPool: uint64 - int 0 - == - bz *if1_end - - // *if1_consequent - // contracts/validatorRegistry.algo.ts:361 - // maxPerPool = this.maxAlgoAllowedPerPool() - callsub maxAlgoAllowedPerPool - frame_bury 2 // maxPerPool: uint64 - -*if1_end: - // *if2_condition - // contracts/validatorRegistry.algo.ts:363 - // hardMaxDividedBetweenPools < maxPerPool - frame_dig 1 // hardMaxDividedBetweenPools: uint64 - frame_dig 2 // maxPerPool: uint64 - < - bz *if2_end - - // *if2_consequent - // contracts/validatorRegistry.algo.ts:364 - // maxPerPool = hardMaxDividedBetweenPools - frame_dig 1 // hardMaxDividedBetweenPools: uint64 - frame_bury 2 // maxPerPool: uint64 - -*if2_end: - // contracts/validatorRegistry.algo.ts:366 - // return maxPerPool - frame_dig 2 // maxPerPool: uint64 - - // set the subroutine return value - frame_bury 0 - - // pop all local variables from the stack - popn 2 - retsub - -// doesStakerNeedToPayMBR(address)bool -*abi_route_doesStakerNeedToPayMBR: - // The ABI return prefix - byte 0x151f7c75 - - // staker: address - txna ApplicationArgs 1 - dup - len - int 32 - == - - // argument 0 (staker) for doesStakerNeedToPayMBR must be a address - assert - - // execute doesStakerNeedToPayMBR(address)bool - callsub doesStakerNeedToPayMBR - byte 0x00 - int 0 - uncover 2 - setbit - concat - log - int 1 - return - -// doesStakerNeedToPayMBR(staker: Address): boolean -// -// Helper callers can call w/ simulate to determine if 'AddStaker' MBR should be included w/ staking amount -// @param staker -doesStakerNeedToPayMBR: - proto 1 1 - - // contracts/validatorRegistry.algo.ts:375 - // return !this.stakerPoolSet(staker).exists - byte 0x737073 // "sps" - frame_dig -1 // staker: Address - concat - box_len - swap - pop - ! - retsub - -// getStakedPoolsForAccount(address)(uint64,uint64,uint64)[] -*abi_route_getStakedPoolsForAccount: - // The ABI return prefix - byte 0x151f7c75 - - // staker: address - txna ApplicationArgs 1 - dup - len - int 32 - == - - // argument 0 (staker) for getStakedPoolsForAccount must be a address - assert - - // execute getStakedPoolsForAccount(address)(uint64,uint64,uint64)[] - callsub getStakedPoolsForAccount - dup - len - int 24 - / - itob - extract 6 2 - swap - concat - concat - log - int 1 - return - -// getStakedPoolsForAccount(staker: Address): ValidatorPoolKey[] -// -// Retrieves the staked pools for an account. -// -// @param {Address} staker - The account to retrieve staked pools for. -// @return {ValidatorPoolKey[]} - The array of staked pools for the account. -getStakedPoolsForAccount: - proto 1 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 2 - - // *if3_condition - // contracts/validatorRegistry.algo.ts:385 - // !this.stakerPoolSet(staker).exists - byte 0x737073 // "sps" - frame_dig -1 // staker: Address - concat - box_len - swap - pop - ! - bz *if3_end - - // *if3_consequent - // contracts/validatorRegistry.algo.ts:386 - // return [] - byte 0x - b *getStakedPoolsForAccount*return - -*if3_end: - // contracts/validatorRegistry.algo.ts:388 - // retData: ValidatorPoolKey[] = [] - byte 0x - frame_bury 0 // retData: ValidatorPoolKey[] - - // contracts/validatorRegistry.algo.ts:389 - // poolSet = clone(this.stakerPoolSet(staker).value) - byte 0x737073 // "sps" - frame_dig -1 // staker: Address - concat - box_get - - // box value does not exist: this.stakerPoolSet(staker).value - assert - frame_bury 1 // poolSet: (uint64,uint64,uint64)[6] - - // contracts/validatorRegistry.algo.ts:390 - // for (let i = 0; i < poolSet.length; i += 1) - int 0 - frame_bury 2 // i: uint64 - -*for_1: - // contracts/validatorRegistry.algo.ts:390 - // i < poolSet.length - frame_dig 2 // i: uint64 - int 6 - < - bz *for_1_end - - // *if4_condition - // contracts/validatorRegistry.algo.ts:391 - // poolSet[i].id !== 0 - frame_dig 1 // poolSet: (uint64,uint64,uint64)[6] - frame_dig 2 // i: uint64 - int 24 - * // acc * typeLength - int 0 - + - int 8 - extract3 - btoi - int 0 - != - bz *if4_end - - // *if4_consequent - // contracts/validatorRegistry.algo.ts:392 - // retData.push(poolSet[i]) - frame_dig 0 // retData: ValidatorPoolKey[] - frame_dig 1 // poolSet: (uint64,uint64,uint64)[6] - frame_dig 2 // i: uint64 - int 24 - * // acc * typeLength - int 24 - extract3 - concat - frame_bury 0 // retData: ValidatorPoolKey[] - -*if4_end: - -*for_1_continue: - // contracts/validatorRegistry.algo.ts:390 - // i += 1 - frame_dig 2 // i: uint64 - int 1 - + - frame_bury 2 // i: uint64 - b *for_1 - -*for_1_end: - // contracts/validatorRegistry.algo.ts:395 - // return retData - frame_dig 0 // retData: ValidatorPoolKey[] - -*getStakedPoolsForAccount*return: - // set the subroutine return value - frame_bury 0 - - // pop all local variables from the stack - popn 2 - retsub - -// getTokenPayoutRatio(uint64)(uint64[24],uint64) -*abi_route_getTokenPayoutRatio: - // The ABI return prefix - byte 0x151f7c75 - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute getTokenPayoutRatio(uint64)(uint64[24],uint64) - callsub getTokenPayoutRatio - concat - log - int 1 - return - -// getTokenPayoutRatio(validatorId: ValidatorIdType): PoolTokenPayoutRatio -// -// Retrieves the token payout ratio for a given validator - returning the pool ratios of whole so that token -// payouts across pools can be based on a stable snaphost of stake. -// -// @param {ValidatorIdType} validatorId - The id of the validator. -// @return {PoolTokenPayoutRatio} - The token payout ratio for the validator. -getTokenPayoutRatio: - proto 1 1 - - // contracts/validatorRegistry.algo.ts:407 - // return this.validatorList(validatorId).value.tokenPayoutRatio - int 700 // headOffset - int 200 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - retsub - -// getNodePoolAssignments(uint64)((uint64[3])[8]) -*abi_route_getNodePoolAssignments: - // The ABI return prefix - byte 0x151f7c75 - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute getNodePoolAssignments(uint64)((uint64[3])[8]) - callsub getNodePoolAssignments - concat - log - int 1 - return - -// getNodePoolAssignments(validatorId: uint64): NodePoolAssignmentConfig -getNodePoolAssignments: - proto 1 1 - - // contracts/validatorRegistry.algo.ts:412 - // assert(this.validatorList(validatorId).exists, "the specified validator id doesn't exist") - byte 0x76 // "v" - frame_dig -1 // validatorId: uint64 - itob - concat - box_len - swap - pop - - // the specified validator id doesn't exist - assert - - // contracts/validatorRegistry.algo.ts:414 - // return this.validatorList(validatorId).value.nodePoolAssignments - int 900 // headOffset - int 192 - byte 0x76 // "v" - frame_dig -1 // validatorId: uint64 - itob - concat - cover 2 - box_extract - retsub - -// getNFDRegistryID()uint64 -*abi_route_getNFDRegistryID: - // The ABI return prefix - byte 0x151f7c75 - - // execute getNFDRegistryID()uint64 - callsub getNFDRegistryID - itob - concat - log - int 1 - return - -// getNFDRegistryID(): uint64 -getNFDRegistryID: - proto 0 1 - - // contracts/validatorRegistry.algo.ts:418 - // return this.nfdRegistryAppId - pushint TMPL_nfdRegistryAppId - retsub - -// addValidator(pay,string,(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64))uint64 -*abi_route_addValidator: - // The ABI return prefix - byte 0x151f7c75 - - // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - txna ApplicationArgs 2 - dup - len - int 242 - == - - // argument 0 (config) for addValidator must be a (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - assert - - // nfdName: string - txna ApplicationArgs 1 - extract 2 0 - - // mbrPayment: pay - txn GroupIndex - int 1 - - - dup - gtxns TypeEnum - int pay - == - - // argument 2 (mbrPayment) for addValidator must be a pay transaction - assert - - // execute addValidator(pay,string,(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64))uint64 - callsub addValidator - itob - concat - log - int 1 - return - -// addValidator(mbrPayment: PayTxn, nfdName: string, config: ValidatorConfig): uint64 -// -// Adds a new validator -// Requires at least 10 ALGO as the 'fee' for the transaction to help dissuade spammed validator adds. -// -// @param {PayTxn} mbrPayment payment from caller which covers mbr increase of new validator storage -// @param {string} nfdName (Optional) Name of nfd (used as double-check against id specified in config) -// @param {ValidatorConfig} config ValidatorConfig struct -// @returns {uint64} validator id -addValidator: - proto 3 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - - // contracts/validatorRegistry.algo.ts:430 - // this.validateConfig(config) - frame_dig -3 // config: ValidatorConfig - callsub validateConfig - - // contracts/validatorRegistry.algo.ts:431 - // assert(config.owner !== Address.zeroAddress) - frame_dig -3 // config: ValidatorConfig - extract 8 32 - global ZeroAddress - != - assert - - // contracts/validatorRegistry.algo.ts:432 - // assert(config.manager !== Address.zeroAddress) - frame_dig -3 // config: ValidatorConfig - extract 40 32 - global ZeroAddress - != - assert - - // contracts/validatorRegistry.algo.ts:433 - // assert(this.txn.sender === config.owner, 'sender must be owner to add new validator') - txn Sender - frame_dig -3 // config: ValidatorConfig - extract 8 32 - == - - // sender must be owner to add new validator - assert - - // contracts/validatorRegistry.algo.ts:435 - // verifyPayTxn(mbrPayment, { receiver: this.app.address, amount: this.getMbrAmounts().addValidatorMbr }) - // verify receiver - frame_dig -1 // mbrPayment: PayTxn - gtxns Receiver - global CurrentApplicationAddress - == - - // transaction verification failed: {"txn":"mbrPayment","field":"receiver","expected":"this.app.address"} - assert - - // verify amount - frame_dig -1 // mbrPayment: PayTxn - gtxns Amount - callsub getMbrAmounts - extract 0 8 - btoi - == - - // transaction verification failed: {"txn":"mbrPayment","field":"amount","expected":"this.getMbrAmounts().addValidatorMbr"} - assert - - // contracts/validatorRegistry.algo.ts:437 - // assert(mbrPayment.fee > 10 * 1000000, 'fee must be 10 ALGO or more to prevent spamming of validators') - frame_dig -1 // mbrPayment: PayTxn - gtxns Fee - int 10000000 - > - - // fee must be 10 ALGO or more to prevent spamming of validators - assert - - // contracts/validatorRegistry.algo.ts:440 - // validatorId = this.numValidators.value + 1 - byte 0x6e756d56 // "numV" - app_global_get - int 1 - + - frame_bury 0 // validatorId: uint64 - - // contracts/validatorRegistry.algo.ts:441 - // this.numValidators.value = validatorId - byte 0x6e756d56 // "numV" - frame_dig 0 // validatorId: uint64 - app_global_put - - // contracts/validatorRegistry.algo.ts:443 - // this.validatorList(validatorId).create() - byte 0x76 // "v" - frame_dig 0 // validatorId: uint64 - itob - concat - int 1092 - box_create - pop - - // contracts/validatorRegistry.algo.ts:444 - // this.validatorList(validatorId).value.config = config - int 0 - frame_dig -3 // config: ValidatorConfig - byte 0x76 // "v" - frame_dig 0 // validatorId: uint64 - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:445 - // this.validatorList(validatorId).value.config.id = validatorId - int 0 - frame_dig 0 // validatorId: uint64 - itob - byte 0x76 // "v" - frame_dig 0 // validatorId: uint64 - itob - concat - cover 2 - box_replace - - // *if5_condition - // contracts/validatorRegistry.algo.ts:448 - // config.nfdForInfo !== 0 - frame_dig -3 // config: ValidatorConfig - extract 72 8 - btoi - int 0 - != - bz *if5_end - - // *if5_consequent - // contracts/validatorRegistry.algo.ts:450 - // sendAppCall({ - // applicationID: AppID.fromUint64(this.nfdRegistryAppId), - // applicationArgs: ['is_valid_nfd_appid', nfdName, itob(config.nfdForInfo)], - // applications: [AppID.fromUint64(config.nfdForInfo)], - // }) - itxn_begin - int appl - itxn_field TypeEnum - - // contracts/validatorRegistry.algo.ts:451 - // applicationID: AppID.fromUint64(this.nfdRegistryAppId) - pushint TMPL_nfdRegistryAppId - itxn_field ApplicationID - - // contracts/validatorRegistry.algo.ts:452 - // applicationArgs: ['is_valid_nfd_appid', nfdName, itob(config.nfdForInfo)] - byte 0x69735f76616c69645f6e66645f6170706964 // "is_valid_nfd_appid" - itxn_field ApplicationArgs - frame_dig -2 // nfdName: string - itxn_field ApplicationArgs - frame_dig -3 // config: ValidatorConfig - extract 72 8 - btoi - itob - itxn_field ApplicationArgs - - // contracts/validatorRegistry.algo.ts:453 - // applications: [AppID.fromUint64(config.nfdForInfo)] - frame_dig -3 // config: ValidatorConfig - extract 72 8 - btoi - itxn_field Applications - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/validatorRegistry.algo.ts:455 - // assert(btoi(this.itxn.lastLog) === 1, "provided NFD isn't valid") - itxn LastLog - btoi - int 1 - == - - // provided NFD isn't valid - assert - - // contracts/validatorRegistry.algo.ts:457 - // assert( - // this.txn.sender === (AppID.fromUint64(config.nfdForInfo).globalState('i.owner.a') as Address), - // 'If specifying NFD, account adding validator must be owner', - // ) - txn Sender - frame_dig -3 // config: ValidatorConfig - extract 72 8 - btoi - byte 0x692e6f776e65722e61 // "i.owner.a" - app_global_get_ex - - // global state value does not exist: AppID.fromUint64(config.nfdForInfo).globalState('i.owner.a') - assert - == - - // If specifying NFD, account adding validator must be owner - assert - -*if5_end: - // *if6_condition - // contracts/validatorRegistry.algo.ts:463 - // config.entryGatingType === GATING_TYPE_CREATED_BY_NFD_ADDRESSES || - // config.entryGatingType === GATING_TYPE_SEGMENT_OF_NFD - frame_dig -3 // config: ValidatorConfig - extract 80 1 - btoi - int 3 - == - dup - bnz *skip_or0 - frame_dig -3 // config: ValidatorConfig - extract 80 1 - btoi - int 4 - == - || - -*skip_or0: - bz *if6_end - - // *if6_consequent - // contracts/validatorRegistry.algo.ts:467 - // assert( - // this.isNFDAppIDValid(config.entryGatingAssets[0]), - // 'provided NFD App id for gating must be valid NFD', - // ) - frame_dig -3 // config: ValidatorConfig - extract 113 8 - btoi - callsub isNFDAppIDValid - - // provided NFD App id for gating must be valid NFD - assert - -*if6_end: - // contracts/validatorRegistry.algo.ts:473 - // return validatorId - frame_dig 0 // validatorId: uint64 - - // set the subroutine return value - frame_bury 0 - retsub - -// changeValidatorManager(uint64,address)void -*abi_route_changeValidatorManager: - // manager: address - txna ApplicationArgs 2 - dup - len - int 32 - == - - // argument 0 (manager) for changeValidatorManager must be a address - assert - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute changeValidatorManager(uint64,address)void - callsub changeValidatorManager - int 1 - return - -// changeValidatorManager(validatorId: ValidatorIdType, manager: Address): void -// -// Changes the Validator manager for a specific Validator id. -// [ ONLY OWNER CAN CHANGE ] -// -// @param {ValidatorIdType} validatorId - The id of the validator to change the manager for. -// @param {Address} manager - The new manager address. -changeValidatorManager: - proto 2 0 - - // contracts/validatorRegistry.algo.ts:484 - // assert( - // this.txn.sender === this.validatorList(validatorId).value.config.owner, - // 'can only be called by validator owner', - // ) - txn Sender - int 8 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - == - - // can only be called by validator owner - assert - - // contracts/validatorRegistry.algo.ts:488 - // this.validatorList(validatorId).value.config.manager = manager - int 40 - frame_dig -2 // manager: Address - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - retsub - -// changeValidatorSunsetInfo(uint64,uint64,uint64)void -*abi_route_changeValidatorSunsetInfo: - // sunsettingTo: uint64 - txna ApplicationArgs 3 - btoi - - // sunsettingOn: uint64 - txna ApplicationArgs 2 - btoi - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute changeValidatorSunsetInfo(uint64,uint64,uint64)void - callsub changeValidatorSunsetInfo - int 1 - return - -// changeValidatorSunsetInfo(validatorId: ValidatorIdType, sunsettingOn: uint64, sunsettingTo: ValidatorIdType): void -// -// Updates the sunset information for a given validator. -// [ ONLY OWNER CAN CHANGE ] -// -// @param {ValidatorIdType} validatorId - The id of the validator to update. -// @param {uint64} sunsettingOn - The new sunset timestamp. -// @param {uint64} sunsettingTo - The new sunset to validator id. -changeValidatorSunsetInfo: - proto 3 0 - - // contracts/validatorRegistry.algo.ts:500 - // assert( - // this.txn.sender === this.validatorList(validatorId).value.config.owner, - // 'can only be called by validator owner', - // ) - txn Sender - int 8 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - == - - // can only be called by validator owner - assert - - // contracts/validatorRegistry.algo.ts:504 - // this.validatorList(validatorId).value.config.sunsettingOn = sunsettingOn - int 226 - frame_dig -2 // sunsettingOn: uint64 - itob - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:505 - // this.validatorList(validatorId).value.config.sunsettingTo = sunsettingTo - int 234 - frame_dig -3 // sunsettingTo: ValidatorIdType - itob - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - retsub - -// changeValidatorNFD(uint64,uint64,string)void -*abi_route_changeValidatorNFD: - // nfdName: string - txna ApplicationArgs 3 - extract 2 0 - - // nfdAppID: uint64 - txna ApplicationArgs 2 - btoi - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute changeValidatorNFD(uint64,uint64,string)void - callsub changeValidatorNFD - int 1 - return - -// changeValidatorNFD(validatorId: ValidatorIdType, nfdAppID: uint64, nfdName: string): void -// -// Changes the NFD for a validator in the validatorList contract. -// [ ONLY OWNER CAN CHANGE ] -// -// @param {ValidatorIdType} validatorId - The id of the validator to update. -// @param {uint64} nfdAppID - The application id of the NFD to assign to the validator. -// @param {string} nfdName - The name of the NFD (which must match) -changeValidatorNFD: - proto 3 0 - - // contracts/validatorRegistry.algo.ts:518 - // assert( - // this.txn.sender === this.validatorList(validatorId).value.config.owner, - // 'can only be called by validator owner', - // ) - txn Sender - int 8 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - == - - // can only be called by validator owner - assert - - // contracts/validatorRegistry.algo.ts:523 - // sendAppCall({ - // applicationID: AppID.fromUint64(this.nfdRegistryAppId), - // applicationArgs: ['is_valid_nfd_appid', nfdName, itob(nfdAppID)], - // applications: [AppID.fromUint64(nfdAppID)], - // }) - itxn_begin - int appl - itxn_field TypeEnum - - // contracts/validatorRegistry.algo.ts:524 - // applicationID: AppID.fromUint64(this.nfdRegistryAppId) - pushint TMPL_nfdRegistryAppId - itxn_field ApplicationID - - // contracts/validatorRegistry.algo.ts:525 - // applicationArgs: ['is_valid_nfd_appid', nfdName, itob(nfdAppID)] - byte 0x69735f76616c69645f6e66645f6170706964 // "is_valid_nfd_appid" - itxn_field ApplicationArgs - frame_dig -3 // nfdName: string - itxn_field ApplicationArgs - frame_dig -2 // nfdAppID: uint64 - itob - itxn_field ApplicationArgs - - // contracts/validatorRegistry.algo.ts:526 - // applications: [AppID.fromUint64(nfdAppID)] - frame_dig -2 // nfdAppID: uint64 - itxn_field Applications - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/validatorRegistry.algo.ts:529 - // assert( - // this.txn.sender === (AppID.fromUint64(nfdAppID).globalState('i.owner.a') as Address), - // 'If specifying NFD, account adding validator must be owner', - // ) - txn Sender - frame_dig -2 // nfdAppID: uint64 - byte 0x692e6f776e65722e61 // "i.owner.a" - app_global_get_ex - - // global state value does not exist: AppID.fromUint64(nfdAppID).globalState('i.owner.a') - assert - == - - // If specifying NFD, account adding validator must be owner - assert - - // contracts/validatorRegistry.algo.ts:533 - // this.validatorList(validatorId).value.config.nfdForInfo = nfdAppID - int 72 - frame_dig -2 // nfdAppID: uint64 - itob - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - retsub - -// changeValidatorCommissionAddress(uint64,address)void -*abi_route_changeValidatorCommissionAddress: - // commissionAddress: address - txna ApplicationArgs 2 - dup - len - int 32 - == - - // argument 0 (commissionAddress) for changeValidatorCommissionAddress must be a address - assert - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute changeValidatorCommissionAddress(uint64,address)void - callsub changeValidatorCommissionAddress - int 1 - return - -// changeValidatorCommissionAddress(validatorId: ValidatorIdType, commissionAddress: Address): void -// -// Change the commission address that validator rewards are sent to. -// [ ONLY OWNER CAN CHANGE ] -changeValidatorCommissionAddress: - proto 2 0 - - // contracts/validatorRegistry.algo.ts:541 - // assert( - // this.txn.sender === this.validatorList(validatorId).value.config.owner, - // 'can only be called by validator owner', - // ) - txn Sender - int 8 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - == - - // can only be called by validator owner - assert - - // contracts/validatorRegistry.algo.ts:545 - // assert(commissionAddress !== Address.zeroAddress) - frame_dig -2 // commissionAddress: Address - global ZeroAddress - != - assert - - // contracts/validatorRegistry.algo.ts:546 - // this.validatorList(validatorId).value.config.validatorCommissionAddress = commissionAddress - int 177 - frame_dig -2 // commissionAddress: Address - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - retsub - -// changeValidatorRewardInfo(uint64,uint8,address,uint64[4],uint64,uint64)void -*abi_route_changeValidatorRewardInfo: - // RewardPerPayout: uint64 - txna ApplicationArgs 6 - btoi - - // GatingAssetMinBalance: uint64 - txna ApplicationArgs 5 - btoi - - // EntryGatingAssets: uint64[4] - txna ApplicationArgs 4 - dup - len - int 32 - == - - // argument 2 (EntryGatingAssets) for changeValidatorRewardInfo must be a uint64[4] - assert - - // EntryGatingAddress: address - txna ApplicationArgs 3 - dup - len - int 32 - == - - // argument 3 (EntryGatingAddress) for changeValidatorRewardInfo must be a address - assert - - // EntryGatingType: uint8 - txna ApplicationArgs 2 - dup - len - int 1 - == - - // argument 4 (EntryGatingType) for changeValidatorRewardInfo must be a uint8 - assert - btoi - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute changeValidatorRewardInfo(uint64,uint8,address,uint64[4],uint64,uint64)void - callsub changeValidatorRewardInfo - int 1 - return - -// changeValidatorRewardInfo(validatorId: ValidatorIdType, EntryGatingType: uint8, EntryGatingAddress: Address, EntryGatingAssets: StaticArray, GatingAssetMinBalance: uint64, RewardPerPayout: uint64): void -// -// Allow the additional rewards (gating entry, additional token rewards) information be changed at will. -// [ ONLY OWNER CAN CHANGE ] -changeValidatorRewardInfo: - proto 6 0 - - // contracts/validatorRegistry.algo.ts:561 - // assert( - // this.txn.sender === this.validatorList(validatorId).value.config.owner, - // 'can only be called by validator owner', - // ) - txn Sender - int 8 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - == - - // can only be called by validator owner - assert - - // contracts/validatorRegistry.algo.ts:566 - // this.validatorList(validatorId).value.config.entryGatingType = EntryGatingType - int 80 - frame_dig -2 // EntryGatingType: uint8 - itob - extract 7 1 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:567 - // this.validatorList(validatorId).value.config.entryGatingAddress = EntryGatingAddress - int 81 - frame_dig -3 // EntryGatingAddress: Address - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:568 - // this.validatorList(validatorId).value.config.entryGatingAssets = EntryGatingAssets - int 113 - frame_dig -4 // EntryGatingAssets: StaticArray - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:569 - // this.validatorList(validatorId).value.config.gatingAssetMinBalance = GatingAssetMinBalance - int 145 - frame_dig -5 // GatingAssetMinBalance: uint64 - itob - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:570 - // this.validatorList(validatorId).value.config.rewardPerPayout = RewardPerPayout - int 161 - frame_dig -6 // RewardPerPayout: uint64 - itob - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - retsub - -// addPool(pay,uint64,uint64)(uint64,uint64,uint64) -*abi_route_addPool: - // The ABI return prefix - byte 0x151f7c75 - - // nodeNum: uint64 - txna ApplicationArgs 2 - btoi - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // mbrPayment: pay - txn GroupIndex - int 1 - - - dup - gtxns TypeEnum - int pay - == - - // argument 2 (mbrPayment) for addPool must be a pay transaction - assert - - // execute addPool(pay,uint64,uint64)(uint64,uint64,uint64) - callsub addPool - concat - log - int 1 - return - -// addPool(mbrPayment: PayTxn, validatorId: ValidatorIdType, nodeNum: uint64): ValidatorPoolKey -// -// Adds a new pool to a validator's pool set, returning the 'key' to reference the pool in the future for staking, etc. -// The caller must pay the cost of the validators MBR increase as well as the MBR that will be needed for the pool itself. -// -// [ ONLY OWNER OR MANAGER CAN call ] -// @param {PayTxn} mbrPayment payment from caller which covers mbr increase of adding a new pool -// @param {uint64} validatorId is id of validator to pool to (must be owner or manager) -// @param {uint64} nodeNum is node number to add to -// @returns {ValidatorPoolKey} pool key to created pool -addPool: - proto 3 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dup - - // contracts/validatorRegistry.algo.ts:586 - // assert( - // this.txn.sender === this.validatorList(validatorId).value.config.owner || - // this.txn.sender === this.validatorList(validatorId).value.config.manager, - // 'can only be called by owner or manager of validator', - // ) - txn Sender - int 8 - int 32 - byte 0x76 // "v" - frame_dig -2 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - == - dup - bnz *skip_or1 - txn Sender - int 40 - int 32 - byte 0x76 // "v" - frame_dig -2 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - == - || - -*skip_or1: - // can only be called by owner or manager of validator - assert - - // contracts/validatorRegistry.algo.ts:593 - // verifyPayTxn(mbrPayment, { receiver: this.app.address, amount: this.getMbrAmounts().addPoolMbr }) - // verify receiver - frame_dig -1 // mbrPayment: PayTxn - gtxns Receiver - global CurrentApplicationAddress - == - - // transaction verification failed: {"txn":"mbrPayment","field":"receiver","expected":"this.app.address"} - assert - - // verify amount - frame_dig -1 // mbrPayment: PayTxn - gtxns Amount - callsub getMbrAmounts - extract 8 8 - btoi - == - - // transaction verification failed: {"txn":"mbrPayment","field":"amount","expected":"this.getMbrAmounts().addPoolMbr"} - assert - - // contracts/validatorRegistry.algo.ts:595 - // assert(this.validatorList(validatorId).exists, "specified validator id isn't valid") - byte 0x76 // "v" - frame_dig -2 // validatorId: ValidatorIdType - itob - concat - box_len - swap - pop - - // specified validator id isn't valid - assert - - // contracts/validatorRegistry.algo.ts:597 - // numPools: uint64 = this.validatorList(validatorId).value.state.numPools as uint64 - int 242 - int 2 - byte 0x76 // "v" - frame_dig -2 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 0 // numPools: uint64 - - // *if7_condition - // contracts/validatorRegistry.algo.ts:598 - // (numPools as uint64) >= MAX_POOLS - frame_dig 0 // numPools: uint64 - int 24 - >= - bz *if7_end - - // *if7_consequent - // already at max pool size - err - -*if7_end: - // contracts/validatorRegistry.algo.ts:601 - // numPools += 1 - frame_dig 0 // numPools: uint64 - int 1 - + - frame_bury 0 // numPools: uint64 - - // contracts/validatorRegistry.algo.ts:604 - // sendAppCall({ - // onCompletion: OnCompletion.NoOp, - // approvalProgram: [ - // this.stakingPoolApprovalProgram.extract(0, 4096), - // this.stakingPoolApprovalProgram.extract(4096, this.stakingPoolApprovalProgram.size - 4096), - // ], - // clearStateProgram: StakingPool.clearProgram(), - // globalNumUint: StakingPool.schema.global.numUint, - // globalNumByteSlice: StakingPool.schema.global.numByteSlice, - // extraProgramPages: 3, - // applicationArgs: [ - // // creatingContractID, validatorId, poolId, minEntryStake - // method('createApplication(uint64,uint64,uint64,uint64)void'), - // itob(this.app.id), - // itob(validatorId), - // itob(numPools as uint64), - // itob(this.validatorList(validatorId).value.config.minEntryStake), - // ], - // }) - itxn_begin - int appl - itxn_field TypeEnum - - // contracts/validatorRegistry.algo.ts:605 - // onCompletion: OnCompletion.NoOp - int 0 // NoOp - itxn_field OnCompletion - - // contracts/validatorRegistry.algo.ts:606 - // approvalProgram: [ - // this.stakingPoolApprovalProgram.extract(0, 4096), - // this.stakingPoolApprovalProgram.extract(4096, this.stakingPoolApprovalProgram.size - 4096), - // ] - byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" - int 0 - int 4096 - box_extract - itxn_field ApprovalProgramPages - byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" - int 4096 - byte 0x706f6f6c54656d706c617465417070726f76616c4279746573 // "poolTemplateApprovalBytes" - box_len - - // box value does not exist: this.stakingPoolApprovalProgram.size - assert - int 4096 - - - box_extract - itxn_field ApprovalProgramPages - - // contracts/validatorRegistry.algo.ts:610 - // clearStateProgram: StakingPool.clearProgram() - byte b64 Cg== - itxn_field ClearStateProgram - - // contracts/validatorRegistry.algo.ts:611 - // globalNumUint: StakingPool.schema.global.numUint - int 11 - itxn_field GlobalNumUint - - // contracts/validatorRegistry.algo.ts:612 - // globalNumByteSlice: StakingPool.schema.global.numByteSlice - int 3 - itxn_field GlobalNumByteSlice - - // contracts/validatorRegistry.algo.ts:613 - // extraProgramPages: 3 - int 3 - itxn_field ExtraProgramPages - - // contracts/validatorRegistry.algo.ts:614 - // applicationArgs: [ - // // creatingContractID, validatorId, poolId, minEntryStake - // method('createApplication(uint64,uint64,uint64,uint64)void'), - // itob(this.app.id), - // itob(validatorId), - // itob(numPools as uint64), - // itob(this.validatorList(validatorId).value.config.minEntryStake), - // ] - method "createApplication(uint64,uint64,uint64,uint64)void" - itxn_field ApplicationArgs - txna Applications 0 - itob - itxn_field ApplicationArgs - frame_dig -2 // validatorId: ValidatorIdType - itob - itxn_field ApplicationArgs - frame_dig 0 // numPools: uint64 - itob - itxn_field ApplicationArgs - int 209 - int 8 - byte 0x76 // "v" - frame_dig -2 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/validatorRegistry.algo.ts:624 - // this.validatorList(validatorId).value.state.numPools = numPools as uint16 - int 242 - frame_dig 0 // numPools: uint64 - itob - extract 6 2 - byte 0x76 // "v" - frame_dig -2 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:627 - // poolAppId = this.itxn.createdApplicationID.id - itxn CreatedApplicationID - frame_bury 1 // poolAppId: uint64 - - // contracts/validatorRegistry.algo.ts:628 - // this.validatorList(validatorId).value.pools[numPools - 1].poolAppId = poolAppId - int 268 // headOffset - frame_dig 0 // numPools: uint64 - int 1 - - - int 18 - * // acc * typeLength - + - int 0 - + - frame_dig 1 // poolAppId: uint64 - itob - byte 0x76 // "v" - frame_dig -2 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:629 - // this.addPoolToNode(validatorId, poolAppId, nodeNum) - frame_dig -3 // nodeNum: uint64 - frame_dig 1 // poolAppId: uint64 - frame_dig -2 // validatorId: ValidatorIdType - callsub addPoolToNode - - // contracts/validatorRegistry.algo.ts:637 - // return { id: validatorId, poolId: numPools as uint64, poolAppId: this.itxn!.createdApplicationID.id } - frame_dig -2 // validatorId: ValidatorIdType - itob - frame_dig 0 // numPools: uint64 - itob - concat - itxn CreatedApplicationID - itob - concat - - // set the subroutine return value - frame_bury 0 - - // pop all local variables from the stack - popn 1 - retsub - -// addStake(pay,uint64,uint64)(uint64,uint64,uint64) -*abi_route_addStake: - // The ABI return prefix - byte 0x151f7c75 - - // valueToVerify: uint64 - txna ApplicationArgs 2 - btoi - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // stakedAmountPayment: pay - txn GroupIndex - int 1 - - - dup - gtxns TypeEnum - int pay - == - - // argument 2 (stakedAmountPayment) for addStake must be a pay transaction - assert - - // execute addStake(pay,uint64,uint64)(uint64,uint64,uint64) - callsub addStake - concat - log - int 1 - return - -// addStake(stakedAmountPayment: PayTxn, validatorId: ValidatorIdType, valueToVerify: uint64): ValidatorPoolKey -// -// Adds stake to a validator pool. -// -// @param {PayTxn} stakedAmountPayment - payment coming from staker to place into a pool -// @param {ValidatorIdType} validatorId - The id of the validator. -// @param {uint64} valueToVerify - only if validator has gating to enter - this is asset id or nfd id that corresponds to gating. -// Txn sender is factored in as well if that is part of gating. -// * @returns {ValidatorPoolKey} - The key of the validator pool. -addStake: - proto 3 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 5 - - // contracts/validatorRegistry.algo.ts:650 - // assert(this.validatorList(validatorId).exists, "specified validator id isn't valid") - byte 0x76 // "v" - frame_dig -2 // validatorId: ValidatorIdType - itob - concat - box_len - swap - pop - - // specified validator id isn't valid - assert - - // *if8_condition - // contracts/validatorRegistry.algo.ts:653 - // this.validatorList(validatorId).value.config.sunsettingOn > 0 - int 226 - int 8 - byte 0x76 // "v" - frame_dig -2 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - int 0 - > - bz *if8_end - - // *if8_consequent - // contracts/validatorRegistry.algo.ts:654 - // assert( - // this.validatorList(validatorId).value.config.sunsettingOn < globals.latestTimestamp, - // "can't stake with a validator that is past its sunsetting time", - // ) - int 226 - int 8 - byte 0x76 // "v" - frame_dig -2 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - global LatestTimestamp - < - - // can't stake with a validator that is past its sunsetting time - assert - -*if8_end: - // contracts/validatorRegistry.algo.ts:660 - // staker = this.txn.sender - txn Sender - frame_bury 0 // staker: address - - // contracts/validatorRegistry.algo.ts:664 - // verifyPayTxn(stakedAmountPayment, { - // sender: staker, - // receiver: this.app.address, - // }) - // verify sender - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Sender - frame_dig 0 // staker: address - == - - // transaction verification failed: {"txn":"stakedAmountPayment","field":"sender","expected":"staker"} - assert - - // verify receiver - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Receiver - global CurrentApplicationAddress - == - - // transaction verification failed: {"txn":"stakedAmountPayment","field":"receiver","expected":"this.app.address"} - assert - - // contracts/validatorRegistry.algo.ts:671 - // assert( - // this.validatorList(validatorId).value.state.totalAlgoStaked < this.maxAllowedStake(), - // 'total staked for all of a validators pools may not exceed hard cap', - // ) - int 252 - int 8 - byte 0x76 // "v" - frame_dig -2 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - callsub maxAllowedStake - < - - // total staked for all of a validators pools may not exceed hard cap - assert - - // contracts/validatorRegistry.algo.ts:678 - // this.doesStakerMeetGating(validatorId, valueToVerify) - frame_dig -3 // valueToVerify: uint64 - frame_dig -2 // validatorId: ValidatorIdType - callsub doesStakerMeetGating - - // contracts/validatorRegistry.algo.ts:680 - // realAmount = stakedAmountPayment.amount - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Amount - frame_bury 1 // realAmount: uint64 - - // contracts/validatorRegistry.algo.ts:681 - // mbrAmtLeftBehind: uint64 = 0 - int 0 - frame_bury 2 // mbrAmtLeftBehind: uint64 - - // *if9_condition - // contracts/validatorRegistry.algo.ts:683 - // !this.stakerPoolSet(staker).exists - byte 0x737073 // "sps" - frame_dig 0 // staker: address - concat - box_len - swap - pop - ! - bz *if9_end - - // *if9_consequent - // contracts/validatorRegistry.algo.ts:686 - // mbrAmtLeftBehind = this.getMbrAmounts().addStakerMbr - callsub getMbrAmounts - extract 24 8 - btoi - frame_bury 2 // mbrAmtLeftBehind: uint64 - - // contracts/validatorRegistry.algo.ts:687 - // realAmount -= mbrAmtLeftBehind - frame_dig 1 // realAmount: uint64 - frame_dig 2 // mbrAmtLeftBehind: uint64 - - - frame_bury 1 // realAmount: uint64 - - // contracts/validatorRegistry.algo.ts:688 - // this.stakerPoolSet(staker).create() - byte 0x737073 // "sps" - frame_dig 0 // staker: address - concat - int 144 - box_create - pop - -*if9_end: - // contracts/validatorRegistry.algo.ts:692 - // findRet = this.findPoolForStaker(validatorId, staker, realAmount) - frame_dig 1 // realAmount: uint64 - frame_dig 0 // staker: address - frame_dig -2 // validatorId: ValidatorIdType - callsub findPoolForStaker - frame_bury 3 // findRet: ((uint64,uint64,uint64),bool,bool) - - // contracts/validatorRegistry.algo.ts:693 - // poolKey = findRet[0] - // contracts/validatorRegistry.algo.ts:694 - // isNewStakerToValidator = findRet[1] - frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) - store 255 // full array - load 255 // full array - int 192 - getbit - frame_bury 4 // isNewStakerToValidator: bool - - // contracts/validatorRegistry.algo.ts:695 - // isNewStakerToProtocol = findRet[2] - frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) - store 255 // full array - load 255 // full array - int 193 - getbit - frame_bury 5 // isNewStakerToProtocol: bool - - // *if10_condition - // contracts/validatorRegistry.algo.ts:696 - // poolKey.poolId === 0 - frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) - store 255 // full array - load 255 // full array - extract 8 8 - btoi - int 0 - == - bz *if10_end - - // *if10_consequent - // No pool available with free stake. Validator needs to add another pool - err - -*if10_end: - // contracts/validatorRegistry.algo.ts:701 - // this.updateStakerPoolSet(staker, poolKey) - frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) - store 255 // full array - load 255 // full array - extract 0 24 - frame_dig 0 // staker: address - callsub updateStakerPoolSet - - // contracts/validatorRegistry.algo.ts:704 - // this.callPoolAddStake( - // stakedAmountPayment, - // poolKey, - // mbrAmtLeftBehind, - // isNewStakerToValidator, - // isNewStakerToProtocol, - // ) - frame_dig 5 // isNewStakerToProtocol: bool - frame_dig 4 // isNewStakerToValidator: bool - frame_dig 2 // mbrAmtLeftBehind: uint64 - frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) - store 255 // full array - load 255 // full array - extract 0 24 - frame_dig -1 // stakedAmountPayment: PayTxn - callsub callPoolAddStake - - // contracts/validatorRegistry.algo.ts:719 - // return poolKey - frame_dig 3 // findRet: ((uint64,uint64,uint64),bool,bool) - store 255 // full array - load 255 // full array - extract 0 24 - - // set the subroutine return value - frame_bury 0 - - // pop all local variables from the stack - popn 5 - retsub - -// setTokenPayoutRatio(uint64)(uint64[24],uint64) -*abi_route_setTokenPayoutRatio: - // The ABI return prefix - byte 0x151f7c75 - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute setTokenPayoutRatio(uint64)(uint64[24],uint64) - callsub setTokenPayoutRatio - concat - log - int 1 - return - -// setTokenPayoutRatio(validatorId: ValidatorIdType): PoolTokenPayoutRatio -// -// setTokenPayoutRatio is called by Staking Pool # 1 (ONLY) to ask the validator (us) to calculate the ratios -// of stake in the pools for subsequent token payouts (ie: 2 pools, '100' algo total staked, 60 in pool 1, and 40 -// in pool 2) This is done so we have a stable snapshot of stake - taken once per epoch - only triggered by -// pool 1 doing payout. pools other than 1 doing payout call pool 1 to ask it do it first. -// It would be 60/40% in the poolPctOfWhole values. The token reward payouts then use these values instead of -// their 'current' stake which changes as part of the payouts themselves (and people could be changing stake -// during the epoch updates across pools) -// -// Multiple pools will call us via pool 1 (pool2->pool1->validator, etc.) so don't assert on pool1 calling multiple -// times in same epoch. Just return. -// -// @param validatorId - validator id (and thus pool) calling us. Verified so that sender MUST be pool 1 of this validator. -// @returns PoolTokenPayoutRatio - the finished ratio data -setTokenPayoutRatio: - proto 1 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 8 - - // contracts/validatorRegistry.algo.ts:739 - // pool1AppID = this.validatorList(validatorId).value.pools[0].poolAppId - int 268 - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 0 // pool1AppID: uint64 - - // contracts/validatorRegistry.algo.ts:740 - // assert(pool1AppID !== 0) - frame_dig 0 // pool1AppID: uint64 - int 0 - != - assert - - // *if11_condition - // contracts/validatorRegistry.algo.ts:742 - // this.txn.sender !== AppID.fromUint64(pool1AppID).address - txn Sender - frame_dig 0 // pool1AppID: uint64 - app_params_get AppAddress - pop - != - bz *if11_end - - // *if11_consequent - // contracts/validatorRegistry.algo.ts:743 - // return this.validatorList(validatorId).value.tokenPayoutRatio - int 700 // headOffset - int 200 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - b *setTokenPayoutRatio*return - -*if11_end: - // contracts/validatorRegistry.algo.ts:749 - // curRound = globals.round - global Round - frame_bury 1 // curRound: uint64 - - // contracts/validatorRegistry.algo.ts:750 - // lastPayoutUpdate = this.validatorList(validatorId).value.tokenPayoutRatio.updatedForPayout - int 892 - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 2 // lastPayoutUpdate: uint64 - - // *if12_condition - // contracts/validatorRegistry.algo.ts:751 - // lastPayoutUpdate !== 0 - frame_dig 2 // lastPayoutUpdate: uint64 - int 0 - != - bz *if12_end - - // *if12_consequent - // *if13_condition - // contracts/validatorRegistry.algo.ts:753 - // (AppID.fromUint64(pool1AppID).globalState('lastPayout') as uint64) === lastPayoutUpdate - frame_dig 0 // pool1AppID: uint64 - byte 0x6c6173745061796f7574 // "lastPayout" - app_global_get_ex - - // global state value does not exist: AppID.fromUint64(pool1AppID).globalState('lastPayout') - assert - frame_dig 2 // lastPayoutUpdate: uint64 - == - bz *if13_end - - // *if13_consequent - // contracts/validatorRegistry.algo.ts:754 - // return this.validatorList(validatorId).value.tokenPayoutRatio - int 700 // headOffset - int 200 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - b *setTokenPayoutRatio*return - -*if13_end: - // contracts/validatorRegistry.algo.ts:756 - // epochRoundLength = this.validatorList(validatorId).value.config.epochRoundLength as uint64 - int 169 - int 4 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 3 // epochRoundLength: uint64 - - // contracts/validatorRegistry.algo.ts:757 - // thisEpochBegin = curRound - (curRound % epochRoundLength) - frame_dig 1 // curRound: uint64 - frame_dig 1 // curRound: uint64 - frame_dig 3 // epochRoundLength: uint64 - % - - - frame_bury 4 // thisEpochBegin: uint64 - - // *if14_condition - // contracts/validatorRegistry.algo.ts:759 - // lastPayoutUpdate - (lastPayoutUpdate % epochRoundLength) === thisEpochBegin - frame_dig 2 // lastPayoutUpdate: uint64 - frame_dig 2 // lastPayoutUpdate: uint64 - frame_dig 3 // epochRoundLength: uint64 - % - - - frame_dig 4 // thisEpochBegin: uint64 - == - bz *if14_end - - // *if14_consequent - // contracts/validatorRegistry.algo.ts:760 - // return this.validatorList(validatorId).value.tokenPayoutRatio - int 700 // headOffset - int 200 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - b *setTokenPayoutRatio*return - -*if14_end: - -*if12_end: - // contracts/validatorRegistry.algo.ts:763 - // this.validatorList(validatorId).value.tokenPayoutRatio.updatedForPayout = curRound - int 892 - frame_dig 1 // curRound: uint64 - itob - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:765 - // curNumPools = this.validatorList(validatorId).value.state.numPools as uint64 - int 242 - int 2 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 5 // curNumPools: uint64 - - // contracts/validatorRegistry.algo.ts:766 - // totalStakeForValidator = this.validatorList(validatorId).value.state.totalAlgoStaked - int 252 - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 6 // totalStakeForValidator: uint64 - - // contracts/validatorRegistry.algo.ts:767 - // for (let i = 0; i < curNumPools; i += 1) - int 0 - frame_bury 7 // i: uint64 - -*for_2: - // contracts/validatorRegistry.algo.ts:767 - // i < curNumPools - frame_dig 7 // i: uint64 - frame_dig 5 // curNumPools: uint64 - < - bz *for_2_end - - // contracts/validatorRegistry.algo.ts:772 - // ourPoolPctOfWhole = wideRatio( - // [this.validatorList(validatorId).value.pools[i].totalAlgoStaked, 1_000_000], - // [totalStakeForValidator], - // ) - int 268 // headOffset - frame_dig 7 // i: uint64 - int 18 - * // acc * typeLength - + - int 10 // headOffset - + - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - int 1_000_000 - mulw - int 0 - frame_dig 6 // totalStakeForValidator: uint64 - divmodw - pop - pop - swap - ! - - // wideRatio failed - assert - frame_bury 8 // ourPoolPctOfWhole: uint64 - - // contracts/validatorRegistry.algo.ts:776 - // this.validatorList(validatorId).value.tokenPayoutRatio.poolPctOfWhole[i] = ourPoolPctOfWhole - int 700 - frame_dig 7 // i: uint64 - int 8 - * // acc * typeLength - + - frame_dig 8 // ourPoolPctOfWhole: uint64 - itob - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - -*for_2_continue: - // contracts/validatorRegistry.algo.ts:767 - // i += 1 - frame_dig 7 // i: uint64 - int 1 - + - frame_bury 7 // i: uint64 - b *for_2 - -*for_2_end: - // contracts/validatorRegistry.algo.ts:778 - // return this.validatorList(validatorId).value.tokenPayoutRatio - int 700 // headOffset - int 200 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - -*setTokenPayoutRatio*return: - // set the subroutine return value - frame_bury 0 - - // pop all local variables from the stack - popn 8 - retsub - -// stakeUpdatedViaRewards((uint64,uint64,uint64),uint64,uint64,uint64,uint64)void -*abi_route_stakeUpdatedViaRewards: - // saturatedBurnToFeeSink: uint64 - txna ApplicationArgs 5 - btoi - - // validatorCommission: uint64 - txna ApplicationArgs 4 - btoi - - // rewardTokenAmountReserved: uint64 - txna ApplicationArgs 3 - btoi - - // algoToAdd: uint64 - txna ApplicationArgs 2 - btoi - - // poolKey: (uint64,uint64,uint64) - txna ApplicationArgs 1 - dup - len - int 24 - == - - // argument 4 (poolKey) for stakeUpdatedViaRewards must be a (uint64,uint64,uint64) - assert - - // execute stakeUpdatedViaRewards((uint64,uint64,uint64),uint64,uint64,uint64,uint64)void - callsub stakeUpdatedViaRewards - int 1 - return - -// stakeUpdatedViaRewards(poolKey: ValidatorPoolKey, algoToAdd: uint64, rewardTokenAmountReserved: uint64, validatorCommission: uint64, saturatedBurnToFeeSink: uint64): void -// -// stakeUpdatedViaRewards is called by Staking pools to inform the validator (us) that a particular amount of total -// stake has been added to the specified pool. This is used to update the stats we have in our PoolInfo storage. -// The calling App id is validated against our pool list as well. -// @param {ValidatorPoolKey} poolKey - ValidatorPoolKey type -// @param {uint64} algoToAdd - amount this validator's total stake increased via rewards -// @param {uint64} rewardTokenAmountReserved - amount this validator's total stake increased via rewards (that should be -// @param {uint64} validatorCommission - the commission amount the validator was paid, if any -// @param {uint64} saturatedBurnToFeeSink - if the pool was in saturated state, the amount sent back to the fee sink. -// seen as 'accounted for/pending spent') -stakeUpdatedViaRewards: - proto 5 0 - - // contracts/validatorRegistry.algo.ts:799 - // this.verifyPoolKeyCaller(poolKey) - frame_dig -1 // poolKey: ValidatorPoolKey - callsub verifyPoolKeyCaller - - // contracts/validatorRegistry.algo.ts:802 - // this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].totalAlgoStaked += algoToAdd - int 268 // headOffset - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 10 // headOffset - + - int 268 // headOffset - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 10 // headOffset - + - int 8 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - frame_dig -2 // algoToAdd: uint64 - + - itob - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:803 - // this.validatorList(poolKey.id).value.state.totalAlgoStaked += algoToAdd - int 252 - dup - int 8 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - frame_dig -2 // algoToAdd: uint64 - + - itob - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:804 - // this.validatorList(poolKey.id).value.state.rewardTokenHeldBack += rewardTokenAmountReserved - int 260 - dup - int 8 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - frame_dig -3 // rewardTokenAmountReserved: uint64 - + - itob - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:806 - // this.totalAlgoStaked.value += algoToAdd - byte 0x7374616b6564 // "staked" - app_global_get - frame_dig -2 // algoToAdd: uint64 - + - byte 0x7374616b6564 // "staked" - swap - app_global_put - - // contracts/validatorRegistry.algo.ts:809 - // this.reverifyNFDOwnership(poolKey.id) - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - callsub reverifyNFDOwnership - retsub - -// stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void -*abi_route_stakeRemoved: - // stakerRemoved: bool - txna ApplicationArgs 5 - dup - len - int 1 - == - - // argument 0 (stakerRemoved) for stakeRemoved must be a bool - assert - int 0 - getbit - - // rewardRemoved: uint64 - txna ApplicationArgs 4 - btoi - - // amountRemoved: uint64 - txna ApplicationArgs 3 - btoi - - // staker: address - txna ApplicationArgs 2 - dup - len - int 32 - == - - // argument 3 (staker) for stakeRemoved must be a address - assert - - // poolKey: (uint64,uint64,uint64) - txna ApplicationArgs 1 - dup - len - int 24 - == - - // argument 4 (poolKey) for stakeRemoved must be a (uint64,uint64,uint64) - assert - - // execute stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void - callsub stakeRemoved - int 1 - return - -// stakeRemoved(poolKey: ValidatorPoolKey, staker: Address, amountRemoved: uint64, rewardRemoved: uint64, stakerRemoved: boolean): void -// -// stakeRemoved is called by Staking pools to inform the validator (us) that a particular amount of total stake has been removed -// from the specified pool. This is used to update the stats we have in our PoolInfo storage. -// If any amount of rewardRemoved is specified, then that amount of reward is sent to the use -// The calling App id is validated against our pool list as well. -// -// @param {ValidatorPoolKey} poolKey calling us from which stake was removed -// @param {Address} staker -// @param {uint64} amountRemoved - algo amount removed -// @param {uint64} rewardRemoved - if applicable, amount of token reward removed (by pool 1 caller) or TO remove and pay out (via pool 1 from different pool caller) -// @param {boolean} stakerRemoved -stakeRemoved: - proto 5 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 3 - - // *if15_condition - // contracts/validatorRegistry.algo.ts:841 - // globals.opcodeBudget < 300 - global OpcodeBudget - int 300 - < - bz *if15_end - - // *if15_consequent - // contracts/validatorRegistry.algo.ts:842 - // increaseOpcodeBudget() - itxn_begin - int appl - itxn_field TypeEnum - int 0 - itxn_field Fee - byte b64 CoEB // #pragma version 10; int 1 - dup - itxn_field ApprovalProgram - itxn_field ClearStateProgram - int DeleteApplication - itxn_field OnCompletion - itxn_submit - -*if15_end: - // contracts/validatorRegistry.algo.ts:844 - // this.verifyPoolKeyCaller(poolKey) - frame_dig -1 // poolKey: ValidatorPoolKey - callsub verifyPoolKeyCaller - - // contracts/validatorRegistry.algo.ts:848 - // assert(amountRemoved > 0 || rewardRemoved > 0, 'should only be called if algo or reward was removed') - frame_dig -3 // amountRemoved: uint64 - int 0 - > - dup - bnz *skip_or2 - frame_dig -4 // rewardRemoved: uint64 - int 0 - > - || - -*skip_or2: - // should only be called if algo or reward was removed - assert - - // contracts/validatorRegistry.algo.ts:851 - // this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].totalAlgoStaked -= amountRemoved - int 268 // headOffset - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 10 // headOffset - + - int 268 // headOffset - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 10 // headOffset - + - int 8 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - frame_dig -3 // amountRemoved: uint64 - - - itob - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:852 - // this.validatorList(poolKey.id).value.state.totalAlgoStaked -= amountRemoved - int 252 - dup - int 8 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - frame_dig -3 // amountRemoved: uint64 - - - itob - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:853 - // this.totalAlgoStaked.value -= amountRemoved - byte 0x7374616b6564 // "staked" - app_global_get - frame_dig -3 // amountRemoved: uint64 - - - byte 0x7374616b6564 // "staked" - swap - app_global_put - - // *if16_condition - // contracts/validatorRegistry.algo.ts:855 - // rewardRemoved > 0 - frame_dig -4 // rewardRemoved: uint64 - int 0 - > - bz *if16_else - - // *if16_consequent - // contracts/validatorRegistry.algo.ts:856 - // rewardTokenID = this.validatorList(poolKey.id).value.config.rewardTokenId - int 153 - int 8 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - frame_bury 0 // rewardTokenID: uint64 - - // contracts/validatorRegistry.algo.ts:857 - // assert(rewardTokenID !== 0, "rewardRemoved can't be set if validator doesn't have reward token!") - frame_dig 0 // rewardTokenID: uint64 - int 0 - != - - // rewardRemoved can't be set if validator doesn't have reward token! - assert - - // contracts/validatorRegistry.algo.ts:858 - // assert( - // this.validatorList(poolKey.id).value.state.rewardTokenHeldBack >= rewardRemoved, - // 'reward being removed must be covered by hold back amount', - // ) - int 260 - int 8 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - frame_dig -4 // rewardRemoved: uint64 - >= - - // reward being removed must be covered by hold back amount - assert - - // contracts/validatorRegistry.algo.ts:864 - // this.validatorList(poolKey.id).value.state.rewardTokenHeldBack -= rewardRemoved - int 260 - dup - int 8 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - frame_dig -4 // rewardRemoved: uint64 - - - itob - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - - // *if17_condition - // contracts/validatorRegistry.algo.ts:869 - // poolKey.poolId !== 1 - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - != - bz *if17_end - - // *if17_consequent - // contracts/validatorRegistry.algo.ts:870 - // sendMethodCall({ - // applicationID: AppID.fromUint64(this.validatorList(poolKey.id).value.pools[0].poolAppId), - // methodArgs: [staker, rewardTokenID, rewardRemoved], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "payTokenReward(address,uint64,uint64)void" - itxn_field ApplicationArgs - - // contracts/validatorRegistry.algo.ts:871 - // applicationID: AppID.fromUint64(this.validatorList(poolKey.id).value.pools[0].poolAppId) - int 268 - int 8 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - itxn_field ApplicationID - - // contracts/validatorRegistry.algo.ts:872 - // methodArgs: [staker, rewardTokenID, rewardRemoved] - frame_dig -2 // staker: Address - itxn_field ApplicationArgs - frame_dig 0 // rewardTokenID: uint64 - itob - itxn_field ApplicationArgs - frame_dig -4 // rewardRemoved: uint64 - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - -*if17_end: - b *if16_end - -*if16_else: - -*if16_end: - // *if18_condition - // contracts/validatorRegistry.algo.ts:897 - // stakerRemoved - frame_dig -5 // stakerRemoved: boolean - bz *if18_end - - // *if18_consequent - // contracts/validatorRegistry.algo.ts:899 - // this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].totalStakers -= 1 - int 268 // headOffset - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 8 // headOffset - + - int 268 // headOffset - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 8 // headOffset - + - int 2 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - int 1 - - - itob - extract 6 2 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:901 - // removeRet = this.removeFromStakerPoolSet(staker, { - // id: poolKey.id, - // poolId: poolKey.poolId, - // poolAppId: poolKey.poolAppId, - // }) - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - itob - concat - frame_dig -1 // poolKey: ValidatorPoolKey - extract 16 8 - btoi - itob - concat - frame_dig -2 // staker: Address - callsub removeFromStakerPoolSet - frame_bury 1 // removeRet: (bool,bool) - - // contracts/validatorRegistry.algo.ts:906 - // stakerOutOfThisValidator = removeRet[0] - frame_dig 1 // removeRet: (bool,bool) - store 255 // full array - load 255 // full array - int 0 - getbit - frame_bury 2 // stakerOutOfThisValidator: bool - - // contracts/validatorRegistry.algo.ts:907 - // stakerOutOfProtocol = removeRet[1] - frame_dig 1 // removeRet: (bool,bool) - store 255 // full array - load 255 // full array - int 1 - getbit - frame_bury 3 // stakerOutOfProtocol: bool - - // *if19_condition - // contracts/validatorRegistry.algo.ts:909 - // stakerOutOfThisValidator - frame_dig 2 // stakerOutOfThisValidator: bool - bz *if19_end - - // *if19_consequent - // contracts/validatorRegistry.algo.ts:910 - // this.validatorList(poolKey.id).value.state.totalStakers -= 1 - int 244 - dup - int 8 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - int 1 - - - itob - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - -*if19_end: - // *if20_condition - // contracts/validatorRegistry.algo.ts:913 - // stakerOutOfProtocol - frame_dig 3 // stakerOutOfProtocol: bool - bz *if20_end - - // *if20_consequent - // contracts/validatorRegistry.algo.ts:914 - // this.numStakers.value -= 1 - byte 0x6e756d5374616b657273 // "numStakers" - app_global_get - int 1 - - - byte 0x6e756d5374616b657273 // "numStakers" - swap - app_global_put - -*if20_end: - -*if18_end: - retsub - -// findPoolForStaker(uint64,address,uint64)((uint64,uint64,uint64),bool,bool) -*abi_route_findPoolForStaker: - // The ABI return prefix - byte 0x151f7c75 - - // amountToStake: uint64 - txna ApplicationArgs 3 - btoi - - // staker: address - txna ApplicationArgs 2 - dup - len - int 32 - == - - // argument 1 (staker) for findPoolForStaker must be a address - assert - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute findPoolForStaker(uint64,address,uint64)((uint64,uint64,uint64),bool,bool) - callsub findPoolForStaker - concat - log - int 1 - return - -// findPoolForStaker(validatorId: ValidatorIdType, staker: Address, amountToStake: uint64): [ValidatorPoolKey, boolean, boolean] -// -// Finds the pool for a staker based on the provided validator id, staker address, and amount to stake. -// First checks the stakers 'already staked list' for the validator preferring those (adding if possible) then adds -// to new pool if necessary. -// -// @param {ValidatorIdType} validatorId - The id of the validator. -// @param {Address} staker - The address of the staker. -// @param {uint64} amountToStake - The amount to stake. -// @returns {ValidatorPoolKey, boolean, boolean} - The pool for the staker, true/false on whether the staker is 'new' -// to this VALIDATOR, and true/false if staker is new to the protocol. -findPoolForStaker: - proto 3 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 7 - - // contracts/validatorRegistry.algo.ts:935 - // isNewStakerToValidator = true - int 1 - frame_bury 0 // isNewStakerToValidator: bool - - // contracts/validatorRegistry.algo.ts:936 - // isNewStakerToProtocol = true - int 1 - frame_bury 1 // isNewStakerToProtocol: bool - - // contracts/validatorRegistry.algo.ts:944 - // maxPerPool = this.getCurMaxStakePerPool(validatorId) - frame_dig -1 // validatorId: ValidatorIdType - callsub getCurMaxStakePerPool - frame_bury 2 // maxPerPool: uint64 - - // *if21_condition - // contracts/validatorRegistry.algo.ts:947 - // this.stakerPoolSet(staker).exists - byte 0x737073 // "sps" - frame_dig -2 // staker: Address - concat - box_len - swap - pop - bz *if21_end - - // *if21_consequent - // contracts/validatorRegistry.algo.ts:948 - // poolSet = clone(this.stakerPoolSet(staker).value) - byte 0x737073 // "sps" - frame_dig -2 // staker: Address - concat - box_get - - // box value does not exist: this.stakerPoolSet(staker).value - assert - frame_bury 3 // poolSet: (uint64,uint64,uint64)[6] - - // contracts/validatorRegistry.algo.ts:949 - // assert(validatorId !== 0) - frame_dig -1 // validatorId: ValidatorIdType - int 0 - != - assert - - // contracts/validatorRegistry.algo.ts:950 - // for (let i = 0; i < poolSet.length; i += 1) - int 0 - frame_bury 4 // i: uint64 - -*for_3: - // contracts/validatorRegistry.algo.ts:950 - // i < poolSet.length - frame_dig 4 // i: uint64 - int 6 - < - bz *for_3_end - - // *if22_condition - // contracts/validatorRegistry.algo.ts:951 - // globals.opcodeBudget < 300 - global OpcodeBudget - int 300 - < - bz *if22_end - - // *if22_consequent - // contracts/validatorRegistry.algo.ts:952 - // increaseOpcodeBudget() - itxn_begin - int appl - itxn_field TypeEnum - int 0 - itxn_field Fee - byte b64 CoEB // #pragma version 10; int 1 - dup - itxn_field ApprovalProgram - itxn_field ClearStateProgram - int DeleteApplication - itxn_field OnCompletion - itxn_submit - -*if22_end: - // *if23_condition - // contracts/validatorRegistry.algo.ts:954 - // poolSet[i].id === 0 - frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] - frame_dig 4 // i: uint64 - int 24 - * // acc * typeLength - int 0 - + - int 8 - extract3 - btoi - int 0 - == - bz *if23_end - - // *if23_consequent - b *for_3_continue - -*if23_end: - // contracts/validatorRegistry.algo.ts:957 - // isNewStakerToProtocol = false - int 0 - frame_bury 1 // isNewStakerToProtocol: bool - - // *if24_condition - // contracts/validatorRegistry.algo.ts:958 - // poolSet[i].id === validatorId - frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] - frame_dig 4 // i: uint64 - int 24 - * // acc * typeLength - int 0 - + - int 8 - extract3 - btoi - frame_dig -1 // validatorId: ValidatorIdType - == - bz *if24_end - - // *if24_consequent - // contracts/validatorRegistry.algo.ts:960 - // isNewStakerToValidator = false - int 0 - frame_bury 0 // isNewStakerToValidator: bool - - // *if25_condition - // contracts/validatorRegistry.algo.ts:962 - // this.validatorList(validatorId).value.pools[poolSet[i].poolId - 1].totalAlgoStaked + - // amountToStake <= - // maxPerPool - int 268 // headOffset - frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] - frame_dig 4 // i: uint64 - int 24 - * // acc * typeLength - int 8 // headOffset - + - int 8 - extract3 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 10 // headOffset - + - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_dig -3 // amountToStake: uint64 - + - frame_dig 2 // maxPerPool: uint64 - <= - bz *if25_end - - // *if25_consequent - // contracts/validatorRegistry.algo.ts:966 - // return [poolSet[i], isNewStakerToValidator, isNewStakerToProtocol] - frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] - frame_dig 4 // i: uint64 - int 24 - * // acc * typeLength - int 24 - extract3 - byte 0x00 - int 0 - frame_dig 0 // isNewStakerToValidator: bool - setbit - int 1 - frame_dig 1 // isNewStakerToProtocol: bool - setbit - concat - b *findPoolForStaker*return - -*if25_end: - -*if24_end: - -*for_3_continue: - // contracts/validatorRegistry.algo.ts:950 - // i += 1 - frame_dig 4 // i: uint64 - int 1 - + - frame_bury 4 // i: uint64 - b *for_3 - -*for_3_end: - -*if21_end: - // contracts/validatorRegistry.algo.ts:973 - // assert( - // amountToStake >= this.validatorList(validatorId).value.config.minEntryStake, - // 'must stake at least the minimum for this pool', - // ) - frame_dig -3 // amountToStake: uint64 - int 209 - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - >= - - // must stake at least the minimum for this pool - assert - - // contracts/validatorRegistry.algo.ts:979 - // pools = clone(this.validatorList(validatorId).value.pools) - int 268 // headOffset - int 432 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - frame_bury 5 // pools: (uint64,uint16,uint64)[24] - - // contracts/validatorRegistry.algo.ts:980 - // curNumPools = this.validatorList(validatorId).value.state.numPools as uint64 - int 242 - int 2 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 6 // curNumPools: uint64 - - // contracts/validatorRegistry.algo.ts:981 - // for (let i = 0; i < curNumPools; i += 1) - int 0 - frame_bury 7 // i: uint64 - -*for_4: - // contracts/validatorRegistry.algo.ts:981 - // i < curNumPools - frame_dig 7 // i: uint64 - frame_dig 6 // curNumPools: uint64 - < - bz *for_4_end - - // *if26_condition - // contracts/validatorRegistry.algo.ts:982 - // pools[i].totalAlgoStaked + amountToStake <= maxPerPool - frame_dig 5 // pools: (uint64,uint16,uint64)[24] - frame_dig 7 // i: uint64 - int 18 - * // acc * typeLength - int 10 // headOffset - + - int 8 - extract3 - btoi - frame_dig -3 // amountToStake: uint64 - + - frame_dig 2 // maxPerPool: uint64 - <= - bz *if26_end - - // *if26_consequent - // contracts/validatorRegistry.algo.ts:983 - // return [ - // { id: validatorId, poolId: i + 1, poolAppId: pools[i].poolAppId }, - // isNewStakerToValidator, - // isNewStakerToProtocol, - // ] - frame_dig -1 // validatorId: ValidatorIdType - itob - frame_dig 7 // i: uint64 - int 1 - + - itob - concat - frame_dig 5 // pools: (uint64,uint16,uint64)[24] - frame_dig 7 // i: uint64 - int 18 - * // acc * typeLength - int 0 - + - int 8 - extract3 - btoi - itob - concat - byte 0x00 - int 0 - frame_dig 0 // isNewStakerToValidator: bool - setbit - int 1 - frame_dig 1 // isNewStakerToProtocol: bool - setbit - concat - b *findPoolForStaker*return - -*if26_end: - -*for_4_continue: - // contracts/validatorRegistry.algo.ts:981 - // i += 1 - frame_dig 7 // i: uint64 - int 1 - + - frame_bury 7 // i: uint64 - b *for_4 - -*for_4_end: - // contracts/validatorRegistry.algo.ts:991 - // return [{ id: validatorId, poolId: 0, poolAppId: 0 }, isNewStakerToValidator, isNewStakerToProtocol] - frame_dig -1 // validatorId: ValidatorIdType - itob - byte 0x0000000000000000 - concat - byte 0x0000000000000000 - concat - byte 0x00 - int 0 - frame_dig 0 // isNewStakerToValidator: bool - setbit - int 1 - frame_dig 1 // isNewStakerToProtocol: bool - setbit - concat - -*findPoolForStaker*return: - // set the subroutine return value - frame_bury 0 - - // pop all local variables from the stack - popn 7 - retsub - -// movePoolToNode(uint64,uint64,uint64)void -*abi_route_movePoolToNode: - // nodeNum: uint64 - txna ApplicationArgs 3 - btoi - - // poolAppId: uint64 - txna ApplicationArgs 2 - btoi - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute movePoolToNode(uint64,uint64,uint64)void - callsub movePoolToNode - int 1 - return - -// movePoolToNode(validatorId: ValidatorIdType, poolAppId: uint64, nodeNum: uint64): void -// -// Find the specified pool (in any node number) and move it to the specified node. -// The pool account is forced offline if moved so prior node will still run for 320 rounds but -// new key goes online on new node soon after (320 rounds after it goes online) -// No-op if success, asserts if not found or can't move (no space in target) -// [ ONLY OWNER OR MANAGER CAN CHANGE ] -// -// @param {ValidatorIdType} validatorId - The id of the validator. -// @param {uint64} poolAppId -// @param {uint64} nodeNum -movePoolToNode: - proto 3 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 2 - - // contracts/validatorRegistry.algo.ts:1007 - // assert( - // this.txn.sender === this.validatorList(validatorId).value.config.owner || - // this.txn.sender === this.validatorList(validatorId).value.config.manager, - // 'can only be called by owner or manager of validator', - // ) - txn Sender - int 8 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - == - dup - bnz *skip_or3 - txn Sender - int 40 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - == - || - -*skip_or3: - // can only be called by owner or manager of validator - assert - - // contracts/validatorRegistry.algo.ts:1013 - // nodePoolAssignments = clone(this.validatorList(validatorId).value.nodePoolAssignments) - int 900 // headOffset - int 192 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - frame_bury 0 // nodePoolAssignments: ((uint64[3])[8]) - - // contracts/validatorRegistry.algo.ts:1014 - // assert(nodeNum >= 1 && nodeNum <= MAX_NODES, 'node number out of allowable range') - frame_dig -3 // nodeNum: uint64 - int 1 - >= - dup - bz *skip_and1 - frame_dig -3 // nodeNum: uint64 - int 8 - <= - && - -*skip_and1: - // node number out of allowable range - assert - - // contracts/validatorRegistry.algo.ts:1016 - // for (let srcNodeIdx = 0; srcNodeIdx < MAX_NODES; srcNodeIdx += 1) - int 0 - frame_bury 1 // srcNodeIdx: uint64 - -*for_5: - // contracts/validatorRegistry.algo.ts:1016 - // srcNodeIdx < MAX_NODES - frame_dig 1 // srcNodeIdx: uint64 - int 8 - < - bz *for_5_end - - // contracts/validatorRegistry.algo.ts:1017 - // for (let i = 0; i < MAX_POOLS_PER_NODE; i += 1) - int 0 - frame_bury 2 // i: uint64 - -*for_6: - // contracts/validatorRegistry.algo.ts:1017 - // i < MAX_POOLS_PER_NODE - frame_dig 2 // i: uint64 - int 3 - < - bz *for_6_end - - // *if27_condition - // contracts/validatorRegistry.algo.ts:1018 - // nodePoolAssignments.nodes[srcNodeIdx].poolAppIds[i] === poolAppId - frame_dig 0 // nodePoolAssignments: ((uint64[3])[8]) - int 0 - frame_dig 1 // srcNodeIdx: uint64 - int 24 - * // acc * typeLength - + - int 0 - + - frame_dig 2 // i: uint64 - int 8 - * // acc * typeLength - + - int 8 - extract3 - btoi - frame_dig -2 // poolAppId: uint64 - == - bz *if27_end - - // *if27_consequent - // contracts/validatorRegistry.algo.ts:1019 - // assert(nodeNum - 1 !== srcNodeIdx, "can't move to same node") - frame_dig -3 // nodeNum: uint64 - int 1 - - - frame_dig 1 // srcNodeIdx: uint64 - != - - // can't move to same node - assert - - // contracts/validatorRegistry.algo.ts:1021 - // this.validatorList(validatorId).value.nodePoolAssignments.nodes[srcNodeIdx].poolAppIds[i] = 0 - int 900 - frame_dig 1 // srcNodeIdx: uint64 - int 24 - * // acc * typeLength - + - int 0 - + - frame_dig 2 // i: uint64 - int 8 - * // acc * typeLength - + - byte 0x0000000000000000 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:1024 - // sendMethodCall({ - // applicationID: AppID.fromUint64(poolAppId), - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "goOffline()void" - itxn_field ApplicationArgs - - // contracts/validatorRegistry.algo.ts:1025 - // applicationID: AppID.fromUint64(poolAppId) - frame_dig -2 // poolAppId: uint64 - itxn_field ApplicationID - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/validatorRegistry.algo.ts:1029 - // this.addPoolToNode(validatorId, poolAppId, nodeNum) - frame_dig -3 // nodeNum: uint64 - frame_dig -2 // poolAppId: uint64 - frame_dig -1 // validatorId: ValidatorIdType - callsub addPoolToNode - - // contracts/validatorRegistry.algo.ts:1030 - // return - retsub - -*if27_end: - -*for_6_continue: - // contracts/validatorRegistry.algo.ts:1017 - // i += 1 - frame_dig 2 // i: uint64 - int 1 - + - frame_bury 2 // i: uint64 - b *for_6 - -*for_6_end: - -*for_5_continue: - // contracts/validatorRegistry.algo.ts:1016 - // srcNodeIdx += 1 - frame_dig 1 // srcNodeIdx: uint64 - int 1 - + - frame_bury 1 // srcNodeIdx: uint64 - b *for_5 - -*for_5_end: - // couldn't find pool app id in nodes to move - err - retsub - -// emptyTokenRewards(uint64,address)uint64 -*abi_route_emptyTokenRewards: - // The ABI return prefix - byte 0x151f7c75 - - // receiver: address - txna ApplicationArgs 2 - dup - len - int 32 - == - - // argument 0 (receiver) for emptyTokenRewards must be a address - assert - - // validatorId: uint64 - txna ApplicationArgs 1 - btoi - - // execute emptyTokenRewards(uint64,address)uint64 - callsub emptyTokenRewards - itob - concat - log - int 1 - return - -// emptyTokenRewards(validatorId: ValidatorIdType, receiver: Address): uint64 -// -// Sends the reward tokens held in pool 1 to specified receiver. -// This is intended to be used by the owner when they want to get reward tokens 'back' which they sent to -// the first pool (likely because validator is sunsetting. Any tokens currently 'reserved' for stakers to claim will -// NOT be sent as they must be held back for stakers to later claim. -// [ ONLY OWNER CAN CALL] -// -// @param {ValidatorIdType} validatorId - The id of the validator. -// @param {Address} receiver - the account to send the tokens to (must already be opted-in to the reward token) -// @returns {uint64} the amount of reward token sent -emptyTokenRewards: - proto 2 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 3 - - // contracts/validatorRegistry.algo.ts:1049 - // assert( - // this.txn.sender === this.validatorList(validatorId).value.config.owner, - // 'can only be called by validator owner', - // ) - txn Sender - int 8 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - == - - // can only be called by validator owner - assert - - // contracts/validatorRegistry.algo.ts:1053 - // rewardTokenId = this.validatorList(validatorId).value.config.rewardTokenId - int 153 - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 0 // rewardTokenId: uint64 - - // contracts/validatorRegistry.algo.ts:1054 - // rewardTokenHeldBack = this.validatorList(validatorId).value.state.rewardTokenHeldBack - int 260 - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 1 // rewardTokenHeldBack: uint64 - - // contracts/validatorRegistry.algo.ts:1055 - // assert(rewardTokenId !== 0, "this validator doesn't have a reward token defined") - frame_dig 0 // rewardTokenId: uint64 - int 0 - != - - // this validator doesn't have a reward token defined - assert - - // contracts/validatorRegistry.algo.ts:1056 - // poolOneAppId = AppID.fromUint64(this.validatorList(validatorId).value.pools[0].poolAppId) - int 268 - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 2 // poolOneAppId: uint64 - - // contracts/validatorRegistry.algo.ts:1058 - // tokenRewardBal = - // poolOneAppId.address.assetBalance(AssetID.fromUint64(rewardTokenId)) - rewardTokenHeldBack - frame_dig 2 // poolOneAppId: uint64 - app_params_get AppAddress - pop - frame_dig 0 // rewardTokenId: uint64 - asset_holding_get AssetBalance - pop - frame_dig 1 // rewardTokenHeldBack: uint64 - - - frame_bury 3 // tokenRewardBal: uint64 - - // contracts/validatorRegistry.algo.ts:1062 - // sendMethodCall({ - // applicationID: poolOneAppId, - // methodArgs: [receiver, rewardTokenId, tokenRewardBal], - // }) - itxn_begin - int appl - itxn_field TypeEnum - method "payTokenReward(address,uint64,uint64)void" - itxn_field ApplicationArgs - - // contracts/validatorRegistry.algo.ts:1063 - // applicationID: poolOneAppId - frame_dig 2 // poolOneAppId: uint64 - itxn_field ApplicationID - - // contracts/validatorRegistry.algo.ts:1064 - // methodArgs: [receiver, rewardTokenId, tokenRewardBal] - frame_dig -2 // receiver: Address - itxn_field ApplicationArgs - frame_dig 0 // rewardTokenId: uint64 - itob - itxn_field ApplicationArgs - frame_dig 3 // tokenRewardBal: uint64 - itob - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/validatorRegistry.algo.ts:1066 - // assert( - // poolOneAppId.address.assetBalance(AssetID.fromUint64(rewardTokenId)) === rewardTokenHeldBack, - // 'balance of remaining reward tokens should match the held back amount', - // ) - frame_dig 2 // poolOneAppId: uint64 - app_params_get AppAddress - pop - frame_dig 0 // rewardTokenId: uint64 - asset_holding_get AssetBalance - pop - frame_dig 1 // rewardTokenHeldBack: uint64 - == - - // balance of remaining reward tokens should match the held back amount - assert - - // contracts/validatorRegistry.algo.ts:1070 - // return tokenRewardBal - frame_dig 3 // tokenRewardBal: uint64 - - // set the subroutine return value - frame_bury 0 - - // pop all local variables from the stack - popn 3 - retsub - -// verifyPoolKeyCaller(poolKey: ValidatorPoolKey): void -// -// Logs the addition of a new validator to the system, its initial owner and manager -// -// -// verifyPoolKeyCaller verifies the passed in key (from a staking pool calling us to update metrics) is valid -// and matches the information we have in our state. 'Fake' pools could call us to update our data, but they -// can't fake the ids and most importantly application id(!) of the caller that has to match. -verifyPoolKeyCaller: - proto 1 0 - - // contracts/validatorRegistry.algo.ts:1168 - // assert(this.validatorList(poolKey.id).exists, "the specified validator id isn't valid") - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - box_len - swap - pop - - // the specified validator id isn't valid - assert - - // contracts/validatorRegistry.algo.ts:1169 - // assert(poolKey.poolId <= MAX_POOLS, 'pool id not in valid range') - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 24 - <= - - // pool id not in valid range - assert - - // contracts/validatorRegistry.algo.ts:1170 - // assert( - // poolKey.poolId > 0 && (poolKey.poolId as uint16) <= this.validatorList(poolKey.id).value.state.numPools, - // 'pool id outside of range of pools created for this validator', - // ) - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 0 - > - dup - bz *skip_and2 - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 242 - int 2 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - <= - && - -*skip_and2: - // pool id outside of range of pools created for this validator - assert - - // contracts/validatorRegistry.algo.ts:1176 - // assert( - // poolKey.poolAppId === this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].poolAppId, - // "The passed in app id doesn't match the passed in ids", - // ) - frame_dig -1 // poolKey: ValidatorPoolKey - extract 16 8 - btoi - int 268 // headOffset - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 0 - + - int 8 - byte 0x76 // "v" - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - == - - // The passed in app id doesn't match the passed in ids - assert - - // contracts/validatorRegistry.algo.ts:1181 - // assert(this.txn.sender === AppID.fromUint64(poolKey.poolAppId).address) - txn Sender - frame_dig -1 // poolKey: ValidatorPoolKey - extract 16 8 - btoi - app_params_get AppAddress - pop - == - assert - - // contracts/validatorRegistry.algo.ts:1183 - // assert(poolKey.id === (AppID.fromUint64(poolKey.poolAppId).globalState('validatorId') as uint64)) - frame_dig -1 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - frame_dig -1 // poolKey: ValidatorPoolKey - extract 16 8 - btoi - byte 0x76616c696461746f724964 // "validatorId" - app_global_get_ex - - // global state value does not exist: AppID.fromUint64(poolKey.poolAppId).globalState('validatorId') - assert - == - assert - - // contracts/validatorRegistry.algo.ts:1184 - // assert(poolKey.poolId === (AppID.fromUint64(poolKey.poolAppId).globalState('poolId') as uint64)) - frame_dig -1 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - frame_dig -1 // poolKey: ValidatorPoolKey - extract 16 8 - btoi - byte 0x706f6f6c4964 // "poolId" - app_global_get_ex - - // global state value does not exist: AppID.fromUint64(poolKey.poolAppId).globalState('poolId') - assert - == - assert - retsub - -// reverifyNFDOwnership(validatorId: ValidatorIdType): void -// -// This method verifies the ownership of NFD (Named Function Data) by a validator. -// If the ownership is no longer valid, it removes the NFD from the validator's configuration. -// -// @param {ValidatorIdType} validatorId - The id of the validator whose data should be re-evaluated. -reverifyNFDOwnership: - proto 1 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dup - - // contracts/validatorRegistry.algo.ts:1194 - // validatorConfig = this.validatorList(validatorId).value.config - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - frame_bury 0 // storage key//validatorConfig - - // *if28_condition - // contracts/validatorRegistry.algo.ts:1195 - // validatorConfig.nfdForInfo !== 0 - int 72 - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - int 0 - != - bz *if28_end - - // *if28_consequent - // contracts/validatorRegistry.algo.ts:1198 - // nfdOwner = AppID.fromUint64(validatorConfig.nfdForInfo).globalState('i.owner.a') as Address - int 72 - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - byte 0x692e6f776e65722e61 // "i.owner.a" - app_global_get_ex - - // global state value does not exist: AppID.fromUint64(validatorConfig.nfdForInfo).globalState('i.owner.a') - assert - frame_bury 1 // nfdOwner: address - - // *if29_condition - // contracts/validatorRegistry.algo.ts:1200 - // validatorConfig.owner !== nfdOwner && validatorConfig.manager !== nfdOwner - int 8 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - frame_dig 1 // nfdOwner: address - != - dup - bz *skip_and3 - int 40 - int 32 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - frame_dig 1 // nfdOwner: address - != - && - -*skip_and3: - bz *if29_end - - // *if29_consequent - // contracts/validatorRegistry.algo.ts:1202 - // this.validatorList(validatorId).value.config.nfdForInfo = 0 - int 72 - byte 0x0000000000000000 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - -*if29_end: - -*if28_end: - retsub - -// validateConfig(config: ValidatorConfig): void -validateConfig: - proto 1 0 - - // contracts/validatorRegistry.algo.ts:1209 - // assert( - // config.entryGatingType >= GATING_TYPE_NONE && config.entryGatingType <= GATING_TYPE_CONST_MAX, - // 'gating type not valid', - // ) - frame_dig -1 // config: ValidatorConfig - extract 80 1 - btoi - int 0 - >= - dup - bz *skip_and4 - frame_dig -1 // config: ValidatorConfig - extract 80 1 - btoi - int 4 - <= - && - -*skip_and4: - // gating type not valid - assert - - // contracts/validatorRegistry.algo.ts:1213 - // assert( - // config.epochRoundLength >= MIN_EPOCH_LENGTH && config.epochRoundLength <= MAX_EPOCH_LENGTH, - // 'epoch length not in allowable range', - // ) - frame_dig -1 // config: ValidatorConfig - extract 169 4 - btoi - int 1 - >= - dup - bz *skip_and5 - frame_dig -1 // config: ValidatorConfig - extract 169 4 - btoi - int 1000000 - <= - && - -*skip_and5: - // epoch length not in allowable range - assert - - // contracts/validatorRegistry.algo.ts:1217 - // assert( - // config.percentToValidator >= MIN_PCT_TO_VALIDATOR && config.percentToValidator <= MAX_PCT_TO_VALIDATOR, - // 'commission percentage not valid', - // ) - frame_dig -1 // config: ValidatorConfig - extract 173 4 - btoi - int 0 - >= - dup - bz *skip_and6 - frame_dig -1 // config: ValidatorConfig - extract 173 4 - btoi - int 1000000 - <= - && - -*skip_and6: - // commission percentage not valid - assert - - // *if30_condition - // contracts/validatorRegistry.algo.ts:1221 - // config.percentToValidator !== 0 - frame_dig -1 // config: ValidatorConfig - extract 173 4 - btoi - int 0 - != - bz *if30_end - - // *if30_consequent - // contracts/validatorRegistry.algo.ts:1222 - // assert( - // config.validatorCommissionAddress !== Address.zeroAddress, - // 'validatorCommissionAddress must be set if percent to validator is not 0', - // ) - frame_dig -1 // config: ValidatorConfig - extract 177 32 - global ZeroAddress - != - - // validatorCommissionAddress must be set if percent to validator is not 0 - assert - -*if30_end: - // contracts/validatorRegistry.algo.ts:1227 - // assert(config.minEntryStake >= MIN_ALGO_STAKE_PER_POOL, 'staking pool must have minimum entry of 1 algo') - frame_dig -1 // config: ValidatorConfig - extract 209 8 - btoi - int 1000000 - >= - - // staking pool must have minimum entry of 1 algo - assert - - // contracts/validatorRegistry.algo.ts:1229 - // assert( - // config.poolsPerNode > 0 && config.poolsPerNode <= MAX_POOLS_PER_NODE, - // 'number of pools per node exceeds allowed number', - // ) - frame_dig -1 // config: ValidatorConfig - extract 225 1 - btoi - int 0 - > - dup - bz *skip_and7 - frame_dig -1 // config: ValidatorConfig - extract 225 1 - btoi - int 3 - <= - && - -*skip_and7: - // number of pools per node exceeds allowed number - assert - - // *if31_condition - // contracts/validatorRegistry.algo.ts:1233 - // config.sunsettingOn !== 0 - frame_dig -1 // config: ValidatorConfig - extract 226 8 - btoi - int 0 - != - bz *if31_end - - // *if31_consequent - // contracts/validatorRegistry.algo.ts:1234 - // assert(config.sunsettingOn > globals.latestTimestamp, 'sunsettingOn must be later than now if set') - frame_dig -1 // config: ValidatorConfig - extract 226 8 - btoi - global LatestTimestamp - > - - // sunsettingOn must be later than now if set - assert - -*if31_end: - retsub - -// callPoolAddStake(stakedAmountPayment: PayTxn, poolKey: ValidatorPoolKey, mbrAmtPaid: uint64, isNewStakerToValidator: boolean, isNewStakerToProtocol: boolean): void -// -// Adds a stakers amount of algo to a validator pool, transferring the algo we received from them (already verified -// by our caller) to the staking pool account, and then telling it about the amount being added for the specified -// staker. -// -// @param {PayTxn} stakedAmountPayment - payment coming from staker to place into a pool -// @param {ValidatorPoolKey} poolKey - The key of the validator pool. -// @param {uint64} mbrAmtPaid - Amount the user is leaving behind in the validator to pay for their staker MBR cost -// @param {boolean} isNewStakerToValidator - if this is a new, first-time staker to the validator -// @param {boolean} isNewStakerToProtocol - if this is a new, first-time staker to the protocol -callPoolAddStake: - proto 5 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 2 - - // contracts/validatorRegistry.algo.ts:1256 - // poolAppId = this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].poolAppId - int 268 // headOffset - frame_dig -2 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 0 - + - int 8 - byte 0x76 // "v" - frame_dig -2 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - frame_bury 0 // poolAppId: uint64 - - // contracts/validatorRegistry.algo.ts:1260 - // sendMethodCall({ - // applicationID: AppID.fromUint64(poolAppId), - // methodArgs: [ - // // ======= - // // THIS IS A SEND of the amount received right back out and into the staking pool contract account. - // { amount: stakedAmountPayment.amount - mbrAmtPaid, receiver: AppID.fromUint64(poolAppId).address }, - // // ======= - // stakedAmountPayment.sender, - // ], - // }) - itxn_begin - int pay - itxn_field TypeEnum - - // contracts/validatorRegistry.algo.ts:1265 - // amount: stakedAmountPayment.amount - mbrAmtPaid - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Amount - frame_dig -3 // mbrAmtPaid: uint64 - - - itxn_field Amount - - // contracts/validatorRegistry.algo.ts:1265 - // receiver: AppID.fromUint64(poolAppId).address - frame_dig 0 // poolAppId: uint64 - app_params_get AppAddress - pop - itxn_field Receiver - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - itxn_next - int appl - itxn_field TypeEnum - method "addStake(pay,address)uint64" - itxn_field ApplicationArgs - - // contracts/validatorRegistry.algo.ts:1261 - // applicationID: AppID.fromUint64(poolAppId) - frame_dig 0 // poolAppId: uint64 - itxn_field ApplicationID - - // contracts/validatorRegistry.algo.ts:1262 - // methodArgs: [ - // // ======= - // // THIS IS A SEND of the amount received right back out and into the staking pool contract account. - // { amount: stakedAmountPayment.amount - mbrAmtPaid, receiver: AppID.fromUint64(poolAppId).address }, - // // ======= - // stakedAmountPayment.sender, - // ] - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Sender - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - itxn NumLogs - int 1 - - - itxnas Logs - extract 4 0 - btoi - - // *if32_condition - // contracts/validatorRegistry.algo.ts:1270 - // globals.opcodeBudget < 500 - global OpcodeBudget - int 500 - < - bz *if32_end - - // *if32_consequent - // contracts/validatorRegistry.algo.ts:1271 - // increaseOpcodeBudget() - itxn_begin - int appl - itxn_field TypeEnum - int 0 - itxn_field Fee - byte b64 CoEB // #pragma version 10; int 1 - dup - itxn_field ApprovalProgram - itxn_field ClearStateProgram - int DeleteApplication - itxn_field OnCompletion - itxn_submit - -*if32_end: - // contracts/validatorRegistry.algo.ts:1275 - // poolNumStakers = AppID.fromUint64(poolAppId).globalState('numStakers') as uint64 - frame_dig 0 // poolAppId: uint64 - byte 0x6e756d5374616b657273 // "numStakers" - app_global_get_ex - - // global state value does not exist: AppID.fromUint64(poolAppId).globalState('numStakers') - assert - frame_bury 1 // poolNumStakers: uint64 - - // contracts/validatorRegistry.algo.ts:1276 - // poolAlgoStaked = AppID.fromUint64(poolAppId).globalState('staked') as uint64 - frame_dig 0 // poolAppId: uint64 - byte 0x7374616b6564 // "staked" - app_global_get_ex - - // global state value does not exist: AppID.fromUint64(poolAppId).globalState('staked') - assert - frame_bury 2 // poolAlgoStaked: uint64 - - // contracts/validatorRegistry.algo.ts:1277 - // this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].totalStakers = poolNumStakers as uint16 - int 268 // headOffset - frame_dig -2 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 8 // headOffset - + - frame_dig 1 // poolNumStakers: uint64 - itob - extract 6 2 - byte 0x76 // "v" - frame_dig -2 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:1278 - // this.validatorList(poolKey.id).value.pools[poolKey.poolId - 1].totalAlgoStaked = poolAlgoStaked - int 268 // headOffset - frame_dig -2 // poolKey: ValidatorPoolKey - extract 8 8 - btoi - int 1 - - - int 18 - * // acc * typeLength - + - int 10 // headOffset - + - frame_dig 2 // poolAlgoStaked: uint64 - itob - byte 0x76 // "v" - frame_dig -2 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - - // *if33_condition - // contracts/validatorRegistry.algo.ts:1281 - // isNewStakerToValidator - frame_dig -4 // isNewStakerToValidator: boolean - bz *if33_end - - // *if33_consequent - // contracts/validatorRegistry.algo.ts:1282 - // this.validatorList(poolKey.id).value.state.totalStakers += 1 - int 244 - dup - int 8 - byte 0x76 // "v" - frame_dig -2 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - int 1 - + - itob - byte 0x76 // "v" - frame_dig -2 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - -*if33_end: - // *if34_condition - // contracts/validatorRegistry.algo.ts:1284 - // isNewStakerToProtocol - frame_dig -5 // isNewStakerToProtocol: boolean - bz *if34_end - - // *if34_consequent - // contracts/validatorRegistry.algo.ts:1285 - // this.numStakers.value += 1 - byte 0x6e756d5374616b657273 // "numStakers" - app_global_get - int 1 - + - byte 0x6e756d5374616b657273 // "numStakers" - swap - app_global_put - -*if34_end: - // contracts/validatorRegistry.algo.ts:1287 - // this.validatorList(poolKey.id).value.state.totalAlgoStaked += stakedAmountPayment.amount - mbrAmtPaid - int 252 - dup - int 8 - byte 0x76 // "v" - frame_dig -2 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_extract - btoi - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Amount - frame_dig -3 // mbrAmtPaid: uint64 - - - + - itob - byte 0x76 // "v" - frame_dig -2 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:1288 - // this.totalAlgoStaked.value += stakedAmountPayment.amount - mbrAmtPaid - byte 0x7374616b6564 // "staked" - app_global_get - frame_dig -1 // stakedAmountPayment: PayTxn - gtxns Amount - frame_dig -3 // mbrAmtPaid: uint64 - - - + - byte 0x7374616b6564 // "staked" - swap - app_global_put - retsub - -// updateStakerPoolSet(staker: Address, poolKey: ValidatorPoolKey): void -updateStakerPoolSet: - proto 2 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 2 - - // contracts/validatorRegistry.algo.ts:1292 - // assert(this.stakerPoolSet(staker).exists) - byte 0x737073 // "sps" - frame_dig -1 // staker: Address - concat - box_len - swap - pop - assert - - // contracts/validatorRegistry.algo.ts:1294 - // poolSet = clone(this.stakerPoolSet(staker).value) - byte 0x737073 // "sps" - frame_dig -1 // staker: Address - concat - box_get - - // box value does not exist: this.stakerPoolSet(staker).value - assert - frame_bury 0 // poolSet: (uint64,uint64,uint64)[6] - - // contracts/validatorRegistry.algo.ts:1295 - // firstEmpty = 0 - int 0 - frame_bury 1 // firstEmpty: uint64 - - // contracts/validatorRegistry.algo.ts:1296 - // for (let i = 0; i < this.stakerPoolSet(staker).value.length; i += 1) - int 0 - frame_bury 2 // i: uint64 - -*for_7: - // contracts/validatorRegistry.algo.ts:1296 - // i < this.stakerPoolSet(staker).value.length - frame_dig 2 // i: uint64 - int 6 - < - bz *for_7_end - - // *if35_condition - // contracts/validatorRegistry.algo.ts:1297 - // poolSet[i] === poolKey - frame_dig 0 // poolSet: (uint64,uint64,uint64)[6] - frame_dig 2 // i: uint64 - int 24 - * // acc * typeLength - int 24 - extract3 - frame_dig -2 // poolKey: ValidatorPoolKey - == - bz *if35_end - - // *if35_consequent - // contracts/validatorRegistry.algo.ts:1299 - // return - retsub - -*if35_end: - // *if36_condition - // contracts/validatorRegistry.algo.ts:1301 - // firstEmpty === 0 && poolSet[i].id === 0 - frame_dig 1 // firstEmpty: uint64 - int 0 - == - dup - bz *skip_and8 - frame_dig 0 // poolSet: (uint64,uint64,uint64)[6] - frame_dig 2 // i: uint64 - int 24 - * // acc * typeLength - int 0 - + - int 8 - extract3 - btoi - int 0 - == - && - -*skip_and8: - bz *if36_end - - // *if36_consequent - // contracts/validatorRegistry.algo.ts:1302 - // firstEmpty = i + 1 - frame_dig 2 // i: uint64 - int 1 - + - frame_bury 1 // firstEmpty: uint64 - -*if36_end: - -*for_7_continue: - // contracts/validatorRegistry.algo.ts:1296 - // i += 1 - frame_dig 2 // i: uint64 - int 1 - + - frame_bury 2 // i: uint64 - b *for_7 - -*for_7_end: - // *if37_condition - // contracts/validatorRegistry.algo.ts:1305 - // firstEmpty === 0 - frame_dig 1 // firstEmpty: uint64 - int 0 - == - bz *if37_end - - // *if37_consequent - // No empty slot available in the staker pool set - err - -*if37_end: - // contracts/validatorRegistry.algo.ts:1308 - // this.stakerPoolSet(staker).value[firstEmpty - 1] = poolKey - frame_dig 1 // firstEmpty: uint64 - int 1 - - - int 24 - * // acc * typeLength - frame_dig -2 // poolKey: ValidatorPoolKey - byte 0x737073 // "sps" - frame_dig -1 // staker: Address - concat - cover 2 - box_replace - retsub - -// removeFromStakerPoolSet(staker: Address, poolKey: ValidatorPoolKey): [boolean, boolean] -// -// Removes a pool key from the staker's active pool set - fails if not found (!) -// -// @param {Address} staker - The address of the staker. -// @param {ValidatorPoolKey} poolKey - The pool key they should be stored in -// -// @return [boolean, boolean] [is the staker gone from ALL pools of the given VALIDATOR, and is staker gone from ALL pools] -removeFromStakerPoolSet: - proto 2 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 4 - - // contracts/validatorRegistry.algo.ts:1321 - // inSameValidatorPoolCount = 0 - int 0 - frame_bury 0 // inSameValidatorPoolCount: uint64 - - // contracts/validatorRegistry.algo.ts:1322 - // inAnyPoolCount = 0 - int 0 - frame_bury 1 // inAnyPoolCount: uint64 - - // contracts/validatorRegistry.algo.ts:1323 - // found = false - int 0 - frame_bury 2 // found: bool - - // contracts/validatorRegistry.algo.ts:1325 - // poolSet = clone(this.stakerPoolSet(staker).value) - byte 0x737073 // "sps" - frame_dig -1 // staker: Address - concat - box_get - - // box value does not exist: this.stakerPoolSet(staker).value - assert - frame_bury 3 // poolSet: (uint64,uint64,uint64)[6] - - // contracts/validatorRegistry.algo.ts:1326 - // for (let i = 0; i < this.stakerPoolSet(staker).value.length; i += 1) - int 0 - frame_bury 4 // i: uint64 - -*for_8: - // contracts/validatorRegistry.algo.ts:1326 - // i < this.stakerPoolSet(staker).value.length - frame_dig 4 // i: uint64 - int 6 - < - bz *for_8_end - - // *if38_condition - // contracts/validatorRegistry.algo.ts:1327 - // poolSet[i].id === 0 - frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] - frame_dig 4 // i: uint64 - int 24 - * // acc * typeLength - int 0 - + - int 8 - extract3 - btoi - int 0 - == - bz *if38_end - - // *if38_consequent - b *for_8_continue - -*if38_end: - // contracts/validatorRegistry.algo.ts:1330 - // inAnyPoolCount += 1 - frame_dig 1 // inAnyPoolCount: uint64 - int 1 - + - frame_bury 1 // inAnyPoolCount: uint64 - - // *if39_condition - // contracts/validatorRegistry.algo.ts:1331 - // poolSet[i].id === poolKey.id - frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] - frame_dig 4 // i: uint64 - int 24 - * // acc * typeLength - int 0 - + - int 8 - extract3 - btoi - frame_dig -2 // poolKey: ValidatorPoolKey - extract 0 8 - btoi - == - bz *if39_end - - // *if39_consequent - // *if40_condition - // contracts/validatorRegistry.algo.ts:1332 - // poolSet[i] === poolKey - frame_dig 3 // poolSet: (uint64,uint64,uint64)[6] - frame_dig 4 // i: uint64 - int 24 - * // acc * typeLength - int 24 - extract3 - frame_dig -2 // poolKey: ValidatorPoolKey - == - bz *if40_else - - // *if40_consequent - // contracts/validatorRegistry.algo.ts:1333 - // found = true - int 1 - frame_bury 2 // found: bool - - // contracts/validatorRegistry.algo.ts:1335 - // this.stakerPoolSet(staker).value[i] = { id: 0, poolId: 0, poolAppId: 0 } - frame_dig 4 // i: uint64 - int 24 - * // acc * typeLength - byte 0x000000000000000000000000000000000000000000000000 - byte 0x737073 // "sps" - frame_dig -1 // staker: Address - concat - cover 2 - box_replace - b *if40_end - -*if40_else: - // contracts/validatorRegistry.algo.ts:1337 - // inSameValidatorPoolCount += 1 - frame_dig 0 // inSameValidatorPoolCount: uint64 - int 1 - + - frame_bury 0 // inSameValidatorPoolCount: uint64 - -*if40_end: - -*if39_end: - -*for_8_continue: - // contracts/validatorRegistry.algo.ts:1326 - // i += 1 - frame_dig 4 // i: uint64 - int 1 - + - frame_bury 4 // i: uint64 - b *for_8 - -*for_8_end: - // *if41_condition - // contracts/validatorRegistry.algo.ts:1341 - // !found - frame_dig 2 // found: bool - ! - bz *if41_end - - // *if41_consequent - // No matching slot found when told to remove a pool from the stakers set - err - -*if41_end: - // contracts/validatorRegistry.algo.ts:1345 - // return [inSameValidatorPoolCount === 0, inAnyPoolCount === 0] - byte 0x00 - int 0 - frame_dig 0 // inSameValidatorPoolCount: uint64 - int 0 - == - setbit - int 1 - frame_dig 1 // inAnyPoolCount: uint64 - int 0 - == - setbit - - // set the subroutine return value - frame_bury 0 - - // pop all local variables from the stack - popn 4 - retsub - -// addPoolToNode(validatorId: ValidatorIdType, poolAppId: uint64, nodeNum: uint64): void -addPoolToNode: - proto 3 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 2 - - // contracts/validatorRegistry.algo.ts:1349 - // nodePoolAssignments = clone(this.validatorList(validatorId).value.nodePoolAssignments) - int 900 // headOffset - int 192 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - frame_bury 0 // nodePoolAssignments: ((uint64[3])[8]) - - // contracts/validatorRegistry.algo.ts:1350 - // maxPoolsPerNodeForThisValidator = this.validatorList(validatorId).value.config.poolsPerNode as uint64 - int 225 - int 1 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 1 // maxPoolsPerNodeForThisValidator: uint64 - - // contracts/validatorRegistry.algo.ts:1352 - // assert(nodeNum >= 1 && nodeNum <= MAX_NODES, 'node number not in valid range') - frame_dig -3 // nodeNum: uint64 - int 1 - >= - dup - bz *skip_and9 - frame_dig -3 // nodeNum: uint64 - int 8 - <= - && - -*skip_and9: - // node number not in valid range - assert - - // contracts/validatorRegistry.algo.ts:1354 - // for (let i = 0; i < maxPoolsPerNodeForThisValidator; i += 1) - int 0 - frame_bury 2 // i: uint64 - -*for_9: - // contracts/validatorRegistry.algo.ts:1354 - // i < maxPoolsPerNodeForThisValidator - frame_dig 2 // i: uint64 - frame_dig 1 // maxPoolsPerNodeForThisValidator: uint64 - < - bz *for_9_end - - // *if42_condition - // contracts/validatorRegistry.algo.ts:1355 - // nodePoolAssignments.nodes[nodeNum - 1].poolAppIds[i] === 0 - frame_dig 0 // nodePoolAssignments: ((uint64[3])[8]) - int 0 - frame_dig -3 // nodeNum: uint64 - int 1 - - - int 24 - * // acc * typeLength - + - int 0 - + - frame_dig 2 // i: uint64 - int 8 - * // acc * typeLength - + - int 8 - extract3 - btoi - int 0 - == - bz *if42_end - - // *if42_consequent - // contracts/validatorRegistry.algo.ts:1357 - // this.validatorList(validatorId).value.nodePoolAssignments.nodes[nodeNum - 1].poolAppIds[i] = poolAppId - int 900 - frame_dig -3 // nodeNum: uint64 - int 1 - - - int 24 - * // acc * typeLength - + - int 0 - + - frame_dig 2 // i: uint64 - int 8 - * // acc * typeLength - + - frame_dig -2 // poolAppId: uint64 - itob - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_replace - - // contracts/validatorRegistry.algo.ts:1358 - // return - retsub - -*if42_end: - -*for_9_continue: - // contracts/validatorRegistry.algo.ts:1354 - // i += 1 - frame_dig 2 // i: uint64 - int 1 - + - frame_bury 2 // i: uint64 - b *for_9 - -*for_9_end: - // no available space in specified node for this pool - err - retsub - -// doesStakerMeetGating(validatorId: ValidatorIdType, valueToVerify: uint64): void -// -// Checks if a staker meets the gating requirements specified by the validator. -// -// @param {ValidatorIdType} validatorId - The id of the validator. -// @param {uint64} valueToVerify - The value to verify against the gating requirements. -// @returns {void} or asserts if requirements not met. -doesStakerMeetGating: - proto 2 0 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 8 - - // contracts/validatorRegistry.algo.ts:1372 - // type = this.validatorList(validatorId).value.config.entryGatingType - int 80 - int 1 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 0 // type: uint8 - - // *if43_condition - // contracts/validatorRegistry.algo.ts:1373 - // type === GATING_TYPE_NONE - frame_dig 0 // type: uint8 - int 0 - == - bz *if43_end - - // *if43_consequent - // contracts/validatorRegistry.algo.ts:1374 - // return - retsub - -*if43_end: - // contracts/validatorRegistry.algo.ts:1376 - // staker = this.txn.sender - txn Sender - frame_bury 1 // staker: address - - // contracts/validatorRegistry.algo.ts:1377 - // config = clone(this.validatorList(validatorId).value.config) - int 0 - int 242 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - frame_bury 2 // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - - // *if44_condition - // contracts/validatorRegistry.algo.ts:1381 - // type === GATING_TYPE_ASSETS_CREATED_BY || - // type === GATING_TYPE_ASSET_ID || - // type === GATING_TYPE_CREATED_BY_NFD_ADDRESSES - frame_dig 0 // type: uint8 - int 1 - == - dup - bnz *skip_or4 - frame_dig 0 // type: uint8 - int 2 - == - || - -*skip_or4: - dup - bnz *skip_or5 - frame_dig 0 // type: uint8 - int 3 - == - || - -*skip_or5: - bz *if44_end - - // *if44_consequent - // contracts/validatorRegistry.algo.ts:1385 - // assert(valueToVerify !== 0) - frame_dig -2 // valueToVerify: uint64 - int 0 - != - assert - - // contracts/validatorRegistry.algo.ts:1386 - // balRequired = this.validatorList(validatorId).value.config.gatingAssetMinBalance - int 145 - int 8 - byte 0x76 // "v" - frame_dig -1 // validatorId: ValidatorIdType - itob - concat - cover 2 - box_extract - btoi - frame_bury 3 // balRequired: uint64 - - // *if45_condition - // contracts/validatorRegistry.algo.ts:1387 - // balRequired === 0 - frame_dig 3 // balRequired: uint64 - int 0 - == - bz *if45_end - - // *if45_consequent - // contracts/validatorRegistry.algo.ts:1388 - // balRequired = 1 - int 1 - frame_bury 3 // balRequired: uint64 - -*if45_end: - // contracts/validatorRegistry.algo.ts:1390 - // assert( - // staker.assetBalance(AssetID.fromUint64(valueToVerify)) >= balRequired, - // 'must have required minimum balance of validator defined token to add stake', - // ) - frame_dig 1 // staker: address - frame_dig -2 // valueToVerify: uint64 - asset_holding_get AssetBalance - pop - frame_dig 3 // balRequired: uint64 - >= - - // must have required minimum balance of validator defined token to add stake - assert - -*if44_end: - // *if46_condition - // contracts/validatorRegistry.algo.ts:1395 - // type === GATING_TYPE_ASSETS_CREATED_BY - frame_dig 0 // type: uint8 - int 1 - == - bz *if46_end - - // *if46_consequent - // contracts/validatorRegistry.algo.ts:1396 - // assert( - // AssetID.fromUint64(valueToVerify).creator === config.entryGatingAddress, - // 'specified asset must be created by creator that the validator defined as a requirement to stake', - // ) - frame_dig -2 // valueToVerify: uint64 - asset_params_get AssetCreator - pop - frame_dig 2 // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 81 32 - == - - // specified asset must be created by creator that the validator defined as a requirement to stake - assert - -*if46_end: - // *if47_condition - // contracts/validatorRegistry.algo.ts:1401 - // type === GATING_TYPE_ASSET_ID - frame_dig 0 // type: uint8 - int 2 - == - bz *if47_end - - // *if47_consequent - // contracts/validatorRegistry.algo.ts:1402 - // assert(valueToVerify !== 0) - frame_dig -2 // valueToVerify: uint64 - int 0 - != - assert - - // contracts/validatorRegistry.algo.ts:1403 - // found = false - int 0 - frame_bury 4 // found: bool - - // contracts/validatorRegistry.algo.ts:1404 - // config.entryGatingAssets - frame_dig 2 // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 113 32 - dup - frame_bury 5 // copy of the array we are iterating over - extract 0 8 - btoi - frame_bury 6 // assetId: uint64 - int 0 - frame_bury 7 // the offset we are extracting the next element from - -*forOf_0: - // *if48_condition - // contracts/validatorRegistry.algo.ts:1405 - // valueToVerify === assetId - frame_dig -2 // valueToVerify: uint64 - frame_dig 6 // assetId: uint64 - == - bz *if48_end - - // *if48_consequent - // contracts/validatorRegistry.algo.ts:1406 - // found = true - int 1 - frame_bury 4 // found: bool - b *forOf_0_end - -*if48_end: - -*forOf_0_continue: - // increment offset and loop if not out of bounds - frame_dig 7 // the offset we are extracting the next element from - int 8 - + - dup - int 32 // offset of last element - < - bz *forOf_0_end - frame_bury 7 // the offset we are extracting the next element from - frame_dig 5 // copy of the array we are iterating over - frame_dig 7 // the offset we are extracting the next element from - int 8 - extract - btoi - frame_bury 6 // assetId: uint64 - b *forOf_0 - -*forOf_0_end: - // contracts/validatorRegistry.algo.ts:1410 - // assert(found, 'specified asset must be identical to the asset id defined as a requirement to stake') - frame_dig 4 // found: bool - - // specified asset must be identical to the asset id defined as a requirement to stake - assert - -*if47_end: - // *if49_condition - // contracts/validatorRegistry.algo.ts:1412 - // type === GATING_TYPE_CREATED_BY_NFD_ADDRESSES - frame_dig 0 // type: uint8 - int 3 - == - bz *if49_end - - // *if49_consequent - // contracts/validatorRegistry.algo.ts:1415 - // assert( - // this.isAddressInNFDCAAlgoList(config.entryGatingAssets[0], AssetID.fromUint64(valueToVerify).creator), - // 'specified asset must be created by creator that is one of the linked addresses in an nfd', - // ) - frame_dig -2 // valueToVerify: uint64 - asset_params_get AssetCreator - pop - frame_dig 2 // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 113 8 - btoi - callsub isAddressInNFDCAAlgoList - - // specified asset must be created by creator that is one of the linked addresses in an nfd - assert - -*if49_end: - // *if50_condition - // contracts/validatorRegistry.algo.ts:1420 - // type === GATING_TYPE_SEGMENT_OF_NFD - frame_dig 0 // type: uint8 - int 4 - == - bz *if50_end - - // *if50_consequent - // contracts/validatorRegistry.algo.ts:1422 - // userOfferedNFDAppID = valueToVerify - frame_dig -2 // valueToVerify: uint64 - frame_bury 8 // userOfferedNFDAppID: uint64 - - // contracts/validatorRegistry.algo.ts:1423 - // assert(this.isNFDAppIDValid(userOfferedNFDAppID), 'provided NFD must be valid') - frame_dig 8 // userOfferedNFDAppID: uint64 - callsub isNFDAppIDValid - - // provided NFD must be valid - assert - - // contracts/validatorRegistry.algo.ts:1426 - // assert( - // rawBytes(AppID.fromUint64(userOfferedNFDAppID).globalState('i.owner.a') as Address) === - // rawBytes(staker) || this.isAddressInNFDCAAlgoList(userOfferedNFDAppID, staker), - // "provided nfd for entry isn't owned or linked to the staker", - // ) - frame_dig 8 // userOfferedNFDAppID: uint64 - byte 0x692e6f776e65722e61 // "i.owner.a" - app_global_get_ex - - // global state value does not exist: AppID.fromUint64(userOfferedNFDAppID).globalState('i.owner.a') - assert - frame_dig 1 // staker: address - == - dup - bnz *skip_or6 - frame_dig 1 // staker: address - frame_dig 8 // userOfferedNFDAppID: uint64 - callsub isAddressInNFDCAAlgoList - || - -*skip_or6: - // provided nfd for entry isn't owned or linked to the staker - assert - - // contracts/validatorRegistry.algo.ts:1433 - // assert( - // btoi(AppID.fromUint64(userOfferedNFDAppID).globalState('i.parentAppID') as bytes) === - // config.entryGatingAssets[0], - // 'specified nfd must be a segment of the nfd the validator specified as a requirement', - // ) - frame_dig 8 // userOfferedNFDAppID: uint64 - byte 0x692e706172656e744170704944 // "i.parentAppID" - app_global_get_ex - - // global state value does not exist: AppID.fromUint64(userOfferedNFDAppID).globalState('i.parentAppID') - assert - btoi - frame_dig 2 // config: (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64) - extract 113 8 - btoi - == - - // specified nfd must be a segment of the nfd the validator specified as a requirement - assert - -*if50_end: - retsub - -// isNFDAppIDValid(nfdAppID: uint64): boolean -// -// Checks if the given NFD App id is valid. Using only the App id there's no validation against the name (ie: that nfd X is name Y) -// So it's assumed for the caller, the app id alone is fine. The name is fetched from the specified app id and the two -// together are used for validity check call to the nfd registry. -// -// @param {uint64} nfdAppID - The NFD App id to verify. -// -// @returns {boolean} - Returns true if the NFD App id is valid, otherwise false. -isNFDAppIDValid: - proto 1 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - - // contracts/validatorRegistry.algo.ts:1452 - // userOfferedNFDName = AppID.fromUint64(nfdAppID).globalState('i.name') as string - frame_dig -1 // nfdAppID: uint64 - byte 0x692e6e616d65 // "i.name" - app_global_get_ex - - // global state value does not exist: AppID.fromUint64(nfdAppID).globalState('i.name') - assert - frame_bury 0 // userOfferedNFDName: string - - // contracts/validatorRegistry.algo.ts:1454 - // sendAppCall({ - // applicationID: AppID.fromUint64(this.nfdRegistryAppId), - // applicationArgs: ['is_valid_nfd_appid', userOfferedNFDName, itob(nfdAppID)], - // applications: [AppID.fromUint64(nfdAppID)], - // }) - itxn_begin - int appl - itxn_field TypeEnum - - // contracts/validatorRegistry.algo.ts:1455 - // applicationID: AppID.fromUint64(this.nfdRegistryAppId) - pushint TMPL_nfdRegistryAppId - itxn_field ApplicationID - - // contracts/validatorRegistry.algo.ts:1456 - // applicationArgs: ['is_valid_nfd_appid', userOfferedNFDName, itob(nfdAppID)] - byte 0x69735f76616c69645f6e66645f6170706964 // "is_valid_nfd_appid" - itxn_field ApplicationArgs - frame_dig 0 // userOfferedNFDName: string - itxn_field ApplicationArgs - frame_dig -1 // nfdAppID: uint64 - itob - itxn_field ApplicationArgs - - // contracts/validatorRegistry.algo.ts:1457 - // applications: [AppID.fromUint64(nfdAppID)] - frame_dig -1 // nfdAppID: uint64 - itxn_field Applications - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/validatorRegistry.algo.ts:1459 - // return btoi(this.itxn.lastLog) === 1 - itxn LastLog - btoi - int 1 - == - - // set the subroutine return value - frame_bury 0 - retsub - -// isAddressInNFDCAAlgoList(nfdAppID: uint64, addrToFind: Address): boolean -// -// Checks if the specified address is present in an NFDs list of verified addresses. -// The NFD is assumed to have already been validated as official. -// -// @param {uint64} nfdAppID - The NFD application id. -// @param {Address} addrToFind - The address to find in the v.caAlgo.0.as property -// @return {boolean} - `true` if the address is present, `false` otherwise. -isAddressInNFDCAAlgoList: - proto 2 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - dupn 2 - - // contracts/validatorRegistry.algo.ts:1471 - // sendAppCall({ - // applicationID: AppID.fromUint64(nfdAppID), - // applicationArgs: ['read_property', 'v.caAlgo.0.as'], - // }) - itxn_begin - int appl - itxn_field TypeEnum - - // contracts/validatorRegistry.algo.ts:1472 - // applicationID: AppID.fromUint64(nfdAppID) - frame_dig -1 // nfdAppID: uint64 - itxn_field ApplicationID - - // contracts/validatorRegistry.algo.ts:1473 - // applicationArgs: ['read_property', 'v.caAlgo.0.as'] - byte 0x726561645f70726f7065727479 // "read_property" - itxn_field ApplicationArgs - byte 0x762e6361416c676f2e302e6173 // "v.caAlgo.0.as" - itxn_field ApplicationArgs - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - - // contracts/validatorRegistry.algo.ts:1475 - // caAlgoData = this.itxn.lastLog - itxn LastLog - frame_bury 0 // caAlgoData: byte[] - - // contracts/validatorRegistry.algo.ts:1476 - // for (let i = 0; i < caAlgoData.length; i += 32) - int 0 - frame_bury 1 // i: uint64 - -*for_10: - // contracts/validatorRegistry.algo.ts:1476 - // i < caAlgoData.length - frame_dig 1 // i: uint64 - frame_dig 0 // caAlgoData: byte[] - len - < - bz *for_10_end - - // contracts/validatorRegistry.algo.ts:1477 - // addr = extract3(caAlgoData, i, 32) - frame_dig 0 // caAlgoData: byte[] - frame_dig 1 // i: uint64 - int 32 - extract3 - frame_bury 2 // addr: byte[] - - // *if51_condition - // contracts/validatorRegistry.algo.ts:1478 - // addr !== rawBytes(globals.zeroAddress) && addr === rawBytes(addrToFind) - frame_dig 2 // addr: byte[] - global ZeroAddress - != - dup - bz *skip_and10 - frame_dig 2 // addr: byte[] - frame_dig -2 // addrToFind: Address - == - && - -*skip_and10: - bz *if51_end - - // *if51_consequent - // contracts/validatorRegistry.algo.ts:1479 - // return true - int 1 - b *isAddressInNFDCAAlgoList*return - -*if51_end: - -*for_10_continue: - // contracts/validatorRegistry.algo.ts:1476 - // i += 32 - frame_dig 1 // i: uint64 - int 32 - + - frame_bury 1 // i: uint64 - b *for_10 - -*for_10_end: - // contracts/validatorRegistry.algo.ts:1482 - // return false - int 0 - -*isAddressInNFDCAAlgoList*return: - // set the subroutine return value - frame_bury 0 - - // pop all local variables from the stack - popn 2 - retsub - -// algoSaturationLevel(): uint64 -// -// Returns the maximum allowed stake per validator based on a percentage of all current online stake before -// the validator is considered saturated - where rewards are diminished. -// NOTE: this function is defined twice - here and in staking pool contract. Both must be identical. -algoSaturationLevel: - proto 0 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - - // contracts/validatorRegistry.algo.ts:1491 - // online = this.getCurrentOnlineStake() - callsub getCurrentOnlineStake - frame_bury 0 // online: uint64 - - // contracts/validatorRegistry.algo.ts:1493 - // return wideRatio([online, MAX_VALIDATOR_SOFT_PCT_OF_ONLINE_1DECIMAL], [1000]) - frame_dig 0 // online: uint64 - int 100 - mulw - int 0 - int 1000 - divmodw - pop - pop - swap - ! - - // wideRatio failed - assert - - // set the subroutine return value - frame_bury 0 - retsub - -// maxAllowedStake(): uint64 -// -// Returns the MAXIMUM allowed stake per validator based on a percentage of all current online stake. -// Adding stake is completely blocked at this amount. -maxAllowedStake: - proto 0 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - - // contracts/validatorRegistry.algo.ts:1501 - // online = this.getCurrentOnlineStake() - callsub getCurrentOnlineStake - frame_bury 0 // online: uint64 - - // contracts/validatorRegistry.algo.ts:1503 - // return wideRatio([online, MAX_VALIDATOR_HARD_PCT_OF_ONLINE_1DECIMAL], [1000]) - frame_dig 0 // online: uint64 - int 150 - mulw - int 0 - int 1000 - divmodw - pop - pop - swap - ! - - // wideRatio failed - assert - - // set the subroutine return value - frame_bury 0 - retsub - -// maxAlgoAllowedPerPool(): uint64 -// -// Returns the MAXIMUM allowed stake per pool and still receive incentives - we'll treat this as the 'max per pool' -maxAlgoAllowedPerPool: - proto 0 1 - - // contracts/validatorRegistry.algo.ts:1512 - // return 70_000_000_000_000 - int 70_000_000_000_000 - retsub - -// getCurrentOnlineStake(): uint64 -getCurrentOnlineStake: - proto 0 1 - - // contracts/validatorRegistry.algo.ts:1518 - // return 2_000_000_000_000_000 - int 2_000_000_000_000_000 - retsub - -// minBalanceForAccount(contracts: uint64, extraPages: uint64, assets: uint64, localInts: uint64, localBytes: uint64, globalInts: uint64, globalBytes: uint64): uint64 -minBalanceForAccount: - proto 7 1 - - // Push empty bytes after the frame pointer to reserve space for local variables - byte 0x - - // contracts/validatorRegistry.algo.ts:1530 - // minBal = ALGORAND_ACCOUNT_MIN_BALANCE - int 100000 - frame_bury 0 // minBal: uint64 - - // contracts/validatorRegistry.algo.ts:1531 - // minBal += contracts * APPLICATION_BASE_FEE - frame_dig 0 // minBal: uint64 - frame_dig -1 // contracts: uint64 - int 100000 - * - + - frame_bury 0 // minBal: uint64 - - // contracts/validatorRegistry.algo.ts:1532 - // minBal += extraPages * APPLICATION_BASE_FEE - frame_dig 0 // minBal: uint64 - frame_dig -2 // extraPages: uint64 - int 100000 - * - + - frame_bury 0 // minBal: uint64 - - // contracts/validatorRegistry.algo.ts:1533 - // minBal += assets * ASSET_HOLDING_FEE - frame_dig 0 // minBal: uint64 - frame_dig -3 // assets: uint64 - int 100000 - * - + - frame_bury 0 // minBal: uint64 - - // contracts/validatorRegistry.algo.ts:1534 - // minBal += localInts * SSC_VALUE_UINT - frame_dig 0 // minBal: uint64 - frame_dig -4 // localInts: uint64 - int 28500 - * - + - frame_bury 0 // minBal: uint64 - - // contracts/validatorRegistry.algo.ts:1535 - // minBal += globalInts * SSC_VALUE_UINT - frame_dig 0 // minBal: uint64 - frame_dig -6 // globalInts: uint64 - int 28500 - * - + - frame_bury 0 // minBal: uint64 - - // contracts/validatorRegistry.algo.ts:1536 - // minBal += localBytes * SSC_VALUE_BYTES - frame_dig 0 // minBal: uint64 - frame_dig -5 // localBytes: uint64 - int 50000 - * - + - frame_bury 0 // minBal: uint64 - - // contracts/validatorRegistry.algo.ts:1537 - // minBal += globalBytes * SSC_VALUE_BYTES - frame_dig 0 // minBal: uint64 - frame_dig -7 // globalBytes: uint64 - int 50000 - * - + - frame_bury 0 // minBal: uint64 - - // contracts/validatorRegistry.algo.ts:1538 - // return minBal - frame_dig 0 // minBal: uint64 - - // set the subroutine return value - frame_bury 0 - retsub - -// costForBoxStorage(totalNumBytes: uint64): uint64 -costForBoxStorage: - proto 1 1 - - // contracts/validatorRegistry.algo.ts:1545 - // return SCBOX_PERBOX + totalNumBytes * SCBOX_PERBYTE - int 2500 - frame_dig -1 // totalNumBytes: uint64 - int 400 - * - + - retsub - -*create_NoOp: - method "createApplication()void" - txna ApplicationArgs 0 - match *abi_route_createApplication - - // this contract does not implement the given ABI method for create NoOp - err - -*call_NoOp: - method "initStakingContract(uint64)void" - method "loadStakingContractData(uint64,byte[])void" - method "finalizeStakingContract()void" - method "gas()void" - method "getMbrAmounts()(uint64,uint64,uint64,uint64)" - method "getProtocolConstraints()(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)" - method "getNumValidators()uint64" - method "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" - method "getValidatorState(uint64)(uint16,uint64,uint64,uint64)" - method "getValidatorOwnerAndManager(uint64)(address,address)" - method "getPools(uint64)(uint64,uint16,uint64)[]" - method "getPoolAppId(uint64,uint64)uint64" - method "getPoolInfo((uint64,uint64,uint64))(uint64,uint16,uint64)" - method "getCurMaxStakePerPool(uint64)uint64" - method "doesStakerNeedToPayMBR(address)bool" - method "getStakedPoolsForAccount(address)(uint64,uint64,uint64)[]" - method "getTokenPayoutRatio(uint64)(uint64[24],uint64)" - method "getNodePoolAssignments(uint64)((uint64[3])[8])" - method "getNFDRegistryID()uint64" - method "addValidator(pay,string,(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64))uint64" - method "changeValidatorManager(uint64,address)void" - method "changeValidatorSunsetInfo(uint64,uint64,uint64)void" - method "changeValidatorNFD(uint64,uint64,string)void" - method "changeValidatorCommissionAddress(uint64,address)void" - method "changeValidatorRewardInfo(uint64,uint8,address,uint64[4],uint64,uint64)void" - method "addPool(pay,uint64,uint64)(uint64,uint64,uint64)" - method "addStake(pay,uint64,uint64)(uint64,uint64,uint64)" - method "setTokenPayoutRatio(uint64)(uint64[24],uint64)" - method "stakeUpdatedViaRewards((uint64,uint64,uint64),uint64,uint64,uint64,uint64)void" - method "stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void" - method "findPoolForStaker(uint64,address,uint64)((uint64,uint64,uint64),bool,bool)" - method "movePoolToNode(uint64,uint64,uint64)void" - method "emptyTokenRewards(uint64,address)uint64" - txna ApplicationArgs 0 - match *abi_route_initStakingContract *abi_route_loadStakingContractData *abi_route_finalizeStakingContract *abi_route_gas *abi_route_getMbrAmounts *abi_route_getProtocolConstraints *abi_route_getNumValidators *abi_route_getValidatorConfig *abi_route_getValidatorState *abi_route_getValidatorOwnerAndManager *abi_route_getPools *abi_route_getPoolAppId *abi_route_getPoolInfo *abi_route_getCurMaxStakePerPool *abi_route_doesStakerNeedToPayMBR *abi_route_getStakedPoolsForAccount *abi_route_getTokenPayoutRatio *abi_route_getNodePoolAssignments *abi_route_getNFDRegistryID *abi_route_addValidator *abi_route_changeValidatorManager *abi_route_changeValidatorSunsetInfo *abi_route_changeValidatorNFD *abi_route_changeValidatorCommissionAddress *abi_route_changeValidatorRewardInfo *abi_route_addPool *abi_route_addStake *abi_route_setTokenPayoutRatio *abi_route_stakeUpdatedViaRewards *abi_route_stakeRemoved *abi_route_findPoolForStaker *abi_route_movePoolToNode *abi_route_emptyTokenRewards - - // this contract does not implement the given ABI method for call NoOp - err - -*call_UpdateApplication: - method "updateApplication()void" - txna ApplicationArgs 0 - match *abi_route_updateApplication - - // this contract does not implement the given ABI method for call UpdateApplication - err \ No newline at end of file diff --git a/examples/reti/ValidatorRegistry.arc32.json b/examples/reti/ValidatorRegistry.arc32.json deleted file mode 100755 index e1cc3f808..000000000 --- a/examples/reti/ValidatorRegistry.arc32.json +++ /dev/null @@ -1,806 +0,0 @@ -{ - "hints": { - "updateApplication()void": { - "call_config": { - "update_application": "CALL" - } - }, - "createApplication()void": { - "call_config": { - "no_op": "CREATE" - } - }, - "initStakingContract(uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "loadStakingContractData(uint64,byte[])void": { - "call_config": { - "no_op": "CALL" - } - }, - "finalizeStakingContract()void": { - "call_config": { - "no_op": "CALL" - } - }, - "gas()void": { - "call_config": { - "no_op": "CALL" - } - }, - "getMbrAmounts()(uint64,uint64,uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "getProtocolConstraints()(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "getNumValidators()uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "getValidatorConfig(uint64)(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "getValidatorState(uint64)(uint16,uint64,uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "getValidatorOwnerAndManager(uint64)(address,address)": { - "call_config": { - "no_op": "CALL" - } - }, - "getPools(uint64)(uint64,uint16,uint64)[]": { - "call_config": { - "no_op": "CALL" - } - }, - "getPoolAppId(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "getPoolInfo((uint64,uint64,uint64))(uint64,uint16,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "getCurMaxStakePerPool(uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "doesStakerNeedToPayMBR(address)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "getStakedPoolsForAccount(address)(uint64,uint64,uint64)[]": { - "call_config": { - "no_op": "CALL" - } - }, - "getTokenPayoutRatio(uint64)(uint64[24],uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "getNodePoolAssignments(uint64)((uint64[3])[8])": { - "call_config": { - "no_op": "CALL" - } - }, - "getNFDRegistryID()uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "addValidator(pay,string,(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64))uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "changeValidatorManager(uint64,address)void": { - "call_config": { - "no_op": "CALL" - } - }, - "changeValidatorSunsetInfo(uint64,uint64,uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "changeValidatorNFD(uint64,uint64,string)void": { - "call_config": { - "no_op": "CALL" - } - }, - "changeValidatorCommissionAddress(uint64,address)void": { - "call_config": { - "no_op": "CALL" - } - }, - "changeValidatorRewardInfo(uint64,uint8,address,uint64[4],uint64,uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "addPool(pay,uint64,uint64)(uint64,uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "addStake(pay,uint64,uint64)(uint64,uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "setTokenPayoutRatio(uint64)(uint64[24],uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "stakeUpdatedViaRewards((uint64,uint64,uint64),uint64,uint64,uint64,uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "stakeRemoved((uint64,uint64,uint64),address,uint64,uint64,bool)void": { - "call_config": { - "no_op": "CALL" - } - }, - "findPoolForStaker(uint64,address,uint64)((uint64,uint64,uint64),bool,bool)": { - "call_config": { - "no_op": "CALL" - } - }, - "movePoolToNode(uint64,uint64,uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "emptyTokenRewards(uint64,address)uint64": { - "call_config": { - "no_op": "CALL" - } - } - }, - "bare_call_config": { - "no_op": "NEVER", - "opt_in": "NEVER", - "close_out": "NEVER", - "update_application": "NEVER", - "delete_application": "NEVER" - }, - "schema": { - "local": { - "declared": {}, - "reserved": {} - }, - "global": { - "declared": { - "stakingPoolInitialized": { - "type": "bytes", - "key": "init" - }, - "numValidators": { - "type": "uint64", - "key": "numV" - }, - "numStakers": { - "type": "uint64", - "key": "numStakers" - }, - "totalAlgoStaked": { - "type": "uint64", - "key": "staked" - } - }, - "reserved": {} - } - }, - "state": { - "global": { - "num_byte_slices": 1, - "num_uints": 3 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjk2LjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCS8vIFRoZSByZXF1ZXN0ZWQgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRyYWN0LiBBcmUgeW91IHVzaW5nIHRoZSBjb3JyZWN0IE9uQ29tcGxldGU/IERpZCB5b3Ugc2V0IHlvdXIgYXBwIElEPwoJZXJyCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiB1cGRhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKTogdm9pZAp1cGRhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE5OQoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gQWRkcmVzcy5mcm9tQWRkcmVzcygnTFo0VjJJUlZMQ1hGSks0UkVKVjRUQUdFS0VZVEEyR01SNlRDMjM0NE9CM0wzQUYzTVdYWjZaQUZJUScpKQoJdHhuIFNlbmRlcgoJYWRkciBMWjRWMklSVkxDWEZKSzRSRUpWNFRBR0VLRVlUQTJHTVI2VEMyMzQ0T0IzTDNBRjNNV1haNlpBRklRCgk9PQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjAxCgkvLyB0aGlzLnN0YWtpbmdQb29sQXBwcm92YWxQcm9ncmFtLmRlbGV0ZSgpCglieXRlIDB4NzA2ZjZmNmM1NDY1NmQ3MDZjNjE3NDY1NDE3MDcwNzI2Zjc2NjE2YzQyNzk3NDY1NzMgLy8gInBvb2xUZW1wbGF0ZUFwcHJvdmFsQnl0ZXMiCglib3hfZGVsCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjAyCgkvLyB0aGlzLnN0YWtpbmdQb29sSW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZQoJYnl0ZSAweDY5NmU2OTc0IC8vICJpbml0IgoJaW50IDAKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0CglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZApjcmVhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjIwNgoJLy8gdGhpcy5zdGFraW5nUG9vbEluaXRpYWxpemVkLnZhbHVlID0gZmFsc2UKCWJ5dGUgMHg2OTZlNjk3NCAvLyAiaW5pdCIKCWludCAwCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoyMDcKCS8vIHRoaXMubnVtVmFsaWRhdG9ycy52YWx1ZSA9IDAKCWJ5dGUgMHg2ZTc1NmQ1NiAvLyAibnVtViIKCWludCAwCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjIwOAoJLy8gdGhpcy5udW1TdGFrZXJzLnZhbHVlID0gMAoJYnl0ZSAweDZlNzU2ZDUzNzQ2MTZiNjU3MjczIC8vICJudW1TdGFrZXJzIgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjA5CgkvLyB0aGlzLnRvdGFsQWxnb1N0YWtlZC52YWx1ZSA9IDAKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCWludCAwCglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgovLyBpbml0U3Rha2luZ0NvbnRyYWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfaW5pdFN0YWtpbmdDb250cmFjdDoKCS8vIGFwcHJvdmFsUHJvZ3JhbVNpemU6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgaW5pdFN0YWtpbmdDb250cmFjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBpbml0U3Rha2luZ0NvbnRyYWN0CglpbnQgMQoJcmV0dXJuCgovLyBpbml0U3Rha2luZ0NvbnRyYWN0KGFwcHJvdmFsUHJvZ3JhbVNpemU6IHVpbnQ2NCk6IHZvaWQKaW5pdFN0YWtpbmdDb250cmFjdDoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjIxNAoJLy8gdGhpcy5zdGFraW5nUG9vbEFwcHJvdmFsUHJvZ3JhbS5jcmVhdGUoYXBwcm92YWxQcm9ncmFtU2l6ZSkKCWJ5dGUgMHg3MDZmNmY2YzU0NjU2ZDcwNmM2MTc0NjU0MTcwNzA3MjZmNzY2MTZjNDI3OTc0NjU3MyAvLyAicG9vbFRlbXBsYXRlQXBwcm92YWxCeXRlcyIKCWZyYW1lX2RpZyAtMSAvLyBhcHByb3ZhbFByb2dyYW1TaXplOiB1aW50NjQKCWJveF9jcmVhdGUKCXBvcAoJcmV0c3ViCgovLyBsb2FkU3Rha2luZ0NvbnRyYWN0RGF0YSh1aW50NjQsYnl0ZVtdKXZvaWQKKmFiaV9yb3V0ZV9sb2FkU3Rha2luZ0NvbnRyYWN0RGF0YToKCS8vIGRhdGE6IGJ5dGVbXQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZXh0cmFjdCAyIDAKCgkvLyBvZmZzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgbG9hZFN0YWtpbmdDb250cmFjdERhdGEodWludDY0LGJ5dGVbXSl2b2lkCgljYWxsc3ViIGxvYWRTdGFraW5nQ29udHJhY3REYXRhCglpbnQgMQoJcmV0dXJuCgovLyBsb2FkU3Rha2luZ0NvbnRyYWN0RGF0YShvZmZzZXQ6IHVpbnQ2NCwgZGF0YTogYnl0ZXMpOiB2b2lkCmxvYWRTdGFraW5nQ29udHJhY3REYXRhOgoJcHJvdG8gMiAwCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjE4CgkvLyBhc3NlcnQoIXRoaXMuc3Rha2luZ1Bvb2xJbml0aWFsaXplZC52YWx1ZSkKCWJ5dGUgMHg2OTZlNjk3NCAvLyAiaW5pdCIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMAoJZ2V0Yml0CgkhCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoyMTkKCS8vIHRoaXMuc3Rha2luZ1Bvb2xBcHByb3ZhbFByb2dyYW0ucmVwbGFjZShvZmZzZXQsIGRhdGEpCglieXRlIDB4NzA2ZjZmNmM1NDY1NmQ3MDZjNjE3NDY1NDE3MDcwNzI2Zjc2NjE2YzQyNzk3NDY1NzMgLy8gInBvb2xUZW1wbGF0ZUFwcHJvdmFsQnl0ZXMiCglmcmFtZV9kaWcgLTEgLy8gb2Zmc2V0OiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBkYXRhOiBieXRlcwoJYm94X3JlcGxhY2UKCXJldHN1YgoKLy8gZmluYWxpemVTdGFraW5nQ29udHJhY3QoKXZvaWQKKmFiaV9yb3V0ZV9maW5hbGl6ZVN0YWtpbmdDb250cmFjdDoKCS8vIGV4ZWN1dGUgZmluYWxpemVTdGFraW5nQ29udHJhY3QoKXZvaWQKCWNhbGxzdWIgZmluYWxpemVTdGFraW5nQ29udHJhY3QKCWludCAxCglyZXR1cm4KCi8vIGZpbmFsaXplU3Rha2luZ0NvbnRyYWN0KCk6IHZvaWQKZmluYWxpemVTdGFraW5nQ29udHJhY3Q6Cglwcm90byAwIDAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoyMjMKCS8vIHRoaXMuc3Rha2luZ1Bvb2xJbml0aWFsaXplZC52YWx1ZSA9IHRydWUKCWJ5dGUgMHg2OTZlNjk3NCAvLyAiaW5pdCIKCWludCAxCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKLy8gZ2FzKCl2b2lkCiphYmlfcm91dGVfZ2FzOgoJLy8gZXhlY3V0ZSBnYXMoKXZvaWQKCWNhbGxzdWIgZ2FzCglpbnQgMQoJcmV0dXJuCgovLyBnYXMoKTogdm9pZAovLwovLyBnYXMgaXMgYSBkdW1teSBuby1vcCBjYWxsIHRoYXQgY2FuIGJlIHVzZWQgdG8gcG9vbC11cCByZXNvdXJjZSByZWZlcmVuY2VzIGFuZCBvcGNvZGUgY29zdApnYXM6Cglwcm90byAwIDAKCXJldHN1YgoKLy8gZ2V0TWJyQW1vdW50cygpKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9nZXRNYnJBbW91bnRzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGdldE1ickFtb3VudHMoKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGdldE1ickFtb3VudHMKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBnZXRNYnJBbW91bnRzKCk6IE1ickFtb3VudHMKLy8KLy8gUmV0dXJucyB0aGUgTUJSIGFtb3VudHMgbmVlZGVkIGZvciB2YXJpb3VzIGFjdGlvbnM6Ci8vIFsKLy8gYWRkVmFsaWRhdG9yTWJyOiB1aW50NjQgLSBtYnIgbmVlZGVkIHRvIGFkZCBhIG5ldyB2YWxpZGF0b3IgLSBwYWlkIHRvIHZhbGlkYXRvciBjb250cmFjdAovLyBhZGRQb29sTWJyOiB1aW50NjQgLSBtYnIgbmVlZGVkIHRvIGFkZCBhIG5ldyBwb29sIC0gcGFpZCB0byB2YWxpZGF0b3IKLy8gcG9vbEluaXRNYnI6IHVpbnQ2NCAtIG1iciBuZWVkZWQgdG8gaW5pdFN0b3JhZ2UoKSBvZiBwb29sIC0gcGFpZCB0byBwb29sIGl0c2VsZgovLyBhZGRTdGFrZXJNYnI6IHVpbnQ2NCAtIG1iciBzdGFrZXIgbmVlZHMgdG8gYWRkIHRvIGZpcnN0IHN0YWtpbmcgcGF5bWVudCAoc3RheXMgdy8gdmFsaWRhdG9yKQovLyBdCmdldE1ickFtb3VudHM6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoyNDMKCS8vIHJldHVybiB7CgkvLyAgICAgICAgICAgICBhZGRWYWxpZGF0b3JNYnI6IHRoaXMuY29zdEZvckJveFN0b3JhZ2UoMSAvKiB2IHByZWZpeCAqLyArIGxlbjxWYWxpZGF0b3JJZFR5cGU+KCkgKyBsZW48VmFsaWRhdG9ySW5mbz4oKSksCgkvLyAgICAgICAgICAgICBhZGRQb29sTWJyOiB0aGlzLm1pbkJhbGFuY2VGb3JBY2NvdW50KAoJLy8gICAgICAgICAgICAgICAgIDEsCgkvLyAgICAgICAgICAgICAgICAgLy8gd2UgY291bGQgY2FsY3VsYXRlIHRoaXMgZGlyZWN0bHkgYnkgcmVmZXJlbmNpbmcgdGhlIHNpemUgb2Ygc3Rha2luZ1Bvb2xBcHByb3ZhbFByb2dyYW0gYnV0IGl0IHdvdWxkCgkvLyAgICAgICAgICAgICAgICAgLy8gbWVhbiBvdXIgY2FsbGVycyB3b3VsZCBoYXZlIHRvIHJlZmVyZW5jZSB0aGUgYm94IEFORCBidXkgdXAgaS9vIC0gc28ganVzdCBnbyBtYXggb24gZXh0cmEgcGFnZXMKCS8vICAgICAgICAgICAgICAgICAzLAoJLy8gICAgICAgICAgICAgICAgIDAsCgkvLyAgICAgICAgICAgICAgICAgMCwKCS8vICAgICAgICAgICAgICAgICAwLAoJLy8gICAgICAgICAgICAgICAgIFN0YWtpbmdQb29sLnNjaGVtYS5nbG9iYWwubnVtVWludCwKCS8vICAgICAgICAgICAgICAgICBTdGFraW5nUG9vbC5zY2hlbWEuZ2xvYmFsLm51bUJ5dGVTbGljZSwKCS8vICAgICAgICAgICAgICksCgkvLyAgICAgICAgICAgICBwb29sSW5pdE1icjoKCS8vICAgICAgICAgICAgICAgICBBTEdPUkFORF9BQ0NPVU5UX01JTl9CQUxBTkNFICsKCS8vICAgICAgICAgICAgICAgICB0aGlzLmNvc3RGb3JCb3hTdG9yYWdlKDcgLyogJ3N0YWtlcnMnIG5hbWUgKi8gKyBsZW48U3Rha2VkSW5mbz4oKSAqIE1BWF9TVEFLRVJTX1BFUl9QT09MKSwKCS8vICAgICAgICAgICAgIGFkZFN0YWtlck1icjoKCS8vICAgICAgICAgICAgICAgICAvLyBob3cgbXVjaCB0byBjaGFyZ2UgZm9yIGZpcnN0IHRpbWUgYSBzdGFrZXIgYWRkcyBzdGFrZSAtIHNpbmNlIHdlIGFkZCBhIHRyYWNraW5nIGJveCBwZXIgc3Rha2VyCgkvLyAgICAgICAgICAgICAgICAgdGhpcy5jb3N0Rm9yQm94U3RvcmFnZSgKCS8vICAgICAgICAgICAgICAgICAgICAgMyAvKiAnc3BzJyBwcmVmaXggKi8gKyBsZW48QWRkcmVzcz4oKSArIGxlbjxWYWxpZGF0b3JQb29sS2V5PigpICogTUFYX1BPT0xTX1BFUl9TVEFLRVIsCgkvLyAgICAgICAgICAgICAgICAgKSwgLy8gc2l6ZSBvZiBrZXkgKyBhbGwgdmFsdWVzCgkvLyAgICAgICAgIH0KCWludCAxMTAxCgljYWxsc3ViIGNvc3RGb3JCb3hTdG9yYWdlCglpdG9iCglpbnQgMwoJaW50IDExCglpbnQgMAoJZHVwbiAyCglpbnQgMwoJaW50IDEKCWNhbGxzdWIgbWluQmFsYW5jZUZvckFjY291bnQKCWl0b2IKCWNvbmNhdAoJaW50IDEwMDAwMAoJaW50IDEyODA3CgljYWxsc3ViIGNvc3RGb3JCb3hTdG9yYWdlCgkrCglpdG9iCgljb25jYXQKCWludCAxNzkKCWNhbGxzdWIgY29zdEZvckJveFN0b3JhZ2UKCWl0b2IKCWNvbmNhdAoJcmV0c3ViCgovLyBnZXRQcm90b2NvbENvbnN0cmFpbnRzKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9nZXRQcm90b2NvbENvbnN0cmFpbnRzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGdldFByb3RvY29sQ29uc3RyYWludHMoKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJY2FsbHN1YiBnZXRQcm90b2NvbENvbnN0cmFpbnRzCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0UHJvdG9jb2xDb25zdHJhaW50cygpOiBDb25zdHJhaW50cwovLwovLyBSZXR1cm5zIHRoZSBwcm90b2NvbCBjb25zdHJhaW50cyBzbyB0aGF0IFVJcyBjYW4gbGltaXQgd2hhdCB1c2VycyBzcGVjaWZ5IGZvciB2YWxpZGF0b3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgpnZXRQcm90b2NvbENvbnN0cmFpbnRzOgoJcHJvdG8gMCAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjcxCgkvLyByZXR1cm4gewoJLy8gICAgICAgICAgICAgZXBvY2hQYXlvdXRSb3VuZHNNaW46IE1JTl9FUE9DSF9MRU5HVEgsCgkvLyAgICAgICAgICAgICBlcG9jaFBheW91dFJvdW5kc01heDogTUFYX0VQT0NIX0xFTkdUSCwKCS8vICAgICAgICAgICAgIG1pblBjdFRvVmFsaWRhdG9yV0ZvdXJEZWNpbWFsczogTUlOX1BDVF9UT19WQUxJREFUT1IsCgkvLyAgICAgICAgICAgICBtYXhQY3RUb1ZhbGlkYXRvcldGb3VyRGVjaW1hbHM6IE1BWF9QQ1RfVE9fVkFMSURBVE9SLAoJLy8gICAgICAgICAgICAgbWluRW50cnlTdGFrZTogTUlOX0FMR09fU1RBS0VfUEVSX1BPT0wsCgkvLyAgICAgICAgICAgICBtYXhBbGdvUGVyUG9vbDogdGhpcy5tYXhBbGdvQWxsb3dlZFBlclBvb2woKSwKCS8vICAgICAgICAgICAgIG1heEFsZ29QZXJWYWxpZGF0b3I6IHRoaXMubWF4QWxsb3dlZFN0YWtlKCksCgkvLyAgICAgICAgICAgICBhbXRDb25zaWRlcmVkU2F0dXJhdGVkOiB0aGlzLmFsZ29TYXR1cmF0aW9uTGV2ZWwoKSwKCS8vICAgICAgICAgICAgIG1heE5vZGVzOiBNQVhfTk9ERVMsCgkvLyAgICAgICAgICAgICBtYXhQb29sc1Blck5vZGU6IE1BWF9QT09MU19QRVJfTk9ERSwKCS8vICAgICAgICAgICAgIG1heFN0YWtlcnNQZXJQb29sOiBNQVhfU1RBS0VSU19QRVJfUE9PTCwKCS8vICAgICAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMGY0MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZjQyNDAwMDAwMDAwMDAwMGY0MjQwCgljYWxsc3ViIG1heEFsZ29BbGxvd2VkUGVyUG9vbAoJaXRvYgoJY29uY2F0CgljYWxsc3ViIG1heEFsbG93ZWRTdGFrZQoJaXRvYgoJY29uY2F0CgljYWxsc3ViIGFsZ29TYXR1cmF0aW9uTGV2ZWwKCWl0b2IKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDgKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDMKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwYzgKCWNvbmNhdAoJcmV0c3ViCgovLyBnZXROdW1WYWxpZGF0b3JzKCl1aW50NjQKKmFiaV9yb3V0ZV9nZXROdW1WYWxpZGF0b3JzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGdldE51bVZhbGlkYXRvcnMoKXVpbnQ2NAoJY2FsbHN1YiBnZXROdW1WYWxpZGF0b3JzCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0TnVtVmFsaWRhdG9ycygpOiB1aW50NjQKLy8KLy8gUmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YgdmFsaWRhdG9ycwpnZXROdW1WYWxpZGF0b3JzOgoJcHJvdG8gMCAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MjkxCgkvLyByZXR1cm4gdGhpcy5udW1WYWxpZGF0b3JzLnZhbHVlCglieXRlIDB4NmU3NTZkNTYgLy8gIm51bVYiCglhcHBfZ2xvYmFsX2dldAoJcmV0c3ViCgovLyBnZXRWYWxpZGF0b3JDb25maWcodWludDY0KSh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2dldFZhbGlkYXRvckNvbmZpZzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZ2V0VmFsaWRhdG9yQ29uZmlnKHVpbnQ2NCkodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgZ2V0VmFsaWRhdG9yQ29uZmlnCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0VmFsaWRhdG9yQ29uZmlnKHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUpOiBWYWxpZGF0b3JDb25maWcKZ2V0VmFsaWRhdG9yQ29uZmlnOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Mjk2CgkvLyByZXR1cm4gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcKCWludCAwCglpbnQgMjQyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJcmV0c3ViCgovLyBnZXRWYWxpZGF0b3JTdGF0ZSh1aW50NjQpKHVpbnQxNix1aW50NjQsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9nZXRWYWxpZGF0b3JTdGF0ZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZ2V0VmFsaWRhdG9yU3RhdGUodWludDY0KSh1aW50MTYsdWludDY0LHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGdldFZhbGlkYXRvclN0YXRlCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0VmFsaWRhdG9yU3RhdGUodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSk6IFZhbGlkYXRvckN1clN0YXRlCmdldFZhbGlkYXRvclN0YXRlOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzAxCgkvLyByZXR1cm4gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5zdGF0ZQoJaW50IDI0MiAvLyBoZWFkT2Zmc2V0CglpbnQgMjYKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglyZXRzdWIKCi8vIGdldFZhbGlkYXRvck93bmVyQW5kTWFuYWdlcih1aW50NjQpKGFkZHJlc3MsYWRkcmVzcykKKmFiaV9yb3V0ZV9nZXRWYWxpZGF0b3JPd25lckFuZE1hbmFnZXI6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbGlkYXRvcklkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGdldFZhbGlkYXRvck93bmVyQW5kTWFuYWdlcih1aW50NjQpKGFkZHJlc3MsYWRkcmVzcykKCWNhbGxzdWIgZ2V0VmFsaWRhdG9yT3duZXJBbmRNYW5hZ2VyCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0VmFsaWRhdG9yT3duZXJBbmRNYW5hZ2VyKHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUpOiBbQWRkcmVzcywgQWRkcmVzc10KZ2V0VmFsaWRhdG9yT3duZXJBbmRNYW5hZ2VyOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzA2CgkvLyByZXR1cm4gWwoJLy8gICAgICAgICAgICAgdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcub3duZXIsCgkvLyAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5tYW5hZ2VyLAoJLy8gICAgICAgICBdCglpbnQgOAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJaW50IDQwCglpbnQgMzIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0Cgljb25jYXQKCXJldHN1YgoKLy8gZ2V0UG9vbHModWludDY0KSh1aW50NjQsdWludDE2LHVpbnQ2NClbXQoqYWJpX3JvdXRlX2dldFBvb2xzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBnZXRQb29scyh1aW50NjQpKHVpbnQ2NCx1aW50MTYsdWludDY0KVtdCgljYWxsc3ViIGdldFBvb2xzCglkdXAKCWxlbgoJaW50IDE4CgkvCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0UG9vbHModmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSk6IFBvb2xJbmZvW10KLy8KLy8gUmV0dXJuIGxpc3Qgb2YgYWxsIHBvb2xzIGZvciB0aGlzIHZhbGlkYXRvci4KLy8gQHBhcmFtIHt1aW50NjR9IHZhbGlkYXRvcklkCi8vIEByZXR1cm4ge1Bvb2xJbmZvW119IC0gYXJyYXkgb2YgcG9vbHMKLy8gTm90IGNhbGxhYmxlIGZyb20gb3RoZXIgY29udHJhY3RzIGJlY2F1c2UgPjFLIHJldHVybiBidXQgY2FuIGJlIGNhbGxlZCB3LyBzaW11bGF0ZSB3aGljaCBidW1wcyBsb2cgcmV0dXJucwpnZXRQb29sczoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozMjAKCS8vIHJldERhdGE6IFBvb2xJbmZvW10gPSBbXQoJYnl0ZSAweAoJZnJhbWVfYnVyeSAwIC8vIHJldERhdGE6IFBvb2xJbmZvW10KCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozMjEKCS8vIHBvb2xTZXQgPSBjbG9uZSh0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnBvb2xzKQoJaW50IDI2OCAvLyBoZWFkT2Zmc2V0CglpbnQgNDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJZnJhbWVfYnVyeSAxIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDE2LHVpbnQ2NClbMjRdCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzIyCgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IHBvb2xTZXQubGVuZ3RoOyBpICs9IDEpCglpbnQgMAoJZnJhbWVfYnVyeSAyIC8vIGk6IHVpbnQ2NAoKKmZvcl8wOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzIyCgkvLyBpIDwgcG9vbFNldC5sZW5ndGgKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50IDI0Cgk8CglieiAqZm9yXzBfZW5kCgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjMyMwoJLy8gcG9vbFNldFtpXS5wb29sQXBwSWQgPT09IDAKCWZyYW1lX2RpZyAxIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDE2LHVpbnQ2NClbMjRdCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgMAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpbnQgMAoJPT0KCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgliICpmb3JfMF9lbmQKCippZjBfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzI3CgkvLyByZXREYXRhLnB1c2gocG9vbFNldFtpXSkKCWZyYW1lX2RpZyAwIC8vIHJldERhdGE6IFBvb2xJbmZvW10KCWZyYW1lX2RpZyAxIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDE2LHVpbnQ2NClbMjRdCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgMTgKCWV4dHJhY3QzCgljb25jYXQKCWZyYW1lX2J1cnkgMCAvLyByZXREYXRhOiBQb29sSW5mb1tdCgoqZm9yXzBfY29udGludWU6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozMjIKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAyIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzAKCipmb3JfMF9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozMjkKCS8vIHJldHVybiByZXREYXRhCglmcmFtZV9kaWcgMCAvLyByZXREYXRhOiBQb29sSW5mb1tdCgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBnZXRQb29sQXBwSWQodWludDY0LHVpbnQ2NCl1aW50NjQKKmFiaV9yb3V0ZV9nZXRQb29sQXBwSWQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHBvb2xJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZ2V0UG9vbEFwcElkKHVpbnQ2NCx1aW50NjQpdWludDY0CgljYWxsc3ViIGdldFBvb2xBcHBJZAoJaXRvYgoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGdldFBvb2xBcHBJZCh2YWxpZGF0b3JJZDogdWludDY0LCBwb29sSWQ6IHVpbnQ2NCk6IHVpbnQ2NApnZXRQb29sQXBwSWQ6Cglwcm90byAyIDEKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozMzcKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIHBvb2xJZCAhPT0gMCAmJiBwb29sSWQgPD0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5wb29scy5sZW5ndGgsCgkvLyAgICAgICAgICAgICAncG9vbCBpZCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgbnVtYmVyIG9mIHBvb2xzIGZvciB0aGlzIHZhbGlkYXRvcicsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyAtMiAvLyBwb29sSWQ6IHVpbnQ2NAoJaW50IDAKCSE9CglkdXAKCWJ6ICpza2lwX2FuZDAKCWZyYW1lX2RpZyAtMiAvLyBwb29sSWQ6IHVpbnQ2NAoJaW50IDI0Cgk8PQoJJiYKCipza2lwX2FuZDA6CgkvLyBwb29sIGlkIG11c3QgYmUgYmV0d2VlbiAxIGFuZCBudW1iZXIgb2YgcG9vbHMgZm9yIHRoaXMgdmFsaWRhdG9yCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozNDEKCS8vIHJldHVybiB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnBvb2xzW3Bvb2xJZCAtIDFdLnBvb2xBcHBJZAoJaW50IDI2OCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgLTIgLy8gcG9vbElkOiB1aW50NjQKCWludCAxCgktCglpbnQgMTgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDAKCSsKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJcmV0c3ViCgovLyBnZXRQb29sSW5mbygodWludDY0LHVpbnQ2NCx1aW50NjQpKSh1aW50NjQsdWludDE2LHVpbnQ2NCkKKmFiaV9yb3V0ZV9nZXRQb29sSW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcG9vbEtleTogKHVpbnQ2NCx1aW50NjQsdWludDY0KQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAyNAoJPT0KCgkvLyBhcmd1bWVudCAwIChwb29sS2V5KSBmb3IgZ2V0UG9vbEluZm8gbXVzdCBiZSBhICh1aW50NjQsdWludDY0LHVpbnQ2NCkKCWFzc2VydAoKCS8vIGV4ZWN1dGUgZ2V0UG9vbEluZm8oKHVpbnQ2NCx1aW50NjQsdWludDY0KSkodWludDY0LHVpbnQxNix1aW50NjQpCgljYWxsc3ViIGdldFBvb2xJbmZvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0UG9vbEluZm8ocG9vbEtleTogVmFsaWRhdG9yUG9vbEtleSk6IFBvb2xJbmZvCmdldFBvb2xJbmZvOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzQ2CgkvLyByZXR1cm4gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnBvb2xzW3Bvb2xLZXkucG9vbElkIC0gMV0KCWludCAyNjggLy8gaGVhZE9mZnNldAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgOCA4CglidG9pCglpbnQgMQoJLQoJaW50IDE4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAxOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglyZXRzdWIKCi8vIGdldEN1ck1heFN0YWtlUGVyUG9vbCh1aW50NjQpdWludDY0CiphYmlfcm91dGVfZ2V0Q3VyTWF4U3Rha2VQZXJQb29sOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBnZXRDdXJNYXhTdGFrZVBlclBvb2wodWludDY0KXVpbnQ2NAoJY2FsbHN1YiBnZXRDdXJNYXhTdGFrZVBlclBvb2wKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBnZXRDdXJNYXhTdGFrZVBlclBvb2wodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSk6IHVpbnQ2NAovLwovLyBDYWxjdWxhdGUgdGhlIG1heGltdW0gc3Rha2UgcGVyIHBvb2wgZm9yIGEgZ2l2ZW4gdmFsaWRhdG9yLgovLyBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIG1heEFsZ29QZXJQb29sLCBidXQgaXQgc2hvdWxkIGFsc28gbmV2ZXIgZ28gYWJvdmUgTWF4QWxsb3dlZFN0YWtlIC8gbnVtUG9vbHMgc28KLy8gYXMgcG9vbHMgYXJlIGFkZGVkIHRoZSBtYXggYWxsb3dlZCBwZXIgcG9vbCBjYW4gcmVkdWNlLgovLwovLyBAcGFyYW0ge1ZhbGlkYXRvcklkVHlwZX0gdmFsaWRhdG9ySWQgLSBUaGUgaWQgb2YgdGhlIHZhbGlkYXRvci4KZ2V0Q3VyTWF4U3Rha2VQZXJQb29sOgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM1NwoJLy8gbnVtUG9vbHMgPSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnN0YXRlLm51bVBvb2xzIGFzIHVpbnQ2NAoJaW50IDI0MgoJaW50IDIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDAgLy8gbnVtUG9vbHM6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM1OAoJLy8gaGFyZE1heERpdmlkZWRCZXR3ZWVuUG9vbHMgPSB0aGlzLm1heEFsbG93ZWRTdGFrZSgpIC8gbnVtUG9vbHMKCWNhbGxzdWIgbWF4QWxsb3dlZFN0YWtlCglmcmFtZV9kaWcgMCAvLyBudW1Qb29sczogdWludDY0CgkvCglmcmFtZV9idXJ5IDEgLy8gaGFyZE1heERpdmlkZWRCZXR3ZWVuUG9vbHM6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM1OQoJLy8gbWF4UGVyUG9vbDogdWludDY0ID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubWF4QWxnb1BlclBvb2wKCWludCAyMTcKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAyIC8vIG1heFBlclBvb2w6IHVpbnQ2NAoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozNjAKCS8vIG1heFBlclBvb2wgPT09IDAKCWZyYW1lX2RpZyAyIC8vIG1heFBlclBvb2w6IHVpbnQ2NAoJaW50IDAKCT09CglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzYxCgkvLyBtYXhQZXJQb29sID0gdGhpcy5tYXhBbGdvQWxsb3dlZFBlclBvb2woKQoJY2FsbHN1YiBtYXhBbGdvQWxsb3dlZFBlclBvb2wKCWZyYW1lX2J1cnkgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCippZjFfZW5kOgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM2MwoJLy8gaGFyZE1heERpdmlkZWRCZXR3ZWVuUG9vbHMgPCBtYXhQZXJQb29sCglmcmFtZV9kaWcgMSAvLyBoYXJkTWF4RGl2aWRlZEJldHdlZW5Qb29sczogdWludDY0CglmcmFtZV9kaWcgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCTwKCWJ6ICppZjJfZW5kCgoJLy8gKmlmMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozNjQKCS8vIG1heFBlclBvb2wgPSBoYXJkTWF4RGl2aWRlZEJldHdlZW5Qb29scwoJZnJhbWVfZGlnIDEgLy8gaGFyZE1heERpdmlkZWRCZXR3ZWVuUG9vbHM6IHVpbnQ2NAoJZnJhbWVfYnVyeSAyIC8vIG1heFBlclBvb2w6IHVpbnQ2NAoKKmlmMl9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozNjYKCS8vIHJldHVybiBtYXhQZXJQb29sCglmcmFtZV9kaWcgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGRvZXNTdGFrZXJOZWVkVG9QYXlNQlIoYWRkcmVzcylib29sCiphYmlfcm91dGVfZG9lc1N0YWtlck5lZWRUb1BheU1CUjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3Rha2VyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHN0YWtlcikgZm9yIGRvZXNTdGFrZXJOZWVkVG9QYXlNQlIgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgZG9lc1N0YWtlck5lZWRUb1BheU1CUihhZGRyZXNzKWJvb2wKCWNhbGxzdWIgZG9lc1N0YWtlck5lZWRUb1BheU1CUgoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBkb2VzU3Rha2VyTmVlZFRvUGF5TUJSKHN0YWtlcjogQWRkcmVzcyk6IGJvb2xlYW4KLy8KLy8gSGVscGVyIGNhbGxlcnMgY2FuIGNhbGwgdy8gc2ltdWxhdGUgdG8gZGV0ZXJtaW5lIGlmICdBZGRTdGFrZXInIE1CUiBzaG91bGQgYmUgaW5jbHVkZWQgdy8gc3Rha2luZyBhbW91bnQKLy8gQHBhcmFtIHN0YWtlcgpkb2VzU3Rha2VyTmVlZFRvUGF5TUJSOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Mzc1CgkvLyByZXR1cm4gIXRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLmV4aXN0cwoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cglib3hfbGVuCglzd2FwCglwb3AKCSEKCXJldHN1YgoKLy8gZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50KGFkZHJlc3MpKHVpbnQ2NCx1aW50NjQsdWludDY0KVtdCiphYmlfcm91dGVfZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBzdGFrZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMCAoc3Rha2VyKSBmb3IgZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50IG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGdldFN0YWtlZFBvb2xzRm9yQWNjb3VudChhZGRyZXNzKSh1aW50NjQsdWludDY0LHVpbnQ2NClbXQoJY2FsbHN1YiBnZXRTdGFrZWRQb29sc0ZvckFjY291bnQKCWR1cAoJbGVuCglpbnQgMjQKCS8KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBnZXRTdGFrZWRQb29sc0ZvckFjY291bnQoc3Rha2VyOiBBZGRyZXNzKTogVmFsaWRhdG9yUG9vbEtleVtdCi8vCi8vIFJldHJpZXZlcyB0aGUgc3Rha2VkIHBvb2xzIGZvciBhbiBhY2NvdW50LgovLwovLyBAcGFyYW0ge0FkZHJlc3N9IHN0YWtlciAtIFRoZSBhY2NvdW50IHRvIHJldHJpZXZlIHN0YWtlZCBwb29scyBmb3IuCi8vIEByZXR1cm4ge1ZhbGlkYXRvclBvb2xLZXlbXX0gLSBUaGUgYXJyYXkgb2Ygc3Rha2VkIHBvb2xzIGZvciB0aGUgYWNjb3VudC4KZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czozODUKCS8vICF0aGlzLnN0YWtlclBvb2xTZXQoc3Rha2VyKS5leGlzdHMKCWJ5dGUgMHg3MzcwNzMgLy8gInNwcyIKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZXI6IEFkZHJlc3MKCWNvbmNhdAoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Mzg2CgkvLyByZXR1cm4gW10KCWJ5dGUgMHgKCWIgKmdldFN0YWtlZFBvb2xzRm9yQWNjb3VudCpyZXR1cm4KCippZjNfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Mzg4CgkvLyByZXREYXRhOiBWYWxpZGF0b3JQb29sS2V5W10gPSBbXQoJYnl0ZSAweAoJZnJhbWVfYnVyeSAwIC8vIHJldERhdGE6IFZhbGlkYXRvclBvb2xLZXlbXQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM4OQoJLy8gcG9vbFNldCA9IGNsb25lKHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlKQoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLnN0YWtlclBvb2xTZXQoc3Rha2VyKS52YWx1ZQoJYXNzZXJ0CglmcmFtZV9idXJ5IDEgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM5MAoJLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBwb29sU2V0Lmxlbmd0aDsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMiAvLyBpOiB1aW50NjQKCipmb3JfMToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM5MAoJLy8gaSA8IHBvb2xTZXQubGVuZ3RoCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCA2Cgk8CglieiAqZm9yXzFfZW5kCgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM5MQoJLy8gcG9vbFNldFtpXS5pZCAhPT0gMAoJZnJhbWVfZGlnIDEgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDAKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaW50IDAKCSE9CglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MzkyCgkvLyByZXREYXRhLnB1c2gocG9vbFNldFtpXSkKCWZyYW1lX2RpZyAwIC8vIHJldERhdGE6IFZhbGlkYXRvclBvb2xLZXlbXQoJZnJhbWVfZGlnIDEgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDI0CglleHRyYWN0MwoJY29uY2F0CglmcmFtZV9idXJ5IDAgLy8gcmV0RGF0YTogVmFsaWRhdG9yUG9vbEtleVtdCgoqaWY0X2VuZDoKCipmb3JfMV9jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM5MAoJLy8gaSArPSAxCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDIgLy8gaTogdWludDY0CgliICpmb3JfMQoKKmZvcl8xX2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjM5NQoJLy8gcmV0dXJuIHJldERhdGEKCWZyYW1lX2RpZyAwIC8vIHJldERhdGE6IFZhbGlkYXRvclBvb2xLZXlbXQoKKmdldFN0YWtlZFBvb2xzRm9yQWNjb3VudCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGdldFRva2VuUGF5b3V0UmF0aW8odWludDY0KSh1aW50NjRbMjRdLHVpbnQ2NCkKKmFiaV9yb3V0ZV9nZXRUb2tlblBheW91dFJhdGlvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBnZXRUb2tlblBheW91dFJhdGlvKHVpbnQ2NCkodWludDY0WzI0XSx1aW50NjQpCgljYWxsc3ViIGdldFRva2VuUGF5b3V0UmF0aW8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBnZXRUb2tlblBheW91dFJhdGlvKHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUpOiBQb29sVG9rZW5QYXlvdXRSYXRpbwovLwovLyBSZXRyaWV2ZXMgdGhlIHRva2VuIHBheW91dCByYXRpbyBmb3IgYSBnaXZlbiB2YWxpZGF0b3IgLSByZXR1cm5pbmcgdGhlIHBvb2wgcmF0aW9zIG9mIHdob2xlIHNvIHRoYXQgdG9rZW4KLy8gcGF5b3V0cyBhY3Jvc3MgcG9vbHMgY2FuIGJlIGJhc2VkIG9uIGEgc3RhYmxlIHNuYXBob3N0IG9mIHN0YWtlLgovLwovLyBAcGFyYW0ge1ZhbGlkYXRvcklkVHlwZX0gdmFsaWRhdG9ySWQgLSBUaGUgaWQgb2YgdGhlIHZhbGlkYXRvci4KLy8gQHJldHVybiB7UG9vbFRva2VuUGF5b3V0UmF0aW99IC0gVGhlIHRva2VuIHBheW91dCByYXRpbyBmb3IgdGhlIHZhbGlkYXRvci4KZ2V0VG9rZW5QYXlvdXRSYXRpbzoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQwNwoJLy8gcmV0dXJuIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUudG9rZW5QYXlvdXRSYXRpbwoJaW50IDcwMCAvLyBoZWFkT2Zmc2V0CglpbnQgMjAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJcmV0c3ViCgovLyBnZXROb2RlUG9vbEFzc2lnbm1lbnRzKHVpbnQ2NCkoKHVpbnQ2NFszXSlbOF0pCiphYmlfcm91dGVfZ2V0Tm9kZVBvb2xBc3NpZ25tZW50czoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZ2V0Tm9kZVBvb2xBc3NpZ25tZW50cyh1aW50NjQpKCh1aW50NjRbM10pWzhdKQoJY2FsbHN1YiBnZXROb2RlUG9vbEFzc2lnbm1lbnRzCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZ2V0Tm9kZVBvb2xBc3NpZ25tZW50cyh2YWxpZGF0b3JJZDogdWludDY0KTogTm9kZVBvb2xBc3NpZ25tZW50Q29uZmlnCmdldE5vZGVQb29sQXNzaWdubWVudHM6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0MTIKCS8vIGFzc2VydCh0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLmV4aXN0cywgInRoZSBzcGVjaWZpZWQgdmFsaWRhdG9yIGlkIGRvZXNuJ3QgZXhpc3QiKQoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJYm94X2xlbgoJc3dhcAoJcG9wCgoJLy8gdGhlIHNwZWNpZmllZCB2YWxpZGF0b3IgaWQgZG9lc24ndCBleGlzdAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NDE0CgkvLyByZXR1cm4gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5ub2RlUG9vbEFzc2lnbm1lbnRzCglpbnQgOTAwIC8vIGhlYWRPZmZzZXQKCWludCAxOTIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogdWludDY0CglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglyZXRzdWIKCi8vIGdldE5GRFJlZ2lzdHJ5SUQoKXVpbnQ2NAoqYWJpX3JvdXRlX2dldE5GRFJlZ2lzdHJ5SUQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgZ2V0TkZEUmVnaXN0cnlJRCgpdWludDY0CgljYWxsc3ViIGdldE5GRFJlZ2lzdHJ5SUQKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBnZXRORkRSZWdpc3RyeUlEKCk6IHVpbnQ2NApnZXRORkRSZWdpc3RyeUlEOgoJcHJvdG8gMCAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NDE4CgkvLyByZXR1cm4gdGhpcy5uZmRSZWdpc3RyeUFwcElkCglwdXNoaW50IFRNUExfbmZkUmVnaXN0cnlBcHBJZAoJcmV0c3ViCgovLyBhZGRWYWxpZGF0b3IocGF5LHN0cmluZywodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkpdWludDY0CiphYmlfcm91dGVfYWRkVmFsaWRhdG9yOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBjb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludCAyNDIKCT09CgoJLy8gYXJndW1lbnQgMCAoY29uZmlnKSBmb3IgYWRkVmFsaWRhdG9yIG11c3QgYmUgYSAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWFzc2VydAoKCS8vIG5mZE5hbWU6IHN0cmluZwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCgkvLyBtYnJQYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAyIChtYnJQYXltZW50KSBmb3IgYWRkVmFsaWRhdG9yIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYWRkVmFsaWRhdG9yKHBheSxzdHJpbmcsKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpKXVpbnQ2NAoJY2FsbHN1YiBhZGRWYWxpZGF0b3IKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhZGRWYWxpZGF0b3IobWJyUGF5bWVudDogUGF5VHhuLCBuZmROYW1lOiBzdHJpbmcsIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnKTogdWludDY0Ci8vCi8vIEFkZHMgYSBuZXcgdmFsaWRhdG9yCi8vIFJlcXVpcmVzIGF0IGxlYXN0IDEwIEFMR08gYXMgdGhlICdmZWUnIGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gaGVscCBkaXNzdWFkZSBzcGFtbWVkIHZhbGlkYXRvciBhZGRzLgovLwovLyBAcGFyYW0ge1BheVR4bn0gbWJyUGF5bWVudCBwYXltZW50IGZyb20gY2FsbGVyIHdoaWNoIGNvdmVycyBtYnIgaW5jcmVhc2Ugb2YgbmV3IHZhbGlkYXRvciBzdG9yYWdlCi8vIEBwYXJhbSB7c3RyaW5nfSBuZmROYW1lIChPcHRpb25hbCkgTmFtZSBvZiBuZmQgKHVzZWQgYXMgZG91YmxlLWNoZWNrIGFnYWluc3QgaWQgc3BlY2lmaWVkIGluIGNvbmZpZykKLy8gQHBhcmFtIHtWYWxpZGF0b3JDb25maWd9IGNvbmZpZyBWYWxpZGF0b3JDb25maWcgc3RydWN0Ci8vIEByZXR1cm5zIHt1aW50NjR9IHZhbGlkYXRvciBpZAphZGRWYWxpZGF0b3I6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQzMAoJLy8gdGhpcy52YWxpZGF0ZUNvbmZpZyhjb25maWcpCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWNhbGxzdWIgdmFsaWRhdGVDb25maWcKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0MzEKCS8vIGFzc2VydChjb25maWcub3duZXIgIT09IEFkZHJlc3MuemVyb0FkZHJlc3MpCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgOCAzMgoJZ2xvYmFsIFplcm9BZGRyZXNzCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NDMyCgkvLyBhc3NlcnQoY29uZmlnLm1hbmFnZXIgIT09IEFkZHJlc3MuemVyb0FkZHJlc3MpCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgNDAgMzIKCWdsb2JhbCBaZXJvQWRkcmVzcwoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQzMwoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gY29uZmlnLm93bmVyLCAnc2VuZGVyIG11c3QgYmUgb3duZXIgdG8gYWRkIG5ldyB2YWxpZGF0b3InKQoJdHhuIFNlbmRlcgoJZnJhbWVfZGlnIC0zIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDggMzIKCT09CgoJLy8gc2VuZGVyIG11c3QgYmUgb3duZXIgdG8gYWRkIG5ldyB2YWxpZGF0b3IKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQzNQoJLy8gdmVyaWZ5UGF5VHhuKG1iclBheW1lbnQsIHsgcmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsIGFtb3VudDogdGhpcy5nZXRNYnJBbW91bnRzKCkuYWRkVmFsaWRhdG9yTWJyIH0pCgkvLyB2ZXJpZnkgcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBtYnJQYXltZW50OiBQYXlUeG4KCWd0eG5zIFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6Im1iclBheW1lbnQiLCJmaWVsZCI6InJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIHZlcmlmeSBhbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBtYnJQYXltZW50OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJY2FsbHN1YiBnZXRNYnJBbW91bnRzCglleHRyYWN0IDAgOAoJYnRvaQoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6Im1iclBheW1lbnQiLCJmaWVsZCI6ImFtb3VudCIsImV4cGVjdGVkIjoidGhpcy5nZXRNYnJBbW91bnRzKCkuYWRkVmFsaWRhdG9yTWJyIn0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQzNwoJLy8gYXNzZXJ0KG1iclBheW1lbnQuZmVlID4gMTAgKiAxMDAwMDAwLCAnZmVlIG11c3QgYmUgMTAgQUxHTyBvciBtb3JlIHRvIHByZXZlbnQgc3BhbW1pbmcgb2YgdmFsaWRhdG9ycycpCglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5bWVudDogUGF5VHhuCglndHhucyBGZWUKCWludCAxMDAwMDAwMAoJPgoKCS8vIGZlZSBtdXN0IGJlIDEwIEFMR08gb3IgbW9yZSB0byBwcmV2ZW50IHNwYW1taW5nIG9mIHZhbGlkYXRvcnMKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ0MAoJLy8gdmFsaWRhdG9ySWQgPSB0aGlzLm51bVZhbGlkYXRvcnMudmFsdWUgKyAxCglieXRlIDB4NmU3NTZkNTYgLy8gIm51bVYiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMCAvLyB2YWxpZGF0b3JJZDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NDQxCgkvLyB0aGlzLm51bVZhbGlkYXRvcnMudmFsdWUgPSB2YWxpZGF0b3JJZAoJYnl0ZSAweDZlNzU2ZDU2IC8vICJudW1WIgoJZnJhbWVfZGlnIDAgLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NDMKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkuY3JlYXRlKCkKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvcklkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJaW50IDEwOTIKCWJveF9jcmVhdGUKCXBvcAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ0NAoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcgPSBjb25maWcKCWludCAwCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAwIC8vIHZhbGlkYXRvcklkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NDUKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLmlkID0gdmFsaWRhdG9ySWQKCWludCAwCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JJZDogdWludDY0CglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JJZDogdWludDY0CglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ0OAoJLy8gY29uZmlnLm5mZEZvckluZm8gIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBjb25maWc6IFZhbGlkYXRvckNvbmZpZwoJZXh0cmFjdCA3MiA4CglidG9pCglpbnQgMAoJIT0KCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NTAKCS8vIHNlbmRBcHBDYWxsKHsKCS8vICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHRoaXMubmZkUmVnaXN0cnlBcHBJZCksCgkvLyAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25BcmdzOiBbJ2lzX3ZhbGlkX25mZF9hcHBpZCcsIG5mZE5hbWUsIGl0b2IoY29uZmlnLm5mZEZvckluZm8pXSwKCS8vICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnM6IFtBcHBJRC5mcm9tVWludDY0KGNvbmZpZy5uZmRGb3JJbmZvKV0sCgkvLyAgICAgICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NTEKCS8vIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQodGhpcy5uZmRSZWdpc3RyeUFwcElkKQoJcHVzaGludCBUTVBMX25mZFJlZ2lzdHJ5QXBwSWQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ1MgoJLy8gYXBwbGljYXRpb25BcmdzOiBbJ2lzX3ZhbGlkX25mZF9hcHBpZCcsIG5mZE5hbWUsIGl0b2IoY29uZmlnLm5mZEZvckluZm8pXQoJYnl0ZSAweDY5NzM1Zjc2NjE2YzY5NjQ1ZjZlNjY2NDVmNjE3MDcwNjk2NCAvLyAiaXNfdmFsaWRfbmZkX2FwcGlkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAtMiAvLyBuZmROYW1lOiBzdHJpbmcKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgNzIgOAoJYnRvaQoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NTMKCS8vIGFwcGxpY2F0aW9uczogW0FwcElELmZyb21VaW50NjQoY29uZmlnLm5mZEZvckluZm8pXQoJZnJhbWVfZGlnIC0zIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDcyIDgKCWJ0b2kKCWl0eG5fZmllbGQgQXBwbGljYXRpb25zCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ1NQoJLy8gYXNzZXJ0KGJ0b2kodGhpcy5pdHhuLmxhc3RMb2cpID09PSAxLCAicHJvdmlkZWQgTkZEIGlzbid0IHZhbGlkIikKCWl0eG4gTGFzdExvZwoJYnRvaQoJaW50IDEKCT09CgoJLy8gcHJvdmlkZWQgTkZEIGlzbid0IHZhbGlkCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NTcKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IChBcHBJRC5mcm9tVWludDY0KGNvbmZpZy5uZmRGb3JJbmZvKS5nbG9iYWxTdGF0ZSgnaS5vd25lci5hJykgYXMgQWRkcmVzcyksCgkvLyAgICAgICAgICAgICAgICAgJ0lmIHNwZWNpZnlpbmcgTkZELCBhY2NvdW50IGFkZGluZyB2YWxpZGF0b3IgbXVzdCBiZSBvd25lcicsCgkvLyAgICAgICAgICAgICApCgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgLTMgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgNzIgOAoJYnRvaQoJYnl0ZSAweDY5MmU2Zjc3NmU2NTcyMmU2MSAvLyAiaS5vd25lci5hIgoJYXBwX2dsb2JhbF9nZXRfZXgKCgkvLyBnbG9iYWwgc3RhdGUgdmFsdWUgZG9lcyBub3QgZXhpc3Q6IEFwcElELmZyb21VaW50NjQoY29uZmlnLm5mZEZvckluZm8pLmdsb2JhbFN0YXRlKCdpLm93bmVyLmEnKQoJYXNzZXJ0Cgk9PQoKCS8vIElmIHNwZWNpZnlpbmcgTkZELCBhY2NvdW50IGFkZGluZyB2YWxpZGF0b3IgbXVzdCBiZSBvd25lcgoJYXNzZXJ0CgoqaWY1X2VuZDoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NjMKCS8vIGNvbmZpZy5lbnRyeUdhdGluZ1R5cGUgPT09IEdBVElOR19UWVBFX0NSRUFURURfQllfTkZEX0FERFJFU1NFUyB8fAoJLy8gICAgICAgICAgICAgY29uZmlnLmVudHJ5R2F0aW5nVHlwZSA9PT0gR0FUSU5HX1RZUEVfU0VHTUVOVF9PRl9ORkQKCWZyYW1lX2RpZyAtMyAvLyBjb25maWc6IFZhbGlkYXRvckNvbmZpZwoJZXh0cmFjdCA4MCAxCglidG9pCglpbnQgMwoJPT0KCWR1cAoJYm56ICpza2lwX29yMAoJZnJhbWVfZGlnIC0zIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDgwIDEKCWJ0b2kKCWludCA0Cgk9PQoJfHwKCipza2lwX29yMDoKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0NjcKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgICAgICB0aGlzLmlzTkZEQXBwSURWYWxpZChjb25maWcuZW50cnlHYXRpbmdBc3NldHNbMF0pLAoJLy8gICAgICAgICAgICAgICAgICdwcm92aWRlZCBORkQgQXBwIGlkIGZvciBnYXRpbmcgbXVzdCBiZSB2YWxpZCBORkQnLAoJLy8gICAgICAgICAgICAgKQoJZnJhbWVfZGlnIC0zIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDExMyA4CglidG9pCgljYWxsc3ViIGlzTkZEQXBwSURWYWxpZAoKCS8vIHByb3ZpZGVkIE5GRCBBcHAgaWQgZm9yIGdhdGluZyBtdXN0IGJlIHZhbGlkIE5GRAoJYXNzZXJ0CgoqaWY2X2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ3MwoJLy8gcmV0dXJuIHZhbGlkYXRvcklkCglmcmFtZV9kaWcgMCAvLyB2YWxpZGF0b3JJZDogdWludDY0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIGNoYW5nZVZhbGlkYXRvck1hbmFnZXIodWludDY0LGFkZHJlc3Mpdm9pZAoqYWJpX3JvdXRlX2NoYW5nZVZhbGlkYXRvck1hbmFnZXI6CgkvLyBtYW5hZ2VyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKG1hbmFnZXIpIGZvciBjaGFuZ2VWYWxpZGF0b3JNYW5hZ2VyIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBjaGFuZ2VWYWxpZGF0b3JNYW5hZ2VyKHVpbnQ2NCxhZGRyZXNzKXZvaWQKCWNhbGxzdWIgY2hhbmdlVmFsaWRhdG9yTWFuYWdlcgoJaW50IDEKCXJldHVybgoKLy8gY2hhbmdlVmFsaWRhdG9yTWFuYWdlcih2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlLCBtYW5hZ2VyOiBBZGRyZXNzKTogdm9pZAovLwovLyBDaGFuZ2VzIHRoZSBWYWxpZGF0b3IgbWFuYWdlciBmb3IgYSBzcGVjaWZpYyBWYWxpZGF0b3IgaWQuCi8vIFsgT05MWSBPV05FUiBDQU4gQ0hBTkdFIF0KLy8KLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3IgdG8gY2hhbmdlIHRoZSBtYW5hZ2VyIGZvci4KLy8gQHBhcmFtIHtBZGRyZXNzfSBtYW5hZ2VyIC0gVGhlIG5ldyBtYW5hZ2VyIGFkZHJlc3MuCmNoYW5nZVZhbGlkYXRvck1hbmFnZXI6Cglwcm90byAyIDAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo0ODQKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcub3duZXIsCgkvLyAgICAgICAgICAgICAnY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IHZhbGlkYXRvciBvd25lcicsCgkvLyAgICAgICAgICkKCXR4biBTZW5kZXIKCWludCA4CglpbnQgMzIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0Cgk9PQoKCS8vIGNhbiBvbmx5IGJlIGNhbGxlZCBieSB2YWxpZGF0b3Igb3duZXIKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjQ4OAoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubWFuYWdlciA9IG1hbmFnZXIKCWludCA0MAoJZnJhbWVfZGlnIC0yIC8vIG1hbmFnZXI6IEFkZHJlc3MKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCglyZXRzdWIKCi8vIGNoYW5nZVZhbGlkYXRvclN1bnNldEluZm8odWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2NoYW5nZVZhbGlkYXRvclN1bnNldEluZm86CgkvLyBzdW5zZXR0aW5nVG86IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoKCS8vIHN1bnNldHRpbmdPbjogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgY2hhbmdlVmFsaWRhdG9yU3Vuc2V0SW5mbyh1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIGNoYW5nZVZhbGlkYXRvclN1bnNldEluZm8KCWludCAxCglyZXR1cm4KCi8vIGNoYW5nZVZhbGlkYXRvclN1bnNldEluZm8odmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgc3Vuc2V0dGluZ09uOiB1aW50NjQsIHN1bnNldHRpbmdUbzogVmFsaWRhdG9ySWRUeXBlKTogdm9pZAovLwovLyBVcGRhdGVzIHRoZSBzdW5zZXQgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gdmFsaWRhdG9yLgovLyBbIE9OTFkgT1dORVIgQ0FOIENIQU5HRSBdCi8vCi8vIEBwYXJhbSB7VmFsaWRhdG9ySWRUeXBlfSB2YWxpZGF0b3JJZCAtIFRoZSBpZCBvZiB0aGUgdmFsaWRhdG9yIHRvIHVwZGF0ZS4KLy8gQHBhcmFtIHt1aW50NjR9IHN1bnNldHRpbmdPbiAtIFRoZSBuZXcgc3Vuc2V0IHRpbWVzdGFtcC4KLy8gQHBhcmFtIHt1aW50NjR9IHN1bnNldHRpbmdUbyAtIFRoZSBuZXcgc3Vuc2V0IHRvIHZhbGlkYXRvciBpZC4KY2hhbmdlVmFsaWRhdG9yU3Vuc2V0SW5mbzoKCXByb3RvIDMgMAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjUwMAoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgdGhpcy50eG4uc2VuZGVyID09PSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5vd25lciwKCS8vICAgICAgICAgICAgICdjYW4gb25seSBiZSBjYWxsZWQgYnkgdmFsaWRhdG9yIG93bmVyJywKCS8vICAgICAgICAgKQoJdHhuIFNlbmRlcgoJaW50IDgKCWludCAzMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCT09CgoJLy8gY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IHZhbGlkYXRvciBvd25lcgoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTA0CgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5zdW5zZXR0aW5nT24gPSBzdW5zZXR0aW5nT24KCWludCAyMjYKCWZyYW1lX2RpZyAtMiAvLyBzdW5zZXR0aW5nT246IHVpbnQ2NAoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1MDUKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLnN1bnNldHRpbmdUbyA9IHN1bnNldHRpbmdUbwoJaW50IDIzNAoJZnJhbWVfZGlnIC0zIC8vIHN1bnNldHRpbmdUbzogVmFsaWRhdG9ySWRUeXBlCglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoJcmV0c3ViCgovLyBjaGFuZ2VWYWxpZGF0b3JORkQodWludDY0LHVpbnQ2NCxzdHJpbmcpdm9pZAoqYWJpX3JvdXRlX2NoYW5nZVZhbGlkYXRvck5GRDoKCS8vIG5mZE5hbWU6IHN0cmluZwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZXh0cmFjdCAyIDAKCgkvLyBuZmRBcHBJRDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgY2hhbmdlVmFsaWRhdG9yTkZEKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXZvaWQKCWNhbGxzdWIgY2hhbmdlVmFsaWRhdG9yTkZECglpbnQgMQoJcmV0dXJuCgovLyBjaGFuZ2VWYWxpZGF0b3JORkQodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgbmZkQXBwSUQ6IHVpbnQ2NCwgbmZkTmFtZTogc3RyaW5nKTogdm9pZAovLwovLyBDaGFuZ2VzIHRoZSBORkQgZm9yIGEgdmFsaWRhdG9yIGluIHRoZSB2YWxpZGF0b3JMaXN0IGNvbnRyYWN0LgovLyBbIE9OTFkgT1dORVIgQ0FOIENIQU5HRSBdCi8vCi8vIEBwYXJhbSB7VmFsaWRhdG9ySWRUeXBlfSB2YWxpZGF0b3JJZCAtIFRoZSBpZCBvZiB0aGUgdmFsaWRhdG9yIHRvIHVwZGF0ZS4KLy8gQHBhcmFtIHt1aW50NjR9IG5mZEFwcElEIC0gVGhlIGFwcGxpY2F0aW9uIGlkIG9mIHRoZSBORkQgdG8gYXNzaWduIHRvIHRoZSB2YWxpZGF0b3IuCi8vIEBwYXJhbSB7c3RyaW5nfSBuZmROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIE5GRCAod2hpY2ggbXVzdCBtYXRjaCkKY2hhbmdlVmFsaWRhdG9yTkZEOgoJcHJvdG8gMyAwCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTE4CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLm93bmVyLAoJLy8gICAgICAgICAgICAgJ2NhbiBvbmx5IGJlIGNhbGxlZCBieSB2YWxpZGF0b3Igb3duZXInLAoJLy8gICAgICAgICApCgl0eG4gU2VuZGVyCglpbnQgOAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJPT0KCgkvLyBjYW4gb25seSBiZSBjYWxsZWQgYnkgdmFsaWRhdG9yIG93bmVyCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1MjMKCS8vIHNlbmRBcHBDYWxsKHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQodGhpcy5uZmRSZWdpc3RyeUFwcElkKSwKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uQXJnczogWydpc192YWxpZF9uZmRfYXBwaWQnLCBuZmROYW1lLCBpdG9iKG5mZEFwcElEKV0sCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbnM6IFtBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKV0sCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjUyNAoJLy8gYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NCh0aGlzLm5mZFJlZ2lzdHJ5QXBwSWQpCglwdXNoaW50IFRNUExfbmZkUmVnaXN0cnlBcHBJZAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTI1CgkvLyBhcHBsaWNhdGlvbkFyZ3M6IFsnaXNfdmFsaWRfbmZkX2FwcGlkJywgbmZkTmFtZSwgaXRvYihuZmRBcHBJRCldCglieXRlIDB4Njk3MzVmNzY2MTZjNjk2NDVmNmU2NjY0NWY2MTcwNzA2OTY0IC8vICJpc192YWxpZF9uZmRfYXBwaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIC0zIC8vIG5mZE5hbWU6IHN0cmluZwoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAtMiAvLyBuZmRBcHBJRDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjUyNgoJLy8gYXBwbGljYXRpb25zOiBbQXBwSUQuZnJvbVVpbnQ2NChuZmRBcHBJRCldCglmcmFtZV9kaWcgLTIgLy8gbmZkQXBwSUQ6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTI5CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IChBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKS5nbG9iYWxTdGF0ZSgnaS5vd25lci5hJykgYXMgQWRkcmVzcyksCgkvLyAgICAgICAgICAgICAnSWYgc3BlY2lmeWluZyBORkQsIGFjY291bnQgYWRkaW5nIHZhbGlkYXRvciBtdXN0IGJlIG93bmVyJywKCS8vICAgICAgICAgKQoJdHhuIFNlbmRlcgoJZnJhbWVfZGlnIC0yIC8vIG5mZEFwcElEOiB1aW50NjQKCWJ5dGUgMHg2OTJlNmY3NzZlNjU3MjJlNjEgLy8gImkub3duZXIuYSIKCWFwcF9nbG9iYWxfZ2V0X2V4CgoJLy8gZ2xvYmFsIHN0YXRlIHZhbHVlIGRvZXMgbm90IGV4aXN0OiBBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKS5nbG9iYWxTdGF0ZSgnaS5vd25lci5hJykKCWFzc2VydAoJPT0KCgkvLyBJZiBzcGVjaWZ5aW5nIE5GRCwgYWNjb3VudCBhZGRpbmcgdmFsaWRhdG9yIG11c3QgYmUgb3duZXIKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjUzMwoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubmZkRm9ySW5mbyA9IG5mZEFwcElECglpbnQgNzIKCWZyYW1lX2RpZyAtMiAvLyBuZmRBcHBJRDogdWludDY0CglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoJcmV0c3ViCgovLyBjaGFuZ2VWYWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcyh1aW50NjQsYWRkcmVzcyl2b2lkCiphYmlfcm91dGVfY2hhbmdlVmFsaWRhdG9yQ29tbWlzc2lvbkFkZHJlc3M6CgkvLyBjb21taXNzaW9uQWRkcmVzczogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChjb21taXNzaW9uQWRkcmVzcykgZm9yIGNoYW5nZVZhbGlkYXRvckNvbW1pc3Npb25BZGRyZXNzIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBjaGFuZ2VWYWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcyh1aW50NjQsYWRkcmVzcyl2b2lkCgljYWxsc3ViIGNoYW5nZVZhbGlkYXRvckNvbW1pc3Npb25BZGRyZXNzCglpbnQgMQoJcmV0dXJuCgovLyBjaGFuZ2VWYWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcyh2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlLCBjb21taXNzaW9uQWRkcmVzczogQWRkcmVzcyk6IHZvaWQKLy8KLy8gQ2hhbmdlIHRoZSBjb21taXNzaW9uIGFkZHJlc3MgdGhhdCB2YWxpZGF0b3IgcmV3YXJkcyBhcmUgc2VudCB0by4KLy8gWyBPTkxZIE9XTkVSIENBTiBDSEFOR0UgXQpjaGFuZ2VWYWxpZGF0b3JDb21taXNzaW9uQWRkcmVzczoKCXByb3RvIDIgMAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjU0MQoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgdGhpcy50eG4uc2VuZGVyID09PSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5vd25lciwKCS8vICAgICAgICAgICAgICdjYW4gb25seSBiZSBjYWxsZWQgYnkgdmFsaWRhdG9yIG93bmVyJywKCS8vICAgICAgICAgKQoJdHhuIFNlbmRlcgoJaW50IDgKCWludCAzMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCT09CgoJLy8gY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IHZhbGlkYXRvciBvd25lcgoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTQ1CgkvLyBhc3NlcnQoY29tbWlzc2lvbkFkZHJlc3MgIT09IEFkZHJlc3MuemVyb0FkZHJlc3MpCglmcmFtZV9kaWcgLTIgLy8gY29tbWlzc2lvbkFkZHJlc3M6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjU0NgoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcudmFsaWRhdG9yQ29tbWlzc2lvbkFkZHJlc3MgPSBjb21taXNzaW9uQWRkcmVzcwoJaW50IDE3NwoJZnJhbWVfZGlnIC0yIC8vIGNvbW1pc3Npb25BZGRyZXNzOiBBZGRyZXNzCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoJcmV0c3ViCgovLyBjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvKHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0KXZvaWQKKmFiaV9yb3V0ZV9jaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvOgoJLy8gUmV3YXJkUGVyUGF5b3V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDYKCWJ0b2kKCgkvLyBHYXRpbmdBc3NldE1pbkJhbGFuY2U6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQoJYnRvaQoKCS8vIEVudHJ5R2F0aW5nQXNzZXRzOiB1aW50NjRbNF0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMiAoRW50cnlHYXRpbmdBc3NldHMpIGZvciBjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvIG11c3QgYmUgYSB1aW50NjRbNF0KCWFzc2VydAoKCS8vIEVudHJ5R2F0aW5nQWRkcmVzczogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAzIChFbnRyeUdhdGluZ0FkZHJlc3MpIGZvciBjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBFbnRyeUdhdGluZ1R5cGU6IHVpbnQ4Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDEKCT09CgoJLy8gYXJndW1lbnQgNCAoRW50cnlHYXRpbmdUeXBlKSBmb3IgY2hhbmdlVmFsaWRhdG9yUmV3YXJkSW5mbyBtdXN0IGJlIGEgdWludDgKCWFzc2VydAoJYnRvaQoKCS8vIHZhbGlkYXRvcklkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGNoYW5nZVZhbGlkYXRvclJld2FyZEluZm8odWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQpdm9pZAoJY2FsbHN1YiBjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvCglpbnQgMQoJcmV0dXJuCgovLyBjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvKHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUsIEVudHJ5R2F0aW5nVHlwZTogdWludDgsIEVudHJ5R2F0aW5nQWRkcmVzczogQWRkcmVzcywgRW50cnlHYXRpbmdBc3NldHM6IFN0YXRpY0FycmF5PHVpbnQ2NCwgND4sIEdhdGluZ0Fzc2V0TWluQmFsYW5jZTogdWludDY0LCBSZXdhcmRQZXJQYXlvdXQ6IHVpbnQ2NCk6IHZvaWQKLy8KLy8gQWxsb3cgdGhlIGFkZGl0aW9uYWwgcmV3YXJkcyAoZ2F0aW5nIGVudHJ5LCBhZGRpdGlvbmFsIHRva2VuIHJld2FyZHMpIGluZm9ybWF0aW9uIGJlIGNoYW5nZWQgYXQgd2lsbC4KLy8gWyBPTkxZIE9XTkVSIENBTiBDSEFOR0UgXQpjaGFuZ2VWYWxpZGF0b3JSZXdhcmRJbmZvOgoJcHJvdG8gNiAwCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTYxCgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLm93bmVyLAoJLy8gICAgICAgICAgICAgJ2NhbiBvbmx5IGJlIGNhbGxlZCBieSB2YWxpZGF0b3Igb3duZXInLAoJLy8gICAgICAgICApCgl0eG4gU2VuZGVyCglpbnQgOAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJPT0KCgkvLyBjYW4gb25seSBiZSBjYWxsZWQgYnkgdmFsaWRhdG9yIG93bmVyCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1NjYKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLmVudHJ5R2F0aW5nVHlwZSA9IEVudHJ5R2F0aW5nVHlwZQoJaW50IDgwCglmcmFtZV9kaWcgLTIgLy8gRW50cnlHYXRpbmdUeXBlOiB1aW50OAoJaXRvYgoJZXh0cmFjdCA3IDEKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTY3CgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5lbnRyeUdhdGluZ0FkZHJlc3MgPSBFbnRyeUdhdGluZ0FkZHJlc3MKCWludCA4MQoJZnJhbWVfZGlnIC0zIC8vIEVudHJ5R2F0aW5nQWRkcmVzczogQWRkcmVzcwoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1NjgKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLmVudHJ5R2F0aW5nQXNzZXRzID0gRW50cnlHYXRpbmdBc3NldHMKCWludCAxMTMKCWZyYW1lX2RpZyAtNCAvLyBFbnRyeUdhdGluZ0Fzc2V0czogU3RhdGljQXJyYXk8dWludDY0LCA0PgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1NjkKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLmdhdGluZ0Fzc2V0TWluQmFsYW5jZSA9IEdhdGluZ0Fzc2V0TWluQmFsYW5jZQoJaW50IDE0NQoJZnJhbWVfZGlnIC01IC8vIEdhdGluZ0Fzc2V0TWluQmFsYW5jZTogdWludDY0CglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjU3MAoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcucmV3YXJkUGVyUGF5b3V0ID0gUmV3YXJkUGVyUGF5b3V0CglpbnQgMTYxCglmcmFtZV9kaWcgLTYgLy8gUmV3YXJkUGVyUGF5b3V0OiB1aW50NjQKCWl0b2IKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCglyZXRzdWIKCi8vIGFkZFBvb2wocGF5LHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FkZFBvb2w6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIG5vZGVOdW06IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHZhbGlkYXRvcklkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBtYnJQYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAyIChtYnJQYXltZW50KSBmb3IgYWRkUG9vbCBtdXN0IGJlIGEgcGF5IHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBleGVjdXRlIGFkZFBvb2wocGF5LHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQsdWludDY0KQoJY2FsbHN1YiBhZGRQb29sCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYWRkUG9vbChtYnJQYXltZW50OiBQYXlUeG4sIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUsIG5vZGVOdW06IHVpbnQ2NCk6IFZhbGlkYXRvclBvb2xLZXkKLy8KLy8gQWRkcyBhIG5ldyBwb29sIHRvIGEgdmFsaWRhdG9yJ3MgcG9vbCBzZXQsIHJldHVybmluZyB0aGUgJ2tleScgdG8gcmVmZXJlbmNlIHRoZSBwb29sIGluIHRoZSBmdXR1cmUgZm9yIHN0YWtpbmcsIGV0Yy4KLy8gVGhlIGNhbGxlciBtdXN0IHBheSB0aGUgY29zdCBvZiB0aGUgdmFsaWRhdG9ycyBNQlIgaW5jcmVhc2UgYXMgd2VsbCBhcyB0aGUgTUJSIHRoYXQgd2lsbCBiZSBuZWVkZWQgZm9yIHRoZSBwb29sIGl0c2VsZi4KLy8KLy8gWyBPTkxZIE9XTkVSIE9SIE1BTkFHRVIgQ0FOIGNhbGwgXQovLyBAcGFyYW0ge1BheVR4bn0gbWJyUGF5bWVudCBwYXltZW50IGZyb20gY2FsbGVyIHdoaWNoIGNvdmVycyBtYnIgaW5jcmVhc2Ugb2YgYWRkaW5nIGEgbmV3IHBvb2wKLy8gQHBhcmFtIHt1aW50NjR9IHZhbGlkYXRvcklkIGlzIGlkIG9mIHZhbGlkYXRvciB0byBwb29sIHRvIChtdXN0IGJlIG93bmVyIG9yIG1hbmFnZXIpCi8vIEBwYXJhbSB7dWludDY0fSBub2RlTnVtIGlzIG5vZGUgbnVtYmVyIHRvIGFkZCB0bwovLyBAcmV0dXJucyB7VmFsaWRhdG9yUG9vbEtleX0gcG9vbCBrZXkgdG8gY3JlYXRlZCBwb29sCmFkZFBvb2w6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NTg2CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICB0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLm93bmVyIHx8CgkvLyAgICAgICAgICAgICAgICAgdGhpcy50eG4uc2VuZGVyID09PSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5tYW5hZ2VyLAoJLy8gICAgICAgICAgICAgJ2NhbiBvbmx5IGJlIGNhbGxlZCBieSBvd25lciBvciBtYW5hZ2VyIG9mIHZhbGlkYXRvcicsCgkvLyAgICAgICAgICkKCXR4biBTZW5kZXIKCWludCA4CglpbnQgMzIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0Cgk9PQoJZHVwCglibnogKnNraXBfb3IxCgl0eG4gU2VuZGVyCglpbnQgNDAKCWludCAzMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0yIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCT09Cgl8fAoKKnNraXBfb3IxOgoJLy8gY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IG93bmVyIG9yIG1hbmFnZXIgb2YgdmFsaWRhdG9yCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1OTMKCS8vIHZlcmlmeVBheVR4bihtYnJQYXltZW50LCB7IHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLCBhbW91bnQ6IHRoaXMuZ2V0TWJyQW1vdW50cygpLmFkZFBvb2xNYnIgfSkKCS8vIHZlcmlmeSByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIG1iclBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgUmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoibWJyUGF5bWVudCIsImZpZWxkIjoicmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IGFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIG1iclBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgQW1vdW50CgljYWxsc3ViIGdldE1ickFtb3VudHMKCWV4dHJhY3QgOCA4CglidG9pCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoibWJyUGF5bWVudCIsImZpZWxkIjoiYW1vdW50IiwiZXhwZWN0ZWQiOiJ0aGlzLmdldE1ickFtb3VudHMoKS5hZGRQb29sTWJyIn0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjU5NQoJLy8gYXNzZXJ0KHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkuZXhpc3RzLCAic3BlY2lmaWVkIHZhbGlkYXRvciBpZCBpc24ndCB2YWxpZCIpCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cglib3hfbGVuCglzd2FwCglwb3AKCgkvLyBzcGVjaWZpZWQgdmFsaWRhdG9yIGlkIGlzbid0IHZhbGlkCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1OTcKCS8vIG51bVBvb2xzOiB1aW50NjQgPSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnN0YXRlLm51bVBvb2xzIGFzIHVpbnQ2NAoJaW50IDI0MgoJaW50IDIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDAgLy8gbnVtUG9vbHM6IHVpbnQ2NAoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo1OTgKCS8vIChudW1Qb29scyBhcyB1aW50NjQpID49IE1BWF9QT09MUwoJZnJhbWVfZGlnIDAgLy8gbnVtUG9vbHM6IHVpbnQ2NAoJaW50IDI0Cgk+PQoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGFscmVhZHkgYXQgbWF4IHBvb2wgc2l6ZQoJZXJyCgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjYwMQoJLy8gbnVtUG9vbHMgKz0gMQoJZnJhbWVfZGlnIDAgLy8gbnVtUG9vbHM6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMCAvLyBudW1Qb29sczogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjA0CgkvLyBzZW5kQXBwQ2FsbCh7CgkvLyAgICAgICAgICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5Ob09wLAoJLy8gICAgICAgICAgICAgYXBwcm92YWxQcm9ncmFtOiBbCgkvLyAgICAgICAgICAgICAgICAgdGhpcy5zdGFraW5nUG9vbEFwcHJvdmFsUHJvZ3JhbS5leHRyYWN0KDAsIDQwOTYpLAoJLy8gICAgICAgICAgICAgICAgIHRoaXMuc3Rha2luZ1Bvb2xBcHByb3ZhbFByb2dyYW0uZXh0cmFjdCg0MDk2LCB0aGlzLnN0YWtpbmdQb29sQXBwcm92YWxQcm9ncmFtLnNpemUgLSA0MDk2KSwKCS8vICAgICAgICAgICAgIF0sCgkvLyAgICAgICAgICAgICBjbGVhclN0YXRlUHJvZ3JhbTogU3Rha2luZ1Bvb2wuY2xlYXJQcm9ncmFtKCksCgkvLyAgICAgICAgICAgICBnbG9iYWxOdW1VaW50OiBTdGFraW5nUG9vbC5zY2hlbWEuZ2xvYmFsLm51bVVpbnQsCgkvLyAgICAgICAgICAgICBnbG9iYWxOdW1CeXRlU2xpY2U6IFN0YWtpbmdQb29sLnNjaGVtYS5nbG9iYWwubnVtQnl0ZVNsaWNlLAoJLy8gICAgICAgICAgICAgZXh0cmFQcm9ncmFtUGFnZXM6IDMsCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbkFyZ3M6IFsKCS8vICAgICAgICAgICAgICAgICAvLyBjcmVhdGluZ0NvbnRyYWN0SUQsIHZhbGlkYXRvcklkLCBwb29sSWQsIG1pbkVudHJ5U3Rha2UKCS8vICAgICAgICAgICAgICAgICBtZXRob2QoJ2NyZWF0ZUFwcGxpY2F0aW9uKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkJyksCgkvLyAgICAgICAgICAgICAgICAgaXRvYih0aGlzLmFwcC5pZCksCgkvLyAgICAgICAgICAgICAgICAgaXRvYih2YWxpZGF0b3JJZCksCgkvLyAgICAgICAgICAgICAgICAgaXRvYihudW1Qb29scyBhcyB1aW50NjQpLAoJLy8gICAgICAgICAgICAgICAgIGl0b2IodGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubWluRW50cnlTdGFrZSksCgkvLyAgICAgICAgICAgICBdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2MDUKCS8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLk5vT3AKCWludCAwIC8vIE5vT3AKCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjA2CgkvLyBhcHByb3ZhbFByb2dyYW06IFsKCS8vICAgICAgICAgICAgICAgICB0aGlzLnN0YWtpbmdQb29sQXBwcm92YWxQcm9ncmFtLmV4dHJhY3QoMCwgNDA5NiksCgkvLyAgICAgICAgICAgICAgICAgdGhpcy5zdGFraW5nUG9vbEFwcHJvdmFsUHJvZ3JhbS5leHRyYWN0KDQwOTYsIHRoaXMuc3Rha2luZ1Bvb2xBcHByb3ZhbFByb2dyYW0uc2l6ZSAtIDQwOTYpLAoJLy8gICAgICAgICAgICAgXQoJYnl0ZSAweDcwNmY2ZjZjNTQ2NTZkNzA2YzYxNzQ2NTQxNzA3MDcyNmY3NjYxNmM0Mjc5NzQ2NTczIC8vICJwb29sVGVtcGxhdGVBcHByb3ZhbEJ5dGVzIgoJaW50IDAKCWludCA0MDk2Cglib3hfZXh0cmFjdAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwoJYnl0ZSAweDcwNmY2ZjZjNTQ2NTZkNzA2YzYxNzQ2NTQxNzA3MDcyNmY3NjYxNmM0Mjc5NzQ2NTczIC8vICJwb29sVGVtcGxhdGVBcHByb3ZhbEJ5dGVzIgoJaW50IDQwOTYKCWJ5dGUgMHg3MDZmNmY2YzU0NjU2ZDcwNmM2MTc0NjU0MTcwNzA3MjZmNzY2MTZjNDI3OTc0NjU3MyAvLyAicG9vbFRlbXBsYXRlQXBwcm92YWxCeXRlcyIKCWJveF9sZW4KCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuc3Rha2luZ1Bvb2xBcHByb3ZhbFByb2dyYW0uc2l6ZQoJYXNzZXJ0CglpbnQgNDA5NgoJLQoJYm94X2V4dHJhY3QKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2MTAKCS8vIGNsZWFyU3RhdGVQcm9ncmFtOiBTdGFraW5nUG9vbC5jbGVhclByb2dyYW0oKQoJYnl0ZSBiNjQgQ2c9PQoJaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjYxMQoJLy8gZ2xvYmFsTnVtVWludDogU3Rha2luZ1Bvb2wuc2NoZW1hLmdsb2JhbC5udW1VaW50CglpbnQgMTEKCWl0eG5fZmllbGQgR2xvYmFsTnVtVWludAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjYxMgoJLy8gZ2xvYmFsTnVtQnl0ZVNsaWNlOiBTdGFraW5nUG9vbC5zY2hlbWEuZ2xvYmFsLm51bUJ5dGVTbGljZQoJaW50IDMKCWl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjEzCgkvLyBleHRyYVByb2dyYW1QYWdlczogMwoJaW50IDMKCWl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2MTQKCS8vIGFwcGxpY2F0aW9uQXJnczogWwoJLy8gICAgICAgICAgICAgICAgIC8vIGNyZWF0aW5nQ29udHJhY3RJRCwgdmFsaWRhdG9ySWQsIHBvb2xJZCwgbWluRW50cnlTdGFrZQoJLy8gICAgICAgICAgICAgICAgIG1ldGhvZCgnY3JlYXRlQXBwbGljYXRpb24odWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQnKSwKCS8vICAgICAgICAgICAgICAgICBpdG9iKHRoaXMuYXBwLmlkKSwKCS8vICAgICAgICAgICAgICAgICBpdG9iKHZhbGlkYXRvcklkKSwKCS8vICAgICAgICAgICAgICAgICBpdG9iKG51bVBvb2xzIGFzIHVpbnQ2NCksCgkvLyAgICAgICAgICAgICAgICAgaXRvYih0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5taW5FbnRyeVN0YWtlKSwKCS8vICAgICAgICAgICAgIF0KCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24odWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIDAgLy8gbnVtUG9vbHM6IHVpbnQ2NAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWludCAyMDkKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjI0CgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnN0YXRlLm51bVBvb2xzID0gbnVtUG9vbHMgYXMgdWludDE2CglpbnQgMjQyCglmcmFtZV9kaWcgMCAvLyBudW1Qb29sczogdWludDY0CglpdG9iCglleHRyYWN0IDYgMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0yIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2MjcKCS8vIHBvb2xBcHBJZCA9IHRoaXMuaXR4bi5jcmVhdGVkQXBwbGljYXRpb25JRC5pZAoJaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAoJZnJhbWVfYnVyeSAxIC8vIHBvb2xBcHBJZDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjI4CgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnBvb2xzW251bVBvb2xzIC0gMV0ucG9vbEFwcElkID0gcG9vbEFwcElkCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAwIC8vIG51bVBvb2xzOiB1aW50NjQKCWludCAxCgktCglpbnQgMTgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDAKCSsKCWZyYW1lX2RpZyAxIC8vIHBvb2xBcHBJZDogdWludDY0CglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjYyOQoJLy8gdGhpcy5hZGRQb29sVG9Ob2RlKHZhbGlkYXRvcklkLCBwb29sQXBwSWQsIG5vZGVOdW0pCglmcmFtZV9kaWcgLTMgLy8gbm9kZU51bTogdWludDY0CglmcmFtZV9kaWcgMSAvLyBwb29sQXBwSWQ6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWNhbGxzdWIgYWRkUG9vbFRvTm9kZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjYzNwoJLy8gcmV0dXJuIHsgaWQ6IHZhbGlkYXRvcklkLCBwb29sSWQ6IG51bVBvb2xzIGFzIHVpbnQ2NCwgcG9vbEFwcElkOiB0aGlzLml0eG4hLmNyZWF0ZWRBcHBsaWNhdGlvbklELmlkIH0KCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCglmcmFtZV9kaWcgMCAvLyBudW1Qb29sczogdWludDY0CglpdG9iCgljb25jYXQKCWl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKCWl0b2IKCWNvbmNhdAoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDEKCXJldHN1YgoKLy8gYWRkU3Rha2UocGF5LHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FkZFN0YWtlOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyB2YWx1ZVRvVmVyaWZ5OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gc3Rha2VkQW1vdW50UGF5bWVudDogcGF5Cgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBwYXkKCT09CgoJLy8gYXJndW1lbnQgMiAoc3Rha2VkQW1vdW50UGF5bWVudCkgZm9yIGFkZFN0YWtlIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYWRkU3Rha2UocGF5LHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQsdWludDY0KQoJY2FsbHN1YiBhZGRTdGFrZQoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFkZFN0YWtlKHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4biwgdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgdmFsdWVUb1ZlcmlmeTogdWludDY0KTogVmFsaWRhdG9yUG9vbEtleQovLwovLyBBZGRzIHN0YWtlIHRvIGEgdmFsaWRhdG9yIHBvb2wuCi8vCi8vIEBwYXJhbSB7UGF5VHhufSBzdGFrZWRBbW91bnRQYXltZW50IC0gcGF5bWVudCBjb21pbmcgZnJvbSBzdGFrZXIgdG8gcGxhY2UgaW50byBhIHBvb2wKLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3IuCi8vIEBwYXJhbSB7dWludDY0fSB2YWx1ZVRvVmVyaWZ5IC0gb25seSBpZiB2YWxpZGF0b3IgaGFzIGdhdGluZyB0byBlbnRlciAtIHRoaXMgaXMgYXNzZXQgaWQgb3IgbmZkIGlkIHRoYXQgY29ycmVzcG9uZHMgdG8gZ2F0aW5nLgovLyBUeG4gc2VuZGVyIGlzIGZhY3RvcmVkIGluIGFzIHdlbGwgaWYgdGhhdCBpcyBwYXJ0IG9mIGdhdGluZy4KLy8gKiBAcmV0dXJucyB7VmFsaWRhdG9yUG9vbEtleX0gLSBUaGUga2V5IG9mIHRoZSB2YWxpZGF0b3IgcG9vbC4KYWRkU3Rha2U6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA1CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjUwCgkvLyBhc3NlcnQodGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS5leGlzdHMsICJzcGVjaWZpZWQgdmFsaWRhdG9yIGlkIGlzbid0IHZhbGlkIikKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoKCS8vIHNwZWNpZmllZCB2YWxpZGF0b3IgaWQgaXNuJ3QgdmFsaWQKCWFzc2VydAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2NTMKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLnN1bnNldHRpbmdPbiA+IDAKCWludCAyMjYKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJaW50IDAKCT4KCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2NTQKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5zdW5zZXR0aW5nT24gPCBnbG9iYWxzLmxhdGVzdFRpbWVzdGFtcCwKCS8vICAgICAgICAgICAgICAgICAiY2FuJ3Qgc3Rha2Ugd2l0aCBhIHZhbGlkYXRvciB0aGF0IGlzIHBhc3QgaXRzIHN1bnNldHRpbmcgdGltZSIsCgkvLyAgICAgICAgICAgICApCglpbnQgMjI2CglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0yIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKCTwKCgkvLyBjYW4ndCBzdGFrZSB3aXRoIGEgdmFsaWRhdG9yIHRoYXQgaXMgcGFzdCBpdHMgc3Vuc2V0dGluZyB0aW1lCglhc3NlcnQKCippZjhfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjYwCgkvLyBzdGFrZXIgPSB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWZyYW1lX2J1cnkgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2NjQKCS8vIHZlcmlmeVBheVR4bihzdGFrZWRBbW91bnRQYXltZW50LCB7CgkvLyAgICAgICAgICAgICBzZW5kZXI6IHN0YWtlciwKCS8vICAgICAgICAgICAgIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgICB9KQoJLy8gdmVyaWZ5IHNlbmRlcgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgU2VuZGVyCglmcmFtZV9kaWcgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJzdGFrZWRBbW91bnRQYXltZW50IiwiZmllbGQiOiJzZW5kZXIiLCJleHBlY3RlZCI6InN0YWtlciJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4KCWd0eG5zIFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6InN0YWtlZEFtb3VudFBheW1lbnQiLCJmaWVsZCI6InJlY2VpdmVyIiwiZXhwZWN0ZWQiOiJ0aGlzLmFwcC5hZGRyZXNzIn0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY3MQoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5zdGF0ZS50b3RhbEFsZ29TdGFrZWQgPCB0aGlzLm1heEFsbG93ZWRTdGFrZSgpLAoJLy8gICAgICAgICAgICAgJ3RvdGFsIHN0YWtlZCBmb3IgYWxsIG9mIGEgdmFsaWRhdG9ycyBwb29scyBtYXkgbm90IGV4Y2VlZCBoYXJkIGNhcCcsCgkvLyAgICAgICAgICkKCWludCAyNTIKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJY2FsbHN1YiBtYXhBbGxvd2VkU3Rha2UKCTwKCgkvLyB0b3RhbCBzdGFrZWQgZm9yIGFsbCBvZiBhIHZhbGlkYXRvcnMgcG9vbHMgbWF5IG5vdCBleGNlZWQgaGFyZCBjYXAKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY3OAoJLy8gdGhpcy5kb2VzU3Rha2VyTWVldEdhdGluZyh2YWxpZGF0b3JJZCwgdmFsdWVUb1ZlcmlmeSkKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZVRvVmVyaWZ5OiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCgljYWxsc3ViIGRvZXNTdGFrZXJNZWV0R2F0aW5nCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjgwCgkvLyByZWFsQW1vdW50ID0gc3Rha2VkQW1vdW50UGF5bWVudC5hbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJZnJhbWVfYnVyeSAxIC8vIHJlYWxBbW91bnQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY4MQoJLy8gbWJyQW10TGVmdEJlaGluZDogdWludDY0ID0gMAoJaW50IDAKCWZyYW1lX2J1cnkgMiAvLyBtYnJBbXRMZWZ0QmVoaW5kOiB1aW50NjQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjgzCgkvLyAhdGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikuZXhpc3RzCglieXRlIDB4NzM3MDczIC8vICJzcHMiCglmcmFtZV9kaWcgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCWNvbmNhdAoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Njg2CgkvLyBtYnJBbXRMZWZ0QmVoaW5kID0gdGhpcy5nZXRNYnJBbW91bnRzKCkuYWRkU3Rha2VyTWJyCgljYWxsc3ViIGdldE1ickFtb3VudHMKCWV4dHJhY3QgMjQgOAoJYnRvaQoJZnJhbWVfYnVyeSAyIC8vIG1ickFtdExlZnRCZWhpbmQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY4NwoJLy8gcmVhbEFtb3VudCAtPSBtYnJBbXRMZWZ0QmVoaW5kCglmcmFtZV9kaWcgMSAvLyByZWFsQW1vdW50OiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIG1ickFtdExlZnRCZWhpbmQ6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSAxIC8vIHJlYWxBbW91bnQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY4OAoJLy8gdGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikuY3JlYXRlKCkKCWJ5dGUgMHg3MzcwNzMgLy8gInNwcyIKCWZyYW1lX2RpZyAwIC8vIHN0YWtlcjogYWRkcmVzcwoJY29uY2F0CglpbnQgMTQ0Cglib3hfY3JlYXRlCglwb3AKCippZjlfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NjkyCgkvLyBmaW5kUmV0ID0gdGhpcy5maW5kUG9vbEZvclN0YWtlcih2YWxpZGF0b3JJZCwgc3Rha2VyLCByZWFsQW1vdW50KQoJZnJhbWVfZGlnIDEgLy8gcmVhbEFtb3VudDogdWludDY0CglmcmFtZV9kaWcgMCAvLyBzdGFrZXI6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCgljYWxsc3ViIGZpbmRQb29sRm9yU3Rha2VyCglmcmFtZV9idXJ5IDMgLy8gZmluZFJldDogKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYm9vbCxib29sKQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY5MwoJLy8gcG9vbEtleSA9IGZpbmRSZXRbMF0KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjY5NAoJLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvciA9IGZpbmRSZXRbMV0KCWZyYW1lX2RpZyAzIC8vIGZpbmRSZXQ6ICgodWludDY0LHVpbnQ2NCx1aW50NjQpLGJvb2wsYm9vbCkKCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTkyCglnZXRiaXQKCWZyYW1lX2J1cnkgNCAvLyBpc05ld1N0YWtlclRvVmFsaWRhdG9yOiBib29sCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6Njk1CgkvLyBpc05ld1N0YWtlclRvUHJvdG9jb2wgPSBmaW5kUmV0WzJdCglmcmFtZV9kaWcgMyAvLyBmaW5kUmV0OiAoKHVpbnQ2NCx1aW50NjQsdWludDY0KSxib29sLGJvb2wpCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE5MwoJZ2V0Yml0CglmcmFtZV9idXJ5IDUgLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sCgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo2OTYKCS8vIHBvb2xLZXkucG9vbElkID09PSAwCglmcmFtZV9kaWcgMyAvLyBmaW5kUmV0OiAoKHVpbnQ2NCx1aW50NjQsdWludDY0KSxib29sLGJvb2wpCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWludCAwCgk9PQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gTm8gcG9vbCBhdmFpbGFibGUgd2l0aCBmcmVlIHN0YWtlLiAgVmFsaWRhdG9yIG5lZWRzIHRvIGFkZCBhbm90aGVyIHBvb2wKCWVycgoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzAxCgkvLyB0aGlzLnVwZGF0ZVN0YWtlclBvb2xTZXQoc3Rha2VyLCBwb29sS2V5KQoJZnJhbWVfZGlnIDMgLy8gZmluZFJldDogKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYm9vbCxib29sKQoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCAyNAoJZnJhbWVfZGlnIDAgLy8gc3Rha2VyOiBhZGRyZXNzCgljYWxsc3ViIHVwZGF0ZVN0YWtlclBvb2xTZXQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3MDQKCS8vIHRoaXMuY2FsbFBvb2xBZGRTdGFrZSgKCS8vICAgICAgICAgICAgIHN0YWtlZEFtb3VudFBheW1lbnQsCgkvLyAgICAgICAgICAgICBwb29sS2V5LAoJLy8gICAgICAgICAgICAgbWJyQW10TGVmdEJlaGluZCwKCS8vICAgICAgICAgICAgIGlzTmV3U3Rha2VyVG9WYWxpZGF0b3IsCgkvLyAgICAgICAgICAgICBpc05ld1N0YWtlclRvUHJvdG9jb2wsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyA1IC8vIGlzTmV3U3Rha2VyVG9Qcm90b2NvbDogYm9vbAoJZnJhbWVfZGlnIDQgLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbAoJZnJhbWVfZGlnIDIgLy8gbWJyQW10TGVmdEJlaGluZDogdWludDY0CglmcmFtZV9kaWcgMyAvLyBmaW5kUmV0OiAoKHVpbnQ2NCx1aW50NjQsdWludDY0KSxib29sLGJvb2wpCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDI0CglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCgljYWxsc3ViIGNhbGxQb29sQWRkU3Rha2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3MTkKCS8vIHJldHVybiBwb29sS2V5CglmcmFtZV9kaWcgMyAvLyBmaW5kUmV0OiAoKHVpbnQ2NCx1aW50NjQsdWludDY0KSxib29sLGJvb2wpCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDI0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gNQoJcmV0c3ViCgovLyBzZXRUb2tlblBheW91dFJhdGlvKHVpbnQ2NCkodWludDY0WzI0XSx1aW50NjQpCiphYmlfcm91dGVfc2V0VG9rZW5QYXlvdXRSYXRpbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgc2V0VG9rZW5QYXlvdXRSYXRpbyh1aW50NjQpKHVpbnQ2NFsyNF0sdWludDY0KQoJY2FsbHN1YiBzZXRUb2tlblBheW91dFJhdGlvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gc2V0VG9rZW5QYXlvdXRSYXRpbyh2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlKTogUG9vbFRva2VuUGF5b3V0UmF0aW8KLy8KLy8gc2V0VG9rZW5QYXlvdXRSYXRpbyBpcyBjYWxsZWQgYnkgU3Rha2luZyBQb29sICMgMSAoT05MWSkgdG8gYXNrIHRoZSB2YWxpZGF0b3IgKHVzKSB0byBjYWxjdWxhdGUgdGhlIHJhdGlvcwovLyBvZiBzdGFrZSBpbiB0aGUgcG9vbHMgZm9yIHN1YnNlcXVlbnQgdG9rZW4gcGF5b3V0cyAoaWU6IDIgcG9vbHMsICcxMDAnIGFsZ28gdG90YWwgc3Rha2VkLCA2MCBpbiBwb29sIDEsIGFuZCA0MAovLyBpbiBwb29sIDIpICBUaGlzIGlzIGRvbmUgc28gd2UgaGF2ZSBhIHN0YWJsZSBzbmFwc2hvdCBvZiBzdGFrZSAtIHRha2VuIG9uY2UgcGVyIGVwb2NoIC0gb25seSB0cmlnZ2VyZWQgYnkKLy8gcG9vbCAxIGRvaW5nIHBheW91dC4gIHBvb2xzIG90aGVyIHRoYW4gMSBkb2luZyBwYXlvdXQgY2FsbCBwb29sIDEgdG8gYXNrIGl0IGRvIGl0IGZpcnN0LgovLyBJdCB3b3VsZCBiZSA2MC80MCUgaW4gdGhlIHBvb2xQY3RPZldob2xlIHZhbHVlcy4gIFRoZSB0b2tlbiByZXdhcmQgcGF5b3V0cyB0aGVuIHVzZSB0aGVzZSB2YWx1ZXMgaW5zdGVhZCBvZgovLyB0aGVpciAnY3VycmVudCcgc3Rha2Ugd2hpY2ggY2hhbmdlcyBhcyBwYXJ0IG9mIHRoZSBwYXlvdXRzIHRoZW1zZWx2ZXMgKGFuZCBwZW9wbGUgY291bGQgYmUgY2hhbmdpbmcgc3Rha2UKLy8gZHVyaW5nIHRoZSBlcG9jaCB1cGRhdGVzIGFjcm9zcyBwb29scykKLy8KLy8gTXVsdGlwbGUgcG9vbHMgd2lsbCBjYWxsIHVzIHZpYSBwb29sIDEgKHBvb2wyLT5wb29sMS0+dmFsaWRhdG9yLCBldGMuKSBzbyBkb24ndCBhc3NlcnQgb24gcG9vbDEgY2FsbGluZyBtdWx0aXBsZQovLyB0aW1lcyBpbiBzYW1lIGVwb2NoLiAgSnVzdCByZXR1cm4uCi8vCi8vIEBwYXJhbSB2YWxpZGF0b3JJZCAtIHZhbGlkYXRvciBpZCAoYW5kIHRodXMgcG9vbCkgY2FsbGluZyB1cy4gIFZlcmlmaWVkIHNvIHRoYXQgc2VuZGVyIE1VU1QgYmUgcG9vbCAxIG9mIHRoaXMgdmFsaWRhdG9yLgovLyBAcmV0dXJucyBQb29sVG9rZW5QYXlvdXRSYXRpbyAtIHRoZSBmaW5pc2hlZCByYXRpbyBkYXRhCnNldFRva2VuUGF5b3V0UmF0aW86Cglwcm90byAxIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzM5CgkvLyBwb29sMUFwcElEID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5wb29sc1swXS5wb29sQXBwSWQKCWludCAyNjgKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAwIC8vIHBvb2wxQXBwSUQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc0MAoJLy8gYXNzZXJ0KHBvb2wxQXBwSUQgIT09IDApCglmcmFtZV9kaWcgMCAvLyBwb29sMUFwcElEOiB1aW50NjQKCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NDIKCS8vIHRoaXMudHhuLnNlbmRlciAhPT0gQXBwSUQuZnJvbVVpbnQ2NChwb29sMUFwcElEKS5hZGRyZXNzCgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgMCAvLyBwb29sMUFwcElEOiB1aW50NjQKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc0MwoJLy8gcmV0dXJuIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUudG9rZW5QYXlvdXRSYXRpbwoJaW50IDcwMCAvLyBoZWFkT2Zmc2V0CglpbnQgMjAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYiAqc2V0VG9rZW5QYXlvdXRSYXRpbypyZXR1cm4KCippZjExX2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc0OQoJLy8gY3VyUm91bmQgPSBnbG9iYWxzLnJvdW5kCglnbG9iYWwgUm91bmQKCWZyYW1lX2J1cnkgMSAvLyBjdXJSb3VuZDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzUwCgkvLyBsYXN0UGF5b3V0VXBkYXRlID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS50b2tlblBheW91dFJhdGlvLnVwZGF0ZWRGb3JQYXlvdXQKCWludCA4OTIKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAyIC8vIGxhc3RQYXlvdXRVcGRhdGU6IHVpbnQ2NAoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzUxCgkvLyBsYXN0UGF5b3V0VXBkYXRlICE9PSAwCglmcmFtZV9kaWcgMiAvLyBsYXN0UGF5b3V0VXBkYXRlOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NTMKCS8vIChBcHBJRC5mcm9tVWludDY0KHBvb2wxQXBwSUQpLmdsb2JhbFN0YXRlKCdsYXN0UGF5b3V0JykgYXMgdWludDY0KSA9PT0gbGFzdFBheW91dFVwZGF0ZQoJZnJhbWVfZGlnIDAgLy8gcG9vbDFBcHBJRDogdWludDY0CglieXRlIDB4NmM2MTczNzQ1MDYxNzk2Zjc1NzQgLy8gImxhc3RQYXlvdXQiCglhcHBfZ2xvYmFsX2dldF9leAoKCS8vIGdsb2JhbCBzdGF0ZSB2YWx1ZSBkb2VzIG5vdCBleGlzdDogQXBwSUQuZnJvbVVpbnQ2NChwb29sMUFwcElEKS5nbG9iYWxTdGF0ZSgnbGFzdFBheW91dCcpCglhc3NlcnQKCWZyYW1lX2RpZyAyIC8vIGxhc3RQYXlvdXRVcGRhdGU6IHVpbnQ2NAoJPT0KCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc1NAoJLy8gcmV0dXJuIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUudG9rZW5QYXlvdXRSYXRpbwoJaW50IDcwMCAvLyBoZWFkT2Zmc2V0CglpbnQgMjAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYiAqc2V0VG9rZW5QYXlvdXRSYXRpbypyZXR1cm4KCippZjEzX2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc1NgoJLy8gZXBvY2hSb3VuZExlbmd0aCA9IHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLmVwb2NoUm91bmRMZW5ndGggYXMgdWludDY0CglpbnQgMTY5CglpbnQgNAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMyAvLyBlcG9jaFJvdW5kTGVuZ3RoOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NTcKCS8vIHRoaXNFcG9jaEJlZ2luID0gY3VyUm91bmQgLSAoY3VyUm91bmQgJSBlcG9jaFJvdW5kTGVuZ3RoKQoJZnJhbWVfZGlnIDEgLy8gY3VyUm91bmQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDEgLy8gY3VyUm91bmQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDMgLy8gZXBvY2hSb3VuZExlbmd0aDogdWludDY0CgklCgktCglmcmFtZV9idXJ5IDQgLy8gdGhpc0Vwb2NoQmVnaW46IHVpbnQ2NAoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzU5CgkvLyBsYXN0UGF5b3V0VXBkYXRlIC0gKGxhc3RQYXlvdXRVcGRhdGUgJSBlcG9jaFJvdW5kTGVuZ3RoKSA9PT0gdGhpc0Vwb2NoQmVnaW4KCWZyYW1lX2RpZyAyIC8vIGxhc3RQYXlvdXRVcGRhdGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gbGFzdFBheW91dFVwZGF0ZTogdWludDY0CglmcmFtZV9kaWcgMyAvLyBlcG9jaFJvdW5kTGVuZ3RoOiB1aW50NjQKCSUKCS0KCWZyYW1lX2RpZyA0IC8vIHRoaXNFcG9jaEJlZ2luOiB1aW50NjQKCT09CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NjAKCS8vIHJldHVybiB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnRva2VuUGF5b3V0UmF0aW8KCWludCA3MDAgLy8gaGVhZE9mZnNldAoJaW50IDIwMAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWIgKnNldFRva2VuUGF5b3V0UmF0aW8qcmV0dXJuCgoqaWYxNF9lbmQ6CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NjMKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUudG9rZW5QYXlvdXRSYXRpby51cGRhdGVkRm9yUGF5b3V0ID0gY3VyUm91bmQKCWludCA4OTIKCWZyYW1lX2RpZyAxIC8vIGN1clJvdW5kOiB1aW50NjQKCWl0b2IKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzY1CgkvLyBjdXJOdW1Qb29scyA9IHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuc3RhdGUubnVtUG9vbHMgYXMgdWludDY0CglpbnQgMjQyCglpbnQgMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgNSAvLyBjdXJOdW1Qb29sczogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6NzY2CgkvLyB0b3RhbFN0YWtlRm9yVmFsaWRhdG9yID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5zdGF0ZS50b3RhbEFsZ29TdGFrZWQKCWludCAyNTIKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSA2IC8vIHRvdGFsU3Rha2VGb3JWYWxpZGF0b3I6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc2NwoJLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJOdW1Qb29sczsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgNyAvLyBpOiB1aW50NjQKCipmb3JfMjoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc2NwoJLy8gaSA8IGN1ck51bVBvb2xzCglmcmFtZV9kaWcgNyAvLyBpOiB1aW50NjQKCWZyYW1lX2RpZyA1IC8vIGN1ck51bVBvb2xzOiB1aW50NjQKCTwKCWJ6ICpmb3JfMl9lbmQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3NzIKCS8vIG91clBvb2xQY3RPZldob2xlID0gd2lkZVJhdGlvKAoJLy8gICAgICAgICAgICAgICAgIFt0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnBvb2xzW2ldLnRvdGFsQWxnb1N0YWtlZCwgMV8wMDBfMDAwXSwKCS8vICAgICAgICAgICAgICAgICBbdG90YWxTdGFrZUZvclZhbGlkYXRvcl0sCgkvLyAgICAgICAgICAgICApCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyA3IC8vIGk6IHVpbnQ2NAoJaW50IDE4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAxMCAvLyBoZWFkT2Zmc2V0CgkrCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWludCAxXzAwMF8wMDAKCW11bHcKCWludCAwCglmcmFtZV9kaWcgNiAvLyB0b3RhbFN0YWtlRm9yVmFsaWRhdG9yOiB1aW50NjQKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CglmcmFtZV9idXJ5IDggLy8gb3VyUG9vbFBjdE9mV2hvbGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc3NgoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS50b2tlblBheW91dFJhdGlvLnBvb2xQY3RPZldob2xlW2ldID0gb3VyUG9vbFBjdE9mV2hvbGUKCWludCA3MDAKCWZyYW1lX2RpZyA3IC8vIGk6IHVpbnQ2NAoJaW50IDgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJZnJhbWVfZGlnIDggLy8gb3VyUG9vbFBjdE9mV2hvbGU6IHVpbnQ2NAoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCipmb3JfMl9jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc2NwoJLy8gaSArPSAxCglmcmFtZV9kaWcgNyAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDcgLy8gaTogdWludDY0CgliICpmb3JfMgoKKmZvcl8yX2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjc3OAoJLy8gcmV0dXJuIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUudG9rZW5QYXlvdXRSYXRpbwoJaW50IDcwMCAvLyBoZWFkT2Zmc2V0CglpbnQgMjAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoKKnNldFRva2VuUGF5b3V0UmF0aW8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBzdGFrZVVwZGF0ZWRWaWFSZXdhcmRzKCh1aW50NjQsdWludDY0LHVpbnQ2NCksdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQKKmFiaV9yb3V0ZV9zdGFrZVVwZGF0ZWRWaWFSZXdhcmRzOgoJLy8gc2F0dXJhdGVkQnVyblRvRmVlU2luazogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA1CglidG9pCgoJLy8gdmFsaWRhdG9yQ29tbWlzc2lvbjogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA0CglidG9pCgoJLy8gcmV3YXJkVG9rZW5BbW91bnRSZXNlcnZlZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgoJLy8gYWxnb1RvQWRkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyBwb29sS2V5OiAodWludDY0LHVpbnQ2NCx1aW50NjQpCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDI0Cgk9PQoKCS8vIGFyZ3VtZW50IDQgKHBvb2xLZXkpIGZvciBzdGFrZVVwZGF0ZWRWaWFSZXdhcmRzIG11c3QgYmUgYSAodWludDY0LHVpbnQ2NCx1aW50NjQpCglhc3NlcnQKCgkvLyBleGVjdXRlIHN0YWtlVXBkYXRlZFZpYVJld2FyZHMoKHVpbnQ2NCx1aW50NjQsdWludDY0KSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoJY2FsbHN1YiBzdGFrZVVwZGF0ZWRWaWFSZXdhcmRzCglpbnQgMQoJcmV0dXJuCgovLyBzdGFrZVVwZGF0ZWRWaWFSZXdhcmRzKHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXksIGFsZ29Ub0FkZDogdWludDY0LCByZXdhcmRUb2tlbkFtb3VudFJlc2VydmVkOiB1aW50NjQsIHZhbGlkYXRvckNvbW1pc3Npb246IHVpbnQ2NCwgc2F0dXJhdGVkQnVyblRvRmVlU2luazogdWludDY0KTogdm9pZAovLwovLyBzdGFrZVVwZGF0ZWRWaWFSZXdhcmRzIGlzIGNhbGxlZCBieSBTdGFraW5nIHBvb2xzIHRvIGluZm9ybSB0aGUgdmFsaWRhdG9yICh1cykgdGhhdCBhIHBhcnRpY3VsYXIgYW1vdW50IG9mIHRvdGFsCi8vIHN0YWtlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBzcGVjaWZpZWQgcG9vbC4gIFRoaXMgaXMgdXNlZCB0byB1cGRhdGUgdGhlIHN0YXRzIHdlIGhhdmUgaW4gb3VyIFBvb2xJbmZvIHN0b3JhZ2UuCi8vIFRoZSBjYWxsaW5nIEFwcCBpZCBpcyB2YWxpZGF0ZWQgYWdhaW5zdCBvdXIgcG9vbCBsaXN0IGFzIHdlbGwuCi8vIEBwYXJhbSB7VmFsaWRhdG9yUG9vbEtleX0gcG9vbEtleSAtIFZhbGlkYXRvclBvb2xLZXkgdHlwZQovLyBAcGFyYW0ge3VpbnQ2NH0gYWxnb1RvQWRkIC0gYW1vdW50IHRoaXMgdmFsaWRhdG9yJ3MgdG90YWwgc3Rha2UgaW5jcmVhc2VkIHZpYSByZXdhcmRzCi8vIEBwYXJhbSB7dWludDY0fSByZXdhcmRUb2tlbkFtb3VudFJlc2VydmVkIC0gYW1vdW50IHRoaXMgdmFsaWRhdG9yJ3MgdG90YWwgc3Rha2UgaW5jcmVhc2VkIHZpYSByZXdhcmRzICh0aGF0IHNob3VsZCBiZQovLyBAcGFyYW0ge3VpbnQ2NH0gdmFsaWRhdG9yQ29tbWlzc2lvbiAtIHRoZSBjb21taXNzaW9uIGFtb3VudCB0aGUgdmFsaWRhdG9yIHdhcyBwYWlkLCBpZiBhbnkKLy8gQHBhcmFtIHt1aW50NjR9IHNhdHVyYXRlZEJ1cm5Ub0ZlZVNpbmsgLSBpZiB0aGUgcG9vbCB3YXMgaW4gc2F0dXJhdGVkIHN0YXRlLCB0aGUgYW1vdW50IHNlbnQgYmFjayB0byB0aGUgZmVlIHNpbmsuCi8vIHNlZW4gYXMgJ2FjY291bnRlZCBmb3IvcGVuZGluZyBzcGVudCcpCnN0YWtlVXBkYXRlZFZpYVJld2FyZHM6Cglwcm90byA1IDAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo3OTkKCS8vIHRoaXMudmVyaWZ5UG9vbEtleUNhbGxlcihwb29sS2V5KQoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWNhbGxzdWIgdmVyaWZ5UG9vbEtleUNhbGxlcgoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjgwMgoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnBvb2xzW3Bvb2xLZXkucG9vbElkIC0gMV0udG90YWxBbGdvU3Rha2VkICs9IGFsZ29Ub0FkZAoJaW50IDI2OCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWludCAxCgktCglpbnQgMTgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDEwIC8vIGhlYWRPZmZzZXQKCSsKCWludCAyNjggLy8gaGVhZE9mZnNldAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgOCA4CglidG9pCglpbnQgMQoJLQoJaW50IDE4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAxMCAvLyBoZWFkT2Zmc2V0CgkrCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9kaWcgLTIgLy8gYWxnb1RvQWRkOiB1aW50NjQKCSsKCWl0b2IKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjgwMwoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLnRvdGFsQWxnb1N0YWtlZCArPSBhbGdvVG9BZGQKCWludCAyNTIKCWR1cAoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfZGlnIC0yIC8vIGFsZ29Ub0FkZDogdWludDY0CgkrCglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4MDQKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5zdGF0ZS5yZXdhcmRUb2tlbkhlbGRCYWNrICs9IHJld2FyZFRva2VuQW1vdW50UmVzZXJ2ZWQKCWludCAyNjAKCWR1cAoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfZGlnIC0zIC8vIHJld2FyZFRva2VuQW1vdW50UmVzZXJ2ZWQ6IHVpbnQ2NAoJKwoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6ODA2CgkvLyB0aGlzLnRvdGFsQWxnb1N0YWtlZC52YWx1ZSArPSBhbGdvVG9BZGQKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgLTIgLy8gYWxnb1RvQWRkOiB1aW50NjQKCSsKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCXN3YXAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6ODA5CgkvLyB0aGlzLnJldmVyaWZ5TkZET3duZXJzaGlwKHBvb2xLZXkuaWQpCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWNhbGxzdWIgcmV2ZXJpZnlORkRPd25lcnNoaXAKCXJldHN1YgoKLy8gc3Rha2VSZW1vdmVkKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYWRkcmVzcyx1aW50NjQsdWludDY0LGJvb2wpdm9pZAoqYWJpX3JvdXRlX3N0YWtlUmVtb3ZlZDoKCS8vIHN0YWtlclJlbW92ZWQ6IGJvb2wKCXR4bmEgQXBwbGljYXRpb25BcmdzIDUKCWR1cAoJbGVuCglpbnQgMQoJPT0KCgkvLyBhcmd1bWVudCAwIChzdGFrZXJSZW1vdmVkKSBmb3Igc3Rha2VSZW1vdmVkIG11c3QgYmUgYSBib29sCglhc3NlcnQKCWludCAwCglnZXRiaXQKCgkvLyByZXdhcmRSZW1vdmVkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWJ0b2kKCgkvLyBhbW91bnRSZW1vdmVkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCgkvLyBzdGFrZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMyAoc3Rha2VyKSBmb3Igc3Rha2VSZW1vdmVkIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBwb29sS2V5OiAodWludDY0LHVpbnQ2NCx1aW50NjQpCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDI0Cgk9PQoKCS8vIGFyZ3VtZW50IDQgKHBvb2xLZXkpIGZvciBzdGFrZVJlbW92ZWQgbXVzdCBiZSBhICh1aW50NjQsdWludDY0LHVpbnQ2NCkKCWFzc2VydAoKCS8vIGV4ZWN1dGUgc3Rha2VSZW1vdmVkKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYWRkcmVzcyx1aW50NjQsdWludDY0LGJvb2wpdm9pZAoJY2FsbHN1YiBzdGFrZVJlbW92ZWQKCWludCAxCglyZXR1cm4KCi8vIHN0YWtlUmVtb3ZlZChwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5LCBzdGFrZXI6IEFkZHJlc3MsIGFtb3VudFJlbW92ZWQ6IHVpbnQ2NCwgcmV3YXJkUmVtb3ZlZDogdWludDY0LCBzdGFrZXJSZW1vdmVkOiBib29sZWFuKTogdm9pZAovLwovLyBzdGFrZVJlbW92ZWQgaXMgY2FsbGVkIGJ5IFN0YWtpbmcgcG9vbHMgdG8gaW5mb3JtIHRoZSB2YWxpZGF0b3IgKHVzKSB0aGF0IGEgcGFydGljdWxhciBhbW91bnQgb2YgdG90YWwgc3Rha2UgaGFzIGJlZW4gcmVtb3ZlZAovLyBmcm9tIHRoZSBzcGVjaWZpZWQgcG9vbC4gIFRoaXMgaXMgdXNlZCB0byB1cGRhdGUgdGhlIHN0YXRzIHdlIGhhdmUgaW4gb3VyIFBvb2xJbmZvIHN0b3JhZ2UuCi8vIElmIGFueSBhbW91bnQgb2YgcmV3YXJkUmVtb3ZlZCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhhdCBhbW91bnQgb2YgcmV3YXJkIGlzIHNlbnQgdG8gdGhlIHVzZQovLyBUaGUgY2FsbGluZyBBcHAgaWQgaXMgdmFsaWRhdGVkIGFnYWluc3Qgb3VyIHBvb2wgbGlzdCBhcyB3ZWxsLgovLwovLyBAcGFyYW0ge1ZhbGlkYXRvclBvb2xLZXl9IHBvb2xLZXkgY2FsbGluZyB1cyBmcm9tIHdoaWNoIHN0YWtlIHdhcyByZW1vdmVkCi8vIEBwYXJhbSB7QWRkcmVzc30gc3Rha2VyCi8vIEBwYXJhbSB7dWludDY0fSBhbW91bnRSZW1vdmVkIC0gYWxnbyBhbW91bnQgcmVtb3ZlZAovLyBAcGFyYW0ge3VpbnQ2NH0gcmV3YXJkUmVtb3ZlZCAtIGlmIGFwcGxpY2FibGUsIGFtb3VudCBvZiB0b2tlbiByZXdhcmQgcmVtb3ZlZCAoYnkgcG9vbCAxIGNhbGxlcikgb3IgVE8gcmVtb3ZlIGFuZCBwYXkgb3V0ICh2aWEgcG9vbCAxIGZyb20gZGlmZmVyZW50IHBvb2wgY2FsbGVyKQovLyBAcGFyYW0ge2Jvb2xlYW59IHN0YWtlclJlbW92ZWQKc3Rha2VSZW1vdmVkOgoJcHJvdG8gNSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMwoKCS8vICppZjE1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6ODQxCgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDMwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDMwMAoJPAoJYnogKmlmMTVfZW5kCgoJLy8gKmlmMTVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6ODQyCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWYxNV9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4NDQKCS8vIHRoaXMudmVyaWZ5UG9vbEtleUNhbGxlcihwb29sS2V5KQoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWNhbGxzdWIgdmVyaWZ5UG9vbEtleUNhbGxlcgoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg0OAoJLy8gYXNzZXJ0KGFtb3VudFJlbW92ZWQgPiAwIHx8IHJld2FyZFJlbW92ZWQgPiAwLCAnc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIGFsZ28gb3IgcmV3YXJkIHdhcyByZW1vdmVkJykKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnRSZW1vdmVkOiB1aW50NjQKCWludCAwCgk+CglkdXAKCWJueiAqc2tpcF9vcjIKCWZyYW1lX2RpZyAtNCAvLyByZXdhcmRSZW1vdmVkOiB1aW50NjQKCWludCAwCgk+Cgl8fAoKKnNraXBfb3IyOgoJLy8gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIGFsZ28gb3IgcmV3YXJkIHdhcyByZW1vdmVkCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4NTEKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5wb29sc1twb29sS2V5LnBvb2xJZCAtIDFdLnRvdGFsQWxnb1N0YWtlZCAtPSBhbW91bnRSZW1vdmVkCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgMTAgLy8gaGVhZE9mZnNldAoJKwoJaW50IDI2OCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWludCAxCgktCglpbnQgMTgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDEwIC8vIGhlYWRPZmZzZXQKCSsKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnRSZW1vdmVkOiB1aW50NjQKCS0KCWl0b2IKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg1MgoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLnRvdGFsQWxnb1N0YWtlZCAtPSBhbW91bnRSZW1vdmVkCglpbnQgMjUyCglkdXAKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnRSZW1vdmVkOiB1aW50NjQKCS0KCWl0b2IKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg1MwoJLy8gdGhpcy50b3RhbEFsZ29TdGFrZWQudmFsdWUgLT0gYW1vdW50UmVtb3ZlZAoJYnl0ZSAweDczNzQ2MTZiNjU2NCAvLyAic3Rha2VkIgoJYXBwX2dsb2JhbF9nZXQKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnRSZW1vdmVkOiB1aW50NjQKCS0KCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCXN3YXAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gKmlmMTZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4NTUKCS8vIHJld2FyZFJlbW92ZWQgPiAwCglmcmFtZV9kaWcgLTQgLy8gcmV3YXJkUmVtb3ZlZDogdWludDY0CglpbnQgMAoJPgoJYnogKmlmMTZfZWxzZQoKCS8vICppZjE2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg1NgoJLy8gcmV3YXJkVG9rZW5JRCA9IHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5jb25maWcucmV3YXJkVG9rZW5JZAoJaW50IDE1MwoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAwIC8vIHJld2FyZFRva2VuSUQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg1NwoJLy8gYXNzZXJ0KHJld2FyZFRva2VuSUQgIT09IDAsICJyZXdhcmRSZW1vdmVkIGNhbid0IGJlIHNldCBpZiB2YWxpZGF0b3IgZG9lc24ndCBoYXZlIHJld2FyZCB0b2tlbiEiKQoJZnJhbWVfZGlnIDAgLy8gcmV3YXJkVG9rZW5JRDogdWludDY0CglpbnQgMAoJIT0KCgkvLyByZXdhcmRSZW1vdmVkIGNhbid0IGJlIHNldCBpZiB2YWxpZGF0b3IgZG9lc24ndCBoYXZlIHJld2FyZCB0b2tlbiEKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg1OAoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5zdGF0ZS5yZXdhcmRUb2tlbkhlbGRCYWNrID49IHJld2FyZFJlbW92ZWQsCgkvLyAgICAgICAgICAgICAgICAgJ3Jld2FyZCBiZWluZyByZW1vdmVkIG11c3QgYmUgY292ZXJlZCBieSBob2xkIGJhY2sgYW1vdW50JywKCS8vICAgICAgICAgICAgICkKCWludCAyNjAKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2RpZyAtNCAvLyByZXdhcmRSZW1vdmVkOiB1aW50NjQKCT49CgoJLy8gcmV3YXJkIGJlaW5nIHJlbW92ZWQgbXVzdCBiZSBjb3ZlcmVkIGJ5IGhvbGQgYmFjayBhbW91bnQKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg2NAoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLnJld2FyZFRva2VuSGVsZEJhY2sgLT0gcmV3YXJkUmVtb3ZlZAoJaW50IDI2MAoJZHVwCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9kaWcgLTQgLy8gcmV3YXJkUmVtb3ZlZDogdWludDY0CgktCglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyAqaWYxN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg2OQoJLy8gcG9vbEtleS5wb29sSWQgIT09IDEKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCSE9CglieiAqaWYxN19lbmQKCgkvLyAqaWYxN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4NzAKCS8vIHNlbmRNZXRob2RDYWxsPHR5cGVvZiBTdGFraW5nUG9vbC5wcm90b3R5cGUucGF5VG9rZW5SZXdhcmQ+KHsKCS8vICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NCh0aGlzLnZhbGlkYXRvckxpc3QocG9vbEtleS5pZCkudmFsdWUucG9vbHNbMF0ucG9vbEFwcElkKSwKCS8vICAgICAgICAgICAgICAgICAgICAgbWV0aG9kQXJnczogW3N0YWtlciwgcmV3YXJkVG9rZW5JRCwgcmV3YXJkUmVtb3ZlZF0sCgkvLyAgICAgICAgICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgltZXRob2QgInBheVRva2VuUmV3YXJkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4NzEKCS8vIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQodGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnBvb2xzWzBdLnBvb2xBcHBJZCkKCWludCAyNjgKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjg3MgoJLy8gbWV0aG9kQXJnczogW3N0YWtlciwgcmV3YXJkVG9rZW5JRCwgcmV3YXJkUmVtb3ZlZF0KCWZyYW1lX2RpZyAtMiAvLyBzdGFrZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMCAvLyByZXdhcmRUb2tlbklEOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTQgLy8gcmV3YXJkUmVtb3ZlZDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE3X2VuZDoKCWIgKmlmMTZfZW5kCgoqaWYxNl9lbHNlOgoKKmlmMTZfZW5kOgoJLy8gKmlmMThfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4OTcKCS8vIHN0YWtlclJlbW92ZWQKCWZyYW1lX2RpZyAtNSAvLyBzdGFrZXJSZW1vdmVkOiBib29sZWFuCglieiAqaWYxOF9lbmQKCgkvLyAqaWYxOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo4OTkKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5wb29sc1twb29sS2V5LnBvb2xJZCAtIDFdLnRvdGFsU3Rha2VycyAtPSAxCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgOCAvLyBoZWFkT2Zmc2V0CgkrCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgOCAvLyBoZWFkT2Zmc2V0CgkrCglpbnQgMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglpbnQgMQoJLQoJaXRvYgoJZXh0cmFjdCA2IDIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjkwMQoJLy8gcmVtb3ZlUmV0ID0gdGhpcy5yZW1vdmVGcm9tU3Rha2VyUG9vbFNldChzdGFrZXIsIDxWYWxpZGF0b3JQb29sS2V5PnsKCS8vICAgICAgICAgICAgICAgICBpZDogcG9vbEtleS5pZCwKCS8vICAgICAgICAgICAgICAgICBwb29sSWQ6IHBvb2xLZXkucG9vbElkLAoJLy8gICAgICAgICAgICAgICAgIHBvb2xBcHBJZDogcG9vbEtleS5wb29sQXBwSWQsCgkvLyAgICAgICAgICAgICB9KQoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMTYgOAoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9kaWcgLTIgLy8gc3Rha2VyOiBBZGRyZXNzCgljYWxsc3ViIHJlbW92ZUZyb21TdGFrZXJQb29sU2V0CglmcmFtZV9idXJ5IDEgLy8gcmVtb3ZlUmV0OiAoYm9vbCxib29sKQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjkwNgoJLy8gc3Rha2VyT3V0T2ZUaGlzVmFsaWRhdG9yID0gcmVtb3ZlUmV0WzBdCglmcmFtZV9kaWcgMSAvLyByZW1vdmVSZXQ6IChib29sLGJvb2wpCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWdldGJpdAoJZnJhbWVfYnVyeSAyIC8vIHN0YWtlck91dE9mVGhpc1ZhbGlkYXRvcjogYm9vbAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjkwNwoJLy8gc3Rha2VyT3V0T2ZQcm90b2NvbCA9IHJlbW92ZVJldFsxXQoJZnJhbWVfZGlnIDEgLy8gcmVtb3ZlUmV0OiAoYm9vbCxib29sKQoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxCglnZXRiaXQKCWZyYW1lX2J1cnkgMyAvLyBzdGFrZXJPdXRPZlByb3RvY29sOiBib29sCgoJLy8gKmlmMTlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5MDkKCS8vIHN0YWtlck91dE9mVGhpc1ZhbGlkYXRvcgoJZnJhbWVfZGlnIDIgLy8gc3Rha2VyT3V0T2ZUaGlzVmFsaWRhdG9yOiBib29sCglieiAqaWYxOV9lbmQKCgkvLyAqaWYxOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5MTAKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5zdGF0ZS50b3RhbFN0YWtlcnMgLT0gMQoJaW50IDI0NAoJZHVwCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglpbnQgMQoJLQoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoqaWYxOV9lbmQ6CgkvLyAqaWYyMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjkxMwoJLy8gc3Rha2VyT3V0T2ZQcm90b2NvbAoJZnJhbWVfZGlnIDMgLy8gc3Rha2VyT3V0T2ZQcm90b2NvbDogYm9vbAoJYnogKmlmMjBfZW5kCgoJLy8gKmlmMjBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTE0CgkvLyB0aGlzLm51bVN0YWtlcnMudmFsdWUgLT0gMQoJYnl0ZSAweDZlNzU2ZDUzNzQ2MTZiNjU3MjczIC8vICJudW1TdGFrZXJzIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgktCglieXRlIDB4NmU3NTZkNTM3NDYxNmI2NTcyNzMgLy8gIm51bVN0YWtlcnMiCglzd2FwCglhcHBfZ2xvYmFsX3B1dAoKKmlmMjBfZW5kOgoKKmlmMThfZW5kOgoJcmV0c3ViCgovLyBmaW5kUG9vbEZvclN0YWtlcih1aW50NjQsYWRkcmVzcyx1aW50NjQpKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYm9vbCxib29sKQoqYWJpX3JvdXRlX2ZpbmRQb29sRm9yU3Rha2VyOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhbW91bnRUb1N0YWtlOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCgkvLyBzdGFrZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAoc3Rha2VyKSBmb3IgZmluZFBvb2xGb3JTdGFrZXIgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIHZhbGlkYXRvcklkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGZpbmRQb29sRm9yU3Rha2VyKHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCkoKHVpbnQ2NCx1aW50NjQsdWludDY0KSxib29sLGJvb2wpCgljYWxsc3ViIGZpbmRQb29sRm9yU3Rha2VyCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZmluZFBvb2xGb3JTdGFrZXIodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgc3Rha2VyOiBBZGRyZXNzLCBhbW91bnRUb1N0YWtlOiB1aW50NjQpOiBbVmFsaWRhdG9yUG9vbEtleSwgYm9vbGVhbiwgYm9vbGVhbl0KLy8KLy8gRmluZHMgdGhlIHBvb2wgZm9yIGEgc3Rha2VyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB2YWxpZGF0b3IgaWQsIHN0YWtlciBhZGRyZXNzLCBhbmQgYW1vdW50IHRvIHN0YWtlLgovLyBGaXJzdCBjaGVja3MgdGhlIHN0YWtlcnMgJ2FscmVhZHkgc3Rha2VkIGxpc3QnIGZvciB0aGUgdmFsaWRhdG9yIHByZWZlcnJpbmcgdGhvc2UgKGFkZGluZyBpZiBwb3NzaWJsZSkgdGhlbiBhZGRzCi8vIHRvIG5ldyBwb29sIGlmIG5lY2Vzc2FyeS4KLy8KLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3IuCi8vIEBwYXJhbSB7QWRkcmVzc30gc3Rha2VyIC0gVGhlIGFkZHJlc3Mgb2YgdGhlIHN0YWtlci4KLy8gQHBhcmFtIHt1aW50NjR9IGFtb3VudFRvU3Rha2UgLSBUaGUgYW1vdW50IHRvIHN0YWtlLgovLyBAcmV0dXJucyB7VmFsaWRhdG9yUG9vbEtleSwgYm9vbGVhbiwgYm9vbGVhbn0gLSBUaGUgcG9vbCBmb3IgdGhlIHN0YWtlciwgdHJ1ZS9mYWxzZSBvbiB3aGV0aGVyIHRoZSBzdGFrZXIgaXMgJ25ldycKLy8gdG8gdGhpcyBWQUxJREFUT1IsIGFuZCB0cnVlL2ZhbHNlIGlmIHN0YWtlciBpcyBuZXcgdG8gdGhlIHByb3RvY29sLgpmaW5kUG9vbEZvclN0YWtlcjoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDcKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5MzUKCS8vIGlzTmV3U3Rha2VyVG9WYWxpZGF0b3IgPSB0cnVlCglpbnQgMQoJZnJhbWVfYnVyeSAwIC8vIGlzTmV3U3Rha2VyVG9WYWxpZGF0b3I6IGJvb2wKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5MzYKCS8vIGlzTmV3U3Rha2VyVG9Qcm90b2NvbCA9IHRydWUKCWludCAxCglmcmFtZV9idXJ5IDEgLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTQ0CgkvLyBtYXhQZXJQb29sID0gdGhpcy5nZXRDdXJNYXhTdGFrZVBlclBvb2wodmFsaWRhdG9ySWQpCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJY2FsbHN1YiBnZXRDdXJNYXhTdGFrZVBlclBvb2wKCWZyYW1lX2J1cnkgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCgkvLyAqaWYyMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjk0NwoJLy8gdGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikuZXhpc3RzCglieXRlIDB4NzM3MDczIC8vICJzcHMiCglmcmFtZV9kaWcgLTIgLy8gc3Rha2VyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMjFfZW5kCgoJLy8gKmlmMjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTQ4CgkvLyBwb29sU2V0ID0gY2xvbmUodGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikudmFsdWUpCglieXRlIDB4NzM3MDczIC8vICJzcHMiCglmcmFtZV9kaWcgLTIgLy8gc3Rha2VyOiBBZGRyZXNzCgljb25jYXQKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlCglhc3NlcnQKCWZyYW1lX2J1cnkgMyAvLyBwb29sU2V0OiAodWludDY0LHVpbnQ2NCx1aW50NjQpWzZdCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTQ5CgkvLyBhc3NlcnQodmFsaWRhdG9ySWQgIT09IDApCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NTAKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgcG9vbFNldC5sZW5ndGg7IGkgKz0gMSkKCWludCAwCglmcmFtZV9idXJ5IDQgLy8gaTogdWludDY0CgoqZm9yXzM6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NTAKCS8vIGkgPCBwb29sU2V0Lmxlbmd0aAoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgNgoJPAoJYnogKmZvcl8zX2VuZAoKCS8vICppZjIyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTUxCgkvLyBnbG9iYWxzLm9wY29kZUJ1ZGdldCA8IDMwMAoJZ2xvYmFsIE9wY29kZUJ1ZGdldAoJaW50IDMwMAoJPAoJYnogKmlmMjJfZW5kCgoJLy8gKmlmMjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTUyCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWYyMl9lbmQ6CgkvLyAqaWYyM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjk1NAoJLy8gcG9vbFNldFtpXS5pZCA9PT0gMAoJZnJhbWVfZGlnIDMgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDAKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaW50IDAKCT09CglieiAqaWYyM19lbmQKCgkvLyAqaWYyM19jb25zZXF1ZW50CgliICpmb3JfM19jb250aW51ZQoKKmlmMjNfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTU3CgkvLyBpc05ld1N0YWtlclRvUHJvdG9jb2wgPSBmYWxzZQoJaW50IDAKCWZyYW1lX2J1cnkgMSAvLyBpc05ld1N0YWtlclRvUHJvdG9jb2w6IGJvb2wKCgkvLyAqaWYyNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjk1OAoJLy8gcG9vbFNldFtpXS5pZCA9PT0gdmFsaWRhdG9ySWQKCWZyYW1lX2RpZyAzIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDY0LHVpbnQ2NClbNl0KCWZyYW1lX2RpZyA0IC8vIGk6IHVpbnQ2NAoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCAwCgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCgk9PQoJYnogKmlmMjRfZW5kCgoJLy8gKmlmMjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTYwCgkvLyBpc05ld1N0YWtlclRvVmFsaWRhdG9yID0gZmFsc2UKCWludCAwCglmcmFtZV9idXJ5IDAgLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbAoKCS8vICppZjI1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTYyCgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLnBvb2xzW3Bvb2xTZXRbaV0ucG9vbElkIC0gMV0udG90YWxBbGdvU3Rha2VkICsKCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnRUb1N0YWtlIDw9CgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQZXJQb29sCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAzIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDY0LHVpbnQ2NClbNl0KCWZyYW1lX2RpZyA0IC8vIGk6IHVpbnQ2NAoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCA4IC8vIGhlYWRPZmZzZXQKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgMTAgLy8gaGVhZE9mZnNldAoJKwoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9kaWcgLTMgLy8gYW1vdW50VG9TdGFrZTogdWludDY0CgkrCglmcmFtZV9kaWcgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCTw9CglieiAqaWYyNV9lbmQKCgkvLyAqaWYyNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NjYKCS8vIHJldHVybiBbcG9vbFNldFtpXSwgaXNOZXdTdGFrZXJUb1ZhbGlkYXRvciwgaXNOZXdTdGFrZXJUb1Byb3RvY29sXQoJZnJhbWVfZGlnIDMgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDI0CglleHRyYWN0MwoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYiAqZmluZFBvb2xGb3JTdGFrZXIqcmV0dXJuCgoqaWYyNV9lbmQ6CgoqaWYyNF9lbmQ6CgoqZm9yXzNfY29udGludWU6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NTAKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSA0IC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzMKCipmb3JfM19lbmQ6CgoqaWYyMV9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NzMKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIGFtb3VudFRvU3Rha2UgPj0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubWluRW50cnlTdGFrZSwKCS8vICAgICAgICAgICAgICdtdXN0IHN0YWtlIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGZvciB0aGlzIHBvb2wnLAoJLy8gICAgICAgICApCglmcmFtZV9kaWcgLTMgLy8gYW1vdW50VG9TdGFrZTogdWludDY0CglpbnQgMjA5CglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCT49CgoJLy8gbXVzdCBzdGFrZSBhdCBsZWFzdCB0aGUgbWluaW11bSBmb3IgdGhpcyBwb29sCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5NzkKCS8vIHBvb2xzID0gY2xvbmUodGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5wb29scykKCWludCAyNjggLy8gaGVhZE9mZnNldAoJaW50IDQzMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgNSAvLyBwb29sczogKHVpbnQ2NCx1aW50MTYsdWludDY0KVsyNF0KCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5ODAKCS8vIGN1ck51bVBvb2xzID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5zdGF0ZS5udW1Qb29scyBhcyB1aW50NjQKCWludCAyNDIKCWludCAyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSA2IC8vIGN1ck51bVBvb2xzOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5ODEKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgY3VyTnVtUG9vbHM7IGkgKz0gMSkKCWludCAwCglmcmFtZV9idXJ5IDcgLy8gaTogdWludDY0CgoqZm9yXzQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5ODEKCS8vIGkgPCBjdXJOdW1Qb29scwoJZnJhbWVfZGlnIDcgLy8gaTogdWludDY0CglmcmFtZV9kaWcgNiAvLyBjdXJOdW1Qb29sczogdWludDY0Cgk8CglieiAqZm9yXzRfZW5kCgoJLy8gKmlmMjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5ODIKCS8vIHBvb2xzW2ldLnRvdGFsQWxnb1N0YWtlZCArIGFtb3VudFRvU3Rha2UgPD0gbWF4UGVyUG9vbAoJZnJhbWVfZGlnIDUgLy8gcG9vbHM6ICh1aW50NjQsdWludDE2LHVpbnQ2NClbMjRdCglmcmFtZV9kaWcgNyAvLyBpOiB1aW50NjQKCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgMTAgLy8gaGVhZE9mZnNldAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglmcmFtZV9kaWcgLTMgLy8gYW1vdW50VG9TdGFrZTogdWludDY0CgkrCglmcmFtZV9kaWcgMiAvLyBtYXhQZXJQb29sOiB1aW50NjQKCTw9CglieiAqaWYyNl9lbmQKCgkvLyAqaWYyNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czo5ODMKCS8vIHJldHVybiBbCgkvLyAgICAgICAgICAgICAgICAgICAgIHsgaWQ6IHZhbGlkYXRvcklkLCBwb29sSWQ6IGkgKyAxLCBwb29sQXBwSWQ6IHBvb2xzW2ldLnBvb2xBcHBJZCB9LAoJLy8gICAgICAgICAgICAgICAgICAgICBpc05ld1N0YWtlclRvVmFsaWRhdG9yLAoJLy8gICAgICAgICAgICAgICAgICAgICBpc05ld1N0YWtlclRvUHJvdG9jb2wsCgkvLyAgICAgICAgICAgICAgICAgXQoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWZyYW1lX2RpZyA3IC8vIGk6IHVpbnQ2NAoJaW50IDEKCSsKCWl0b2IKCWNvbmNhdAoJZnJhbWVfZGlnIDUgLy8gcG9vbHM6ICh1aW50NjQsdWludDE2LHVpbnQ2NClbMjRdCglmcmFtZV9kaWcgNyAvLyBpOiB1aW50NjQKCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgMAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMAoJaW50IDAKCWZyYW1lX2RpZyAwIC8vIGlzTmV3U3Rha2VyVG9WYWxpZGF0b3I6IGJvb2wKCXNldGJpdAoJaW50IDEKCWZyYW1lX2RpZyAxIC8vIGlzTmV3U3Rha2VyVG9Qcm90b2NvbDogYm9vbAoJc2V0Yml0Cgljb25jYXQKCWIgKmZpbmRQb29sRm9yU3Rha2VyKnJldHVybgoKKmlmMjZfZW5kOgoKKmZvcl80X2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTgxCgkvLyBpICs9IDEKCWZyYW1lX2RpZyA3IC8vIGk6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgNyAvLyBpOiB1aW50NjQKCWIgKmZvcl80CgoqZm9yXzRfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6OTkxCgkvLyByZXR1cm4gW3sgaWQ6IHZhbGlkYXRvcklkLCBwb29sSWQ6IDAsIHBvb2xBcHBJZDogMCB9LCBpc05ld1N0YWtlclRvVmFsaWRhdG9yLCBpc05ld1N0YWtlclRvUHJvdG9jb2xdCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sCglzZXRiaXQKCWNvbmNhdAoKKmZpbmRQb29sRm9yU3Rha2VyKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDcKCXJldHN1YgoKLy8gbW92ZVBvb2xUb05vZGUodWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAoqYWJpX3JvdXRlX21vdmVQb29sVG9Ob2RlOgoJLy8gbm9kZU51bTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgoJLy8gcG9vbEFwcElkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyB2YWxpZGF0b3JJZDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBtb3ZlUG9vbFRvTm9kZSh1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIG1vdmVQb29sVG9Ob2RlCglpbnQgMQoJcmV0dXJuCgovLyBtb3ZlUG9vbFRvTm9kZSh2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlLCBwb29sQXBwSWQ6IHVpbnQ2NCwgbm9kZU51bTogdWludDY0KTogdm9pZAovLwovLyBGaW5kIHRoZSBzcGVjaWZpZWQgcG9vbCAoaW4gYW55IG5vZGUgbnVtYmVyKSBhbmQgbW92ZSBpdCB0byB0aGUgc3BlY2lmaWVkIG5vZGUuCi8vIFRoZSBwb29sIGFjY291bnQgaXMgZm9yY2VkIG9mZmxpbmUgaWYgbW92ZWQgc28gcHJpb3Igbm9kZSB3aWxsIHN0aWxsIHJ1biBmb3IgMzIwIHJvdW5kcyBidXQKLy8gbmV3IGtleSBnb2VzIG9ubGluZSBvbiBuZXcgbm9kZSBzb29uIGFmdGVyICgzMjAgcm91bmRzIGFmdGVyIGl0IGdvZXMgb25saW5lKQovLyBOby1vcCBpZiBzdWNjZXNzLCBhc3NlcnRzIGlmIG5vdCBmb3VuZCBvciBjYW4ndCBtb3ZlICAobm8gc3BhY2UgaW4gdGFyZ2V0KQovLyBbIE9OTFkgT1dORVIgT1IgTUFOQUdFUiBDQU4gQ0hBTkdFIF0KLy8KLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3IuCi8vIEBwYXJhbSB7dWludDY0fSBwb29sQXBwSWQKLy8gQHBhcmFtIHt1aW50NjR9IG5vZGVOdW0KbW92ZVBvb2xUb05vZGU6Cglwcm90byAzIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTAwNwoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgdGhpcy50eG4uc2VuZGVyID09PSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5vd25lciB8fAoJLy8gICAgICAgICAgICAgICAgIHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcubWFuYWdlciwKCS8vICAgICAgICAgICAgICdjYW4gb25seSBiZSBjYWxsZWQgYnkgb3duZXIgb3IgbWFuYWdlciBvZiB2YWxpZGF0b3InLAoJLy8gICAgICAgICApCgl0eG4gU2VuZGVyCglpbnQgOAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJPT0KCWR1cAoJYm56ICpza2lwX29yMwoJdHhuIFNlbmRlcgoJaW50IDQwCglpbnQgMzIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0Cgk9PQoJfHwKCipza2lwX29yMzoKCS8vIGNhbiBvbmx5IGJlIGNhbGxlZCBieSBvd25lciBvciBtYW5hZ2VyIG9mIHZhbGlkYXRvcgoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTAxMwoJLy8gbm9kZVBvb2xBc3NpZ25tZW50cyA9IGNsb25lKHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUubm9kZVBvb2xBc3NpZ25tZW50cykKCWludCA5MDAgLy8gaGVhZE9mZnNldAoJaW50IDE5MgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgMCAvLyBub2RlUG9vbEFzc2lnbm1lbnRzOiAoKHVpbnQ2NFszXSlbOF0pCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTAxNAoJLy8gYXNzZXJ0KG5vZGVOdW0gPj0gMSAmJiBub2RlTnVtIDw9IE1BWF9OT0RFUywgJ25vZGUgbnVtYmVyIG91dCBvZiBhbGxvd2FibGUgcmFuZ2UnKQoJZnJhbWVfZGlnIC0zIC8vIG5vZGVOdW06IHVpbnQ2NAoJaW50IDEKCT49CglkdXAKCWJ6ICpza2lwX2FuZDEKCWZyYW1lX2RpZyAtMyAvLyBub2RlTnVtOiB1aW50NjQKCWludCA4Cgk8PQoJJiYKCipza2lwX2FuZDE6CgkvLyBub2RlIG51bWJlciBvdXQgb2YgYWxsb3dhYmxlIHJhbmdlCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDE2CgkvLyBmb3IgKGxldCBzcmNOb2RlSWR4ID0gMDsgc3JjTm9kZUlkeCA8IE1BWF9OT0RFUzsgc3JjTm9kZUlkeCArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMSAvLyBzcmNOb2RlSWR4OiB1aW50NjQKCipmb3JfNToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMTYKCS8vIHNyY05vZGVJZHggPCBNQVhfTk9ERVMKCWZyYW1lX2RpZyAxIC8vIHNyY05vZGVJZHg6IHVpbnQ2NAoJaW50IDgKCTwKCWJ6ICpmb3JfNV9lbmQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDE3CgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IE1BWF9QT09MU19QRVJfTk9ERTsgaSArPSAxKQoJaW50IDAKCWZyYW1lX2J1cnkgMiAvLyBpOiB1aW50NjQKCipmb3JfNjoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMTcKCS8vIGkgPCBNQVhfUE9PTFNfUEVSX05PREUKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50IDMKCTwKCWJ6ICpmb3JfNl9lbmQKCgkvLyAqaWYyN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMTgKCS8vIG5vZGVQb29sQXNzaWdubWVudHMubm9kZXNbc3JjTm9kZUlkeF0ucG9vbEFwcElkc1tpXSA9PT0gcG9vbEFwcElkCglmcmFtZV9kaWcgMCAvLyBub2RlUG9vbEFzc2lnbm1lbnRzOiAoKHVpbnQ2NFszXSlbOF0pCglpbnQgMAoJZnJhbWVfZGlnIDEgLy8gc3JjTm9kZUlkeDogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDAKCSsKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50IDgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglmcmFtZV9kaWcgLTIgLy8gcG9vbEFwcElkOiB1aW50NjQKCT09CglieiAqaWYyN19lbmQKCgkvLyAqaWYyN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDE5CgkvLyBhc3NlcnQobm9kZU51bSAtIDEgIT09IHNyY05vZGVJZHgsICJjYW4ndCBtb3ZlIHRvIHNhbWUgbm9kZSIpCglmcmFtZV9kaWcgLTMgLy8gbm9kZU51bTogdWludDY0CglpbnQgMQoJLQoJZnJhbWVfZGlnIDEgLy8gc3JjTm9kZUlkeDogdWludDY0CgkhPQoKCS8vIGNhbid0IG1vdmUgdG8gc2FtZSBub2RlCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDIxCgkvLyB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLm5vZGVQb29sQXNzaWdubWVudHMubm9kZXNbc3JjTm9kZUlkeF0ucG9vbEFwcElkc1tpXSA9IDAKCWludCA5MDAKCWZyYW1lX2RpZyAxIC8vIHNyY05vZGVJZHg6IHVpbnQ2NAoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAwCgkrCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCA4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMjQKCS8vIHNlbmRNZXRob2RDYWxsPHR5cGVvZiBTdGFraW5nUG9vbC5wcm90b3R5cGUuZ29PZmZsaW5lPih7CgkvLyAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCksCgkvLyAgICAgICAgICAgICAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJnb09mZmxpbmUoKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMjUKCS8vIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQocG9vbEFwcElkKQoJZnJhbWVfZGlnIC0yIC8vIHBvb2xBcHBJZDogdWludDY0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTAyOQoJLy8gdGhpcy5hZGRQb29sVG9Ob2RlKHZhbGlkYXRvcklkLCBwb29sQXBwSWQsIG5vZGVOdW0pCglmcmFtZV9kaWcgLTMgLy8gbm9kZU51bTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gcG9vbEFwcElkOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCgljYWxsc3ViIGFkZFBvb2xUb05vZGUKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDMwCgkvLyByZXR1cm4KCXJldHN1YgoKKmlmMjdfZW5kOgoKKmZvcl82X2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTAxNwoJLy8gaSArPSAxCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDIgLy8gaTogdWludDY0CgliICpmb3JfNgoKKmZvcl82X2VuZDoKCipmb3JfNV9jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwMTYKCS8vIHNyY05vZGVJZHggKz0gMQoJZnJhbWVfZGlnIDEgLy8gc3JjTm9kZUlkeDogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAxIC8vIHNyY05vZGVJZHg6IHVpbnQ2NAoJYiAqZm9yXzUKCipmb3JfNV9lbmQ6CgkvLyBjb3VsZG4ndCBmaW5kIHBvb2wgYXBwIGlkIGluIG5vZGVzIHRvIG1vdmUKCWVycgoJcmV0c3ViCgovLyBlbXB0eVRva2VuUmV3YXJkcyh1aW50NjQsYWRkcmVzcyl1aW50NjQKKmFiaV9yb3V0ZV9lbXB0eVRva2VuUmV3YXJkczoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMCAocmVjZWl2ZXIpIGZvciBlbXB0eVRva2VuUmV3YXJkcyBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gdmFsaWRhdG9ySWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZW1wdHlUb2tlblJld2FyZHModWludDY0LGFkZHJlc3MpdWludDY0CgljYWxsc3ViIGVtcHR5VG9rZW5SZXdhcmRzCglpdG9iCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gZW1wdHlUb2tlblJld2FyZHModmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgcmVjZWl2ZXI6IEFkZHJlc3MpOiB1aW50NjQKLy8KLy8gU2VuZHMgdGhlIHJld2FyZCB0b2tlbnMgaGVsZCBpbiBwb29sIDEgdG8gc3BlY2lmaWVkIHJlY2VpdmVyLgovLyBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgdGhlIG93bmVyIHdoZW4gdGhleSB3YW50IHRvIGdldCByZXdhcmQgdG9rZW5zICdiYWNrJyB3aGljaCB0aGV5IHNlbnQgdG8KLy8gdGhlIGZpcnN0IHBvb2wgKGxpa2VseSBiZWNhdXNlIHZhbGlkYXRvciBpcyBzdW5zZXR0aW5nLiAgQW55IHRva2VucyBjdXJyZW50bHkgJ3Jlc2VydmVkJyBmb3Igc3Rha2VycyB0byBjbGFpbSB3aWxsCi8vIE5PVCBiZSBzZW50IGFzIHRoZXkgbXVzdCBiZSBoZWxkIGJhY2sgZm9yIHN0YWtlcnMgdG8gbGF0ZXIgY2xhaW0uCi8vIFsgT05MWSBPV05FUiBDQU4gQ0FMTF0KLy8KLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3IuCi8vIEBwYXJhbSB7QWRkcmVzc30gcmVjZWl2ZXIgLSB0aGUgYWNjb3VudCB0byBzZW5kIHRoZSB0b2tlbnMgdG8gKG11c3QgYWxyZWFkeSBiZSBvcHRlZC1pbiB0byB0aGUgcmV3YXJkIHRva2VuKQovLyBAcmV0dXJucyB7dWludDY0fSB0aGUgYW1vdW50IG9mIHJld2FyZCB0b2tlbiBzZW50CmVtcHR5VG9rZW5SZXdhcmRzOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMwoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNDkKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcub3duZXIsCgkvLyAgICAgICAgICAgICAnY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IHZhbGlkYXRvciBvd25lcicsCgkvLyAgICAgICAgICkKCXR4biBTZW5kZXIKCWludCA4CglpbnQgMzIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0Cgk9PQoKCS8vIGNhbiBvbmx5IGJlIGNhbGxlZCBieSB2YWxpZGF0b3Igb3duZXIKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNTMKCS8vIHJld2FyZFRva2VuSWQgPSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5yZXdhcmRUb2tlbklkCglpbnQgMTUzCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMCAvLyByZXdhcmRUb2tlbklkOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDU0CgkvLyByZXdhcmRUb2tlbkhlbGRCYWNrID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5zdGF0ZS5yZXdhcmRUb2tlbkhlbGRCYWNrCglpbnQgMjYwCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMSAvLyByZXdhcmRUb2tlbkhlbGRCYWNrOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDU1CgkvLyBhc3NlcnQocmV3YXJkVG9rZW5JZCAhPT0gMCwgInRoaXMgdmFsaWRhdG9yIGRvZXNuJ3QgaGF2ZSBhIHJld2FyZCB0b2tlbiBkZWZpbmVkIikKCWZyYW1lX2RpZyAwIC8vIHJld2FyZFRva2VuSWQ6IHVpbnQ2NAoJaW50IDAKCSE9CgoJLy8gdGhpcyB2YWxpZGF0b3IgZG9lc24ndCBoYXZlIGEgcmV3YXJkIHRva2VuIGRlZmluZWQKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNTYKCS8vIHBvb2xPbmVBcHBJZCA9IEFwcElELmZyb21VaW50NjQodGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5wb29sc1swXS5wb29sQXBwSWQpCglpbnQgMjY4CglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMiAvLyBwb29sT25lQXBwSWQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNTgKCS8vIHRva2VuUmV3YXJkQmFsID0KCS8vICAgICAgICAgICAgIHBvb2xPbmVBcHBJZC5hZGRyZXNzLmFzc2V0QmFsYW5jZShBc3NldElELmZyb21VaW50NjQocmV3YXJkVG9rZW5JZCkpIC0gcmV3YXJkVG9rZW5IZWxkQmFjawoJZnJhbWVfZGlnIDIgLy8gcG9vbE9uZUFwcElkOiB1aW50NjQKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCXBvcAoJZnJhbWVfZGlnIDAgLy8gcmV3YXJkVG9rZW5JZDogdWludDY0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gcmV3YXJkVG9rZW5IZWxkQmFjazogdWludDY0CgktCglmcmFtZV9idXJ5IDMgLy8gdG9rZW5SZXdhcmRCYWw6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNjIKCS8vIHNlbmRNZXRob2RDYWxsPHR5cGVvZiBTdGFraW5nUG9vbC5wcm90b3R5cGUucGF5VG9rZW5SZXdhcmQ+KHsKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6IHBvb2xPbmVBcHBJZCwKCS8vICAgICAgICAgICAgIG1ldGhvZEFyZ3M6IFtyZWNlaXZlciwgcmV3YXJkVG9rZW5JZCwgdG9rZW5SZXdhcmRCYWxdLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAicGF5VG9rZW5SZXdhcmQoYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNjMKCS8vIGFwcGxpY2F0aW9uSUQ6IHBvb2xPbmVBcHBJZAoJZnJhbWVfZGlnIDIgLy8gcG9vbE9uZUFwcElkOiB1aW50NjQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEwNjQKCS8vIG1ldGhvZEFyZ3M6IFtyZWNlaXZlciwgcmV3YXJkVG9rZW5JZCwgdG9rZW5SZXdhcmRCYWxdCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMCAvLyByZXdhcmRUb2tlbklkOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgMyAvLyB0b2tlblJld2FyZEJhbDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMDY2CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICBwb29sT25lQXBwSWQuYWRkcmVzcy5hc3NldEJhbGFuY2UoQXNzZXRJRC5mcm9tVWludDY0KHJld2FyZFRva2VuSWQpKSA9PT0gcmV3YXJkVG9rZW5IZWxkQmFjaywKCS8vICAgICAgICAgICAgICdiYWxhbmNlIG9mIHJlbWFpbmluZyByZXdhcmQgdG9rZW5zIHNob3VsZCBtYXRjaCB0aGUgaGVsZCBiYWNrIGFtb3VudCcsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyAyIC8vIHBvb2xPbmVBcHBJZDogdWludDY0CglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglwb3AKCWZyYW1lX2RpZyAwIC8vIHJld2FyZFRva2VuSWQ6IHVpbnQ2NAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIHJld2FyZFRva2VuSGVsZEJhY2s6IHVpbnQ2NAoJPT0KCgkvLyBiYWxhbmNlIG9mIHJlbWFpbmluZyByZXdhcmQgdG9rZW5zIHNob3VsZCBtYXRjaCB0aGUgaGVsZCBiYWNrIGFtb3VudAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTA3MAoJLy8gcmV0dXJuIHRva2VuUmV3YXJkQmFsCglmcmFtZV9kaWcgMyAvLyB0b2tlblJld2FyZEJhbDogdWludDY0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMwoJcmV0c3ViCgovLyB2ZXJpZnlQb29sS2V5Q2FsbGVyKHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkpOiB2b2lkCi8vCi8vIExvZ3MgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IHZhbGlkYXRvciB0byB0aGUgc3lzdGVtLCBpdHMgaW5pdGlhbCBvd25lciBhbmQgbWFuYWdlcgovLwovLwovLyB2ZXJpZnlQb29sS2V5Q2FsbGVyIHZlcmlmaWVzIHRoZSBwYXNzZWQgaW4ga2V5IChmcm9tIGEgc3Rha2luZyBwb29sIGNhbGxpbmcgdXMgdG8gdXBkYXRlIG1ldHJpY3MpIGlzIHZhbGlkCi8vIGFuZCBtYXRjaGVzIHRoZSBpbmZvcm1hdGlvbiB3ZSBoYXZlIGluIG91ciBzdGF0ZS4gICdGYWtlJyBwb29scyBjb3VsZCBjYWxsIHVzIHRvIHVwZGF0ZSBvdXIgZGF0YSwgYnV0IHRoZXkKLy8gY2FuJ3QgZmFrZSB0aGUgaWRzIGFuZCBtb3N0IGltcG9ydGFudGx5IGFwcGxpY2F0aW9uIGlkKCEpIG9mIHRoZSBjYWxsZXIgdGhhdCBoYXMgdG8gbWF0Y2guCnZlcmlmeVBvb2xLZXlDYWxsZXI6Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMTY4CgkvLyBhc3NlcnQodGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLmV4aXN0cywgInRoZSBzcGVjaWZpZWQgdmFsaWRhdG9yIGlkIGlzbid0IHZhbGlkIikKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cglib3hfbGVuCglzd2FwCglwb3AKCgkvLyB0aGUgc3BlY2lmaWVkIHZhbGlkYXRvciBpZCBpc24ndCB2YWxpZAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTE2OQoJLy8gYXNzZXJ0KHBvb2xLZXkucG9vbElkIDw9IE1BWF9QT09MUywgJ3Bvb2wgaWQgbm90IGluIHZhbGlkIHJhbmdlJykKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDI0Cgk8PQoKCS8vIHBvb2wgaWQgbm90IGluIHZhbGlkIHJhbmdlCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMTcwCgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICBwb29sS2V5LnBvb2xJZCA+IDAgJiYgKHBvb2xLZXkucG9vbElkIGFzIHVpbnQxNikgPD0gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLm51bVBvb2xzLAoJLy8gICAgICAgICAgICAgJ3Bvb2wgaWQgb3V0c2lkZSBvZiByYW5nZSBvZiBwb29scyBjcmVhdGVkIGZvciB0aGlzIHZhbGlkYXRvcicsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDAKCT4KCWR1cAoJYnogKnNraXBfYW5kMgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgOCA4CglidG9pCglpbnQgMjQyCglpbnQgMgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCgk8PQoJJiYKCipza2lwX2FuZDI6CgkvLyBwb29sIGlkIG91dHNpZGUgb2YgcmFuZ2Ugb2YgcG9vbHMgY3JlYXRlZCBmb3IgdGhpcyB2YWxpZGF0b3IKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjExNzYKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIHBvb2xLZXkucG9vbEFwcElkID09PSB0aGlzLnZhbGlkYXRvckxpc3QocG9vbEtleS5pZCkudmFsdWUucG9vbHNbcG9vbEtleS5wb29sSWQgLSAxXS5wb29sQXBwSWQsCgkvLyAgICAgICAgICAgICAiVGhlIHBhc3NlZCBpbiBhcHAgaWQgZG9lc24ndCBtYXRjaCB0aGUgcGFzc2VkIGluIGlkcyIsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDE2IDgKCWJ0b2kKCWludCAyNjggLy8gaGVhZE9mZnNldAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgOCA4CglidG9pCglpbnQgMQoJLQoJaW50IDE4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAwCgkrCglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCgk9PQoKCS8vIFRoZSBwYXNzZWQgaW4gYXBwIGlkIGRvZXNuJ3QgbWF0Y2ggdGhlIHBhc3NlZCBpbiBpZHMKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjExODEKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IEFwcElELmZyb21VaW50NjQocG9vbEtleS5wb29sQXBwSWQpLmFkZHJlc3MpCgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAxNiA4CglidG9pCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglwb3AKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMTgzCgkvLyBhc3NlcnQocG9vbEtleS5pZCA9PT0gKEFwcElELmZyb21VaW50NjQocG9vbEtleS5wb29sQXBwSWQpLmdsb2JhbFN0YXRlKCd2YWxpZGF0b3JJZCcpIGFzIHVpbnQ2NCkpCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDE2IDgKCWJ0b2kKCWJ5dGUgMHg3NjYxNmM2OTY0NjE3NDZmNzI0OTY0IC8vICJ2YWxpZGF0b3JJZCIKCWFwcF9nbG9iYWxfZ2V0X2V4CgoJLy8gZ2xvYmFsIHN0YXRlIHZhbHVlIGRvZXMgbm90IGV4aXN0OiBBcHBJRC5mcm9tVWludDY0KHBvb2xLZXkucG9vbEFwcElkKS5nbG9iYWxTdGF0ZSgndmFsaWRhdG9ySWQnKQoJYXNzZXJ0Cgk9PQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTE4NAoJLy8gYXNzZXJ0KHBvb2xLZXkucG9vbElkID09PSAoQXBwSUQuZnJvbVVpbnQ2NChwb29sS2V5LnBvb2xBcHBJZCkuZ2xvYmFsU3RhdGUoJ3Bvb2xJZCcpIGFzIHVpbnQ2NCkpCglmcmFtZV9kaWcgLTEgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyAtMSAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDE2IDgKCWJ0b2kKCWJ5dGUgMHg3MDZmNmY2YzQ5NjQgLy8gInBvb2xJZCIKCWFwcF9nbG9iYWxfZ2V0X2V4CgoJLy8gZ2xvYmFsIHN0YXRlIHZhbHVlIGRvZXMgbm90IGV4aXN0OiBBcHBJRC5mcm9tVWludDY0KHBvb2xLZXkucG9vbEFwcElkKS5nbG9iYWxTdGF0ZSgncG9vbElkJykKCWFzc2VydAoJPT0KCWFzc2VydAoJcmV0c3ViCgovLyByZXZlcmlmeU5GRE93bmVyc2hpcCh2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlKTogdm9pZAovLwovLyBUaGlzIG1ldGhvZCB2ZXJpZmllcyB0aGUgb3duZXJzaGlwIG9mIE5GRCAoTmFtZWQgRnVuY3Rpb24gRGF0YSkgYnkgYSB2YWxpZGF0b3IuCi8vIElmIHRoZSBvd25lcnNoaXAgaXMgbm8gbG9uZ2VyIHZhbGlkLCBpdCByZW1vdmVzIHRoZSBORkQgZnJvbSB0aGUgdmFsaWRhdG9yJ3MgY29uZmlndXJhdGlvbi4KLy8KLy8gQHBhcmFtIHtWYWxpZGF0b3JJZFR5cGV9IHZhbGlkYXRvcklkIC0gVGhlIGlkIG9mIHRoZSB2YWxpZGF0b3Igd2hvc2UgZGF0YSBzaG91bGQgYmUgcmUtZXZhbHVhdGVkLgpyZXZlcmlmeU5GRE93bmVyc2hpcDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMTk0CgkvLyB2YWxpZGF0b3JDb25maWcgPSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZwoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAwIC8vIHN0b3JhZ2Uga2V5Ly92YWxpZGF0b3JDb25maWcKCgkvLyAqaWYyOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjExOTUKCS8vIHZhbGlkYXRvckNvbmZpZy5uZmRGb3JJbmZvICE9PSAwCglpbnQgNzIKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJaW50IDAKCSE9CglieiAqaWYyOF9lbmQKCgkvLyAqaWYyOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMTk4CgkvLyBuZmRPd25lciA9IEFwcElELmZyb21VaW50NjQodmFsaWRhdG9yQ29uZmlnLm5mZEZvckluZm8pLmdsb2JhbFN0YXRlKCdpLm93bmVyLmEnKSBhcyBBZGRyZXNzCglpbnQgNzIKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJYnl0ZSAweDY5MmU2Zjc3NmU2NTcyMmU2MSAvLyAiaS5vd25lci5hIgoJYXBwX2dsb2JhbF9nZXRfZXgKCgkvLyBnbG9iYWwgc3RhdGUgdmFsdWUgZG9lcyBub3QgZXhpc3Q6IEFwcElELmZyb21VaW50NjQodmFsaWRhdG9yQ29uZmlnLm5mZEZvckluZm8pLmdsb2JhbFN0YXRlKCdpLm93bmVyLmEnKQoJYXNzZXJ0CglmcmFtZV9idXJ5IDEgLy8gbmZkT3duZXI6IGFkZHJlc3MKCgkvLyAqaWYyOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyMDAKCS8vIHZhbGlkYXRvckNvbmZpZy5vd25lciAhPT0gbmZkT3duZXIgJiYgdmFsaWRhdG9yQ29uZmlnLm1hbmFnZXIgIT09IG5mZE93bmVyCglpbnQgOAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJZnJhbWVfZGlnIDEgLy8gbmZkT3duZXI6IGFkZHJlc3MKCSE9CglkdXAKCWJ6ICpza2lwX2FuZDMKCWludCA0MAoJaW50IDMyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJZnJhbWVfZGlnIDEgLy8gbmZkT3duZXI6IGFkZHJlc3MKCSE9CgkmJgoKKnNraXBfYW5kMzoKCWJ6ICppZjI5X2VuZAoKCS8vICppZjI5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyMDIKCS8vIHRoaXMudmFsaWRhdG9yTGlzdCh2YWxpZGF0b3JJZCkudmFsdWUuY29uZmlnLm5mZEZvckluZm8gPSAwCglpbnQgNzIKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKKmlmMjlfZW5kOgoKKmlmMjhfZW5kOgoJcmV0c3ViCgovLyB2YWxpZGF0ZUNvbmZpZyhjb25maWc6IFZhbGlkYXRvckNvbmZpZyk6IHZvaWQKdmFsaWRhdGVDb25maWc6Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjA5CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICBjb25maWcuZW50cnlHYXRpbmdUeXBlID49IEdBVElOR19UWVBFX05PTkUgJiYgY29uZmlnLmVudHJ5R2F0aW5nVHlwZSA8PSBHQVRJTkdfVFlQRV9DT05TVF9NQVgsCgkvLyAgICAgICAgICAgICAnZ2F0aW5nIHR5cGUgbm90IHZhbGlkJywKCS8vICAgICAgICAgKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDgwIDEKCWJ0b2kKCWludCAwCgk+PQoJZHVwCglieiAqc2tpcF9hbmQ0CglmcmFtZV9kaWcgLTEgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgODAgMQoJYnRvaQoJaW50IDQKCTw9CgkmJgoKKnNraXBfYW5kNDoKCS8vIGdhdGluZyB0eXBlIG5vdCB2YWxpZAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTIxMwoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgY29uZmlnLmVwb2NoUm91bmRMZW5ndGggPj0gTUlOX0VQT0NIX0xFTkdUSCAmJiBjb25maWcuZXBvY2hSb3VuZExlbmd0aCA8PSBNQVhfRVBPQ0hfTEVOR1RILAoJLy8gICAgICAgICAgICAgJ2Vwb2NoIGxlbmd0aCBub3QgaW4gYWxsb3dhYmxlIHJhbmdlJywKCS8vICAgICAgICAgKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDE2OSA0CglidG9pCglpbnQgMQoJPj0KCWR1cAoJYnogKnNraXBfYW5kNQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDE2OSA0CglidG9pCglpbnQgMTAwMDAwMAoJPD0KCSYmCgoqc2tpcF9hbmQ1OgoJLy8gZXBvY2ggbGVuZ3RoIG5vdCBpbiBhbGxvd2FibGUgcmFuZ2UKCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyMTcKCS8vIGFzc2VydCgKCS8vICAgICAgICAgICAgIGNvbmZpZy5wZXJjZW50VG9WYWxpZGF0b3IgPj0gTUlOX1BDVF9UT19WQUxJREFUT1IgJiYgY29uZmlnLnBlcmNlbnRUb1ZhbGlkYXRvciA8PSBNQVhfUENUX1RPX1ZBTElEQVRPUiwKCS8vICAgICAgICAgICAgICdjb21taXNzaW9uIHBlcmNlbnRhZ2Ugbm90IHZhbGlkJywKCS8vICAgICAgICAgKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDE3MyA0CglidG9pCglpbnQgMAoJPj0KCWR1cAoJYnogKnNraXBfYW5kNgoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDE3MyA0CglidG9pCglpbnQgMTAwMDAwMAoJPD0KCSYmCgoqc2tpcF9hbmQ2OgoJLy8gY29tbWlzc2lvbiBwZXJjZW50YWdlIG5vdCB2YWxpZAoJYXNzZXJ0CgoJLy8gKmlmMzBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjIxCgkvLyBjb25maWcucGVyY2VudFRvVmFsaWRhdG9yICE9PSAwCglmcmFtZV9kaWcgLTEgLy8gY29uZmlnOiBWYWxpZGF0b3JDb25maWcKCWV4dHJhY3QgMTczIDQKCWJ0b2kKCWludCAwCgkhPQoJYnogKmlmMzBfZW5kCgoJLy8gKmlmMzBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTIyMgoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcyAhPT0gQWRkcmVzcy56ZXJvQWRkcmVzcywKCS8vICAgICAgICAgICAgICAgICAndmFsaWRhdG9yQ29tbWlzc2lvbkFkZHJlc3MgbXVzdCBiZSBzZXQgaWYgcGVyY2VudCB0byB2YWxpZGF0b3IgaXMgbm90IDAnLAoJLy8gICAgICAgICAgICAgKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDE3NyAzMgoJZ2xvYmFsIFplcm9BZGRyZXNzCgkhPQoKCS8vIHZhbGlkYXRvckNvbW1pc3Npb25BZGRyZXNzIG11c3QgYmUgc2V0IGlmIHBlcmNlbnQgdG8gdmFsaWRhdG9yIGlzIG5vdCAwCglhc3NlcnQKCippZjMwX2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyMjcKCS8vIGFzc2VydChjb25maWcubWluRW50cnlTdGFrZSA+PSBNSU5fQUxHT19TVEFLRV9QRVJfUE9PTCwgJ3N0YWtpbmcgcG9vbCBtdXN0IGhhdmUgbWluaW11bSBlbnRyeSBvZiAxIGFsZ28nKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDIwOSA4CglidG9pCglpbnQgMTAwMDAwMAoJPj0KCgkvLyBzdGFraW5nIHBvb2wgbXVzdCBoYXZlIG1pbmltdW0gZW50cnkgb2YgMSBhbGdvCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjI5CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICBjb25maWcucG9vbHNQZXJOb2RlID4gMCAmJiBjb25maWcucG9vbHNQZXJOb2RlIDw9IE1BWF9QT09MU19QRVJfTk9ERSwKCS8vICAgICAgICAgICAgICdudW1iZXIgb2YgcG9vbHMgcGVyIG5vZGUgZXhjZWVkcyBhbGxvd2VkIG51bWJlcicsCgkvLyAgICAgICAgICkKCWZyYW1lX2RpZyAtMSAvLyBjb25maWc6IFZhbGlkYXRvckNvbmZpZwoJZXh0cmFjdCAyMjUgMQoJYnRvaQoJaW50IDAKCT4KCWR1cAoJYnogKnNraXBfYW5kNwoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDIyNSAxCglidG9pCglpbnQgMwoJPD0KCSYmCgoqc2tpcF9hbmQ3OgoJLy8gbnVtYmVyIG9mIHBvb2xzIHBlciBub2RlIGV4Y2VlZHMgYWxsb3dlZCBudW1iZXIKCWFzc2VydAoKCS8vICppZjMxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTIzMwoJLy8gY29uZmlnLnN1bnNldHRpbmdPbiAhPT0gMAoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDIyNiA4CglidG9pCglpbnQgMAoJIT0KCWJ6ICppZjMxX2VuZAoKCS8vICppZjMxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyMzQKCS8vIGFzc2VydChjb25maWcuc3Vuc2V0dGluZ09uID4gZ2xvYmFscy5sYXRlc3RUaW1lc3RhbXAsICdzdW5zZXR0aW5nT24gbXVzdCBiZSBsYXRlciB0aGFuIG5vdyBpZiBzZXQnKQoJZnJhbWVfZGlnIC0xIC8vIGNvbmZpZzogVmFsaWRhdG9yQ29uZmlnCglleHRyYWN0IDIyNiA4CglidG9pCglnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCgk+CgoJLy8gc3Vuc2V0dGluZ09uIG11c3QgYmUgbGF0ZXIgdGhhbiBub3cgaWYgc2V0Cglhc3NlcnQKCippZjMxX2VuZDoKCXJldHN1YgoKLy8gY2FsbFBvb2xBZGRTdGFrZShzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4sIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXksIG1ickFtdFBhaWQ6IHVpbnQ2NCwgaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbGVhbiwgaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sZWFuKTogdm9pZAovLwovLyBBZGRzIGEgc3Rha2VycyBhbW91bnQgb2YgYWxnbyB0byBhIHZhbGlkYXRvciBwb29sLCB0cmFuc2ZlcnJpbmcgdGhlIGFsZ28gd2UgcmVjZWl2ZWQgZnJvbSB0aGVtIChhbHJlYWR5IHZlcmlmaWVkCi8vIGJ5IG91ciBjYWxsZXIpIHRvIHRoZSBzdGFraW5nIHBvb2wgYWNjb3VudCwgYW5kIHRoZW4gdGVsbGluZyBpdCBhYm91dCB0aGUgYW1vdW50IGJlaW5nIGFkZGVkIGZvciB0aGUgc3BlY2lmaWVkCi8vIHN0YWtlci4KLy8KLy8gQHBhcmFtIHtQYXlUeG59IHN0YWtlZEFtb3VudFBheW1lbnQgLSBwYXltZW50IGNvbWluZyBmcm9tIHN0YWtlciB0byBwbGFjZSBpbnRvIGEgcG9vbAovLyBAcGFyYW0ge1ZhbGlkYXRvclBvb2xLZXl9IHBvb2xLZXkgLSBUaGUga2V5IG9mIHRoZSB2YWxpZGF0b3IgcG9vbC4KLy8gQHBhcmFtIHt1aW50NjR9IG1ickFtdFBhaWQgLSBBbW91bnQgdGhlIHVzZXIgaXMgbGVhdmluZyBiZWhpbmQgaW4gdGhlIHZhbGlkYXRvciB0byBwYXkgZm9yIHRoZWlyIHN0YWtlciBNQlIgY29zdAovLyBAcGFyYW0ge2Jvb2xlYW59IGlzTmV3U3Rha2VyVG9WYWxpZGF0b3IgLSBpZiB0aGlzIGlzIGEgbmV3LCBmaXJzdC10aW1lIHN0YWtlciB0byB0aGUgdmFsaWRhdG9yCi8vIEBwYXJhbSB7Ym9vbGVhbn0gaXNOZXdTdGFrZXJUb1Byb3RvY29sIC0gaWYgdGhpcyBpcyBhIG5ldywgZmlyc3QtdGltZSBzdGFrZXIgdG8gdGhlIHByb3RvY29sCmNhbGxQb29sQWRkU3Rha2U6Cglwcm90byA1IDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI1NgoJLy8gcG9vbEFwcElkID0gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnBvb2xzW3Bvb2xLZXkucG9vbElkIC0gMV0ucG9vbEFwcElkCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgMAoJKwoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAwIC8vIHBvb2xBcHBJZDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI2MAoJLy8gc2VuZE1ldGhvZENhbGw8dHlwZW9mIFN0YWtpbmdQb29sLnByb3RvdHlwZS5hZGRTdGFrZSwgdWludDY0Pih7CgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCksCgkvLyAgICAgICAgICAgICBtZXRob2RBcmdzOiBbCgkvLyAgICAgICAgICAgICAgICAgLy8gPT09PT09PQoJLy8gICAgICAgICAgICAgICAgIC8vIFRISVMgSVMgQSBTRU5EIG9mIHRoZSBhbW91bnQgcmVjZWl2ZWQgcmlnaHQgYmFjayBvdXQgYW5kIGludG8gdGhlIHN0YWtpbmcgcG9vbCBjb250cmFjdCBhY2NvdW50LgoJLy8gICAgICAgICAgICAgICAgIHsgYW1vdW50OiBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCAtIG1ickFtdFBhaWQsIHJlY2VpdmVyOiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCkuYWRkcmVzcyB9LAoJLy8gICAgICAgICAgICAgICAgIC8vID09PT09PT0KCS8vICAgICAgICAgICAgICAgICBzdGFrZWRBbW91bnRQYXltZW50LnNlbmRlciwKCS8vICAgICAgICAgICAgIF0sCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI2NQoJLy8gYW1vdW50OiBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCAtIG1ickFtdFBhaWQKCWZyYW1lX2RpZyAtMSAvLyBzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJZnJhbWVfZGlnIC0zIC8vIG1ickFtdFBhaWQ6IHVpbnQ2NAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjY1CgkvLyByZWNlaXZlcjogQXBwSUQuZnJvbVVpbnQ2NChwb29sQXBwSWQpLmFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIHBvb2xBcHBJZDogdWludDY0CglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglwb3AKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fbmV4dAoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiYWRkU3Rha2UocGF5LGFkZHJlc3MpdWludDY0IgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjYxCgkvLyBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCkKCWZyYW1lX2RpZyAwIC8vIHBvb2xBcHBJZDogdWludDY0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjYyCgkvLyBtZXRob2RBcmdzOiBbCgkvLyAgICAgICAgICAgICAgICAgLy8gPT09PT09PQoJLy8gICAgICAgICAgICAgICAgIC8vIFRISVMgSVMgQSBTRU5EIG9mIHRoZSBhbW91bnQgcmVjZWl2ZWQgcmlnaHQgYmFjayBvdXQgYW5kIGludG8gdGhlIHN0YWtpbmcgcG9vbCBjb250cmFjdCBhY2NvdW50LgoJLy8gICAgICAgICAgICAgICAgIHsgYW1vdW50OiBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCAtIG1ickFtdFBhaWQsIHJlY2VpdmVyOiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCkuYWRkcmVzcyB9LAoJLy8gICAgICAgICAgICAgICAgIC8vID09PT09PT0KCS8vICAgICAgICAgICAgICAgICBzdGFrZWRBbW91bnRQYXltZW50LnNlbmRlciwKCS8vICAgICAgICAgICAgIF0KCWZyYW1lX2RpZyAtMSAvLyBzdGFrZWRBbW91bnRQYXltZW50OiBQYXlUeG4KCWd0eG5zIFNlbmRlcgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWJ0b2kKCgkvLyAqaWYzMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyNzAKCS8vIGdsb2JhbHMub3Bjb2RlQnVkZ2V0IDwgNTAwCglnbG9iYWwgT3Bjb2RlQnVkZ2V0CglpbnQgNTAwCgk8CglieiAqaWYzMl9lbmQKCgkvLyAqaWYzMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjcxCgkvLyBpbmNyZWFzZU9wY29kZUJ1ZGdldCgpCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglieXRlIGI2NCBDb0VCIC8vICNwcmFnbWEgdmVyc2lvbiAxMDsgaW50IDEKCWR1cAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCWludCBEZWxldGVBcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoqaWYzMl9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjc1CgkvLyBwb29sTnVtU3Rha2VycyA9IEFwcElELmZyb21VaW50NjQocG9vbEFwcElkKS5nbG9iYWxTdGF0ZSgnbnVtU3Rha2VycycpIGFzIHVpbnQ2NAoJZnJhbWVfZGlnIDAgLy8gcG9vbEFwcElkOiB1aW50NjQKCWJ5dGUgMHg2ZTc1NmQ1Mzc0NjE2YjY1NzI3MyAvLyAibnVtU3Rha2VycyIKCWFwcF9nbG9iYWxfZ2V0X2V4CgoJLy8gZ2xvYmFsIHN0YXRlIHZhbHVlIGRvZXMgbm90IGV4aXN0OiBBcHBJRC5mcm9tVWludDY0KHBvb2xBcHBJZCkuZ2xvYmFsU3RhdGUoJ251bVN0YWtlcnMnKQoJYXNzZXJ0CglmcmFtZV9idXJ5IDEgLy8gcG9vbE51bVN0YWtlcnM6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyNzYKCS8vIHBvb2xBbGdvU3Rha2VkID0gQXBwSUQuZnJvbVVpbnQ2NChwb29sQXBwSWQpLmdsb2JhbFN0YXRlKCdzdGFrZWQnKSBhcyB1aW50NjQKCWZyYW1lX2RpZyAwIC8vIHBvb2xBcHBJZDogdWludDY0CglieXRlIDB4NzM3NDYxNmI2NTY0IC8vICJzdGFrZWQiCglhcHBfZ2xvYmFsX2dldF9leAoKCS8vIGdsb2JhbCBzdGF0ZSB2YWx1ZSBkb2VzIG5vdCBleGlzdDogQXBwSUQuZnJvbVVpbnQ2NChwb29sQXBwSWQpLmdsb2JhbFN0YXRlKCdzdGFrZWQnKQoJYXNzZXJ0CglmcmFtZV9idXJ5IDIgLy8gcG9vbEFsZ29TdGFrZWQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyNzcKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5wb29sc1twb29sS2V5LnBvb2xJZCAtIDFdLnRvdGFsU3Rha2VycyA9IHBvb2xOdW1TdGFrZXJzIGFzIHVpbnQxNgoJaW50IDI2OCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWludCAxCgktCglpbnQgMTgKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJKwoJaW50IDggLy8gaGVhZE9mZnNldAoJKwoJZnJhbWVfZGlnIDEgLy8gcG9vbE51bVN0YWtlcnM6IHVpbnQ2NAoJaXRvYgoJZXh0cmFjdCA2IDIKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyNzgKCS8vIHRoaXMudmFsaWRhdG9yTGlzdChwb29sS2V5LmlkKS52YWx1ZS5wb29sc1twb29sS2V5LnBvb2xJZCAtIDFdLnRvdGFsQWxnb1N0YWtlZCA9IHBvb2xBbGdvU3Rha2VkCglpbnQgMjY4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDggOAoJYnRvaQoJaW50IDEKCS0KCWludCAxOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgMTAgLy8gaGVhZE9mZnNldAoJKwoJZnJhbWVfZGlnIDIgLy8gcG9vbEFsZ29TdGFrZWQ6IHVpbnQ2NAoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0yIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCWV4dHJhY3QgMCA4CglidG9pCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gKmlmMzNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjgxCgkvLyBpc05ld1N0YWtlclRvVmFsaWRhdG9yCglmcmFtZV9kaWcgLTQgLy8gaXNOZXdTdGFrZXJUb1ZhbGlkYXRvcjogYm9vbGVhbgoJYnogKmlmMzNfZW5kCgoJLy8gKmlmMzNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI4MgoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLnRvdGFsU3Rha2VycyArPSAxCglpbnQgMjQ0CglkdXAKCWludCA4CglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWludCAxCgkrCglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCippZjMzX2VuZDoKCS8vICppZjM0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI4NAoJLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sCglmcmFtZV9kaWcgLTUgLy8gaXNOZXdTdGFrZXJUb1Byb3RvY29sOiBib29sZWFuCglieiAqaWYzNF9lbmQKCgkvLyAqaWYzNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjg1CgkvLyB0aGlzLm51bVN0YWtlcnMudmFsdWUgKz0gMQoJYnl0ZSAweDZlNzU2ZDUzNzQ2MTZiNjU3MjczIC8vICJudW1TdGFrZXJzIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCgkrCglieXRlIDB4NmU3NTZkNTM3NDYxNmI2NTcyNzMgLy8gIm51bVN0YWtlcnMiCglzd2FwCglhcHBfZ2xvYmFsX3B1dAoKKmlmMzRfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI4NwoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHBvb2xLZXkuaWQpLnZhbHVlLnN0YXRlLnRvdGFsQWxnb1N0YWtlZCArPSBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCAtIG1ickFtdFBhaWQKCWludCAyNTIKCWR1cAoJaW50IDgKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5CglleHRyYWN0IDAgOAoJYnRvaQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlZEFtb3VudFBheW1lbnQ6IFBheVR4bgoJZ3R4bnMgQW1vdW50CglmcmFtZV9kaWcgLTMgLy8gbWJyQW10UGFpZDogdWludDY0CgktCgkrCglpdG9iCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjg4CgkvLyB0aGlzLnRvdGFsQWxnb1N0YWtlZC52YWx1ZSArPSBzdGFrZWRBbW91bnRQYXltZW50LmFtb3VudCAtIG1ickFtdFBhaWQKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9kaWcgLTEgLy8gc3Rha2VkQW1vdW50UGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWZyYW1lX2RpZyAtMyAvLyBtYnJBbXRQYWlkOiB1aW50NjQKCS0KCSsKCWJ5dGUgMHg3Mzc0NjE2YjY1NjQgLy8gInN0YWtlZCIKCXN3YXAKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIHVwZGF0ZVN0YWtlclBvb2xTZXQoc3Rha2VyOiBBZGRyZXNzLCBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5KTogdm9pZAp1cGRhdGVTdGFrZXJQb29sU2V0OgoJcHJvdG8gMiAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyOTIKCS8vIGFzc2VydCh0aGlzLnN0YWtlclBvb2xTZXQoc3Rha2VyKS5leGlzdHMpCglieXRlIDB4NzM3MDczIC8vICJzcHMiCglmcmFtZV9kaWcgLTEgLy8gc3Rha2VyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI5NAoJLy8gcG9vbFNldCA9IGNsb25lKHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlKQoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLnN0YWtlclBvb2xTZXQoc3Rha2VyKS52YWx1ZQoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyOTUKCS8vIGZpcnN0RW1wdHkgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIGZpcnN0RW1wdHk6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyOTYKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikudmFsdWUubGVuZ3RoOyBpICs9IDEpCglpbnQgMAoJZnJhbWVfYnVyeSAyIC8vIGk6IHVpbnQ2NAoKKmZvcl83OgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI5NgoJLy8gaSA8IHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlLmxlbmd0aAoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgNgoJPAoJYnogKmZvcl83X2VuZAoKCS8vICppZjM1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTI5NwoJLy8gcG9vbFNldFtpXSA9PT0gcG9vbEtleQoJZnJhbWVfZGlnIDAgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDI0CglleHRyYWN0MwoJZnJhbWVfZGlnIC0yIC8vIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkKCT09CglieiAqaWYzNV9lbmQKCgkvLyAqaWYzNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMjk5CgkvLyByZXR1cm4KCXJldHN1YgoKKmlmMzVfZW5kOgoJLy8gKmlmMzZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzAxCgkvLyBmaXJzdEVtcHR5ID09PSAwICYmIHBvb2xTZXRbaV0uaWQgPT09IDAKCWZyYW1lX2RpZyAxIC8vIGZpcnN0RW1wdHk6IHVpbnQ2NAoJaW50IDAKCT09CglkdXAKCWJ6ICpza2lwX2FuZDgKCWZyYW1lX2RpZyAwIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDY0LHVpbnQ2NClbNl0KCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCAwCgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWludCAwCgk9PQoJJiYKCipza2lwX2FuZDg6CglieiAqaWYzNl9lbmQKCgkvLyAqaWYzNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzAyCgkvLyBmaXJzdEVtcHR5ID0gaSArIDEKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMSAvLyBmaXJzdEVtcHR5OiB1aW50NjQKCippZjM2X2VuZDoKCipmb3JfN19jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEyOTYKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAyIC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzcKCipmb3JfN19lbmQ6CgkvLyAqaWYzN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMDUKCS8vIGZpcnN0RW1wdHkgPT09IDAKCWZyYW1lX2RpZyAxIC8vIGZpcnN0RW1wdHk6IHVpbnQ2NAoJaW50IDAKCT09CglieiAqaWYzN19lbmQKCgkvLyAqaWYzN19jb25zZXF1ZW50CgkvLyBObyBlbXB0eSBzbG90IGF2YWlsYWJsZSBpbiB0aGUgc3Rha2VyIHBvb2wgc2V0CgllcnIKCippZjM3X2VuZDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMDgKCS8vIHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlW2ZpcnN0RW1wdHkgLSAxXSA9IHBvb2xLZXkKCWZyYW1lX2RpZyAxIC8vIGZpcnN0RW1wdHk6IHVpbnQ2NAoJaW50IDEKCS0KCWludCAyNAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoJcmV0c3ViCgovLyByZW1vdmVGcm9tU3Rha2VyUG9vbFNldChzdGFrZXI6IEFkZHJlc3MsIHBvb2xLZXk6IFZhbGlkYXRvclBvb2xLZXkpOiBbYm9vbGVhbiwgYm9vbGVhbl0KLy8KLy8gUmVtb3ZlcyBhIHBvb2wga2V5IGZyb20gdGhlIHN0YWtlcidzIGFjdGl2ZSBwb29sIHNldCAtIGZhaWxzIGlmIG5vdCBmb3VuZCAoISkKLy8KLy8gQHBhcmFtIHtBZGRyZXNzfSBzdGFrZXIgLSBUaGUgYWRkcmVzcyBvZiB0aGUgc3Rha2VyLgovLyBAcGFyYW0ge1ZhbGlkYXRvclBvb2xLZXl9IHBvb2xLZXkgLSBUaGUgcG9vbCBrZXkgdGhleSBzaG91bGQgYmUgc3RvcmVkIGluCi8vCi8vIEByZXR1cm4gW2Jvb2xlYW4sIGJvb2xlYW5dIFtpcyB0aGUgc3Rha2VyIGdvbmUgZnJvbSBBTEwgcG9vbHMgb2YgdGhlIGdpdmVuIFZBTElEQVRPUiwgYW5kIGlzIHN0YWtlciBnb25lIGZyb20gQUxMIHBvb2xzXQpyZW1vdmVGcm9tU3Rha2VyUG9vbFNldDoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzIxCgkvLyBpblNhbWVWYWxpZGF0b3JQb29sQ291bnQgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAwIC8vIGluU2FtZVZhbGlkYXRvclBvb2xDb3VudDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTMyMgoJLy8gaW5BbnlQb29sQ291bnQgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIGluQW55UG9vbENvdW50OiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzIzCgkvLyBmb3VuZCA9IGZhbHNlCglpbnQgMAoJZnJhbWVfYnVyeSAyIC8vIGZvdW5kOiBib29sCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTMyNQoJLy8gcG9vbFNldCA9IGNsb25lKHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlKQoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cglib3hfZ2V0CgoJLy8gYm94IHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLnN0YWtlclBvb2xTZXQoc3Rha2VyKS52YWx1ZQoJYXNzZXJ0CglmcmFtZV9idXJ5IDMgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMjYKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGFrZXJQb29sU2V0KHN0YWtlcikudmFsdWUubGVuZ3RoOyBpICs9IDEpCglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIGk6IHVpbnQ2NAoKKmZvcl84OgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTMyNgoJLy8gaSA8IHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlLmxlbmd0aAoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgNgoJPAoJYnogKmZvcl84X2VuZAoKCS8vICppZjM4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTMyNwoJLy8gcG9vbFNldFtpXS5pZCA9PT0gMAoJZnJhbWVfZGlnIDMgLy8gcG9vbFNldDogKHVpbnQ2NCx1aW50NjQsdWludDY0KVs2XQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJaW50IDAKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaW50IDAKCT09CglieiAqaWYzOF9lbmQKCgkvLyAqaWYzOF9jb25zZXF1ZW50CgliICpmb3JfOF9jb250aW51ZQoKKmlmMzhfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTMzMAoJLy8gaW5BbnlQb29sQ291bnQgKz0gMQoJZnJhbWVfZGlnIDEgLy8gaW5BbnlQb29sQ291bnQ6IHVpbnQ2NAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgMSAvLyBpbkFueVBvb2xDb3VudDogdWludDY0CgoJLy8gKmlmMzlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzMxCgkvLyBwb29sU2V0W2ldLmlkID09PSBwb29sS2V5LmlkCglmcmFtZV9kaWcgMyAvLyBwb29sU2V0OiAodWludDY0LHVpbnQ2NCx1aW50NjQpWzZdCglmcmFtZV9kaWcgNCAvLyBpOiB1aW50NjQKCWludCAyNAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCglpbnQgMAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglmcmFtZV9kaWcgLTIgLy8gcG9vbEtleTogVmFsaWRhdG9yUG9vbEtleQoJZXh0cmFjdCAwIDgKCWJ0b2kKCT09CglieiAqaWYzOV9lbmQKCgkvLyAqaWYzOV9jb25zZXF1ZW50CgkvLyAqaWY0MF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMzIKCS8vIHBvb2xTZXRbaV0gPT09IHBvb2xLZXkKCWZyYW1lX2RpZyAzIC8vIHBvb2xTZXQ6ICh1aW50NjQsdWludDY0LHVpbnQ2NClbNl0KCWZyYW1lX2RpZyA0IC8vIGk6IHVpbnQ2NAoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCWludCAyNAoJZXh0cmFjdDMKCWZyYW1lX2RpZyAtMiAvLyBwb29sS2V5OiBWYWxpZGF0b3JQb29sS2V5Cgk9PQoJYnogKmlmNDBfZWxzZQoKCS8vICppZjQwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMzMKCS8vIGZvdW5kID0gdHJ1ZQoJaW50IDEKCWZyYW1lX2J1cnkgMiAvLyBmb3VuZDogYm9vbAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMzUKCS8vIHRoaXMuc3Rha2VyUG9vbFNldChzdGFrZXIpLnZhbHVlW2ldID0geyBpZDogMCwgcG9vbElkOiAwLCBwb29sQXBwSWQ6IDAgfQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMjQKCSogLy8gYWNjICogdHlwZUxlbmd0aAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDczNzA3MyAvLyAic3BzIgoJZnJhbWVfZGlnIC0xIC8vIHN0YWtlcjogQWRkcmVzcwoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoJYiAqaWY0MF9lbmQKCippZjQwX2Vsc2U6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzM3CgkvLyBpblNhbWVWYWxpZGF0b3JQb29sQ291bnQgKz0gMQoJZnJhbWVfZGlnIDAgLy8gaW5TYW1lVmFsaWRhdG9yUG9vbENvdW50OiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDAgLy8gaW5TYW1lVmFsaWRhdG9yUG9vbENvdW50OiB1aW50NjQKCippZjQwX2VuZDoKCippZjM5X2VuZDoKCipmb3JfOF9jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzMjYKCS8vIGkgKz0gMQoJZnJhbWVfZGlnIDQgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSA0IC8vIGk6IHVpbnQ2NAoJYiAqZm9yXzgKCipmb3JfOF9lbmQ6CgkvLyAqaWY0MV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzNDEKCS8vICFmb3VuZAoJZnJhbWVfZGlnIDIgLy8gZm91bmQ6IGJvb2wKCSEKCWJ6ICppZjQxX2VuZAoKCS8vICppZjQxX2NvbnNlcXVlbnQKCS8vIE5vIG1hdGNoaW5nIHNsb3QgZm91bmQgd2hlbiB0b2xkIHRvIHJlbW92ZSBhIHBvb2wgZnJvbSB0aGUgc3Rha2VycyBzZXQKCWVycgoKKmlmNDFfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM0NQoJLy8gcmV0dXJuIFtpblNhbWVWYWxpZGF0b3JQb29sQ291bnQgPT09IDAsIGluQW55UG9vbENvdW50ID09PSAwXQoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gaW5TYW1lVmFsaWRhdG9yUG9vbENvdW50OiB1aW50NjQKCWludCAwCgk9PQoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gaW5BbnlQb29sQ291bnQ6IHVpbnQ2NAoJaW50IDAKCT09CglzZXRiaXQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA0CglyZXRzdWIKCi8vIGFkZFBvb2xUb05vZGUodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgcG9vbEFwcElkOiB1aW50NjQsIG5vZGVOdW06IHVpbnQ2NCk6IHZvaWQKYWRkUG9vbFRvTm9kZToKCXByb3RvIDMgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzQ5CgkvLyBub2RlUG9vbEFzc2lnbm1lbnRzID0gY2xvbmUodGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5ub2RlUG9vbEFzc2lnbm1lbnRzKQoJaW50IDkwMCAvLyBoZWFkT2Zmc2V0CglpbnQgMTkyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJZnJhbWVfYnVyeSAwIC8vIG5vZGVQb29sQXNzaWdubWVudHM6ICgodWludDY0WzNdKVs4XSkKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzUwCgkvLyBtYXhQb29sc1Blck5vZGVGb3JUaGlzVmFsaWRhdG9yID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcucG9vbHNQZXJOb2RlIGFzIHVpbnQ2NAoJaW50IDIyNQoJaW50IDEKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDEgLy8gbWF4UG9vbHNQZXJOb2RlRm9yVGhpc1ZhbGlkYXRvcjogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM1MgoJLy8gYXNzZXJ0KG5vZGVOdW0gPj0gMSAmJiBub2RlTnVtIDw9IE1BWF9OT0RFUywgJ25vZGUgbnVtYmVyIG5vdCBpbiB2YWxpZCByYW5nZScpCglmcmFtZV9kaWcgLTMgLy8gbm9kZU51bTogdWludDY0CglpbnQgMQoJPj0KCWR1cAoJYnogKnNraXBfYW5kOQoJZnJhbWVfZGlnIC0zIC8vIG5vZGVOdW06IHVpbnQ2NAoJaW50IDgKCTw9CgkmJgoKKnNraXBfYW5kOToKCS8vIG5vZGUgbnVtYmVyIG5vdCBpbiB2YWxpZCByYW5nZQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM1NAoJLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhQb29sc1Blck5vZGVGb3JUaGlzVmFsaWRhdG9yOyBpICs9IDEpCglpbnQgMAoJZnJhbWVfYnVyeSAyIC8vIGk6IHVpbnQ2NAoKKmZvcl85OgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM1NAoJLy8gaSA8IG1heFBvb2xzUGVyTm9kZUZvclRoaXNWYWxpZGF0b3IKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJZnJhbWVfZGlnIDEgLy8gbWF4UG9vbHNQZXJOb2RlRm9yVGhpc1ZhbGlkYXRvcjogdWludDY0Cgk8CglieiAqZm9yXzlfZW5kCgoJLy8gKmlmNDJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzU1CgkvLyBub2RlUG9vbEFzc2lnbm1lbnRzLm5vZGVzW25vZGVOdW0gLSAxXS5wb29sQXBwSWRzW2ldID09PSAwCglmcmFtZV9kaWcgMCAvLyBub2RlUG9vbEFzc2lnbm1lbnRzOiAoKHVpbnQ2NFszXSlbOF0pCglpbnQgMAoJZnJhbWVfZGlnIC0zIC8vIG5vZGVOdW06IHVpbnQ2NAoJaW50IDEKCS0KCWludCAyNAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgMAoJKwoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnQgOAoJKiAvLyBhY2MgKiB0eXBlTGVuZ3RoCgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWludCAwCgk9PQoJYnogKmlmNDJfZW5kCgoJLy8gKmlmNDJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM1NwoJLy8gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5ub2RlUG9vbEFzc2lnbm1lbnRzLm5vZGVzW25vZGVOdW0gLSAxXS5wb29sQXBwSWRzW2ldID0gcG9vbEFwcElkCglpbnQgOTAwCglmcmFtZV9kaWcgLTMgLy8gbm9kZU51bTogdWludDY0CglpbnQgMQoJLQoJaW50IDI0CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWludCAwCgkrCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCA4CgkqIC8vIGFjYyAqIHR5cGVMZW5ndGgKCSsKCWZyYW1lX2RpZyAtMiAvLyBwb29sQXBwSWQ6IHVpbnQ2NAoJaXRvYgoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzU4CgkvLyByZXR1cm4KCXJldHN1YgoKKmlmNDJfZW5kOgoKKmZvcl85X2NvbnRpbnVlOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM1NAoJLy8gaSArPSAxCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWludCAxCgkrCglmcmFtZV9idXJ5IDIgLy8gaTogdWludDY0CgliICpmb3JfOQoKKmZvcl85X2VuZDoKCS8vIG5vIGF2YWlsYWJsZSBzcGFjZSBpbiBzcGVjaWZpZWQgbm9kZSBmb3IgdGhpcyBwb29sCgllcnIKCXJldHN1YgoKLy8gZG9lc1N0YWtlck1lZXRHYXRpbmcodmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZSwgdmFsdWVUb1ZlcmlmeTogdWludDY0KTogdm9pZAovLwovLyBDaGVja3MgaWYgYSBzdGFrZXIgbWVldHMgdGhlIGdhdGluZyByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoZSB2YWxpZGF0b3IuCi8vCi8vIEBwYXJhbSB7VmFsaWRhdG9ySWRUeXBlfSB2YWxpZGF0b3JJZCAtIFRoZSBpZCBvZiB0aGUgdmFsaWRhdG9yLgovLyBAcGFyYW0ge3VpbnQ2NH0gdmFsdWVUb1ZlcmlmeSAtIFRoZSB2YWx1ZSB0byB2ZXJpZnkgYWdhaW5zdCB0aGUgZ2F0aW5nIHJlcXVpcmVtZW50cy4KLy8gQHJldHVybnMge3ZvaWR9IG9yIGFzc2VydHMgaWYgcmVxdWlyZW1lbnRzIG5vdCBtZXQuCmRvZXNTdGFrZXJNZWV0R2F0aW5nOgoJcHJvdG8gMiAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzNzIKCS8vIHR5cGUgPSB0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZy5lbnRyeUdhdGluZ1R5cGUKCWludCA4MAoJaW50IDEKCWJ5dGUgMHg3NiAvLyAidiIKCWZyYW1lX2RpZyAtMSAvLyB2YWxpZGF0b3JJZDogVmFsaWRhdG9ySWRUeXBlCglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDAgLy8gdHlwZTogdWludDgKCgkvLyAqaWY0M19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzNzMKCS8vIHR5cGUgPT09IEdBVElOR19UWVBFX05PTkUKCWZyYW1lX2RpZyAwIC8vIHR5cGU6IHVpbnQ4CglpbnQgMAoJPT0KCWJ6ICppZjQzX2VuZAoKCS8vICppZjQzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzNzQKCS8vIHJldHVybgoJcmV0c3ViCgoqaWY0M19lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzc2CgkvLyBzdGFrZXIgPSB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWZyYW1lX2J1cnkgMSAvLyBzdGFrZXI6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzc3CgkvLyBjb25maWcgPSBjbG9uZSh0aGlzLnZhbGlkYXRvckxpc3QodmFsaWRhdG9ySWQpLnZhbHVlLmNvbmZpZykKCWludCAwCglpbnQgMjQyCglieXRlIDB4NzYgLy8gInYiCglmcmFtZV9kaWcgLTEgLy8gdmFsaWRhdG9ySWQ6IFZhbGlkYXRvcklkVHlwZQoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJZnJhbWVfYnVyeSAyIC8vIGNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCgoJLy8gKmlmNDRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzgxCgkvLyB0eXBlID09PSBHQVRJTkdfVFlQRV9BU1NFVFNfQ1JFQVRFRF9CWSB8fAoJLy8gICAgICAgICAgICAgdHlwZSA9PT0gR0FUSU5HX1RZUEVfQVNTRVRfSUQgfHwKCS8vICAgICAgICAgICAgIHR5cGUgPT09IEdBVElOR19UWVBFX0NSRUFURURfQllfTkZEX0FERFJFU1NFUwoJZnJhbWVfZGlnIDAgLy8gdHlwZTogdWludDgKCWludCAxCgk9PQoJZHVwCglibnogKnNraXBfb3I0CglmcmFtZV9kaWcgMCAvLyB0eXBlOiB1aW50OAoJaW50IDIKCT09Cgl8fAoKKnNraXBfb3I0OgoJZHVwCglibnogKnNraXBfb3I1CglmcmFtZV9kaWcgMCAvLyB0eXBlOiB1aW50OAoJaW50IDMKCT09Cgl8fAoKKnNraXBfb3I1OgoJYnogKmlmNDRfZW5kCgoJLy8gKmlmNDRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM4NQoJLy8gYXNzZXJ0KHZhbHVlVG9WZXJpZnkgIT09IDApCglmcmFtZV9kaWcgLTIgLy8gdmFsdWVUb1ZlcmlmeTogdWludDY0CglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzODYKCS8vIGJhbFJlcXVpcmVkID0gdGhpcy52YWxpZGF0b3JMaXN0KHZhbGlkYXRvcklkKS52YWx1ZS5jb25maWcuZ2F0aW5nQXNzZXRNaW5CYWxhbmNlCglpbnQgMTQ1CglpbnQgOAoJYnl0ZSAweDc2IC8vICJ2IgoJZnJhbWVfZGlnIC0xIC8vIHZhbGlkYXRvcklkOiBWYWxpZGF0b3JJZFR5cGUKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMyAvLyBiYWxSZXF1aXJlZDogdWludDY0CgoJLy8gKmlmNDVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzg3CgkvLyBiYWxSZXF1aXJlZCA9PT0gMAoJZnJhbWVfZGlnIDMgLy8gYmFsUmVxdWlyZWQ6IHVpbnQ2NAoJaW50IDAKCT09CglieiAqaWY0NV9lbmQKCgkvLyAqaWY0NV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzg4CgkvLyBiYWxSZXF1aXJlZCA9IDEKCWludCAxCglmcmFtZV9idXJ5IDMgLy8gYmFsUmVxdWlyZWQ6IHVpbnQ2NAoKKmlmNDVfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTM5MAoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgICAgIHN0YWtlci5hc3NldEJhbGFuY2UoQXNzZXRJRC5mcm9tVWludDY0KHZhbHVlVG9WZXJpZnkpKSA+PSBiYWxSZXF1aXJlZCwKCS8vICAgICAgICAgICAgICAgICAnbXVzdCBoYXZlIHJlcXVpcmVkIG1pbmltdW0gYmFsYW5jZSBvZiB2YWxpZGF0b3IgZGVmaW5lZCB0b2tlbiB0byBhZGQgc3Rha2UnLAoJLy8gICAgICAgICAgICAgKQoJZnJhbWVfZGlnIDEgLy8gc3Rha2VyOiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gdmFsdWVUb1ZlcmlmeTogdWludDY0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYmFsUmVxdWlyZWQ6IHVpbnQ2NAoJPj0KCgkvLyBtdXN0IGhhdmUgcmVxdWlyZWQgbWluaW11bSBiYWxhbmNlIG9mIHZhbGlkYXRvciBkZWZpbmVkIHRva2VuIHRvIGFkZCBzdGFrZQoJYXNzZXJ0CgoqaWY0NF9lbmQ6CgkvLyAqaWY0Nl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjEzOTUKCS8vIHR5cGUgPT09IEdBVElOR19UWVBFX0FTU0VUU19DUkVBVEVEX0JZCglmcmFtZV9kaWcgMCAvLyB0eXBlOiB1aW50OAoJaW50IDEKCT09CglieiAqaWY0Nl9lbmQKCgkvLyAqaWY0Nl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxMzk2CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICAgICAgQXNzZXRJRC5mcm9tVWludDY0KHZhbHVlVG9WZXJpZnkpLmNyZWF0b3IgPT09IGNvbmZpZy5lbnRyeUdhdGluZ0FkZHJlc3MsCgkvLyAgICAgICAgICAgICAgICAgJ3NwZWNpZmllZCBhc3NldCBtdXN0IGJlIGNyZWF0ZWQgYnkgY3JlYXRvciB0aGF0IHRoZSB2YWxpZGF0b3IgZGVmaW5lZCBhcyBhIHJlcXVpcmVtZW50IHRvIHN0YWtlJywKCS8vICAgICAgICAgICAgICkKCWZyYW1lX2RpZyAtMiAvLyB2YWx1ZVRvVmVyaWZ5OiB1aW50NjQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWZyYW1lX2RpZyAyIC8vIGNvbmZpZzogKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ4LGFkZHJlc3MsdWludDY0WzRdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQpCglleHRyYWN0IDgxIDMyCgk9PQoKCS8vIHNwZWNpZmllZCBhc3NldCBtdXN0IGJlIGNyZWF0ZWQgYnkgY3JlYXRvciB0aGF0IHRoZSB2YWxpZGF0b3IgZGVmaW5lZCBhcyBhIHJlcXVpcmVtZW50IHRvIHN0YWtlCglhc3NlcnQKCippZjQ2X2VuZDoKCS8vICppZjQ3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQwMQoJLy8gdHlwZSA9PT0gR0FUSU5HX1RZUEVfQVNTRVRfSUQKCWZyYW1lX2RpZyAwIC8vIHR5cGU6IHVpbnQ4CglpbnQgMgoJPT0KCWJ6ICppZjQ3X2VuZAoKCS8vICppZjQ3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0MDIKCS8vIGFzc2VydCh2YWx1ZVRvVmVyaWZ5ICE9PSAwKQoJZnJhbWVfZGlnIC0yIC8vIHZhbHVlVG9WZXJpZnk6IHVpbnQ2NAoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDAzCgkvLyBmb3VuZCA9IGZhbHNlCglpbnQgMAoJZnJhbWVfYnVyeSA0IC8vIGZvdW5kOiBib29sCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQwNAoJLy8gY29uZmlnLmVudHJ5R2F0aW5nQXNzZXRzCglmcmFtZV9kaWcgMiAvLyBjb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxMTMgMzIKCWR1cAoJZnJhbWVfYnVyeSA1IC8vIGNvcHkgb2YgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZXh0cmFjdCAwIDgKCWJ0b2kKCWZyYW1lX2J1cnkgNiAvLyBhc3NldElkOiB1aW50NjQKCWludCAwCglmcmFtZV9idXJ5IDcgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCipmb3JPZl8wOgoJLy8gKmlmNDhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDA1CgkvLyB2YWx1ZVRvVmVyaWZ5ID09PSBhc3NldElkCglmcmFtZV9kaWcgLTIgLy8gdmFsdWVUb1ZlcmlmeTogdWludDY0CglmcmFtZV9kaWcgNiAvLyBhc3NldElkOiB1aW50NjQKCT09CglieiAqaWY0OF9lbmQKCgkvLyAqaWY0OF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDA2CgkvLyBmb3VuZCA9IHRydWUKCWludCAxCglmcmFtZV9idXJ5IDQgLy8gZm91bmQ6IGJvb2wKCWIgKmZvck9mXzBfZW5kCgoqaWY0OF9lbmQ6CgoqZm9yT2ZfMF9jb250aW51ZToKCS8vIGluY3JlbWVudCBvZmZzZXQgYW5kIGxvb3AgaWYgbm90IG91dCBvZiBib3VuZHMKCWZyYW1lX2RpZyA3IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnQgOAoJKwoJZHVwCglpbnQgMzIgLy8gb2Zmc2V0IG9mIGxhc3QgZWxlbWVudAoJPAoJYnogKmZvck9mXzBfZW5kCglmcmFtZV9idXJ5IDcgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWZyYW1lX2RpZyA1IC8vIGNvcHkgb2YgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZnJhbWVfZGlnIDcgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludCA4CglleHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDYgLy8gYXNzZXRJZDogdWludDY0CgliICpmb3JPZl8wCgoqZm9yT2ZfMF9lbmQ6CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDEwCgkvLyBhc3NlcnQoZm91bmQsICdzcGVjaWZpZWQgYXNzZXQgbXVzdCBiZSBpZGVudGljYWwgdG8gdGhlIGFzc2V0IGlkIGRlZmluZWQgYXMgYSByZXF1aXJlbWVudCB0byBzdGFrZScpCglmcmFtZV9kaWcgNCAvLyBmb3VuZDogYm9vbAoKCS8vIHNwZWNpZmllZCBhc3NldCBtdXN0IGJlIGlkZW50aWNhbCB0byB0aGUgYXNzZXQgaWQgZGVmaW5lZCBhcyBhIHJlcXVpcmVtZW50IHRvIHN0YWtlCglhc3NlcnQKCippZjQ3X2VuZDoKCS8vICppZjQ5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQxMgoJLy8gdHlwZSA9PT0gR0FUSU5HX1RZUEVfQ1JFQVRFRF9CWV9ORkRfQUREUkVTU0VTCglmcmFtZV9kaWcgMCAvLyB0eXBlOiB1aW50OAoJaW50IDMKCT09CglieiAqaWY0OV9lbmQKCgkvLyAqaWY0OV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDE1CgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICAgICAgdGhpcy5pc0FkZHJlc3NJbk5GRENBQWxnb0xpc3QoY29uZmlnLmVudHJ5R2F0aW5nQXNzZXRzWzBdLCBBc3NldElELmZyb21VaW50NjQodmFsdWVUb1ZlcmlmeSkuY3JlYXRvciksCgkvLyAgICAgICAgICAgICAgICAgJ3NwZWNpZmllZCBhc3NldCBtdXN0IGJlIGNyZWF0ZWQgYnkgY3JlYXRvciB0aGF0IGlzIG9uZSBvZiB0aGUgbGlua2VkIGFkZHJlc3NlcyBpbiBhbiBuZmQnLAoJLy8gICAgICAgICAgICAgKQoJZnJhbWVfZGlnIC0yIC8vIHZhbHVlVG9WZXJpZnk6IHVpbnQ2NAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJZnJhbWVfZGlnIDIgLy8gY29uZmlnOiAodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkKCWV4dHJhY3QgMTEzIDgKCWJ0b2kKCWNhbGxzdWIgaXNBZGRyZXNzSW5ORkRDQUFsZ29MaXN0CgoJLy8gc3BlY2lmaWVkIGFzc2V0IG11c3QgYmUgY3JlYXRlZCBieSBjcmVhdG9yIHRoYXQgaXMgb25lIG9mIHRoZSBsaW5rZWQgYWRkcmVzc2VzIGluIGFuIG5mZAoJYXNzZXJ0CgoqaWY0OV9lbmQ6CgkvLyAqaWY1MF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0MjAKCS8vIHR5cGUgPT09IEdBVElOR19UWVBFX1NFR01FTlRfT0ZfTkZECglmcmFtZV9kaWcgMCAvLyB0eXBlOiB1aW50OAoJaW50IDQKCT09CglieiAqaWY1MF9lbmQKCgkvLyAqaWY1MF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDIyCgkvLyB1c2VyT2ZmZXJlZE5GREFwcElEID0gdmFsdWVUb1ZlcmlmeQoJZnJhbWVfZGlnIC0yIC8vIHZhbHVlVG9WZXJpZnk6IHVpbnQ2NAoJZnJhbWVfYnVyeSA4IC8vIHVzZXJPZmZlcmVkTkZEQXBwSUQ6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0MjMKCS8vIGFzc2VydCh0aGlzLmlzTkZEQXBwSURWYWxpZCh1c2VyT2ZmZXJlZE5GREFwcElEKSwgJ3Byb3ZpZGVkIE5GRCBtdXN0IGJlIHZhbGlkJykKCWZyYW1lX2RpZyA4IC8vIHVzZXJPZmZlcmVkTkZEQXBwSUQ6IHVpbnQ2NAoJY2FsbHN1YiBpc05GREFwcElEVmFsaWQKCgkvLyBwcm92aWRlZCBORkQgbXVzdCBiZSB2YWxpZAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQyNgoJLy8gYXNzZXJ0KAoJLy8gICAgICAgICAgICAgICAgIHJhd0J5dGVzKEFwcElELmZyb21VaW50NjQodXNlck9mZmVyZWRORkRBcHBJRCkuZ2xvYmFsU3RhdGUoJ2kub3duZXIuYScpIGFzIEFkZHJlc3MpID09PQoJLy8gICAgICAgICAgICAgICAgICAgICByYXdCeXRlcyhzdGFrZXIpIHx8IHRoaXMuaXNBZGRyZXNzSW5ORkRDQUFsZ29MaXN0KHVzZXJPZmZlcmVkTkZEQXBwSUQsIHN0YWtlciksCgkvLyAgICAgICAgICAgICAgICAgInByb3ZpZGVkIG5mZCBmb3IgZW50cnkgaXNuJ3Qgb3duZWQgb3IgbGlua2VkIHRvIHRoZSBzdGFrZXIiLAoJLy8gICAgICAgICAgICAgKQoJZnJhbWVfZGlnIDggLy8gdXNlck9mZmVyZWRORkRBcHBJRDogdWludDY0CglieXRlIDB4NjkyZTZmNzc2ZTY1NzIyZTYxIC8vICJpLm93bmVyLmEiCglhcHBfZ2xvYmFsX2dldF9leAoKCS8vIGdsb2JhbCBzdGF0ZSB2YWx1ZSBkb2VzIG5vdCBleGlzdDogQXBwSUQuZnJvbVVpbnQ2NCh1c2VyT2ZmZXJlZE5GREFwcElEKS5nbG9iYWxTdGF0ZSgnaS5vd25lci5hJykKCWFzc2VydAoJZnJhbWVfZGlnIDEgLy8gc3Rha2VyOiBhZGRyZXNzCgk9PQoJZHVwCglibnogKnNraXBfb3I2CglmcmFtZV9kaWcgMSAvLyBzdGFrZXI6IGFkZHJlc3MKCWZyYW1lX2RpZyA4IC8vIHVzZXJPZmZlcmVkTkZEQXBwSUQ6IHVpbnQ2NAoJY2FsbHN1YiBpc0FkZHJlc3NJbk5GRENBQWxnb0xpc3QKCXx8Cgoqc2tpcF9vcjY6CgkvLyBwcm92aWRlZCBuZmQgZm9yIGVudHJ5IGlzbid0IG93bmVkIG9yIGxpbmtlZCB0byB0aGUgc3Rha2VyCglhc3NlcnQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDMzCgkvLyBhc3NlcnQoCgkvLyAgICAgICAgICAgICAgICAgYnRvaShBcHBJRC5mcm9tVWludDY0KHVzZXJPZmZlcmVkTkZEQXBwSUQpLmdsb2JhbFN0YXRlKCdpLnBhcmVudEFwcElEJykgYXMgYnl0ZXMpID09PQoJLy8gICAgICAgICAgICAgICAgICAgICBjb25maWcuZW50cnlHYXRpbmdBc3NldHNbMF0sCgkvLyAgICAgICAgICAgICAgICAgJ3NwZWNpZmllZCBuZmQgbXVzdCBiZSBhIHNlZ21lbnQgb2YgdGhlIG5mZCB0aGUgdmFsaWRhdG9yIHNwZWNpZmllZCBhcyBhIHJlcXVpcmVtZW50JywKCS8vICAgICAgICAgICAgICkKCWZyYW1lX2RpZyA4IC8vIHVzZXJPZmZlcmVkTkZEQXBwSUQ6IHVpbnQ2NAoJYnl0ZSAweDY5MmU3MDYxNzI2NTZlNzQ0MTcwNzA0OTQ0IC8vICJpLnBhcmVudEFwcElEIgoJYXBwX2dsb2JhbF9nZXRfZXgKCgkvLyBnbG9iYWwgc3RhdGUgdmFsdWUgZG9lcyBub3QgZXhpc3Q6IEFwcElELmZyb21VaW50NjQodXNlck9mZmVyZWRORkRBcHBJRCkuZ2xvYmFsU3RhdGUoJ2kucGFyZW50QXBwSUQnKQoJYXNzZXJ0CglidG9pCglmcmFtZV9kaWcgMiAvLyBjb25maWc6ICh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KQoJZXh0cmFjdCAxMTMgOAoJYnRvaQoJPT0KCgkvLyBzcGVjaWZpZWQgbmZkIG11c3QgYmUgYSBzZWdtZW50IG9mIHRoZSBuZmQgdGhlIHZhbGlkYXRvciBzcGVjaWZpZWQgYXMgYSByZXF1aXJlbWVudAoJYXNzZXJ0CgoqaWY1MF9lbmQ6CglyZXRzdWIKCi8vIGlzTkZEQXBwSURWYWxpZChuZmRBcHBJRDogdWludDY0KTogYm9vbGVhbgovLwovLyBDaGVja3MgaWYgdGhlIGdpdmVuIE5GRCBBcHAgaWQgaXMgdmFsaWQuICBVc2luZyBvbmx5IHRoZSBBcHAgaWQgdGhlcmUncyBubyB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIG5hbWUgKGllOiB0aGF0IG5mZCBYIGlzIG5hbWUgWSkKLy8gU28gaXQncyBhc3N1bWVkIGZvciB0aGUgY2FsbGVyLCB0aGUgYXBwIGlkIGFsb25lIGlzIGZpbmUuICBUaGUgbmFtZSBpcyBmZXRjaGVkIGZyb20gdGhlIHNwZWNpZmllZCBhcHAgaWQgYW5kIHRoZSB0d28KLy8gdG9nZXRoZXIgYXJlIHVzZWQgZm9yIHZhbGlkaXR5IGNoZWNrIGNhbGwgdG8gdGhlIG5mZCByZWdpc3RyeS4KLy8KLy8gQHBhcmFtIHt1aW50NjR9IG5mZEFwcElEIC0gVGhlIE5GRCBBcHAgaWQgdG8gdmVyaWZ5LgovLwovLyBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIE5GRCBBcHAgaWQgaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZS4KaXNORkRBcHBJRFZhbGlkOgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDUyCgkvLyB1c2VyT2ZmZXJlZE5GRE5hbWUgPSBBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKS5nbG9iYWxTdGF0ZSgnaS5uYW1lJykgYXMgc3RyaW5nCglmcmFtZV9kaWcgLTEgLy8gbmZkQXBwSUQ6IHVpbnQ2NAoJYnl0ZSAweDY5MmU2ZTYxNmQ2NSAvLyAiaS5uYW1lIgoJYXBwX2dsb2JhbF9nZXRfZXgKCgkvLyBnbG9iYWwgc3RhdGUgdmFsdWUgZG9lcyBub3QgZXhpc3Q6IEFwcElELmZyb21VaW50NjQobmZkQXBwSUQpLmdsb2JhbFN0YXRlKCdpLm5hbWUnKQoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gdXNlck9mZmVyZWRORkROYW1lOiBzdHJpbmcKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDU0CgkvLyBzZW5kQXBwQ2FsbCh7CgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KHRoaXMubmZkUmVnaXN0cnlBcHBJZCksCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbkFyZ3M6IFsnaXNfdmFsaWRfbmZkX2FwcGlkJywgdXNlck9mZmVyZWRORkROYW1lLCBpdG9iKG5mZEFwcElEKV0sCgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbnM6IFtBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKV0sCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NTUKCS8vIGFwcGxpY2F0aW9uSUQ6IEFwcElELmZyb21VaW50NjQodGhpcy5uZmRSZWdpc3RyeUFwcElkKQoJcHVzaGludCBUTVBMX25mZFJlZ2lzdHJ5QXBwSWQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NTYKCS8vIGFwcGxpY2F0aW9uQXJnczogWydpc192YWxpZF9uZmRfYXBwaWQnLCB1c2VyT2ZmZXJlZE5GRE5hbWUsIGl0b2IobmZkQXBwSUQpXQoJYnl0ZSAweDY5NzM1Zjc2NjE2YzY5NjQ1ZjZlNjY2NDVmNjE3MDcwNjk2NCAvLyAiaXNfdmFsaWRfbmZkX2FwcGlkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWZyYW1lX2RpZyAwIC8vIHVzZXJPZmZlcmVkTkZETmFtZTogc3RyaW5nCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIC0xIC8vIG5mZEFwcElEOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ1NwoJLy8gYXBwbGljYXRpb25zOiBbQXBwSUQuZnJvbVVpbnQ2NChuZmRBcHBJRCldCglmcmFtZV9kaWcgLTEgLy8gbmZkQXBwSUQ6IHVpbnQ2NAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ1OQoJLy8gcmV0dXJuIGJ0b2kodGhpcy5pdHhuLmxhc3RMb2cpID09PSAxCglpdHhuIExhc3RMb2cKCWJ0b2kKCWludCAxCgk9PQoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBpc0FkZHJlc3NJbk5GRENBQWxnb0xpc3QobmZkQXBwSUQ6IHVpbnQ2NCwgYWRkclRvRmluZDogQWRkcmVzcyk6IGJvb2xlYW4KLy8KLy8gQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBpcyBwcmVzZW50IGluIGFuIE5GRHMgbGlzdCBvZiB2ZXJpZmllZCBhZGRyZXNzZXMuCi8vIFRoZSBORkQgaXMgYXNzdW1lZCB0byBoYXZlIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXMgb2ZmaWNpYWwuCi8vCi8vIEBwYXJhbSB7dWludDY0fSBuZmRBcHBJRCAtIFRoZSBORkQgYXBwbGljYXRpb24gaWQuCi8vIEBwYXJhbSB7QWRkcmVzc30gYWRkclRvRmluZCAtIFRoZSBhZGRyZXNzIHRvIGZpbmQgaW4gdGhlIHYuY2FBbGdvLjAuYXMgcHJvcGVydHkKLy8gQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgdGhlIGFkZHJlc3MgaXMgcHJlc2VudCwgYGZhbHNlYCBvdGhlcndpc2UuCmlzQWRkcmVzc0luTkZEQ0FBbGdvTGlzdDoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDcxCgkvLyBzZW5kQXBwQ2FsbCh7CgkvLyAgICAgICAgICAgICBhcHBsaWNhdGlvbklEOiBBcHBJRC5mcm9tVWludDY0KG5mZEFwcElEKSwKCS8vICAgICAgICAgICAgIGFwcGxpY2F0aW9uQXJnczogWydyZWFkX3Byb3BlcnR5JywgJ3YuY2FBbGdvLjAuYXMnXSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ3MgoJLy8gYXBwbGljYXRpb25JRDogQXBwSUQuZnJvbVVpbnQ2NChuZmRBcHBJRCkKCWZyYW1lX2RpZyAtMSAvLyBuZmRBcHBJRDogdWludDY0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDczCgkvLyBhcHBsaWNhdGlvbkFyZ3M6IFsncmVhZF9wcm9wZXJ0eScsICd2LmNhQWxnby4wLmFzJ10KCWJ5dGUgMHg3MjY1NjE2NDVmNzA3MjZmNzA2NTcyNzQ3OSAvLyAicmVhZF9wcm9wZXJ0eSIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglieXRlIDB4NzYyZTYzNjE0MTZjNjc2ZjJlMzAyZTYxNzMgLy8gInYuY2FBbGdvLjAuYXMiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDc1CgkvLyBjYUFsZ29EYXRhID0gdGhpcy5pdHhuLmxhc3RMb2cKCWl0eG4gTGFzdExvZwoJZnJhbWVfYnVyeSAwIC8vIGNhQWxnb0RhdGE6IGJ5dGVbXQoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NzYKCS8vIGZvciAobGV0IGkgPSAwOyBpIDwgY2FBbGdvRGF0YS5sZW5ndGg7IGkgKz0gMzIpCglpbnQgMAoJZnJhbWVfYnVyeSAxIC8vIGk6IHVpbnQ2NAoKKmZvcl8xMDoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NzYKCS8vIGkgPCBjYUFsZ29EYXRhLmxlbmd0aAoJZnJhbWVfZGlnIDEgLy8gaTogdWludDY0CglmcmFtZV9kaWcgMCAvLyBjYUFsZ29EYXRhOiBieXRlW10KCWxlbgoJPAoJYnogKmZvcl8xMF9lbmQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDc3CgkvLyBhZGRyID0gZXh0cmFjdDMoY2FBbGdvRGF0YSwgaSwgMzIpCglmcmFtZV9kaWcgMCAvLyBjYUFsZ29EYXRhOiBieXRlW10KCWZyYW1lX2RpZyAxIC8vIGk6IHVpbnQ2NAoJaW50IDMyCglleHRyYWN0MwoJZnJhbWVfYnVyeSAyIC8vIGFkZHI6IGJ5dGVbXQoKCS8vICppZjUxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ3OAoJLy8gYWRkciAhPT0gcmF3Qnl0ZXMoZ2xvYmFscy56ZXJvQWRkcmVzcykgJiYgYWRkciA9PT0gcmF3Qnl0ZXMoYWRkclRvRmluZCkKCWZyYW1lX2RpZyAyIC8vIGFkZHI6IGJ5dGVbXQoJZ2xvYmFsIFplcm9BZGRyZXNzCgkhPQoJZHVwCglieiAqc2tpcF9hbmQxMAoJZnJhbWVfZGlnIDIgLy8gYWRkcjogYnl0ZVtdCglmcmFtZV9kaWcgLTIgLy8gYWRkclRvRmluZDogQWRkcmVzcwoJPT0KCSYmCgoqc2tpcF9hbmQxMDoKCWJ6ICppZjUxX2VuZAoKCS8vICppZjUxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NzkKCS8vIHJldHVybiB0cnVlCglpbnQgMQoJYiAqaXNBZGRyZXNzSW5ORkRDQUFsZ29MaXN0KnJldHVybgoKKmlmNTFfZW5kOgoKKmZvcl8xMF9jb250aW51ZToKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE0NzYKCS8vIGkgKz0gMzIKCWZyYW1lX2RpZyAxIC8vIGk6IHVpbnQ2NAoJaW50IDMyCgkrCglmcmFtZV9idXJ5IDEgLy8gaTogdWludDY0CgliICpmb3JfMTAKCipmb3JfMTBfZW5kOgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ4MgoJLy8gcmV0dXJuIGZhbHNlCglpbnQgMAoKKmlzQWRkcmVzc0luTkZEQ0FBbGdvTGlzdCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFsZ29TYXR1cmF0aW9uTGV2ZWwoKTogdWludDY0Ci8vCi8vIFJldHVybnMgdGhlIG1heGltdW0gYWxsb3dlZCBzdGFrZSBwZXIgdmFsaWRhdG9yIGJhc2VkIG9uIGEgcGVyY2VudGFnZSBvZiBhbGwgY3VycmVudCBvbmxpbmUgc3Rha2UgYmVmb3JlCi8vIHRoZSB2YWxpZGF0b3IgaXMgY29uc2lkZXJlZCBzYXR1cmF0ZWQgLSB3aGVyZSByZXdhcmRzIGFyZSBkaW1pbmlzaGVkLgovLyBOT1RFOiB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgdHdpY2UgLSBoZXJlIGFuZCBpbiBzdGFraW5nIHBvb2wgY29udHJhY3QuICBCb3RoIG11c3QgYmUgaWRlbnRpY2FsLgphbGdvU2F0dXJhdGlvbkxldmVsOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNDkxCgkvLyBvbmxpbmUgPSB0aGlzLmdldEN1cnJlbnRPbmxpbmVTdGFrZSgpCgljYWxsc3ViIGdldEN1cnJlbnRPbmxpbmVTdGFrZQoJZnJhbWVfYnVyeSAwIC8vIG9ubGluZTogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTQ5MwoJLy8gcmV0dXJuIHdpZGVSYXRpbyhbb25saW5lLCBNQVhfVkFMSURBVE9SX1NPRlRfUENUX09GX09OTElORV8xREVDSU1BTF0sIFsxMDAwXSkKCWZyYW1lX2RpZyAwIC8vIG9ubGluZTogdWludDY0CglpbnQgMTAwCgltdWx3CglpbnQgMAoJaW50IDEwMDAKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIG1heEFsbG93ZWRTdGFrZSgpOiB1aW50NjQKLy8KLy8gUmV0dXJucyB0aGUgTUFYSU1VTSBhbGxvd2VkIHN0YWtlIHBlciB2YWxpZGF0b3IgYmFzZWQgb24gYSBwZXJjZW50YWdlIG9mIGFsbCBjdXJyZW50IG9ubGluZSBzdGFrZS4KLy8gQWRkaW5nIHN0YWtlIGlzIGNvbXBsZXRlbHkgYmxvY2tlZCBhdCB0aGlzIGFtb3VudC4KbWF4QWxsb3dlZFN0YWtlOgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTAxCgkvLyBvbmxpbmUgPSB0aGlzLmdldEN1cnJlbnRPbmxpbmVTdGFrZSgpCgljYWxsc3ViIGdldEN1cnJlbnRPbmxpbmVTdGFrZQoJZnJhbWVfYnVyeSAwIC8vIG9ubGluZTogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTUwMwoJLy8gcmV0dXJuIHdpZGVSYXRpbyhbb25saW5lLCBNQVhfVkFMSURBVE9SX0hBUkRfUENUX09GX09OTElORV8xREVDSU1BTF0sIFsxMDAwXSkKCWZyYW1lX2RpZyAwIC8vIG9ubGluZTogdWludDY0CglpbnQgMTUwCgltdWx3CglpbnQgMAoJaW50IDEwMDAKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCgoJLy8gd2lkZVJhdGlvIGZhaWxlZAoJYXNzZXJ0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCi8vIG1heEFsZ29BbGxvd2VkUGVyUG9vbCgpOiB1aW50NjQKLy8KLy8gUmV0dXJucyB0aGUgTUFYSU1VTSBhbGxvd2VkIHN0YWtlIHBlciBwb29sIGFuZCBzdGlsbCByZWNlaXZlIGluY2VudGl2ZXMgLSB3ZSdsbCB0cmVhdCB0aGlzIGFzIHRoZSAnbWF4IHBlciBwb29sJwptYXhBbGdvQWxsb3dlZFBlclBvb2w6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTEyCgkvLyByZXR1cm4gNzBfMDAwXzAwMF8wMDBfMDAwCglpbnQgNzBfMDAwXzAwMF8wMDBfMDAwCglyZXRzdWIKCi8vIGdldEN1cnJlbnRPbmxpbmVTdGFrZSgpOiB1aW50NjQKZ2V0Q3VycmVudE9ubGluZVN0YWtlOgoJcHJvdG8gMCAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTUxOAoJLy8gcmV0dXJuIDJfMDAwXzAwMF8wMDBfMDAwXzAwMAoJaW50IDJfMDAwXzAwMF8wMDBfMDAwXzAwMAoJcmV0c3ViCgovLyBtaW5CYWxhbmNlRm9yQWNjb3VudChjb250cmFjdHM6IHVpbnQ2NCwgZXh0cmFQYWdlczogdWludDY0LCBhc3NldHM6IHVpbnQ2NCwgbG9jYWxJbnRzOiB1aW50NjQsIGxvY2FsQnl0ZXM6IHVpbnQ2NCwgZ2xvYmFsSW50czogdWludDY0LCBnbG9iYWxCeXRlczogdWludDY0KTogdWludDY0Cm1pbkJhbGFuY2VGb3JBY2NvdW50OgoJcHJvdG8gNyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTMwCgkvLyBtaW5CYWwgPSBBTEdPUkFORF9BQ0NPVU5UX01JTl9CQUxBTkNFCglpbnQgMTAwMDAwCglmcmFtZV9idXJ5IDAgLy8gbWluQmFsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTMxCgkvLyBtaW5CYWwgKz0gY29udHJhY3RzICogQVBQTElDQVRJT05fQkFTRV9GRUUKCWZyYW1lX2RpZyAwIC8vIG1pbkJhbDogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gY29udHJhY3RzOiB1aW50NjQKCWludCAxMDAwMDAKCSoKCSsKCWZyYW1lX2J1cnkgMCAvLyBtaW5CYWw6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE1MzIKCS8vIG1pbkJhbCArPSBleHRyYVBhZ2VzICogQVBQTElDQVRJT05fQkFTRV9GRUUKCWZyYW1lX2RpZyAwIC8vIG1pbkJhbDogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gZXh0cmFQYWdlczogdWludDY0CglpbnQgMTAwMDAwCgkqCgkrCglmcmFtZV9idXJ5IDAgLy8gbWluQmFsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTMzCgkvLyBtaW5CYWwgKz0gYXNzZXRzICogQVNTRVRfSE9MRElOR19GRUUKCWZyYW1lX2RpZyAwIC8vIG1pbkJhbDogdWludDY0CglmcmFtZV9kaWcgLTMgLy8gYXNzZXRzOiB1aW50NjQKCWludCAxMDAwMDAKCSoKCSsKCWZyYW1lX2J1cnkgMCAvLyBtaW5CYWw6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy92YWxpZGF0b3JSZWdpc3RyeS5hbGdvLnRzOjE1MzQKCS8vIG1pbkJhbCArPSBsb2NhbEludHMgKiBTU0NfVkFMVUVfVUlOVAoJZnJhbWVfZGlnIDAgLy8gbWluQmFsOiB1aW50NjQKCWZyYW1lX2RpZyAtNCAvLyBsb2NhbEludHM6IHVpbnQ2NAoJaW50IDI4NTAwCgkqCgkrCglmcmFtZV9idXJ5IDAgLy8gbWluQmFsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTM1CgkvLyBtaW5CYWwgKz0gZ2xvYmFsSW50cyAqIFNTQ19WQUxVRV9VSU5UCglmcmFtZV9kaWcgMCAvLyBtaW5CYWw6IHVpbnQ2NAoJZnJhbWVfZGlnIC02IC8vIGdsb2JhbEludHM6IHVpbnQ2NAoJaW50IDI4NTAwCgkqCgkrCglmcmFtZV9idXJ5IDAgLy8gbWluQmFsOiB1aW50NjQKCgkvLyBjb250cmFjdHMvdmFsaWRhdG9yUmVnaXN0cnkuYWxnby50czoxNTM2CgkvLyBtaW5CYWwgKz0gbG9jYWxCeXRlcyAqIFNTQ19WQUxVRV9CWVRFUwoJZnJhbWVfZGlnIDAgLy8gbWluQmFsOiB1aW50NjQKCWZyYW1lX2RpZyAtNSAvLyBsb2NhbEJ5dGVzOiB1aW50NjQKCWludCA1MDAwMAoJKgoJKwoJZnJhbWVfYnVyeSAwIC8vIG1pbkJhbDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTUzNwoJLy8gbWluQmFsICs9IGdsb2JhbEJ5dGVzICogU1NDX1ZBTFVFX0JZVEVTCglmcmFtZV9kaWcgMCAvLyBtaW5CYWw6IHVpbnQ2NAoJZnJhbWVfZGlnIC03IC8vIGdsb2JhbEJ5dGVzOiB1aW50NjQKCWludCA1MDAwMAoJKgoJKwoJZnJhbWVfYnVyeSAwIC8vIG1pbkJhbDogdWludDY0CgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTUzOAoJLy8gcmV0dXJuIG1pbkJhbAoJZnJhbWVfZGlnIDAgLy8gbWluQmFsOiB1aW50NjQKCgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gY29zdEZvckJveFN0b3JhZ2UodG90YWxOdW1CeXRlczogdWludDY0KTogdWludDY0CmNvc3RGb3JCb3hTdG9yYWdlOgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL3ZhbGlkYXRvclJlZ2lzdHJ5LmFsZ28udHM6MTU0NQoJLy8gcmV0dXJuIFNDQk9YX1BFUkJPWCArIHRvdGFsTnVtQnl0ZXMgKiBTQ0JPWF9QRVJCWVRFCglpbnQgMjUwMAoJZnJhbWVfZGlnIC0xIC8vIHRvdGFsTnVtQnl0ZXM6IHVpbnQ2NAoJaW50IDQwMAoJKgoJKwoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJpbml0U3Rha2luZ0NvbnRyYWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJsb2FkU3Rha2luZ0NvbnRyYWN0RGF0YSh1aW50NjQsYnl0ZVtdKXZvaWQiCgltZXRob2QgImZpbmFsaXplU3Rha2luZ0NvbnRyYWN0KCl2b2lkIgoJbWV0aG9kICJnYXMoKXZvaWQiCgltZXRob2QgImdldE1ickFtb3VudHMoKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgoJbWV0aG9kICJnZXRQcm90b2NvbENvbnN0cmFpbnRzKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImdldE51bVZhbGlkYXRvcnMoKXVpbnQ2NCIKCW1ldGhvZCAiZ2V0VmFsaWRhdG9yQ29uZmlnKHVpbnQ2NCkodWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImdldFZhbGlkYXRvclN0YXRlKHVpbnQ2NCkodWludDE2LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiZ2V0VmFsaWRhdG9yT3duZXJBbmRNYW5hZ2VyKHVpbnQ2NCkoYWRkcmVzcyxhZGRyZXNzKSIKCW1ldGhvZCAiZ2V0UG9vbHModWludDY0KSh1aW50NjQsdWludDE2LHVpbnQ2NClbXSIKCW1ldGhvZCAiZ2V0UG9vbEFwcElkKHVpbnQ2NCx1aW50NjQpdWludDY0IgoJbWV0aG9kICJnZXRQb29sSW5mbygodWludDY0LHVpbnQ2NCx1aW50NjQpKSh1aW50NjQsdWludDE2LHVpbnQ2NCkiCgltZXRob2QgImdldEN1ck1heFN0YWtlUGVyUG9vbCh1aW50NjQpdWludDY0IgoJbWV0aG9kICJkb2VzU3Rha2VyTmVlZFRvUGF5TUJSKGFkZHJlc3MpYm9vbCIKCW1ldGhvZCAiZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50KGFkZHJlc3MpKHVpbnQ2NCx1aW50NjQsdWludDY0KVtdIgoJbWV0aG9kICJnZXRUb2tlblBheW91dFJhdGlvKHVpbnQ2NCkodWludDY0WzI0XSx1aW50NjQpIgoJbWV0aG9kICJnZXROb2RlUG9vbEFzc2lnbm1lbnRzKHVpbnQ2NCkoKHVpbnQ2NFszXSlbOF0pIgoJbWV0aG9kICJnZXRORkRSZWdpc3RyeUlEKCl1aW50NjQiCgltZXRob2QgImFkZFZhbGlkYXRvcihwYXksc3RyaW5nLCh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50OCxhZGRyZXNzLHVpbnQ2NFs0XSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0KSl1aW50NjQiCgltZXRob2QgImNoYW5nZVZhbGlkYXRvck1hbmFnZXIodWludDY0LGFkZHJlc3Mpdm9pZCIKCW1ldGhvZCAiY2hhbmdlVmFsaWRhdG9yU3Vuc2V0SW5mbyh1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJjaGFuZ2VWYWxpZGF0b3JORkQodWludDY0LHVpbnQ2NCxzdHJpbmcpdm9pZCIKCW1ldGhvZCAiY2hhbmdlVmFsaWRhdG9yQ29tbWlzc2lvbkFkZHJlc3ModWludDY0LGFkZHJlc3Mpdm9pZCIKCW1ldGhvZCAiY2hhbmdlVmFsaWRhdG9yUmV3YXJkSW5mbyh1aW50NjQsdWludDgsYWRkcmVzcyx1aW50NjRbNF0sdWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhZGRQb29sKHBheSx1aW50NjQsdWludDY0KSh1aW50NjQsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFkZFN0YWtlKHBheSx1aW50NjQsdWludDY0KSh1aW50NjQsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgInNldFRva2VuUGF5b3V0UmF0aW8odWludDY0KSh1aW50NjRbMjRdLHVpbnQ2NCkiCgltZXRob2QgInN0YWtlVXBkYXRlZFZpYVJld2FyZHMoKHVpbnQ2NCx1aW50NjQsdWludDY0KSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKCW1ldGhvZCAic3Rha2VSZW1vdmVkKCh1aW50NjQsdWludDY0LHVpbnQ2NCksYWRkcmVzcyx1aW50NjQsdWludDY0LGJvb2wpdm9pZCIKCW1ldGhvZCAiZmluZFBvb2xGb3JTdGFrZXIodWludDY0LGFkZHJlc3MsdWludDY0KSgodWludDY0LHVpbnQ2NCx1aW50NjQpLGJvb2wsYm9vbCkiCgltZXRob2QgIm1vdmVQb29sVG9Ob2RlKHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQiCgltZXRob2QgImVtcHR5VG9rZW5SZXdhcmRzKHVpbnQ2NCxhZGRyZXNzKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfaW5pdFN0YWtpbmdDb250cmFjdCAqYWJpX3JvdXRlX2xvYWRTdGFraW5nQ29udHJhY3REYXRhICphYmlfcm91dGVfZmluYWxpemVTdGFraW5nQ29udHJhY3QgKmFiaV9yb3V0ZV9nYXMgKmFiaV9yb3V0ZV9nZXRNYnJBbW91bnRzICphYmlfcm91dGVfZ2V0UHJvdG9jb2xDb25zdHJhaW50cyAqYWJpX3JvdXRlX2dldE51bVZhbGlkYXRvcnMgKmFiaV9yb3V0ZV9nZXRWYWxpZGF0b3JDb25maWcgKmFiaV9yb3V0ZV9nZXRWYWxpZGF0b3JTdGF0ZSAqYWJpX3JvdXRlX2dldFZhbGlkYXRvck93bmVyQW5kTWFuYWdlciAqYWJpX3JvdXRlX2dldFBvb2xzICphYmlfcm91dGVfZ2V0UG9vbEFwcElkICphYmlfcm91dGVfZ2V0UG9vbEluZm8gKmFiaV9yb3V0ZV9nZXRDdXJNYXhTdGFrZVBlclBvb2wgKmFiaV9yb3V0ZV9kb2VzU3Rha2VyTmVlZFRvUGF5TUJSICphYmlfcm91dGVfZ2V0U3Rha2VkUG9vbHNGb3JBY2NvdW50ICphYmlfcm91dGVfZ2V0VG9rZW5QYXlvdXRSYXRpbyAqYWJpX3JvdXRlX2dldE5vZGVQb29sQXNzaWdubWVudHMgKmFiaV9yb3V0ZV9nZXRORkRSZWdpc3RyeUlEICphYmlfcm91dGVfYWRkVmFsaWRhdG9yICphYmlfcm91dGVfY2hhbmdlVmFsaWRhdG9yTWFuYWdlciAqYWJpX3JvdXRlX2NoYW5nZVZhbGlkYXRvclN1bnNldEluZm8gKmFiaV9yb3V0ZV9jaGFuZ2VWYWxpZGF0b3JORkQgKmFiaV9yb3V0ZV9jaGFuZ2VWYWxpZGF0b3JDb21taXNzaW9uQWRkcmVzcyAqYWJpX3JvdXRlX2NoYW5nZVZhbGlkYXRvclJld2FyZEluZm8gKmFiaV9yb3V0ZV9hZGRQb29sICphYmlfcm91dGVfYWRkU3Rha2UgKmFiaV9yb3V0ZV9zZXRUb2tlblBheW91dFJhdGlvICphYmlfcm91dGVfc3Rha2VVcGRhdGVkVmlhUmV3YXJkcyAqYWJpX3JvdXRlX3N0YWtlUmVtb3ZlZCAqYWJpX3JvdXRlX2ZpbmRQb29sRm9yU3Rha2VyICphYmlfcm91dGVfbW92ZVBvb2xUb05vZGUgKmFiaV9yb3V0ZV9lbXB0eVRva2VuUmV3YXJkcwoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIFVwZGF0ZUFwcGxpY2F0aW9uCgllcnI=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" - }, - "contract": { - "name": "ValidatorRegistry", - "desc": "", - "methods": [ - { - "name": "updateApplication", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "createApplication", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "initStakingContract", - "args": [ - { - "name": "approvalProgramSize", - "type": "uint64" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "loadStakingContractData", - "args": [ - { - "name": "offset", - "type": "uint64" - }, - { - "name": "data", - "type": "byte[]" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "finalizeStakingContract", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "gas", - "desc": "gas is a dummy no-op call that can be used to pool-up resource references and opcode cost", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "getMbrAmounts", - "desc": "Returns the MBR amounts needed for various actions:[addValidatorMbr: uint64 - mbr needed to add a new validator - paid to validator contractaddPoolMbr: uint64 - mbr needed to add a new pool - paid to validatorpoolInitMbr: uint64 - mbr needed to initStorage() of pool - paid to pool itselfaddStakerMbr: uint64 - mbr staker needs to add to first staking payment (stays w/ validator)]", - "args": [], - "returns": { - "type": "(uint64,uint64,uint64,uint64)" - } - }, - { - "name": "getProtocolConstraints", - "desc": "Returns the protocol constraints so that UIs can limit what users specify for validator configuration parameters.", - "args": [], - "returns": { - "type": "(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)" - } - }, - { - "name": "getNumValidators", - "desc": "Returns the current number of validators", - "args": [], - "returns": { - "type": "uint64" - } - }, - { - "name": "getValidatorConfig", - "args": [ - { - "name": "validatorId", - "type": "uint64" - } - ], - "returns": { - "type": "(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" - } - }, - { - "name": "getValidatorState", - "args": [ - { - "name": "validatorId", - "type": "uint64" - } - ], - "returns": { - "type": "(uint16,uint64,uint64,uint64)" - } - }, - { - "name": "getValidatorOwnerAndManager", - "args": [ - { - "name": "validatorId", - "type": "uint64" - } - ], - "returns": { - "type": "(address,address)" - } - }, - { - "name": "getPools", - "desc": "Return list of all pools for this validator.", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "@return{PoolInfo[]}- array of poolsNot callable from other contracts because>1K return but can be called w/ simulate which bumps log returns" - } - ], - "returns": { - "type": "(uint64,uint16,uint64)[]" - } - }, - { - "name": "getPoolAppId", - "args": [ - { - "name": "validatorId", - "type": "uint64" - }, - { - "name": "poolId", - "type": "uint64" - } - ], - "returns": { - "type": "uint64" - } - }, - { - "name": "getPoolInfo", - "args": [ - { - "name": "poolKey", - "type": "(uint64,uint64,uint64)" - } - ], - "returns": { - "type": "(uint64,uint16,uint64)" - } - }, - { - "name": "getCurMaxStakePerPool", - "desc": "Calculate the maximum stake per pool for a given validator.Normally this would be maxAlgoPerPool, but it should also never go above MaxAllowedStake / numPools soas pools are added the max allowed per pool can reduce.", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator." - } - ], - "returns": { - "type": "uint64" - } - }, - { - "name": "doesStakerNeedToPayMBR", - "desc": "Helper callers can call w/ simulate to determine if 'AddStaker' MBR should be included w/ staking amount", - "args": [ - { - "name": "staker", - "type": "address" - } - ], - "returns": { - "type": "bool" - } - }, - { - "name": "getStakedPoolsForAccount", - "desc": "Retrieves the staked pools for an account.", - "args": [ - { - "name": "staker", - "type": "address", - "desc": "The account to retrieve staked pools for.@return{ValidatorPoolKey[]}- The array of staked pools for the account." - } - ], - "returns": { - "type": "(uint64,uint64,uint64)[]" - } - }, - { - "name": "getTokenPayoutRatio", - "desc": "Retrieves the token payout ratio for a given validator - returning the pool ratios of whole so that tokenpayouts across pools can be based on a stable snaphost of stake.", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator.@return{PoolTokenPayoutRatio}- The token payout ratio for the validator." - } - ], - "returns": { - "type": "(uint64[24],uint64)" - } - }, - { - "name": "getNodePoolAssignments", - "args": [ - { - "name": "validatorId", - "type": "uint64" - } - ], - "returns": { - "type": "((uint64[3])[8])" - } - }, - { - "name": "getNFDRegistryID", - "args": [], - "returns": { - "type": "uint64" - } - }, - { - "name": "addValidator", - "desc": "Adds a new validatorRequires at least 10 ALGO as the 'fee' for the transaction to help dissuade spammed validator adds.", - "args": [ - { - "name": "mbrPayment", - "type": "pay", - "desc": "payment from caller which covers mbr increase of new validator storage" - }, - { - "name": "nfdName", - "type": "string", - "desc": "(Optional) Name of nfd (used as double-check against id specified in config)" - }, - { - "name": "config", - "type": "(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)", - "desc": "ValidatorConfig struct" - } - ], - "returns": { - "type": "uint64", - "desc": "{uint64}validator id" - } - }, - { - "name": "changeValidatorManager", - "desc": "Changes the Validator manager for a specific Validator id.[ ONLY OWNER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator to change the manager for." - }, - { - "name": "manager", - "type": "address", - "desc": "The new manager address." - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "changeValidatorSunsetInfo", - "desc": "Updates the sunset information for a given validator.[ ONLY OWNER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator to update." - }, - { - "name": "sunsettingOn", - "type": "uint64", - "desc": "The new sunset timestamp." - }, - { - "name": "sunsettingTo", - "type": "uint64", - "desc": "The new sunset to validator id." - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "changeValidatorNFD", - "desc": "Changes the NFD for a validator in the validatorList contract.[ ONLY OWNER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator to update." - }, - { - "name": "nfdAppID", - "type": "uint64", - "desc": "The application id of the NFD to assign to the validator." - }, - { - "name": "nfdName", - "type": "string", - "desc": "The name of the NFD (which must match)" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "changeValidatorCommissionAddress", - "desc": "Change the commission address that validator rewards are sent to.[ ONLY OWNER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64" - }, - { - "name": "commissionAddress", - "type": "address" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "changeValidatorRewardInfo", - "desc": "Allow the additional rewards (gating entry, additional token rewards) information be changed at will.[ ONLY OWNER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64" - }, - { - "name": "EntryGatingType", - "type": "uint8" - }, - { - "name": "EntryGatingAddress", - "type": "address" - }, - { - "name": "EntryGatingAssets", - "type": "uint64[4]" - }, - { - "name": "GatingAssetMinBalance", - "type": "uint64" - }, - { - "name": "RewardPerPayout", - "type": "uint64" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "addPool", - "desc": "Adds a new pool to a validator's pool set, returning the 'key' to reference the pool in the future for staking, etc.The caller must pay the cost of the validators MBR increase as well as the MBR that will be needed for the pool itself.[ ONLY OWNER OR MANAGER CAN call ]", - "args": [ - { - "name": "mbrPayment", - "type": "pay", - "desc": "payment from caller which covers mbr increase of adding a new pool" - }, - { - "name": "validatorId", - "type": "uint64", - "desc": "is id of validator to pool to (must be owner or manager)" - }, - { - "name": "nodeNum", - "type": "uint64", - "desc": "is node number to add to" - } - ], - "returns": { - "type": "(uint64,uint64,uint64)", - "desc": "{ValidatorPoolKey}pool key to created pool" - } - }, - { - "name": "addStake", - "desc": "Adds stake to a validator pool.", - "args": [ - { - "name": "stakedAmountPayment", - "type": "pay", - "desc": "payment coming from staker to place into a pool" - }, - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator." - }, - { - "name": "valueToVerify", - "type": "uint64", - "desc": "only if validator has gating to enter - this is asset id or nfd id that corresponds to gating.Txn sender is factored in as well if that is part of gating.*" - } - ], - "returns": { - "type": "(uint64,uint64,uint64)", - "desc": "{ValidatorPoolKey}- The key of the validator pool." - } - }, - { - "name": "setTokenPayoutRatio", - "desc": "setTokenPayoutRatio is called by Staking Pool # 1 (ONLY) to ask the validator (us) to calculate the ratiosof stake in the pools for subsequent token payouts (ie: 2 pools, '100' algo total staked, 60 in pool 1, and 40in pool 2) This is done so we have a stable snapshot of stake - taken once per epoch - only triggered bypool 1 doing payout. pools other than 1 doing payout call pool 1 to ask it do it first.It would be 60/40% in the poolPctOfWhole values. The token reward payouts then use these values instead oftheir 'current' stake which changes as part of the payouts themselves (and people could be changing stakeduring the epoch updates across pools)Multiple pools will call us via pool 1 (pool2->pool1->validator, etc.) so don't assert on pool1 calling multipletimes in same epoch. Just return.", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "validator id (and thus pool) calling us. Verified so that sender MUST be pool 1 of this validator." - } - ], - "returns": { - "type": "(uint64[24],uint64)", - "desc": "PoolTokenPayoutRatio - the finished ratio data" - } - }, - { - "name": "stakeUpdatedViaRewards", - "desc": "stakeUpdatedViaRewards is called by Staking pools to inform the validator (us) that a particular amount of totalstake has been added to the specified pool. This is used to update the stats we have in our PoolInfo storage.The calling App id is validated against our pool list as well.", - "args": [ - { - "name": "poolKey", - "type": "(uint64,uint64,uint64)", - "desc": "ValidatorPoolKey type" - }, - { - "name": "algoToAdd", - "type": "uint64", - "desc": "amount this validator's total stake increased via rewards" - }, - { - "name": "rewardTokenAmountReserved", - "type": "uint64", - "desc": "amount this validator's total stake increased via rewards (that should be" - }, - { - "name": "validatorCommission", - "type": "uint64", - "desc": "the commission amount the validator was paid, if any" - }, - { - "name": "saturatedBurnToFeeSink", - "type": "uint64", - "desc": "if the pool was in saturated state, the amount sent back to the fee sink.seen as 'accounted for/pending spent')" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "stakeRemoved", - "desc": "stakeRemoved is called by Staking pools to inform the validator (us) that a particular amount of total stake has been removedfrom the specified pool. This is used to update the stats we have in our PoolInfo storage.If any amount of rewardRemoved is specified, then that amount of reward is sent to the useThe calling App id is validated against our pool list as well.", - "args": [ - { - "name": "poolKey", - "type": "(uint64,uint64,uint64)", - "desc": "calling us from which stake was removed" - }, - { - "name": "staker", - "type": "address" - }, - { - "name": "amountRemoved", - "type": "uint64", - "desc": "algo amount removed" - }, - { - "name": "rewardRemoved", - "type": "uint64", - "desc": "if applicable, amount of token reward removed (by pool 1 caller) or TO remove and pay out (via pool 1 from different pool caller)" - }, - { - "name": "stakerRemoved", - "type": "bool" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "findPoolForStaker", - "desc": "Finds the pool for a staker based on the provided validator id, staker address, and amount to stake.First checks the stakers 'already staked list' for the validator preferring those (adding if possible) then addsto new pool if necessary.", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator." - }, - { - "name": "staker", - "type": "address", - "desc": "The address of the staker." - }, - { - "name": "amountToStake", - "type": "uint64", - "desc": "The amount to stake." - } - ], - "returns": { - "type": "((uint64,uint64,uint64),bool,bool)", - "desc": "{ValidatorPoolKey, boolean, boolean}- The pool for the staker, true/false on whether the staker is 'new'to this VALIDATOR, and true/false if staker is new to the protocol." - } - }, - { - "name": "movePoolToNode", - "desc": "Find the specified pool (in any node number) and move it to the specified node.The pool account is forced offline if moved so prior node will still run for 320 rounds butnew key goes online on new node soon after (320 rounds after it goes online)No-op if success, asserts if not found or can't move (no space in target)[ ONLY OWNER OR MANAGER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator." - }, - { - "name": "poolAppId", - "type": "uint64" - }, - { - "name": "nodeNum", - "type": "uint64" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "emptyTokenRewards", - "desc": "Sends the reward tokens held in pool 1 to specified receiver.This is intended to be used by the owner when they want to get reward tokens 'back' which they sent tothe first pool (likely because validator is sunsetting. Any tokens currently 'reserved' for stakers to claim willNOT be sent as they must be held back for stakers to later claim.[ ONLY OWNER CAN CALL]", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator." - }, - { - "name": "receiver", - "type": "address", - "desc": "the account to send the tokens to (must already be opted-in to the reward token)" - } - ], - "returns": { - "type": "uint64", - "desc": "{uint64}the amount of reward token sent" - } - } - ] - } -} \ No newline at end of file diff --git a/examples/reti/ValidatorRegistry.clear.teal b/examples/reti/ValidatorRegistry.clear.teal deleted file mode 100644 index e9f1d65b3..000000000 --- a/examples/reti/ValidatorRegistry.clear.teal +++ /dev/null @@ -1 +0,0 @@ -#pragma version 10 \ No newline at end of file diff --git a/examples/reti/ValidatorRegistry.src_map.json b/examples/reti/ValidatorRegistry.src_map.json deleted file mode 100755 index 62fb2a920..000000000 --- a/examples/reti/ValidatorRegistry.src_map.json +++ /dev/null @@ -1,27582 +0,0 @@ -[ - { - "teal": 1, - "source": 165, - "pc": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183 - ] - }, - { - "teal": 13, - "source": 165, - "pc": [ - 184, - 185 - ] - }, - { - "teal": 14, - "source": 165, - "pc": [ - 186 - ] - }, - { - "teal": 15, - "source": 165, - "pc": [ - 187, - 188 - ] - }, - { - "teal": 16, - "source": 165, - "pc": [ - 189 - ] - }, - { - "teal": 17, - "source": 165, - "pc": [ - 190, - 191 - ] - }, - { - "teal": 18, - "source": 165, - "pc": [ - 192 - ] - }, - { - "teal": 19, - "source": 165, - "pc": [ - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218 - ] - }, - { - "teal": 23, - "source": 165, - "errorMessage": "The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?", - "pc": [ - 219 - ] - }, - { - "teal": 28, - "source": 198, - "pc": [ - 220, - 221, - 222 - ] - }, - { - "teal": 29, - "source": 198, - "pc": [ - 223 - ] - }, - { - "teal": 30, - "source": 198, - "pc": [ - 224 - ] - }, - { - "teal": 34, - "source": 198, - "pc": [ - 225, - 226, - 227 - ] - }, - { - "teal": 38, - "source": 199, - "pc": [ - 228, - 229 - ] - }, - { - "teal": 39, - "source": 199, - "pc": [ - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263 - ] - }, - { - "teal": 40, - "source": 199, - "pc": [ - 264 - ] - }, - { - "teal": 41, - "source": 199, - "pc": [ - 265 - ] - }, - { - "teal": 45, - "source": 201, - "pc": [ - 266, - 267 - ] - }, - { - "teal": 46, - "source": 201, - "pc": [ - 268 - ] - }, - { - "teal": 50, - "source": 202, - "pc": [ - 269, - 270 - ] - }, - { - "teal": 51, - "source": 202, - "pc": [ - 271 - ] - }, - { - "teal": 52, - "source": 202, - "pc": [ - 272, - 273 - ] - }, - { - "teal": 53, - "source": 202, - "pc": [ - 274 - ] - }, - { - "teal": 54, - "source": 202, - "pc": [ - 275, - 276 - ] - }, - { - "teal": 55, - "source": 202, - "pc": [ - 277 - ] - }, - { - "teal": 56, - "source": 202, - "pc": [ - 278 - ] - }, - { - "teal": 57, - "source": 198, - "pc": [ - 279 - ] - }, - { - "teal": 62, - "source": 205, - "pc": [ - 280, - 281, - 282 - ] - }, - { - "teal": 63, - "source": 205, - "pc": [ - 283 - ] - }, - { - "teal": 64, - "source": 205, - "pc": [ - 284 - ] - }, - { - "teal": 68, - "source": 205, - "pc": [ - 285, - 286, - 287 - ] - }, - { - "teal": 72, - "source": 206, - "pc": [ - 288, - 289 - ] - }, - { - "teal": 73, - "source": 206, - "pc": [ - 290 - ] - }, - { - "teal": 74, - "source": 206, - "pc": [ - 291, - 292 - ] - }, - { - "teal": 75, - "source": 206, - "pc": [ - 293 - ] - }, - { - "teal": 76, - "source": 206, - "pc": [ - 294, - 295 - ] - }, - { - "teal": 77, - "source": 206, - "pc": [ - 296 - ] - }, - { - "teal": 78, - "source": 206, - "pc": [ - 297 - ] - }, - { - "teal": 82, - "source": 207, - "pc": [ - 298, - 299 - ] - }, - { - "teal": 83, - "source": 207, - "pc": [ - 300 - ] - }, - { - "teal": 84, - "source": 207, - "pc": [ - 301 - ] - }, - { - "teal": 88, - "source": 208, - "pc": [ - 302, - 303 - ] - }, - { - "teal": 89, - "source": 208, - "pc": [ - 304 - ] - }, - { - "teal": 90, - "source": 208, - "pc": [ - 305 - ] - }, - { - "teal": 94, - "source": 209, - "pc": [ - 306, - 307 - ] - }, - { - "teal": 95, - "source": 209, - "pc": [ - 308 - ] - }, - { - "teal": 96, - "source": 209, - "pc": [ - 309 - ] - }, - { - "teal": 97, - "source": 205, - "pc": [ - 310 - ] - }, - { - "teal": 102, - "source": 212, - "pc": [ - 311, - 312, - 313 - ] - }, - { - "teal": 103, - "source": 212, - "pc": [ - 314 - ] - }, - { - "teal": 106, - "source": 212, - "pc": [ - 315, - 316, - 317 - ] - }, - { - "teal": 107, - "source": 212, - "pc": [ - 318 - ] - }, - { - "teal": 108, - "source": 212, - "pc": [ - 319 - ] - }, - { - "teal": 112, - "source": 212, - "pc": [ - 320, - 321, - 322 - ] - }, - { - "teal": 116, - "source": 214, - "pc": [ - 323, - 324 - ] - }, - { - "teal": 117, - "source": 214, - "pc": [ - 325, - 326 - ] - }, - { - "teal": 118, - "source": 214, - "pc": [ - 327 - ] - }, - { - "teal": 119, - "source": 214, - "pc": [ - 328 - ] - }, - { - "teal": 120, - "source": 212, - "pc": [ - 329 - ] - }, - { - "teal": 125, - "source": 217, - "pc": [ - 330, - 331, - 332 - ] - }, - { - "teal": 126, - "source": 217, - "pc": [ - 333, - 334, - 335 - ] - }, - { - "teal": 129, - "source": 217, - "pc": [ - 336, - 337, - 338 - ] - }, - { - "teal": 130, - "source": 217, - "pc": [ - 339 - ] - }, - { - "teal": 133, - "source": 217, - "pc": [ - 340, - 341, - 342 - ] - }, - { - "teal": 134, - "source": 217, - "pc": [ - 343 - ] - }, - { - "teal": 135, - "source": 217, - "pc": [ - 344 - ] - }, - { - "teal": 139, - "source": 217, - "pc": [ - 345, - 346, - 347 - ] - }, - { - "teal": 143, - "source": 218, - "pc": [ - 348, - 349 - ] - }, - { - "teal": 144, - "source": 218, - "pc": [ - 350 - ] - }, - { - "teal": 145, - "source": 218, - "pc": [ - 351 - ] - }, - { - "teal": 146, - "source": 218, - "pc": [ - 352 - ] - }, - { - "teal": 147, - "source": 218, - "pc": [ - 353 - ] - }, - { - "teal": 148, - "source": 218, - "pc": [ - 354 - ] - }, - { - "teal": 152, - "source": 219, - "pc": [ - 355, - 356 - ] - }, - { - "teal": 153, - "source": 219, - "pc": [ - 357, - 358 - ] - }, - { - "teal": 154, - "source": 219, - "pc": [ - 359, - 360 - ] - }, - { - "teal": 155, - "source": 219, - "pc": [ - 361 - ] - }, - { - "teal": 156, - "source": 217, - "pc": [ - 362 - ] - }, - { - "teal": 161, - "source": 222, - "pc": [ - 363, - 364, - 365 - ] - }, - { - "teal": 162, - "source": 222, - "pc": [ - 366 - ] - }, - { - "teal": 163, - "source": 222, - "pc": [ - 367 - ] - }, - { - "teal": 167, - "source": 222, - "pc": [ - 368, - 369, - 370 - ] - }, - { - "teal": 171, - "source": 223, - "pc": [ - 371, - 372 - ] - }, - { - "teal": 172, - "source": 223, - "pc": [ - 373 - ] - }, - { - "teal": 173, - "source": 223, - "pc": [ - 374, - 375 - ] - }, - { - "teal": 174, - "source": 223, - "pc": [ - 376 - ] - }, - { - "teal": 175, - "source": 223, - "pc": [ - 377, - 378 - ] - }, - { - "teal": 176, - "source": 223, - "pc": [ - 379 - ] - }, - { - "teal": 177, - "source": 223, - "pc": [ - 380 - ] - }, - { - "teal": 178, - "source": 222, - "pc": [ - 381 - ] - }, - { - "teal": 183, - "source": 229, - "pc": [ - 382, - 383, - 384 - ] - }, - { - "teal": 184, - "source": 229, - "pc": [ - 385 - ] - }, - { - "teal": 185, - "source": 229, - "pc": [ - 386 - ] - }, - { - "teal": 191, - "source": 229, - "pc": [ - 387, - 388, - 389 - ] - }, - { - "teal": 192, - "source": 229, - "pc": [ - 390 - ] - }, - { - "teal": 197, - "source": 240, - "pc": [ - 391 - ] - }, - { - "teal": 200, - "source": 240, - "pc": [ - 392, - 393, - 394 - ] - }, - { - "teal": 201, - "source": 240, - "pc": [ - 395 - ] - }, - { - "teal": 202, - "source": 240, - "pc": [ - 396 - ] - }, - { - "teal": 203, - "source": 240, - "pc": [ - 397 - ] - }, - { - "teal": 204, - "source": 240, - "pc": [ - 398 - ] - }, - { - "teal": 216, - "source": 240, - "pc": [ - 399, - 400, - 401 - ] - }, - { - "teal": 241, - "source": 244, - "pc": [ - 402, - 403, - 404 - ] - }, - { - "teal": 242, - "source": 244, - "pc": [ - 405, - 406, - 407 - ] - }, - { - "teal": 243, - "source": 244, - "pc": [ - 408 - ] - }, - { - "teal": 244, - "source": 254, - "pc": [ - 409, - 410 - ] - }, - { - "teal": 245, - "source": 253, - "pc": [ - 411, - 412 - ] - }, - { - "teal": 246, - "source": 252, - "pc": [ - 413 - ] - }, - { - "teal": 247, - "source": 252, - "pc": [ - 414, - 415 - ] - }, - { - "teal": 248, - "source": 249, - "pc": [ - 416, - 417 - ] - }, - { - "teal": 249, - "source": 246, - "pc": [ - 418 - ] - }, - { - "teal": 250, - "source": 245, - "pc": [ - 419, - 420, - 421 - ] - }, - { - "teal": 251, - "source": 245, - "pc": [ - 422 - ] - }, - { - "teal": 252, - "source": 245, - "pc": [ - 423 - ] - }, - { - "teal": 253, - "source": 257, - "pc": [ - 424, - 425 - ] - }, - { - "teal": 254, - "source": 258, - "pc": [ - 426, - 427, - 428 - ] - }, - { - "teal": 255, - "source": 258, - "pc": [ - 429, - 430, - 431 - ] - }, - { - "teal": 256, - "source": 257, - "pc": [ - 432 - ] - }, - { - "teal": 257, - "source": 257, - "pc": [ - 433 - ] - }, - { - "teal": 258, - "source": 257, - "pc": [ - 434 - ] - }, - { - "teal": 259, - "source": 262, - "pc": [ - 435, - 436, - 437 - ] - }, - { - "teal": 260, - "source": 261, - "pc": [ - 438, - 439, - 440 - ] - }, - { - "teal": 261, - "source": 261, - "pc": [ - 441 - ] - }, - { - "teal": 262, - "source": 261, - "pc": [ - 442 - ] - }, - { - "teal": 263, - "source": 240, - "pc": [ - 443 - ] - }, - { - "teal": 268, - "source": 270, - "pc": [ - 444 - ] - }, - { - "teal": 271, - "source": 270, - "pc": [ - 445, - 446, - 447 - ] - }, - { - "teal": 272, - "source": 270, - "pc": [ - 448 - ] - }, - { - "teal": 273, - "source": 270, - "pc": [ - 449 - ] - }, - { - "teal": 274, - "source": 270, - "pc": [ - 450 - ] - }, - { - "teal": 275, - "source": 270, - "pc": [ - 451 - ] - }, - { - "teal": 281, - "source": 270, - "pc": [ - 452, - 453, - 454 - ] - }, - { - "teal": 297, - "source": 276, - "pc": [ - 455, - 456, - 457, - 458, - 459, - 460, - 461, - 462, - 463, - 464, - 465, - 466, - 467, - 468, - 469, - 470, - 471, - 472, - 473, - 474, - 475, - 476, - 477, - 478, - 479, - 480, - 481, - 482, - 483, - 484, - 485, - 486, - 487, - 488, - 489, - 490, - 491, - 492, - 493, - 494, - 495, - 496 - ] - }, - { - "teal": 298, - "source": 277, - "pc": [ - 497, - 498, - 499 - ] - }, - { - "teal": 299, - "source": 277, - "pc": [ - 500 - ] - }, - { - "teal": 300, - "source": 277, - "pc": [ - 501 - ] - }, - { - "teal": 301, - "source": 278, - "pc": [ - 502, - 503, - 504 - ] - }, - { - "teal": 302, - "source": 278, - "pc": [ - 505 - ] - }, - { - "teal": 303, - "source": 278, - "pc": [ - 506 - ] - }, - { - "teal": 304, - "source": 279, - "pc": [ - 507, - 508, - 509 - ] - }, - { - "teal": 305, - "source": 279, - "pc": [ - 510 - ] - }, - { - "teal": 306, - "source": 279, - "pc": [ - 511 - ] - }, - { - "teal": 307, - "source": 280, - "pc": [ - 512, - 513, - 514, - 515, - 516, - 517, - 518, - 519, - 520, - 521 - ] - }, - { - "teal": 308, - "source": 280, - "pc": [ - 522 - ] - }, - { - "teal": 309, - "source": 281, - "pc": [ - 523, - 524, - 525, - 526, - 527, - 528, - 529, - 530, - 531, - 532 - ] - }, - { - "teal": 310, - "source": 281, - "pc": [ - 533 - ] - }, - { - "teal": 311, - "source": 282, - "pc": [ - 534, - 535, - 536, - 537, - 538, - 539, - 540, - 541, - 542, - 543 - ] - }, - { - "teal": 312, - "source": 282, - "pc": [ - 544 - ] - }, - { - "teal": 313, - "source": 270, - "pc": [ - 545 - ] - }, - { - "teal": 318, - "source": 290, - "pc": [ - 546 - ] - }, - { - "teal": 321, - "source": 290, - "pc": [ - 547, - 548, - 549 - ] - }, - { - "teal": 322, - "source": 290, - "pc": [ - 550 - ] - }, - { - "teal": 323, - "source": 290, - "pc": [ - 551 - ] - }, - { - "teal": 324, - "source": 290, - "pc": [ - 552 - ] - }, - { - "teal": 325, - "source": 290, - "pc": [ - 553 - ] - }, - { - "teal": 326, - "source": 290, - "pc": [ - 554 - ] - }, - { - "teal": 332, - "source": 290, - "pc": [ - 555, - 556, - 557 - ] - }, - { - "teal": 336, - "source": 291, - "pc": [ - 558, - 559 - ] - }, - { - "teal": 337, - "source": 291, - "pc": [ - 560 - ] - }, - { - "teal": 338, - "source": 290, - "pc": [ - 561 - ] - }, - { - "teal": 343, - "source": 295, - "pc": [ - 562 - ] - }, - { - "teal": 346, - "source": 295, - "pc": [ - 563, - 564, - 565 - ] - }, - { - "teal": 347, - "source": 295, - "pc": [ - 566 - ] - }, - { - "teal": 350, - "source": 295, - "pc": [ - 567, - 568, - 569 - ] - }, - { - "teal": 351, - "source": 295, - "pc": [ - 570 - ] - }, - { - "teal": 352, - "source": 295, - "pc": [ - 571 - ] - }, - { - "teal": 353, - "source": 295, - "pc": [ - 572 - ] - }, - { - "teal": 354, - "source": 295, - "pc": [ - 573 - ] - }, - { - "teal": 358, - "source": 295, - "pc": [ - 574, - 575, - 576 - ] - }, - { - "teal": 362, - "source": 296, - "pc": [ - 577 - ] - }, - { - "teal": 363, - "source": 296, - "pc": [ - 578, - 579 - ] - }, - { - "teal": 364, - "source": 296, - "pc": [ - 580 - ] - }, - { - "teal": 365, - "source": 296, - "pc": [ - 581, - 582 - ] - }, - { - "teal": 366, - "source": 296, - "pc": [ - 583 - ] - }, - { - "teal": 367, - "source": 296, - "pc": [ - 584 - ] - }, - { - "teal": 368, - "source": 296, - "pc": [ - 585, - 586 - ] - }, - { - "teal": 369, - "source": 296, - "pc": [ - 587 - ] - }, - { - "teal": 370, - "source": 295, - "pc": [ - 588 - ] - }, - { - "teal": 375, - "source": 300, - "pc": [ - 589 - ] - }, - { - "teal": 378, - "source": 300, - "pc": [ - 590, - 591, - 592 - ] - }, - { - "teal": 379, - "source": 300, - "pc": [ - 593 - ] - }, - { - "teal": 382, - "source": 300, - "pc": [ - 594, - 595, - 596 - ] - }, - { - "teal": 383, - "source": 300, - "pc": [ - 597 - ] - }, - { - "teal": 384, - "source": 300, - "pc": [ - 598 - ] - }, - { - "teal": 385, - "source": 300, - "pc": [ - 599 - ] - }, - { - "teal": 386, - "source": 300, - "pc": [ - 600 - ] - }, - { - "teal": 390, - "source": 300, - "pc": [ - 601, - 602, - 603 - ] - }, - { - "teal": 394, - "source": 301, - "pc": [ - 604, - 605 - ] - }, - { - "teal": 395, - "source": 301, - "pc": [ - 606, - 607 - ] - }, - { - "teal": 396, - "source": 301, - "pc": [ - 608 - ] - }, - { - "teal": 397, - "source": 301, - "pc": [ - 609, - 610 - ] - }, - { - "teal": 398, - "source": 301, - "pc": [ - 611 - ] - }, - { - "teal": 399, - "source": 301, - "pc": [ - 612 - ] - }, - { - "teal": 400, - "source": 301, - "pc": [ - 613, - 614 - ] - }, - { - "teal": 401, - "source": 301, - "pc": [ - 615 - ] - }, - { - "teal": 402, - "source": 300, - "pc": [ - 616 - ] - }, - { - "teal": 407, - "source": 305, - "pc": [ - 617 - ] - }, - { - "teal": 410, - "source": 305, - "pc": [ - 618, - 619, - 620 - ] - }, - { - "teal": 411, - "source": 305, - "pc": [ - 621 - ] - }, - { - "teal": 414, - "source": 305, - "pc": [ - 622, - 623, - 624 - ] - }, - { - "teal": 415, - "source": 305, - "pc": [ - 625 - ] - }, - { - "teal": 416, - "source": 305, - "pc": [ - 626 - ] - }, - { - "teal": 417, - "source": 305, - "pc": [ - 627 - ] - }, - { - "teal": 418, - "source": 305, - "pc": [ - 628 - ] - }, - { - "teal": 422, - "source": 305, - "pc": [ - 629, - 630, - 631 - ] - }, - { - "teal": 429, - "source": 307, - "pc": [ - 632 - ] - }, - { - "teal": 430, - "source": 307, - "pc": [ - 633, - 634 - ] - }, - { - "teal": 431, - "source": 307, - "pc": [ - 635 - ] - }, - { - "teal": 432, - "source": 307, - "pc": [ - 636, - 637 - ] - }, - { - "teal": 433, - "source": 307, - "pc": [ - 638 - ] - }, - { - "teal": 434, - "source": 307, - "pc": [ - 639 - ] - }, - { - "teal": 435, - "source": 307, - "pc": [ - 640, - 641 - ] - }, - { - "teal": 436, - "source": 307, - "pc": [ - 642 - ] - }, - { - "teal": 437, - "source": 308, - "pc": [ - 643, - 644 - ] - }, - { - "teal": 438, - "source": 308, - "pc": [ - 645, - 646 - ] - }, - { - "teal": 439, - "source": 308, - "pc": [ - 647 - ] - }, - { - "teal": 440, - "source": 308, - "pc": [ - 648, - 649 - ] - }, - { - "teal": 441, - "source": 308, - "pc": [ - 650 - ] - }, - { - "teal": 442, - "source": 308, - "pc": [ - 651 - ] - }, - { - "teal": 443, - "source": 308, - "pc": [ - 652, - 653 - ] - }, - { - "teal": 444, - "source": 308, - "pc": [ - 654 - ] - }, - { - "teal": 445, - "source": 308, - "pc": [ - 655 - ] - }, - { - "teal": 446, - "source": 305, - "pc": [ - 656 - ] - }, - { - "teal": 451, - "source": 319, - "pc": [ - 657 - ] - }, - { - "teal": 454, - "source": 319, - "pc": [ - 658, - 659, - 660 - ] - }, - { - "teal": 455, - "source": 319, - "pc": [ - 661 - ] - }, - { - "teal": 458, - "source": 319, - "pc": [ - 662, - 663, - 664 - ] - }, - { - "teal": 459, - "source": 319, - "pc": [ - 665 - ] - }, - { - "teal": 460, - "source": 319, - "pc": [ - 666 - ] - }, - { - "teal": 461, - "source": 319, - "pc": [ - 667, - 668 - ] - }, - { - "teal": 462, - "source": 319, - "pc": [ - 669 - ] - }, - { - "teal": 463, - "source": 319, - "pc": [ - 670 - ] - }, - { - "teal": 464, - "source": 319, - "pc": [ - 671, - 672, - 673 - ] - }, - { - "teal": 465, - "source": 319, - "pc": [ - 674 - ] - }, - { - "teal": 466, - "source": 319, - "pc": [ - 675 - ] - }, - { - "teal": 467, - "source": 319, - "pc": [ - 676 - ] - }, - { - "teal": 468, - "source": 319, - "pc": [ - 677 - ] - }, - { - "teal": 469, - "source": 319, - "pc": [ - 678 - ] - }, - { - "teal": 470, - "source": 319, - "pc": [ - 679 - ] - }, - { - "teal": 479, - "source": 319, - "pc": [ - 680, - 681, - 682 - ] - }, - { - "teal": 482, - "source": 319, - "pc": [ - 683 - ] - }, - { - "teal": 483, - "source": 319, - "pc": [ - 684, - 685 - ] - }, - { - "teal": 487, - "source": 320, - "pc": [ - 686 - ] - }, - { - "teal": 488, - "source": 320, - "pc": [ - 687, - 688 - ] - }, - { - "teal": 492, - "source": 321, - "pc": [ - 689, - 690 - ] - }, - { - "teal": 493, - "source": 321, - "pc": [ - 691, - 692 - ] - }, - { - "teal": 494, - "source": 321, - "pc": [ - 693 - ] - }, - { - "teal": 495, - "source": 321, - "pc": [ - 694, - 695 - ] - }, - { - "teal": 496, - "source": 321, - "pc": [ - 696 - ] - }, - { - "teal": 497, - "source": 321, - "pc": [ - 697 - ] - }, - { - "teal": 498, - "source": 321, - "pc": [ - 698, - 699 - ] - }, - { - "teal": 499, - "source": 321, - "pc": [ - 700 - ] - }, - { - "teal": 500, - "source": 321, - "pc": [ - 701, - 702 - ] - }, - { - "teal": 504, - "source": 322, - "pc": [ - 703 - ] - }, - { - "teal": 505, - "source": 322, - "pc": [ - 704, - 705 - ] - }, - { - "teal": 510, - "source": 322, - "pc": [ - 706, - 707 - ] - }, - { - "teal": 511, - "source": 322, - "pc": [ - 708 - ] - }, - { - "teal": 512, - "source": 322, - "pc": [ - 709 - ] - }, - { - "teal": 513, - "source": 322, - "pc": [ - 710, - 711, - 712 - ] - }, - { - "teal": 518, - "source": 323, - "pc": [ - 713, - 714 - ] - }, - { - "teal": 519, - "source": 323, - "pc": [ - 715, - 716 - ] - }, - { - "teal": 520, - "source": 323, - "pc": [ - 717, - 718 - ] - }, - { - "teal": 521, - "source": 323, - "pc": [ - 719 - ] - }, - { - "teal": 522, - "source": 323, - "pc": [ - 720 - ] - }, - { - "teal": 523, - "source": 323, - "pc": [ - 721 - ] - }, - { - "teal": 524, - "source": 323, - "pc": [ - 722 - ] - }, - { - "teal": 525, - "source": 323, - "pc": [ - 723 - ] - }, - { - "teal": 526, - "source": 323, - "pc": [ - 724 - ] - }, - { - "teal": 527, - "source": 323, - "pc": [ - 725 - ] - }, - { - "teal": 528, - "source": 323, - "pc": [ - 726 - ] - }, - { - "teal": 529, - "source": 323, - "pc": [ - 727, - 728, - 729 - ] - }, - { - "teal": 532, - "source": 325, - "pc": [ - 730, - 731, - 732 - ] - }, - { - "teal": 537, - "source": 327, - "pc": [ - 733, - 734 - ] - }, - { - "teal": 538, - "source": 327, - "pc": [ - 735, - 736 - ] - }, - { - "teal": 539, - "source": 327, - "pc": [ - 737, - 738 - ] - }, - { - "teal": 540, - "source": 327, - "pc": [ - 739, - 740 - ] - }, - { - "teal": 541, - "source": 327, - "pc": [ - 741 - ] - }, - { - "teal": 542, - "source": 327, - "pc": [ - 742, - 743 - ] - }, - { - "teal": 543, - "source": 327, - "pc": [ - 744 - ] - }, - { - "teal": 544, - "source": 327, - "pc": [ - 745 - ] - }, - { - "teal": 545, - "source": 327, - "pc": [ - 746, - 747 - ] - }, - { - "teal": 550, - "source": 322, - "pc": [ - 748, - 749 - ] - }, - { - "teal": 551, - "source": 322, - "pc": [ - 750 - ] - }, - { - "teal": 552, - "source": 322, - "pc": [ - 751 - ] - }, - { - "teal": 553, - "source": 322, - "pc": [ - 752, - 753 - ] - }, - { - "teal": 554, - "source": 322, - "pc": [ - 754, - 755, - 756 - ] - }, - { - "teal": 559, - "source": 329, - "pc": [ - 757, - 758 - ] - }, - { - "teal": 562, - "source": 319, - "pc": [ - 759, - 760 - ] - }, - { - "teal": 565, - "source": 319, - "pc": [ - 761, - 762 - ] - }, - { - "teal": 566, - "source": 319, - "pc": [ - 763 - ] - }, - { - "teal": 571, - "source": 336, - "pc": [ - 764 - ] - }, - { - "teal": 574, - "source": 336, - "pc": [ - 765, - 766, - 767 - ] - }, - { - "teal": 575, - "source": 336, - "pc": [ - 768 - ] - }, - { - "teal": 578, - "source": 336, - "pc": [ - 769, - 770, - 771 - ] - }, - { - "teal": 579, - "source": 336, - "pc": [ - 772 - ] - }, - { - "teal": 582, - "source": 336, - "pc": [ - 773, - 774, - 775 - ] - }, - { - "teal": 583, - "source": 336, - "pc": [ - 776 - ] - }, - { - "teal": 584, - "source": 336, - "pc": [ - 777 - ] - }, - { - "teal": 585, - "source": 336, - "pc": [ - 778 - ] - }, - { - "teal": 586, - "source": 336, - "pc": [ - 779 - ] - }, - { - "teal": 587, - "source": 336, - "pc": [ - 780 - ] - }, - { - "teal": 591, - "source": 336, - "pc": [ - 781, - 782, - 783 - ] - }, - { - "teal": 598, - "source": 338, - "pc": [ - 784, - 785 - ] - }, - { - "teal": 599, - "source": 338, - "pc": [ - 786 - ] - }, - { - "teal": 600, - "source": 338, - "pc": [ - 787 - ] - }, - { - "teal": 601, - "source": 338, - "pc": [ - 788 - ] - }, - { - "teal": 602, - "source": 338, - "pc": [ - 789, - 790, - 791 - ] - }, - { - "teal": 603, - "source": 338, - "pc": [ - 792, - 793 - ] - }, - { - "teal": 604, - "source": 338, - "pc": [ - 794 - ] - }, - { - "teal": 605, - "source": 338, - "pc": [ - 795 - ] - }, - { - "teal": 606, - "source": 338, - "pc": [ - 796 - ] - }, - { - "teal": 610, - "source": 337, - "errorMessage": "pool id must be between 1 and number of pools for this validator", - "pc": [ - 797 - ] - }, - { - "teal": 614, - "source": 341, - "pc": [ - 798, - 799 - ] - }, - { - "teal": 615, - "source": 341, - "pc": [ - 800, - 801 - ] - }, - { - "teal": 616, - "source": 341, - "pc": [ - 802 - ] - }, - { - "teal": 617, - "source": 341, - "pc": [ - 803 - ] - }, - { - "teal": 618, - "source": 341, - "pc": [ - 804, - 805 - ] - }, - { - "teal": 619, - "source": 341, - "pc": [ - 806 - ] - }, - { - "teal": 620, - "source": 341, - "pc": [ - 807 - ] - }, - { - "teal": 621, - "source": 341, - "pc": [ - 808 - ] - }, - { - "teal": 622, - "source": 341, - "pc": [ - 809 - ] - }, - { - "teal": 623, - "source": 341, - "pc": [ - 810 - ] - }, - { - "teal": 624, - "source": 341, - "pc": [ - 811 - ] - }, - { - "teal": 625, - "source": 341, - "pc": [ - 812, - 813 - ] - }, - { - "teal": 626, - "source": 341, - "pc": [ - 814 - ] - }, - { - "teal": 627, - "source": 341, - "pc": [ - 815 - ] - }, - { - "teal": 628, - "source": 341, - "pc": [ - 816, - 817 - ] - }, - { - "teal": 629, - "source": 341, - "pc": [ - 818 - ] - }, - { - "teal": 630, - "source": 341, - "pc": [ - 819 - ] - }, - { - "teal": 631, - "source": 336, - "pc": [ - 820 - ] - }, - { - "teal": 636, - "source": 345, - "pc": [ - 821 - ] - }, - { - "teal": 639, - "source": 345, - "pc": [ - 822, - 823, - 824 - ] - }, - { - "teal": 640, - "source": 345, - "pc": [ - 825 - ] - }, - { - "teal": 641, - "source": 345, - "pc": [ - 826 - ] - }, - { - "teal": 642, - "source": 345, - "pc": [ - 827 - ] - }, - { - "teal": 643, - "source": 345, - "pc": [ - 828 - ] - }, - { - "teal": 646, - "source": 345, - "errorMessage": "argument 0 (poolKey) for getPoolInfo must be a (uint64,uint64,uint64)", - "pc": [ - 829 - ] - }, - { - "teal": 649, - "source": 345, - "pc": [ - 830, - 831, - 832 - ] - }, - { - "teal": 650, - "source": 345, - "pc": [ - 833 - ] - }, - { - "teal": 651, - "source": 345, - "pc": [ - 834 - ] - }, - { - "teal": 652, - "source": 345, - "pc": [ - 835 - ] - }, - { - "teal": 653, - "source": 345, - "pc": [ - 836 - ] - }, - { - "teal": 657, - "source": 345, - "pc": [ - 837, - 838, - 839 - ] - }, - { - "teal": 661, - "source": 346, - "pc": [ - 840, - 841 - ] - }, - { - "teal": 662, - "source": 346, - "pc": [ - 842, - 843 - ] - }, - { - "teal": 663, - "source": 346, - "pc": [ - 844, - 845, - 846 - ] - }, - { - "teal": 664, - "source": 346, - "pc": [ - 847 - ] - }, - { - "teal": 665, - "source": 346, - "pc": [ - 848 - ] - }, - { - "teal": 666, - "source": 346, - "pc": [ - 849 - ] - }, - { - "teal": 667, - "source": 346, - "pc": [ - 850, - 851 - ] - }, - { - "teal": 668, - "source": 346, - "pc": [ - 852 - ] - }, - { - "teal": 669, - "source": 346, - "pc": [ - 853 - ] - }, - { - "teal": 670, - "source": 346, - "pc": [ - 854, - 855 - ] - }, - { - "teal": 671, - "source": 346, - "pc": [ - 856 - ] - }, - { - "teal": 672, - "source": 346, - "pc": [ - 857, - 858 - ] - }, - { - "teal": 673, - "source": 346, - "pc": [ - 859, - 860, - 861 - ] - }, - { - "teal": 674, - "source": 346, - "pc": [ - 862 - ] - }, - { - "teal": 675, - "source": 346, - "pc": [ - 863 - ] - }, - { - "teal": 676, - "source": 346, - "pc": [ - 864 - ] - }, - { - "teal": 677, - "source": 346, - "pc": [ - 865, - 866 - ] - }, - { - "teal": 678, - "source": 346, - "pc": [ - 867 - ] - }, - { - "teal": 679, - "source": 345, - "pc": [ - 868 - ] - }, - { - "teal": 684, - "source": 356, - "pc": [ - 869 - ] - }, - { - "teal": 687, - "source": 356, - "pc": [ - 870, - 871, - 872 - ] - }, - { - "teal": 688, - "source": 356, - "pc": [ - 873 - ] - }, - { - "teal": 691, - "source": 356, - "pc": [ - 874, - 875, - 876 - ] - }, - { - "teal": 692, - "source": 356, - "pc": [ - 877 - ] - }, - { - "teal": 693, - "source": 356, - "pc": [ - 878 - ] - }, - { - "teal": 694, - "source": 356, - "pc": [ - 879 - ] - }, - { - "teal": 695, - "source": 356, - "pc": [ - 880 - ] - }, - { - "teal": 696, - "source": 356, - "pc": [ - 881 - ] - }, - { - "teal": 706, - "source": 356, - "pc": [ - 882, - 883, - 884 - ] - }, - { - "teal": 709, - "source": 356, - "pc": [ - 885 - ] - }, - { - "teal": 710, - "source": 356, - "pc": [ - 886, - 887 - ] - }, - { - "teal": 714, - "source": 357, - "pc": [ - 888, - 889 - ] - }, - { - "teal": 715, - "source": 357, - "pc": [ - 890, - 891 - ] - }, - { - "teal": 716, - "source": 357, - "pc": [ - 892 - ] - }, - { - "teal": 717, - "source": 357, - "pc": [ - 893, - 894 - ] - }, - { - "teal": 718, - "source": 357, - "pc": [ - 895 - ] - }, - { - "teal": 719, - "source": 357, - "pc": [ - 896 - ] - }, - { - "teal": 720, - "source": 357, - "pc": [ - 897, - 898 - ] - }, - { - "teal": 721, - "source": 357, - "pc": [ - 899 - ] - }, - { - "teal": 722, - "source": 357, - "pc": [ - 900 - ] - }, - { - "teal": 723, - "source": 357, - "pc": [ - 901, - 902 - ] - }, - { - "teal": 727, - "source": 358, - "pc": [ - 903, - 904, - 905 - ] - }, - { - "teal": 728, - "source": 358, - "pc": [ - 906, - 907 - ] - }, - { - "teal": 729, - "source": 358, - "pc": [ - 908 - ] - }, - { - "teal": 730, - "source": 358, - "pc": [ - 909, - 910 - ] - }, - { - "teal": 734, - "source": 359, - "pc": [ - 911, - 912, - 913 - ] - }, - { - "teal": 735, - "source": 359, - "pc": [ - 914 - ] - }, - { - "teal": 736, - "source": 359, - "pc": [ - 915 - ] - }, - { - "teal": 737, - "source": 359, - "pc": [ - 916, - 917 - ] - }, - { - "teal": 738, - "source": 359, - "pc": [ - 918 - ] - }, - { - "teal": 739, - "source": 359, - "pc": [ - 919 - ] - }, - { - "teal": 740, - "source": 359, - "pc": [ - 920, - 921 - ] - }, - { - "teal": 741, - "source": 359, - "pc": [ - 922 - ] - }, - { - "teal": 742, - "source": 359, - "pc": [ - 923 - ] - }, - { - "teal": 743, - "source": 359, - "pc": [ - 924, - 925 - ] - }, - { - "teal": 748, - "source": 360, - "pc": [ - 926, - 927 - ] - }, - { - "teal": 749, - "source": 360, - "pc": [ - 928 - ] - }, - { - "teal": 750, - "source": 360, - "pc": [ - 929 - ] - }, - { - "teal": 751, - "source": 360, - "pc": [ - 930, - 931, - 932 - ] - }, - { - "teal": 756, - "source": 361, - "pc": [ - 933, - 934, - 935 - ] - }, - { - "teal": 757, - "source": 361, - "pc": [ - 936, - 937 - ] - }, - { - "teal": 763, - "source": 363, - "pc": [ - 938, - 939 - ] - }, - { - "teal": 764, - "source": 363, - "pc": [ - 940, - 941 - ] - }, - { - "teal": 765, - "source": 363, - "pc": [ - 942 - ] - }, - { - "teal": 766, - "source": 363, - "pc": [ - 943, - 944, - 945 - ] - }, - { - "teal": 771, - "source": 364, - "pc": [ - 946, - 947 - ] - }, - { - "teal": 772, - "source": 364, - "pc": [ - 948, - 949 - ] - }, - { - "teal": 777, - "source": 366, - "pc": [ - 950, - 951 - ] - }, - { - "teal": 780, - "source": 356, - "pc": [ - 952, - 953 - ] - }, - { - "teal": 783, - "source": 356, - "pc": [ - 954, - 955 - ] - }, - { - "teal": 784, - "source": 356, - "pc": [ - 956 - ] - }, - { - "teal": 789, - "source": 374, - "pc": [ - 957 - ] - }, - { - "teal": 792, - "source": 374, - "pc": [ - 958, - 959, - 960 - ] - }, - { - "teal": 793, - "source": 374, - "pc": [ - 961 - ] - }, - { - "teal": 794, - "source": 374, - "pc": [ - 962 - ] - }, - { - "teal": 795, - "source": 374, - "pc": [ - 963, - 964 - ] - }, - { - "teal": 796, - "source": 374, - "pc": [ - 965 - ] - }, - { - "teal": 799, - "source": 374, - "errorMessage": "argument 0 (staker) for doesStakerNeedToPayMBR must be a address", - "pc": [ - 966 - ] - }, - { - "teal": 802, - "source": 374, - "pc": [ - 967, - 968, - 969 - ] - }, - { - "teal": 803, - "source": 374, - "pc": [ - 970, - 971 - ] - }, - { - "teal": 804, - "source": 374, - "pc": [ - 972 - ] - }, - { - "teal": 805, - "source": 374, - "pc": [ - 973, - 974 - ] - }, - { - "teal": 806, - "source": 374, - "pc": [ - 975 - ] - }, - { - "teal": 807, - "source": 374, - "pc": [ - 976 - ] - }, - { - "teal": 808, - "source": 374, - "pc": [ - 977 - ] - }, - { - "teal": 809, - "source": 374, - "pc": [ - 978 - ] - }, - { - "teal": 810, - "source": 374, - "pc": [ - 979 - ] - }, - { - "teal": 817, - "source": 374, - "pc": [ - 980, - 981, - 982 - ] - }, - { - "teal": 821, - "source": 375, - "pc": [ - 983 - ] - }, - { - "teal": 822, - "source": 375, - "pc": [ - 984, - 985 - ] - }, - { - "teal": 823, - "source": 375, - "pc": [ - 986 - ] - }, - { - "teal": 824, - "source": 375, - "pc": [ - 987 - ] - }, - { - "teal": 825, - "source": 375, - "pc": [ - 988 - ] - }, - { - "teal": 826, - "source": 375, - "pc": [ - 989 - ] - }, - { - "teal": 827, - "source": 375, - "pc": [ - 990 - ] - }, - { - "teal": 828, - "source": 374, - "pc": [ - 991 - ] - }, - { - "teal": 833, - "source": 384, - "pc": [ - 992 - ] - }, - { - "teal": 836, - "source": 384, - "pc": [ - 993, - 994, - 995 - ] - }, - { - "teal": 837, - "source": 384, - "pc": [ - 996 - ] - }, - { - "teal": 838, - "source": 384, - "pc": [ - 997 - ] - }, - { - "teal": 839, - "source": 384, - "pc": [ - 998, - 999 - ] - }, - { - "teal": 840, - "source": 384, - "pc": [ - 1000 - ] - }, - { - "teal": 843, - "source": 384, - "errorMessage": "argument 0 (staker) for getStakedPoolsForAccount must be a address", - "pc": [ - 1001 - ] - }, - { - "teal": 846, - "source": 384, - "pc": [ - 1002, - 1003, - 1004 - ] - }, - { - "teal": 847, - "source": 384, - "pc": [ - 1005 - ] - }, - { - "teal": 848, - "source": 384, - "pc": [ - 1006 - ] - }, - { - "teal": 849, - "source": 384, - "pc": [ - 1007 - ] - }, - { - "teal": 850, - "source": 384, - "pc": [ - 1008 - ] - }, - { - "teal": 851, - "source": 384, - "pc": [ - 1009 - ] - }, - { - "teal": 852, - "source": 384, - "pc": [ - 1010, - 1011, - 1012 - ] - }, - { - "teal": 853, - "source": 384, - "pc": [ - 1013 - ] - }, - { - "teal": 854, - "source": 384, - "pc": [ - 1014 - ] - }, - { - "teal": 855, - "source": 384, - "pc": [ - 1015 - ] - }, - { - "teal": 856, - "source": 384, - "pc": [ - 1016 - ] - }, - { - "teal": 857, - "source": 384, - "pc": [ - 1017 - ] - }, - { - "teal": 858, - "source": 384, - "pc": [ - 1018 - ] - }, - { - "teal": 867, - "source": 384, - "pc": [ - 1019, - 1020, - 1021 - ] - }, - { - "teal": 870, - "source": 384, - "pc": [ - 1022 - ] - }, - { - "teal": 871, - "source": 384, - "pc": [ - 1023, - 1024 - ] - }, - { - "teal": 876, - "source": 385, - "pc": [ - 1025 - ] - }, - { - "teal": 877, - "source": 385, - "pc": [ - 1026, - 1027 - ] - }, - { - "teal": 878, - "source": 385, - "pc": [ - 1028 - ] - }, - { - "teal": 879, - "source": 385, - "pc": [ - 1029 - ] - }, - { - "teal": 880, - "source": 385, - "pc": [ - 1030 - ] - }, - { - "teal": 881, - "source": 385, - "pc": [ - 1031 - ] - }, - { - "teal": 882, - "source": 385, - "pc": [ - 1032 - ] - }, - { - "teal": 883, - "source": 385, - "pc": [ - 1033, - 1034, - 1035 - ] - }, - { - "teal": 888, - "source": 386, - "pc": [ - 1036 - ] - }, - { - "teal": 889, - "source": 386, - "pc": [ - 1037, - 1038, - 1039 - ] - }, - { - "teal": 894, - "source": 388, - "pc": [ - 1040 - ] - }, - { - "teal": 895, - "source": 388, - "pc": [ - 1041, - 1042 - ] - }, - { - "teal": 899, - "source": 389, - "pc": [ - 1043 - ] - }, - { - "teal": 900, - "source": 389, - "pc": [ - 1044, - 1045 - ] - }, - { - "teal": 901, - "source": 389, - "pc": [ - 1046 - ] - }, - { - "teal": 902, - "source": 389, - "pc": [ - 1047 - ] - }, - { - "teal": 905, - "source": 389, - "errorMessage": "box value does not exist: this.stakerPoolSet(staker).value", - "pc": [ - 1048 - ] - }, - { - "teal": 906, - "source": 389, - "pc": [ - 1049, - 1050 - ] - }, - { - "teal": 910, - "source": 390, - "pc": [ - 1051 - ] - }, - { - "teal": 911, - "source": 390, - "pc": [ - 1052, - 1053 - ] - }, - { - "teal": 916, - "source": 390, - "pc": [ - 1054, - 1055 - ] - }, - { - "teal": 917, - "source": 390, - "pc": [ - 1056, - 1057 - ] - }, - { - "teal": 918, - "source": 390, - "pc": [ - 1058 - ] - }, - { - "teal": 919, - "source": 390, - "pc": [ - 1059, - 1060, - 1061 - ] - }, - { - "teal": 924, - "source": 391, - "pc": [ - 1062, - 1063 - ] - }, - { - "teal": 925, - "source": 391, - "pc": [ - 1064, - 1065 - ] - }, - { - "teal": 926, - "source": 391, - "pc": [ - 1066 - ] - }, - { - "teal": 927, - "source": 391, - "pc": [ - 1067 - ] - }, - { - "teal": 928, - "source": 391, - "pc": [ - 1068 - ] - }, - { - "teal": 929, - "source": 391, - "pc": [ - 1069 - ] - }, - { - "teal": 930, - "source": 391, - "pc": [ - 1070 - ] - }, - { - "teal": 931, - "source": 391, - "pc": [ - 1071 - ] - }, - { - "teal": 932, - "source": 391, - "pc": [ - 1072 - ] - }, - { - "teal": 933, - "source": 391, - "pc": [ - 1073 - ] - }, - { - "teal": 934, - "source": 391, - "pc": [ - 1074 - ] - }, - { - "teal": 935, - "source": 391, - "pc": [ - 1075, - 1076, - 1077 - ] - }, - { - "teal": 940, - "source": 392, - "pc": [ - 1078, - 1079 - ] - }, - { - "teal": 941, - "source": 392, - "pc": [ - 1080, - 1081 - ] - }, - { - "teal": 942, - "source": 392, - "pc": [ - 1082, - 1083 - ] - }, - { - "teal": 943, - "source": 392, - "pc": [ - 1084 - ] - }, - { - "teal": 944, - "source": 392, - "pc": [ - 1085 - ] - }, - { - "teal": 945, - "source": 392, - "pc": [ - 1086 - ] - }, - { - "teal": 946, - "source": 392, - "pc": [ - 1087 - ] - }, - { - "teal": 947, - "source": 392, - "pc": [ - 1088 - ] - }, - { - "teal": 948, - "source": 392, - "pc": [ - 1089, - 1090 - ] - }, - { - "teal": 955, - "source": 390, - "pc": [ - 1091, - 1092 - ] - }, - { - "teal": 956, - "source": 390, - "pc": [ - 1093 - ] - }, - { - "teal": 957, - "source": 390, - "pc": [ - 1094 - ] - }, - { - "teal": 958, - "source": 390, - "pc": [ - 1095, - 1096 - ] - }, - { - "teal": 959, - "source": 390, - "pc": [ - 1097, - 1098, - 1099 - ] - }, - { - "teal": 964, - "source": 395, - "pc": [ - 1100, - 1101 - ] - }, - { - "teal": 968, - "source": 384, - "pc": [ - 1102, - 1103 - ] - }, - { - "teal": 971, - "source": 384, - "pc": [ - 1104, - 1105 - ] - }, - { - "teal": 972, - "source": 384, - "pc": [ - 1106 - ] - }, - { - "teal": 977, - "source": 406, - "pc": [ - 1107 - ] - }, - { - "teal": 980, - "source": 406, - "pc": [ - 1108, - 1109, - 1110 - ] - }, - { - "teal": 981, - "source": 406, - "pc": [ - 1111 - ] - }, - { - "teal": 984, - "source": 406, - "pc": [ - 1112, - 1113, - 1114 - ] - }, - { - "teal": 985, - "source": 406, - "pc": [ - 1115 - ] - }, - { - "teal": 986, - "source": 406, - "pc": [ - 1116 - ] - }, - { - "teal": 987, - "source": 406, - "pc": [ - 1117 - ] - }, - { - "teal": 988, - "source": 406, - "pc": [ - 1118 - ] - }, - { - "teal": 998, - "source": 406, - "pc": [ - 1119, - 1120, - 1121 - ] - }, - { - "teal": 1002, - "source": 407, - "pc": [ - 1122, - 1123 - ] - }, - { - "teal": 1003, - "source": 407, - "pc": [ - 1124, - 1125 - ] - }, - { - "teal": 1004, - "source": 407, - "pc": [ - 1126 - ] - }, - { - "teal": 1005, - "source": 407, - "pc": [ - 1127, - 1128 - ] - }, - { - "teal": 1006, - "source": 407, - "pc": [ - 1129 - ] - }, - { - "teal": 1007, - "source": 407, - "pc": [ - 1130 - ] - }, - { - "teal": 1008, - "source": 407, - "pc": [ - 1131, - 1132 - ] - }, - { - "teal": 1009, - "source": 407, - "pc": [ - 1133 - ] - }, - { - "teal": 1010, - "source": 406, - "pc": [ - 1134 - ] - }, - { - "teal": 1015, - "source": 411, - "pc": [ - 1135 - ] - }, - { - "teal": 1018, - "source": 411, - "pc": [ - 1136, - 1137, - 1138 - ] - }, - { - "teal": 1019, - "source": 411, - "pc": [ - 1139 - ] - }, - { - "teal": 1022, - "source": 411, - "pc": [ - 1140, - 1141, - 1142 - ] - }, - { - "teal": 1023, - "source": 411, - "pc": [ - 1143 - ] - }, - { - "teal": 1024, - "source": 411, - "pc": [ - 1144 - ] - }, - { - "teal": 1025, - "source": 411, - "pc": [ - 1145 - ] - }, - { - "teal": 1026, - "source": 411, - "pc": [ - 1146 - ] - }, - { - "teal": 1030, - "source": 411, - "pc": [ - 1147, - 1148, - 1149 - ] - }, - { - "teal": 1034, - "source": 412, - "pc": [ - 1150 - ] - }, - { - "teal": 1035, - "source": 412, - "pc": [ - 1151, - 1152 - ] - }, - { - "teal": 1036, - "source": 412, - "pc": [ - 1153 - ] - }, - { - "teal": 1037, - "source": 412, - "pc": [ - 1154 - ] - }, - { - "teal": 1038, - "source": 412, - "pc": [ - 1155 - ] - }, - { - "teal": 1039, - "source": 412, - "pc": [ - 1156 - ] - }, - { - "teal": 1040, - "source": 412, - "pc": [ - 1157 - ] - }, - { - "teal": 1043, - "source": 412, - "errorMessage": "the specified validator id doesn't exist", - "pc": [ - 1158 - ] - }, - { - "teal": 1047, - "source": 414, - "pc": [ - 1159, - 1160 - ] - }, - { - "teal": 1048, - "source": 414, - "pc": [ - 1161, - 1162 - ] - }, - { - "teal": 1049, - "source": 414, - "pc": [ - 1163 - ] - }, - { - "teal": 1050, - "source": 414, - "pc": [ - 1164, - 1165 - ] - }, - { - "teal": 1051, - "source": 414, - "pc": [ - 1166 - ] - }, - { - "teal": 1052, - "source": 414, - "pc": [ - 1167 - ] - }, - { - "teal": 1053, - "source": 414, - "pc": [ - 1168, - 1169 - ] - }, - { - "teal": 1054, - "source": 414, - "pc": [ - 1170 - ] - }, - { - "teal": 1055, - "source": 411, - "pc": [ - 1171 - ] - }, - { - "teal": 1060, - "source": 417, - "pc": [ - 1172 - ] - }, - { - "teal": 1063, - "source": 417, - "pc": [ - 1173, - 1174, - 1175 - ] - }, - { - "teal": 1064, - "source": 417, - "pc": [ - 1176 - ] - }, - { - "teal": 1065, - "source": 417, - "pc": [ - 1177 - ] - }, - { - "teal": 1066, - "source": 417, - "pc": [ - 1178 - ] - }, - { - "teal": 1067, - "source": 417, - "pc": [ - 1179 - ] - }, - { - "teal": 1068, - "source": 417, - "pc": [ - 1180 - ] - }, - { - "teal": 1072, - "source": 417, - "pc": [ - 1181, - 1182, - 1183 - ] - }, - { - "teal": 1076, - "source": 418, - "pc": [ - 1184, - 1185 - ] - }, - { - "teal": 1077, - "source": 417, - "pc": [ - 1186 - ] - }, - { - "teal": 1082, - "source": 429, - "pc": [ - 1187 - ] - }, - { - "teal": 1085, - "source": 429, - "pc": [ - 1188, - 1189, - 1190 - ] - }, - { - "teal": 1086, - "source": 429, - "pc": [ - 1191 - ] - }, - { - "teal": 1087, - "source": 429, - "pc": [ - 1192 - ] - }, - { - "teal": 1088, - "source": 429, - "pc": [ - 1193, - 1194 - ] - }, - { - "teal": 1089, - "source": 429, - "pc": [ - 1195 - ] - }, - { - "teal": 1092, - "source": 429, - "errorMessage": "argument 0 (config) for addValidator must be a (uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)", - "pc": [ - 1196 - ] - }, - { - "teal": 1095, - "source": 429, - "pc": [ - 1197, - 1198, - 1199 - ] - }, - { - "teal": 1096, - "source": 429, - "pc": [ - 1200, - 1201, - 1202 - ] - }, - { - "teal": 1099, - "source": 429, - "pc": [ - 1203, - 1204 - ] - }, - { - "teal": 1100, - "source": 429, - "pc": [ - 1205 - ] - }, - { - "teal": 1101, - "source": 429, - "pc": [ - 1206 - ] - }, - { - "teal": 1102, - "source": 429, - "pc": [ - 1207 - ] - }, - { - "teal": 1103, - "source": 429, - "pc": [ - 1208, - 1209 - ] - }, - { - "teal": 1104, - "source": 429, - "pc": [ - 1210 - ] - }, - { - "teal": 1105, - "source": 429, - "pc": [ - 1211 - ] - }, - { - "teal": 1108, - "source": 429, - "errorMessage": "argument 2 (mbrPayment) for addValidator must be a pay transaction", - "pc": [ - 1212 - ] - }, - { - "teal": 1111, - "source": 429, - "pc": [ - 1213, - 1214, - 1215 - ] - }, - { - "teal": 1112, - "source": 429, - "pc": [ - 1216 - ] - }, - { - "teal": 1113, - "source": 429, - "pc": [ - 1217 - ] - }, - { - "teal": 1114, - "source": 429, - "pc": [ - 1218 - ] - }, - { - "teal": 1115, - "source": 429, - "pc": [ - 1219 - ] - }, - { - "teal": 1116, - "source": 429, - "pc": [ - 1220 - ] - }, - { - "teal": 1128, - "source": 429, - "pc": [ - 1221, - 1222, - 1223 - ] - }, - { - "teal": 1131, - "source": 429, - "pc": [ - 1224 - ] - }, - { - "teal": 1135, - "source": 430, - "pc": [ - 1225, - 1226 - ] - }, - { - "teal": 1136, - "source": 430, - "pc": [ - 1227, - 1228, - 1229 - ] - }, - { - "teal": 1140, - "source": 431, - "pc": [ - 1230, - 1231 - ] - }, - { - "teal": 1141, - "source": 431, - "pc": [ - 1232, - 1233, - 1234 - ] - }, - { - "teal": 1142, - "source": 431, - "pc": [ - 1235, - 1236 - ] - }, - { - "teal": 1143, - "source": 431, - "pc": [ - 1237 - ] - }, - { - "teal": 1144, - "source": 431, - "pc": [ - 1238 - ] - }, - { - "teal": 1148, - "source": 432, - "pc": [ - 1239, - 1240 - ] - }, - { - "teal": 1149, - "source": 432, - "pc": [ - 1241, - 1242, - 1243 - ] - }, - { - "teal": 1150, - "source": 432, - "pc": [ - 1244, - 1245 - ] - }, - { - "teal": 1151, - "source": 432, - "pc": [ - 1246 - ] - }, - { - "teal": 1152, - "source": 432, - "pc": [ - 1247 - ] - }, - { - "teal": 1156, - "source": 433, - "pc": [ - 1248, - 1249 - ] - }, - { - "teal": 1157, - "source": 433, - "pc": [ - 1250, - 1251 - ] - }, - { - "teal": 1158, - "source": 433, - "pc": [ - 1252, - 1253, - 1254 - ] - }, - { - "teal": 1159, - "source": 433, - "pc": [ - 1255 - ] - }, - { - "teal": 1162, - "source": 433, - "errorMessage": "sender must be owner to add new validator", - "pc": [ - 1256 - ] - }, - { - "teal": 1167, - "source": 435, - "pc": [ - 1257, - 1258 - ] - }, - { - "teal": 1168, - "source": 435, - "pc": [ - 1259, - 1260 - ] - }, - { - "teal": 1169, - "source": 435, - "pc": [ - 1261, - 1262 - ] - }, - { - "teal": 1170, - "source": 435, - "pc": [ - 1263 - ] - }, - { - "teal": 1173, - "source": 435, - "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", - "pc": [ - 1264 - ] - }, - { - "teal": 1176, - "source": 435, - "pc": [ - 1265, - 1266 - ] - }, - { - "teal": 1177, - "source": 435, - "pc": [ - 1267, - 1268 - ] - }, - { - "teal": 1178, - "source": 435, - "pc": [ - 1269, - 1270, - 1271 - ] - }, - { - "teal": 1179, - "source": 435, - "pc": [ - 1272, - 1273, - 1274 - ] - }, - { - "teal": 1180, - "source": 435, - "pc": [ - 1275 - ] - }, - { - "teal": 1181, - "source": 435, - "pc": [ - 1276 - ] - }, - { - "teal": 1184, - "source": 435, - "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"amount\",\"expected\":\"this.getMbrAmounts().addValidatorMbr\"}", - "pc": [ - 1277 - ] - }, - { - "teal": 1188, - "source": 437, - "pc": [ - 1278, - 1279 - ] - }, - { - "teal": 1189, - "source": 437, - "pc": [ - 1280, - 1281 - ] - }, - { - "teal": 1190, - "source": 437, - "pc": [ - 1282, - 1283, - 1284, - 1285, - 1286 - ] - }, - { - "teal": 1191, - "source": 437, - "pc": [ - 1287 - ] - }, - { - "teal": 1194, - "source": 437, - "errorMessage": "fee must be 10 ALGO or more to prevent spamming of validators", - "pc": [ - 1288 - ] - }, - { - "teal": 1198, - "source": 440, - "pc": [ - 1289, - 1290 - ] - }, - { - "teal": 1199, - "source": 440, - "pc": [ - 1291 - ] - }, - { - "teal": 1200, - "source": 440, - "pc": [ - 1292 - ] - }, - { - "teal": 1201, - "source": 440, - "pc": [ - 1293 - ] - }, - { - "teal": 1202, - "source": 440, - "pc": [ - 1294, - 1295 - ] - }, - { - "teal": 1206, - "source": 441, - "pc": [ - 1296, - 1297 - ] - }, - { - "teal": 1207, - "source": 441, - "pc": [ - 1298, - 1299 - ] - }, - { - "teal": 1208, - "source": 441, - "pc": [ - 1300 - ] - }, - { - "teal": 1212, - "source": 443, - "pc": [ - 1301 - ] - }, - { - "teal": 1213, - "source": 443, - "pc": [ - 1302, - 1303 - ] - }, - { - "teal": 1214, - "source": 443, - "pc": [ - 1304 - ] - }, - { - "teal": 1215, - "source": 443, - "pc": [ - 1305 - ] - }, - { - "teal": 1216, - "source": 443, - "pc": [ - 1306, - 1307, - 1308 - ] - }, - { - "teal": 1217, - "source": 443, - "pc": [ - 1309 - ] - }, - { - "teal": 1218, - "source": 443, - "pc": [ - 1310 - ] - }, - { - "teal": 1222, - "source": 444, - "pc": [ - 1311 - ] - }, - { - "teal": 1223, - "source": 444, - "pc": [ - 1312, - 1313 - ] - }, - { - "teal": 1224, - "source": 444, - "pc": [ - 1314 - ] - }, - { - "teal": 1225, - "source": 444, - "pc": [ - 1315, - 1316 - ] - }, - { - "teal": 1226, - "source": 444, - "pc": [ - 1317 - ] - }, - { - "teal": 1227, - "source": 444, - "pc": [ - 1318 - ] - }, - { - "teal": 1228, - "source": 444, - "pc": [ - 1319, - 1320 - ] - }, - { - "teal": 1229, - "source": 444, - "pc": [ - 1321 - ] - }, - { - "teal": 1233, - "source": 445, - "pc": [ - 1322 - ] - }, - { - "teal": 1234, - "source": 445, - "pc": [ - 1323, - 1324 - ] - }, - { - "teal": 1235, - "source": 445, - "pc": [ - 1325 - ] - }, - { - "teal": 1236, - "source": 445, - "pc": [ - 1326 - ] - }, - { - "teal": 1237, - "source": 445, - "pc": [ - 1327, - 1328 - ] - }, - { - "teal": 1238, - "source": 445, - "pc": [ - 1329 - ] - }, - { - "teal": 1239, - "source": 445, - "pc": [ - 1330 - ] - }, - { - "teal": 1240, - "source": 445, - "pc": [ - 1331, - 1332 - ] - }, - { - "teal": 1241, - "source": 445, - "pc": [ - 1333 - ] - }, - { - "teal": 1246, - "source": 448, - "pc": [ - 1334, - 1335 - ] - }, - { - "teal": 1247, - "source": 448, - "pc": [ - 1336, - 1337, - 1338 - ] - }, - { - "teal": 1248, - "source": 448, - "pc": [ - 1339 - ] - }, - { - "teal": 1249, - "source": 448, - "pc": [ - 1340 - ] - }, - { - "teal": 1250, - "source": 448, - "pc": [ - 1341 - ] - }, - { - "teal": 1251, - "source": 448, - "pc": [ - 1342, - 1343, - 1344 - ] - }, - { - "teal": 1260, - "source": 450, - "pc": [ - 1345 - ] - }, - { - "teal": 1261, - "source": 450, - "pc": [ - 1346, - 1347 - ] - }, - { - "teal": 1262, - "source": 450, - "pc": [ - 1348, - 1349 - ] - }, - { - "teal": 1266, - "source": 451, - "pc": [ - 1350, - 1351 - ] - }, - { - "teal": 1267, - "source": 451, - "pc": [ - 1352, - 1353 - ] - }, - { - "teal": 1271, - "source": 452, - "pc": [ - 1354, - 1355 - ] - }, - { - "teal": 1272, - "source": 452, - "pc": [ - 1356, - 1357 - ] - }, - { - "teal": 1273, - "source": 452, - "pc": [ - 1358, - 1359 - ] - }, - { - "teal": 1274, - "source": 452, - "pc": [ - 1360, - 1361 - ] - }, - { - "teal": 1275, - "source": 452, - "pc": [ - 1362, - 1363 - ] - }, - { - "teal": 1276, - "source": 452, - "pc": [ - 1364, - 1365, - 1366 - ] - }, - { - "teal": 1277, - "source": 452, - "pc": [ - 1367 - ] - }, - { - "teal": 1278, - "source": 452, - "pc": [ - 1368 - ] - }, - { - "teal": 1279, - "source": 452, - "pc": [ - 1369, - 1370 - ] - }, - { - "teal": 1283, - "source": 453, - "pc": [ - 1371, - 1372 - ] - }, - { - "teal": 1284, - "source": 453, - "pc": [ - 1373, - 1374, - 1375 - ] - }, - { - "teal": 1285, - "source": 453, - "pc": [ - 1376 - ] - }, - { - "teal": 1286, - "source": 453, - "pc": [ - 1377, - 1378 - ] - }, - { - "teal": 1289, - "source": 450, - "pc": [ - 1379 - ] - }, - { - "teal": 1290, - "source": 450, - "pc": [ - 1380, - 1381 - ] - }, - { - "teal": 1293, - "source": 450, - "pc": [ - 1382 - ] - }, - { - "teal": 1297, - "source": 455, - "pc": [ - 1383, - 1384 - ] - }, - { - "teal": 1298, - "source": 455, - "pc": [ - 1385 - ] - }, - { - "teal": 1299, - "source": 455, - "pc": [ - 1386 - ] - }, - { - "teal": 1300, - "source": 455, - "pc": [ - 1387 - ] - }, - { - "teal": 1303, - "source": 455, - "errorMessage": "provided NFD isn't valid", - "pc": [ - 1388 - ] - }, - { - "teal": 1310, - "source": 458, - "pc": [ - 1389, - 1390 - ] - }, - { - "teal": 1311, - "source": 458, - "pc": [ - 1391, - 1392 - ] - }, - { - "teal": 1312, - "source": 458, - "pc": [ - 1393, - 1394, - 1395 - ] - }, - { - "teal": 1313, - "source": 458, - "pc": [ - 1396 - ] - }, - { - "teal": 1314, - "source": 458, - "pc": [ - 1397, - 1398 - ] - }, - { - "teal": 1315, - "source": 458, - "pc": [ - 1399 - ] - }, - { - "teal": 1318, - "source": 458, - "errorMessage": "global state value does not exist: AppID.fromUint64(config.nfdForInfo).globalState('i.owner.a')", - "pc": [ - 1400 - ] - }, - { - "teal": 1319, - "source": 458, - "pc": [ - 1401 - ] - }, - { - "teal": 1322, - "source": 457, - "errorMessage": "If specifying NFD, account adding validator must be owner", - "pc": [ - 1402 - ] - }, - { - "teal": 1329, - "source": 463, - "pc": [ - 1403, - 1404 - ] - }, - { - "teal": 1330, - "source": 463, - "pc": [ - 1405, - 1406, - 1407 - ] - }, - { - "teal": 1331, - "source": 463, - "pc": [ - 1408 - ] - }, - { - "teal": 1332, - "source": 463, - "pc": [ - 1409, - 1410 - ] - }, - { - "teal": 1333, - "source": 463, - "pc": [ - 1411 - ] - }, - { - "teal": 1334, - "source": 463, - "pc": [ - 1412 - ] - }, - { - "teal": 1335, - "source": 463, - "pc": [ - 1413, - 1414, - 1415 - ] - }, - { - "teal": 1336, - "source": 464, - "pc": [ - 1416, - 1417 - ] - }, - { - "teal": 1337, - "source": 464, - "pc": [ - 1418, - 1419, - 1420 - ] - }, - { - "teal": 1338, - "source": 464, - "pc": [ - 1421 - ] - }, - { - "teal": 1339, - "source": 464, - "pc": [ - 1422, - 1423 - ] - }, - { - "teal": 1340, - "source": 464, - "pc": [ - 1424 - ] - }, - { - "teal": 1341, - "source": 463, - "pc": [ - 1425 - ] - }, - { - "teal": 1344, - "source": 462, - "pc": [ - 1426, - 1427, - 1428 - ] - }, - { - "teal": 1352, - "source": 468, - "pc": [ - 1429, - 1430 - ] - }, - { - "teal": 1353, - "source": 468, - "pc": [ - 1431, - 1432, - 1433 - ] - }, - { - "teal": 1354, - "source": 468, - "pc": [ - 1434 - ] - }, - { - "teal": 1355, - "source": 468, - "pc": [ - 1435, - 1436, - 1437 - ] - }, - { - "teal": 1358, - "source": 467, - "errorMessage": "provided NFD App id for gating must be valid NFD", - "pc": [ - 1438 - ] - }, - { - "teal": 1363, - "source": 473, - "pc": [ - 1439, - 1440 - ] - }, - { - "teal": 1366, - "source": 429, - "pc": [ - 1441, - 1442 - ] - }, - { - "teal": 1367, - "source": 429, - "pc": [ - 1443 - ] - }, - { - "teal": 1372, - "source": 483, - "pc": [ - 1444, - 1445, - 1446 - ] - }, - { - "teal": 1373, - "source": 483, - "pc": [ - 1447 - ] - }, - { - "teal": 1374, - "source": 483, - "pc": [ - 1448 - ] - }, - { - "teal": 1375, - "source": 483, - "pc": [ - 1449, - 1450 - ] - }, - { - "teal": 1376, - "source": 483, - "pc": [ - 1451 - ] - }, - { - "teal": 1379, - "source": 483, - "errorMessage": "argument 0 (manager) for changeValidatorManager must be a address", - "pc": [ - 1452 - ] - }, - { - "teal": 1382, - "source": 483, - "pc": [ - 1453, - 1454, - 1455 - ] - }, - { - "teal": 1383, - "source": 483, - "pc": [ - 1456 - ] - }, - { - "teal": 1386, - "source": 483, - "pc": [ - 1457, - 1458, - 1459 - ] - }, - { - "teal": 1387, - "source": 483, - "pc": [ - 1460 - ] - }, - { - "teal": 1388, - "source": 483, - "pc": [ - 1461 - ] - }, - { - "teal": 1398, - "source": 483, - "pc": [ - 1462, - 1463, - 1464 - ] - }, - { - "teal": 1405, - "source": 485, - "pc": [ - 1465, - 1466 - ] - }, - { - "teal": 1406, - "source": 485, - "pc": [ - 1467 - ] - }, - { - "teal": 1407, - "source": 485, - "pc": [ - 1468, - 1469 - ] - }, - { - "teal": 1408, - "source": 485, - "pc": [ - 1470 - ] - }, - { - "teal": 1409, - "source": 485, - "pc": [ - 1471, - 1472 - ] - }, - { - "teal": 1410, - "source": 485, - "pc": [ - 1473 - ] - }, - { - "teal": 1411, - "source": 485, - "pc": [ - 1474 - ] - }, - { - "teal": 1412, - "source": 485, - "pc": [ - 1475, - 1476 - ] - }, - { - "teal": 1413, - "source": 485, - "pc": [ - 1477 - ] - }, - { - "teal": 1414, - "source": 485, - "pc": [ - 1478 - ] - }, - { - "teal": 1417, - "source": 484, - "errorMessage": "can only be called by validator owner", - "pc": [ - 1479 - ] - }, - { - "teal": 1421, - "source": 488, - "pc": [ - 1480, - 1481 - ] - }, - { - "teal": 1422, - "source": 488, - "pc": [ - 1482, - 1483 - ] - }, - { - "teal": 1423, - "source": 488, - "pc": [ - 1484 - ] - }, - { - "teal": 1424, - "source": 488, - "pc": [ - 1485, - 1486 - ] - }, - { - "teal": 1425, - "source": 488, - "pc": [ - 1487 - ] - }, - { - "teal": 1426, - "source": 488, - "pc": [ - 1488 - ] - }, - { - "teal": 1427, - "source": 488, - "pc": [ - 1489, - 1490 - ] - }, - { - "teal": 1428, - "source": 488, - "pc": [ - 1491 - ] - }, - { - "teal": 1429, - "source": 483, - "pc": [ - 1492 - ] - }, - { - "teal": 1434, - "source": 499, - "pc": [ - 1493, - 1494, - 1495 - ] - }, - { - "teal": 1435, - "source": 499, - "pc": [ - 1496 - ] - }, - { - "teal": 1438, - "source": 499, - "pc": [ - 1497, - 1498, - 1499 - ] - }, - { - "teal": 1439, - "source": 499, - "pc": [ - 1500 - ] - }, - { - "teal": 1442, - "source": 499, - "pc": [ - 1501, - 1502, - 1503 - ] - }, - { - "teal": 1443, - "source": 499, - "pc": [ - 1504 - ] - }, - { - "teal": 1446, - "source": 499, - "pc": [ - 1505, - 1506, - 1507 - ] - }, - { - "teal": 1447, - "source": 499, - "pc": [ - 1508 - ] - }, - { - "teal": 1448, - "source": 499, - "pc": [ - 1509 - ] - }, - { - "teal": 1459, - "source": 499, - "pc": [ - 1510, - 1511, - 1512 - ] - }, - { - "teal": 1466, - "source": 501, - "pc": [ - 1513, - 1514 - ] - }, - { - "teal": 1467, - "source": 501, - "pc": [ - 1515 - ] - }, - { - "teal": 1468, - "source": 501, - "pc": [ - 1516, - 1517 - ] - }, - { - "teal": 1469, - "source": 501, - "pc": [ - 1518 - ] - }, - { - "teal": 1470, - "source": 501, - "pc": [ - 1519, - 1520 - ] - }, - { - "teal": 1471, - "source": 501, - "pc": [ - 1521 - ] - }, - { - "teal": 1472, - "source": 501, - "pc": [ - 1522 - ] - }, - { - "teal": 1473, - "source": 501, - "pc": [ - 1523, - 1524 - ] - }, - { - "teal": 1474, - "source": 501, - "pc": [ - 1525 - ] - }, - { - "teal": 1475, - "source": 501, - "pc": [ - 1526 - ] - }, - { - "teal": 1478, - "source": 500, - "errorMessage": "can only be called by validator owner", - "pc": [ - 1527 - ] - }, - { - "teal": 1482, - "source": 504, - "pc": [ - 1528, - 1529 - ] - }, - { - "teal": 1483, - "source": 504, - "pc": [ - 1530, - 1531 - ] - }, - { - "teal": 1484, - "source": 504, - "pc": [ - 1532 - ] - }, - { - "teal": 1485, - "source": 504, - "pc": [ - 1533 - ] - }, - { - "teal": 1486, - "source": 504, - "pc": [ - 1534, - 1535 - ] - }, - { - "teal": 1487, - "source": 504, - "pc": [ - 1536 - ] - }, - { - "teal": 1488, - "source": 504, - "pc": [ - 1537 - ] - }, - { - "teal": 1489, - "source": 504, - "pc": [ - 1538, - 1539 - ] - }, - { - "teal": 1490, - "source": 504, - "pc": [ - 1540 - ] - }, - { - "teal": 1494, - "source": 505, - "pc": [ - 1541, - 1542, - 1543 - ] - }, - { - "teal": 1495, - "source": 505, - "pc": [ - 1544, - 1545 - ] - }, - { - "teal": 1496, - "source": 505, - "pc": [ - 1546 - ] - }, - { - "teal": 1497, - "source": 505, - "pc": [ - 1547 - ] - }, - { - "teal": 1498, - "source": 505, - "pc": [ - 1548, - 1549 - ] - }, - { - "teal": 1499, - "source": 505, - "pc": [ - 1550 - ] - }, - { - "teal": 1500, - "source": 505, - "pc": [ - 1551 - ] - }, - { - "teal": 1501, - "source": 505, - "pc": [ - 1552, - 1553 - ] - }, - { - "teal": 1502, - "source": 505, - "pc": [ - 1554 - ] - }, - { - "teal": 1503, - "source": 499, - "pc": [ - 1555 - ] - }, - { - "teal": 1508, - "source": 516, - "pc": [ - 1556, - 1557, - 1558 - ] - }, - { - "teal": 1509, - "source": 516, - "pc": [ - 1559, - 1560, - 1561 - ] - }, - { - "teal": 1512, - "source": 516, - "pc": [ - 1562, - 1563, - 1564 - ] - }, - { - "teal": 1513, - "source": 516, - "pc": [ - 1565 - ] - }, - { - "teal": 1516, - "source": 516, - "pc": [ - 1566, - 1567, - 1568 - ] - }, - { - "teal": 1517, - "source": 516, - "pc": [ - 1569 - ] - }, - { - "teal": 1520, - "source": 516, - "pc": [ - 1570, - 1571, - 1572 - ] - }, - { - "teal": 1521, - "source": 516, - "pc": [ - 1573 - ] - }, - { - "teal": 1522, - "source": 516, - "pc": [ - 1574 - ] - }, - { - "teal": 1533, - "source": 516, - "pc": [ - 1575, - 1576, - 1577 - ] - }, - { - "teal": 1540, - "source": 519, - "pc": [ - 1578, - 1579 - ] - }, - { - "teal": 1541, - "source": 519, - "pc": [ - 1580 - ] - }, - { - "teal": 1542, - "source": 519, - "pc": [ - 1581, - 1582 - ] - }, - { - "teal": 1543, - "source": 519, - "pc": [ - 1583 - ] - }, - { - "teal": 1544, - "source": 519, - "pc": [ - 1584, - 1585 - ] - }, - { - "teal": 1545, - "source": 519, - "pc": [ - 1586 - ] - }, - { - "teal": 1546, - "source": 519, - "pc": [ - 1587 - ] - }, - { - "teal": 1547, - "source": 519, - "pc": [ - 1588, - 1589 - ] - }, - { - "teal": 1548, - "source": 519, - "pc": [ - 1590 - ] - }, - { - "teal": 1549, - "source": 519, - "pc": [ - 1591 - ] - }, - { - "teal": 1552, - "source": 518, - "errorMessage": "can only be called by validator owner", - "pc": [ - 1592 - ] - }, - { - "teal": 1560, - "source": 523, - "pc": [ - 1593 - ] - }, - { - "teal": 1561, - "source": 523, - "pc": [ - 1594, - 1595 - ] - }, - { - "teal": 1562, - "source": 523, - "pc": [ - 1596, - 1597 - ] - }, - { - "teal": 1566, - "source": 524, - "pc": [ - 1598, - 1599 - ] - }, - { - "teal": 1567, - "source": 524, - "pc": [ - 1600, - 1601 - ] - }, - { - "teal": 1571, - "source": 525, - "pc": [ - 1602, - 1603 - ] - }, - { - "teal": 1572, - "source": 525, - "pc": [ - 1604, - 1605 - ] - }, - { - "teal": 1573, - "source": 525, - "pc": [ - 1606, - 1607 - ] - }, - { - "teal": 1574, - "source": 525, - "pc": [ - 1608, - 1609 - ] - }, - { - "teal": 1575, - "source": 525, - "pc": [ - 1610, - 1611 - ] - }, - { - "teal": 1576, - "source": 525, - "pc": [ - 1612 - ] - }, - { - "teal": 1577, - "source": 525, - "pc": [ - 1613, - 1614 - ] - }, - { - "teal": 1581, - "source": 526, - "pc": [ - 1615, - 1616 - ] - }, - { - "teal": 1582, - "source": 526, - "pc": [ - 1617, - 1618 - ] - }, - { - "teal": 1585, - "source": 523, - "pc": [ - 1619 - ] - }, - { - "teal": 1586, - "source": 523, - "pc": [ - 1620, - 1621 - ] - }, - { - "teal": 1589, - "source": 523, - "pc": [ - 1622 - ] - }, - { - "teal": 1596, - "source": 530, - "pc": [ - 1623, - 1624 - ] - }, - { - "teal": 1597, - "source": 530, - "pc": [ - 1625, - 1626 - ] - }, - { - "teal": 1598, - "source": 530, - "pc": [ - 1627, - 1628 - ] - }, - { - "teal": 1599, - "source": 530, - "pc": [ - 1629 - ] - }, - { - "teal": 1602, - "source": 530, - "errorMessage": "global state value does not exist: AppID.fromUint64(nfdAppID).globalState('i.owner.a')", - "pc": [ - 1630 - ] - }, - { - "teal": 1603, - "source": 530, - "pc": [ - 1631 - ] - }, - { - "teal": 1606, - "source": 529, - "errorMessage": "If specifying NFD, account adding validator must be owner", - "pc": [ - 1632 - ] - }, - { - "teal": 1610, - "source": 533, - "pc": [ - 1633, - 1634 - ] - }, - { - "teal": 1611, - "source": 533, - "pc": [ - 1635, - 1636 - ] - }, - { - "teal": 1612, - "source": 533, - "pc": [ - 1637 - ] - }, - { - "teal": 1613, - "source": 533, - "pc": [ - 1638 - ] - }, - { - "teal": 1614, - "source": 533, - "pc": [ - 1639, - 1640 - ] - }, - { - "teal": 1615, - "source": 533, - "pc": [ - 1641 - ] - }, - { - "teal": 1616, - "source": 533, - "pc": [ - 1642 - ] - }, - { - "teal": 1617, - "source": 533, - "pc": [ - 1643, - 1644 - ] - }, - { - "teal": 1618, - "source": 533, - "pc": [ - 1645 - ] - }, - { - "teal": 1619, - "source": 516, - "pc": [ - 1646 - ] - }, - { - "teal": 1624, - "source": 540, - "pc": [ - 1647, - 1648, - 1649 - ] - }, - { - "teal": 1625, - "source": 540, - "pc": [ - 1650 - ] - }, - { - "teal": 1626, - "source": 540, - "pc": [ - 1651 - ] - }, - { - "teal": 1627, - "source": 540, - "pc": [ - 1652, - 1653 - ] - }, - { - "teal": 1628, - "source": 540, - "pc": [ - 1654 - ] - }, - { - "teal": 1631, - "source": 540, - "errorMessage": "argument 0 (commissionAddress) for changeValidatorCommissionAddress must be a address", - "pc": [ - 1655 - ] - }, - { - "teal": 1634, - "source": 540, - "pc": [ - 1656, - 1657, - 1658 - ] - }, - { - "teal": 1635, - "source": 540, - "pc": [ - 1659 - ] - }, - { - "teal": 1638, - "source": 540, - "pc": [ - 1660, - 1661, - 1662 - ] - }, - { - "teal": 1639, - "source": 540, - "pc": [ - 1663 - ] - }, - { - "teal": 1640, - "source": 540, - "pc": [ - 1664 - ] - }, - { - "teal": 1647, - "source": 540, - "pc": [ - 1665, - 1666, - 1667 - ] - }, - { - "teal": 1654, - "source": 542, - "pc": [ - 1668, - 1669 - ] - }, - { - "teal": 1655, - "source": 542, - "pc": [ - 1670 - ] - }, - { - "teal": 1656, - "source": 542, - "pc": [ - 1671, - 1672 - ] - }, - { - "teal": 1657, - "source": 542, - "pc": [ - 1673 - ] - }, - { - "teal": 1658, - "source": 542, - "pc": [ - 1674, - 1675 - ] - }, - { - "teal": 1659, - "source": 542, - "pc": [ - 1676 - ] - }, - { - "teal": 1660, - "source": 542, - "pc": [ - 1677 - ] - }, - { - "teal": 1661, - "source": 542, - "pc": [ - 1678, - 1679 - ] - }, - { - "teal": 1662, - "source": 542, - "pc": [ - 1680 - ] - }, - { - "teal": 1663, - "source": 542, - "pc": [ - 1681 - ] - }, - { - "teal": 1666, - "source": 541, - "errorMessage": "can only be called by validator owner", - "pc": [ - 1682 - ] - }, - { - "teal": 1670, - "source": 545, - "pc": [ - 1683, - 1684 - ] - }, - { - "teal": 1671, - "source": 545, - "pc": [ - 1685, - 1686 - ] - }, - { - "teal": 1672, - "source": 545, - "pc": [ - 1687 - ] - }, - { - "teal": 1673, - "source": 545, - "pc": [ - 1688 - ] - }, - { - "teal": 1677, - "source": 546, - "pc": [ - 1689, - 1690, - 1691 - ] - }, - { - "teal": 1678, - "source": 546, - "pc": [ - 1692, - 1693 - ] - }, - { - "teal": 1679, - "source": 546, - "pc": [ - 1694 - ] - }, - { - "teal": 1680, - "source": 546, - "pc": [ - 1695, - 1696 - ] - }, - { - "teal": 1681, - "source": 546, - "pc": [ - 1697 - ] - }, - { - "teal": 1682, - "source": 546, - "pc": [ - 1698 - ] - }, - { - "teal": 1683, - "source": 546, - "pc": [ - 1699, - 1700 - ] - }, - { - "teal": 1684, - "source": 546, - "pc": [ - 1701 - ] - }, - { - "teal": 1685, - "source": 540, - "pc": [ - 1702 - ] - }, - { - "teal": 1690, - "source": 559, - "pc": [ - 1703, - 1704, - 1705 - ] - }, - { - "teal": 1691, - "source": 559, - "pc": [ - 1706 - ] - }, - { - "teal": 1694, - "source": 558, - "pc": [ - 1707, - 1708, - 1709 - ] - }, - { - "teal": 1695, - "source": 558, - "pc": [ - 1710 - ] - }, - { - "teal": 1698, - "source": 557, - "pc": [ - 1711, - 1712, - 1713 - ] - }, - { - "teal": 1699, - "source": 557, - "pc": [ - 1714 - ] - }, - { - "teal": 1700, - "source": 557, - "pc": [ - 1715 - ] - }, - { - "teal": 1701, - "source": 557, - "pc": [ - 1716, - 1717 - ] - }, - { - "teal": 1702, - "source": 557, - "pc": [ - 1718 - ] - }, - { - "teal": 1705, - "source": 557, - "errorMessage": "argument 2 (EntryGatingAssets) for changeValidatorRewardInfo must be a uint64[4]", - "pc": [ - 1719 - ] - }, - { - "teal": 1708, - "source": 556, - "pc": [ - 1720, - 1721, - 1722 - ] - }, - { - "teal": 1709, - "source": 556, - "pc": [ - 1723 - ] - }, - { - "teal": 1710, - "source": 556, - "pc": [ - 1724 - ] - }, - { - "teal": 1711, - "source": 556, - "pc": [ - 1725, - 1726 - ] - }, - { - "teal": 1712, - "source": 556, - "pc": [ - 1727 - ] - }, - { - "teal": 1715, - "source": 556, - "errorMessage": "argument 3 (EntryGatingAddress) for changeValidatorRewardInfo must be a address", - "pc": [ - 1728 - ] - }, - { - "teal": 1718, - "source": 555, - "pc": [ - 1729, - 1730, - 1731 - ] - }, - { - "teal": 1719, - "source": 555, - "pc": [ - 1732 - ] - }, - { - "teal": 1720, - "source": 555, - "pc": [ - 1733 - ] - }, - { - "teal": 1721, - "source": 555, - "pc": [ - 1734 - ] - }, - { - "teal": 1722, - "source": 555, - "pc": [ - 1735 - ] - }, - { - "teal": 1725, - "source": 555, - "errorMessage": "argument 4 (EntryGatingType) for changeValidatorRewardInfo must be a uint8", - "pc": [ - 1736 - ] - }, - { - "teal": 1726, - "source": 555, - "pc": [ - 1737 - ] - }, - { - "teal": 1729, - "source": 554, - "pc": [ - 1738, - 1739, - 1740 - ] - }, - { - "teal": 1730, - "source": 554, - "pc": [ - 1741 - ] - }, - { - "teal": 1733, - "source": 553, - "pc": [ - 1742, - 1743, - 1744 - ] - }, - { - "teal": 1734, - "source": 553, - "pc": [ - 1745 - ] - }, - { - "teal": 1735, - "source": 553, - "pc": [ - 1746 - ] - }, - { - "teal": 1742, - "source": 553, - "pc": [ - 1747, - 1748, - 1749 - ] - }, - { - "teal": 1749, - "source": 562, - "pc": [ - 1750, - 1751 - ] - }, - { - "teal": 1750, - "source": 562, - "pc": [ - 1752 - ] - }, - { - "teal": 1751, - "source": 562, - "pc": [ - 1753, - 1754 - ] - }, - { - "teal": 1752, - "source": 562, - "pc": [ - 1755 - ] - }, - { - "teal": 1753, - "source": 562, - "pc": [ - 1756, - 1757 - ] - }, - { - "teal": 1754, - "source": 562, - "pc": [ - 1758 - ] - }, - { - "teal": 1755, - "source": 562, - "pc": [ - 1759 - ] - }, - { - "teal": 1756, - "source": 562, - "pc": [ - 1760, - 1761 - ] - }, - { - "teal": 1757, - "source": 562, - "pc": [ - 1762 - ] - }, - { - "teal": 1758, - "source": 562, - "pc": [ - 1763 - ] - }, - { - "teal": 1761, - "source": 561, - "errorMessage": "can only be called by validator owner", - "pc": [ - 1764 - ] - }, - { - "teal": 1765, - "source": 566, - "pc": [ - 1765, - 1766 - ] - }, - { - "teal": 1766, - "source": 566, - "pc": [ - 1767, - 1768 - ] - }, - { - "teal": 1767, - "source": 566, - "pc": [ - 1769 - ] - }, - { - "teal": 1768, - "source": 566, - "pc": [ - 1770, - 1771, - 1772 - ] - }, - { - "teal": 1769, - "source": 566, - "pc": [ - 1773 - ] - }, - { - "teal": 1770, - "source": 566, - "pc": [ - 1774, - 1775 - ] - }, - { - "teal": 1771, - "source": 566, - "pc": [ - 1776 - ] - }, - { - "teal": 1772, - "source": 566, - "pc": [ - 1777 - ] - }, - { - "teal": 1773, - "source": 566, - "pc": [ - 1778, - 1779 - ] - }, - { - "teal": 1774, - "source": 566, - "pc": [ - 1780 - ] - }, - { - "teal": 1778, - "source": 567, - "pc": [ - 1781, - 1782 - ] - }, - { - "teal": 1779, - "source": 567, - "pc": [ - 1783, - 1784 - ] - }, - { - "teal": 1780, - "source": 567, - "pc": [ - 1785 - ] - }, - { - "teal": 1781, - "source": 567, - "pc": [ - 1786, - 1787 - ] - }, - { - "teal": 1782, - "source": 567, - "pc": [ - 1788 - ] - }, - { - "teal": 1783, - "source": 567, - "pc": [ - 1789 - ] - }, - { - "teal": 1784, - "source": 567, - "pc": [ - 1790, - 1791 - ] - }, - { - "teal": 1785, - "source": 567, - "pc": [ - 1792 - ] - }, - { - "teal": 1789, - "source": 568, - "pc": [ - 1793, - 1794 - ] - }, - { - "teal": 1790, - "source": 568, - "pc": [ - 1795, - 1796 - ] - }, - { - "teal": 1791, - "source": 568, - "pc": [ - 1797 - ] - }, - { - "teal": 1792, - "source": 568, - "pc": [ - 1798, - 1799 - ] - }, - { - "teal": 1793, - "source": 568, - "pc": [ - 1800 - ] - }, - { - "teal": 1794, - "source": 568, - "pc": [ - 1801 - ] - }, - { - "teal": 1795, - "source": 568, - "pc": [ - 1802, - 1803 - ] - }, - { - "teal": 1796, - "source": 568, - "pc": [ - 1804 - ] - }, - { - "teal": 1800, - "source": 569, - "pc": [ - 1805, - 1806 - ] - }, - { - "teal": 1801, - "source": 569, - "pc": [ - 1807, - 1808 - ] - }, - { - "teal": 1802, - "source": 569, - "pc": [ - 1809 - ] - }, - { - "teal": 1803, - "source": 569, - "pc": [ - 1810 - ] - }, - { - "teal": 1804, - "source": 569, - "pc": [ - 1811, - 1812 - ] - }, - { - "teal": 1805, - "source": 569, - "pc": [ - 1813 - ] - }, - { - "teal": 1806, - "source": 569, - "pc": [ - 1814 - ] - }, - { - "teal": 1807, - "source": 569, - "pc": [ - 1815, - 1816 - ] - }, - { - "teal": 1808, - "source": 569, - "pc": [ - 1817 - ] - }, - { - "teal": 1812, - "source": 570, - "pc": [ - 1818, - 1819, - 1820 - ] - }, - { - "teal": 1813, - "source": 570, - "pc": [ - 1821, - 1822 - ] - }, - { - "teal": 1814, - "source": 570, - "pc": [ - 1823 - ] - }, - { - "teal": 1815, - "source": 570, - "pc": [ - 1824 - ] - }, - { - "teal": 1816, - "source": 570, - "pc": [ - 1825, - 1826 - ] - }, - { - "teal": 1817, - "source": 570, - "pc": [ - 1827 - ] - }, - { - "teal": 1818, - "source": 570, - "pc": [ - 1828 - ] - }, - { - "teal": 1819, - "source": 570, - "pc": [ - 1829, - 1830 - ] - }, - { - "teal": 1820, - "source": 570, - "pc": [ - 1831 - ] - }, - { - "teal": 1821, - "source": 553, - "pc": [ - 1832 - ] - }, - { - "teal": 1826, - "source": 584, - "pc": [ - 1833 - ] - }, - { - "teal": 1829, - "source": 584, - "pc": [ - 1834, - 1835, - 1836 - ] - }, - { - "teal": 1830, - "source": 584, - "pc": [ - 1837 - ] - }, - { - "teal": 1833, - "source": 584, - "pc": [ - 1838, - 1839, - 1840 - ] - }, - { - "teal": 1834, - "source": 584, - "pc": [ - 1841 - ] - }, - { - "teal": 1837, - "source": 584, - "pc": [ - 1842, - 1843 - ] - }, - { - "teal": 1838, - "source": 584, - "pc": [ - 1844 - ] - }, - { - "teal": 1839, - "source": 584, - "pc": [ - 1845 - ] - }, - { - "teal": 1840, - "source": 584, - "pc": [ - 1846 - ] - }, - { - "teal": 1841, - "source": 584, - "pc": [ - 1847, - 1848 - ] - }, - { - "teal": 1842, - "source": 584, - "pc": [ - 1849 - ] - }, - { - "teal": 1843, - "source": 584, - "pc": [ - 1850 - ] - }, - { - "teal": 1846, - "source": 584, - "errorMessage": "argument 2 (mbrPayment) for addPool must be a pay transaction", - "pc": [ - 1851 - ] - }, - { - "teal": 1849, - "source": 584, - "pc": [ - 1852, - 1853, - 1854 - ] - }, - { - "teal": 1850, - "source": 584, - "pc": [ - 1855 - ] - }, - { - "teal": 1851, - "source": 584, - "pc": [ - 1856 - ] - }, - { - "teal": 1852, - "source": 584, - "pc": [ - 1857 - ] - }, - { - "teal": 1853, - "source": 584, - "pc": [ - 1858 - ] - }, - { - "teal": 1866, - "source": 584, - "pc": [ - 1859, - 1860, - 1861 - ] - }, - { - "teal": 1869, - "source": 584, - "pc": [ - 1862 - ] - }, - { - "teal": 1870, - "source": 584, - "pc": [ - 1863 - ] - }, - { - "teal": 1878, - "source": 587, - "pc": [ - 1864, - 1865 - ] - }, - { - "teal": 1879, - "source": 587, - "pc": [ - 1866 - ] - }, - { - "teal": 1880, - "source": 587, - "pc": [ - 1867, - 1868 - ] - }, - { - "teal": 1881, - "source": 587, - "pc": [ - 1869 - ] - }, - { - "teal": 1882, - "source": 587, - "pc": [ - 1870, - 1871 - ] - }, - { - "teal": 1883, - "source": 587, - "pc": [ - 1872 - ] - }, - { - "teal": 1884, - "source": 587, - "pc": [ - 1873 - ] - }, - { - "teal": 1885, - "source": 587, - "pc": [ - 1874, - 1875 - ] - }, - { - "teal": 1886, - "source": 587, - "pc": [ - 1876 - ] - }, - { - "teal": 1887, - "source": 587, - "pc": [ - 1877 - ] - }, - { - "teal": 1888, - "source": 587, - "pc": [ - 1878 - ] - }, - { - "teal": 1889, - "source": 587, - "pc": [ - 1879, - 1880, - 1881 - ] - }, - { - "teal": 1890, - "source": 588, - "pc": [ - 1882, - 1883 - ] - }, - { - "teal": 1891, - "source": 588, - "pc": [ - 1884, - 1885 - ] - }, - { - "teal": 1892, - "source": 588, - "pc": [ - 1886, - 1887 - ] - }, - { - "teal": 1893, - "source": 588, - "pc": [ - 1888 - ] - }, - { - "teal": 1894, - "source": 588, - "pc": [ - 1889, - 1890 - ] - }, - { - "teal": 1895, - "source": 588, - "pc": [ - 1891 - ] - }, - { - "teal": 1896, - "source": 588, - "pc": [ - 1892 - ] - }, - { - "teal": 1897, - "source": 588, - "pc": [ - 1893, - 1894 - ] - }, - { - "teal": 1898, - "source": 588, - "pc": [ - 1895 - ] - }, - { - "teal": 1899, - "source": 588, - "pc": [ - 1896 - ] - }, - { - "teal": 1900, - "source": 587, - "pc": [ - 1897 - ] - }, - { - "teal": 1904, - "source": 586, - "errorMessage": "can only be called by owner or manager of validator", - "pc": [ - 1898 - ] - }, - { - "teal": 1909, - "source": 593, - "pc": [ - 1899, - 1900 - ] - }, - { - "teal": 1910, - "source": 593, - "pc": [ - 1901, - 1902 - ] - }, - { - "teal": 1911, - "source": 593, - "pc": [ - 1903, - 1904 - ] - }, - { - "teal": 1912, - "source": 593, - "pc": [ - 1905 - ] - }, - { - "teal": 1915, - "source": 593, - "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", - "pc": [ - 1906 - ] - }, - { - "teal": 1918, - "source": 593, - "pc": [ - 1907, - 1908 - ] - }, - { - "teal": 1919, - "source": 593, - "pc": [ - 1909, - 1910 - ] - }, - { - "teal": 1920, - "source": 593, - "pc": [ - 1911, - 1912, - 1913 - ] - }, - { - "teal": 1921, - "source": 593, - "pc": [ - 1914, - 1915, - 1916 - ] - }, - { - "teal": 1922, - "source": 593, - "pc": [ - 1917 - ] - }, - { - "teal": 1923, - "source": 593, - "pc": [ - 1918 - ] - }, - { - "teal": 1926, - "source": 593, - "errorMessage": "transaction verification failed: {\"txn\":\"mbrPayment\",\"field\":\"amount\",\"expected\":\"this.getMbrAmounts().addPoolMbr\"}", - "pc": [ - 1919 - ] - }, - { - "teal": 1930, - "source": 595, - "pc": [ - 1920 - ] - }, - { - "teal": 1931, - "source": 595, - "pc": [ - 1921, - 1922 - ] - }, - { - "teal": 1932, - "source": 595, - "pc": [ - 1923 - ] - }, - { - "teal": 1933, - "source": 595, - "pc": [ - 1924 - ] - }, - { - "teal": 1934, - "source": 595, - "pc": [ - 1925 - ] - }, - { - "teal": 1935, - "source": 595, - "pc": [ - 1926 - ] - }, - { - "teal": 1936, - "source": 595, - "pc": [ - 1927 - ] - }, - { - "teal": 1939, - "source": 595, - "errorMessage": "specified validator id isn't valid", - "pc": [ - 1928 - ] - }, - { - "teal": 1943, - "source": 597, - "pc": [ - 1929, - 1930 - ] - }, - { - "teal": 1944, - "source": 597, - "pc": [ - 1931, - 1932 - ] - }, - { - "teal": 1945, - "source": 597, - "pc": [ - 1933 - ] - }, - { - "teal": 1946, - "source": 597, - "pc": [ - 1934, - 1935 - ] - }, - { - "teal": 1947, - "source": 597, - "pc": [ - 1936 - ] - }, - { - "teal": 1948, - "source": 597, - "pc": [ - 1937 - ] - }, - { - "teal": 1949, - "source": 597, - "pc": [ - 1938, - 1939 - ] - }, - { - "teal": 1950, - "source": 597, - "pc": [ - 1940 - ] - }, - { - "teal": 1951, - "source": 597, - "pc": [ - 1941 - ] - }, - { - "teal": 1952, - "source": 597, - "pc": [ - 1942, - 1943 - ] - }, - { - "teal": 1957, - "source": 598, - "pc": [ - 1944, - 1945 - ] - }, - { - "teal": 1958, - "source": 29, - "pc": [ - 1946 - ] - }, - { - "teal": 1959, - "source": 598, - "pc": [ - 1947 - ] - }, - { - "teal": 1960, - "source": 598, - "pc": [ - 1948, - 1949, - 1950 - ] - }, - { - "teal": 1964, - "source": 599, - "errorMessage": "already at max pool size", - "pc": [ - 1951 - ] - }, - { - "teal": 1969, - "source": 601, - "pc": [ - 1952, - 1953 - ] - }, - { - "teal": 1970, - "source": 601, - "pc": [ - 1954 - ] - }, - { - "teal": 1971, - "source": 601, - "pc": [ - 1955 - ] - }, - { - "teal": 1972, - "source": 601, - "pc": [ - 1956, - 1957 - ] - }, - { - "teal": 1994, - "source": 604, - "pc": [ - 1958 - ] - }, - { - "teal": 1995, - "source": 604, - "pc": [ - 1959, - 1960 - ] - }, - { - "teal": 1996, - "source": 604, - "pc": [ - 1961, - 1962 - ] - }, - { - "teal": 2000, - "source": 605, - "pc": [ - 1963 - ] - }, - { - "teal": 2001, - "source": 605, - "pc": [ - 1964, - 1965 - ] - }, - { - "teal": 2008, - "source": 607, - "pc": [ - 1966, - 1967 - ] - }, - { - "teal": 2009, - "source": 607, - "pc": [ - 1968 - ] - }, - { - "teal": 2010, - "source": 607, - "pc": [ - 1969, - 1970 - ] - }, - { - "teal": 2011, - "source": 607, - "pc": [ - 1971 - ] - }, - { - "teal": 2012, - "source": 607, - "pc": [ - 1972, - 1973 - ] - }, - { - "teal": 2013, - "source": 608, - "pc": [ - 1974, - 1975 - ] - }, - { - "teal": 2014, - "source": 608, - "pc": [ - 1976, - 1977 - ] - }, - { - "teal": 2015, - "source": 608, - "pc": [ - 1978, - 1979 - ] - }, - { - "teal": 2016, - "source": 608, - "pc": [ - 1980 - ] - }, - { - "teal": 2019, - "source": 608, - "errorMessage": "box value does not exist: this.stakingPoolApprovalProgram.size", - "pc": [ - 1981 - ] - }, - { - "teal": 2020, - "source": 608, - "pc": [ - 1982, - 1983 - ] - }, - { - "teal": 2021, - "source": 608, - "pc": [ - 1984 - ] - }, - { - "teal": 2022, - "source": 608, - "pc": [ - 1985 - ] - }, - { - "teal": 2023, - "source": 608, - "pc": [ - 1986, - 1987 - ] - }, - { - "teal": 2027, - "source": 610, - "pc": [ - 1988, - 1989, - 1990 - ] - }, - { - "teal": 2028, - "source": 610, - "pc": [ - 1991, - 1992 - ] - }, - { - "teal": 2032, - "source": 611, - "pc": [ - 1993, - 1994 - ] - }, - { - "teal": 2033, - "source": 611, - "pc": [ - 1995, - 1996 - ] - }, - { - "teal": 2037, - "source": 612, - "pc": [ - 1997, - 1998 - ] - }, - { - "teal": 2038, - "source": 612, - "pc": [ - 1999, - 2000 - ] - }, - { - "teal": 2042, - "source": 613, - "pc": [ - 2001, - 2002 - ] - }, - { - "teal": 2043, - "source": 613, - "pc": [ - 2003, - 2004 - ] - }, - { - "teal": 2054, - "source": 616, - "pc": [ - 2005, - 2006, - 2007, - 2008, - 2009, - 2010 - ] - }, - { - "teal": 2055, - "source": 616, - "pc": [ - 2011, - 2012 - ] - }, - { - "teal": 2056, - "source": 617, - "pc": [ - 2013, - 2014, - 2015 - ] - }, - { - "teal": 2057, - "source": 617, - "pc": [ - 2016 - ] - }, - { - "teal": 2058, - "source": 617, - "pc": [ - 2017, - 2018 - ] - }, - { - "teal": 2059, - "source": 618, - "pc": [ - 2019, - 2020 - ] - }, - { - "teal": 2060, - "source": 618, - "pc": [ - 2021 - ] - }, - { - "teal": 2061, - "source": 618, - "pc": [ - 2022, - 2023 - ] - }, - { - "teal": 2062, - "source": 619, - "pc": [ - 2024, - 2025 - ] - }, - { - "teal": 2063, - "source": 619, - "pc": [ - 2026 - ] - }, - { - "teal": 2064, - "source": 619, - "pc": [ - 2027, - 2028 - ] - }, - { - "teal": 2065, - "source": 620, - "pc": [ - 2029, - 2030 - ] - }, - { - "teal": 2066, - "source": 620, - "pc": [ - 2031 - ] - }, - { - "teal": 2067, - "source": 620, - "pc": [ - 2032 - ] - }, - { - "teal": 2068, - "source": 620, - "pc": [ - 2033, - 2034 - ] - }, - { - "teal": 2069, - "source": 620, - "pc": [ - 2035 - ] - }, - { - "teal": 2070, - "source": 620, - "pc": [ - 2036 - ] - }, - { - "teal": 2071, - "source": 620, - "pc": [ - 2037, - 2038 - ] - }, - { - "teal": 2072, - "source": 620, - "pc": [ - 2039 - ] - }, - { - "teal": 2073, - "source": 620, - "pc": [ - 2040 - ] - }, - { - "teal": 2074, - "source": 620, - "pc": [ - 2041 - ] - }, - { - "teal": 2075, - "source": 620, - "pc": [ - 2042, - 2043 - ] - }, - { - "teal": 2078, - "source": 604, - "pc": [ - 2044 - ] - }, - { - "teal": 2079, - "source": 604, - "pc": [ - 2045, - 2046 - ] - }, - { - "teal": 2082, - "source": 604, - "pc": [ - 2047 - ] - }, - { - "teal": 2086, - "source": 624, - "pc": [ - 2048, - 2049 - ] - }, - { - "teal": 2087, - "source": 624, - "pc": [ - 2050, - 2051 - ] - }, - { - "teal": 2088, - "source": 624, - "pc": [ - 2052 - ] - }, - { - "teal": 2089, - "source": 624, - "pc": [ - 2053, - 2054, - 2055 - ] - }, - { - "teal": 2090, - "source": 624, - "pc": [ - 2056 - ] - }, - { - "teal": 2091, - "source": 624, - "pc": [ - 2057, - 2058 - ] - }, - { - "teal": 2092, - "source": 624, - "pc": [ - 2059 - ] - }, - { - "teal": 2093, - "source": 624, - "pc": [ - 2060 - ] - }, - { - "teal": 2094, - "source": 624, - "pc": [ - 2061, - 2062 - ] - }, - { - "teal": 2095, - "source": 624, - "pc": [ - 2063 - ] - }, - { - "teal": 2099, - "source": 627, - "pc": [ - 2064, - 2065 - ] - }, - { - "teal": 2100, - "source": 627, - "pc": [ - 2066, - 2067 - ] - }, - { - "teal": 2104, - "source": 628, - "pc": [ - 2068, - 2069 - ] - }, - { - "teal": 2105, - "source": 628, - "pc": [ - 2070, - 2071 - ] - }, - { - "teal": 2106, - "source": 628, - "pc": [ - 2072 - ] - }, - { - "teal": 2107, - "source": 628, - "pc": [ - 2073 - ] - }, - { - "teal": 2108, - "source": 628, - "pc": [ - 2074, - 2075 - ] - }, - { - "teal": 2109, - "source": 628, - "pc": [ - 2076 - ] - }, - { - "teal": 2110, - "source": 628, - "pc": [ - 2077 - ] - }, - { - "teal": 2111, - "source": 628, - "pc": [ - 2078 - ] - }, - { - "teal": 2112, - "source": 628, - "pc": [ - 2079 - ] - }, - { - "teal": 2113, - "source": 628, - "pc": [ - 2080, - 2081 - ] - }, - { - "teal": 2114, - "source": 628, - "pc": [ - 2082 - ] - }, - { - "teal": 2115, - "source": 628, - "pc": [ - 2083 - ] - }, - { - "teal": 2116, - "source": 628, - "pc": [ - 2084, - 2085 - ] - }, - { - "teal": 2117, - "source": 628, - "pc": [ - 2086 - ] - }, - { - "teal": 2118, - "source": 628, - "pc": [ - 2087 - ] - }, - { - "teal": 2119, - "source": 628, - "pc": [ - 2088, - 2089 - ] - }, - { - "teal": 2120, - "source": 628, - "pc": [ - 2090 - ] - }, - { - "teal": 2124, - "source": 629, - "pc": [ - 2091, - 2092 - ] - }, - { - "teal": 2125, - "source": 629, - "pc": [ - 2093, - 2094 - ] - }, - { - "teal": 2126, - "source": 629, - "pc": [ - 2095, - 2096 - ] - }, - { - "teal": 2127, - "source": 629, - "pc": [ - 2097, - 2098, - 2099 - ] - }, - { - "teal": 2131, - "source": 637, - "pc": [ - 2100, - 2101 - ] - }, - { - "teal": 2132, - "source": 637, - "pc": [ - 2102 - ] - }, - { - "teal": 2133, - "source": 637, - "pc": [ - 2103, - 2104 - ] - }, - { - "teal": 2134, - "source": 637, - "pc": [ - 2105 - ] - }, - { - "teal": 2135, - "source": 637, - "pc": [ - 2106 - ] - }, - { - "teal": 2136, - "source": 637, - "pc": [ - 2107, - 2108 - ] - }, - { - "teal": 2137, - "source": 637, - "pc": [ - 2109 - ] - }, - { - "teal": 2138, - "source": 637, - "pc": [ - 2110 - ] - }, - { - "teal": 2141, - "source": 584, - "pc": [ - 2111, - 2112 - ] - }, - { - "teal": 2144, - "source": 584, - "pc": [ - 2113, - 2114 - ] - }, - { - "teal": 2145, - "source": 584, - "pc": [ - 2115 - ] - }, - { - "teal": 2150, - "source": 649, - "pc": [ - 2116 - ] - }, - { - "teal": 2153, - "source": 649, - "pc": [ - 2117, - 2118, - 2119 - ] - }, - { - "teal": 2154, - "source": 649, - "pc": [ - 2120 - ] - }, - { - "teal": 2157, - "source": 649, - "pc": [ - 2121, - 2122, - 2123 - ] - }, - { - "teal": 2158, - "source": 649, - "pc": [ - 2124 - ] - }, - { - "teal": 2161, - "source": 649, - "pc": [ - 2125, - 2126 - ] - }, - { - "teal": 2162, - "source": 649, - "pc": [ - 2127 - ] - }, - { - "teal": 2163, - "source": 649, - "pc": [ - 2128 - ] - }, - { - "teal": 2164, - "source": 649, - "pc": [ - 2129 - ] - }, - { - "teal": 2165, - "source": 649, - "pc": [ - 2130, - 2131 - ] - }, - { - "teal": 2166, - "source": 649, - "pc": [ - 2132 - ] - }, - { - "teal": 2167, - "source": 649, - "pc": [ - 2133 - ] - }, - { - "teal": 2170, - "source": 649, - "errorMessage": "argument 2 (stakedAmountPayment) for addStake must be a pay transaction", - "pc": [ - 2134 - ] - }, - { - "teal": 2173, - "source": 649, - "pc": [ - 2135, - 2136, - 2137 - ] - }, - { - "teal": 2174, - "source": 649, - "pc": [ - 2138 - ] - }, - { - "teal": 2175, - "source": 649, - "pc": [ - 2139 - ] - }, - { - "teal": 2176, - "source": 649, - "pc": [ - 2140 - ] - }, - { - "teal": 2177, - "source": 649, - "pc": [ - 2141 - ] - }, - { - "teal": 2189, - "source": 649, - "pc": [ - 2142, - 2143, - 2144 - ] - }, - { - "teal": 2192, - "source": 649, - "pc": [ - 2145 - ] - }, - { - "teal": 2193, - "source": 649, - "pc": [ - 2146, - 2147 - ] - }, - { - "teal": 2197, - "source": 650, - "pc": [ - 2148 - ] - }, - { - "teal": 2198, - "source": 650, - "pc": [ - 2149, - 2150 - ] - }, - { - "teal": 2199, - "source": 650, - "pc": [ - 2151 - ] - }, - { - "teal": 2200, - "source": 650, - "pc": [ - 2152 - ] - }, - { - "teal": 2201, - "source": 650, - "pc": [ - 2153 - ] - }, - { - "teal": 2202, - "source": 650, - "pc": [ - 2154 - ] - }, - { - "teal": 2203, - "source": 650, - "pc": [ - 2155 - ] - }, - { - "teal": 2206, - "source": 650, - "errorMessage": "specified validator id isn't valid", - "pc": [ - 2156 - ] - }, - { - "teal": 2211, - "source": 653, - "pc": [ - 2157, - 2158 - ] - }, - { - "teal": 2212, - "source": 653, - "pc": [ - 2159 - ] - }, - { - "teal": 2213, - "source": 653, - "pc": [ - 2160 - ] - }, - { - "teal": 2214, - "source": 653, - "pc": [ - 2161, - 2162 - ] - }, - { - "teal": 2215, - "source": 653, - "pc": [ - 2163 - ] - }, - { - "teal": 2216, - "source": 653, - "pc": [ - 2164 - ] - }, - { - "teal": 2217, - "source": 653, - "pc": [ - 2165, - 2166 - ] - }, - { - "teal": 2218, - "source": 653, - "pc": [ - 2167 - ] - }, - { - "teal": 2219, - "source": 653, - "pc": [ - 2168 - ] - }, - { - "teal": 2220, - "source": 653, - "pc": [ - 2169 - ] - }, - { - "teal": 2221, - "source": 653, - "pc": [ - 2170 - ] - }, - { - "teal": 2222, - "source": 653, - "pc": [ - 2171, - 2172, - 2173 - ] - }, - { - "teal": 2230, - "source": 655, - "pc": [ - 2174, - 2175 - ] - }, - { - "teal": 2231, - "source": 655, - "pc": [ - 2176 - ] - }, - { - "teal": 2232, - "source": 655, - "pc": [ - 2177 - ] - }, - { - "teal": 2233, - "source": 655, - "pc": [ - 2178, - 2179 - ] - }, - { - "teal": 2234, - "source": 655, - "pc": [ - 2180 - ] - }, - { - "teal": 2235, - "source": 655, - "pc": [ - 2181 - ] - }, - { - "teal": 2236, - "source": 655, - "pc": [ - 2182, - 2183 - ] - }, - { - "teal": 2237, - "source": 655, - "pc": [ - 2184 - ] - }, - { - "teal": 2238, - "source": 655, - "pc": [ - 2185 - ] - }, - { - "teal": 2239, - "source": 655, - "pc": [ - 2186, - 2187 - ] - }, - { - "teal": 2240, - "source": 655, - "pc": [ - 2188 - ] - }, - { - "teal": 2243, - "source": 654, - "errorMessage": "can't stake with a validator that is past its sunsetting time", - "pc": [ - 2189 - ] - }, - { - "teal": 2248, - "source": 660, - "pc": [ - 2190, - 2191 - ] - }, - { - "teal": 2249, - "source": 660, - "pc": [ - 2192, - 2193 - ] - }, - { - "teal": 2257, - "source": 664, - "pc": [ - 2194, - 2195 - ] - }, - { - "teal": 2258, - "source": 665, - "pc": [ - 2196, - 2197 - ] - }, - { - "teal": 2259, - "source": 665, - "pc": [ - 2198, - 2199 - ] - }, - { - "teal": 2260, - "source": 665, - "pc": [ - 2200 - ] - }, - { - "teal": 2263, - "source": 665, - "errorMessage": "transaction verification failed: {\"txn\":\"stakedAmountPayment\",\"field\":\"sender\",\"expected\":\"staker\"}", - "pc": [ - 2201 - ] - }, - { - "teal": 2266, - "source": 664, - "pc": [ - 2202, - 2203 - ] - }, - { - "teal": 2267, - "source": 666, - "pc": [ - 2204, - 2205 - ] - }, - { - "teal": 2268, - "source": 666, - "pc": [ - 2206, - 2207 - ] - }, - { - "teal": 2269, - "source": 666, - "pc": [ - 2208 - ] - }, - { - "teal": 2272, - "source": 666, - "errorMessage": "transaction verification failed: {\"txn\":\"stakedAmountPayment\",\"field\":\"receiver\",\"expected\":\"this.app.address\"}", - "pc": [ - 2209 - ] - }, - { - "teal": 2279, - "source": 672, - "pc": [ - 2210, - 2211 - ] - }, - { - "teal": 2280, - "source": 672, - "pc": [ - 2212 - ] - }, - { - "teal": 2281, - "source": 672, - "pc": [ - 2213 - ] - }, - { - "teal": 2282, - "source": 672, - "pc": [ - 2214, - 2215 - ] - }, - { - "teal": 2283, - "source": 672, - "pc": [ - 2216 - ] - }, - { - "teal": 2284, - "source": 672, - "pc": [ - 2217 - ] - }, - { - "teal": 2285, - "source": 672, - "pc": [ - 2218, - 2219 - ] - }, - { - "teal": 2286, - "source": 672, - "pc": [ - 2220 - ] - }, - { - "teal": 2287, - "source": 672, - "pc": [ - 2221 - ] - }, - { - "teal": 2288, - "source": 672, - "pc": [ - 2222, - 2223, - 2224 - ] - }, - { - "teal": 2289, - "source": 672, - "pc": [ - 2225 - ] - }, - { - "teal": 2292, - "source": 671, - "errorMessage": "total staked for all of a validators pools may not exceed hard cap", - "pc": [ - 2226 - ] - }, - { - "teal": 2296, - "source": 678, - "pc": [ - 2227, - 2228 - ] - }, - { - "teal": 2297, - "source": 678, - "pc": [ - 2229, - 2230 - ] - }, - { - "teal": 2298, - "source": 678, - "pc": [ - 2231, - 2232, - 2233 - ] - }, - { - "teal": 2302, - "source": 680, - "pc": [ - 2234, - 2235 - ] - }, - { - "teal": 2303, - "source": 680, - "pc": [ - 2236, - 2237 - ] - }, - { - "teal": 2304, - "source": 680, - "pc": [ - 2238, - 2239 - ] - }, - { - "teal": 2308, - "source": 681, - "pc": [ - 2240 - ] - }, - { - "teal": 2309, - "source": 681, - "pc": [ - 2241, - 2242 - ] - }, - { - "teal": 2314, - "source": 683, - "pc": [ - 2243 - ] - }, - { - "teal": 2315, - "source": 683, - "pc": [ - 2244, - 2245 - ] - }, - { - "teal": 2316, - "source": 683, - "pc": [ - 2246 - ] - }, - { - "teal": 2317, - "source": 683, - "pc": [ - 2247 - ] - }, - { - "teal": 2318, - "source": 683, - "pc": [ - 2248 - ] - }, - { - "teal": 2319, - "source": 683, - "pc": [ - 2249 - ] - }, - { - "teal": 2320, - "source": 683, - "pc": [ - 2250 - ] - }, - { - "teal": 2321, - "source": 683, - "pc": [ - 2251, - 2252, - 2253 - ] - }, - { - "teal": 2326, - "source": 686, - "pc": [ - 2254, - 2255, - 2256 - ] - }, - { - "teal": 2327, - "source": 686, - "pc": [ - 2257, - 2258, - 2259 - ] - }, - { - "teal": 2328, - "source": 686, - "pc": [ - 2260 - ] - }, - { - "teal": 2329, - "source": 686, - "pc": [ - 2261, - 2262 - ] - }, - { - "teal": 2333, - "source": 687, - "pc": [ - 2263, - 2264 - ] - }, - { - "teal": 2334, - "source": 687, - "pc": [ - 2265, - 2266 - ] - }, - { - "teal": 2335, - "source": 687, - "pc": [ - 2267 - ] - }, - { - "teal": 2336, - "source": 687, - "pc": [ - 2268, - 2269 - ] - }, - { - "teal": 2340, - "source": 688, - "pc": [ - 2270 - ] - }, - { - "teal": 2341, - "source": 688, - "pc": [ - 2271, - 2272 - ] - }, - { - "teal": 2342, - "source": 688, - "pc": [ - 2273 - ] - }, - { - "teal": 2343, - "source": 688, - "pc": [ - 2274, - 2275, - 2276 - ] - }, - { - "teal": 2344, - "source": 688, - "pc": [ - 2277 - ] - }, - { - "teal": 2345, - "source": 688, - "pc": [ - 2278 - ] - }, - { - "teal": 2350, - "source": 692, - "pc": [ - 2279, - 2280 - ] - }, - { - "teal": 2351, - "source": 692, - "pc": [ - 2281, - 2282 - ] - }, - { - "teal": 2352, - "source": 692, - "pc": [ - 2283, - 2284 - ] - }, - { - "teal": 2353, - "source": 692, - "pc": [ - 2285, - 2286, - 2287 - ] - }, - { - "teal": 2354, - "source": 692, - "pc": [ - 2288, - 2289 - ] - }, - { - "teal": 2360, - "source": 694, - "pc": [ - 2290, - 2291 - ] - }, - { - "teal": 2361, - "source": 694, - "pc": [ - 2292, - 2293 - ] - }, - { - "teal": 2362, - "source": 694, - "pc": [ - 2294, - 2295 - ] - }, - { - "teal": 2363, - "source": 694, - "pc": [ - 2296, - 2297 - ] - }, - { - "teal": 2364, - "source": 694, - "pc": [ - 2298 - ] - }, - { - "teal": 2365, - "source": 694, - "pc": [ - 2299, - 2300 - ] - }, - { - "teal": 2369, - "source": 695, - "pc": [ - 2301, - 2302 - ] - }, - { - "teal": 2370, - "source": 695, - "pc": [ - 2303, - 2304 - ] - }, - { - "teal": 2371, - "source": 695, - "pc": [ - 2305, - 2306 - ] - }, - { - "teal": 2372, - "source": 695, - "pc": [ - 2307, - 2308, - 2309 - ] - }, - { - "teal": 2373, - "source": 695, - "pc": [ - 2310 - ] - }, - { - "teal": 2374, - "source": 695, - "pc": [ - 2311, - 2312 - ] - }, - { - "teal": 2379, - "source": 696, - "pc": [ - 2313, - 2314 - ] - }, - { - "teal": 2380, - "source": 696, - "pc": [ - 2315, - 2316 - ] - }, - { - "teal": 2381, - "source": 696, - "pc": [ - 2317, - 2318 - ] - }, - { - "teal": 2382, - "source": 696, - "pc": [ - 2319, - 2320, - 2321 - ] - }, - { - "teal": 2383, - "source": 696, - "pc": [ - 2322 - ] - }, - { - "teal": 2384, - "source": 696, - "pc": [ - 2323 - ] - }, - { - "teal": 2385, - "source": 696, - "pc": [ - 2324 - ] - }, - { - "teal": 2386, - "source": 696, - "pc": [ - 2325, - 2326, - 2327 - ] - }, - { - "teal": 2390, - "source": 697, - "errorMessage": "No pool available with free stake. Validator needs to add another pool", - "pc": [ - 2328 - ] - }, - { - "teal": 2395, - "source": 701, - "pc": [ - 2329, - 2330 - ] - }, - { - "teal": 2396, - "source": 701, - "pc": [ - 2331, - 2332 - ] - }, - { - "teal": 2397, - "source": 701, - "pc": [ - 2333, - 2334 - ] - }, - { - "teal": 2398, - "source": 701, - "pc": [ - 2335, - 2336, - 2337 - ] - }, - { - "teal": 2399, - "source": 701, - "pc": [ - 2338, - 2339 - ] - }, - { - "teal": 2400, - "source": 701, - "pc": [ - 2340, - 2341, - 2342 - ] - }, - { - "teal": 2410, - "source": 709, - "pc": [ - 2343, - 2344 - ] - }, - { - "teal": 2411, - "source": 708, - "pc": [ - 2345, - 2346 - ] - }, - { - "teal": 2412, - "source": 707, - "pc": [ - 2347, - 2348 - ] - }, - { - "teal": 2413, - "source": 706, - "pc": [ - 2349, - 2350 - ] - }, - { - "teal": 2414, - "source": 706, - "pc": [ - 2351, - 2352 - ] - }, - { - "teal": 2415, - "source": 706, - "pc": [ - 2353, - 2354 - ] - }, - { - "teal": 2416, - "source": 706, - "pc": [ - 2355, - 2356, - 2357 - ] - }, - { - "teal": 2417, - "source": 705, - "pc": [ - 2358, - 2359 - ] - }, - { - "teal": 2418, - "source": 704, - "pc": [ - 2360, - 2361, - 2362 - ] - }, - { - "teal": 2422, - "source": 719, - "pc": [ - 2363, - 2364 - ] - }, - { - "teal": 2423, - "source": 719, - "pc": [ - 2365, - 2366 - ] - }, - { - "teal": 2424, - "source": 719, - "pc": [ - 2367, - 2368 - ] - }, - { - "teal": 2425, - "source": 719, - "pc": [ - 2369, - 2370, - 2371 - ] - }, - { - "teal": 2428, - "source": 649, - "pc": [ - 2372, - 2373 - ] - }, - { - "teal": 2431, - "source": 649, - "pc": [ - 2374, - 2375 - ] - }, - { - "teal": 2432, - "source": 649, - "pc": [ - 2376 - ] - }, - { - "teal": 2437, - "source": 737, - "pc": [ - 2377 - ] - }, - { - "teal": 2440, - "source": 737, - "pc": [ - 2378, - 2379, - 2380 - ] - }, - { - "teal": 2441, - "source": 737, - "pc": [ - 2381 - ] - }, - { - "teal": 2444, - "source": 737, - "pc": [ - 2382, - 2383, - 2384 - ] - }, - { - "teal": 2445, - "source": 737, - "pc": [ - 2385 - ] - }, - { - "teal": 2446, - "source": 737, - "pc": [ - 2386 - ] - }, - { - "teal": 2447, - "source": 737, - "pc": [ - 2387 - ] - }, - { - "teal": 2448, - "source": 737, - "pc": [ - 2388 - ] - }, - { - "teal": 2466, - "source": 737, - "pc": [ - 2389, - 2390, - 2391 - ] - }, - { - "teal": 2469, - "source": 737, - "pc": [ - 2392 - ] - }, - { - "teal": 2470, - "source": 737, - "pc": [ - 2393, - 2394 - ] - }, - { - "teal": 2474, - "source": 739, - "pc": [ - 2395, - 2396 - ] - }, - { - "teal": 2475, - "source": 739, - "pc": [ - 2397 - ] - }, - { - "teal": 2476, - "source": 739, - "pc": [ - 2398 - ] - }, - { - "teal": 2477, - "source": 739, - "pc": [ - 2399, - 2400 - ] - }, - { - "teal": 2478, - "source": 739, - "pc": [ - 2401 - ] - }, - { - "teal": 2479, - "source": 739, - "pc": [ - 2402 - ] - }, - { - "teal": 2480, - "source": 739, - "pc": [ - 2403, - 2404 - ] - }, - { - "teal": 2481, - "source": 739, - "pc": [ - 2405 - ] - }, - { - "teal": 2482, - "source": 739, - "pc": [ - 2406 - ] - }, - { - "teal": 2483, - "source": 739, - "pc": [ - 2407, - 2408 - ] - }, - { - "teal": 2487, - "source": 740, - "pc": [ - 2409, - 2410 - ] - }, - { - "teal": 2488, - "source": 740, - "pc": [ - 2411 - ] - }, - { - "teal": 2489, - "source": 740, - "pc": [ - 2412 - ] - }, - { - "teal": 2490, - "source": 740, - "pc": [ - 2413 - ] - }, - { - "teal": 2495, - "source": 742, - "pc": [ - 2414, - 2415 - ] - }, - { - "teal": 2496, - "source": 742, - "pc": [ - 2416, - 2417 - ] - }, - { - "teal": 2497, - "source": 742, - "pc": [ - 2418, - 2419 - ] - }, - { - "teal": 2498, - "source": 742, - "pc": [ - 2420 - ] - }, - { - "teal": 2499, - "source": 742, - "pc": [ - 2421 - ] - }, - { - "teal": 2500, - "source": 742, - "pc": [ - 2422, - 2423, - 2424 - ] - }, - { - "teal": 2505, - "source": 743, - "pc": [ - 2425, - 2426 - ] - }, - { - "teal": 2506, - "source": 743, - "pc": [ - 2427, - 2428 - ] - }, - { - "teal": 2507, - "source": 743, - "pc": [ - 2429 - ] - }, - { - "teal": 2508, - "source": 743, - "pc": [ - 2430, - 2431 - ] - }, - { - "teal": 2509, - "source": 743, - "pc": [ - 2432 - ] - }, - { - "teal": 2510, - "source": 743, - "pc": [ - 2433 - ] - }, - { - "teal": 2511, - "source": 743, - "pc": [ - 2434, - 2435 - ] - }, - { - "teal": 2512, - "source": 743, - "pc": [ - 2436 - ] - }, - { - "teal": 2513, - "source": 743, - "pc": [ - 2437, - 2438, - 2439 - ] - }, - { - "teal": 2518, - "source": 749, - "pc": [ - 2440, - 2441 - ] - }, - { - "teal": 2519, - "source": 749, - "pc": [ - 2442, - 2443 - ] - }, - { - "teal": 2523, - "source": 750, - "pc": [ - 2444, - 2445 - ] - }, - { - "teal": 2524, - "source": 750, - "pc": [ - 2446 - ] - }, - { - "teal": 2525, - "source": 750, - "pc": [ - 2447 - ] - }, - { - "teal": 2526, - "source": 750, - "pc": [ - 2448, - 2449 - ] - }, - { - "teal": 2527, - "source": 750, - "pc": [ - 2450 - ] - }, - { - "teal": 2528, - "source": 750, - "pc": [ - 2451 - ] - }, - { - "teal": 2529, - "source": 750, - "pc": [ - 2452, - 2453 - ] - }, - { - "teal": 2530, - "source": 750, - "pc": [ - 2454 - ] - }, - { - "teal": 2531, - "source": 750, - "pc": [ - 2455 - ] - }, - { - "teal": 2532, - "source": 750, - "pc": [ - 2456, - 2457 - ] - }, - { - "teal": 2537, - "source": 751, - "pc": [ - 2458, - 2459 - ] - }, - { - "teal": 2538, - "source": 751, - "pc": [ - 2460 - ] - }, - { - "teal": 2539, - "source": 751, - "pc": [ - 2461 - ] - }, - { - "teal": 2540, - "source": 751, - "pc": [ - 2462, - 2463, - 2464 - ] - }, - { - "teal": 2546, - "source": 753, - "pc": [ - 2465, - 2466 - ] - }, - { - "teal": 2547, - "source": 753, - "pc": [ - 2467, - 2468, - 2469, - 2470, - 2471, - 2472, - 2473, - 2474, - 2475, - 2476, - 2477, - 2478 - ] - }, - { - "teal": 2548, - "source": 753, - "pc": [ - 2479 - ] - }, - { - "teal": 2551, - "source": 753, - "errorMessage": "global state value does not exist: AppID.fromUint64(pool1AppID).globalState('lastPayout')", - "pc": [ - 2480 - ] - }, - { - "teal": 2552, - "source": 753, - "pc": [ - 2481, - 2482 - ] - }, - { - "teal": 2553, - "source": 753, - "pc": [ - 2483 - ] - }, - { - "teal": 2554, - "source": 753, - "pc": [ - 2484, - 2485, - 2486 - ] - }, - { - "teal": 2559, - "source": 754, - "pc": [ - 2487, - 2488 - ] - }, - { - "teal": 2560, - "source": 754, - "pc": [ - 2489, - 2490 - ] - }, - { - "teal": 2561, - "source": 754, - "pc": [ - 2491 - ] - }, - { - "teal": 2562, - "source": 754, - "pc": [ - 2492, - 2493 - ] - }, - { - "teal": 2563, - "source": 754, - "pc": [ - 2494 - ] - }, - { - "teal": 2564, - "source": 754, - "pc": [ - 2495 - ] - }, - { - "teal": 2565, - "source": 754, - "pc": [ - 2496, - 2497 - ] - }, - { - "teal": 2566, - "source": 754, - "pc": [ - 2498 - ] - }, - { - "teal": 2567, - "source": 754, - "pc": [ - 2499, - 2500, - 2501 - ] - }, - { - "teal": 2572, - "source": 756, - "pc": [ - 2502, - 2503, - 2504 - ] - }, - { - "teal": 2573, - "source": 756, - "pc": [ - 2505, - 2506 - ] - }, - { - "teal": 2574, - "source": 756, - "pc": [ - 2507 - ] - }, - { - "teal": 2575, - "source": 756, - "pc": [ - 2508, - 2509 - ] - }, - { - "teal": 2576, - "source": 756, - "pc": [ - 2510 - ] - }, - { - "teal": 2577, - "source": 756, - "pc": [ - 2511 - ] - }, - { - "teal": 2578, - "source": 756, - "pc": [ - 2512, - 2513 - ] - }, - { - "teal": 2579, - "source": 756, - "pc": [ - 2514 - ] - }, - { - "teal": 2580, - "source": 756, - "pc": [ - 2515 - ] - }, - { - "teal": 2581, - "source": 756, - "pc": [ - 2516, - 2517 - ] - }, - { - "teal": 2585, - "source": 757, - "pc": [ - 2518, - 2519 - ] - }, - { - "teal": 2586, - "source": 757, - "pc": [ - 2520, - 2521 - ] - }, - { - "teal": 2587, - "source": 757, - "pc": [ - 2522, - 2523 - ] - }, - { - "teal": 2588, - "source": 757, - "pc": [ - 2524 - ] - }, - { - "teal": 2589, - "source": 757, - "pc": [ - 2525 - ] - }, - { - "teal": 2590, - "source": 757, - "pc": [ - 2526, - 2527 - ] - }, - { - "teal": 2595, - "source": 759, - "pc": [ - 2528, - 2529 - ] - }, - { - "teal": 2596, - "source": 759, - "pc": [ - 2530, - 2531 - ] - }, - { - "teal": 2597, - "source": 759, - "pc": [ - 2532, - 2533 - ] - }, - { - "teal": 2598, - "source": 759, - "pc": [ - 2534 - ] - }, - { - "teal": 2599, - "source": 759, - "pc": [ - 2535 - ] - }, - { - "teal": 2600, - "source": 759, - "pc": [ - 2536, - 2537 - ] - }, - { - "teal": 2601, - "source": 759, - "pc": [ - 2538 - ] - }, - { - "teal": 2602, - "source": 759, - "pc": [ - 2539, - 2540, - 2541 - ] - }, - { - "teal": 2607, - "source": 760, - "pc": [ - 2542, - 2543 - ] - }, - { - "teal": 2608, - "source": 760, - "pc": [ - 2544, - 2545 - ] - }, - { - "teal": 2609, - "source": 760, - "pc": [ - 2546 - ] - }, - { - "teal": 2610, - "source": 760, - "pc": [ - 2547, - 2548 - ] - }, - { - "teal": 2611, - "source": 760, - "pc": [ - 2549 - ] - }, - { - "teal": 2612, - "source": 760, - "pc": [ - 2550 - ] - }, - { - "teal": 2613, - "source": 760, - "pc": [ - 2551, - 2552 - ] - }, - { - "teal": 2614, - "source": 760, - "pc": [ - 2553 - ] - }, - { - "teal": 2615, - "source": 760, - "pc": [ - 2554, - 2555, - 2556 - ] - }, - { - "teal": 2622, - "source": 763, - "pc": [ - 2557, - 2558 - ] - }, - { - "teal": 2623, - "source": 763, - "pc": [ - 2559, - 2560 - ] - }, - { - "teal": 2624, - "source": 763, - "pc": [ - 2561 - ] - }, - { - "teal": 2625, - "source": 763, - "pc": [ - 2562 - ] - }, - { - "teal": 2626, - "source": 763, - "pc": [ - 2563, - 2564 - ] - }, - { - "teal": 2627, - "source": 763, - "pc": [ - 2565 - ] - }, - { - "teal": 2628, - "source": 763, - "pc": [ - 2566 - ] - }, - { - "teal": 2629, - "source": 763, - "pc": [ - 2567, - 2568 - ] - }, - { - "teal": 2630, - "source": 763, - "pc": [ - 2569 - ] - }, - { - "teal": 2634, - "source": 765, - "pc": [ - 2570, - 2571 - ] - }, - { - "teal": 2635, - "source": 765, - "pc": [ - 2572, - 2573 - ] - }, - { - "teal": 2636, - "source": 765, - "pc": [ - 2574 - ] - }, - { - "teal": 2637, - "source": 765, - "pc": [ - 2575, - 2576 - ] - }, - { - "teal": 2638, - "source": 765, - "pc": [ - 2577 - ] - }, - { - "teal": 2639, - "source": 765, - "pc": [ - 2578 - ] - }, - { - "teal": 2640, - "source": 765, - "pc": [ - 2579, - 2580 - ] - }, - { - "teal": 2641, - "source": 765, - "pc": [ - 2581 - ] - }, - { - "teal": 2642, - "source": 765, - "pc": [ - 2582 - ] - }, - { - "teal": 2643, - "source": 765, - "pc": [ - 2583, - 2584 - ] - }, - { - "teal": 2647, - "source": 766, - "pc": [ - 2585, - 2586 - ] - }, - { - "teal": 2648, - "source": 766, - "pc": [ - 2587 - ] - }, - { - "teal": 2649, - "source": 766, - "pc": [ - 2588 - ] - }, - { - "teal": 2650, - "source": 766, - "pc": [ - 2589, - 2590 - ] - }, - { - "teal": 2651, - "source": 766, - "pc": [ - 2591 - ] - }, - { - "teal": 2652, - "source": 766, - "pc": [ - 2592 - ] - }, - { - "teal": 2653, - "source": 766, - "pc": [ - 2593, - 2594 - ] - }, - { - "teal": 2654, - "source": 766, - "pc": [ - 2595 - ] - }, - { - "teal": 2655, - "source": 766, - "pc": [ - 2596 - ] - }, - { - "teal": 2656, - "source": 766, - "pc": [ - 2597, - 2598 - ] - }, - { - "teal": 2660, - "source": 767, - "pc": [ - 2599 - ] - }, - { - "teal": 2661, - "source": 767, - "pc": [ - 2600, - 2601 - ] - }, - { - "teal": 2666, - "source": 767, - "pc": [ - 2602, - 2603 - ] - }, - { - "teal": 2667, - "source": 767, - "pc": [ - 2604, - 2605 - ] - }, - { - "teal": 2668, - "source": 767, - "pc": [ - 2606 - ] - }, - { - "teal": 2669, - "source": 767, - "pc": [ - 2607, - 2608, - 2609 - ] - }, - { - "teal": 2676, - "source": 773, - "pc": [ - 2610, - 2611 - ] - }, - { - "teal": 2677, - "source": 773, - "pc": [ - 2612, - 2613 - ] - }, - { - "teal": 2678, - "source": 773, - "pc": [ - 2614, - 2615 - ] - }, - { - "teal": 2679, - "source": 773, - "pc": [ - 2616 - ] - }, - { - "teal": 2680, - "source": 773, - "pc": [ - 2617 - ] - }, - { - "teal": 2681, - "source": 773, - "pc": [ - 2618, - 2619 - ] - }, - { - "teal": 2682, - "source": 773, - "pc": [ - 2620 - ] - }, - { - "teal": 2683, - "source": 773, - "pc": [ - 2621 - ] - }, - { - "teal": 2684, - "source": 773, - "pc": [ - 2622 - ] - }, - { - "teal": 2685, - "source": 773, - "pc": [ - 2623, - 2624 - ] - }, - { - "teal": 2686, - "source": 773, - "pc": [ - 2625 - ] - }, - { - "teal": 2687, - "source": 773, - "pc": [ - 2626 - ] - }, - { - "teal": 2688, - "source": 773, - "pc": [ - 2627, - 2628 - ] - }, - { - "teal": 2689, - "source": 773, - "pc": [ - 2629 - ] - }, - { - "teal": 2690, - "source": 773, - "pc": [ - 2630 - ] - }, - { - "teal": 2691, - "source": 773, - "pc": [ - 2631, - 2632 - ] - }, - { - "teal": 2692, - "source": 772, - "pc": [ - 2633 - ] - }, - { - "teal": 2693, - "source": 772, - "pc": [ - 2634 - ] - }, - { - "teal": 2694, - "source": 774, - "pc": [ - 2635, - 2636 - ] - }, - { - "teal": 2695, - "source": 772, - "pc": [ - 2637 - ] - }, - { - "teal": 2696, - "source": 772, - "pc": [ - 2638 - ] - }, - { - "teal": 2697, - "source": 772, - "pc": [ - 2639 - ] - }, - { - "teal": 2698, - "source": 772, - "pc": [ - 2640 - ] - }, - { - "teal": 2699, - "source": 772, - "pc": [ - 2641 - ] - }, - { - "teal": 2702, - "source": 772, - "errorMessage": "wideRatio failed", - "pc": [ - 2642 - ] - }, - { - "teal": 2703, - "source": 772, - "pc": [ - 2643, - 2644 - ] - }, - { - "teal": 2707, - "source": 776, - "pc": [ - 2645, - 2646 - ] - }, - { - "teal": 2708, - "source": 776, - "pc": [ - 2647, - 2648 - ] - }, - { - "teal": 2709, - "source": 776, - "pc": [ - 2649 - ] - }, - { - "teal": 2710, - "source": 776, - "pc": [ - 2650 - ] - }, - { - "teal": 2711, - "source": 776, - "pc": [ - 2651 - ] - }, - { - "teal": 2712, - "source": 776, - "pc": [ - 2652, - 2653 - ] - }, - { - "teal": 2713, - "source": 776, - "pc": [ - 2654 - ] - }, - { - "teal": 2714, - "source": 776, - "pc": [ - 2655 - ] - }, - { - "teal": 2715, - "source": 776, - "pc": [ - 2656, - 2657 - ] - }, - { - "teal": 2716, - "source": 776, - "pc": [ - 2658 - ] - }, - { - "teal": 2717, - "source": 776, - "pc": [ - 2659 - ] - }, - { - "teal": 2718, - "source": 776, - "pc": [ - 2660, - 2661 - ] - }, - { - "teal": 2719, - "source": 776, - "pc": [ - 2662 - ] - }, - { - "teal": 2724, - "source": 767, - "pc": [ - 2663, - 2664 - ] - }, - { - "teal": 2725, - "source": 767, - "pc": [ - 2665 - ] - }, - { - "teal": 2726, - "source": 767, - "pc": [ - 2666 - ] - }, - { - "teal": 2727, - "source": 767, - "pc": [ - 2667, - 2668 - ] - }, - { - "teal": 2728, - "source": 767, - "pc": [ - 2669, - 2670, - 2671 - ] - }, - { - "teal": 2733, - "source": 778, - "pc": [ - 2672, - 2673 - ] - }, - { - "teal": 2734, - "source": 778, - "pc": [ - 2674, - 2675 - ] - }, - { - "teal": 2735, - "source": 778, - "pc": [ - 2676 - ] - }, - { - "teal": 2736, - "source": 778, - "pc": [ - 2677, - 2678 - ] - }, - { - "teal": 2737, - "source": 778, - "pc": [ - 2679 - ] - }, - { - "teal": 2738, - "source": 778, - "pc": [ - 2680 - ] - }, - { - "teal": 2739, - "source": 778, - "pc": [ - 2681, - 2682 - ] - }, - { - "teal": 2740, - "source": 778, - "pc": [ - 2683 - ] - }, - { - "teal": 2744, - "source": 737, - "pc": [ - 2684, - 2685 - ] - }, - { - "teal": 2747, - "source": 737, - "pc": [ - 2686, - 2687 - ] - }, - { - "teal": 2748, - "source": 737, - "pc": [ - 2688 - ] - }, - { - "teal": 2753, - "source": 797, - "pc": [ - 2689, - 2690, - 2691 - ] - }, - { - "teal": 2754, - "source": 797, - "pc": [ - 2692 - ] - }, - { - "teal": 2757, - "source": 796, - "pc": [ - 2693, - 2694, - 2695 - ] - }, - { - "teal": 2758, - "source": 796, - "pc": [ - 2696 - ] - }, - { - "teal": 2761, - "source": 795, - "pc": [ - 2697, - 2698, - 2699 - ] - }, - { - "teal": 2762, - "source": 795, - "pc": [ - 2700 - ] - }, - { - "teal": 2765, - "source": 794, - "pc": [ - 2701, - 2702, - 2703 - ] - }, - { - "teal": 2766, - "source": 794, - "pc": [ - 2704 - ] - }, - { - "teal": 2769, - "source": 793, - "pc": [ - 2705, - 2706, - 2707 - ] - }, - { - "teal": 2770, - "source": 793, - "pc": [ - 2708 - ] - }, - { - "teal": 2771, - "source": 793, - "pc": [ - 2709 - ] - }, - { - "teal": 2772, - "source": 793, - "pc": [ - 2710 - ] - }, - { - "teal": 2773, - "source": 793, - "pc": [ - 2711 - ] - }, - { - "teal": 2776, - "source": 793, - "errorMessage": "argument 4 (poolKey) for stakeUpdatedViaRewards must be a (uint64,uint64,uint64)", - "pc": [ - 2712 - ] - }, - { - "teal": 2779, - "source": 792, - "pc": [ - 2713, - 2714, - 2715 - ] - }, - { - "teal": 2780, - "source": 792, - "pc": [ - 2716 - ] - }, - { - "teal": 2781, - "source": 792, - "pc": [ - 2717 - ] - }, - { - "teal": 2795, - "source": 792, - "pc": [ - 2718, - 2719, - 2720 - ] - }, - { - "teal": 2799, - "source": 799, - "pc": [ - 2721, - 2722 - ] - }, - { - "teal": 2800, - "source": 799, - "pc": [ - 2723, - 2724, - 2725 - ] - }, - { - "teal": 2804, - "source": 802, - "pc": [ - 2726, - 2727 - ] - }, - { - "teal": 2805, - "source": 802, - "pc": [ - 2728, - 2729 - ] - }, - { - "teal": 2806, - "source": 802, - "pc": [ - 2730, - 2731, - 2732 - ] - }, - { - "teal": 2807, - "source": 802, - "pc": [ - 2733 - ] - }, - { - "teal": 2808, - "source": 802, - "pc": [ - 2734 - ] - }, - { - "teal": 2809, - "source": 802, - "pc": [ - 2735 - ] - }, - { - "teal": 2810, - "source": 802, - "pc": [ - 2736, - 2737 - ] - }, - { - "teal": 2811, - "source": 802, - "pc": [ - 2738 - ] - }, - { - "teal": 2812, - "source": 802, - "pc": [ - 2739 - ] - }, - { - "teal": 2813, - "source": 802, - "pc": [ - 2740, - 2741 - ] - }, - { - "teal": 2814, - "source": 802, - "pc": [ - 2742 - ] - }, - { - "teal": 2815, - "source": 802, - "pc": [ - 2743, - 2744 - ] - }, - { - "teal": 2816, - "source": 802, - "pc": [ - 2745, - 2746 - ] - }, - { - "teal": 2817, - "source": 802, - "pc": [ - 2747, - 2748, - 2749 - ] - }, - { - "teal": 2818, - "source": 802, - "pc": [ - 2750 - ] - }, - { - "teal": 2819, - "source": 802, - "pc": [ - 2751 - ] - }, - { - "teal": 2820, - "source": 802, - "pc": [ - 2752 - ] - }, - { - "teal": 2821, - "source": 802, - "pc": [ - 2753, - 2754 - ] - }, - { - "teal": 2822, - "source": 802, - "pc": [ - 2755 - ] - }, - { - "teal": 2823, - "source": 802, - "pc": [ - 2756 - ] - }, - { - "teal": 2824, - "source": 802, - "pc": [ - 2757, - 2758 - ] - }, - { - "teal": 2825, - "source": 802, - "pc": [ - 2759 - ] - }, - { - "teal": 2826, - "source": 802, - "pc": [ - 2760 - ] - }, - { - "teal": 2827, - "source": 802, - "pc": [ - 2761 - ] - }, - { - "teal": 2828, - "source": 802, - "pc": [ - 2762, - 2763 - ] - }, - { - "teal": 2829, - "source": 802, - "pc": [ - 2764, - 2765, - 2766 - ] - }, - { - "teal": 2830, - "source": 802, - "pc": [ - 2767 - ] - }, - { - "teal": 2831, - "source": 802, - "pc": [ - 2768 - ] - }, - { - "teal": 2832, - "source": 802, - "pc": [ - 2769 - ] - }, - { - "teal": 2833, - "source": 802, - "pc": [ - 2770, - 2771 - ] - }, - { - "teal": 2834, - "source": 802, - "pc": [ - 2772 - ] - }, - { - "teal": 2835, - "source": 802, - "pc": [ - 2773 - ] - }, - { - "teal": 2836, - "source": 802, - "pc": [ - 2774, - 2775 - ] - }, - { - "teal": 2837, - "source": 802, - "pc": [ - 2776 - ] - }, - { - "teal": 2838, - "source": 802, - "pc": [ - 2777 - ] - }, - { - "teal": 2839, - "source": 802, - "pc": [ - 2778 - ] - }, - { - "teal": 2840, - "source": 802, - "pc": [ - 2779, - 2780 - ] - }, - { - "teal": 2841, - "source": 802, - "pc": [ - 2781, - 2782, - 2783 - ] - }, - { - "teal": 2842, - "source": 802, - "pc": [ - 2784 - ] - }, - { - "teal": 2843, - "source": 802, - "pc": [ - 2785 - ] - }, - { - "teal": 2844, - "source": 802, - "pc": [ - 2786 - ] - }, - { - "teal": 2845, - "source": 802, - "pc": [ - 2787, - 2788 - ] - }, - { - "teal": 2846, - "source": 802, - "pc": [ - 2789 - ] - }, - { - "teal": 2850, - "source": 803, - "pc": [ - 2790, - 2791 - ] - }, - { - "teal": 2851, - "source": 803, - "pc": [ - 2792 - ] - }, - { - "teal": 2852, - "source": 803, - "pc": [ - 2793 - ] - }, - { - "teal": 2853, - "source": 803, - "pc": [ - 2794 - ] - }, - { - "teal": 2854, - "source": 803, - "pc": [ - 2795, - 2796 - ] - }, - { - "teal": 2855, - "source": 803, - "pc": [ - 2797, - 2798, - 2799 - ] - }, - { - "teal": 2856, - "source": 803, - "pc": [ - 2800 - ] - }, - { - "teal": 2857, - "source": 803, - "pc": [ - 2801 - ] - }, - { - "teal": 2858, - "source": 803, - "pc": [ - 2802 - ] - }, - { - "teal": 2859, - "source": 803, - "pc": [ - 2803, - 2804 - ] - }, - { - "teal": 2860, - "source": 803, - "pc": [ - 2805 - ] - }, - { - "teal": 2861, - "source": 803, - "pc": [ - 2806 - ] - }, - { - "teal": 2862, - "source": 803, - "pc": [ - 2807, - 2808 - ] - }, - { - "teal": 2863, - "source": 803, - "pc": [ - 2809 - ] - }, - { - "teal": 2864, - "source": 803, - "pc": [ - 2810 - ] - }, - { - "teal": 2865, - "source": 803, - "pc": [ - 2811 - ] - }, - { - "teal": 2866, - "source": 803, - "pc": [ - 2812, - 2813 - ] - }, - { - "teal": 2867, - "source": 803, - "pc": [ - 2814, - 2815, - 2816 - ] - }, - { - "teal": 2868, - "source": 803, - "pc": [ - 2817 - ] - }, - { - "teal": 2869, - "source": 803, - "pc": [ - 2818 - ] - }, - { - "teal": 2870, - "source": 803, - "pc": [ - 2819 - ] - }, - { - "teal": 2871, - "source": 803, - "pc": [ - 2820, - 2821 - ] - }, - { - "teal": 2872, - "source": 803, - "pc": [ - 2822 - ] - }, - { - "teal": 2876, - "source": 804, - "pc": [ - 2823, - 2824 - ] - }, - { - "teal": 2877, - "source": 804, - "pc": [ - 2825 - ] - }, - { - "teal": 2878, - "source": 804, - "pc": [ - 2826 - ] - }, - { - "teal": 2879, - "source": 804, - "pc": [ - 2827 - ] - }, - { - "teal": 2880, - "source": 804, - "pc": [ - 2828, - 2829 - ] - }, - { - "teal": 2881, - "source": 804, - "pc": [ - 2830, - 2831, - 2832 - ] - }, - { - "teal": 2882, - "source": 804, - "pc": [ - 2833 - ] - }, - { - "teal": 2883, - "source": 804, - "pc": [ - 2834 - ] - }, - { - "teal": 2884, - "source": 804, - "pc": [ - 2835 - ] - }, - { - "teal": 2885, - "source": 804, - "pc": [ - 2836, - 2837 - ] - }, - { - "teal": 2886, - "source": 804, - "pc": [ - 2838 - ] - }, - { - "teal": 2887, - "source": 804, - "pc": [ - 2839 - ] - }, - { - "teal": 2888, - "source": 804, - "pc": [ - 2840, - 2841 - ] - }, - { - "teal": 2889, - "source": 804, - "pc": [ - 2842 - ] - }, - { - "teal": 2890, - "source": 804, - "pc": [ - 2843 - ] - }, - { - "teal": 2891, - "source": 804, - "pc": [ - 2844 - ] - }, - { - "teal": 2892, - "source": 804, - "pc": [ - 2845, - 2846 - ] - }, - { - "teal": 2893, - "source": 804, - "pc": [ - 2847, - 2848, - 2849 - ] - }, - { - "teal": 2894, - "source": 804, - "pc": [ - 2850 - ] - }, - { - "teal": 2895, - "source": 804, - "pc": [ - 2851 - ] - }, - { - "teal": 2896, - "source": 804, - "pc": [ - 2852 - ] - }, - { - "teal": 2897, - "source": 804, - "pc": [ - 2853, - 2854 - ] - }, - { - "teal": 2898, - "source": 804, - "pc": [ - 2855 - ] - }, - { - "teal": 2902, - "source": 806, - "pc": [ - 2856, - 2857 - ] - }, - { - "teal": 2903, - "source": 806, - "pc": [ - 2858 - ] - }, - { - "teal": 2904, - "source": 806, - "pc": [ - 2859, - 2860 - ] - }, - { - "teal": 2905, - "source": 806, - "pc": [ - 2861 - ] - }, - { - "teal": 2906, - "source": 806, - "pc": [ - 2862, - 2863 - ] - }, - { - "teal": 2907, - "source": 806, - "pc": [ - 2864 - ] - }, - { - "teal": 2908, - "source": 806, - "pc": [ - 2865 - ] - }, - { - "teal": 2912, - "source": 809, - "pc": [ - 2866, - 2867 - ] - }, - { - "teal": 2913, - "source": 809, - "pc": [ - 2868, - 2869, - 2870 - ] - }, - { - "teal": 2914, - "source": 809, - "pc": [ - 2871 - ] - }, - { - "teal": 2915, - "source": 809, - "pc": [ - 2872, - 2873, - 2874 - ] - }, - { - "teal": 2916, - "source": 792, - "pc": [ - 2875 - ] - }, - { - "teal": 2921, - "source": 839, - "pc": [ - 2876, - 2877, - 2878 - ] - }, - { - "teal": 2922, - "source": 839, - "pc": [ - 2879 - ] - }, - { - "teal": 2923, - "source": 839, - "pc": [ - 2880 - ] - }, - { - "teal": 2924, - "source": 839, - "pc": [ - 2881 - ] - }, - { - "teal": 2925, - "source": 839, - "pc": [ - 2882 - ] - }, - { - "teal": 2928, - "source": 839, - "errorMessage": "argument 0 (stakerRemoved) for stakeRemoved must be a bool", - "pc": [ - 2883 - ] - }, - { - "teal": 2929, - "source": 839, - "pc": [ - 2884 - ] - }, - { - "teal": 2930, - "source": 839, - "pc": [ - 2885 - ] - }, - { - "teal": 2933, - "source": 838, - "pc": [ - 2886, - 2887, - 2888 - ] - }, - { - "teal": 2934, - "source": 838, - "pc": [ - 2889 - ] - }, - { - "teal": 2937, - "source": 837, - "pc": [ - 2890, - 2891, - 2892 - ] - }, - { - "teal": 2938, - "source": 837, - "pc": [ - 2893 - ] - }, - { - "teal": 2941, - "source": 836, - "pc": [ - 2894, - 2895, - 2896 - ] - }, - { - "teal": 2942, - "source": 836, - "pc": [ - 2897 - ] - }, - { - "teal": 2943, - "source": 836, - "pc": [ - 2898 - ] - }, - { - "teal": 2944, - "source": 836, - "pc": [ - 2899, - 2900 - ] - }, - { - "teal": 2945, - "source": 836, - "pc": [ - 2901 - ] - }, - { - "teal": 2948, - "source": 836, - "errorMessage": "argument 3 (staker) for stakeRemoved must be a address", - "pc": [ - 2902 - ] - }, - { - "teal": 2951, - "source": 835, - "pc": [ - 2903, - 2904, - 2905 - ] - }, - { - "teal": 2952, - "source": 835, - "pc": [ - 2906 - ] - }, - { - "teal": 2953, - "source": 835, - "pc": [ - 2907 - ] - }, - { - "teal": 2954, - "source": 835, - "pc": [ - 2908 - ] - }, - { - "teal": 2955, - "source": 835, - "pc": [ - 2909 - ] - }, - { - "teal": 2958, - "source": 835, - "errorMessage": "argument 4 (poolKey) for stakeRemoved must be a (uint64,uint64,uint64)", - "pc": [ - 2910 - ] - }, - { - "teal": 2961, - "source": 834, - "pc": [ - 2911, - 2912, - 2913 - ] - }, - { - "teal": 2962, - "source": 834, - "pc": [ - 2914 - ] - }, - { - "teal": 2963, - "source": 834, - "pc": [ - 2915 - ] - }, - { - "teal": 2978, - "source": 834, - "pc": [ - 2916, - 2917, - 2918 - ] - }, - { - "teal": 2981, - "source": 834, - "pc": [ - 2919 - ] - }, - { - "teal": 2982, - "source": 834, - "pc": [ - 2920, - 2921 - ] - }, - { - "teal": 2987, - "source": 841, - "pc": [ - 2922, - 2923 - ] - }, - { - "teal": 2988, - "source": 841, - "pc": [ - 2924, - 2925 - ] - }, - { - "teal": 2989, - "source": 841, - "pc": [ - 2926 - ] - }, - { - "teal": 2990, - "source": 841, - "pc": [ - 2927, - 2928, - 2929 - ] - }, - { - "teal": 2995, - "source": 842, - "pc": [ - 2930 - ] - }, - { - "teal": 2996, - "source": 842, - "pc": [ - 2931, - 2932 - ] - }, - { - "teal": 2997, - "source": 842, - "pc": [ - 2933, - 2934 - ] - }, - { - "teal": 2998, - "source": 842, - "pc": [ - 2935 - ] - }, - { - "teal": 2999, - "source": 842, - "pc": [ - 2936, - 2937 - ] - }, - { - "teal": 3000, - "source": 842, - "pc": [ - 2938, - 2939 - ] - }, - { - "teal": 3001, - "source": 842, - "pc": [ - 2940 - ] - }, - { - "teal": 3002, - "source": 842, - "pc": [ - 2941, - 2942 - ] - }, - { - "teal": 3003, - "source": 842, - "pc": [ - 2943, - 2944 - ] - }, - { - "teal": 3004, - "source": 842, - "pc": [ - 2945, - 2946 - ] - }, - { - "teal": 3005, - "source": 842, - "pc": [ - 2947, - 2948 - ] - }, - { - "teal": 3006, - "source": 842, - "pc": [ - 2949 - ] - }, - { - "teal": 3011, - "source": 844, - "pc": [ - 2950, - 2951 - ] - }, - { - "teal": 3012, - "source": 844, - "pc": [ - 2952, - 2953, - 2954 - ] - }, - { - "teal": 3016, - "source": 848, - "pc": [ - 2955, - 2956 - ] - }, - { - "teal": 3017, - "source": 848, - "pc": [ - 2957 - ] - }, - { - "teal": 3018, - "source": 848, - "pc": [ - 2958 - ] - }, - { - "teal": 3019, - "source": 848, - "pc": [ - 2959 - ] - }, - { - "teal": 3020, - "source": 848, - "pc": [ - 2960, - 2961, - 2962 - ] - }, - { - "teal": 3021, - "source": 848, - "pc": [ - 2963, - 2964 - ] - }, - { - "teal": 3022, - "source": 848, - "pc": [ - 2965 - ] - }, - { - "teal": 3023, - "source": 848, - "pc": [ - 2966 - ] - }, - { - "teal": 3024, - "source": 848, - "pc": [ - 2967 - ] - }, - { - "teal": 3028, - "source": 848, - "errorMessage": "should only be called if algo or reward was removed", - "pc": [ - 2968 - ] - }, - { - "teal": 3032, - "source": 851, - "pc": [ - 2969, - 2970 - ] - }, - { - "teal": 3033, - "source": 851, - "pc": [ - 2971, - 2972 - ] - }, - { - "teal": 3034, - "source": 851, - "pc": [ - 2973, - 2974, - 2975 - ] - }, - { - "teal": 3035, - "source": 851, - "pc": [ - 2976 - ] - }, - { - "teal": 3036, - "source": 851, - "pc": [ - 2977 - ] - }, - { - "teal": 3037, - "source": 851, - "pc": [ - 2978 - ] - }, - { - "teal": 3038, - "source": 851, - "pc": [ - 2979, - 2980 - ] - }, - { - "teal": 3039, - "source": 851, - "pc": [ - 2981 - ] - }, - { - "teal": 3040, - "source": 851, - "pc": [ - 2982 - ] - }, - { - "teal": 3041, - "source": 851, - "pc": [ - 2983, - 2984 - ] - }, - { - "teal": 3042, - "source": 851, - "pc": [ - 2985 - ] - }, - { - "teal": 3043, - "source": 851, - "pc": [ - 2986, - 2987 - ] - }, - { - "teal": 3044, - "source": 851, - "pc": [ - 2988, - 2989 - ] - }, - { - "teal": 3045, - "source": 851, - "pc": [ - 2990, - 2991, - 2992 - ] - }, - { - "teal": 3046, - "source": 851, - "pc": [ - 2993 - ] - }, - { - "teal": 3047, - "source": 851, - "pc": [ - 2994 - ] - }, - { - "teal": 3048, - "source": 851, - "pc": [ - 2995 - ] - }, - { - "teal": 3049, - "source": 851, - "pc": [ - 2996, - 2997 - ] - }, - { - "teal": 3050, - "source": 851, - "pc": [ - 2998 - ] - }, - { - "teal": 3051, - "source": 851, - "pc": [ - 2999 - ] - }, - { - "teal": 3052, - "source": 851, - "pc": [ - 3000, - 3001 - ] - }, - { - "teal": 3053, - "source": 851, - "pc": [ - 3002 - ] - }, - { - "teal": 3054, - "source": 851, - "pc": [ - 3003 - ] - }, - { - "teal": 3055, - "source": 851, - "pc": [ - 3004 - ] - }, - { - "teal": 3056, - "source": 851, - "pc": [ - 3005, - 3006 - ] - }, - { - "teal": 3057, - "source": 851, - "pc": [ - 3007, - 3008, - 3009 - ] - }, - { - "teal": 3058, - "source": 851, - "pc": [ - 3010 - ] - }, - { - "teal": 3059, - "source": 851, - "pc": [ - 3011 - ] - }, - { - "teal": 3060, - "source": 851, - "pc": [ - 3012 - ] - }, - { - "teal": 3061, - "source": 851, - "pc": [ - 3013, - 3014 - ] - }, - { - "teal": 3062, - "source": 851, - "pc": [ - 3015 - ] - }, - { - "teal": 3063, - "source": 851, - "pc": [ - 3016 - ] - }, - { - "teal": 3064, - "source": 851, - "pc": [ - 3017, - 3018 - ] - }, - { - "teal": 3065, - "source": 851, - "pc": [ - 3019 - ] - }, - { - "teal": 3066, - "source": 851, - "pc": [ - 3020 - ] - }, - { - "teal": 3067, - "source": 851, - "pc": [ - 3021 - ] - }, - { - "teal": 3068, - "source": 851, - "pc": [ - 3022, - 3023 - ] - }, - { - "teal": 3069, - "source": 851, - "pc": [ - 3024, - 3025, - 3026 - ] - }, - { - "teal": 3070, - "source": 851, - "pc": [ - 3027 - ] - }, - { - "teal": 3071, - "source": 851, - "pc": [ - 3028 - ] - }, - { - "teal": 3072, - "source": 851, - "pc": [ - 3029 - ] - }, - { - "teal": 3073, - "source": 851, - "pc": [ - 3030, - 3031 - ] - }, - { - "teal": 3074, - "source": 851, - "pc": [ - 3032 - ] - }, - { - "teal": 3078, - "source": 852, - "pc": [ - 3033, - 3034 - ] - }, - { - "teal": 3079, - "source": 852, - "pc": [ - 3035 - ] - }, - { - "teal": 3080, - "source": 852, - "pc": [ - 3036 - ] - }, - { - "teal": 3081, - "source": 852, - "pc": [ - 3037 - ] - }, - { - "teal": 3082, - "source": 852, - "pc": [ - 3038, - 3039 - ] - }, - { - "teal": 3083, - "source": 852, - "pc": [ - 3040, - 3041, - 3042 - ] - }, - { - "teal": 3084, - "source": 852, - "pc": [ - 3043 - ] - }, - { - "teal": 3085, - "source": 852, - "pc": [ - 3044 - ] - }, - { - "teal": 3086, - "source": 852, - "pc": [ - 3045 - ] - }, - { - "teal": 3087, - "source": 852, - "pc": [ - 3046, - 3047 - ] - }, - { - "teal": 3088, - "source": 852, - "pc": [ - 3048 - ] - }, - { - "teal": 3089, - "source": 852, - "pc": [ - 3049 - ] - }, - { - "teal": 3090, - "source": 852, - "pc": [ - 3050, - 3051 - ] - }, - { - "teal": 3091, - "source": 852, - "pc": [ - 3052 - ] - }, - { - "teal": 3092, - "source": 852, - "pc": [ - 3053 - ] - }, - { - "teal": 3093, - "source": 852, - "pc": [ - 3054 - ] - }, - { - "teal": 3094, - "source": 852, - "pc": [ - 3055, - 3056 - ] - }, - { - "teal": 3095, - "source": 852, - "pc": [ - 3057, - 3058, - 3059 - ] - }, - { - "teal": 3096, - "source": 852, - "pc": [ - 3060 - ] - }, - { - "teal": 3097, - "source": 852, - "pc": [ - 3061 - ] - }, - { - "teal": 3098, - "source": 852, - "pc": [ - 3062 - ] - }, - { - "teal": 3099, - "source": 852, - "pc": [ - 3063, - 3064 - ] - }, - { - "teal": 3100, - "source": 852, - "pc": [ - 3065 - ] - }, - { - "teal": 3104, - "source": 853, - "pc": [ - 3066, - 3067 - ] - }, - { - "teal": 3105, - "source": 853, - "pc": [ - 3068 - ] - }, - { - "teal": 3106, - "source": 853, - "pc": [ - 3069, - 3070 - ] - }, - { - "teal": 3107, - "source": 853, - "pc": [ - 3071 - ] - }, - { - "teal": 3108, - "source": 853, - "pc": [ - 3072, - 3073 - ] - }, - { - "teal": 3109, - "source": 853, - "pc": [ - 3074 - ] - }, - { - "teal": 3110, - "source": 853, - "pc": [ - 3075 - ] - }, - { - "teal": 3115, - "source": 855, - "pc": [ - 3076, - 3077 - ] - }, - { - "teal": 3116, - "source": 855, - "pc": [ - 3078 - ] - }, - { - "teal": 3117, - "source": 855, - "pc": [ - 3079 - ] - }, - { - "teal": 3118, - "source": 855, - "pc": [ - 3080, - 3081, - 3082 - ] - }, - { - "teal": 3123, - "source": 856, - "pc": [ - 3083, - 3084 - ] - }, - { - "teal": 3124, - "source": 856, - "pc": [ - 3085 - ] - }, - { - "teal": 3125, - "source": 856, - "pc": [ - 3086 - ] - }, - { - "teal": 3126, - "source": 856, - "pc": [ - 3087, - 3088 - ] - }, - { - "teal": 3127, - "source": 856, - "pc": [ - 3089, - 3090, - 3091 - ] - }, - { - "teal": 3128, - "source": 856, - "pc": [ - 3092 - ] - }, - { - "teal": 3129, - "source": 856, - "pc": [ - 3093 - ] - }, - { - "teal": 3130, - "source": 856, - "pc": [ - 3094 - ] - }, - { - "teal": 3131, - "source": 856, - "pc": [ - 3095, - 3096 - ] - }, - { - "teal": 3132, - "source": 856, - "pc": [ - 3097 - ] - }, - { - "teal": 3133, - "source": 856, - "pc": [ - 3098 - ] - }, - { - "teal": 3134, - "source": 856, - "pc": [ - 3099, - 3100 - ] - }, - { - "teal": 3138, - "source": 857, - "pc": [ - 3101, - 3102 - ] - }, - { - "teal": 3139, - "source": 857, - "pc": [ - 3103 - ] - }, - { - "teal": 3140, - "source": 857, - "pc": [ - 3104 - ] - }, - { - "teal": 3143, - "source": 857, - "errorMessage": "rewardRemoved can't be set if validator doesn't have reward token!", - "pc": [ - 3105 - ] - }, - { - "teal": 3150, - "source": 859, - "pc": [ - 3106, - 3107 - ] - }, - { - "teal": 3151, - "source": 859, - "pc": [ - 3108 - ] - }, - { - "teal": 3152, - "source": 859, - "pc": [ - 3109 - ] - }, - { - "teal": 3153, - "source": 859, - "pc": [ - 3110, - 3111 - ] - }, - { - "teal": 3154, - "source": 859, - "pc": [ - 3112, - 3113, - 3114 - ] - }, - { - "teal": 3155, - "source": 859, - "pc": [ - 3115 - ] - }, - { - "teal": 3156, - "source": 859, - "pc": [ - 3116 - ] - }, - { - "teal": 3157, - "source": 859, - "pc": [ - 3117 - ] - }, - { - "teal": 3158, - "source": 859, - "pc": [ - 3118, - 3119 - ] - }, - { - "teal": 3159, - "source": 859, - "pc": [ - 3120 - ] - }, - { - "teal": 3160, - "source": 859, - "pc": [ - 3121 - ] - }, - { - "teal": 3161, - "source": 859, - "pc": [ - 3122, - 3123 - ] - }, - { - "teal": 3162, - "source": 859, - "pc": [ - 3124 - ] - }, - { - "teal": 3165, - "source": 858, - "errorMessage": "reward being removed must be covered by hold back amount", - "pc": [ - 3125 - ] - }, - { - "teal": 3169, - "source": 864, - "pc": [ - 3126, - 3127 - ] - }, - { - "teal": 3170, - "source": 864, - "pc": [ - 3128 - ] - }, - { - "teal": 3171, - "source": 864, - "pc": [ - 3129 - ] - }, - { - "teal": 3172, - "source": 864, - "pc": [ - 3130 - ] - }, - { - "teal": 3173, - "source": 864, - "pc": [ - 3131, - 3132 - ] - }, - { - "teal": 3174, - "source": 864, - "pc": [ - 3133, - 3134, - 3135 - ] - }, - { - "teal": 3175, - "source": 864, - "pc": [ - 3136 - ] - }, - { - "teal": 3176, - "source": 864, - "pc": [ - 3137 - ] - }, - { - "teal": 3177, - "source": 864, - "pc": [ - 3138 - ] - }, - { - "teal": 3178, - "source": 864, - "pc": [ - 3139, - 3140 - ] - }, - { - "teal": 3179, - "source": 864, - "pc": [ - 3141 - ] - }, - { - "teal": 3180, - "source": 864, - "pc": [ - 3142 - ] - }, - { - "teal": 3181, - "source": 864, - "pc": [ - 3143, - 3144 - ] - }, - { - "teal": 3182, - "source": 864, - "pc": [ - 3145 - ] - }, - { - "teal": 3183, - "source": 864, - "pc": [ - 3146 - ] - }, - { - "teal": 3184, - "source": 864, - "pc": [ - 3147 - ] - }, - { - "teal": 3185, - "source": 864, - "pc": [ - 3148, - 3149 - ] - }, - { - "teal": 3186, - "source": 864, - "pc": [ - 3150, - 3151, - 3152 - ] - }, - { - "teal": 3187, - "source": 864, - "pc": [ - 3153 - ] - }, - { - "teal": 3188, - "source": 864, - "pc": [ - 3154 - ] - }, - { - "teal": 3189, - "source": 864, - "pc": [ - 3155 - ] - }, - { - "teal": 3190, - "source": 864, - "pc": [ - 3156, - 3157 - ] - }, - { - "teal": 3191, - "source": 864, - "pc": [ - 3158 - ] - }, - { - "teal": 3196, - "source": 869, - "pc": [ - 3159, - 3160 - ] - }, - { - "teal": 3197, - "source": 869, - "pc": [ - 3161, - 3162, - 3163 - ] - }, - { - "teal": 3198, - "source": 869, - "pc": [ - 3164 - ] - }, - { - "teal": 3199, - "source": 869, - "pc": [ - 3165 - ] - }, - { - "teal": 3200, - "source": 869, - "pc": [ - 3166 - ] - }, - { - "teal": 3201, - "source": 869, - "pc": [ - 3167, - 3168, - 3169 - ] - }, - { - "teal": 3209, - "source": 870, - "pc": [ - 3170 - ] - }, - { - "teal": 3210, - "source": 870, - "pc": [ - 3171, - 3172 - ] - }, - { - "teal": 3211, - "source": 870, - "pc": [ - 3173, - 3174 - ] - }, - { - "teal": 3212, - "source": 870, - "pc": [ - 3175, - 3176 - ] - }, - { - "teal": 3213, - "source": 870, - "pc": [ - 3177, - 3178 - ] - }, - { - "teal": 3217, - "source": 871, - "pc": [ - 3179, - 3180 - ] - }, - { - "teal": 3218, - "source": 871, - "pc": [ - 3181 - ] - }, - { - "teal": 3219, - "source": 871, - "pc": [ - 3182 - ] - }, - { - "teal": 3220, - "source": 871, - "pc": [ - 3183, - 3184 - ] - }, - { - "teal": 3221, - "source": 871, - "pc": [ - 3185, - 3186, - 3187 - ] - }, - { - "teal": 3222, - "source": 871, - "pc": [ - 3188 - ] - }, - { - "teal": 3223, - "source": 871, - "pc": [ - 3189 - ] - }, - { - "teal": 3224, - "source": 871, - "pc": [ - 3190 - ] - }, - { - "teal": 3225, - "source": 871, - "pc": [ - 3191, - 3192 - ] - }, - { - "teal": 3226, - "source": 871, - "pc": [ - 3193 - ] - }, - { - "teal": 3227, - "source": 871, - "pc": [ - 3194 - ] - }, - { - "teal": 3228, - "source": 871, - "pc": [ - 3195, - 3196 - ] - }, - { - "teal": 3232, - "source": 872, - "pc": [ - 3197, - 3198 - ] - }, - { - "teal": 3233, - "source": 872, - "pc": [ - 3199, - 3200 - ] - }, - { - "teal": 3234, - "source": 872, - "pc": [ - 3201, - 3202 - ] - }, - { - "teal": 3235, - "source": 872, - "pc": [ - 3203 - ] - }, - { - "teal": 3236, - "source": 872, - "pc": [ - 3204, - 3205 - ] - }, - { - "teal": 3237, - "source": 872, - "pc": [ - 3206, - 3207 - ] - }, - { - "teal": 3238, - "source": 872, - "pc": [ - 3208 - ] - }, - { - "teal": 3239, - "source": 872, - "pc": [ - 3209, - 3210 - ] - }, - { - "teal": 3242, - "source": 870, - "pc": [ - 3211 - ] - }, - { - "teal": 3243, - "source": 870, - "pc": [ - 3212, - 3213 - ] - }, - { - "teal": 3246, - "source": 870, - "pc": [ - 3214 - ] - }, - { - "teal": 3249, - "source": 855, - "pc": [ - 3215, - 3216, - 3217 - ] - }, - { - "teal": 3257, - "source": 897, - "pc": [ - 3218, - 3219 - ] - }, - { - "teal": 3258, - "source": 897, - "pc": [ - 3220, - 3221, - 3222 - ] - }, - { - "teal": 3263, - "source": 899, - "pc": [ - 3223, - 3224 - ] - }, - { - "teal": 3264, - "source": 899, - "pc": [ - 3225, - 3226 - ] - }, - { - "teal": 3265, - "source": 899, - "pc": [ - 3227, - 3228, - 3229 - ] - }, - { - "teal": 3266, - "source": 899, - "pc": [ - 3230 - ] - }, - { - "teal": 3267, - "source": 899, - "pc": [ - 3231 - ] - }, - { - "teal": 3268, - "source": 899, - "pc": [ - 3232 - ] - }, - { - "teal": 3269, - "source": 899, - "pc": [ - 3233, - 3234 - ] - }, - { - "teal": 3270, - "source": 899, - "pc": [ - 3235 - ] - }, - { - "teal": 3271, - "source": 899, - "pc": [ - 3236 - ] - }, - { - "teal": 3272, - "source": 899, - "pc": [ - 3237 - ] - }, - { - "teal": 3273, - "source": 899, - "pc": [ - 3238 - ] - }, - { - "teal": 3274, - "source": 899, - "pc": [ - 3239, - 3240 - ] - }, - { - "teal": 3275, - "source": 899, - "pc": [ - 3241, - 3242 - ] - }, - { - "teal": 3276, - "source": 899, - "pc": [ - 3243, - 3244, - 3245 - ] - }, - { - "teal": 3277, - "source": 899, - "pc": [ - 3246 - ] - }, - { - "teal": 3278, - "source": 899, - "pc": [ - 3247 - ] - }, - { - "teal": 3279, - "source": 899, - "pc": [ - 3248 - ] - }, - { - "teal": 3280, - "source": 899, - "pc": [ - 3249, - 3250 - ] - }, - { - "teal": 3281, - "source": 899, - "pc": [ - 3251 - ] - }, - { - "teal": 3282, - "source": 899, - "pc": [ - 3252 - ] - }, - { - "teal": 3283, - "source": 899, - "pc": [ - 3253 - ] - }, - { - "teal": 3284, - "source": 899, - "pc": [ - 3254 - ] - }, - { - "teal": 3285, - "source": 899, - "pc": [ - 3255, - 3256 - ] - }, - { - "teal": 3286, - "source": 899, - "pc": [ - 3257 - ] - }, - { - "teal": 3287, - "source": 899, - "pc": [ - 3258, - 3259 - ] - }, - { - "teal": 3288, - "source": 899, - "pc": [ - 3260, - 3261, - 3262 - ] - }, - { - "teal": 3289, - "source": 899, - "pc": [ - 3263 - ] - }, - { - "teal": 3290, - "source": 899, - "pc": [ - 3264 - ] - }, - { - "teal": 3291, - "source": 899, - "pc": [ - 3265 - ] - }, - { - "teal": 3292, - "source": 899, - "pc": [ - 3266, - 3267 - ] - }, - { - "teal": 3293, - "source": 899, - "pc": [ - 3268 - ] - }, - { - "teal": 3294, - "source": 899, - "pc": [ - 3269 - ] - }, - { - "teal": 3295, - "source": 899, - "pc": [ - 3270 - ] - }, - { - "teal": 3296, - "source": 899, - "pc": [ - 3271 - ] - }, - { - "teal": 3297, - "source": 899, - "pc": [ - 3272 - ] - }, - { - "teal": 3298, - "source": 899, - "pc": [ - 3273, - 3274, - 3275 - ] - }, - { - "teal": 3299, - "source": 899, - "pc": [ - 3276 - ] - }, - { - "teal": 3300, - "source": 899, - "pc": [ - 3277, - 3278 - ] - }, - { - "teal": 3301, - "source": 899, - "pc": [ - 3279, - 3280, - 3281 - ] - }, - { - "teal": 3302, - "source": 899, - "pc": [ - 3282 - ] - }, - { - "teal": 3303, - "source": 899, - "pc": [ - 3283 - ] - }, - { - "teal": 3304, - "source": 899, - "pc": [ - 3284 - ] - }, - { - "teal": 3305, - "source": 899, - "pc": [ - 3285, - 3286 - ] - }, - { - "teal": 3306, - "source": 899, - "pc": [ - 3287 - ] - }, - { - "teal": 3314, - "source": 902, - "pc": [ - 3288, - 3289 - ] - }, - { - "teal": 3315, - "source": 902, - "pc": [ - 3290, - 3291, - 3292 - ] - }, - { - "teal": 3316, - "source": 902, - "pc": [ - 3293 - ] - }, - { - "teal": 3317, - "source": 902, - "pc": [ - 3294 - ] - }, - { - "teal": 3318, - "source": 903, - "pc": [ - 3295, - 3296 - ] - }, - { - "teal": 3319, - "source": 903, - "pc": [ - 3297, - 3298, - 3299 - ] - }, - { - "teal": 3320, - "source": 903, - "pc": [ - 3300 - ] - }, - { - "teal": 3321, - "source": 903, - "pc": [ - 3301 - ] - }, - { - "teal": 3322, - "source": 903, - "pc": [ - 3302 - ] - }, - { - "teal": 3323, - "source": 904, - "pc": [ - 3303, - 3304 - ] - }, - { - "teal": 3324, - "source": 904, - "pc": [ - 3305, - 3306, - 3307 - ] - }, - { - "teal": 3325, - "source": 904, - "pc": [ - 3308 - ] - }, - { - "teal": 3326, - "source": 904, - "pc": [ - 3309 - ] - }, - { - "teal": 3327, - "source": 904, - "pc": [ - 3310 - ] - }, - { - "teal": 3328, - "source": 901, - "pc": [ - 3311, - 3312 - ] - }, - { - "teal": 3329, - "source": 901, - "pc": [ - 3313, - 3314, - 3315 - ] - }, - { - "teal": 3330, - "source": 901, - "pc": [ - 3316, - 3317 - ] - }, - { - "teal": 3334, - "source": 906, - "pc": [ - 3318, - 3319 - ] - }, - { - "teal": 3335, - "source": 906, - "pc": [ - 3320, - 3321 - ] - }, - { - "teal": 3336, - "source": 906, - "pc": [ - 3322, - 3323 - ] - }, - { - "teal": 3337, - "source": 906, - "pc": [ - 3324 - ] - }, - { - "teal": 3338, - "source": 906, - "pc": [ - 3325 - ] - }, - { - "teal": 3339, - "source": 906, - "pc": [ - 3326, - 3327 - ] - }, - { - "teal": 3343, - "source": 907, - "pc": [ - 3328, - 3329 - ] - }, - { - "teal": 3344, - "source": 907, - "pc": [ - 3330, - 3331 - ] - }, - { - "teal": 3345, - "source": 907, - "pc": [ - 3332, - 3333 - ] - }, - { - "teal": 3346, - "source": 907, - "pc": [ - 3334 - ] - }, - { - "teal": 3347, - "source": 907, - "pc": [ - 3335 - ] - }, - { - "teal": 3348, - "source": 907, - "pc": [ - 3336, - 3337 - ] - }, - { - "teal": 3353, - "source": 909, - "pc": [ - 3338, - 3339 - ] - }, - { - "teal": 3354, - "source": 909, - "pc": [ - 3340, - 3341, - 3342 - ] - }, - { - "teal": 3359, - "source": 910, - "pc": [ - 3343, - 3344 - ] - }, - { - "teal": 3360, - "source": 910, - "pc": [ - 3345 - ] - }, - { - "teal": 3361, - "source": 910, - "pc": [ - 3346 - ] - }, - { - "teal": 3362, - "source": 910, - "pc": [ - 3347 - ] - }, - { - "teal": 3363, - "source": 910, - "pc": [ - 3348, - 3349 - ] - }, - { - "teal": 3364, - "source": 910, - "pc": [ - 3350, - 3351, - 3352 - ] - }, - { - "teal": 3365, - "source": 910, - "pc": [ - 3353 - ] - }, - { - "teal": 3366, - "source": 910, - "pc": [ - 3354 - ] - }, - { - "teal": 3367, - "source": 910, - "pc": [ - 3355 - ] - }, - { - "teal": 3368, - "source": 910, - "pc": [ - 3356, - 3357 - ] - }, - { - "teal": 3369, - "source": 910, - "pc": [ - 3358 - ] - }, - { - "teal": 3370, - "source": 910, - "pc": [ - 3359 - ] - }, - { - "teal": 3371, - "source": 910, - "pc": [ - 3360 - ] - }, - { - "teal": 3372, - "source": 910, - "pc": [ - 3361 - ] - }, - { - "teal": 3373, - "source": 910, - "pc": [ - 3362 - ] - }, - { - "teal": 3374, - "source": 910, - "pc": [ - 3363 - ] - }, - { - "teal": 3375, - "source": 910, - "pc": [ - 3364, - 3365 - ] - }, - { - "teal": 3376, - "source": 910, - "pc": [ - 3366, - 3367, - 3368 - ] - }, - { - "teal": 3377, - "source": 910, - "pc": [ - 3369 - ] - }, - { - "teal": 3378, - "source": 910, - "pc": [ - 3370 - ] - }, - { - "teal": 3379, - "source": 910, - "pc": [ - 3371 - ] - }, - { - "teal": 3380, - "source": 910, - "pc": [ - 3372, - 3373 - ] - }, - { - "teal": 3381, - "source": 910, - "pc": [ - 3374 - ] - }, - { - "teal": 3387, - "source": 913, - "pc": [ - 3375, - 3376 - ] - }, - { - "teal": 3388, - "source": 913, - "pc": [ - 3377, - 3378, - 3379 - ] - }, - { - "teal": 3393, - "source": 914, - "pc": [ - 3380, - 3381 - ] - }, - { - "teal": 3394, - "source": 914, - "pc": [ - 3382 - ] - }, - { - "teal": 3395, - "source": 914, - "pc": [ - 3383 - ] - }, - { - "teal": 3396, - "source": 914, - "pc": [ - 3384 - ] - }, - { - "teal": 3397, - "source": 914, - "pc": [ - 3385, - 3386 - ] - }, - { - "teal": 3398, - "source": 914, - "pc": [ - 3387 - ] - }, - { - "teal": 3399, - "source": 914, - "pc": [ - 3388 - ] - }, - { - "teal": 3404, - "source": 834, - "pc": [ - 3389 - ] - }, - { - "teal": 3409, - "source": 930, - "pc": [ - 3390 - ] - }, - { - "teal": 3412, - "source": 933, - "pc": [ - 3391, - 3392, - 3393 - ] - }, - { - "teal": 3413, - "source": 933, - "pc": [ - 3394 - ] - }, - { - "teal": 3416, - "source": 932, - "pc": [ - 3395, - 3396, - 3397 - ] - }, - { - "teal": 3417, - "source": 932, - "pc": [ - 3398 - ] - }, - { - "teal": 3418, - "source": 932, - "pc": [ - 3399 - ] - }, - { - "teal": 3419, - "source": 932, - "pc": [ - 3400, - 3401 - ] - }, - { - "teal": 3420, - "source": 932, - "pc": [ - 3402 - ] - }, - { - "teal": 3423, - "source": 932, - "errorMessage": "argument 1 (staker) for findPoolForStaker must be a address", - "pc": [ - 3403 - ] - }, - { - "teal": 3426, - "source": 931, - "pc": [ - 3404, - 3405, - 3406 - ] - }, - { - "teal": 3427, - "source": 931, - "pc": [ - 3407 - ] - }, - { - "teal": 3430, - "source": 930, - "pc": [ - 3408, - 3409, - 3410 - ] - }, - { - "teal": 3431, - "source": 930, - "pc": [ - 3411 - ] - }, - { - "teal": 3432, - "source": 930, - "pc": [ - 3412 - ] - }, - { - "teal": 3433, - "source": 930, - "pc": [ - 3413 - ] - }, - { - "teal": 3434, - "source": 930, - "pc": [ - 3414 - ] - }, - { - "teal": 3448, - "source": 930, - "pc": [ - 3415, - 3416, - 3417 - ] - }, - { - "teal": 3451, - "source": 930, - "pc": [ - 3418 - ] - }, - { - "teal": 3452, - "source": 930, - "pc": [ - 3419, - 3420 - ] - }, - { - "teal": 3456, - "source": 935, - "pc": [ - 3421 - ] - }, - { - "teal": 3457, - "source": 935, - "pc": [ - 3422, - 3423 - ] - }, - { - "teal": 3461, - "source": 936, - "pc": [ - 3424 - ] - }, - { - "teal": 3462, - "source": 936, - "pc": [ - 3425, - 3426 - ] - }, - { - "teal": 3466, - "source": 944, - "pc": [ - 3427, - 3428 - ] - }, - { - "teal": 3467, - "source": 944, - "pc": [ - 3429, - 3430, - 3431 - ] - }, - { - "teal": 3468, - "source": 944, - "pc": [ - 3432, - 3433 - ] - }, - { - "teal": 3473, - "source": 947, - "pc": [ - 3434 - ] - }, - { - "teal": 3474, - "source": 947, - "pc": [ - 3435, - 3436 - ] - }, - { - "teal": 3475, - "source": 947, - "pc": [ - 3437 - ] - }, - { - "teal": 3476, - "source": 947, - "pc": [ - 3438 - ] - }, - { - "teal": 3477, - "source": 947, - "pc": [ - 3439 - ] - }, - { - "teal": 3478, - "source": 947, - "pc": [ - 3440 - ] - }, - { - "teal": 3479, - "source": 947, - "pc": [ - 3441, - 3442, - 3443 - ] - }, - { - "teal": 3484, - "source": 948, - "pc": [ - 3444 - ] - }, - { - "teal": 3485, - "source": 948, - "pc": [ - 3445, - 3446 - ] - }, - { - "teal": 3486, - "source": 948, - "pc": [ - 3447 - ] - }, - { - "teal": 3487, - "source": 948, - "pc": [ - 3448 - ] - }, - { - "teal": 3490, - "source": 948, - "errorMessage": "box value does not exist: this.stakerPoolSet(staker).value", - "pc": [ - 3449 - ] - }, - { - "teal": 3491, - "source": 948, - "pc": [ - 3450, - 3451 - ] - }, - { - "teal": 3495, - "source": 949, - "pc": [ - 3452, - 3453 - ] - }, - { - "teal": 3496, - "source": 949, - "pc": [ - 3454 - ] - }, - { - "teal": 3497, - "source": 949, - "pc": [ - 3455 - ] - }, - { - "teal": 3498, - "source": 949, - "pc": [ - 3456 - ] - }, - { - "teal": 3502, - "source": 950, - "pc": [ - 3457 - ] - }, - { - "teal": 3503, - "source": 950, - "pc": [ - 3458, - 3459 - ] - }, - { - "teal": 3508, - "source": 950, - "pc": [ - 3460, - 3461 - ] - }, - { - "teal": 3509, - "source": 950, - "pc": [ - 3462, - 3463 - ] - }, - { - "teal": 3510, - "source": 950, - "pc": [ - 3464 - ] - }, - { - "teal": 3511, - "source": 950, - "pc": [ - 3465, - 3466, - 3467 - ] - }, - { - "teal": 3516, - "source": 951, - "pc": [ - 3468, - 3469 - ] - }, - { - "teal": 3517, - "source": 951, - "pc": [ - 3470, - 3471 - ] - }, - { - "teal": 3518, - "source": 951, - "pc": [ - 3472 - ] - }, - { - "teal": 3519, - "source": 951, - "pc": [ - 3473, - 3474, - 3475 - ] - }, - { - "teal": 3524, - "source": 952, - "pc": [ - 3476 - ] - }, - { - "teal": 3525, - "source": 952, - "pc": [ - 3477, - 3478 - ] - }, - { - "teal": 3526, - "source": 952, - "pc": [ - 3479, - 3480 - ] - }, - { - "teal": 3527, - "source": 952, - "pc": [ - 3481 - ] - }, - { - "teal": 3528, - "source": 952, - "pc": [ - 3482, - 3483 - ] - }, - { - "teal": 3529, - "source": 952, - "pc": [ - 3484, - 3485 - ] - }, - { - "teal": 3530, - "source": 952, - "pc": [ - 3486 - ] - }, - { - "teal": 3531, - "source": 952, - "pc": [ - 3487, - 3488 - ] - }, - { - "teal": 3532, - "source": 952, - "pc": [ - 3489, - 3490 - ] - }, - { - "teal": 3533, - "source": 952, - "pc": [ - 3491, - 3492 - ] - }, - { - "teal": 3534, - "source": 952, - "pc": [ - 3493, - 3494 - ] - }, - { - "teal": 3535, - "source": 952, - "pc": [ - 3495 - ] - }, - { - "teal": 3541, - "source": 954, - "pc": [ - 3496, - 3497 - ] - }, - { - "teal": 3542, - "source": 954, - "pc": [ - 3498, - 3499 - ] - }, - { - "teal": 3543, - "source": 954, - "pc": [ - 3500 - ] - }, - { - "teal": 3544, - "source": 954, - "pc": [ - 3501 - ] - }, - { - "teal": 3545, - "source": 954, - "pc": [ - 3502 - ] - }, - { - "teal": 3546, - "source": 954, - "pc": [ - 3503 - ] - }, - { - "teal": 3547, - "source": 954, - "pc": [ - 3504 - ] - }, - { - "teal": 3548, - "source": 954, - "pc": [ - 3505 - ] - }, - { - "teal": 3549, - "source": 954, - "pc": [ - 3506 - ] - }, - { - "teal": 3550, - "source": 954, - "pc": [ - 3507 - ] - }, - { - "teal": 3551, - "source": 954, - "pc": [ - 3508 - ] - }, - { - "teal": 3552, - "source": 954, - "pc": [ - 3509, - 3510, - 3511 - ] - }, - { - "teal": 3555, - "source": 955, - "pc": [ - 3512, - 3513, - 3514 - ] - }, - { - "teal": 3560, - "source": 957, - "pc": [ - 3515 - ] - }, - { - "teal": 3561, - "source": 957, - "pc": [ - 3516, - 3517 - ] - }, - { - "teal": 3566, - "source": 958, - "pc": [ - 3518, - 3519 - ] - }, - { - "teal": 3567, - "source": 958, - "pc": [ - 3520, - 3521 - ] - }, - { - "teal": 3568, - "source": 958, - "pc": [ - 3522 - ] - }, - { - "teal": 3569, - "source": 958, - "pc": [ - 3523 - ] - }, - { - "teal": 3570, - "source": 958, - "pc": [ - 3524 - ] - }, - { - "teal": 3571, - "source": 958, - "pc": [ - 3525 - ] - }, - { - "teal": 3572, - "source": 958, - "pc": [ - 3526 - ] - }, - { - "teal": 3573, - "source": 958, - "pc": [ - 3527 - ] - }, - { - "teal": 3574, - "source": 958, - "pc": [ - 3528 - ] - }, - { - "teal": 3575, - "source": 958, - "pc": [ - 3529, - 3530 - ] - }, - { - "teal": 3576, - "source": 958, - "pc": [ - 3531 - ] - }, - { - "teal": 3577, - "source": 958, - "pc": [ - 3532, - 3533, - 3534 - ] - }, - { - "teal": 3582, - "source": 960, - "pc": [ - 3535 - ] - }, - { - "teal": 3583, - "source": 960, - "pc": [ - 3536, - 3537 - ] - }, - { - "teal": 3590, - "source": 962, - "pc": [ - 3538, - 3539 - ] - }, - { - "teal": 3591, - "source": 962, - "pc": [ - 3540, - 3541 - ] - }, - { - "teal": 3592, - "source": 962, - "pc": [ - 3542, - 3543 - ] - }, - { - "teal": 3593, - "source": 962, - "pc": [ - 3544 - ] - }, - { - "teal": 3594, - "source": 962, - "pc": [ - 3545 - ] - }, - { - "teal": 3595, - "source": 962, - "pc": [ - 3546 - ] - }, - { - "teal": 3596, - "source": 962, - "pc": [ - 3547 - ] - }, - { - "teal": 3597, - "source": 962, - "pc": [ - 3548 - ] - }, - { - "teal": 3598, - "source": 962, - "pc": [ - 3549 - ] - }, - { - "teal": 3599, - "source": 962, - "pc": [ - 3550 - ] - }, - { - "teal": 3600, - "source": 962, - "pc": [ - 3551 - ] - }, - { - "teal": 3601, - "source": 962, - "pc": [ - 3552 - ] - }, - { - "teal": 3602, - "source": 962, - "pc": [ - 3553, - 3554 - ] - }, - { - "teal": 3603, - "source": 962, - "pc": [ - 3555 - ] - }, - { - "teal": 3604, - "source": 962, - "pc": [ - 3556 - ] - }, - { - "teal": 3605, - "source": 962, - "pc": [ - 3557, - 3558 - ] - }, - { - "teal": 3606, - "source": 962, - "pc": [ - 3559 - ] - }, - { - "teal": 3607, - "source": 962, - "pc": [ - 3560 - ] - }, - { - "teal": 3608, - "source": 962, - "pc": [ - 3561 - ] - }, - { - "teal": 3609, - "source": 962, - "pc": [ - 3562, - 3563 - ] - }, - { - "teal": 3610, - "source": 962, - "pc": [ - 3564 - ] - }, - { - "teal": 3611, - "source": 962, - "pc": [ - 3565 - ] - }, - { - "teal": 3612, - "source": 962, - "pc": [ - 3566, - 3567 - ] - }, - { - "teal": 3613, - "source": 962, - "pc": [ - 3568 - ] - }, - { - "teal": 3614, - "source": 962, - "pc": [ - 3569 - ] - }, - { - "teal": 3615, - "source": 963, - "pc": [ - 3570, - 3571 - ] - }, - { - "teal": 3616, - "source": 962, - "pc": [ - 3572 - ] - }, - { - "teal": 3617, - "source": 964, - "pc": [ - 3573, - 3574 - ] - }, - { - "teal": 3618, - "source": 963, - "pc": [ - 3575 - ] - }, - { - "teal": 3619, - "source": 961, - "pc": [ - 3576, - 3577, - 3578 - ] - }, - { - "teal": 3624, - "source": 966, - "pc": [ - 3579, - 3580 - ] - }, - { - "teal": 3625, - "source": 966, - "pc": [ - 3581, - 3582 - ] - }, - { - "teal": 3626, - "source": 966, - "pc": [ - 3583 - ] - }, - { - "teal": 3627, - "source": 966, - "pc": [ - 3584 - ] - }, - { - "teal": 3628, - "source": 966, - "pc": [ - 3585 - ] - }, - { - "teal": 3629, - "source": 966, - "pc": [ - 3586 - ] - }, - { - "teal": 3630, - "source": 966, - "pc": [ - 3587, - 3588 - ] - }, - { - "teal": 3631, - "source": 966, - "pc": [ - 3589 - ] - }, - { - "teal": 3632, - "source": 966, - "pc": [ - 3590, - 3591 - ] - }, - { - "teal": 3633, - "source": 966, - "pc": [ - 3592 - ] - }, - { - "teal": 3634, - "source": 966, - "pc": [ - 3593 - ] - }, - { - "teal": 3635, - "source": 966, - "pc": [ - 3594, - 3595 - ] - }, - { - "teal": 3636, - "source": 966, - "pc": [ - 3596 - ] - }, - { - "teal": 3637, - "source": 966, - "pc": [ - 3597 - ] - }, - { - "teal": 3638, - "source": 966, - "pc": [ - 3598, - 3599, - 3600 - ] - }, - { - "teal": 3647, - "source": 950, - "pc": [ - 3601, - 3602 - ] - }, - { - "teal": 3648, - "source": 950, - "pc": [ - 3603 - ] - }, - { - "teal": 3649, - "source": 950, - "pc": [ - 3604 - ] - }, - { - "teal": 3650, - "source": 950, - "pc": [ - 3605, - 3606 - ] - }, - { - "teal": 3651, - "source": 950, - "pc": [ - 3607, - 3608, - 3609 - ] - }, - { - "teal": 3661, - "source": 974, - "pc": [ - 3610, - 3611 - ] - }, - { - "teal": 3662, - "source": 974, - "pc": [ - 3612, - 3613 - ] - }, - { - "teal": 3663, - "source": 974, - "pc": [ - 3614 - ] - }, - { - "teal": 3664, - "source": 974, - "pc": [ - 3615 - ] - }, - { - "teal": 3665, - "source": 974, - "pc": [ - 3616, - 3617 - ] - }, - { - "teal": 3666, - "source": 974, - "pc": [ - 3618 - ] - }, - { - "teal": 3667, - "source": 974, - "pc": [ - 3619 - ] - }, - { - "teal": 3668, - "source": 974, - "pc": [ - 3620, - 3621 - ] - }, - { - "teal": 3669, - "source": 974, - "pc": [ - 3622 - ] - }, - { - "teal": 3670, - "source": 974, - "pc": [ - 3623 - ] - }, - { - "teal": 3671, - "source": 974, - "pc": [ - 3624 - ] - }, - { - "teal": 3674, - "source": 973, - "errorMessage": "must stake at least the minimum for this pool", - "pc": [ - 3625 - ] - }, - { - "teal": 3678, - "source": 979, - "pc": [ - 3626, - 3627 - ] - }, - { - "teal": 3679, - "source": 979, - "pc": [ - 3628, - 3629 - ] - }, - { - "teal": 3680, - "source": 979, - "pc": [ - 3630 - ] - }, - { - "teal": 3681, - "source": 979, - "pc": [ - 3631, - 3632 - ] - }, - { - "teal": 3682, - "source": 979, - "pc": [ - 3633 - ] - }, - { - "teal": 3683, - "source": 979, - "pc": [ - 3634 - ] - }, - { - "teal": 3684, - "source": 979, - "pc": [ - 3635, - 3636 - ] - }, - { - "teal": 3685, - "source": 979, - "pc": [ - 3637 - ] - }, - { - "teal": 3686, - "source": 979, - "pc": [ - 3638, - 3639 - ] - }, - { - "teal": 3690, - "source": 980, - "pc": [ - 3640, - 3641 - ] - }, - { - "teal": 3691, - "source": 980, - "pc": [ - 3642, - 3643 - ] - }, - { - "teal": 3692, - "source": 980, - "pc": [ - 3644 - ] - }, - { - "teal": 3693, - "source": 980, - "pc": [ - 3645, - 3646 - ] - }, - { - "teal": 3694, - "source": 980, - "pc": [ - 3647 - ] - }, - { - "teal": 3695, - "source": 980, - "pc": [ - 3648 - ] - }, - { - "teal": 3696, - "source": 980, - "pc": [ - 3649, - 3650 - ] - }, - { - "teal": 3697, - "source": 980, - "pc": [ - 3651 - ] - }, - { - "teal": 3698, - "source": 980, - "pc": [ - 3652 - ] - }, - { - "teal": 3699, - "source": 980, - "pc": [ - 3653, - 3654 - ] - }, - { - "teal": 3703, - "source": 981, - "pc": [ - 3655 - ] - }, - { - "teal": 3704, - "source": 981, - "pc": [ - 3656, - 3657 - ] - }, - { - "teal": 3709, - "source": 981, - "pc": [ - 3658, - 3659 - ] - }, - { - "teal": 3710, - "source": 981, - "pc": [ - 3660, - 3661 - ] - }, - { - "teal": 3711, - "source": 981, - "pc": [ - 3662 - ] - }, - { - "teal": 3712, - "source": 981, - "pc": [ - 3663, - 3664, - 3665 - ] - }, - { - "teal": 3717, - "source": 982, - "pc": [ - 3666, - 3667 - ] - }, - { - "teal": 3718, - "source": 982, - "pc": [ - 3668, - 3669 - ] - }, - { - "teal": 3719, - "source": 982, - "pc": [ - 3670, - 3671 - ] - }, - { - "teal": 3720, - "source": 982, - "pc": [ - 3672 - ] - }, - { - "teal": 3721, - "source": 982, - "pc": [ - 3673, - 3674 - ] - }, - { - "teal": 3722, - "source": 982, - "pc": [ - 3675 - ] - }, - { - "teal": 3723, - "source": 982, - "pc": [ - 3676 - ] - }, - { - "teal": 3724, - "source": 982, - "pc": [ - 3677 - ] - }, - { - "teal": 3725, - "source": 982, - "pc": [ - 3678 - ] - }, - { - "teal": 3726, - "source": 982, - "pc": [ - 3679, - 3680 - ] - }, - { - "teal": 3727, - "source": 982, - "pc": [ - 3681 - ] - }, - { - "teal": 3728, - "source": 982, - "pc": [ - 3682, - 3683 - ] - }, - { - "teal": 3729, - "source": 982, - "pc": [ - 3684 - ] - }, - { - "teal": 3730, - "source": 982, - "pc": [ - 3685, - 3686, - 3687 - ] - }, - { - "teal": 3739, - "source": 984, - "pc": [ - 3688, - 3689 - ] - }, - { - "teal": 3740, - "source": 984, - "pc": [ - 3690 - ] - }, - { - "teal": 3741, - "source": 984, - "pc": [ - 3691, - 3692 - ] - }, - { - "teal": 3742, - "source": 984, - "pc": [ - 3693 - ] - }, - { - "teal": 3743, - "source": 984, - "pc": [ - 3694 - ] - }, - { - "teal": 3744, - "source": 984, - "pc": [ - 3695 - ] - }, - { - "teal": 3745, - "source": 984, - "pc": [ - 3696 - ] - }, - { - "teal": 3746, - "source": 984, - "pc": [ - 3697, - 3698 - ] - }, - { - "teal": 3747, - "source": 984, - "pc": [ - 3699, - 3700 - ] - }, - { - "teal": 3748, - "source": 984, - "pc": [ - 3701, - 3702 - ] - }, - { - "teal": 3749, - "source": 984, - "pc": [ - 3703 - ] - }, - { - "teal": 3750, - "source": 984, - "pc": [ - 3704 - ] - }, - { - "teal": 3751, - "source": 984, - "pc": [ - 3705 - ] - }, - { - "teal": 3752, - "source": 984, - "pc": [ - 3706 - ] - }, - { - "teal": 3753, - "source": 984, - "pc": [ - 3707 - ] - }, - { - "teal": 3754, - "source": 984, - "pc": [ - 3708 - ] - }, - { - "teal": 3755, - "source": 984, - "pc": [ - 3709 - ] - }, - { - "teal": 3756, - "source": 984, - "pc": [ - 3710 - ] - }, - { - "teal": 3757, - "source": 985, - "pc": [ - 3711, - 3712 - ] - }, - { - "teal": 3758, - "source": 985, - "pc": [ - 3713 - ] - }, - { - "teal": 3759, - "source": 985, - "pc": [ - 3714, - 3715 - ] - }, - { - "teal": 3760, - "source": 985, - "pc": [ - 3716 - ] - }, - { - "teal": 3761, - "source": 986, - "pc": [ - 3717 - ] - }, - { - "teal": 3762, - "source": 986, - "pc": [ - 3718, - 3719 - ] - }, - { - "teal": 3763, - "source": 986, - "pc": [ - 3720 - ] - }, - { - "teal": 3764, - "source": 983, - "pc": [ - 3721 - ] - }, - { - "teal": 3765, - "source": 983, - "pc": [ - 3722, - 3723, - 3724 - ] - }, - { - "teal": 3772, - "source": 981, - "pc": [ - 3725, - 3726 - ] - }, - { - "teal": 3773, - "source": 981, - "pc": [ - 3727 - ] - }, - { - "teal": 3774, - "source": 981, - "pc": [ - 3728 - ] - }, - { - "teal": 3775, - "source": 981, - "pc": [ - 3729, - 3730 - ] - }, - { - "teal": 3776, - "source": 981, - "pc": [ - 3731, - 3732, - 3733 - ] - }, - { - "teal": 3781, - "source": 991, - "pc": [ - 3734, - 3735 - ] - }, - { - "teal": 3782, - "source": 991, - "pc": [ - 3736 - ] - }, - { - "teal": 3783, - "source": 991, - "pc": [ - 3737, - 3738 - ] - }, - { - "teal": 3784, - "source": 991, - "pc": [ - 3739 - ] - }, - { - "teal": 3785, - "source": 991, - "pc": [ - 3740, - 3741 - ] - }, - { - "teal": 3786, - "source": 991, - "pc": [ - 3742 - ] - }, - { - "teal": 3787, - "source": 991, - "pc": [ - 3743, - 3744 - ] - }, - { - "teal": 3788, - "source": 991, - "pc": [ - 3745 - ] - }, - { - "teal": 3789, - "source": 991, - "pc": [ - 3746, - 3747 - ] - }, - { - "teal": 3790, - "source": 991, - "pc": [ - 3748 - ] - }, - { - "teal": 3791, - "source": 991, - "pc": [ - 3749 - ] - }, - { - "teal": 3792, - "source": 991, - "pc": [ - 3750, - 3751 - ] - }, - { - "teal": 3793, - "source": 991, - "pc": [ - 3752 - ] - }, - { - "teal": 3794, - "source": 991, - "pc": [ - 3753 - ] - }, - { - "teal": 3798, - "source": 930, - "pc": [ - 3754, - 3755 - ] - }, - { - "teal": 3801, - "source": 930, - "pc": [ - 3756, - 3757 - ] - }, - { - "teal": 3802, - "source": 930, - "pc": [ - 3758 - ] - }, - { - "teal": 3807, - "source": 1005, - "pc": [ - 3759, - 3760, - 3761 - ] - }, - { - "teal": 3808, - "source": 1005, - "pc": [ - 3762 - ] - }, - { - "teal": 3811, - "source": 1005, - "pc": [ - 3763, - 3764, - 3765 - ] - }, - { - "teal": 3812, - "source": 1005, - "pc": [ - 3766 - ] - }, - { - "teal": 3815, - "source": 1005, - "pc": [ - 3767, - 3768, - 3769 - ] - }, - { - "teal": 3816, - "source": 1005, - "pc": [ - 3770 - ] - }, - { - "teal": 3819, - "source": 1005, - "pc": [ - 3771, - 3772, - 3773 - ] - }, - { - "teal": 3820, - "source": 1005, - "pc": [ - 3774 - ] - }, - { - "teal": 3821, - "source": 1005, - "pc": [ - 3775 - ] - }, - { - "teal": 3835, - "source": 1005, - "pc": [ - 3776, - 3777, - 3778 - ] - }, - { - "teal": 3838, - "source": 1005, - "pc": [ - 3779 - ] - }, - { - "teal": 3839, - "source": 1005, - "pc": [ - 3780, - 3781 - ] - }, - { - "teal": 3847, - "source": 1008, - "pc": [ - 3782, - 3783 - ] - }, - { - "teal": 3848, - "source": 1008, - "pc": [ - 3784 - ] - }, - { - "teal": 3849, - "source": 1008, - "pc": [ - 3785, - 3786 - ] - }, - { - "teal": 3850, - "source": 1008, - "pc": [ - 3787 - ] - }, - { - "teal": 3851, - "source": 1008, - "pc": [ - 3788, - 3789 - ] - }, - { - "teal": 3852, - "source": 1008, - "pc": [ - 3790 - ] - }, - { - "teal": 3853, - "source": 1008, - "pc": [ - 3791 - ] - }, - { - "teal": 3854, - "source": 1008, - "pc": [ - 3792, - 3793 - ] - }, - { - "teal": 3855, - "source": 1008, - "pc": [ - 3794 - ] - }, - { - "teal": 3856, - "source": 1008, - "pc": [ - 3795 - ] - }, - { - "teal": 3857, - "source": 1008, - "pc": [ - 3796 - ] - }, - { - "teal": 3858, - "source": 1008, - "pc": [ - 3797, - 3798, - 3799 - ] - }, - { - "teal": 3859, - "source": 1009, - "pc": [ - 3800, - 3801 - ] - }, - { - "teal": 3860, - "source": 1009, - "pc": [ - 3802, - 3803 - ] - }, - { - "teal": 3861, - "source": 1009, - "pc": [ - 3804, - 3805 - ] - }, - { - "teal": 3862, - "source": 1009, - "pc": [ - 3806 - ] - }, - { - "teal": 3863, - "source": 1009, - "pc": [ - 3807, - 3808 - ] - }, - { - "teal": 3864, - "source": 1009, - "pc": [ - 3809 - ] - }, - { - "teal": 3865, - "source": 1009, - "pc": [ - 3810 - ] - }, - { - "teal": 3866, - "source": 1009, - "pc": [ - 3811, - 3812 - ] - }, - { - "teal": 3867, - "source": 1009, - "pc": [ - 3813 - ] - }, - { - "teal": 3868, - "source": 1009, - "pc": [ - 3814 - ] - }, - { - "teal": 3869, - "source": 1008, - "pc": [ - 3815 - ] - }, - { - "teal": 3873, - "source": 1007, - "errorMessage": "can only be called by owner or manager of validator", - "pc": [ - 3816 - ] - }, - { - "teal": 3877, - "source": 1013, - "pc": [ - 3817, - 3818 - ] - }, - { - "teal": 3878, - "source": 1013, - "pc": [ - 3819, - 3820 - ] - }, - { - "teal": 3879, - "source": 1013, - "pc": [ - 3821 - ] - }, - { - "teal": 3880, - "source": 1013, - "pc": [ - 3822, - 3823 - ] - }, - { - "teal": 3881, - "source": 1013, - "pc": [ - 3824 - ] - }, - { - "teal": 3882, - "source": 1013, - "pc": [ - 3825 - ] - }, - { - "teal": 3883, - "source": 1013, - "pc": [ - 3826, - 3827 - ] - }, - { - "teal": 3884, - "source": 1013, - "pc": [ - 3828 - ] - }, - { - "teal": 3885, - "source": 1013, - "pc": [ - 3829, - 3830 - ] - }, - { - "teal": 3889, - "source": 1014, - "pc": [ - 3831, - 3832 - ] - }, - { - "teal": 3890, - "source": 1014, - "pc": [ - 3833 - ] - }, - { - "teal": 3891, - "source": 1014, - "pc": [ - 3834 - ] - }, - { - "teal": 3892, - "source": 1014, - "pc": [ - 3835 - ] - }, - { - "teal": 3893, - "source": 1014, - "pc": [ - 3836, - 3837, - 3838 - ] - }, - { - "teal": 3894, - "source": 1014, - "pc": [ - 3839, - 3840 - ] - }, - { - "teal": 3895, - "source": 1014, - "pc": [ - 3841 - ] - }, - { - "teal": 3896, - "source": 1014, - "pc": [ - 3842 - ] - }, - { - "teal": 3897, - "source": 1014, - "pc": [ - 3843 - ] - }, - { - "teal": 3901, - "source": 1014, - "errorMessage": "node number out of allowable range", - "pc": [ - 3844 - ] - }, - { - "teal": 3905, - "source": 1016, - "pc": [ - 3845 - ] - }, - { - "teal": 3906, - "source": 1016, - "pc": [ - 3846, - 3847 - ] - }, - { - "teal": 3911, - "source": 1016, - "pc": [ - 3848, - 3849 - ] - }, - { - "teal": 3912, - "source": 1016, - "pc": [ - 3850 - ] - }, - { - "teal": 3913, - "source": 1016, - "pc": [ - 3851 - ] - }, - { - "teal": 3914, - "source": 1016, - "pc": [ - 3852, - 3853, - 3854 - ] - }, - { - "teal": 3918, - "source": 1017, - "pc": [ - 3855 - ] - }, - { - "teal": 3919, - "source": 1017, - "pc": [ - 3856, - 3857 - ] - }, - { - "teal": 3924, - "source": 1017, - "pc": [ - 3858, - 3859 - ] - }, - { - "teal": 3925, - "source": 1017, - "pc": [ - 3860, - 3861 - ] - }, - { - "teal": 3926, - "source": 1017, - "pc": [ - 3862 - ] - }, - { - "teal": 3927, - "source": 1017, - "pc": [ - 3863, - 3864, - 3865 - ] - }, - { - "teal": 3932, - "source": 1018, - "pc": [ - 3866, - 3867 - ] - }, - { - "teal": 3933, - "source": 1018, - "pc": [ - 3868 - ] - }, - { - "teal": 3934, - "source": 1018, - "pc": [ - 3869, - 3870 - ] - }, - { - "teal": 3935, - "source": 1018, - "pc": [ - 3871 - ] - }, - { - "teal": 3936, - "source": 1018, - "pc": [ - 3872 - ] - }, - { - "teal": 3937, - "source": 1018, - "pc": [ - 3873 - ] - }, - { - "teal": 3938, - "source": 1018, - "pc": [ - 3874 - ] - }, - { - "teal": 3939, - "source": 1018, - "pc": [ - 3875 - ] - }, - { - "teal": 3940, - "source": 1018, - "pc": [ - 3876, - 3877 - ] - }, - { - "teal": 3941, - "source": 1018, - "pc": [ - 3878 - ] - }, - { - "teal": 3942, - "source": 1018, - "pc": [ - 3879 - ] - }, - { - "teal": 3943, - "source": 1018, - "pc": [ - 3880 - ] - }, - { - "teal": 3944, - "source": 1018, - "pc": [ - 3881 - ] - }, - { - "teal": 3945, - "source": 1018, - "pc": [ - 3882 - ] - }, - { - "teal": 3946, - "source": 1018, - "pc": [ - 3883 - ] - }, - { - "teal": 3947, - "source": 1018, - "pc": [ - 3884, - 3885 - ] - }, - { - "teal": 3948, - "source": 1018, - "pc": [ - 3886 - ] - }, - { - "teal": 3949, - "source": 1018, - "pc": [ - 3887, - 3888, - 3889 - ] - }, - { - "teal": 3954, - "source": 1019, - "pc": [ - 3890, - 3891 - ] - }, - { - "teal": 3955, - "source": 1019, - "pc": [ - 3892 - ] - }, - { - "teal": 3956, - "source": 1019, - "pc": [ - 3893 - ] - }, - { - "teal": 3957, - "source": 1019, - "pc": [ - 3894, - 3895 - ] - }, - { - "teal": 3958, - "source": 1019, - "pc": [ - 3896 - ] - }, - { - "teal": 3961, - "source": 1019, - "errorMessage": "can't move to same node", - "pc": [ - 3897 - ] - }, - { - "teal": 3965, - "source": 1021, - "pc": [ - 3898, - 3899 - ] - }, - { - "teal": 3966, - "source": 1021, - "pc": [ - 3900, - 3901 - ] - }, - { - "teal": 3967, - "source": 1021, - "pc": [ - 3902 - ] - }, - { - "teal": 3968, - "source": 1021, - "pc": [ - 3903 - ] - }, - { - "teal": 3969, - "source": 1021, - "pc": [ - 3904 - ] - }, - { - "teal": 3970, - "source": 1021, - "pc": [ - 3905 - ] - }, - { - "teal": 3971, - "source": 1021, - "pc": [ - 3906 - ] - }, - { - "teal": 3972, - "source": 1021, - "pc": [ - 3907, - 3908 - ] - }, - { - "teal": 3973, - "source": 1021, - "pc": [ - 3909 - ] - }, - { - "teal": 3974, - "source": 1021, - "pc": [ - 3910 - ] - }, - { - "teal": 3975, - "source": 1021, - "pc": [ - 3911 - ] - }, - { - "teal": 3976, - "source": 1021, - "pc": [ - 3912, - 3913 - ] - }, - { - "teal": 3977, - "source": 1021, - "pc": [ - 3914 - ] - }, - { - "teal": 3978, - "source": 1021, - "pc": [ - 3915, - 3916 - ] - }, - { - "teal": 3979, - "source": 1021, - "pc": [ - 3917 - ] - }, - { - "teal": 3980, - "source": 1021, - "pc": [ - 3918 - ] - }, - { - "teal": 3981, - "source": 1021, - "pc": [ - 3919, - 3920 - ] - }, - { - "teal": 3982, - "source": 1021, - "pc": [ - 3921 - ] - }, - { - "teal": 3988, - "source": 1024, - "pc": [ - 3922 - ] - }, - { - "teal": 3989, - "source": 1024, - "pc": [ - 3923, - 3924 - ] - }, - { - "teal": 3990, - "source": 1024, - "pc": [ - 3925, - 3926 - ] - }, - { - "teal": 3991, - "source": 1024, - "pc": [ - 3927, - 3928, - 3929, - 3930, - 3931, - 3932 - ] - }, - { - "teal": 3992, - "source": 1024, - "pc": [ - 3933, - 3934 - ] - }, - { - "teal": 3996, - "source": 1025, - "pc": [ - 3935, - 3936 - ] - }, - { - "teal": 3997, - "source": 1025, - "pc": [ - 3937, - 3938 - ] - }, - { - "teal": 4000, - "source": 1024, - "pc": [ - 3939 - ] - }, - { - "teal": 4001, - "source": 1024, - "pc": [ - 3940, - 3941 - ] - }, - { - "teal": 4004, - "source": 1024, - "pc": [ - 3942 - ] - }, - { - "teal": 4008, - "source": 1029, - "pc": [ - 3943, - 3944 - ] - }, - { - "teal": 4009, - "source": 1029, - "pc": [ - 3945, - 3946 - ] - }, - { - "teal": 4010, - "source": 1029, - "pc": [ - 3947, - 3948 - ] - }, - { - "teal": 4011, - "source": 1029, - "pc": [ - 3949, - 3950, - 3951 - ] - }, - { - "teal": 4015, - "source": 1030, - "pc": [ - 3952 - ] - }, - { - "teal": 4022, - "source": 1017, - "pc": [ - 3953, - 3954 - ] - }, - { - "teal": 4023, - "source": 1017, - "pc": [ - 3955 - ] - }, - { - "teal": 4024, - "source": 1017, - "pc": [ - 3956 - ] - }, - { - "teal": 4025, - "source": 1017, - "pc": [ - 3957, - 3958 - ] - }, - { - "teal": 4026, - "source": 1017, - "pc": [ - 3959, - 3960, - 3961 - ] - }, - { - "teal": 4033, - "source": 1016, - "pc": [ - 3962, - 3963 - ] - }, - { - "teal": 4034, - "source": 1016, - "pc": [ - 3964 - ] - }, - { - "teal": 4035, - "source": 1016, - "pc": [ - 3965 - ] - }, - { - "teal": 4036, - "source": 1016, - "pc": [ - 3966, - 3967 - ] - }, - { - "teal": 4037, - "source": 1016, - "pc": [ - 3968, - 3969, - 3970 - ] - }, - { - "teal": 4041, - "source": 1034, - "errorMessage": "couldn't find pool app id in nodes to move", - "pc": [ - 3971 - ] - }, - { - "teal": 4042, - "source": 1005, - "pc": [ - 3972 - ] - }, - { - "teal": 4047, - "source": 1048, - "pc": [ - 3973 - ] - }, - { - "teal": 4050, - "source": 1048, - "pc": [ - 3974, - 3975, - 3976 - ] - }, - { - "teal": 4051, - "source": 1048, - "pc": [ - 3977 - ] - }, - { - "teal": 4052, - "source": 1048, - "pc": [ - 3978 - ] - }, - { - "teal": 4053, - "source": 1048, - "pc": [ - 3979, - 3980 - ] - }, - { - "teal": 4054, - "source": 1048, - "pc": [ - 3981 - ] - }, - { - "teal": 4057, - "source": 1048, - "errorMessage": "argument 0 (receiver) for emptyTokenRewards must be a address", - "pc": [ - 3982 - ] - }, - { - "teal": 4060, - "source": 1048, - "pc": [ - 3983, - 3984, - 3985 - ] - }, - { - "teal": 4061, - "source": 1048, - "pc": [ - 3986 - ] - }, - { - "teal": 4064, - "source": 1048, - "pc": [ - 3987, - 3988, - 3989 - ] - }, - { - "teal": 4065, - "source": 1048, - "pc": [ - 3990 - ] - }, - { - "teal": 4066, - "source": 1048, - "pc": [ - 3991 - ] - }, - { - "teal": 4067, - "source": 1048, - "pc": [ - 3992 - ] - }, - { - "teal": 4068, - "source": 1048, - "pc": [ - 3993 - ] - }, - { - "teal": 4069, - "source": 1048, - "pc": [ - 3994 - ] - }, - { - "teal": 4083, - "source": 1048, - "pc": [ - 3995, - 3996, - 3997 - ] - }, - { - "teal": 4086, - "source": 1048, - "pc": [ - 3998 - ] - }, - { - "teal": 4087, - "source": 1048, - "pc": [ - 3999, - 4000 - ] - }, - { - "teal": 4094, - "source": 1050, - "pc": [ - 4001, - 4002 - ] - }, - { - "teal": 4095, - "source": 1050, - "pc": [ - 4003 - ] - }, - { - "teal": 4096, - "source": 1050, - "pc": [ - 4004, - 4005 - ] - }, - { - "teal": 4097, - "source": 1050, - "pc": [ - 4006 - ] - }, - { - "teal": 4098, - "source": 1050, - "pc": [ - 4007, - 4008 - ] - }, - { - "teal": 4099, - "source": 1050, - "pc": [ - 4009 - ] - }, - { - "teal": 4100, - "source": 1050, - "pc": [ - 4010 - ] - }, - { - "teal": 4101, - "source": 1050, - "pc": [ - 4011, - 4012 - ] - }, - { - "teal": 4102, - "source": 1050, - "pc": [ - 4013 - ] - }, - { - "teal": 4103, - "source": 1050, - "pc": [ - 4014 - ] - }, - { - "teal": 4106, - "source": 1049, - "errorMessage": "can only be called by validator owner", - "pc": [ - 4015 - ] - }, - { - "teal": 4110, - "source": 1053, - "pc": [ - 4016, - 4017 - ] - }, - { - "teal": 4111, - "source": 1053, - "pc": [ - 4018 - ] - }, - { - "teal": 4112, - "source": 1053, - "pc": [ - 4019 - ] - }, - { - "teal": 4113, - "source": 1053, - "pc": [ - 4020, - 4021 - ] - }, - { - "teal": 4114, - "source": 1053, - "pc": [ - 4022 - ] - }, - { - "teal": 4115, - "source": 1053, - "pc": [ - 4023 - ] - }, - { - "teal": 4116, - "source": 1053, - "pc": [ - 4024, - 4025 - ] - }, - { - "teal": 4117, - "source": 1053, - "pc": [ - 4026 - ] - }, - { - "teal": 4118, - "source": 1053, - "pc": [ - 4027 - ] - }, - { - "teal": 4119, - "source": 1053, - "pc": [ - 4028, - 4029 - ] - }, - { - "teal": 4123, - "source": 1054, - "pc": [ - 4030, - 4031 - ] - }, - { - "teal": 4124, - "source": 1054, - "pc": [ - 4032 - ] - }, - { - "teal": 4125, - "source": 1054, - "pc": [ - 4033 - ] - }, - { - "teal": 4126, - "source": 1054, - "pc": [ - 4034, - 4035 - ] - }, - { - "teal": 4127, - "source": 1054, - "pc": [ - 4036 - ] - }, - { - "teal": 4128, - "source": 1054, - "pc": [ - 4037 - ] - }, - { - "teal": 4129, - "source": 1054, - "pc": [ - 4038, - 4039 - ] - }, - { - "teal": 4130, - "source": 1054, - "pc": [ - 4040 - ] - }, - { - "teal": 4131, - "source": 1054, - "pc": [ - 4041 - ] - }, - { - "teal": 4132, - "source": 1054, - "pc": [ - 4042, - 4043 - ] - }, - { - "teal": 4136, - "source": 1055, - "pc": [ - 4044, - 4045 - ] - }, - { - "teal": 4137, - "source": 1055, - "pc": [ - 4046 - ] - }, - { - "teal": 4138, - "source": 1055, - "pc": [ - 4047 - ] - }, - { - "teal": 4141, - "source": 1055, - "errorMessage": "this validator doesn't have a reward token defined", - "pc": [ - 4048 - ] - }, - { - "teal": 4145, - "source": 1056, - "pc": [ - 4049, - 4050 - ] - }, - { - "teal": 4146, - "source": 1056, - "pc": [ - 4051 - ] - }, - { - "teal": 4147, - "source": 1056, - "pc": [ - 4052 - ] - }, - { - "teal": 4148, - "source": 1056, - "pc": [ - 4053, - 4054 - ] - }, - { - "teal": 4149, - "source": 1056, - "pc": [ - 4055 - ] - }, - { - "teal": 4150, - "source": 1056, - "pc": [ - 4056 - ] - }, - { - "teal": 4151, - "source": 1056, - "pc": [ - 4057, - 4058 - ] - }, - { - "teal": 4152, - "source": 1056, - "pc": [ - 4059 - ] - }, - { - "teal": 4153, - "source": 1056, - "pc": [ - 4060 - ] - }, - { - "teal": 4154, - "source": 1056, - "pc": [ - 4061, - 4062 - ] - }, - { - "teal": 4159, - "source": 1059, - "pc": [ - 4063, - 4064 - ] - }, - { - "teal": 4160, - "source": 1059, - "pc": [ - 4065, - 4066 - ] - }, - { - "teal": 4161, - "source": 1059, - "pc": [ - 4067 - ] - }, - { - "teal": 4162, - "source": 1059, - "pc": [ - 4068, - 4069 - ] - }, - { - "teal": 4163, - "source": 1059, - "pc": [ - 4070, - 4071 - ] - }, - { - "teal": 4164, - "source": 1059, - "pc": [ - 4072 - ] - }, - { - "teal": 4165, - "source": 1059, - "pc": [ - 4073, - 4074 - ] - }, - { - "teal": 4166, - "source": 1059, - "pc": [ - 4075 - ] - }, - { - "teal": 4167, - "source": 1058, - "pc": [ - 4076, - 4077 - ] - }, - { - "teal": 4174, - "source": 1062, - "pc": [ - 4078 - ] - }, - { - "teal": 4175, - "source": 1062, - "pc": [ - 4079, - 4080 - ] - }, - { - "teal": 4176, - "source": 1062, - "pc": [ - 4081, - 4082 - ] - }, - { - "teal": 4177, - "source": 1062, - "pc": [ - 4083, - 4084 - ] - }, - { - "teal": 4178, - "source": 1062, - "pc": [ - 4085, - 4086 - ] - }, - { - "teal": 4182, - "source": 1063, - "pc": [ - 4087, - 4088 - ] - }, - { - "teal": 4183, - "source": 1063, - "pc": [ - 4089, - 4090 - ] - }, - { - "teal": 4187, - "source": 1064, - "pc": [ - 4091, - 4092 - ] - }, - { - "teal": 4188, - "source": 1064, - "pc": [ - 4093, - 4094 - ] - }, - { - "teal": 4189, - "source": 1064, - "pc": [ - 4095, - 4096 - ] - }, - { - "teal": 4190, - "source": 1064, - "pc": [ - 4097 - ] - }, - { - "teal": 4191, - "source": 1064, - "pc": [ - 4098, - 4099 - ] - }, - { - "teal": 4192, - "source": 1064, - "pc": [ - 4100, - 4101 - ] - }, - { - "teal": 4193, - "source": 1064, - "pc": [ - 4102 - ] - }, - { - "teal": 4194, - "source": 1064, - "pc": [ - 4103, - 4104 - ] - }, - { - "teal": 4197, - "source": 1062, - "pc": [ - 4105 - ] - }, - { - "teal": 4198, - "source": 1062, - "pc": [ - 4106, - 4107 - ] - }, - { - "teal": 4201, - "source": 1062, - "pc": [ - 4108 - ] - }, - { - "teal": 4208, - "source": 1067, - "pc": [ - 4109, - 4110 - ] - }, - { - "teal": 4209, - "source": 1067, - "pc": [ - 4111, - 4112 - ] - }, - { - "teal": 4210, - "source": 1067, - "pc": [ - 4113 - ] - }, - { - "teal": 4211, - "source": 1067, - "pc": [ - 4114, - 4115 - ] - }, - { - "teal": 4212, - "source": 1067, - "pc": [ - 4116, - 4117 - ] - }, - { - "teal": 4213, - "source": 1067, - "pc": [ - 4118 - ] - }, - { - "teal": 4214, - "source": 1067, - "pc": [ - 4119, - 4120 - ] - }, - { - "teal": 4215, - "source": 1067, - "pc": [ - 4121 - ] - }, - { - "teal": 4218, - "source": 1066, - "errorMessage": "balance of remaining reward tokens should match the held back amount", - "pc": [ - 4122 - ] - }, - { - "teal": 4222, - "source": 1070, - "pc": [ - 4123, - 4124 - ] - }, - { - "teal": 4225, - "source": 1048, - "pc": [ - 4125, - 4126 - ] - }, - { - "teal": 4228, - "source": 1048, - "pc": [ - 4127, - 4128 - ] - }, - { - "teal": 4229, - "source": 1048, - "pc": [ - 4129 - ] - }, - { - "teal": 4240, - "source": 1167, - "pc": [ - 4130, - 4131, - 4132 - ] - }, - { - "teal": 4244, - "source": 1168, - "pc": [ - 4133 - ] - }, - { - "teal": 4245, - "source": 1168, - "pc": [ - 4134, - 4135 - ] - }, - { - "teal": 4246, - "source": 1168, - "pc": [ - 4136, - 4137, - 4138 - ] - }, - { - "teal": 4247, - "source": 1168, - "pc": [ - 4139 - ] - }, - { - "teal": 4248, - "source": 1168, - "pc": [ - 4140 - ] - }, - { - "teal": 4249, - "source": 1168, - "pc": [ - 4141 - ] - }, - { - "teal": 4250, - "source": 1168, - "pc": [ - 4142 - ] - }, - { - "teal": 4251, - "source": 1168, - "pc": [ - 4143 - ] - }, - { - "teal": 4252, - "source": 1168, - "pc": [ - 4144 - ] - }, - { - "teal": 4255, - "source": 1168, - "errorMessage": "the specified validator id isn't valid", - "pc": [ - 4145 - ] - }, - { - "teal": 4259, - "source": 1169, - "pc": [ - 4146, - 4147 - ] - }, - { - "teal": 4260, - "source": 1169, - "pc": [ - 4148, - 4149, - 4150 - ] - }, - { - "teal": 4261, - "source": 1169, - "pc": [ - 4151 - ] - }, - { - "teal": 4262, - "source": 29, - "pc": [ - 4152 - ] - }, - { - "teal": 4263, - "source": 1169, - "pc": [ - 4153 - ] - }, - { - "teal": 4266, - "source": 1169, - "errorMessage": "pool id not in valid range", - "pc": [ - 4154 - ] - }, - { - "teal": 4273, - "source": 1171, - "pc": [ - 4155, - 4156 - ] - }, - { - "teal": 4274, - "source": 1171, - "pc": [ - 4157, - 4158, - 4159 - ] - }, - { - "teal": 4275, - "source": 1171, - "pc": [ - 4160 - ] - }, - { - "teal": 4276, - "source": 1171, - "pc": [ - 4161 - ] - }, - { - "teal": 4277, - "source": 1171, - "pc": [ - 4162 - ] - }, - { - "teal": 4278, - "source": 1171, - "pc": [ - 4163 - ] - }, - { - "teal": 4279, - "source": 1171, - "pc": [ - 4164, - 4165, - 4166 - ] - }, - { - "teal": 4280, - "source": 1171, - "pc": [ - 4167, - 4168 - ] - }, - { - "teal": 4281, - "source": 1171, - "pc": [ - 4169, - 4170, - 4171 - ] - }, - { - "teal": 4282, - "source": 1171, - "pc": [ - 4172 - ] - }, - { - "teal": 4283, - "source": 1171, - "pc": [ - 4173, - 4174 - ] - }, - { - "teal": 4284, - "source": 1171, - "pc": [ - 4175, - 4176 - ] - }, - { - "teal": 4285, - "source": 1171, - "pc": [ - 4177 - ] - }, - { - "teal": 4286, - "source": 1171, - "pc": [ - 4178, - 4179 - ] - }, - { - "teal": 4287, - "source": 1171, - "pc": [ - 4180, - 4181, - 4182 - ] - }, - { - "teal": 4288, - "source": 1171, - "pc": [ - 4183 - ] - }, - { - "teal": 4289, - "source": 1171, - "pc": [ - 4184 - ] - }, - { - "teal": 4290, - "source": 1171, - "pc": [ - 4185 - ] - }, - { - "teal": 4291, - "source": 1171, - "pc": [ - 4186, - 4187 - ] - }, - { - "teal": 4292, - "source": 1171, - "pc": [ - 4188 - ] - }, - { - "teal": 4293, - "source": 1171, - "pc": [ - 4189 - ] - }, - { - "teal": 4294, - "source": 1171, - "pc": [ - 4190 - ] - }, - { - "teal": 4295, - "source": 1171, - "pc": [ - 4191 - ] - }, - { - "teal": 4299, - "source": 1170, - "errorMessage": "pool id outside of range of pools created for this validator", - "pc": [ - 4192 - ] - }, - { - "teal": 4306, - "source": 1177, - "pc": [ - 4193, - 4194 - ] - }, - { - "teal": 4307, - "source": 1177, - "pc": [ - 4195, - 4196, - 4197 - ] - }, - { - "teal": 4308, - "source": 1177, - "pc": [ - 4198 - ] - }, - { - "teal": 4309, - "source": 1177, - "pc": [ - 4199, - 4200 - ] - }, - { - "teal": 4310, - "source": 1177, - "pc": [ - 4201, - 4202 - ] - }, - { - "teal": 4311, - "source": 1177, - "pc": [ - 4203, - 4204, - 4205 - ] - }, - { - "teal": 4312, - "source": 1177, - "pc": [ - 4206 - ] - }, - { - "teal": 4313, - "source": 1177, - "pc": [ - 4207 - ] - }, - { - "teal": 4314, - "source": 1177, - "pc": [ - 4208 - ] - }, - { - "teal": 4315, - "source": 1177, - "pc": [ - 4209, - 4210 - ] - }, - { - "teal": 4316, - "source": 1177, - "pc": [ - 4211 - ] - }, - { - "teal": 4317, - "source": 1177, - "pc": [ - 4212 - ] - }, - { - "teal": 4318, - "source": 1177, - "pc": [ - 4213 - ] - }, - { - "teal": 4319, - "source": 1177, - "pc": [ - 4214 - ] - }, - { - "teal": 4320, - "source": 1177, - "pc": [ - 4215 - ] - }, - { - "teal": 4321, - "source": 1177, - "pc": [ - 4216 - ] - }, - { - "teal": 4322, - "source": 1177, - "pc": [ - 4217, - 4218 - ] - }, - { - "teal": 4323, - "source": 1177, - "pc": [ - 4219, - 4220, - 4221 - ] - }, - { - "teal": 4324, - "source": 1177, - "pc": [ - 4222 - ] - }, - { - "teal": 4325, - "source": 1177, - "pc": [ - 4223 - ] - }, - { - "teal": 4326, - "source": 1177, - "pc": [ - 4224 - ] - }, - { - "teal": 4327, - "source": 1177, - "pc": [ - 4225, - 4226 - ] - }, - { - "teal": 4328, - "source": 1177, - "pc": [ - 4227 - ] - }, - { - "teal": 4329, - "source": 1177, - "pc": [ - 4228 - ] - }, - { - "teal": 4330, - "source": 1177, - "pc": [ - 4229 - ] - }, - { - "teal": 4333, - "source": 1176, - "errorMessage": "The passed in app id doesn't match the passed in ids", - "pc": [ - 4230 - ] - }, - { - "teal": 4337, - "source": 1181, - "pc": [ - 4231, - 4232 - ] - }, - { - "teal": 4338, - "source": 1181, - "pc": [ - 4233, - 4234 - ] - }, - { - "teal": 4339, - "source": 1181, - "pc": [ - 4235, - 4236, - 4237 - ] - }, - { - "teal": 4340, - "source": 1181, - "pc": [ - 4238 - ] - }, - { - "teal": 4341, - "source": 1181, - "pc": [ - 4239, - 4240 - ] - }, - { - "teal": 4342, - "source": 1181, - "pc": [ - 4241 - ] - }, - { - "teal": 4343, - "source": 1181, - "pc": [ - 4242 - ] - }, - { - "teal": 4344, - "source": 1181, - "pc": [ - 4243 - ] - }, - { - "teal": 4348, - "source": 1183, - "pc": [ - 4244, - 4245 - ] - }, - { - "teal": 4349, - "source": 1183, - "pc": [ - 4246, - 4247, - 4248 - ] - }, - { - "teal": 4350, - "source": 1183, - "pc": [ - 4249 - ] - }, - { - "teal": 4351, - "source": 1183, - "pc": [ - 4250, - 4251 - ] - }, - { - "teal": 4352, - "source": 1183, - "pc": [ - 4252, - 4253, - 4254 - ] - }, - { - "teal": 4353, - "source": 1183, - "pc": [ - 4255 - ] - }, - { - "teal": 4354, - "source": 1183, - "pc": [ - 4256, - 4257, - 4258, - 4259, - 4260, - 4261, - 4262, - 4263, - 4264, - 4265, - 4266, - 4267, - 4268 - ] - }, - { - "teal": 4355, - "source": 1183, - "pc": [ - 4269 - ] - }, - { - "teal": 4358, - "source": 1183, - "errorMessage": "global state value does not exist: AppID.fromUint64(poolKey.poolAppId).globalState('validatorId')", - "pc": [ - 4270 - ] - }, - { - "teal": 4359, - "source": 1183, - "pc": [ - 4271 - ] - }, - { - "teal": 4360, - "source": 1183, - "pc": [ - 4272 - ] - }, - { - "teal": 4364, - "source": 1184, - "pc": [ - 4273, - 4274 - ] - }, - { - "teal": 4365, - "source": 1184, - "pc": [ - 4275, - 4276, - 4277 - ] - }, - { - "teal": 4366, - "source": 1184, - "pc": [ - 4278 - ] - }, - { - "teal": 4367, - "source": 1184, - "pc": [ - 4279, - 4280 - ] - }, - { - "teal": 4368, - "source": 1184, - "pc": [ - 4281, - 4282, - 4283 - ] - }, - { - "teal": 4369, - "source": 1184, - "pc": [ - 4284 - ] - }, - { - "teal": 4370, - "source": 1184, - "pc": [ - 4285, - 4286, - 4287, - 4288, - 4289, - 4290, - 4291, - 4292 - ] - }, - { - "teal": 4371, - "source": 1184, - "pc": [ - 4293 - ] - }, - { - "teal": 4374, - "source": 1184, - "errorMessage": "global state value does not exist: AppID.fromUint64(poolKey.poolAppId).globalState('poolId')", - "pc": [ - 4294 - ] - }, - { - "teal": 4375, - "source": 1184, - "pc": [ - 4295 - ] - }, - { - "teal": 4376, - "source": 1184, - "pc": [ - 4296 - ] - }, - { - "teal": 4377, - "source": 1167, - "pc": [ - 4297 - ] - }, - { - "teal": 4386, - "source": 1193, - "pc": [ - 4298, - 4299, - 4300 - ] - }, - { - "teal": 4389, - "source": 1193, - "pc": [ - 4301 - ] - }, - { - "teal": 4390, - "source": 1193, - "pc": [ - 4302 - ] - }, - { - "teal": 4394, - "source": 1194, - "pc": [ - 4303 - ] - }, - { - "teal": 4395, - "source": 1194, - "pc": [ - 4304, - 4305 - ] - }, - { - "teal": 4396, - "source": 1194, - "pc": [ - 4306 - ] - }, - { - "teal": 4397, - "source": 1194, - "pc": [ - 4307 - ] - }, - { - "teal": 4398, - "source": 1194, - "pc": [ - 4308, - 4309 - ] - }, - { - "teal": 4403, - "source": 1195, - "pc": [ - 4310, - 4311 - ] - }, - { - "teal": 4404, - "source": 1195, - "pc": [ - 4312 - ] - }, - { - "teal": 4405, - "source": 1194, - "pc": [ - 4313 - ] - }, - { - "teal": 4406, - "source": 1194, - "pc": [ - 4314, - 4315 - ] - }, - { - "teal": 4407, - "source": 1194, - "pc": [ - 4316 - ] - }, - { - "teal": 4408, - "source": 1194, - "pc": [ - 4317 - ] - }, - { - "teal": 4409, - "source": 1194, - "pc": [ - 4318, - 4319 - ] - }, - { - "teal": 4410, - "source": 1194, - "pc": [ - 4320 - ] - }, - { - "teal": 4411, - "source": 1195, - "pc": [ - 4321 - ] - }, - { - "teal": 4412, - "source": 1195, - "pc": [ - 4322 - ] - }, - { - "teal": 4413, - "source": 1195, - "pc": [ - 4323 - ] - }, - { - "teal": 4414, - "source": 1195, - "pc": [ - 4324, - 4325, - 4326 - ] - }, - { - "teal": 4419, - "source": 1198, - "pc": [ - 4327, - 4328 - ] - }, - { - "teal": 4420, - "source": 1198, - "pc": [ - 4329 - ] - }, - { - "teal": 4421, - "source": 1194, - "pc": [ - 4330 - ] - }, - { - "teal": 4422, - "source": 1194, - "pc": [ - 4331, - 4332 - ] - }, - { - "teal": 4423, - "source": 1194, - "pc": [ - 4333 - ] - }, - { - "teal": 4424, - "source": 1194, - "pc": [ - 4334 - ] - }, - { - "teal": 4425, - "source": 1194, - "pc": [ - 4335, - 4336 - ] - }, - { - "teal": 4426, - "source": 1194, - "pc": [ - 4337 - ] - }, - { - "teal": 4427, - "source": 1198, - "pc": [ - 4338 - ] - }, - { - "teal": 4428, - "source": 1198, - "pc": [ - 4339, - 4340 - ] - }, - { - "teal": 4429, - "source": 1198, - "pc": [ - 4341 - ] - }, - { - "teal": 4432, - "source": 1198, - "errorMessage": "global state value does not exist: AppID.fromUint64(validatorConfig.nfdForInfo).globalState('i.owner.a')", - "pc": [ - 4342 - ] - }, - { - "teal": 4433, - "source": 1198, - "pc": [ - 4343, - 4344 - ] - }, - { - "teal": 4438, - "source": 1200, - "pc": [ - 4345 - ] - }, - { - "teal": 4439, - "source": 1200, - "pc": [ - 4346, - 4347 - ] - }, - { - "teal": 4440, - "source": 1194, - "pc": [ - 4348 - ] - }, - { - "teal": 4441, - "source": 1194, - "pc": [ - 4349, - 4350 - ] - }, - { - "teal": 4442, - "source": 1194, - "pc": [ - 4351 - ] - }, - { - "teal": 4443, - "source": 1194, - "pc": [ - 4352 - ] - }, - { - "teal": 4444, - "source": 1194, - "pc": [ - 4353, - 4354 - ] - }, - { - "teal": 4445, - "source": 1194, - "pc": [ - 4355 - ] - }, - { - "teal": 4446, - "source": 1200, - "pc": [ - 4356, - 4357 - ] - }, - { - "teal": 4447, - "source": 1200, - "pc": [ - 4358 - ] - }, - { - "teal": 4448, - "source": 1200, - "pc": [ - 4359 - ] - }, - { - "teal": 4449, - "source": 1200, - "pc": [ - 4360, - 4361, - 4362 - ] - }, - { - "teal": 4450, - "source": 1200, - "pc": [ - 4363, - 4364 - ] - }, - { - "teal": 4451, - "source": 1200, - "pc": [ - 4365, - 4366 - ] - }, - { - "teal": 4452, - "source": 1194, - "pc": [ - 4367 - ] - }, - { - "teal": 4453, - "source": 1194, - "pc": [ - 4368, - 4369 - ] - }, - { - "teal": 4454, - "source": 1194, - "pc": [ - 4370 - ] - }, - { - "teal": 4455, - "source": 1194, - "pc": [ - 4371 - ] - }, - { - "teal": 4456, - "source": 1194, - "pc": [ - 4372, - 4373 - ] - }, - { - "teal": 4457, - "source": 1194, - "pc": [ - 4374 - ] - }, - { - "teal": 4458, - "source": 1200, - "pc": [ - 4375, - 4376 - ] - }, - { - "teal": 4459, - "source": 1200, - "pc": [ - 4377 - ] - }, - { - "teal": 4460, - "source": 1200, - "pc": [ - 4378 - ] - }, - { - "teal": 4463, - "source": 1200, - "pc": [ - 4379, - 4380, - 4381 - ] - }, - { - "teal": 4468, - "source": 1202, - "pc": [ - 4382, - 4383 - ] - }, - { - "teal": 4469, - "source": 1202, - "pc": [ - 4384, - 4385 - ] - }, - { - "teal": 4470, - "source": 1202, - "pc": [ - 4386 - ] - }, - { - "teal": 4471, - "source": 1202, - "pc": [ - 4387, - 4388 - ] - }, - { - "teal": 4472, - "source": 1202, - "pc": [ - 4389 - ] - }, - { - "teal": 4473, - "source": 1202, - "pc": [ - 4390 - ] - }, - { - "teal": 4474, - "source": 1202, - "pc": [ - 4391, - 4392 - ] - }, - { - "teal": 4475, - "source": 1202, - "pc": [ - 4393 - ] - }, - { - "teal": 4480, - "source": 1193, - "pc": [ - 4394 - ] - }, - { - "teal": 4484, - "source": 1207, - "pc": [ - 4395, - 4396, - 4397 - ] - }, - { - "teal": 4491, - "source": 1210, - "pc": [ - 4398, - 4399 - ] - }, - { - "teal": 4492, - "source": 1210, - "pc": [ - 4400, - 4401, - 4402 - ] - }, - { - "teal": 4493, - "source": 1210, - "pc": [ - 4403 - ] - }, - { - "teal": 4494, - "source": 1210, - "pc": [ - 4404 - ] - }, - { - "teal": 4495, - "source": 1210, - "pc": [ - 4405 - ] - }, - { - "teal": 4496, - "source": 1210, - "pc": [ - 4406 - ] - }, - { - "teal": 4497, - "source": 1210, - "pc": [ - 4407, - 4408, - 4409 - ] - }, - { - "teal": 4498, - "source": 1210, - "pc": [ - 4410, - 4411 - ] - }, - { - "teal": 4499, - "source": 1210, - "pc": [ - 4412, - 4413, - 4414 - ] - }, - { - "teal": 4500, - "source": 1210, - "pc": [ - 4415 - ] - }, - { - "teal": 4501, - "source": 1210, - "pc": [ - 4416, - 4417 - ] - }, - { - "teal": 4502, - "source": 1210, - "pc": [ - 4418 - ] - }, - { - "teal": 4503, - "source": 1210, - "pc": [ - 4419 - ] - }, - { - "teal": 4507, - "source": 1209, - "errorMessage": "gating type not valid", - "pc": [ - 4420 - ] - }, - { - "teal": 4514, - "source": 1214, - "pc": [ - 4421, - 4422 - ] - }, - { - "teal": 4515, - "source": 1214, - "pc": [ - 4423, - 4424, - 4425 - ] - }, - { - "teal": 4516, - "source": 1214, - "pc": [ - 4426 - ] - }, - { - "teal": 4517, - "source": 1214, - "pc": [ - 4427 - ] - }, - { - "teal": 4518, - "source": 1214, - "pc": [ - 4428 - ] - }, - { - "teal": 4519, - "source": 1214, - "pc": [ - 4429 - ] - }, - { - "teal": 4520, - "source": 1214, - "pc": [ - 4430, - 4431, - 4432 - ] - }, - { - "teal": 4521, - "source": 1214, - "pc": [ - 4433, - 4434 - ] - }, - { - "teal": 4522, - "source": 1214, - "pc": [ - 4435, - 4436, - 4437 - ] - }, - { - "teal": 4523, - "source": 1214, - "pc": [ - 4438 - ] - }, - { - "teal": 4524, - "source": 1214, - "pc": [ - 4439, - 4440 - ] - }, - { - "teal": 4525, - "source": 1214, - "pc": [ - 4441 - ] - }, - { - "teal": 4526, - "source": 1214, - "pc": [ - 4442 - ] - }, - { - "teal": 4530, - "source": 1213, - "errorMessage": "epoch length not in allowable range", - "pc": [ - 4443 - ] - }, - { - "teal": 4537, - "source": 1218, - "pc": [ - 4444, - 4445 - ] - }, - { - "teal": 4538, - "source": 1218, - "pc": [ - 4446, - 4447, - 4448 - ] - }, - { - "teal": 4539, - "source": 1218, - "pc": [ - 4449 - ] - }, - { - "teal": 4540, - "source": 1218, - "pc": [ - 4450 - ] - }, - { - "teal": 4541, - "source": 1218, - "pc": [ - 4451 - ] - }, - { - "teal": 4542, - "source": 1218, - "pc": [ - 4452 - ] - }, - { - "teal": 4543, - "source": 1218, - "pc": [ - 4453, - 4454, - 4455 - ] - }, - { - "teal": 4544, - "source": 1218, - "pc": [ - 4456, - 4457 - ] - }, - { - "teal": 4545, - "source": 1218, - "pc": [ - 4458, - 4459, - 4460 - ] - }, - { - "teal": 4546, - "source": 1218, - "pc": [ - 4461 - ] - }, - { - "teal": 4547, - "source": 1218, - "pc": [ - 4462, - 4463 - ] - }, - { - "teal": 4548, - "source": 1218, - "pc": [ - 4464 - ] - }, - { - "teal": 4549, - "source": 1218, - "pc": [ - 4465 - ] - }, - { - "teal": 4553, - "source": 1217, - "errorMessage": "commission percentage not valid", - "pc": [ - 4466 - ] - }, - { - "teal": 4558, - "source": 1221, - "pc": [ - 4467, - 4468 - ] - }, - { - "teal": 4559, - "source": 1221, - "pc": [ - 4469, - 4470, - 4471 - ] - }, - { - "teal": 4560, - "source": 1221, - "pc": [ - 4472 - ] - }, - { - "teal": 4561, - "source": 1221, - "pc": [ - 4473 - ] - }, - { - "teal": 4562, - "source": 1221, - "pc": [ - 4474 - ] - }, - { - "teal": 4563, - "source": 1221, - "pc": [ - 4475, - 4476, - 4477 - ] - }, - { - "teal": 4571, - "source": 1223, - "pc": [ - 4478, - 4479 - ] - }, - { - "teal": 4572, - "source": 1223, - "pc": [ - 4480, - 4481, - 4482 - ] - }, - { - "teal": 4573, - "source": 1223, - "pc": [ - 4483, - 4484 - ] - }, - { - "teal": 4574, - "source": 1223, - "pc": [ - 4485 - ] - }, - { - "teal": 4577, - "source": 1222, - "errorMessage": "validatorCommissionAddress must be set if percent to validator is not 0", - "pc": [ - 4486 - ] - }, - { - "teal": 4582, - "source": 1227, - "pc": [ - 4487, - 4488 - ] - }, - { - "teal": 4583, - "source": 1227, - "pc": [ - 4489, - 4490, - 4491 - ] - }, - { - "teal": 4584, - "source": 1227, - "pc": [ - 4492 - ] - }, - { - "teal": 4585, - "source": 1227, - "pc": [ - 4493, - 4494 - ] - }, - { - "teal": 4586, - "source": 1227, - "pc": [ - 4495 - ] - }, - { - "teal": 4589, - "source": 1227, - "errorMessage": "staking pool must have minimum entry of 1 algo", - "pc": [ - 4496 - ] - }, - { - "teal": 4596, - "source": 1230, - "pc": [ - 4497, - 4498 - ] - }, - { - "teal": 4597, - "source": 1230, - "pc": [ - 4499, - 4500, - 4501 - ] - }, - { - "teal": 4598, - "source": 1230, - "pc": [ - 4502 - ] - }, - { - "teal": 4599, - "source": 1230, - "pc": [ - 4503 - ] - }, - { - "teal": 4600, - "source": 1230, - "pc": [ - 4504 - ] - }, - { - "teal": 4601, - "source": 1230, - "pc": [ - 4505 - ] - }, - { - "teal": 4602, - "source": 1230, - "pc": [ - 4506, - 4507, - 4508 - ] - }, - { - "teal": 4603, - "source": 1230, - "pc": [ - 4509, - 4510 - ] - }, - { - "teal": 4604, - "source": 1230, - "pc": [ - 4511, - 4512, - 4513 - ] - }, - { - "teal": 4605, - "source": 1230, - "pc": [ - 4514 - ] - }, - { - "teal": 4606, - "source": 1230, - "pc": [ - 4515, - 4516 - ] - }, - { - "teal": 4607, - "source": 1230, - "pc": [ - 4517 - ] - }, - { - "teal": 4608, - "source": 1230, - "pc": [ - 4518 - ] - }, - { - "teal": 4612, - "source": 1229, - "errorMessage": "number of pools per node exceeds allowed number", - "pc": [ - 4519 - ] - }, - { - "teal": 4617, - "source": 1233, - "pc": [ - 4520, - 4521 - ] - }, - { - "teal": 4618, - "source": 1233, - "pc": [ - 4522, - 4523, - 4524 - ] - }, - { - "teal": 4619, - "source": 1233, - "pc": [ - 4525 - ] - }, - { - "teal": 4620, - "source": 1233, - "pc": [ - 4526 - ] - }, - { - "teal": 4621, - "source": 1233, - "pc": [ - 4527 - ] - }, - { - "teal": 4622, - "source": 1233, - "pc": [ - 4528, - 4529, - 4530 - ] - }, - { - "teal": 4627, - "source": 1234, - "pc": [ - 4531, - 4532 - ] - }, - { - "teal": 4628, - "source": 1234, - "pc": [ - 4533, - 4534, - 4535 - ] - }, - { - "teal": 4629, - "source": 1234, - "pc": [ - 4536 - ] - }, - { - "teal": 4630, - "source": 1234, - "pc": [ - 4537, - 4538 - ] - }, - { - "teal": 4631, - "source": 1234, - "pc": [ - 4539 - ] - }, - { - "teal": 4634, - "source": 1234, - "errorMessage": "sunsettingOn must be later than now if set", - "pc": [ - 4540 - ] - }, - { - "teal": 4637, - "source": 1207, - "pc": [ - 4541 - ] - }, - { - "teal": 4651, - "source": 1249, - "pc": [ - 4542, - 4543, - 4544 - ] - }, - { - "teal": 4654, - "source": 1249, - "pc": [ - 4545 - ] - }, - { - "teal": 4655, - "source": 1249, - "pc": [ - 4546, - 4547 - ] - }, - { - "teal": 4659, - "source": 1256, - "pc": [ - 4548, - 4549 - ] - }, - { - "teal": 4660, - "source": 1256, - "pc": [ - 4550, - 4551 - ] - }, - { - "teal": 4661, - "source": 1256, - "pc": [ - 4552, - 4553, - 4554 - ] - }, - { - "teal": 4662, - "source": 1256, - "pc": [ - 4555 - ] - }, - { - "teal": 4663, - "source": 1256, - "pc": [ - 4556 - ] - }, - { - "teal": 4664, - "source": 1256, - "pc": [ - 4557 - ] - }, - { - "teal": 4665, - "source": 1256, - "pc": [ - 4558, - 4559 - ] - }, - { - "teal": 4666, - "source": 1256, - "pc": [ - 4560 - ] - }, - { - "teal": 4667, - "source": 1256, - "pc": [ - 4561 - ] - }, - { - "teal": 4668, - "source": 1256, - "pc": [ - 4562 - ] - }, - { - "teal": 4669, - "source": 1256, - "pc": [ - 4563 - ] - }, - { - "teal": 4670, - "source": 1256, - "pc": [ - 4564 - ] - }, - { - "teal": 4671, - "source": 1256, - "pc": [ - 4565 - ] - }, - { - "teal": 4672, - "source": 1256, - "pc": [ - 4566, - 4567 - ] - }, - { - "teal": 4673, - "source": 1256, - "pc": [ - 4568, - 4569, - 4570 - ] - }, - { - "teal": 4674, - "source": 1256, - "pc": [ - 4571 - ] - }, - { - "teal": 4675, - "source": 1256, - "pc": [ - 4572 - ] - }, - { - "teal": 4676, - "source": 1256, - "pc": [ - 4573 - ] - }, - { - "teal": 4677, - "source": 1256, - "pc": [ - 4574, - 4575 - ] - }, - { - "teal": 4678, - "source": 1256, - "pc": [ - 4576 - ] - }, - { - "teal": 4679, - "source": 1256, - "pc": [ - 4577 - ] - }, - { - "teal": 4680, - "source": 1256, - "pc": [ - 4578, - 4579 - ] - }, - { - "teal": 4693, - "source": 1265, - "pc": [ - 4580 - ] - }, - { - "teal": 4694, - "source": 1265, - "pc": [ - 4581 - ] - }, - { - "teal": 4695, - "source": 1265, - "pc": [ - 4582, - 4583 - ] - }, - { - "teal": 4699, - "source": 1265, - "pc": [ - 4584, - 4585 - ] - }, - { - "teal": 4700, - "source": 1265, - "pc": [ - 4586, - 4587 - ] - }, - { - "teal": 4701, - "source": 1265, - "pc": [ - 4588, - 4589 - ] - }, - { - "teal": 4702, - "source": 1265, - "pc": [ - 4590 - ] - }, - { - "teal": 4703, - "source": 1265, - "pc": [ - 4591, - 4592 - ] - }, - { - "teal": 4707, - "source": 1265, - "pc": [ - 4593, - 4594 - ] - }, - { - "teal": 4708, - "source": 1265, - "pc": [ - 4595, - 4596 - ] - }, - { - "teal": 4709, - "source": 1265, - "pc": [ - 4597 - ] - }, - { - "teal": 4710, - "source": 1265, - "pc": [ - 4598, - 4599 - ] - }, - { - "teal": 4713, - "source": 1265, - "pc": [ - 4600 - ] - }, - { - "teal": 4714, - "source": 1265, - "pc": [ - 4601, - 4602 - ] - }, - { - "teal": 4715, - "source": 1260, - "pc": [ - 4603 - ] - }, - { - "teal": 4716, - "source": 1260, - "pc": [ - 4604, - 4605 - ] - }, - { - "teal": 4717, - "source": 1260, - "pc": [ - 4606, - 4607 - ] - }, - { - "teal": 4718, - "source": 1260, - "pc": [ - 4608, - 4609, - 4610, - 4611, - 4612, - 4613 - ] - }, - { - "teal": 4719, - "source": 1260, - "pc": [ - 4614, - 4615 - ] - }, - { - "teal": 4723, - "source": 1261, - "pc": [ - 4616, - 4617 - ] - }, - { - "teal": 4724, - "source": 1261, - "pc": [ - 4618, - 4619 - ] - }, - { - "teal": 4734, - "source": 1267, - "pc": [ - 4620, - 4621 - ] - }, - { - "teal": 4735, - "source": 1267, - "pc": [ - 4622, - 4623 - ] - }, - { - "teal": 4736, - "source": 1267, - "pc": [ - 4624, - 4625 - ] - }, - { - "teal": 4739, - "source": 1260, - "pc": [ - 4626 - ] - }, - { - "teal": 4740, - "source": 1260, - "pc": [ - 4627, - 4628 - ] - }, - { - "teal": 4743, - "source": 1260, - "pc": [ - 4629 - ] - }, - { - "teal": 4744, - "source": 1260, - "pc": [ - 4630, - 4631 - ] - }, - { - "teal": 4745, - "source": 1260, - "pc": [ - 4632 - ] - }, - { - "teal": 4746, - "source": 1260, - "pc": [ - 4633 - ] - }, - { - "teal": 4747, - "source": 1260, - "pc": [ - 4634, - 4635 - ] - }, - { - "teal": 4748, - "source": 1260, - "pc": [ - 4636, - 4637, - 4638 - ] - }, - { - "teal": 4749, - "source": 1260, - "pc": [ - 4639 - ] - }, - { - "teal": 4754, - "source": 1270, - "pc": [ - 4640, - 4641 - ] - }, - { - "teal": 4755, - "source": 1270, - "pc": [ - 4642, - 4643, - 4644 - ] - }, - { - "teal": 4756, - "source": 1270, - "pc": [ - 4645 - ] - }, - { - "teal": 4757, - "source": 1270, - "pc": [ - 4646, - 4647, - 4648 - ] - }, - { - "teal": 4762, - "source": 1271, - "pc": [ - 4649 - ] - }, - { - "teal": 4763, - "source": 1271, - "pc": [ - 4650, - 4651 - ] - }, - { - "teal": 4764, - "source": 1271, - "pc": [ - 4652, - 4653 - ] - }, - { - "teal": 4765, - "source": 1271, - "pc": [ - 4654 - ] - }, - { - "teal": 4766, - "source": 1271, - "pc": [ - 4655, - 4656 - ] - }, - { - "teal": 4767, - "source": 1271, - "pc": [ - 4657, - 4658 - ] - }, - { - "teal": 4768, - "source": 1271, - "pc": [ - 4659 - ] - }, - { - "teal": 4769, - "source": 1271, - "pc": [ - 4660, - 4661 - ] - }, - { - "teal": 4770, - "source": 1271, - "pc": [ - 4662, - 4663 - ] - }, - { - "teal": 4771, - "source": 1271, - "pc": [ - 4664, - 4665 - ] - }, - { - "teal": 4772, - "source": 1271, - "pc": [ - 4666, - 4667 - ] - }, - { - "teal": 4773, - "source": 1271, - "pc": [ - 4668 - ] - }, - { - "teal": 4778, - "source": 1275, - "pc": [ - 4669, - 4670 - ] - }, - { - "teal": 4779, - "source": 1275, - "pc": [ - 4671, - 4672 - ] - }, - { - "teal": 4780, - "source": 1275, - "pc": [ - 4673 - ] - }, - { - "teal": 4783, - "source": 1275, - "errorMessage": "global state value does not exist: AppID.fromUint64(poolAppId).globalState('numStakers')", - "pc": [ - 4674 - ] - }, - { - "teal": 4784, - "source": 1275, - "pc": [ - 4675, - 4676 - ] - }, - { - "teal": 4788, - "source": 1276, - "pc": [ - 4677, - 4678 - ] - }, - { - "teal": 4789, - "source": 1276, - "pc": [ - 4679, - 4680 - ] - }, - { - "teal": 4790, - "source": 1276, - "pc": [ - 4681 - ] - }, - { - "teal": 4793, - "source": 1276, - "errorMessage": "global state value does not exist: AppID.fromUint64(poolAppId).globalState('staked')", - "pc": [ - 4682 - ] - }, - { - "teal": 4794, - "source": 1276, - "pc": [ - 4683, - 4684 - ] - }, - { - "teal": 4798, - "source": 1277, - "pc": [ - 4685, - 4686 - ] - }, - { - "teal": 4799, - "source": 1277, - "pc": [ - 4687, - 4688 - ] - }, - { - "teal": 4800, - "source": 1277, - "pc": [ - 4689, - 4690, - 4691 - ] - }, - { - "teal": 4801, - "source": 1277, - "pc": [ - 4692 - ] - }, - { - "teal": 4802, - "source": 1277, - "pc": [ - 4693 - ] - }, - { - "teal": 4803, - "source": 1277, - "pc": [ - 4694 - ] - }, - { - "teal": 4804, - "source": 1277, - "pc": [ - 4695, - 4696 - ] - }, - { - "teal": 4805, - "source": 1277, - "pc": [ - 4697 - ] - }, - { - "teal": 4806, - "source": 1277, - "pc": [ - 4698 - ] - }, - { - "teal": 4807, - "source": 1277, - "pc": [ - 4699 - ] - }, - { - "teal": 4808, - "source": 1277, - "pc": [ - 4700 - ] - }, - { - "teal": 4809, - "source": 1277, - "pc": [ - 4701, - 4702 - ] - }, - { - "teal": 4810, - "source": 1277, - "pc": [ - 4703 - ] - }, - { - "teal": 4811, - "source": 1277, - "pc": [ - 4704, - 4705, - 4706 - ] - }, - { - "teal": 4812, - "source": 1277, - "pc": [ - 4707 - ] - }, - { - "teal": 4813, - "source": 1277, - "pc": [ - 4708, - 4709 - ] - }, - { - "teal": 4814, - "source": 1277, - "pc": [ - 4710, - 4711, - 4712 - ] - }, - { - "teal": 4815, - "source": 1277, - "pc": [ - 4713 - ] - }, - { - "teal": 4816, - "source": 1277, - "pc": [ - 4714 - ] - }, - { - "teal": 4817, - "source": 1277, - "pc": [ - 4715 - ] - }, - { - "teal": 4818, - "source": 1277, - "pc": [ - 4716, - 4717 - ] - }, - { - "teal": 4819, - "source": 1277, - "pc": [ - 4718 - ] - }, - { - "teal": 4823, - "source": 1278, - "pc": [ - 4719, - 4720 - ] - }, - { - "teal": 4824, - "source": 1278, - "pc": [ - 4721, - 4722 - ] - }, - { - "teal": 4825, - "source": 1278, - "pc": [ - 4723, - 4724, - 4725 - ] - }, - { - "teal": 4826, - "source": 1278, - "pc": [ - 4726 - ] - }, - { - "teal": 4827, - "source": 1278, - "pc": [ - 4727 - ] - }, - { - "teal": 4828, - "source": 1278, - "pc": [ - 4728 - ] - }, - { - "teal": 4829, - "source": 1278, - "pc": [ - 4729, - 4730 - ] - }, - { - "teal": 4830, - "source": 1278, - "pc": [ - 4731 - ] - }, - { - "teal": 4831, - "source": 1278, - "pc": [ - 4732 - ] - }, - { - "teal": 4832, - "source": 1278, - "pc": [ - 4733, - 4734 - ] - }, - { - "teal": 4833, - "source": 1278, - "pc": [ - 4735 - ] - }, - { - "teal": 4834, - "source": 1278, - "pc": [ - 4736, - 4737 - ] - }, - { - "teal": 4835, - "source": 1278, - "pc": [ - 4738 - ] - }, - { - "teal": 4836, - "source": 1278, - "pc": [ - 4739 - ] - }, - { - "teal": 4837, - "source": 1278, - "pc": [ - 4740, - 4741 - ] - }, - { - "teal": 4838, - "source": 1278, - "pc": [ - 4742, - 4743, - 4744 - ] - }, - { - "teal": 4839, - "source": 1278, - "pc": [ - 4745 - ] - }, - { - "teal": 4840, - "source": 1278, - "pc": [ - 4746 - ] - }, - { - "teal": 4841, - "source": 1278, - "pc": [ - 4747 - ] - }, - { - "teal": 4842, - "source": 1278, - "pc": [ - 4748, - 4749 - ] - }, - { - "teal": 4843, - "source": 1278, - "pc": [ - 4750 - ] - }, - { - "teal": 4848, - "source": 1281, - "pc": [ - 4751, - 4752 - ] - }, - { - "teal": 4849, - "source": 1281, - "pc": [ - 4753, - 4754, - 4755 - ] - }, - { - "teal": 4854, - "source": 1282, - "pc": [ - 4756, - 4757 - ] - }, - { - "teal": 4855, - "source": 1282, - "pc": [ - 4758 - ] - }, - { - "teal": 4856, - "source": 1282, - "pc": [ - 4759 - ] - }, - { - "teal": 4857, - "source": 1282, - "pc": [ - 4760 - ] - }, - { - "teal": 4858, - "source": 1282, - "pc": [ - 4761, - 4762 - ] - }, - { - "teal": 4859, - "source": 1282, - "pc": [ - 4763, - 4764, - 4765 - ] - }, - { - "teal": 4860, - "source": 1282, - "pc": [ - 4766 - ] - }, - { - "teal": 4861, - "source": 1282, - "pc": [ - 4767 - ] - }, - { - "teal": 4862, - "source": 1282, - "pc": [ - 4768 - ] - }, - { - "teal": 4863, - "source": 1282, - "pc": [ - 4769, - 4770 - ] - }, - { - "teal": 4864, - "source": 1282, - "pc": [ - 4771 - ] - }, - { - "teal": 4865, - "source": 1282, - "pc": [ - 4772 - ] - }, - { - "teal": 4866, - "source": 1282, - "pc": [ - 4773 - ] - }, - { - "teal": 4867, - "source": 1282, - "pc": [ - 4774 - ] - }, - { - "teal": 4868, - "source": 1282, - "pc": [ - 4775 - ] - }, - { - "teal": 4869, - "source": 1282, - "pc": [ - 4776 - ] - }, - { - "teal": 4870, - "source": 1282, - "pc": [ - 4777, - 4778 - ] - }, - { - "teal": 4871, - "source": 1282, - "pc": [ - 4779, - 4780, - 4781 - ] - }, - { - "teal": 4872, - "source": 1282, - "pc": [ - 4782 - ] - }, - { - "teal": 4873, - "source": 1282, - "pc": [ - 4783 - ] - }, - { - "teal": 4874, - "source": 1282, - "pc": [ - 4784 - ] - }, - { - "teal": 4875, - "source": 1282, - "pc": [ - 4785, - 4786 - ] - }, - { - "teal": 4876, - "source": 1282, - "pc": [ - 4787 - ] - }, - { - "teal": 4882, - "source": 1284, - "pc": [ - 4788, - 4789 - ] - }, - { - "teal": 4883, - "source": 1284, - "pc": [ - 4790, - 4791, - 4792 - ] - }, - { - "teal": 4888, - "source": 1285, - "pc": [ - 4793, - 4794 - ] - }, - { - "teal": 4889, - "source": 1285, - "pc": [ - 4795 - ] - }, - { - "teal": 4890, - "source": 1285, - "pc": [ - 4796 - ] - }, - { - "teal": 4891, - "source": 1285, - "pc": [ - 4797 - ] - }, - { - "teal": 4892, - "source": 1285, - "pc": [ - 4798, - 4799 - ] - }, - { - "teal": 4893, - "source": 1285, - "pc": [ - 4800 - ] - }, - { - "teal": 4894, - "source": 1285, - "pc": [ - 4801 - ] - }, - { - "teal": 4899, - "source": 1287, - "pc": [ - 4802, - 4803 - ] - }, - { - "teal": 4900, - "source": 1287, - "pc": [ - 4804 - ] - }, - { - "teal": 4901, - "source": 1287, - "pc": [ - 4805 - ] - }, - { - "teal": 4902, - "source": 1287, - "pc": [ - 4806 - ] - }, - { - "teal": 4903, - "source": 1287, - "pc": [ - 4807, - 4808 - ] - }, - { - "teal": 4904, - "source": 1287, - "pc": [ - 4809, - 4810, - 4811 - ] - }, - { - "teal": 4905, - "source": 1287, - "pc": [ - 4812 - ] - }, - { - "teal": 4906, - "source": 1287, - "pc": [ - 4813 - ] - }, - { - "teal": 4907, - "source": 1287, - "pc": [ - 4814 - ] - }, - { - "teal": 4908, - "source": 1287, - "pc": [ - 4815, - 4816 - ] - }, - { - "teal": 4909, - "source": 1287, - "pc": [ - 4817 - ] - }, - { - "teal": 4910, - "source": 1287, - "pc": [ - 4818 - ] - }, - { - "teal": 4911, - "source": 1287, - "pc": [ - 4819, - 4820 - ] - }, - { - "teal": 4912, - "source": 1287, - "pc": [ - 4821, - 4822 - ] - }, - { - "teal": 4913, - "source": 1287, - "pc": [ - 4823, - 4824 - ] - }, - { - "teal": 4914, - "source": 1287, - "pc": [ - 4825 - ] - }, - { - "teal": 4915, - "source": 1287, - "pc": [ - 4826 - ] - }, - { - "teal": 4916, - "source": 1287, - "pc": [ - 4827 - ] - }, - { - "teal": 4917, - "source": 1287, - "pc": [ - 4828 - ] - }, - { - "teal": 4918, - "source": 1287, - "pc": [ - 4829, - 4830 - ] - }, - { - "teal": 4919, - "source": 1287, - "pc": [ - 4831, - 4832, - 4833 - ] - }, - { - "teal": 4920, - "source": 1287, - "pc": [ - 4834 - ] - }, - { - "teal": 4921, - "source": 1287, - "pc": [ - 4835 - ] - }, - { - "teal": 4922, - "source": 1287, - "pc": [ - 4836 - ] - }, - { - "teal": 4923, - "source": 1287, - "pc": [ - 4837, - 4838 - ] - }, - { - "teal": 4924, - "source": 1287, - "pc": [ - 4839 - ] - }, - { - "teal": 4928, - "source": 1288, - "pc": [ - 4840, - 4841 - ] - }, - { - "teal": 4929, - "source": 1288, - "pc": [ - 4842 - ] - }, - { - "teal": 4930, - "source": 1288, - "pc": [ - 4843, - 4844 - ] - }, - { - "teal": 4931, - "source": 1288, - "pc": [ - 4845, - 4846 - ] - }, - { - "teal": 4932, - "source": 1288, - "pc": [ - 4847, - 4848 - ] - }, - { - "teal": 4933, - "source": 1288, - "pc": [ - 4849 - ] - }, - { - "teal": 4934, - "source": 1288, - "pc": [ - 4850 - ] - }, - { - "teal": 4935, - "source": 1288, - "pc": [ - 4851, - 4852 - ] - }, - { - "teal": 4936, - "source": 1288, - "pc": [ - 4853 - ] - }, - { - "teal": 4937, - "source": 1288, - "pc": [ - 4854 - ] - }, - { - "teal": 4938, - "source": 1249, - "pc": [ - 4855 - ] - }, - { - "teal": 4942, - "source": 1291, - "pc": [ - 4856, - 4857, - 4858 - ] - }, - { - "teal": 4945, - "source": 1291, - "pc": [ - 4859 - ] - }, - { - "teal": 4946, - "source": 1291, - "pc": [ - 4860, - 4861 - ] - }, - { - "teal": 4950, - "source": 1292, - "pc": [ - 4862 - ] - }, - { - "teal": 4951, - "source": 1292, - "pc": [ - 4863, - 4864 - ] - }, - { - "teal": 4952, - "source": 1292, - "pc": [ - 4865 - ] - }, - { - "teal": 4953, - "source": 1292, - "pc": [ - 4866 - ] - }, - { - "teal": 4954, - "source": 1292, - "pc": [ - 4867 - ] - }, - { - "teal": 4955, - "source": 1292, - "pc": [ - 4868 - ] - }, - { - "teal": 4956, - "source": 1292, - "pc": [ - 4869 - ] - }, - { - "teal": 4960, - "source": 1294, - "pc": [ - 4870 - ] - }, - { - "teal": 4961, - "source": 1294, - "pc": [ - 4871, - 4872 - ] - }, - { - "teal": 4962, - "source": 1294, - "pc": [ - 4873 - ] - }, - { - "teal": 4963, - "source": 1294, - "pc": [ - 4874 - ] - }, - { - "teal": 4966, - "source": 1294, - "errorMessage": "box value does not exist: this.stakerPoolSet(staker).value", - "pc": [ - 4875 - ] - }, - { - "teal": 4967, - "source": 1294, - "pc": [ - 4876, - 4877 - ] - }, - { - "teal": 4971, - "source": 1295, - "pc": [ - 4878 - ] - }, - { - "teal": 4972, - "source": 1295, - "pc": [ - 4879, - 4880 - ] - }, - { - "teal": 4976, - "source": 1296, - "pc": [ - 4881 - ] - }, - { - "teal": 4977, - "source": 1296, - "pc": [ - 4882, - 4883 - ] - }, - { - "teal": 4982, - "source": 1296, - "pc": [ - 4884, - 4885 - ] - }, - { - "teal": 4983, - "source": 1296, - "pc": [ - 4886, - 4887 - ] - }, - { - "teal": 4984, - "source": 1296, - "pc": [ - 4888 - ] - }, - { - "teal": 4985, - "source": 1296, - "pc": [ - 4889, - 4890, - 4891 - ] - }, - { - "teal": 4990, - "source": 1297, - "pc": [ - 4892, - 4893 - ] - }, - { - "teal": 4991, - "source": 1297, - "pc": [ - 4894, - 4895 - ] - }, - { - "teal": 4992, - "source": 1297, - "pc": [ - 4896 - ] - }, - { - "teal": 4993, - "source": 1297, - "pc": [ - 4897 - ] - }, - { - "teal": 4994, - "source": 1297, - "pc": [ - 4898 - ] - }, - { - "teal": 4995, - "source": 1297, - "pc": [ - 4899 - ] - }, - { - "teal": 4996, - "source": 1297, - "pc": [ - 4900, - 4901 - ] - }, - { - "teal": 4997, - "source": 1297, - "pc": [ - 4902 - ] - }, - { - "teal": 4998, - "source": 1297, - "pc": [ - 4903, - 4904, - 4905 - ] - }, - { - "teal": 5003, - "source": 1299, - "pc": [ - 4906 - ] - }, - { - "teal": 5009, - "source": 1301, - "pc": [ - 4907, - 4908 - ] - }, - { - "teal": 5010, - "source": 1301, - "pc": [ - 4909 - ] - }, - { - "teal": 5011, - "source": 1301, - "pc": [ - 4910 - ] - }, - { - "teal": 5012, - "source": 1301, - "pc": [ - 4911 - ] - }, - { - "teal": 5013, - "source": 1301, - "pc": [ - 4912, - 4913, - 4914 - ] - }, - { - "teal": 5014, - "source": 1301, - "pc": [ - 4915, - 4916 - ] - }, - { - "teal": 5015, - "source": 1301, - "pc": [ - 4917, - 4918 - ] - }, - { - "teal": 5016, - "source": 1301, - "pc": [ - 4919 - ] - }, - { - "teal": 5017, - "source": 1301, - "pc": [ - 4920 - ] - }, - { - "teal": 5018, - "source": 1301, - "pc": [ - 4921 - ] - }, - { - "teal": 5019, - "source": 1301, - "pc": [ - 4922 - ] - }, - { - "teal": 5020, - "source": 1301, - "pc": [ - 4923 - ] - }, - { - "teal": 5021, - "source": 1301, - "pc": [ - 4924 - ] - }, - { - "teal": 5022, - "source": 1301, - "pc": [ - 4925 - ] - }, - { - "teal": 5023, - "source": 1301, - "pc": [ - 4926 - ] - }, - { - "teal": 5024, - "source": 1301, - "pc": [ - 4927 - ] - }, - { - "teal": 5025, - "source": 1301, - "pc": [ - 4928 - ] - }, - { - "teal": 5028, - "source": 1301, - "pc": [ - 4929, - 4930, - 4931 - ] - }, - { - "teal": 5033, - "source": 1302, - "pc": [ - 4932, - 4933 - ] - }, - { - "teal": 5034, - "source": 1302, - "pc": [ - 4934 - ] - }, - { - "teal": 5035, - "source": 1302, - "pc": [ - 4935 - ] - }, - { - "teal": 5036, - "source": 1302, - "pc": [ - 4936, - 4937 - ] - }, - { - "teal": 5043, - "source": 1296, - "pc": [ - 4938, - 4939 - ] - }, - { - "teal": 5044, - "source": 1296, - "pc": [ - 4940 - ] - }, - { - "teal": 5045, - "source": 1296, - "pc": [ - 4941 - ] - }, - { - "teal": 5046, - "source": 1296, - "pc": [ - 4942, - 4943 - ] - }, - { - "teal": 5047, - "source": 1296, - "pc": [ - 4944, - 4945, - 4946 - ] - }, - { - "teal": 5053, - "source": 1305, - "pc": [ - 4947, - 4948 - ] - }, - { - "teal": 5054, - "source": 1305, - "pc": [ - 4949 - ] - }, - { - "teal": 5055, - "source": 1305, - "pc": [ - 4950 - ] - }, - { - "teal": 5056, - "source": 1305, - "pc": [ - 4951, - 4952, - 4953 - ] - }, - { - "teal": 5060, - "source": 1306, - "errorMessage": "No empty slot available in the staker pool set", - "pc": [ - 4954 - ] - }, - { - "teal": 5065, - "source": 1308, - "pc": [ - 4955, - 4956 - ] - }, - { - "teal": 5066, - "source": 1308, - "pc": [ - 4957 - ] - }, - { - "teal": 5067, - "source": 1308, - "pc": [ - 4958 - ] - }, - { - "teal": 5068, - "source": 1308, - "pc": [ - 4959 - ] - }, - { - "teal": 5069, - "source": 1308, - "pc": [ - 4960 - ] - }, - { - "teal": 5070, - "source": 1308, - "pc": [ - 4961, - 4962 - ] - }, - { - "teal": 5071, - "source": 1308, - "pc": [ - 4963 - ] - }, - { - "teal": 5072, - "source": 1308, - "pc": [ - 4964, - 4965 - ] - }, - { - "teal": 5073, - "source": 1308, - "pc": [ - 4966 - ] - }, - { - "teal": 5074, - "source": 1308, - "pc": [ - 4967, - 4968 - ] - }, - { - "teal": 5075, - "source": 1308, - "pc": [ - 4969 - ] - }, - { - "teal": 5076, - "source": 1291, - "pc": [ - 4970 - ] - }, - { - "teal": 5087, - "source": 1319, - "pc": [ - 4971, - 4972, - 4973 - ] - }, - { - "teal": 5090, - "source": 1319, - "pc": [ - 4974 - ] - }, - { - "teal": 5091, - "source": 1319, - "pc": [ - 4975, - 4976 - ] - }, - { - "teal": 5095, - "source": 1321, - "pc": [ - 4977 - ] - }, - { - "teal": 5096, - "source": 1321, - "pc": [ - 4978, - 4979 - ] - }, - { - "teal": 5100, - "source": 1322, - "pc": [ - 4980 - ] - }, - { - "teal": 5101, - "source": 1322, - "pc": [ - 4981, - 4982 - ] - }, - { - "teal": 5105, - "source": 1323, - "pc": [ - 4983 - ] - }, - { - "teal": 5106, - "source": 1323, - "pc": [ - 4984, - 4985 - ] - }, - { - "teal": 5110, - "source": 1325, - "pc": [ - 4986 - ] - }, - { - "teal": 5111, - "source": 1325, - "pc": [ - 4987, - 4988 - ] - }, - { - "teal": 5112, - "source": 1325, - "pc": [ - 4989 - ] - }, - { - "teal": 5113, - "source": 1325, - "pc": [ - 4990 - ] - }, - { - "teal": 5116, - "source": 1325, - "errorMessage": "box value does not exist: this.stakerPoolSet(staker).value", - "pc": [ - 4991 - ] - }, - { - "teal": 5117, - "source": 1325, - "pc": [ - 4992, - 4993 - ] - }, - { - "teal": 5121, - "source": 1326, - "pc": [ - 4994 - ] - }, - { - "teal": 5122, - "source": 1326, - "pc": [ - 4995, - 4996 - ] - }, - { - "teal": 5127, - "source": 1326, - "pc": [ - 4997, - 4998 - ] - }, - { - "teal": 5128, - "source": 1326, - "pc": [ - 4999, - 5000 - ] - }, - { - "teal": 5129, - "source": 1326, - "pc": [ - 5001 - ] - }, - { - "teal": 5130, - "source": 1326, - "pc": [ - 5002, - 5003, - 5004 - ] - }, - { - "teal": 5135, - "source": 1327, - "pc": [ - 5005, - 5006 - ] - }, - { - "teal": 5136, - "source": 1327, - "pc": [ - 5007, - 5008 - ] - }, - { - "teal": 5137, - "source": 1327, - "pc": [ - 5009 - ] - }, - { - "teal": 5138, - "source": 1327, - "pc": [ - 5010 - ] - }, - { - "teal": 5139, - "source": 1327, - "pc": [ - 5011 - ] - }, - { - "teal": 5140, - "source": 1327, - "pc": [ - 5012 - ] - }, - { - "teal": 5141, - "source": 1327, - "pc": [ - 5013 - ] - }, - { - "teal": 5142, - "source": 1327, - "pc": [ - 5014 - ] - }, - { - "teal": 5143, - "source": 1327, - "pc": [ - 5015 - ] - }, - { - "teal": 5144, - "source": 1327, - "pc": [ - 5016 - ] - }, - { - "teal": 5145, - "source": 1327, - "pc": [ - 5017 - ] - }, - { - "teal": 5146, - "source": 1327, - "pc": [ - 5018, - 5019, - 5020 - ] - }, - { - "teal": 5149, - "source": 1328, - "pc": [ - 5021, - 5022, - 5023 - ] - }, - { - "teal": 5154, - "source": 1330, - "pc": [ - 5024, - 5025 - ] - }, - { - "teal": 5155, - "source": 1330, - "pc": [ - 5026 - ] - }, - { - "teal": 5156, - "source": 1330, - "pc": [ - 5027 - ] - }, - { - "teal": 5157, - "source": 1330, - "pc": [ - 5028, - 5029 - ] - }, - { - "teal": 5162, - "source": 1331, - "pc": [ - 5030, - 5031 - ] - }, - { - "teal": 5163, - "source": 1331, - "pc": [ - 5032, - 5033 - ] - }, - { - "teal": 5164, - "source": 1331, - "pc": [ - 5034 - ] - }, - { - "teal": 5165, - "source": 1331, - "pc": [ - 5035 - ] - }, - { - "teal": 5166, - "source": 1331, - "pc": [ - 5036 - ] - }, - { - "teal": 5167, - "source": 1331, - "pc": [ - 5037 - ] - }, - { - "teal": 5168, - "source": 1331, - "pc": [ - 5038 - ] - }, - { - "teal": 5169, - "source": 1331, - "pc": [ - 5039 - ] - }, - { - "teal": 5170, - "source": 1331, - "pc": [ - 5040 - ] - }, - { - "teal": 5171, - "source": 1331, - "pc": [ - 5041, - 5042 - ] - }, - { - "teal": 5172, - "source": 1331, - "pc": [ - 5043, - 5044, - 5045 - ] - }, - { - "teal": 5173, - "source": 1331, - "pc": [ - 5046 - ] - }, - { - "teal": 5174, - "source": 1331, - "pc": [ - 5047 - ] - }, - { - "teal": 5175, - "source": 1331, - "pc": [ - 5048, - 5049, - 5050 - ] - }, - { - "teal": 5181, - "source": 1332, - "pc": [ - 5051, - 5052 - ] - }, - { - "teal": 5182, - "source": 1332, - "pc": [ - 5053, - 5054 - ] - }, - { - "teal": 5183, - "source": 1332, - "pc": [ - 5055 - ] - }, - { - "teal": 5184, - "source": 1332, - "pc": [ - 5056 - ] - }, - { - "teal": 5185, - "source": 1332, - "pc": [ - 5057 - ] - }, - { - "teal": 5186, - "source": 1332, - "pc": [ - 5058 - ] - }, - { - "teal": 5187, - "source": 1332, - "pc": [ - 5059, - 5060 - ] - }, - { - "teal": 5188, - "source": 1332, - "pc": [ - 5061 - ] - }, - { - "teal": 5189, - "source": 1332, - "pc": [ - 5062, - 5063, - 5064 - ] - }, - { - "teal": 5194, - "source": 1333, - "pc": [ - 5065 - ] - }, - { - "teal": 5195, - "source": 1333, - "pc": [ - 5066, - 5067 - ] - }, - { - "teal": 5199, - "source": 1335, - "pc": [ - 5068, - 5069 - ] - }, - { - "teal": 5200, - "source": 1335, - "pc": [ - 5070 - ] - }, - { - "teal": 5201, - "source": 1335, - "pc": [ - 5071 - ] - }, - { - "teal": 5202, - "source": 1335, - "pc": [ - 5072, - 5073, - 5074, - 5075, - 5076, - 5077, - 5078, - 5079, - 5080, - 5081, - 5082, - 5083, - 5084, - 5085, - 5086, - 5087, - 5088, - 5089, - 5090, - 5091, - 5092, - 5093, - 5094, - 5095, - 5096, - 5097 - ] - }, - { - "teal": 5203, - "source": 1335, - "pc": [ - 5098 - ] - }, - { - "teal": 5204, - "source": 1335, - "pc": [ - 5099, - 5100 - ] - }, - { - "teal": 5205, - "source": 1335, - "pc": [ - 5101 - ] - }, - { - "teal": 5206, - "source": 1335, - "pc": [ - 5102, - 5103 - ] - }, - { - "teal": 5207, - "source": 1335, - "pc": [ - 5104 - ] - }, - { - "teal": 5208, - "source": 1332, - "pc": [ - 5105, - 5106, - 5107 - ] - }, - { - "teal": 5213, - "source": 1337, - "pc": [ - 5108, - 5109 - ] - }, - { - "teal": 5214, - "source": 1337, - "pc": [ - 5110 - ] - }, - { - "teal": 5215, - "source": 1337, - "pc": [ - 5111 - ] - }, - { - "teal": 5216, - "source": 1337, - "pc": [ - 5112, - 5113 - ] - }, - { - "teal": 5225, - "source": 1326, - "pc": [ - 5114, - 5115 - ] - }, - { - "teal": 5226, - "source": 1326, - "pc": [ - 5116 - ] - }, - { - "teal": 5227, - "source": 1326, - "pc": [ - 5117 - ] - }, - { - "teal": 5228, - "source": 1326, - "pc": [ - 5118, - 5119 - ] - }, - { - "teal": 5229, - "source": 1326, - "pc": [ - 5120, - 5121, - 5122 - ] - }, - { - "teal": 5235, - "source": 1341, - "pc": [ - 5123, - 5124 - ] - }, - { - "teal": 5236, - "source": 1341, - "pc": [ - 5125 - ] - }, - { - "teal": 5237, - "source": 1341, - "pc": [ - 5126, - 5127, - 5128 - ] - }, - { - "teal": 5241, - "source": 1342, - "errorMessage": "No matching slot found when told to remove a pool from the stakers set", - "pc": [ - 5129 - ] - }, - { - "teal": 5246, - "source": 1345, - "pc": [ - 5130, - 5131 - ] - }, - { - "teal": 5247, - "source": 1345, - "pc": [ - 5132 - ] - }, - { - "teal": 5248, - "source": 1345, - "pc": [ - 5133, - 5134 - ] - }, - { - "teal": 5249, - "source": 1345, - "pc": [ - 5135 - ] - }, - { - "teal": 5250, - "source": 1345, - "pc": [ - 5136 - ] - }, - { - "teal": 5251, - "source": 1345, - "pc": [ - 5137 - ] - }, - { - "teal": 5252, - "source": 1345, - "pc": [ - 5138 - ] - }, - { - "teal": 5253, - "source": 1345, - "pc": [ - 5139, - 5140 - ] - }, - { - "teal": 5254, - "source": 1345, - "pc": [ - 5141 - ] - }, - { - "teal": 5255, - "source": 1345, - "pc": [ - 5142 - ] - }, - { - "teal": 5256, - "source": 1345, - "pc": [ - 5143 - ] - }, - { - "teal": 5259, - "source": 1319, - "pc": [ - 5144, - 5145 - ] - }, - { - "teal": 5262, - "source": 1319, - "pc": [ - 5146, - 5147 - ] - }, - { - "teal": 5263, - "source": 1319, - "pc": [ - 5148 - ] - }, - { - "teal": 5267, - "source": 1348, - "pc": [ - 5149, - 5150, - 5151 - ] - }, - { - "teal": 5270, - "source": 1348, - "pc": [ - 5152 - ] - }, - { - "teal": 5271, - "source": 1348, - "pc": [ - 5153, - 5154 - ] - }, - { - "teal": 5275, - "source": 1349, - "pc": [ - 5155, - 5156 - ] - }, - { - "teal": 5276, - "source": 1349, - "pc": [ - 5157, - 5158 - ] - }, - { - "teal": 5277, - "source": 1349, - "pc": [ - 5159 - ] - }, - { - "teal": 5278, - "source": 1349, - "pc": [ - 5160, - 5161 - ] - }, - { - "teal": 5279, - "source": 1349, - "pc": [ - 5162 - ] - }, - { - "teal": 5280, - "source": 1349, - "pc": [ - 5163 - ] - }, - { - "teal": 5281, - "source": 1349, - "pc": [ - 5164, - 5165 - ] - }, - { - "teal": 5282, - "source": 1349, - "pc": [ - 5166 - ] - }, - { - "teal": 5283, - "source": 1349, - "pc": [ - 5167, - 5168 - ] - }, - { - "teal": 5287, - "source": 1350, - "pc": [ - 5169, - 5170, - 5171 - ] - }, - { - "teal": 5288, - "source": 1350, - "pc": [ - 5172 - ] - }, - { - "teal": 5289, - "source": 1350, - "pc": [ - 5173 - ] - }, - { - "teal": 5290, - "source": 1350, - "pc": [ - 5174, - 5175 - ] - }, - { - "teal": 5291, - "source": 1350, - "pc": [ - 5176 - ] - }, - { - "teal": 5292, - "source": 1350, - "pc": [ - 5177 - ] - }, - { - "teal": 5293, - "source": 1350, - "pc": [ - 5178, - 5179 - ] - }, - { - "teal": 5294, - "source": 1350, - "pc": [ - 5180 - ] - }, - { - "teal": 5295, - "source": 1350, - "pc": [ - 5181 - ] - }, - { - "teal": 5296, - "source": 1350, - "pc": [ - 5182, - 5183 - ] - }, - { - "teal": 5300, - "source": 1352, - "pc": [ - 5184, - 5185 - ] - }, - { - "teal": 5301, - "source": 1352, - "pc": [ - 5186 - ] - }, - { - "teal": 5302, - "source": 1352, - "pc": [ - 5187 - ] - }, - { - "teal": 5303, - "source": 1352, - "pc": [ - 5188 - ] - }, - { - "teal": 5304, - "source": 1352, - "pc": [ - 5189, - 5190, - 5191 - ] - }, - { - "teal": 5305, - "source": 1352, - "pc": [ - 5192, - 5193 - ] - }, - { - "teal": 5306, - "source": 1352, - "pc": [ - 5194 - ] - }, - { - "teal": 5307, - "source": 1352, - "pc": [ - 5195 - ] - }, - { - "teal": 5308, - "source": 1352, - "pc": [ - 5196 - ] - }, - { - "teal": 5312, - "source": 1352, - "errorMessage": "node number not in valid range", - "pc": [ - 5197 - ] - }, - { - "teal": 5316, - "source": 1354, - "pc": [ - 5198 - ] - }, - { - "teal": 5317, - "source": 1354, - "pc": [ - 5199, - 5200 - ] - }, - { - "teal": 5322, - "source": 1354, - "pc": [ - 5201, - 5202 - ] - }, - { - "teal": 5323, - "source": 1354, - "pc": [ - 5203, - 5204 - ] - }, - { - "teal": 5324, - "source": 1354, - "pc": [ - 5205 - ] - }, - { - "teal": 5325, - "source": 1354, - "pc": [ - 5206, - 5207, - 5208 - ] - }, - { - "teal": 5330, - "source": 1355, - "pc": [ - 5209, - 5210 - ] - }, - { - "teal": 5331, - "source": 1355, - "pc": [ - 5211 - ] - }, - { - "teal": 5332, - "source": 1355, - "pc": [ - 5212, - 5213 - ] - }, - { - "teal": 5333, - "source": 1355, - "pc": [ - 5214 - ] - }, - { - "teal": 5334, - "source": 1355, - "pc": [ - 5215 - ] - }, - { - "teal": 5335, - "source": 1355, - "pc": [ - 5216 - ] - }, - { - "teal": 5336, - "source": 1355, - "pc": [ - 5217 - ] - }, - { - "teal": 5337, - "source": 1355, - "pc": [ - 5218 - ] - }, - { - "teal": 5338, - "source": 1355, - "pc": [ - 5219 - ] - }, - { - "teal": 5339, - "source": 1355, - "pc": [ - 5220 - ] - }, - { - "teal": 5340, - "source": 1355, - "pc": [ - 5221, - 5222 - ] - }, - { - "teal": 5341, - "source": 1355, - "pc": [ - 5223 - ] - }, - { - "teal": 5342, - "source": 1355, - "pc": [ - 5224 - ] - }, - { - "teal": 5343, - "source": 1355, - "pc": [ - 5225 - ] - }, - { - "teal": 5344, - "source": 1355, - "pc": [ - 5226 - ] - }, - { - "teal": 5345, - "source": 1355, - "pc": [ - 5227 - ] - }, - { - "teal": 5346, - "source": 1355, - "pc": [ - 5228 - ] - }, - { - "teal": 5347, - "source": 1355, - "pc": [ - 5229 - ] - }, - { - "teal": 5348, - "source": 1355, - "pc": [ - 5230 - ] - }, - { - "teal": 5349, - "source": 1355, - "pc": [ - 5231, - 5232, - 5233 - ] - }, - { - "teal": 5354, - "source": 1357, - "pc": [ - 5234, - 5235 - ] - }, - { - "teal": 5355, - "source": 1357, - "pc": [ - 5236, - 5237 - ] - }, - { - "teal": 5356, - "source": 1357, - "pc": [ - 5238 - ] - }, - { - "teal": 5357, - "source": 1357, - "pc": [ - 5239 - ] - }, - { - "teal": 5358, - "source": 1357, - "pc": [ - 5240 - ] - }, - { - "teal": 5359, - "source": 1357, - "pc": [ - 5241 - ] - }, - { - "teal": 5360, - "source": 1357, - "pc": [ - 5242 - ] - }, - { - "teal": 5361, - "source": 1357, - "pc": [ - 5243 - ] - }, - { - "teal": 5362, - "source": 1357, - "pc": [ - 5244 - ] - }, - { - "teal": 5363, - "source": 1357, - "pc": [ - 5245, - 5246 - ] - }, - { - "teal": 5364, - "source": 1357, - "pc": [ - 5247 - ] - }, - { - "teal": 5365, - "source": 1357, - "pc": [ - 5248 - ] - }, - { - "teal": 5366, - "source": 1357, - "pc": [ - 5249 - ] - }, - { - "teal": 5367, - "source": 1357, - "pc": [ - 5250, - 5251 - ] - }, - { - "teal": 5368, - "source": 1357, - "pc": [ - 5252 - ] - }, - { - "teal": 5369, - "source": 1357, - "pc": [ - 5253 - ] - }, - { - "teal": 5370, - "source": 1357, - "pc": [ - 5254, - 5255 - ] - }, - { - "teal": 5371, - "source": 1357, - "pc": [ - 5256 - ] - }, - { - "teal": 5372, - "source": 1357, - "pc": [ - 5257 - ] - }, - { - "teal": 5373, - "source": 1357, - "pc": [ - 5258, - 5259 - ] - }, - { - "teal": 5374, - "source": 1357, - "pc": [ - 5260 - ] - }, - { - "teal": 5378, - "source": 1358, - "pc": [ - 5261 - ] - }, - { - "teal": 5385, - "source": 1354, - "pc": [ - 5262, - 5263 - ] - }, - { - "teal": 5386, - "source": 1354, - "pc": [ - 5264 - ] - }, - { - "teal": 5387, - "source": 1354, - "pc": [ - 5265 - ] - }, - { - "teal": 5388, - "source": 1354, - "pc": [ - 5266, - 5267 - ] - }, - { - "teal": 5389, - "source": 1354, - "pc": [ - 5268, - 5269, - 5270 - ] - }, - { - "teal": 5393, - "source": 1361, - "errorMessage": "no available space in specified node for this pool", - "pc": [ - 5271 - ] - }, - { - "teal": 5394, - "source": 1348, - "pc": [ - 5272 - ] - }, - { - "teal": 5404, - "source": 1371, - "pc": [ - 5273, - 5274, - 5275 - ] - }, - { - "teal": 5407, - "source": 1371, - "pc": [ - 5276 - ] - }, - { - "teal": 5408, - "source": 1371, - "pc": [ - 5277, - 5278 - ] - }, - { - "teal": 5412, - "source": 1372, - "pc": [ - 5279, - 5280 - ] - }, - { - "teal": 5413, - "source": 1372, - "pc": [ - 5281 - ] - }, - { - "teal": 5414, - "source": 1372, - "pc": [ - 5282 - ] - }, - { - "teal": 5415, - "source": 1372, - "pc": [ - 5283, - 5284 - ] - }, - { - "teal": 5416, - "source": 1372, - "pc": [ - 5285 - ] - }, - { - "teal": 5417, - "source": 1372, - "pc": [ - 5286 - ] - }, - { - "teal": 5418, - "source": 1372, - "pc": [ - 5287, - 5288 - ] - }, - { - "teal": 5419, - "source": 1372, - "pc": [ - 5289 - ] - }, - { - "teal": 5420, - "source": 1372, - "pc": [ - 5290 - ] - }, - { - "teal": 5421, - "source": 1372, - "pc": [ - 5291, - 5292 - ] - }, - { - "teal": 5426, - "source": 1373, - "pc": [ - 5293, - 5294 - ] - }, - { - "teal": 5427, - "source": 1373, - "pc": [ - 5295 - ] - }, - { - "teal": 5428, - "source": 1373, - "pc": [ - 5296 - ] - }, - { - "teal": 5429, - "source": 1373, - "pc": [ - 5297, - 5298, - 5299 - ] - }, - { - "teal": 5434, - "source": 1374, - "pc": [ - 5300 - ] - }, - { - "teal": 5439, - "source": 1376, - "pc": [ - 5301, - 5302 - ] - }, - { - "teal": 5440, - "source": 1376, - "pc": [ - 5303, - 5304 - ] - }, - { - "teal": 5444, - "source": 1377, - "pc": [ - 5305 - ] - }, - { - "teal": 5445, - "source": 1377, - "pc": [ - 5306, - 5307 - ] - }, - { - "teal": 5446, - "source": 1377, - "pc": [ - 5308 - ] - }, - { - "teal": 5447, - "source": 1377, - "pc": [ - 5309, - 5310 - ] - }, - { - "teal": 5448, - "source": 1377, - "pc": [ - 5311 - ] - }, - { - "teal": 5449, - "source": 1377, - "pc": [ - 5312 - ] - }, - { - "teal": 5450, - "source": 1377, - "pc": [ - 5313, - 5314 - ] - }, - { - "teal": 5451, - "source": 1377, - "pc": [ - 5315 - ] - }, - { - "teal": 5452, - "source": 1377, - "pc": [ - 5316, - 5317 - ] - }, - { - "teal": 5459, - "source": 1381, - "pc": [ - 5318, - 5319 - ] - }, - { - "teal": 5460, - "source": 1381, - "pc": [ - 5320 - ] - }, - { - "teal": 5461, - "source": 1381, - "pc": [ - 5321 - ] - }, - { - "teal": 5462, - "source": 1381, - "pc": [ - 5322 - ] - }, - { - "teal": 5463, - "source": 1381, - "pc": [ - 5323, - 5324, - 5325 - ] - }, - { - "teal": 5464, - "source": 1382, - "pc": [ - 5326, - 5327 - ] - }, - { - "teal": 5465, - "source": 1382, - "pc": [ - 5328, - 5329 - ] - }, - { - "teal": 5466, - "source": 1382, - "pc": [ - 5330 - ] - }, - { - "teal": 5467, - "source": 1381, - "pc": [ - 5331 - ] - }, - { - "teal": 5470, - "source": 1382, - "pc": [ - 5332 - ] - }, - { - "teal": 5471, - "source": 1382, - "pc": [ - 5333, - 5334, - 5335 - ] - }, - { - "teal": 5472, - "source": 1383, - "pc": [ - 5336, - 5337 - ] - }, - { - "teal": 5473, - "source": 1383, - "pc": [ - 5338, - 5339 - ] - }, - { - "teal": 5474, - "source": 1383, - "pc": [ - 5340 - ] - }, - { - "teal": 5475, - "source": 1382, - "pc": [ - 5341 - ] - }, - { - "teal": 5478, - "source": 1380, - "pc": [ - 5342, - 5343, - 5344 - ] - }, - { - "teal": 5483, - "source": 1385, - "pc": [ - 5345, - 5346 - ] - }, - { - "teal": 5484, - "source": 1385, - "pc": [ - 5347 - ] - }, - { - "teal": 5485, - "source": 1385, - "pc": [ - 5348 - ] - }, - { - "teal": 5486, - "source": 1385, - "pc": [ - 5349 - ] - }, - { - "teal": 5490, - "source": 1386, - "pc": [ - 5350, - 5351 - ] - }, - { - "teal": 5491, - "source": 1386, - "pc": [ - 5352 - ] - }, - { - "teal": 5492, - "source": 1386, - "pc": [ - 5353 - ] - }, - { - "teal": 5493, - "source": 1386, - "pc": [ - 5354, - 5355 - ] - }, - { - "teal": 5494, - "source": 1386, - "pc": [ - 5356 - ] - }, - { - "teal": 5495, - "source": 1386, - "pc": [ - 5357 - ] - }, - { - "teal": 5496, - "source": 1386, - "pc": [ - 5358, - 5359 - ] - }, - { - "teal": 5497, - "source": 1386, - "pc": [ - 5360 - ] - }, - { - "teal": 5498, - "source": 1386, - "pc": [ - 5361 - ] - }, - { - "teal": 5499, - "source": 1386, - "pc": [ - 5362, - 5363 - ] - }, - { - "teal": 5504, - "source": 1387, - "pc": [ - 5364, - 5365 - ] - }, - { - "teal": 5505, - "source": 1387, - "pc": [ - 5366 - ] - }, - { - "teal": 5506, - "source": 1387, - "pc": [ - 5367 - ] - }, - { - "teal": 5507, - "source": 1387, - "pc": [ - 5368, - 5369, - 5370 - ] - }, - { - "teal": 5512, - "source": 1388, - "pc": [ - 5371 - ] - }, - { - "teal": 5513, - "source": 1388, - "pc": [ - 5372, - 5373 - ] - }, - { - "teal": 5521, - "source": 1391, - "pc": [ - 5374, - 5375 - ] - }, - { - "teal": 5522, - "source": 1391, - "pc": [ - 5376, - 5377 - ] - }, - { - "teal": 5523, - "source": 1391, - "pc": [ - 5378, - 5379 - ] - }, - { - "teal": 5524, - "source": 1391, - "pc": [ - 5380 - ] - }, - { - "teal": 5525, - "source": 1391, - "pc": [ - 5381, - 5382 - ] - }, - { - "teal": 5526, - "source": 1391, - "pc": [ - 5383 - ] - }, - { - "teal": 5529, - "source": 1390, - "errorMessage": "must have required minimum balance of validator defined token to add stake", - "pc": [ - 5384 - ] - }, - { - "teal": 5535, - "source": 1395, - "pc": [ - 5385, - 5386 - ] - }, - { - "teal": 5536, - "source": 1395, - "pc": [ - 5387 - ] - }, - { - "teal": 5537, - "source": 1395, - "pc": [ - 5388 - ] - }, - { - "teal": 5538, - "source": 1395, - "pc": [ - 5389, - 5390, - 5391 - ] - }, - { - "teal": 5546, - "source": 1397, - "pc": [ - 5392, - 5393 - ] - }, - { - "teal": 5547, - "source": 1397, - "pc": [ - 5394, - 5395 - ] - }, - { - "teal": 5548, - "source": 1397, - "pc": [ - 5396 - ] - }, - { - "teal": 5549, - "source": 1397, - "pc": [ - 5397, - 5398 - ] - }, - { - "teal": 5550, - "source": 1397, - "pc": [ - 5399, - 5400, - 5401 - ] - }, - { - "teal": 5551, - "source": 1397, - "pc": [ - 5402 - ] - }, - { - "teal": 5554, - "source": 1396, - "errorMessage": "specified asset must be created by creator that the validator defined as a requirement to stake", - "pc": [ - 5403 - ] - }, - { - "teal": 5560, - "source": 1401, - "pc": [ - 5404, - 5405 - ] - }, - { - "teal": 5561, - "source": 1401, - "pc": [ - 5406, - 5407 - ] - }, - { - "teal": 5562, - "source": 1401, - "pc": [ - 5408 - ] - }, - { - "teal": 5563, - "source": 1401, - "pc": [ - 5409, - 5410, - 5411 - ] - }, - { - "teal": 5568, - "source": 1402, - "pc": [ - 5412, - 5413 - ] - }, - { - "teal": 5569, - "source": 1402, - "pc": [ - 5414 - ] - }, - { - "teal": 5570, - "source": 1402, - "pc": [ - 5415 - ] - }, - { - "teal": 5571, - "source": 1402, - "pc": [ - 5416 - ] - }, - { - "teal": 5575, - "source": 1403, - "pc": [ - 5417 - ] - }, - { - "teal": 5576, - "source": 1403, - "pc": [ - 5418, - 5419 - ] - }, - { - "teal": 5580, - "source": 1404, - "pc": [ - 5420, - 5421 - ] - }, - { - "teal": 5581, - "source": 1404, - "pc": [ - 5422, - 5423, - 5424 - ] - }, - { - "teal": 5582, - "source": 1404, - "pc": [ - 5425 - ] - }, - { - "teal": 5583, - "source": 1404, - "pc": [ - 5426, - 5427 - ] - }, - { - "teal": 5584, - "source": 1404, - "pc": [ - 5428, - 5429, - 5430 - ] - }, - { - "teal": 5585, - "source": 1404, - "pc": [ - 5431 - ] - }, - { - "teal": 5586, - "source": 1404, - "pc": [ - 5432, - 5433 - ] - }, - { - "teal": 5587, - "source": 1404, - "pc": [ - 5434 - ] - }, - { - "teal": 5588, - "source": 1404, - "pc": [ - 5435, - 5436 - ] - }, - { - "teal": 5594, - "source": 1405, - "pc": [ - 5437, - 5438 - ] - }, - { - "teal": 5595, - "source": 1405, - "pc": [ - 5439, - 5440 - ] - }, - { - "teal": 5596, - "source": 1405, - "pc": [ - 5441 - ] - }, - { - "teal": 5597, - "source": 1405, - "pc": [ - 5442, - 5443, - 5444 - ] - }, - { - "teal": 5602, - "source": 1406, - "pc": [ - 5445 - ] - }, - { - "teal": 5603, - "source": 1406, - "pc": [ - 5446, - 5447 - ] - }, - { - "teal": 5604, - "source": 1407, - "pc": [ - 5448, - 5449, - 5450 - ] - }, - { - "teal": 5610, - "source": 1404, - "pc": [ - 5451, - 5452 - ] - }, - { - "teal": 5611, - "source": 1404, - "pc": [ - 5453 - ] - }, - { - "teal": 5612, - "source": 1404, - "pc": [ - 5454 - ] - }, - { - "teal": 5613, - "source": 1404, - "pc": [ - 5455 - ] - }, - { - "teal": 5614, - "source": 1404, - "pc": [ - 5456, - 5457 - ] - }, - { - "teal": 5615, - "source": 1404, - "pc": [ - 5458 - ] - }, - { - "teal": 5616, - "source": 1404, - "pc": [ - 5459, - 5460, - 5461 - ] - }, - { - "teal": 5617, - "source": 1404, - "pc": [ - 5462, - 5463 - ] - }, - { - "teal": 5618, - "source": 1404, - "pc": [ - 5464, - 5465 - ] - }, - { - "teal": 5619, - "source": 1404, - "pc": [ - 5466, - 5467 - ] - }, - { - "teal": 5620, - "source": 1404, - "pc": [ - 5468 - ] - }, - { - "teal": 5621, - "source": 1404, - "pc": [ - 5469 - ] - }, - { - "teal": 5622, - "source": 1404, - "pc": [ - 5470 - ] - }, - { - "teal": 5623, - "source": 1404, - "pc": [ - 5471, - 5472 - ] - }, - { - "teal": 5624, - "source": 1404, - "pc": [ - 5473, - 5474, - 5475 - ] - }, - { - "teal": 5629, - "source": 1410, - "pc": [ - 5476, - 5477 - ] - }, - { - "teal": 5632, - "source": 1410, - "errorMessage": "specified asset must be identical to the asset id defined as a requirement to stake", - "pc": [ - 5478 - ] - }, - { - "teal": 5638, - "source": 1412, - "pc": [ - 5479, - 5480 - ] - }, - { - "teal": 5639, - "source": 1412, - "pc": [ - 5481, - 5482 - ] - }, - { - "teal": 5640, - "source": 1412, - "pc": [ - 5483 - ] - }, - { - "teal": 5641, - "source": 1412, - "pc": [ - 5484, - 5485, - 5486 - ] - }, - { - "teal": 5649, - "source": 1416, - "pc": [ - 5487, - 5488 - ] - }, - { - "teal": 5650, - "source": 1416, - "pc": [ - 5489, - 5490 - ] - }, - { - "teal": 5651, - "source": 1416, - "pc": [ - 5491 - ] - }, - { - "teal": 5652, - "source": 1416, - "pc": [ - 5492, - 5493 - ] - }, - { - "teal": 5653, - "source": 1416, - "pc": [ - 5494, - 5495, - 5496 - ] - }, - { - "teal": 5654, - "source": 1416, - "pc": [ - 5497 - ] - }, - { - "teal": 5655, - "source": 1416, - "pc": [ - 5498, - 5499, - 5500 - ] - }, - { - "teal": 5658, - "source": 1415, - "errorMessage": "specified asset must be created by creator that is one of the linked addresses in an nfd", - "pc": [ - 5501 - ] - }, - { - "teal": 5664, - "source": 1420, - "pc": [ - 5502, - 5503 - ] - }, - { - "teal": 5665, - "source": 1420, - "pc": [ - 5504, - 5505 - ] - }, - { - "teal": 5666, - "source": 1420, - "pc": [ - 5506 - ] - }, - { - "teal": 5667, - "source": 1420, - "pc": [ - 5507, - 5508, - 5509 - ] - }, - { - "teal": 5672, - "source": 1422, - "pc": [ - 5510, - 5511 - ] - }, - { - "teal": 5673, - "source": 1422, - "pc": [ - 5512, - 5513 - ] - }, - { - "teal": 5677, - "source": 1423, - "pc": [ - 5514, - 5515 - ] - }, - { - "teal": 5678, - "source": 1423, - "pc": [ - 5516, - 5517, - 5518 - ] - }, - { - "teal": 5681, - "source": 1423, - "errorMessage": "provided NFD must be valid", - "pc": [ - 5519 - ] - }, - { - "teal": 5689, - "source": 1427, - "pc": [ - 5520, - 5521 - ] - }, - { - "teal": 5690, - "source": 1427, - "pc": [ - 5522, - 5523 - ] - }, - { - "teal": 5691, - "source": 1427, - "pc": [ - 5524 - ] - }, - { - "teal": 5694, - "source": 1427, - "errorMessage": "global state value does not exist: AppID.fromUint64(userOfferedNFDAppID).globalState('i.owner.a')", - "pc": [ - 5525 - ] - }, - { - "teal": 5695, - "source": 1428, - "pc": [ - 5526, - 5527 - ] - }, - { - "teal": 5696, - "source": 1427, - "pc": [ - 5528 - ] - }, - { - "teal": 5697, - "source": 1428, - "pc": [ - 5529 - ] - }, - { - "teal": 5698, - "source": 1428, - "pc": [ - 5530, - 5531, - 5532 - ] - }, - { - "teal": 5699, - "source": 1428, - "pc": [ - 5533, - 5534 - ] - }, - { - "teal": 5700, - "source": 1428, - "pc": [ - 5535, - 5536 - ] - }, - { - "teal": 5701, - "source": 1428, - "pc": [ - 5537, - 5538, - 5539 - ] - }, - { - "teal": 5702, - "source": 1428, - "pc": [ - 5540 - ] - }, - { - "teal": 5706, - "source": 1426, - "errorMessage": "provided nfd for entry isn't owned or linked to the staker", - "pc": [ - 5541 - ] - }, - { - "teal": 5714, - "source": 1434, - "pc": [ - 5542, - 5543 - ] - }, - { - "teal": 5715, - "source": 1434, - "pc": [ - 5544, - 5545, - 5546, - 5547, - 5548, - 5549, - 5550, - 5551, - 5552, - 5553, - 5554, - 5555, - 5556, - 5557, - 5558 - ] - }, - { - "teal": 5716, - "source": 1434, - "pc": [ - 5559 - ] - }, - { - "teal": 5719, - "source": 1434, - "errorMessage": "global state value does not exist: AppID.fromUint64(userOfferedNFDAppID).globalState('i.parentAppID')", - "pc": [ - 5560 - ] - }, - { - "teal": 5720, - "source": 1434, - "pc": [ - 5561 - ] - }, - { - "teal": 5721, - "source": 1435, - "pc": [ - 5562, - 5563 - ] - }, - { - "teal": 5722, - "source": 1435, - "pc": [ - 5564, - 5565, - 5566 - ] - }, - { - "teal": 5723, - "source": 1435, - "pc": [ - 5567 - ] - }, - { - "teal": 5724, - "source": 1434, - "pc": [ - 5568 - ] - }, - { - "teal": 5727, - "source": 1433, - "errorMessage": "specified nfd must be a segment of the nfd the validator specified as a requirement", - "pc": [ - 5569 - ] - }, - { - "teal": 5730, - "source": 1371, - "pc": [ - 5570 - ] - }, - { - "teal": 5742, - "source": 1450, - "pc": [ - 5571, - 5572, - 5573 - ] - }, - { - "teal": 5745, - "source": 1450, - "pc": [ - 5574 - ] - }, - { - "teal": 5749, - "source": 1452, - "pc": [ - 5575, - 5576 - ] - }, - { - "teal": 5750, - "source": 1452, - "pc": [ - 5577, - 5578, - 5579, - 5580, - 5581, - 5582, - 5583, - 5584 - ] - }, - { - "teal": 5751, - "source": 1452, - "pc": [ - 5585 - ] - }, - { - "teal": 5754, - "source": 1452, - "errorMessage": "global state value does not exist: AppID.fromUint64(nfdAppID).globalState('i.name')", - "pc": [ - 5586 - ] - }, - { - "teal": 5755, - "source": 1452, - "pc": [ - 5587, - 5588 - ] - }, - { - "teal": 5763, - "source": 1454, - "pc": [ - 5589 - ] - }, - { - "teal": 5764, - "source": 1454, - "pc": [ - 5590, - 5591 - ] - }, - { - "teal": 5765, - "source": 1454, - "pc": [ - 5592, - 5593 - ] - }, - { - "teal": 5769, - "source": 1455, - "pc": [ - 5594, - 5595 - ] - }, - { - "teal": 5770, - "source": 1455, - "pc": [ - 5596, - 5597 - ] - }, - { - "teal": 5774, - "source": 1456, - "pc": [ - 5598, - 5599 - ] - }, - { - "teal": 5775, - "source": 1456, - "pc": [ - 5600, - 5601 - ] - }, - { - "teal": 5776, - "source": 1456, - "pc": [ - 5602, - 5603 - ] - }, - { - "teal": 5777, - "source": 1456, - "pc": [ - 5604, - 5605 - ] - }, - { - "teal": 5778, - "source": 1456, - "pc": [ - 5606, - 5607 - ] - }, - { - "teal": 5779, - "source": 1456, - "pc": [ - 5608 - ] - }, - { - "teal": 5780, - "source": 1456, - "pc": [ - 5609, - 5610 - ] - }, - { - "teal": 5784, - "source": 1457, - "pc": [ - 5611, - 5612 - ] - }, - { - "teal": 5785, - "source": 1457, - "pc": [ - 5613, - 5614 - ] - }, - { - "teal": 5788, - "source": 1454, - "pc": [ - 5615 - ] - }, - { - "teal": 5789, - "source": 1454, - "pc": [ - 5616, - 5617 - ] - }, - { - "teal": 5792, - "source": 1454, - "pc": [ - 5618 - ] - }, - { - "teal": 5796, - "source": 1459, - "pc": [ - 5619, - 5620 - ] - }, - { - "teal": 5797, - "source": 1459, - "pc": [ - 5621 - ] - }, - { - "teal": 5798, - "source": 1459, - "pc": [ - 5622 - ] - }, - { - "teal": 5799, - "source": 1459, - "pc": [ - 5623 - ] - }, - { - "teal": 5802, - "source": 1450, - "pc": [ - 5624, - 5625 - ] - }, - { - "teal": 5803, - "source": 1450, - "pc": [ - 5626 - ] - }, - { - "teal": 5814, - "source": 1470, - "pc": [ - 5627, - 5628, - 5629 - ] - }, - { - "teal": 5817, - "source": 1470, - "pc": [ - 5630 - ] - }, - { - "teal": 5818, - "source": 1470, - "pc": [ - 5631, - 5632 - ] - }, - { - "teal": 5825, - "source": 1471, - "pc": [ - 5633 - ] - }, - { - "teal": 5826, - "source": 1471, - "pc": [ - 5634, - 5635 - ] - }, - { - "teal": 5827, - "source": 1471, - "pc": [ - 5636, - 5637 - ] - }, - { - "teal": 5831, - "source": 1472, - "pc": [ - 5638, - 5639 - ] - }, - { - "teal": 5832, - "source": 1472, - "pc": [ - 5640, - 5641 - ] - }, - { - "teal": 5836, - "source": 1473, - "pc": [ - 5642, - 5643, - 5644, - 5645, - 5646, - 5647, - 5648, - 5649, - 5650, - 5651, - 5652, - 5653, - 5654, - 5655, - 5656 - ] - }, - { - "teal": 5837, - "source": 1473, - "pc": [ - 5657, - 5658 - ] - }, - { - "teal": 5838, - "source": 1473, - "pc": [ - 5659, - 5660, - 5661, - 5662, - 5663, - 5664, - 5665, - 5666, - 5667, - 5668, - 5669, - 5670, - 5671, - 5672, - 5673 - ] - }, - { - "teal": 5839, - "source": 1473, - "pc": [ - 5674, - 5675 - ] - }, - { - "teal": 5842, - "source": 1471, - "pc": [ - 5676 - ] - }, - { - "teal": 5843, - "source": 1471, - "pc": [ - 5677, - 5678 - ] - }, - { - "teal": 5846, - "source": 1471, - "pc": [ - 5679 - ] - }, - { - "teal": 5850, - "source": 1475, - "pc": [ - 5680, - 5681 - ] - }, - { - "teal": 5851, - "source": 1475, - "pc": [ - 5682, - 5683 - ] - }, - { - "teal": 5855, - "source": 1476, - "pc": [ - 5684 - ] - }, - { - "teal": 5856, - "source": 1476, - "pc": [ - 5685, - 5686 - ] - }, - { - "teal": 5861, - "source": 1476, - "pc": [ - 5687, - 5688 - ] - }, - { - "teal": 5862, - "source": 1476, - "pc": [ - 5689, - 5690 - ] - }, - { - "teal": 5863, - "source": 1476, - "pc": [ - 5691 - ] - }, - { - "teal": 5864, - "source": 1476, - "pc": [ - 5692 - ] - }, - { - "teal": 5865, - "source": 1476, - "pc": [ - 5693, - 5694, - 5695 - ] - }, - { - "teal": 5869, - "source": 1477, - "pc": [ - 5696, - 5697 - ] - }, - { - "teal": 5870, - "source": 1477, - "pc": [ - 5698, - 5699 - ] - }, - { - "teal": 5871, - "source": 1477, - "pc": [ - 5700, - 5701 - ] - }, - { - "teal": 5872, - "source": 1477, - "pc": [ - 5702 - ] - }, - { - "teal": 5873, - "source": 1477, - "pc": [ - 5703, - 5704 - ] - }, - { - "teal": 5878, - "source": 1478, - "pc": [ - 5705, - 5706 - ] - }, - { - "teal": 5879, - "source": 1478, - "pc": [ - 5707, - 5708 - ] - }, - { - "teal": 5880, - "source": 1478, - "pc": [ - 5709 - ] - }, - { - "teal": 5881, - "source": 1478, - "pc": [ - 5710 - ] - }, - { - "teal": 5882, - "source": 1478, - "pc": [ - 5711, - 5712, - 5713 - ] - }, - { - "teal": 5883, - "source": 1478, - "pc": [ - 5714, - 5715 - ] - }, - { - "teal": 5884, - "source": 1478, - "pc": [ - 5716, - 5717 - ] - }, - { - "teal": 5885, - "source": 1478, - "pc": [ - 5718 - ] - }, - { - "teal": 5886, - "source": 1478, - "pc": [ - 5719 - ] - }, - { - "teal": 5889, - "source": 1478, - "pc": [ - 5720, - 5721, - 5722 - ] - }, - { - "teal": 5894, - "source": 1479, - "pc": [ - 5723 - ] - }, - { - "teal": 5895, - "source": 1479, - "pc": [ - 5724, - 5725, - 5726 - ] - }, - { - "teal": 5902, - "source": 1476, - "pc": [ - 5727, - 5728 - ] - }, - { - "teal": 5903, - "source": 1476, - "pc": [ - 5729, - 5730 - ] - }, - { - "teal": 5904, - "source": 1476, - "pc": [ - 5731 - ] - }, - { - "teal": 5905, - "source": 1476, - "pc": [ - 5732, - 5733 - ] - }, - { - "teal": 5906, - "source": 1476, - "pc": [ - 5734, - 5735, - 5736 - ] - }, - { - "teal": 5911, - "source": 1482, - "pc": [ - 5737 - ] - }, - { - "teal": 5915, - "source": 1470, - "pc": [ - 5738, - 5739 - ] - }, - { - "teal": 5918, - "source": 1470, - "pc": [ - 5740, - 5741 - ] - }, - { - "teal": 5919, - "source": 1470, - "pc": [ - 5742 - ] - }, - { - "teal": 5927, - "source": 1490, - "pc": [ - 5743, - 5744, - 5745 - ] - }, - { - "teal": 5930, - "source": 1490, - "pc": [ - 5746 - ] - }, - { - "teal": 5934, - "source": 1491, - "pc": [ - 5747, - 5748, - 5749 - ] - }, - { - "teal": 5935, - "source": 1491, - "pc": [ - 5750, - 5751 - ] - }, - { - "teal": 5939, - "source": 1493, - "pc": [ - 5752, - 5753 - ] - }, - { - "teal": 5940, - "source": 1493, - "pc": [ - 5754, - 5755 - ] - }, - { - "teal": 5941, - "source": 1493, - "pc": [ - 5756 - ] - }, - { - "teal": 5942, - "source": 1493, - "pc": [ - 5757 - ] - }, - { - "teal": 5943, - "source": 1493, - "pc": [ - 5758, - 5759 - ] - }, - { - "teal": 5944, - "source": 1493, - "pc": [ - 5760 - ] - }, - { - "teal": 5945, - "source": 1493, - "pc": [ - 5761 - ] - }, - { - "teal": 5946, - "source": 1493, - "pc": [ - 5762 - ] - }, - { - "teal": 5947, - "source": 1493, - "pc": [ - 5763 - ] - }, - { - "teal": 5948, - "source": 1493, - "pc": [ - 5764 - ] - }, - { - "teal": 5951, - "source": 1493, - "errorMessage": "wideRatio failed", - "pc": [ - 5765 - ] - }, - { - "teal": 5954, - "source": 1490, - "pc": [ - 5766, - 5767 - ] - }, - { - "teal": 5955, - "source": 1490, - "pc": [ - 5768 - ] - }, - { - "teal": 5962, - "source": 1500, - "pc": [ - 5769, - 5770, - 5771 - ] - }, - { - "teal": 5965, - "source": 1500, - "pc": [ - 5772 - ] - }, - { - "teal": 5969, - "source": 1501, - "pc": [ - 5773, - 5774, - 5775 - ] - }, - { - "teal": 5970, - "source": 1501, - "pc": [ - 5776, - 5777 - ] - }, - { - "teal": 5974, - "source": 1503, - "pc": [ - 5778, - 5779 - ] - }, - { - "teal": 5975, - "source": 1503, - "pc": [ - 5780, - 5781, - 5782 - ] - }, - { - "teal": 5976, - "source": 1503, - "pc": [ - 5783 - ] - }, - { - "teal": 5977, - "source": 1503, - "pc": [ - 5784 - ] - }, - { - "teal": 5978, - "source": 1503, - "pc": [ - 5785, - 5786 - ] - }, - { - "teal": 5979, - "source": 1503, - "pc": [ - 5787 - ] - }, - { - "teal": 5980, - "source": 1503, - "pc": [ - 5788 - ] - }, - { - "teal": 5981, - "source": 1503, - "pc": [ - 5789 - ] - }, - { - "teal": 5982, - "source": 1503, - "pc": [ - 5790 - ] - }, - { - "teal": 5983, - "source": 1503, - "pc": [ - 5791 - ] - }, - { - "teal": 5986, - "source": 1503, - "errorMessage": "wideRatio failed", - "pc": [ - 5792 - ] - }, - { - "teal": 5989, - "source": 1500, - "pc": [ - 5793, - 5794 - ] - }, - { - "teal": 5990, - "source": 1500, - "pc": [ - 5795 - ] - }, - { - "teal": 5996, - "source": 1509, - "pc": [ - 5796, - 5797, - 5798 - ] - }, - { - "teal": 6000, - "source": 1512, - "pc": [ - 5799, - 5800, - 5801, - 5802, - 5803, - 5804, - 5805, - 5806 - ] - }, - { - "teal": 6001, - "source": 1509, - "pc": [ - 5807 - ] - }, - { - "teal": 6005, - "source": 1515, - "pc": [ - 5808, - 5809, - 5810 - ] - }, - { - "teal": 6009, - "source": 1518, - "pc": [ - 5811, - 5812, - 5813, - 5814, - 5815, - 5816, - 5817, - 5818, - 5819 - ] - }, - { - "teal": 6010, - "source": 1515, - "pc": [ - 5820 - ] - }, - { - "teal": 6014, - "source": 1521, - "pc": [ - 5821, - 5822, - 5823 - ] - }, - { - "teal": 6017, - "source": 1521, - "pc": [ - 5824 - ] - }, - { - "teal": 6021, - "source": 1530, - "pc": [ - 5825, - 5826 - ] - }, - { - "teal": 6022, - "source": 1530, - "pc": [ - 5827, - 5828 - ] - }, - { - "teal": 6026, - "source": 1531, - "pc": [ - 5829, - 5830 - ] - }, - { - "teal": 6027, - "source": 1531, - "pc": [ - 5831, - 5832 - ] - }, - { - "teal": 6028, - "source": 1531, - "pc": [ - 5833, - 5834 - ] - }, - { - "teal": 6029, - "source": 1531, - "pc": [ - 5835 - ] - }, - { - "teal": 6030, - "source": 1531, - "pc": [ - 5836 - ] - }, - { - "teal": 6031, - "source": 1531, - "pc": [ - 5837, - 5838 - ] - }, - { - "teal": 6035, - "source": 1532, - "pc": [ - 5839, - 5840 - ] - }, - { - "teal": 6036, - "source": 1532, - "pc": [ - 5841, - 5842 - ] - }, - { - "teal": 6037, - "source": 1532, - "pc": [ - 5843, - 5844 - ] - }, - { - "teal": 6038, - "source": 1532, - "pc": [ - 5845 - ] - }, - { - "teal": 6039, - "source": 1532, - "pc": [ - 5846 - ] - }, - { - "teal": 6040, - "source": 1532, - "pc": [ - 5847, - 5848 - ] - }, - { - "teal": 6044, - "source": 1533, - "pc": [ - 5849, - 5850 - ] - }, - { - "teal": 6045, - "source": 1533, - "pc": [ - 5851, - 5852 - ] - }, - { - "teal": 6046, - "source": 1533, - "pc": [ - 5853, - 5854 - ] - }, - { - "teal": 6047, - "source": 1533, - "pc": [ - 5855 - ] - }, - { - "teal": 6048, - "source": 1533, - "pc": [ - 5856 - ] - }, - { - "teal": 6049, - "source": 1533, - "pc": [ - 5857, - 5858 - ] - }, - { - "teal": 6053, - "source": 1534, - "pc": [ - 5859, - 5860 - ] - }, - { - "teal": 6054, - "source": 1534, - "pc": [ - 5861, - 5862 - ] - }, - { - "teal": 6055, - "source": 1534, - "pc": [ - 5863, - 5864 - ] - }, - { - "teal": 6056, - "source": 1534, - "pc": [ - 5865 - ] - }, - { - "teal": 6057, - "source": 1534, - "pc": [ - 5866 - ] - }, - { - "teal": 6058, - "source": 1534, - "pc": [ - 5867, - 5868 - ] - }, - { - "teal": 6062, - "source": 1535, - "pc": [ - 5869, - 5870 - ] - }, - { - "teal": 6063, - "source": 1535, - "pc": [ - 5871, - 5872 - ] - }, - { - "teal": 6064, - "source": 1535, - "pc": [ - 5873, - 5874 - ] - }, - { - "teal": 6065, - "source": 1535, - "pc": [ - 5875 - ] - }, - { - "teal": 6066, - "source": 1535, - "pc": [ - 5876 - ] - }, - { - "teal": 6067, - "source": 1535, - "pc": [ - 5877, - 5878 - ] - }, - { - "teal": 6071, - "source": 1536, - "pc": [ - 5879, - 5880 - ] - }, - { - "teal": 6072, - "source": 1536, - "pc": [ - 5881, - 5882 - ] - }, - { - "teal": 6073, - "source": 1536, - "pc": [ - 5883, - 5884 - ] - }, - { - "teal": 6074, - "source": 1536, - "pc": [ - 5885 - ] - }, - { - "teal": 6075, - "source": 1536, - "pc": [ - 5886 - ] - }, - { - "teal": 6076, - "source": 1536, - "pc": [ - 5887, - 5888 - ] - }, - { - "teal": 6080, - "source": 1537, - "pc": [ - 5889, - 5890 - ] - }, - { - "teal": 6081, - "source": 1537, - "pc": [ - 5891, - 5892 - ] - }, - { - "teal": 6082, - "source": 1537, - "pc": [ - 5893, - 5894 - ] - }, - { - "teal": 6083, - "source": 1537, - "pc": [ - 5895 - ] - }, - { - "teal": 6084, - "source": 1537, - "pc": [ - 5896 - ] - }, - { - "teal": 6085, - "source": 1537, - "pc": [ - 5897, - 5898 - ] - }, - { - "teal": 6089, - "source": 1538, - "pc": [ - 5899, - 5900 - ] - }, - { - "teal": 6092, - "source": 1521, - "pc": [ - 5901, - 5902 - ] - }, - { - "teal": 6093, - "source": 1521, - "pc": [ - 5903 - ] - }, - { - "teal": 6097, - "source": 1541, - "pc": [ - 5904, - 5905, - 5906 - ] - }, - { - "teal": 6101, - "source": 1545, - "pc": [ - 5907, - 5908, - 5909 - ] - }, - { - "teal": 6102, - "source": 1545, - "pc": [ - 5910, - 5911 - ] - }, - { - "teal": 6103, - "source": 1545, - "pc": [ - 5912, - 5913, - 5914 - ] - }, - { - "teal": 6104, - "source": 1545, - "pc": [ - 5915 - ] - }, - { - "teal": 6105, - "source": 1545, - "pc": [ - 5916 - ] - }, - { - "teal": 6106, - "source": 1541, - "pc": [ - 5917 - ] - }, - { - "teal": 6109, - "source": 165, - "pc": [ - 5918, - 5919, - 5920, - 5921, - 5922, - 5923 - ] - }, - { - "teal": 6110, - "source": 165, - "pc": [ - 5924, - 5925, - 5926 - ] - }, - { - "teal": 6111, - "source": 165, - "pc": [ - 5927, - 5928, - 5929, - 5930 - ] - }, - { - "teal": 6114, - "source": 165, - "errorMessage": "this contract does not implement the given ABI method for create NoOp", - "pc": [ - 5931 - ] - }, - { - "teal": 6117, - "source": 165, - "pc": [ - 5932, - 5933, - 5934, - 5935, - 5936, - 5937 - ] - }, - { - "teal": 6118, - "source": 165, - "pc": [ - 5938, - 5939, - 5940, - 5941, - 5942, - 5943 - ] - }, - { - "teal": 6119, - "source": 165, - "pc": [ - 5944, - 5945, - 5946, - 5947, - 5948, - 5949 - ] - }, - { - "teal": 6120, - "source": 165, - "pc": [ - 5950, - 5951, - 5952, - 5953, - 5954, - 5955 - ] - }, - { - "teal": 6121, - "source": 165, - "pc": [ - 5956, - 5957, - 5958, - 5959, - 5960, - 5961 - ] - }, - { - "teal": 6122, - "source": 165, - "pc": [ - 5962, - 5963, - 5964, - 5965, - 5966, - 5967 - ] - }, - { - "teal": 6123, - "source": 165, - "pc": [ - 5968, - 5969, - 5970, - 5971, - 5972, - 5973 - ] - }, - { - "teal": 6124, - "source": 165, - "pc": [ - 5974, - 5975, - 5976, - 5977, - 5978, - 5979 - ] - }, - { - "teal": 6125, - "source": 165, - "pc": [ - 5980, - 5981, - 5982, - 5983, - 5984, - 5985 - ] - }, - { - "teal": 6126, - "source": 165, - "pc": [ - 5986, - 5987, - 5988, - 5989, - 5990, - 5991 - ] - }, - { - "teal": 6127, - "source": 165, - "pc": [ - 5992, - 5993, - 5994, - 5995, - 5996, - 5997 - ] - }, - { - "teal": 6128, - "source": 165, - "pc": [ - 5998, - 5999, - 6000, - 6001, - 6002, - 6003 - ] - }, - { - "teal": 6129, - "source": 165, - "pc": [ - 6004, - 6005, - 6006, - 6007, - 6008, - 6009 - ] - }, - { - "teal": 6130, - "source": 165, - "pc": [ - 6010, - 6011, - 6012, - 6013, - 6014, - 6015 - ] - }, - { - "teal": 6131, - "source": 165, - "pc": [ - 6016, - 6017, - 6018, - 6019, - 6020, - 6021 - ] - }, - { - "teal": 6132, - "source": 165, - "pc": [ - 6022, - 6023, - 6024, - 6025, - 6026, - 6027 - ] - }, - { - "teal": 6133, - "source": 165, - "pc": [ - 6028, - 6029, - 6030, - 6031, - 6032, - 6033 - ] - }, - { - "teal": 6134, - "source": 165, - "pc": [ - 6034, - 6035, - 6036, - 6037, - 6038, - 6039 - ] - }, - { - "teal": 6135, - "source": 165, - "pc": [ - 6040, - 6041, - 6042, - 6043, - 6044, - 6045 - ] - }, - { - "teal": 6136, - "source": 165, - "pc": [ - 6046, - 6047, - 6048, - 6049, - 6050, - 6051 - ] - }, - { - "teal": 6137, - "source": 165, - "pc": [ - 6052, - 6053, - 6054, - 6055, - 6056, - 6057 - ] - }, - { - "teal": 6138, - "source": 165, - "pc": [ - 6058, - 6059, - 6060, - 6061, - 6062, - 6063 - ] - }, - { - "teal": 6139, - "source": 165, - "pc": [ - 6064, - 6065, - 6066, - 6067, - 6068, - 6069 - ] - }, - { - "teal": 6140, - "source": 165, - "pc": [ - 6070, - 6071, - 6072, - 6073, - 6074, - 6075 - ] - }, - { - "teal": 6141, - "source": 165, - "pc": [ - 6076, - 6077, - 6078, - 6079, - 6080, - 6081 - ] - }, - { - "teal": 6142, - "source": 165, - "pc": [ - 6082, - 6083, - 6084, - 6085, - 6086, - 6087 - ] - }, - { - "teal": 6143, - "source": 165, - "pc": [ - 6088, - 6089, - 6090, - 6091, - 6092, - 6093 - ] - }, - { - "teal": 6144, - "source": 165, - "pc": [ - 6094, - 6095, - 6096, - 6097, - 6098, - 6099 - ] - }, - { - "teal": 6145, - "source": 165, - "pc": [ - 6100, - 6101, - 6102, - 6103, - 6104, - 6105 - ] - }, - { - "teal": 6146, - "source": 165, - "pc": [ - 6106, - 6107, - 6108, - 6109, - 6110, - 6111 - ] - }, - { - "teal": 6147, - "source": 165, - "pc": [ - 6112, - 6113, - 6114, - 6115, - 6116, - 6117 - ] - }, - { - "teal": 6148, - "source": 165, - "pc": [ - 6118, - 6119, - 6120, - 6121, - 6122, - 6123 - ] - }, - { - "teal": 6149, - "source": 165, - "pc": [ - 6124, - 6125, - 6126, - 6127, - 6128, - 6129 - ] - }, - { - "teal": 6150, - "source": 165, - "pc": [ - 6130, - 6131, - 6132 - ] - }, - { - "teal": 6151, - "source": 165, - "pc": [ - 6133, - 6134, - 6135, - 6136, - 6137, - 6138, - 6139, - 6140, - 6141, - 6142, - 6143, - 6144, - 6145, - 6146, - 6147, - 6148, - 6149, - 6150, - 6151, - 6152, - 6153, - 6154, - 6155, - 6156, - 6157, - 6158, - 6159, - 6160, - 6161, - 6162, - 6163, - 6164, - 6165, - 6166, - 6167, - 6168, - 6169, - 6170, - 6171, - 6172, - 6173, - 6174, - 6175, - 6176, - 6177, - 6178, - 6179, - 6180, - 6181, - 6182, - 6183, - 6184, - 6185, - 6186, - 6187, - 6188, - 6189, - 6190, - 6191, - 6192, - 6193, - 6194, - 6195, - 6196, - 6197, - 6198, - 6199, - 6200 - ] - }, - { - "teal": 6154, - "source": 165, - "errorMessage": "this contract does not implement the given ABI method for call NoOp", - "pc": [ - 6201 - ] - }, - { - "teal": 6157, - "source": 165, - "pc": [ - 6202, - 6203, - 6204, - 6205, - 6206, - 6207 - ] - }, - { - "teal": 6158, - "source": 165, - "pc": [ - 6208, - 6209, - 6210 - ] - }, - { - "teal": 6159, - "source": 165, - "pc": [ - 6211, - 6212, - 6213, - 6214 - ] - }, - { - "teal": 6162, - "source": 165, - "errorMessage": "this contract does not implement the given ABI method for call UpdateApplication", - "pc": [ - 6215 - ] - } -] \ No newline at end of file diff --git a/examples/src/main/java/com/algorand/examples/Reti.java b/examples/src/main/java/com/algorand/examples/Reti.java index 681a7e563..2ac7178e6 100644 --- a/examples/src/main/java/com/algorand/examples/Reti.java +++ b/examples/src/main/java/com/algorand/examples/Reti.java @@ -18,7 +18,6 @@ import com.algorand.algosdk.transaction.AtomicTransactionComposer.ExecuteResult; import com.algorand.algosdk.transaction.Transaction; import com.algorand.algosdk.util.Encoder; -import com.algorand.algosdk.v2.client.algod.SimulateTransaction; import com.algorand.algosdk.v2.client.common.AlgodClient; import com.algorand.algosdk.v2.client.common.Response; import com.algorand.algosdk.v2.client.model.*; @@ -128,7 +127,7 @@ public static void getStakedPoolsForAccount(Account acct) { request.allowUnnamedResources = true; AtomicTransactionComposer.SimulateResult simulateResult = atc.simulate(algodClient, request); - Object resultsObj = simulateResult.getMethodResults().get(0).getReturnValue(); + Object resultsObj = simulateResult.getMethodResults().get(0).value; List results = Arrays.stream(((Object[]) resultsObj)).toList(); for (Object o : results) { @@ -175,7 +174,7 @@ public static void getStakerInfo(Account acct, BigInteger poolAppID) { request.allowUnnamedResources = true; AtomicTransactionComposer.SimulateResult simulateResult = atc.simulate(algodClient, request); - Object resultsObj = simulateResult.getMethodResults().get(0).getReturnValue(); + Object resultsObj = simulateResult.getMethodResults().get(0).value; List results = Arrays.stream(((Object[]) resultsObj)).toList(); System.out.println("balance = " + results.get(1) + " microALGOS, poolAppID = " + poolAppID); } catch (Exception e) { diff --git a/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java b/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java index 69b55d90a..e7ee3c03b 100644 --- a/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java +++ b/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java @@ -258,19 +258,13 @@ public SimulateResult simulate(AlgodClient client, SimulateRequest request) thro throw new Exception("Error in simulation response"); } - List methodResults = new ArrayList<>(); + List methodResults = new ArrayList<>(); for (int i = 0; i < stxs.size(); i++) { SignedTransaction stx = stxs.get(i); - String txID = stx.transactionID; PendingTransactionResponse pendingTransactionResponse = simulateResponse.txnGroups.get(0).txnResults.get(i).txnResult; - ABIMethodResult methodResult = new ABIMethodResult(); - methodResult.setTxID(txID); - methodResult.setRawReturnValue(new byte[0]); - methodResult.setMethod(this.methodMap.get(i)); - - methodResult = parseMethodResponse(methodResult.getMethod(), methodResult, pendingTransactionResponse); - methodResults.add(methodResult); + ReturnValue returnValue = parseMethodResponse(this.methodMap.get(i), stx, pendingTransactionResponse); + methodResults.add(returnValue); } SimulateResult result = new SimulateResult(); @@ -379,13 +373,9 @@ public ExecuteResult execute(AlgodClient client, int waitRounds) throws Exceptio } public static class SimulateResult { - // The result of the transaction group simulation private SimulateResponse simulateResponse; - // For each ABI method call in the executed group (created by the AddMethodCall method), this - // list contains information about the method call's return value - private List methodResults; + private List methodResults; - // Getter and setter for simulateResponse public SimulateResponse getSimulateResponse() { return simulateResponse; } @@ -394,12 +384,11 @@ public void setSimulateResponse(SimulateResponse simulateResponse) { this.simulateResponse = simulateResponse; } - // Getter and setter for methodResults - public List getMethodResults() { + public List getMethodResults() { return methodResults; } - public void setMethodResults(List methodResults) { + public void setMethodResults(List methodResults) { this.methodResults = methodResults; } } @@ -408,14 +397,20 @@ public void setMethodResults(List methodResults) { * Parses a single ABI Method transaction log into a ABI result object. * * @param method - * @param methodResult + * @param stx * @param pendingTransactionResponse - * @return An ABIMethodResult object + * @return An ReturnValue object */ - public ABIMethodResult parseMethodResponse(Method method, ABIMethodResult methodResult, PendingTransactionResponse pendingTransactionResponse) { - ABIMethodResult returnedResult = methodResult; + public ReturnValue parseMethodResponse(Method method, SignedTransaction stx, PendingTransactionResponse pendingTransactionResponse) { + ReturnValue returnValue = new ReturnValue( + stx.transactionID, + new byte[0], + null, + method, + null, + pendingTransactionResponse + ); try { - returnedResult.setTransactionInfo(pendingTransactionResponse); if (!method.returns.type.equals(Method.Returns.VoidRetType)) { List logs = pendingTransactionResponse.logs; if (logs == null || logs.isEmpty()) { @@ -427,14 +422,14 @@ public ABIMethodResult parseMethodResponse(Method method, ABIMethodResult method throw new Exception("App call transaction did not log a return value"); } - returnedResult.setRawReturnValue(Arrays.copyOfRange(lastLog, ABI_RET_HASH.length, lastLog.length)); - returnedResult.setReturnValue(method.returns.parsedType.decode(returnedResult.getRawReturnValue())); + returnValue.rawValue = Arrays.copyOfRange(lastLog, ABI_RET_HASH.length, lastLog.length); + returnValue.value = method.returns.parsedType.decode(returnValue.rawValue); } } catch (Exception e) { - returnedResult.setDecodeError(e); + returnValue.parseError = e; } - return returnedResult; + return returnValue; } private static boolean hasPrefix(byte[] array, byte[] prefix) { diff --git a/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java b/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java index b4ca8b878..ecc01502c 100644 --- a/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java +++ b/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java @@ -27,12 +27,11 @@ public EmptyTransactionSigner(String authAddr) { * @return A list of signed transaction bytes. */ @Override - public SignedTransaction[] signTxnGroup(Transaction[] txnGroup, int[] indicesToSign) throws JsonProcessingException, NoSuchAlgorithmException { + public SignedTransaction[] signTxnGroup(Transaction[] txnGroup, int[] indicesToSign) throws NoSuchAlgorithmException { SignedTransaction[] stxs = new SignedTransaction[indicesToSign.length]; for (int pos : indicesToSign) { - SignedTransaction stx = new SignedTransaction(); - stx.tx = txnGroup[pos]; + SignedTransaction stx = new SignedTransaction(txnGroup[pos]); if (authAddr != null) { Address address = new Address(authAddr); diff --git a/src/main/java/com/algorand/algosdk/transaction/SignedTransaction.java b/src/main/java/com/algorand/algosdk/transaction/SignedTransaction.java index b99c7de4c..6a374d850 100644 --- a/src/main/java/com/algorand/algosdk/transaction/SignedTransaction.java +++ b/src/main/java/com/algorand/algosdk/transaction/SignedTransaction.java @@ -68,7 +68,11 @@ public SignedTransaction(Transaction tx, LogicsigSignature lSig, String txId) { this(tx, new Signature(), new MultisigSignature(), lSig, txId); } - SignedTransaction() { + private SignedTransaction() { + } + + public SignedTransaction(Transaction transaction) { + this.tx = transaction; } public SignedTransaction authAddr(Address authAddr) { diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/ABIMethodResult.java b/src/main/java/com/algorand/algosdk/v2/client/model/ABIMethodResult.java deleted file mode 100644 index d4adefbd0..000000000 --- a/src/main/java/com/algorand/algosdk/v2/client/model/ABIMethodResult.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.algorand.algosdk.v2.client.model; - -import com.algorand.algosdk.abi.Method; -import com.algorand.algosdk.v2.client.algod.PendingTransactionInformation; - -import java.util.Arrays; - -public class ABIMethodResult { - // The TxID of the transaction that invoked the ABI method call. - private String txID; - // Information about the confirmed transaction that invoked the ABI method call. - private PendingTransactionResponse pendingTransactionResponse; - // Method that was called for this ABIMethodResult. - private Method method; - // The raw bytes of the return value from the ABI method call. This will be empty if the method does not return a value (return type "void"). - private byte[] rawReturnValue; - // The return value from the ABI method call. This will be null if the method does not return a value (return type "void"), or if the SDK was unable to decode the returned value. - private Object returnValue; - // If the SDK was unable to decode a return value, the error will be here. Make sure to check this before examining returnValue. - private Exception decodeError; - - // Getters and setters for all fields - - public String getTxID() { - return txID; - } - - public void setTxID(String txID) { - this.txID = txID; - } - - public PendingTransactionResponse getPendingTransactionResponse() { - return pendingTransactionResponse; - } - - public void setTransactionInfo(PendingTransactionResponse pendingTransactionResponse) { - this.pendingTransactionResponse = pendingTransactionResponse; - } - - public Method getMethod() { - return method; - } - - public void setMethod(Method method) { - this.method = method; - } - - public byte[] getRawReturnValue() { - return rawReturnValue; - } - - public void setRawReturnValue(byte[] rawReturnValue) { - this.rawReturnValue = rawReturnValue; - } - - public Object getReturnValue() { - return returnValue; - } - - public void setReturnValue(Object returnValue) { - this.returnValue = returnValue; - } - - public Exception getDecodeError() { - return decodeError; - } - - public void setDecodeError(Exception decodeError) { - this.decodeError = decodeError; - } - - // Optional: Override toString for easier debugging and logging - @Override - public String toString() { - return "ABIMethodResult{" + - "txID='" + txID + '\'' + - ", transactionInfo=" + pendingTransactionResponse + - ", method=" + method + - ", rawReturnValue=" + Arrays.toString(rawReturnValue) + - ", returnValue=" + returnValue + - ", decodeError=" + decodeError + - '}'; - } -} From 3ee0c42f9851d4b5cf66dda1a3830703417f900f Mon Sep 17 00:00:00 2001 From: Michael T Chuang Date: Wed, 2 Oct 2024 00:34:05 -0700 Subject: [PATCH 4/6] fix: add in first batch of integration tests --- examples/reti/StakingPool.arc4.json | 254 -------- examples/reti/ValidatorRegistry.arc4.json | 579 ------------------ .../main/java/com/algorand/examples/Reti.java | 392 ------------ .../AtomicTransactionComposer.java | 5 +- .../transaction/EmptyTransactionSigner.java | 5 +- .../integration/AtomicTxnComposer.java | 109 +++- .../algosdk/integration/Stepdefs.java | 145 ++++- 7 files changed, 245 insertions(+), 1244 deletions(-) delete mode 100644 examples/reti/StakingPool.arc4.json delete mode 100755 examples/reti/ValidatorRegistry.arc4.json delete mode 100644 examples/src/main/java/com/algorand/examples/Reti.java diff --git a/examples/reti/StakingPool.arc4.json b/examples/reti/StakingPool.arc4.json deleted file mode 100644 index a990e25cd..000000000 --- a/examples/reti/StakingPool.arc4.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "name": "StakingPool", - "desc": "", - "methods": [ - { - "name": "updateApplication", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "createApplication", - "desc": "Initialize the staking pool w/ owner and manager, but can only be created by the validator contract.", - "args": [ - { - "name": "creatingContractId", - "type": "uint64", - "desc": "id of contract that constructed us - the validator application (single global instance)" - }, - { - "name": "validatorId", - "type": "uint64", - "desc": "id of validator we're a staking pool of" - }, - { - "name": "poolId", - "type": "uint64", - "desc": "which pool id are we" - }, - { - "name": "minEntryStake", - "type": "uint64", - "desc": "minimum amount to be in pool, but also minimum amount balance can't go below (without removing all!)" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "gas", - "desc": "gas is a dummy no-op call that can be used to pool-up resource references and opcode cost", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "initStorage", - "desc": "Called after we're created and then funded, so we can create our large stakers ledger storageCaller has to get MBR amounts from ValidatorRegistry to know how much to fund us to cover the box storage costIf this is pool 1 AND the validator has specified a reward token, opt-in to that tokenso that the validator can seed the pool with future rewards of that token.", - "args": [ - { - "name": "mbrPayment", - "type": "pay", - "desc": "payment from caller which covers mbr increase of new staking pools' storage" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "addStake", - "desc": "Adds stake to the given account.Can ONLY be called by the validator contract that created usMust receive payment from the validator contract for amount being staked.", - "args": [ - { - "name": "stakedAmountPayment", - "type": "pay", - "desc": "prior payment coming from validator contract to us on behalf of staker." - }, - { - "name": "staker", - "type": "address", - "desc": "The account adding new stake" - } - ], - "returns": { - "type": "uint64", - "desc": "{uint64}new 'entry round' round number of stake add" - } - }, - { - "name": "removeStake", - "desc": "Removes stake on behalf of caller (removing own stake). If any token rewards exist, those are always sent infull. Also notifies the validator contract for this pools validator of the staker / balance changes.", - "args": [ - { - "name": "staker", - "type": "address", - "desc": "account to remove. normally same as sender, but the validator owner or manager can also callthis to remove the specified staker explicitly. The removed stake MUST only go to the staker of course. This isso a validator can shut down a poool and refund the stakers. It can also be used to kick out stakers who no longermeet the gating requirements (determined by the node daemon)." - }, - { - "name": "amountToUnstake", - "type": "uint64", - "desc": "The amount of stake to be removed. Specify 0 to remove all stake." - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "claimTokens", - "desc": "Claims all the available reward tokens a staker has available, sending their entire balance to the staker frompool 1 (either directly, or via validator->pool1 to pay it out)Also notifies the validator contract for this pools validator of the staker / balance changes.", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "getStakerInfo", - "desc": "Retrieves the staked information for a given staker.", - "args": [ - { - "name": "staker", - "type": "address", - "desc": "The address of the staker." - } - ], - "returns": { - "type": "(address,uint64,uint64,uint64,uint64)", - "desc": "{StakedInfo}- The staked information for the given staker." - } - }, - { - "name": "payTokenReward", - "desc": "[Internal protocol method] Remove a specified amount of 'community token' rewards for a staker.This can ONLY be called by our validator and only if we're pool 1 - with the token.Note: this can also be called by validator as part of OWNER wanting to send the reward tokenssomewhere else (ie if they're sunsetting their validator and need the reward tokens back).It's up to the validator to ensure that the balance in rewardTokenHeldBack is honored.", - "args": [ - { - "name": "staker", - "type": "address", - "desc": "the staker account to send rewards to" - }, - { - "name": "rewardToken", - "type": "uint64", - "desc": "id of reward token (to avoid re-entrancy in calling validator back to get id)" - }, - { - "name": "amountToSend", - "type": "uint64", - "desc": "amount to send the staker (there is significant trust here(!) - also why only validator can call us" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "updateAlgodVer", - "desc": "Update the (honor system) algod version for the node associated to this pool. The node management daemonshould compare its current nodes version to the version stored in global state, updating when different.The reti node daemon composes its own version string using format:{major}.{minor}.{build}{branch}[{commit hash}],ie: 3.22.0 rel/stable [6b508975][ ONLY OWNER OR MANAGER CAN CALL ]", - "args": [ - { - "name": "algodVer", - "type": "string", - "desc": "string representing the algorand node daemon version (reti node daemon composes its own meta version)" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "epochBalanceUpdate", - "desc": "Updates the balance of stakers in the pool based on the received 'rewards' (current balance vs known staked balance)stakers outstanding balance is adjusted based on their % of stake and time in the current epoch - so that balancecompounds over time and staker can remove that amount at will.The validator is paid their percentage each epoch payout.Note: ANYONE can call this.", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "goOnline", - "desc": "Registers a staking pool key online against a participation key.[ ONLY OWNER OR MANAGER CAN CALL ]", - "args": [ - { - "name": "feePayment", - "type": "pay", - "desc": "payment to cover extra fee of going online if offline - or 0 if not renewal" - }, - { - "name": "votePK", - "type": "byte[]", - "desc": "The vote public key." - }, - { - "name": "selectionPK", - "type": "byte[]", - "desc": "The selection public key." - }, - { - "name": "stateProofPK", - "type": "byte[]", - "desc": "The state proof public key." - }, - { - "name": "voteFirst", - "type": "uint64", - "desc": "The first vote index." - }, - { - "name": "voteLast", - "type": "uint64", - "desc": "The last vote index." - }, - { - "name": "voteKeyDilution", - "type": "uint64", - "desc": "The vote key dilution value." - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "goOffline", - "desc": "Marks a staking pool key OFFLINE.[ ONLY OWNER OR MANAGER CAN CALL ]", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "linkToNFD", - "args": [ - { - "name": "nfdAppId", - "type": "uint64" - }, - { - "name": "nfdName", - "type": "string" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "proxiedSetTokenPayoutRatio", - "desc": "proxiedSetTokenPayoutRatio is meant to be called by pools != 1 - calling US, pool #1We need to verify that we are in fact being called by another of OUR pools (not us)and then we'll call the validator on their behalf to update the token payouts", - "args": [ - { - "name": "poolKey", - "type": "(uint64,uint64,uint64)", - "desc": "ValidatorPoolKey tuple" - } - ], - "returns": { - "type": "(uint64[24],uint64)" - } - } - ] -} \ No newline at end of file diff --git a/examples/reti/ValidatorRegistry.arc4.json b/examples/reti/ValidatorRegistry.arc4.json deleted file mode 100755 index c030549dd..000000000 --- a/examples/reti/ValidatorRegistry.arc4.json +++ /dev/null @@ -1,579 +0,0 @@ -{ - "name": "ValidatorRegistry", - "desc": "", - "methods": [ - { - "name": "updateApplication", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "createApplication", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "initStakingContract", - "args": [ - { - "name": "approvalProgramSize", - "type": "uint64" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "loadStakingContractData", - "args": [ - { - "name": "offset", - "type": "uint64" - }, - { - "name": "data", - "type": "byte[]" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "finalizeStakingContract", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "gas", - "desc": "gas is a dummy no-op call that can be used to pool-up resource references and opcode cost", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "getMbrAmounts", - "desc": "Returns the MBR amounts needed for various actions:[addValidatorMbr: uint64 - mbr needed to add a new validator - paid to validator contractaddPoolMbr: uint64 - mbr needed to add a new pool - paid to validatorpoolInitMbr: uint64 - mbr needed to initStorage() of pool - paid to pool itselfaddStakerMbr: uint64 - mbr staker needs to add to first staking payment (stays w/ validator)]", - "args": [], - "returns": { - "type": "(uint64,uint64,uint64,uint64)" - } - }, - { - "name": "getProtocolConstraints", - "desc": "Returns the protocol constraints so that UIs can limit what users specify for validator configuration parameters.", - "args": [], - "returns": { - "type": "(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)" - } - }, - { - "name": "getNumValidators", - "desc": "Returns the current number of validators", - "args": [], - "returns": { - "type": "uint64" - } - }, - { - "name": "getValidatorConfig", - "args": [ - { - "name": "validatorId", - "type": "uint64" - } - ], - "returns": { - "type": "(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)" - } - }, - { - "name": "getValidatorState", - "args": [ - { - "name": "validatorId", - "type": "uint64" - } - ], - "returns": { - "type": "(uint16,uint64,uint64,uint64)" - } - }, - { - "name": "getValidatorOwnerAndManager", - "args": [ - { - "name": "validatorId", - "type": "uint64" - } - ], - "returns": { - "type": "(address,address)" - } - }, - { - "name": "getPools", - "desc": "Return list of all pools for this validator.", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "@return{PoolInfo[]}- array of poolsNot callable from other contracts because>1K return but can be called w/ simulate which bumps log returns" - } - ], - "returns": { - "type": "(uint64,uint16,uint64)[]" - } - }, - { - "name": "getPoolAppId", - "args": [ - { - "name": "validatorId", - "type": "uint64" - }, - { - "name": "poolId", - "type": "uint64" - } - ], - "returns": { - "type": "uint64" - } - }, - { - "name": "getPoolInfo", - "args": [ - { - "name": "poolKey", - "type": "(uint64,uint64,uint64)" - } - ], - "returns": { - "type": "(uint64,uint16,uint64)" - } - }, - { - "name": "getCurMaxStakePerPool", - "desc": "Calculate the maximum stake per pool for a given validator.Normally this would be maxAlgoPerPool, but it should also never go above MaxAllowedStake / numPools soas pools are added the max allowed per pool can reduce.", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator." - } - ], - "returns": { - "type": "uint64" - } - }, - { - "name": "doesStakerNeedToPayMBR", - "desc": "Helper callers can call w/ simulate to determine if 'AddStaker' MBR should be included w/ staking amount", - "args": [ - { - "name": "staker", - "type": "address" - } - ], - "returns": { - "type": "bool" - } - }, - { - "name": "getStakedPoolsForAccount", - "desc": "Retrieves the staked pools for an account.", - "args": [ - { - "name": "staker", - "type": "address", - "desc": "The account to retrieve staked pools for.@return{ValidatorPoolKey[]}- The array of staked pools for the account." - } - ], - "returns": { - "type": "(uint64,uint64,uint64)[]" - } - }, - { - "name": "getTokenPayoutRatio", - "desc": "Retrieves the token payout ratio for a given validator - returning the pool ratios of whole so that tokenpayouts across pools can be based on a stable snaphost of stake.", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator.@return{PoolTokenPayoutRatio}- The token payout ratio for the validator." - } - ], - "returns": { - "type": "(uint64[24],uint64)" - } - }, - { - "name": "getNodePoolAssignments", - "args": [ - { - "name": "validatorId", - "type": "uint64" - } - ], - "returns": { - "type": "((uint64[3])[8])" - } - }, - { - "name": "getNFDRegistryID", - "args": [], - "returns": { - "type": "uint64" - } - }, - { - "name": "addValidator", - "desc": "Adds a new validatorRequires at least 10 ALGO as the 'fee' for the transaction to help dissuade spammed validator adds.", - "args": [ - { - "name": "mbrPayment", - "type": "pay", - "desc": "payment from caller which covers mbr increase of new validator storage" - }, - { - "name": "nfdName", - "type": "string", - "desc": "(Optional) Name of nfd (used as double-check against id specified in config)" - }, - { - "name": "config", - "type": "(uint64,address,address,uint64,uint8,address,uint64[4],uint64,uint64,uint64,uint32,uint32,address,uint64,uint64,uint8,uint64,uint64)", - "desc": "ValidatorConfig struct" - } - ], - "returns": { - "type": "uint64", - "desc": "{uint64}validator id" - } - }, - { - "name": "changeValidatorManager", - "desc": "Changes the Validator manager for a specific Validator id.[ ONLY OWNER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator to change the manager for." - }, - { - "name": "manager", - "type": "address", - "desc": "The new manager address." - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "changeValidatorSunsetInfo", - "desc": "Updates the sunset information for a given validator.[ ONLY OWNER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator to update." - }, - { - "name": "sunsettingOn", - "type": "uint64", - "desc": "The new sunset timestamp." - }, - { - "name": "sunsettingTo", - "type": "uint64", - "desc": "The new sunset to validator id." - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "changeValidatorNFD", - "desc": "Changes the NFD for a validator in the validatorList contract.[ ONLY OWNER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator to update." - }, - { - "name": "nfdAppID", - "type": "uint64", - "desc": "The application id of the NFD to assign to the validator." - }, - { - "name": "nfdName", - "type": "string", - "desc": "The name of the NFD (which must match)" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "changeValidatorCommissionAddress", - "desc": "Change the commission address that validator rewards are sent to.[ ONLY OWNER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64" - }, - { - "name": "commissionAddress", - "type": "address" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "changeValidatorRewardInfo", - "desc": "Allow the additional rewards (gating entry, additional token rewards) information be changed at will.[ ONLY OWNER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64" - }, - { - "name": "EntryGatingType", - "type": "uint8" - }, - { - "name": "EntryGatingAddress", - "type": "address" - }, - { - "name": "EntryGatingAssets", - "type": "uint64[4]" - }, - { - "name": "GatingAssetMinBalance", - "type": "uint64" - }, - { - "name": "RewardPerPayout", - "type": "uint64" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "addPool", - "desc": "Adds a new pool to a validator's pool set, returning the 'key' to reference the pool in the future for staking, etc.The caller must pay the cost of the validators MBR increase as well as the MBR that will be needed for the pool itself.[ ONLY OWNER OR MANAGER CAN call ]", - "args": [ - { - "name": "mbrPayment", - "type": "pay", - "desc": "payment from caller which covers mbr increase of adding a new pool" - }, - { - "name": "validatorId", - "type": "uint64", - "desc": "is id of validator to pool to (must be owner or manager)" - }, - { - "name": "nodeNum", - "type": "uint64", - "desc": "is node number to add to" - } - ], - "returns": { - "type": "(uint64,uint64,uint64)", - "desc": "{ValidatorPoolKey}pool key to created pool" - } - }, - { - "name": "addStake", - "desc": "Adds stake to a validator pool.", - "args": [ - { - "name": "stakedAmountPayment", - "type": "pay", - "desc": "payment coming from staker to place into a pool" - }, - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator." - }, - { - "name": "valueToVerify", - "type": "uint64", - "desc": "only if validator has gating to enter - this is asset id or nfd id that corresponds to gating.Txn sender is factored in as well if that is part of gating.*" - } - ], - "returns": { - "type": "(uint64,uint64,uint64)", - "desc": "{ValidatorPoolKey}- The key of the validator pool." - } - }, - { - "name": "setTokenPayoutRatio", - "desc": "setTokenPayoutRatio is called by Staking Pool # 1 (ONLY) to ask the validator (us) to calculate the ratiosof stake in the pools for subsequent token payouts (ie: 2 pools, '100' algo total staked, 60 in pool 1, and 40in pool 2) This is done so we have a stable snapshot of stake - taken once per epoch - only triggered bypool 1 doing payout. pools other than 1 doing payout call pool 1 to ask it do it first.It would be 60/40% in the poolPctOfWhole values. The token reward payouts then use these values instead oftheir 'current' stake which changes as part of the payouts themselves (and people could be changing stakeduring the epoch updates across pools)Multiple pools will call us via pool 1 (pool2->pool1->validator, etc.) so don't assert on pool1 calling multipletimes in same epoch. Just return.", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "validator id (and thus pool) calling us. Verified so that sender MUST be pool 1 of this validator." - } - ], - "returns": { - "type": "(uint64[24],uint64)", - "desc": "PoolTokenPayoutRatio - the finished ratio data" - } - }, - { - "name": "stakeUpdatedViaRewards", - "desc": "stakeUpdatedViaRewards is called by Staking pools to inform the validator (us) that a particular amount of totalstake has been added to the specified pool. This is used to update the stats we have in our PoolInfo storage.The calling App id is validated against our pool list as well.", - "args": [ - { - "name": "poolKey", - "type": "(uint64,uint64,uint64)", - "desc": "ValidatorPoolKey type" - }, - { - "name": "algoToAdd", - "type": "uint64", - "desc": "amount this validator's total stake increased via rewards" - }, - { - "name": "rewardTokenAmountReserved", - "type": "uint64", - "desc": "amount this validator's total stake increased via rewards (that should be" - }, - { - "name": "validatorCommission", - "type": "uint64", - "desc": "the commission amount the validator was paid, if any" - }, - { - "name": "saturatedBurnToFeeSink", - "type": "uint64", - "desc": "if the pool was in saturated state, the amount sent back to the fee sink.seen as 'accounted for/pending spent')" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "stakeRemoved", - "desc": "stakeRemoved is called by Staking pools to inform the validator (us) that a particular amount of total stake has been removedfrom the specified pool. This is used to update the stats we have in our PoolInfo storage.If any amount of rewardRemoved is specified, then that amount of reward is sent to the useThe calling App id is validated against our pool list as well.", - "args": [ - { - "name": "poolKey", - "type": "(uint64,uint64,uint64)", - "desc": "calling us from which stake was removed" - }, - { - "name": "staker", - "type": "address" - }, - { - "name": "amountRemoved", - "type": "uint64", - "desc": "algo amount removed" - }, - { - "name": "rewardRemoved", - "type": "uint64", - "desc": "if applicable, amount of token reward removed (by pool 1 caller) or TO remove and pay out (via pool 1 from different pool caller)" - }, - { - "name": "stakerRemoved", - "type": "bool" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "findPoolForStaker", - "desc": "Finds the pool for a staker based on the provided validator id, staker address, and amount to stake.First checks the stakers 'already staked list' for the validator preferring those (adding if possible) then addsto new pool if necessary.", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator." - }, - { - "name": "staker", - "type": "address", - "desc": "The address of the staker." - }, - { - "name": "amountToStake", - "type": "uint64", - "desc": "The amount to stake." - } - ], - "returns": { - "type": "((uint64,uint64,uint64),bool,bool)", - "desc": "{ValidatorPoolKey, boolean, boolean}- The pool for the staker, true/false on whether the staker is 'new'to this VALIDATOR, and true/false if staker is new to the protocol." - } - }, - { - "name": "movePoolToNode", - "desc": "Find the specified pool (in any node number) and move it to the specified node.The pool account is forced offline if moved so prior node will still run for 320 rounds butnew key goes online on new node soon after (320 rounds after it goes online)No-op if success, asserts if not found or can't move (no space in target)[ ONLY OWNER OR MANAGER CAN CHANGE ]", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator." - }, - { - "name": "poolAppId", - "type": "uint64" - }, - { - "name": "nodeNum", - "type": "uint64" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "emptyTokenRewards", - "desc": "Sends the reward tokens held in pool 1 to specified receiver.This is intended to be used by the owner when they want to get reward tokens 'back' which they sent tothe first pool (likely because validator is sunsetting. Any tokens currently 'reserved' for stakers to claim willNOT be sent as they must be held back for stakers to later claim.[ ONLY OWNER CAN CALL]", - "args": [ - { - "name": "validatorId", - "type": "uint64", - "desc": "The id of the validator." - }, - { - "name": "receiver", - "type": "address", - "desc": "the account to send the tokens to (must already be opted-in to the reward token)" - } - ], - "returns": { - "type": "uint64", - "desc": "{uint64}the amount of reward token sent" - } - } - ] -} \ No newline at end of file diff --git a/examples/src/main/java/com/algorand/examples/Reti.java b/examples/src/main/java/com/algorand/examples/Reti.java deleted file mode 100644 index 2ac7178e6..000000000 --- a/examples/src/main/java/com/algorand/examples/Reti.java +++ /dev/null @@ -1,392 +0,0 @@ -package com.algorand.examples; - -import java.math.BigInteger; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.security.GeneralSecurityException; -import java.util.*; - -import com.algorand.algosdk.abi.Contract; -import com.algorand.algosdk.account.Account; -import com.algorand.algosdk.builder.transaction.MethodCallTransactionBuilder; -import com.algorand.algosdk.builder.transaction.PaymentTransactionBuilder; -import com.algorand.algosdk.crypto.Address; -import com.algorand.algosdk.transaction.*; -import com.algorand.algosdk.transaction.AtomicTransactionComposer.ExecuteResult; -import com.algorand.algosdk.transaction.Transaction; -import com.algorand.algosdk.util.Encoder; -import com.algorand.algosdk.v2.client.common.AlgodClient; -import com.algorand.algosdk.v2.client.common.Response; -import com.algorand.algosdk.v2.client.model.*; - -public class Reti { - static Long RETI_APP_ID_TESTNET = 673404372L; - - public static void main(String[] args) throws Exception { - // Get valid Reti testnet account - Account acct = recoverFromMnemonic(); - System.out.println("account address " + acct.getAddress().toString()); - - // Get # of Reti Validators in testnet - System.out.println(); - System.out.println("getNumberOfValidators"); - getNumberOfValidators(acct); - - // Get staked pools on account, there should be at least one - System.out.println(); - System.out.println("getStakedPoolsForAccount"); - getStakedPoolsForAccount(acct); - - // Add Stake to Validator Pool ID - System.out.println(); - System.out.println("addStake"); - addStake(acct); - - // Remove Stake from Validator Pool ID - System.out.println(); - System.out.println("removeStake"); - removeStake(acct); - } - - public static Account recoverFromMnemonic() throws GeneralSecurityException { - // example: ACCOUNT_RECOVER_MNEMONIC - // Space delimited 25 word mnemonic - String part1 = "panda course account pact six same"; - String part2 = "antique shed slender finger lab dose"; - String part3 = "reveal escape amateur since power left"; - String part4 = "trust update soup neck tuition about meadow"; - String mn = part1 + " " + part2 + " " + part3 + " " + part4; - return new Account(mn); - } - - public static void getNumberOfValidators(Account acct) { - try { - AlgodClient algodClient = ExampleUtils.getAlgodTestnetClient(); - Response rsp = algodClient.TransactionParams().execute(); - TransactionParametersResponse sp = rsp.body(); - - String jsonContract = Files.readString(Paths.get("reti/ValidatorRegistry.arc4.json")); - Contract contract = Encoder.decodeFromJson(jsonContract, Contract.class); - - List methodArgs = new ArrayList(); - - MethodCallParams mcp = MethodCallTransactionBuilder.Builder() - .applicationId(RETI_APP_ID_TESTNET) - .signer(acct.getTransactionSigner()) - .sender(acct.getAddress()) - .method(contract.getMethodByName("getNumValidators")) - .methodArguments(methodArgs) - .onComplete(Transaction.OnCompletion.NoOpOC) - .suggestedParams(sp) - .build(); - - AtomicTransactionComposer atc = new AtomicTransactionComposer(); - atc.addMethodCall(mcp); - - ExecuteResult res = atc.execute(algodClient, 250); - System.out.printf("App call (%s) confirmed in round %d\n", res.txIDs, res.confirmedRound); - res.methodResults.forEach(methodResult -> { - System.out.printf("Result from calling '%s' method: %s\n", methodResult.method.name, - methodResult.value); - }); - } catch (Exception e) { - System.out.println(e.toString()); - } - } - - public static void getStakedPoolsForAccount(Account acct) { - try { - AlgodClient algodClient = ExampleUtils.getAlgodTestnetClient(); - Response rsp = algodClient.TransactionParams().execute(); - TransactionParametersResponse sp = rsp.body(); - - String jsonContract = Files.readString(Paths.get("reti/ValidatorRegistry.arc4.json")); - Contract contract = Encoder.decodeFromJson(jsonContract, Contract.class); - - List methodArgs = new ArrayList(); - methodArgs.add(acct.getAddress()); - - MethodCallParams mcp = MethodCallTransactionBuilder.Builder() - .applicationId(RETI_APP_ID_TESTNET) - .signer(new EmptyTransactionSigner(acct.getAddress().toString())) - .sender(acct.getAddress()) - .method(contract.getMethodByName("getStakedPoolsForAccount")) - .methodArguments(methodArgs) - .onComplete(Transaction.OnCompletion.NoOpOC) - .suggestedParams(sp) - .build(); - - AtomicTransactionComposer atc = new AtomicTransactionComposer(); - atc.addMethodCall(mcp); - - SimulateRequest request = new SimulateRequest(); - request.allowEmptySignatures = true; - request.allowUnnamedResources = true; - - AtomicTransactionComposer.SimulateResult simulateResult = atc.simulate(algodClient, request); - Object resultsObj = simulateResult.getMethodResults().get(0).value; - List results = Arrays.stream(((Object[]) resultsObj)).toList(); - - for (Object o : results) { - List result = Arrays.stream(((Object[]) o)).toList(); - BigInteger validatorId = ((BigInteger) result.get(0)); - // BigInteger poolNum = ((BigInteger) result.get(1)); - BigInteger poolAppId = ((BigInteger) result.get(2)); - System.out.println("validator = " + validatorId + ", poolAppID = " + poolAppId); - getStakerInfo(acct, poolAppId); - } - } catch (Exception e) { - System.out.println(e); - } - } - - public static void getStakerInfo(Account acct, BigInteger poolAppID) { - String feeSink = "A7NMWS3NT3IUDMLVO26ULGXGIIOUQ3ND2TXSER6EBGRZNOBOUIQXHIBGDE"; - try { - AlgodClient algodClient = ExampleUtils.getAlgodTestnetClient(); - Response rsp = algodClient.TransactionParams().execute(); - TransactionParametersResponse sp = rsp.body(); - - String jsonContract = Files.readString(Paths.get("reti/StakingPool.arc4.json")); - Contract contract = Encoder.decodeFromJson(jsonContract, Contract.class); - - List methodArgs = new ArrayList(); - methodArgs.add(acct.getAddress()); - - MethodCallParams mcp = MethodCallTransactionBuilder.Builder() - .applicationId(poolAppID.longValue()) - .signer(new EmptyTransactionSigner(acct.getAddress().toString())) - .sender(acct.getAddress()) - .method(contract.getMethodByName("getStakerInfo")) - .methodArguments(methodArgs) - .onComplete(Transaction.OnCompletion.NoOpOC) - .suggestedParams(sp) - .build(); - - AtomicTransactionComposer atc = new AtomicTransactionComposer(); - atc.addMethodCall(mcp); - - SimulateRequest request = new SimulateRequest(); - request.allowEmptySignatures = true; - request.allowUnnamedResources = true; - - AtomicTransactionComposer.SimulateResult simulateResult = atc.simulate(algodClient, request); - Object resultsObj = simulateResult.getMethodResults().get(0).value; - List results = Arrays.stream(((Object[]) resultsObj)).toList(); - System.out.println("balance = " + results.get(1) + " microALGOS, poolAppID = " + poolAppID); - } catch (Exception e) { - System.out.println(e); - } - } - - public static void addStake(Account acct) { - Long validatorId = 1L; - Long poolAppId = 673421623L; - Long amount = 8000000L; - - try { - AlgodClient algodClient = ExampleUtils.getAlgodTestnetClient(); - Response rsp = algodClient.TransactionParams().execute(); - TransactionParametersResponse sp = rsp.body(); - - String jsonContract = Files.readString(Paths.get("reti/ValidatorRegistry.arc4.json")); - Contract validatorContract = Encoder.decodeFromJson(jsonContract, Contract.class); - - AtomicTransactionComposer atc = new AtomicTransactionComposer(); - - //Gas Call - List boxRefsGas = new ArrayList<>(); - boxRefsGas.add(new AppBoxReference(0L, getValidatorListBoxName(validatorId))); - boxRefsGas.add(new AppBoxReference(0L, new byte[0])); - boxRefsGas.add(new AppBoxReference(0L, new byte[0])); - boxRefsGas.add(new AppBoxReference(0L, new byte[0])); - boxRefsGas.add(new AppBoxReference(0L, new byte[0])); - boxRefsGas.add(new AppBoxReference(0L, new byte[0])); - boxRefsGas.add(new AppBoxReference(0L, getStakerPoolSetBoxName(acct.getAddress()))); - - MethodCallParams mcpGas = MethodCallTransactionBuilder.Builder() - .applicationId(RETI_APP_ID_TESTNET) - .signer(acct.getTransactionSigner()) - .sender(acct.getAddress()) - .method(validatorContract.getMethodByName("gas")) - .onComplete(Transaction.OnCompletion.NoOpOC) - .boxReferences(boxRefsGas) - .suggestedParams(sp) - .build(); - atc.addMethodCall(mcpGas); - - // addStake call - Transaction ptxn = PaymentTransactionBuilder.Builder() - .amount(amount) // 8 algos - .suggestedParams(sp) - .sender(acct.getAddress()) - .receiver(new Address().forApplication(RETI_APP_ID_TESTNET)) - .build(); - - // Construct TransactionWithSigner - TransactionWithSigner tws = new TransactionWithSigner(ptxn, - acct.getTransactionSigner()); - - List methodArgs = new ArrayList(); - methodArgs.add(tws); - methodArgs.add(BigInteger.valueOf(validatorId)); - methodArgs.add(BigInteger.ZERO); - - List foreignApps = new ArrayList(); - foreignApps.add(poolAppId); - - List boxRefs = new ArrayList<>(); - boxRefs.add(new AppBoxReference(poolAppId, getStakerLedgerBoxName())); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - - sp.fee = 1000L * 2; - - MethodCallParams mcp = MethodCallTransactionBuilder.Builder() - .applicationId(RETI_APP_ID_TESTNET) - .signer(acct.getTransactionSigner()) - .sender(acct.getAddress()) - .method(validatorContract.getMethodByName("addStake")) - .methodArguments(methodArgs) - .foreignApps(foreignApps) - .boxReferences(boxRefs) - .onComplete(Transaction.OnCompletion.NoOpOC) - .suggestedParams(sp) - .build(); - atc.addMethodCall(mcp); - - ExecuteResult res = atc.execute(algodClient, 250); - System.out.printf("App call (%s) confirmed in round %d\n", res.txIDs, res.confirmedRound); - res.methodResults.forEach(methodResult -> { - switch (methodResult.method.name) { - case "addStake": - List results = Arrays.stream(((Object[]) methodResult.value)).toList(); - System.out.println(amount + " additional microAlgos staked to poolAppId = " + results.get(2)); - break; - default: break; - } - }); - } catch (Exception e) { - System.out.println(e.toString()); - } - } - - public static void removeStake(Account acct) { - Long validatorId = 1L; - Long poolAppId = 673421623L; - - try { - AlgodClient algodClient = ExampleUtils.getAlgodTestnetClient(); - Response rsp = algodClient.TransactionParams().execute(); - TransactionParametersResponse sp = rsp.body(); - - String jsonContract = Files.readString(Paths.get("reti/ValidatorRegistry.arc4.json")); - Contract validatorContract = Encoder.decodeFromJson(jsonContract, Contract.class); - String stakingContractStr = Files.readString(Paths.get("reti/StakingPool.arc4.json")); - Contract stakingContract = Encoder.decodeFromJson(stakingContractStr, Contract.class); - - AtomicTransactionComposer atc = new AtomicTransactionComposer(); - - //Gas Call - List boxRefsGas = new ArrayList<>(); - boxRefsGas.add(new AppBoxReference(RETI_APP_ID_TESTNET, getValidatorListBoxName(validatorId))); - boxRefsGas.add(new AppBoxReference(RETI_APP_ID_TESTNET, new byte[0])); - boxRefsGas.add(new AppBoxReference(RETI_APP_ID_TESTNET, getStakerPoolSetBoxName(acct.getAddress()))); - boxRefsGas.add(new AppBoxReference(0L, new byte[0])); - boxRefsGas.add(new AppBoxReference(0L, new byte[0])); - boxRefsGas.add(new AppBoxReference(0L, new byte[0])); - boxRefsGas.add(new AppBoxReference(0L, new byte[0])); - - MethodCallParams mcpGas = MethodCallTransactionBuilder.Builder() - .applicationId(RETI_APP_ID_TESTNET) - .signer(acct.getTransactionSigner()) - .sender(acct.getAddress()) - .method(validatorContract.getMethodByName("gas")) - .onComplete(Transaction.OnCompletion.NoOpOC) - .boxReferences(boxRefsGas) - .suggestedParams(sp) - .build(); - atc.addMethodCall(mcpGas); - - List methodArgs = new ArrayList(); - methodArgs.add(acct.getAddress()); - methodArgs.add(BigInteger.valueOf(0L)); // 0 Removes all stake - - List foreignApps = new ArrayList(); - foreignApps.add(poolAppId); - - List boxRefs = new ArrayList<>(); - boxRefs.add(new AppBoxReference(poolAppId, getStakerLedgerBoxName())); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - boxRefs.add(new AppBoxReference(0L, new byte[0])); - - sp.fee = 1000L * 2; - - MethodCallParams mcp = MethodCallTransactionBuilder.Builder() - .applicationId(poolAppId) - .signer(acct.getTransactionSigner()) - .sender(acct.getAddress()) - .method(stakingContract.getMethodByName("removeStake")) - .methodArguments(methodArgs) - .foreignApps(foreignApps) - .boxReferences(boxRefs) - .onComplete(Transaction.OnCompletion.NoOpOC) - .suggestedParams(sp) - .build(); - atc.addMethodCall(mcp); - - ExecuteResult res = atc.execute(algodClient, 250); - System.out.printf("App call (%s) confirmed in round %d\n", res.txIDs, res.confirmedRound); - res.methodResults.forEach(methodResult -> { - switch (methodResult.method.name) { - case "removeStake": - System.out.println("All staked algos removed from poolAppId = " + poolAppId); - break; - default: break; - } - }); - } catch (Exception e) { - System.out.println(e.toString()); - } - } - - public static byte[] getStakerLedgerBoxName() { - String name = "stakers"; - return name.getBytes(StandardCharsets.UTF_8); - } - - public static byte[] getStakerPoolSetBoxName(Address stakerAccount) { - byte[] prefix = "sps".getBytes(); - byte[] combinedArray = new byte[prefix.length + stakerAccount.getBytes().length]; - - System.arraycopy(prefix, 0, combinedArray, 0, prefix.length); - System.arraycopy(stakerAccount.getBytes(), 0, combinedArray, prefix.length, stakerAccount.getBytes().length); - - return combinedArray; - } - - public static byte[] getValidatorListBoxName(long id) { - int EIGHT = 8; - - byte[] prefix = new byte[]{(byte) 'v'}; - ByteBuffer buffer = ByteBuffer.allocate(EIGHT).order(ByteOrder.BIG_ENDIAN).putLong(id); - byte[] ibytes = buffer.array(); - byte[] result = new byte[prefix.length + ibytes.length]; - - System.arraycopy(prefix, 0, result, 0, prefix.length); - System.arraycopy(ibytes, 0, result, prefix.length, ibytes.length); - - return result; - } -} diff --git a/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java b/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java index e7ee3c03b..039213f72 100644 --- a/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java +++ b/src/main/java/com/algorand/algosdk/transaction/AtomicTransactionComposer.java @@ -124,7 +124,7 @@ public List buildGroup() throws IOException { if (this.status.compareTo(Status.BUILT) >= 0) return this.transactionList; - if (this.transactionList.size() == 0) + if (this.transactionList.isEmpty()) throw new IllegalArgumentException("should not build transaction group with 0 transaction in composer"); else if (this.transactionList.size() > 1) { List groupTxns = new ArrayList<>(); @@ -263,6 +263,9 @@ public SimulateResult simulate(AlgodClient client, SimulateRequest request) thro SignedTransaction stx = stxs.get(i); PendingTransactionResponse pendingTransactionResponse = simulateResponse.txnGroups.get(0).txnResults.get(i).txnResult; + if (!this.methodMap.containsKey(i)) + continue; + ReturnValue returnValue = parseMethodResponse(this.methodMap.get(i), stx, pendingTransactionResponse); methodResults.add(returnValue); } diff --git a/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java b/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java index ecc01502c..9b4dbd688 100644 --- a/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java +++ b/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java @@ -1,15 +1,12 @@ package com.algorand.algosdk.transaction; import com.algorand.algosdk.crypto.Address; -import com.algorand.algosdk.util.Encoder; -import com.fasterxml.jackson.core.JsonProcessingException; - import java.security.NoSuchAlgorithmException; import java.util.Objects; public class EmptyTransactionSigner implements TxnSigner { - private String authAddr = ""; + private String authAddr; /** * EmptyTransactionSigner is a TransactionSigner that produces signed transaction objects without * signatures. This is useful for simulating transactions, but it won't work for actual submission. diff --git a/src/test/java/com/algorand/algosdk/integration/AtomicTxnComposer.java b/src/test/java/com/algorand/algosdk/integration/AtomicTxnComposer.java index fc4cf71be..6ae4e092e 100644 --- a/src/test/java/com/algorand/algosdk/integration/AtomicTxnComposer.java +++ b/src/test/java/com/algorand/algosdk/integration/AtomicTxnComposer.java @@ -8,11 +8,21 @@ import com.algorand.algosdk.crypto.TEALProgram; import com.algorand.algosdk.cucumber.shared.TransactionSteps; import com.algorand.algosdk.logic.StateSchema; -import com.algorand.algosdk.transaction.*; -import com.algorand.algosdk.util.*; +import com.algorand.algosdk.transaction.AtomicTransactionComposer; +import com.algorand.algosdk.transaction.EmptyTransactionSigner; +import com.algorand.algosdk.transaction.MethodCallParams; +import com.algorand.algosdk.transaction.Transaction; +import com.algorand.algosdk.transaction.TransactionWithSigner; +import com.algorand.algosdk.transaction.TxnSigner; +import com.algorand.algosdk.util.Digester; +import com.algorand.algosdk.util.Encoder; +import com.algorand.algosdk.util.GenericObjToArray; +import com.algorand.algosdk.util.ResourceUtils; +import com.algorand.algosdk.util.SplitAndProcessMethodArgs; import com.algorand.algosdk.v2.client.model.PendingTransactionResponse; +import com.algorand.algosdk.v2.client.model.SimulateRequest; import com.algorand.algosdk.v2.client.model.TransactionParametersResponse; - +import io.cucumber.java.en.And; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; @@ -28,6 +38,7 @@ import java.util.regex.Pattern; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertNull; public class AtomicTxnComposer { @@ -43,6 +54,7 @@ public class AtomicTxnComposer { SplitAndProcessMethodArgs abiArgProcessor; Long appID; String nonce; + AtomicTransactionComposer.SimulateResult simulateResult; public AtomicTxnComposer(Stepdefs stepdefs, Applications apps, TransactionSteps steps) { base = stepdefs; @@ -437,4 +449,95 @@ public void i_build_the_transaction_group_with_the_composer_if_there_is_an_error } assertThat(inferredError).isEqualTo(errStr); } + + @And("I simulate the current transaction group with the composer") + public void iSimulateTheCurrentTransactionGroupWithTheComposer() throws Exception { + if (base.simulateRequest == null) { + base.simulateRequest = new SimulateRequest(); + } + + simulateResult = atc.simulate(base.aclv2, base.simulateRequest); + execRes = new AtomicTransactionComposer.ExecuteResult(0L, null, simulateResult.getMethodResults()); + } + + @Then("the simulation should succeed without any failure message") + public void theSimulationShouldSucceedWithoutAnyFailureMessage() { + if (simulateResult != null) { + assertNull(simulateResult.getSimulateResponse().txnGroups.get(0).failureMessage); + } else { + assertNull(base.simulateResponse.body().txnGroups.get(0).failureMessage); + } + } + + @And("the simulation should report a failure at group {string}, path {string} with message {string}") + public void theSimulationShouldReportAFailureAtGroupPathWithMessage(String txnGroupIndex, String failAt, String expectedFailureMsg) throws Exception { + int groupIndex; + try { + groupIndex = Integer.parseInt(txnGroupIndex); + } catch (NumberFormatException e) { + throw new Exception("Invalid transaction group index", e); + } + + // Parse the path ("0,0") into a list of numbers ([0, 0]) + String[] path = failAt.split(","); + List expectedPath = new ArrayList<>(); + for (String pathStr : path) { + try { + expectedPath.add(Long.parseLong(pathStr)); + } catch (NumberFormatException e) { + throw new Exception("Invalid path number", e); + } + } + + // Retrieve the actual failure message + String actualFailureMsg = null; + if (base.simulateResponse != null) { + actualFailureMsg = base.simulateResponse.body().txnGroups.get(groupIndex).failureMessage; + } else if (simulateResult != null) { + actualFailureMsg = simulateResult.getSimulateResponse().txnGroups.get(groupIndex).failureMessage; + } + + if (expectedFailureMsg.isEmpty() && actualFailureMsg != null && !actualFailureMsg.isEmpty()) { + throw new Exception("Expected no failure message, but got: '" + actualFailureMsg + "'"); + } else if (!expectedFailureMsg.isEmpty() && actualFailureMsg != null && !actualFailureMsg.contains(expectedFailureMsg)) { + throw new Exception("Expected failure message '" + expectedFailureMsg + "', but got: '" + actualFailureMsg + "'"); + } + + // Retrieve the actual failure path + List actualPath = null; + if (base.simulateResponse != null) { + actualPath = base.simulateResponse.body().txnGroups.get(groupIndex).failedAt; + } else if (simulateResult != null) { + actualPath = simulateResult.getSimulateResponse().txnGroups.get(groupIndex).failedAt; + } + if (expectedPath.size() != actualPath.size()) { + throw new Exception("Expected failure path " + expectedPath + ", but got: " + actualPath); + } + + for (int i = 0; i < expectedPath.size(); i++) { + if (!expectedPath.get(i).equals(actualPath.get(i))) { + throw new Exception("Expected failure path " + expectedPath + ", but got: " + actualPath); + } + } + } + + @And("I create a transaction with an empty signer with the current transaction.") + public void iCreateATransactionWithAnEmptySignerWithTheCurrentTransaction() { + String address = ""; + if (base.address != null) { + address = base.address; + } else if (base.account != null) { + address = base.account.getAddress().toString(); + } + + base.txn = transSteps.builtTransaction; + transWithSigner = new TransactionWithSigner(base.txn, + new EmptyTransactionSigner(address) + ); + } + + @Then("the current application initial {string} state should contain {string} with value {string}.") + public void theCurrentApplicationInitialStateShouldContainWithValue(String arg0, String arg1, String arg2) { + + } } diff --git a/src/test/java/com/algorand/algosdk/integration/Stepdefs.java b/src/test/java/com/algorand/algosdk/integration/Stepdefs.java index 95548d66c..1a64b6853 100644 --- a/src/test/java/com/algorand/algosdk/integration/Stepdefs.java +++ b/src/test/java/com/algorand/algosdk/integration/Stepdefs.java @@ -4,35 +4,71 @@ import com.algorand.algosdk.auction.Bid; import com.algorand.algosdk.auction.SignedBid; import com.algorand.algosdk.builder.transaction.TransactionBuilder; -import com.algorand.algosdk.crypto.*; +import com.algorand.algosdk.crypto.Address; +import com.algorand.algosdk.crypto.Digest; +import com.algorand.algosdk.crypto.Ed25519PublicKey; +import com.algorand.algosdk.crypto.LogicsigSignature; +import com.algorand.algosdk.crypto.MultisigAddress; +import com.algorand.algosdk.crypto.ParticipationPublicKey; +import com.algorand.algosdk.crypto.Signature; +import com.algorand.algosdk.crypto.VRFPublicKey; import com.algorand.algosdk.kmd.client.KmdClient; import com.algorand.algosdk.kmd.client.api.KmdApi; -import com.algorand.algosdk.kmd.client.model.*; +import com.algorand.algosdk.kmd.client.model.APIV1GETWalletsResponse; +import com.algorand.algosdk.kmd.client.model.APIV1Wallet; +import com.algorand.algosdk.kmd.client.model.CreateWalletRequest; +import com.algorand.algosdk.kmd.client.model.DeleteKeyRequest; +import com.algorand.algosdk.kmd.client.model.DeleteMultisigRequest; +import com.algorand.algosdk.kmd.client.model.ExportKeyRequest; +import com.algorand.algosdk.kmd.client.model.ExportMasterKeyRequest; +import com.algorand.algosdk.kmd.client.model.ExportMultisigRequest; +import com.algorand.algosdk.kmd.client.model.GenerateKeyRequest; +import com.algorand.algosdk.kmd.client.model.ImportKeyRequest; +import com.algorand.algosdk.kmd.client.model.ImportMultisigRequest; +import com.algorand.algosdk.kmd.client.model.InitWalletHandleTokenRequest; +import com.algorand.algosdk.kmd.client.model.ListKeysRequest; +import com.algorand.algosdk.kmd.client.model.ListMultisigRequest; +import com.algorand.algosdk.kmd.client.model.ReleaseWalletHandleTokenRequest; +import com.algorand.algosdk.kmd.client.model.RenameWalletRequest; +import com.algorand.algosdk.kmd.client.model.RenewWalletHandleTokenRequest; +import com.algorand.algosdk.kmd.client.model.SignMultisigRequest; +import com.algorand.algosdk.kmd.client.model.SignTransactionRequest; +import com.algorand.algosdk.kmd.client.model.WalletInfoRequest; import com.algorand.algosdk.mnemonic.Mnemonic; import com.algorand.algosdk.transaction.SignedTransaction; import com.algorand.algosdk.transaction.Transaction; +import com.algorand.algosdk.transaction.TransactionWithSigner; import com.algorand.algosdk.util.AlgoConverter; import com.algorand.algosdk.util.Encoder; import com.algorand.algosdk.util.ResourceUtils; +import com.algorand.algosdk.v2.client.algod.SimulateTransaction; import com.algorand.algosdk.v2.client.common.AlgodClient; import com.algorand.algosdk.v2.client.common.IndexerClient; import com.algorand.algosdk.v2.client.common.Response; -import com.algorand.algosdk.v2.client.model.*; - +import com.algorand.algosdk.v2.client.model.AccountAssetResponse; +import com.algorand.algosdk.v2.client.model.Asset; +import com.algorand.algosdk.v2.client.model.CompileResponse; +import com.algorand.algosdk.v2.client.model.DryrunRequest; +import com.algorand.algosdk.v2.client.model.DryrunResponse; +import com.algorand.algosdk.v2.client.model.DryrunSource; +import com.algorand.algosdk.v2.client.model.SimulateRequest; +import com.algorand.algosdk.v2.client.model.SimulateRequestTransactionGroup; +import com.algorand.algosdk.v2.client.model.SimulateResponse; +import com.algorand.algosdk.v2.client.model.TransactionParametersResponse; import com.fasterxml.jackson.core.JsonProcessingException; - +import io.cucumber.java.en.And; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; -import java.io.*; +import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; import java.security.NoSuchAlgorithmException; -import java.util.Arrays; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -43,7 +79,8 @@ import static org.assertj.core.api.Assertions.fail; public class Stepdefs { - public static String token = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + public static String algodHost = "http://localhost"; + public static String algodToken = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; public static Integer algodPort = 60000; public static Integer kmdPort = 60001; @@ -95,6 +132,11 @@ public class Stepdefs { BigInteger votelst; BigInteger votekd; + TransactionWithSigner accountTxAndSigner; + SimulateRequest simulateRequest; + Response simulateResponse; + SimulateTransaction simulateTransaction; + /* Assets */ String creator = ""; BigInteger assetID = BigInteger.valueOf(1); @@ -111,7 +153,7 @@ protected Address getAddress(int i) { if (addresses == null) { throw new RuntimeException("Addresses not initialized, must use given 'wallet information'"); } - if (addresses.size() < i || addresses.size() == 0) { + if (addresses.size() < i || addresses.isEmpty()) { throw new RuntimeException("Not enough addresses, you may need to update the network template."); } try { @@ -558,7 +600,7 @@ public void kClient() { kmdClient.setConnectTimeout(30000); kmdClient.setReadTimeout(30000); kmdClient.setWriteTimeout(30000); - kmdClient.setApiKey(token); + kmdClient.setApiKey(algodToken); kmdClient.setBasePath("http://localhost:" + kmdPort); kcl = new KmdApi(kmdClient); } @@ -566,7 +608,7 @@ public void kClient() { @Given("an algod v2 client") public void aClientv2() { aclv2 = new com.algorand.algosdk.v2.client.common.AlgodClient( - "http://localhost", algodPort, token + algodHost, algodPort, algodToken ); } @@ -1191,4 +1233,85 @@ public void disassemblyMatches(String bytecodeFilename, String sourceFilename) t assertThat(disassembledSource).isEqualTo(expectedSource); } + + @And("I simulate the transaction") + public void iSimulateTheTransaction() throws Exception { + SimulateRequestTransactionGroup group = new SimulateRequestTransactionGroup(); + group.txns = Collections.singletonList(stx); + + if (simulateRequest == null) { + simulateRequest = new SimulateRequest(); + } + + simulateRequest.txnGroups = Collections.singletonList(group); + simulateResponse = aclv2.SimulateTransaction().request(simulateRequest).execute(); + } + + @When("I make a new simulate request.") + public void iMakeANewSimulateRequest() { + + } + + @Then("I allow {int} more budget on that simulate request.") + public void iAllowMoreBudgetOnThatSimulateRequest(int arg0) { + + } + + @Then("I simulate the transaction group with the simulate request.") + public void iSimulateTheTransactionGroupWithTheSimulateRequest() { + + } + + @Then("I check the simulation result has power packs extra-opcode-budget with extra budget {int}.") + public void iCheckTheSimulationResultHasPowerPacksExtraOpcodeBudgetWithExtraBudget(int arg0) { + + } + + @Then("I check the simulation result has power packs allow-more-logging.") + public void iCheckTheSimulationResultHasPowerPacksAllowMoreLogging() { + + } + + @Then("I allow more logs on that simulate request.") + public void iAllowMoreLogsOnThatSimulateRequest() { + if (simulateRequest == null) { + simulateRequest = new SimulateRequest(); + } + simulateRequest.allowMoreLogging = true; + } + + @Then("I allow exec trace options {string} on that simulate request.") + public void iAllowExecTraceOptionsOnThatSimulateRequest(String arg0) { + + } + + @Then("{int}th unit in the {string} trace at txn-groups path {string} should add value {string} to stack, pop {int} values from stack, write value {string} to scratch slot {string}.") + public void thUnitInTheTraceAtTxnGroupsPathShouldAddValueToStackPopValuesFromStackWriteValueToScratchSlot(int arg0, String arg1, String arg2, String arg3, int arg4, String arg5, String arg6) { + + } + + @And("I add a method call with the transient account, the current application, suggested params, on complete {string}, current transaction signer, current method arguments, boxes {string}.") + public void iAddAMethodCallWithTheTransientAccountTheCurrentApplicationSuggestedParamsOnCompleteCurrentTransactionSignerCurrentMethodArgumentsBoxes(String arg0, String arg1) { + + } + + @Then("the current application initial {string} state should be empty.") + public void theCurrentApplicationInitialStateShouldBeEmpty(String arg0) { + + } + + @Then("{string} hash at txn-groups path {string} should be {string}.") + public void hashAtTxnGroupsPathShouldBe(String arg0, String arg1, String arg2) { + + } + + @And("th unit in the {string} trace at txn-groups path {string} should write to {string} state {string} with new value {string}.") + public void indexThUnitInTheTraceAtTxnGroupsPathShouldWriteToStateWithNewValue(int arg0, String arg1, String arg2, String arg3, String arg4, String arg5) { + + } + + @When("I prepare the transaction without signatures for simulation") + public void iPrepareTheTransactionWithoutSignaturesForSimulation() { + stx = new SignedTransaction(txn); + } } From f39ea1dbb181f15cb375af8193f4b20e2e27aabf Mon Sep 17 00:00:00 2001 From: Michael T Chuang Date: Wed, 2 Oct 2024 01:12:21 -0700 Subject: [PATCH 5/6] test: add in ATC unsigned transaction simulate integration tests --- examples/pom.xml | 4 ++-- .../algosdk/transaction/EmptyTransactionSigner.java | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/examples/pom.xml b/examples/pom.xml index 7f2f33c08..11ec6c410 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -118,8 +118,8 @@ org.apache.maven.plugins maven-compiler-plugin - 16 - 16 + 11 + 11 diff --git a/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java b/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java index 9b4dbd688..597807990 100644 --- a/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java +++ b/src/main/java/com/algorand/algosdk/transaction/EmptyTransactionSigner.java @@ -30,10 +30,12 @@ public SignedTransaction[] signTxnGroup(Transaction[] txnGroup, int[] indicesToS for (int pos : indicesToSign) { SignedTransaction stx = new SignedTransaction(txnGroup[pos]); - if (authAddr != null) { - Address address = new Address(authAddr); - stx.authAddr(address.getBytes()); - } + try { + if (authAddr != null) { + Address address = new Address(authAddr); + stx.authAddr(address.getBytes()); + } + } catch (IllegalArgumentException ignored) { } stxs[pos] = stx; } From 9281c7875c35f41bdc6906fdb96abad192e023f1 Mon Sep 17 00:00:00 2001 From: Michael T Chuang Date: Wed, 2 Oct 2024 19:55:23 -0700 Subject: [PATCH 6/6] test: add in simulate tag and a few more test steps --- .circleci/config.yml | 2 +- src/test/integration.tags | 1 + .../integration/AtomicTxnComposer.java | 26 +++++++++++-- .../algosdk/integration/Stepdefs.java | 38 ++++++++++++------- 4 files changed, 49 insertions(+), 18 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 511cac25f..968f1a0d7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -24,7 +24,7 @@ jobs: - run: mvn test integration-test: machine: - image: "ubuntu-2204:2022.04.2" + image: default resource_class: medium steps: - checkout diff --git a/src/test/integration.tags b/src/test/integration.tags index f8b49f9fc..d73c5c749 100644 --- a/src/test/integration.tags +++ b/src/test/integration.tags @@ -13,3 +13,4 @@ @rekey_v1 @send @send.keyregtxn +@simulate diff --git a/src/test/java/com/algorand/algosdk/integration/AtomicTxnComposer.java b/src/test/java/com/algorand/algosdk/integration/AtomicTxnComposer.java index 6ae4e092e..93a269976 100644 --- a/src/test/java/com/algorand/algosdk/integration/AtomicTxnComposer.java +++ b/src/test/java/com/algorand/algosdk/integration/AtomicTxnComposer.java @@ -37,6 +37,7 @@ import java.util.Map; import java.util.regex.Pattern; +import static com.algorand.algosdk.util.ConversionUtils.convertBoxes; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertNull; @@ -437,6 +438,28 @@ public void i_add_a_method_call_with_the_transient_account_the_current_applicati atc.addMethodCall(optionBuild); } + @And("I add a method call with the transient account, the current application, suggested params, on complete {string}, current transaction signer, current method arguments, boxes {string}.") + public void iAddAMethodCallWithTheTransientAccountTheCurrentApplicationSuggestedParamsOnCompleteCurrentTransactionSignerCurrentMethodArgumentsBoxes(String onCompleteString, String boxesString) throws Exception { + Address senderAddress = applications.transientAccount.transientAccount.getAddress(); + + optionBuilder + .onComplete(Transaction.OnCompletion.String(onCompleteString)) + .sender(senderAddress) + .signer(transSigner) + .applicationId(applications.appId) + .method(method) + .note(("I should be unique thanks to this nonce: " + nonce).getBytes(StandardCharsets.UTF_8)) + .firstValid(transSteps.fv) + .lastValid(transSteps.lv) + .genesisHash(transSteps.genesisHash) + .genesisID(transSteps.genesisID) + .fee(transSteps.fee) + .flatFee(transSteps.flatFee) + .boxReferences(convertBoxes(boxesString)); + MethodCallParams optionBuild = optionBuilder.build(); + atc.addMethodCall(optionBuild); + } + @When("I build the transaction group with the composer. If there is an error it is {string}.") public void i_build_the_transaction_group_with_the_composer_if_there_is_an_error_it_is(String errStr) { String inferredError = ""; @@ -478,7 +501,6 @@ public void theSimulationShouldReportAFailureAtGroupPathWithMessage(String txnGr throw new Exception("Invalid transaction group index", e); } - // Parse the path ("0,0") into a list of numbers ([0, 0]) String[] path = failAt.split(","); List expectedPath = new ArrayList<>(); for (String pathStr : path) { @@ -489,7 +511,6 @@ public void theSimulationShouldReportAFailureAtGroupPathWithMessage(String txnGr } } - // Retrieve the actual failure message String actualFailureMsg = null; if (base.simulateResponse != null) { actualFailureMsg = base.simulateResponse.body().txnGroups.get(groupIndex).failureMessage; @@ -503,7 +524,6 @@ public void theSimulationShouldReportAFailureAtGroupPathWithMessage(String txnGr throw new Exception("Expected failure message '" + expectedFailureMsg + "', but got: '" + actualFailureMsg + "'"); } - // Retrieve the actual failure path List actualPath = null; if (base.simulateResponse != null) { actualPath = base.simulateResponse.body().txnGroups.get(groupIndex).failedAt; diff --git a/src/test/java/com/algorand/algosdk/integration/Stepdefs.java b/src/test/java/com/algorand/algosdk/integration/Stepdefs.java index 1a64b6853..d2c3ddd8f 100644 --- a/src/test/java/com/algorand/algosdk/integration/Stepdefs.java +++ b/src/test/java/com/algorand/algosdk/integration/Stepdefs.java @@ -54,6 +54,7 @@ import com.algorand.algosdk.v2.client.model.SimulateRequest; import com.algorand.algosdk.v2.client.model.SimulateRequestTransactionGroup; import com.algorand.algosdk.v2.client.model.SimulateResponse; +import com.algorand.algosdk.v2.client.model.SimulateTraceConfig; import com.algorand.algosdk.v2.client.model.TransactionParametersResponse; import com.fasterxml.jackson.core.JsonProcessingException; import io.cucumber.java.en.And; @@ -1249,12 +1250,14 @@ public void iSimulateTheTransaction() throws Exception { @When("I make a new simulate request.") public void iMakeANewSimulateRequest() { - + if (simulateRequest == null) { + simulateRequest = new SimulateRequest(); + } } @Then("I allow {int} more budget on that simulate request.") - public void iAllowMoreBudgetOnThatSimulateRequest(int arg0) { - + public void iAllowMoreBudgetOnThatSimulateRequest(int extraOpcodeBudget) { + simulateRequest.extraOpcodeBudget = Long.parseLong(extraOpcodeBudget + ""); } @Then("I simulate the transaction group with the simulate request.") @@ -1263,7 +1266,7 @@ public void iSimulateTheTransactionGroupWithTheSimulateRequest() { } @Then("I check the simulation result has power packs extra-opcode-budget with extra budget {int}.") - public void iCheckTheSimulationResultHasPowerPacksExtraOpcodeBudgetWithExtraBudget(int arg0) { + public void iCheckTheSimulationResultHasPowerPacksExtraOpcodeBudgetWithExtraBudget(int budget) { } @@ -1274,15 +1277,27 @@ public void iCheckTheSimulationResultHasPowerPacksAllowMoreLogging() { @Then("I allow more logs on that simulate request.") public void iAllowMoreLogsOnThatSimulateRequest() { - if (simulateRequest == null) { - simulateRequest = new SimulateRequest(); - } simulateRequest.allowMoreLogging = true; } @Then("I allow exec trace options {string} on that simulate request.") - public void iAllowExecTraceOptionsOnThatSimulateRequest(String arg0) { - + public void iAllowExecTraceOptionsOnThatSimulateRequest(String stcString) { + SimulateTraceConfig stc = new SimulateTraceConfig(); + String[] stcArray = stcString.split(","); + for (String stcValue : stcArray) { + switch (stcValue) { + case "stack": stc.stackChange = true; + break; + case "scratch": stc.scratchChange = true; + break; + case "state": stc.stateChange = true; + break; + default: + break; + } + } + stc.enable = true; + simulateRequest.execTraceConfig = stc; } @Then("{int}th unit in the {string} trace at txn-groups path {string} should add value {string} to stack, pop {int} values from stack, write value {string} to scratch slot {string}.") @@ -1290,11 +1305,6 @@ public void thUnitInTheTraceAtTxnGroupsPathShouldAddValueToStackPopValuesFromSta } - @And("I add a method call with the transient account, the current application, suggested params, on complete {string}, current transaction signer, current method arguments, boxes {string}.") - public void iAddAMethodCallWithTheTransientAccountTheCurrentApplicationSuggestedParamsOnCompleteCurrentTransactionSignerCurrentMethodArgumentsBoxes(String arg0, String arg1) { - - } - @Then("the current application initial {string} state should be empty.") public void theCurrentApplicationInitialStateShouldBeEmpty(String arg0) {