diff --git a/assets/arc-0059/__test__/arc59.test.ts b/assets/arc-0059/__test__/arc59.test.ts index 576978d54..1853b1c4c 100644 --- a/assets/arc-0059/__test__/arc59.test.ts +++ b/assets/arc-0059/__test__/arc59.test.ts @@ -5,7 +5,11 @@ import algosdk from 'algosdk'; import { Arc59Client } from '../contracts/clients/Arc59Client'; const fixture = algorandFixture(); -algokit.Config.configure({ populateAppCallResources: true }); +algokit.Config.configure({ + populateAppCallResources: true, + // eslint-disable-next-line no-console + logger: { error: () => console.error, debug: () => {}, warn: console.warn, info: () => {}, verbose: () => {} }, +}); /** * Send an asset to a receiver using the ARC59 router @@ -15,7 +19,6 @@ algokit.Config.configure({ populateAppCallResources: true }); * @param sender The address of the sender * @param receiver The address of the receiver * @param algorand The AlgorandClient instance to use to send transactions - * @param sendAlgoForNewAccount Whether to send 201_000 uALGO to the receiver so they can claim the asset with a 0-ALGO balance */ async function arc59SendAsset( appClient: Arc59Client, @@ -210,11 +213,21 @@ describe('Arc59', () => { test('Brand new account getSendAssetInfo', async () => { const res = await appClient.arc59GetSendAssetInfo({ asset: assetOne, receiver: algosdk.generateAccount().addr }); - const itxns = res.return![0]; - const mbr = res.return![1]; + const [ + itxns, + mbr, + routerOptedIn, + receiverOptedIn, + receiverAlgoNeededForClaim, + receiverAlgoNeededForWorstCaseClaim, + ] = res.return!; expect(itxns).toBe(5n); expect(mbr).toBe(228_100n); + expect(routerOptedIn).toBe(true); + expect(receiverOptedIn).toBe(false); + expect(receiverAlgoNeededForClaim).toBe(201_000n); + expect(receiverAlgoNeededForWorstCaseClaim).toBe(201_000n); }); test('Brand new account sendAsset', async () => { @@ -269,4 +282,52 @@ describe('Arc59', () => { expect(receiverAssetInfo.balance).toBe(1n); }); + + test('two claims from 0-ALGO account', async () => { + const { algorand } = fixture; + const receiver = algorand.account.random(); + await arc59SendAsset(appClient, assetOne, alice.addr, receiver.addr, algorand); + await arc59SendAsset(appClient, assetTwo, alice.addr, receiver.addr, algorand); + + await arc59Claim(appClient, assetOne, receiver.addr, algorand); + await arc59Claim(appClient, assetTwo, receiver.addr, algorand); + + const receiverAssetInfoOne = await algorand.account.getAssetInformation(receiver.addr, assetOne); + const receiverAssetInfoTwo = await algorand.account.getAssetInformation(receiver.addr, assetTwo); + + expect(receiverAssetInfoOne.balance).toBe(1n); + expect(receiverAssetInfoTwo.balance).toBe(1n); + }); + + test('claim from abnormal ALGO balance', async () => { + const { algorand } = fixture; + const receiver = algorand.account.random(); + + await algorand.send.payment({ sender: alice.addr, receiver: receiver.addr, amount: algokit.microAlgos(123_456) }); + + await arc59SendAsset(appClient, assetOne, alice.addr, receiver.addr, algorand); + await arc59Claim(appClient, assetOne, receiver.addr, algorand); + + const receiverAssetInfo = await algorand.account.getAssetInformation(receiver.addr, assetOne); + + expect(receiverAssetInfo.balance).toBe(1n); + }); + + test('arc59GetSendAssetInfo with small amount of ALGO in inbox', async () => { + const { algorand } = fixture; + const receiver = algorand.account.random(); + + await arc59SendAsset(appClient, assetOne, alice.addr, receiver.addr, algorand); + await arc59Claim(appClient, assetOne, receiver.addr, algorand); + + const inbox = (await appClient.arc59GetInbox({ receiver: receiver.addr })).return!; + + await algorand.send.payment({ + sender: alice.addr, + receiver: inbox, + amount: algokit.microAlgos(1), + }); + + await appClient.arc59GetSendAssetInfo({ asset: assetTwo, receiver: receiver.addr }); + }); }); diff --git a/assets/arc-0059/contracts/arc59.algo.ts b/assets/arc-0059/contracts/arc59.algo.ts index dfd459436..ed042f3f5 100644 --- a/assets/arc-0059/contracts/arc59.algo.ts +++ b/assets/arc-0059/contracts/arc59.algo.ts @@ -17,6 +17,8 @@ type SendAssetInfo = { receiverOptedIn: boolean; /** The amount of ALGO the receiver would currently need to claim the asset */ receiverAlgoNeededForClaim: uint64; + /** The amount of ALGO the receiver would need if their balance dropped to 0 */ + receiverAlgoNeededForWorstCaseClaim: uint64; }; class ControlledAddress extends Contract { @@ -90,6 +92,7 @@ export class ARC59 extends Contract { routerOptedIn: routerOptedIn, receiverOptedIn: receiverOptedIn, receiverAlgoNeededForClaim: 0, + receiverAlgoNeededForWorstCaseClaim: globals.minBalance + globals.assetOptInMinBalance + globals.minTxnFee, }; if (receiverOptedIn) return info; @@ -98,7 +101,7 @@ export class ARC59 extends Contract { // Determine how much ALGO the receiver needs to claim the asset if (receiver.balance < algoNeededToClaim) { - info.receiverAlgoNeededForClaim += algoNeededToClaim - receiver.balance; + info.receiverAlgoNeededForClaim = algoNeededToClaim - receiver.balance; } // Add mbr and transaction for opting the router in @@ -140,6 +143,21 @@ export class ARC59 extends Contract { } } + // If the inbox has extra ALGO, we need to account for that extra ALGO but also account for how much is used to claim the asset + if (inbox.balance > inbox.minBalance && info.receiverAlgoNeededForClaim !== 0) { + /** + * The total amount of ALGO needed up-front by the account when they claim the asset + * Add 1 txn for the upfront opt-in, 1 txn for the claim, 2 txns for the ALGO claim + */ + const algoConsumedByClaim = globals.assetOptInMinBalance + (info.itxns + 4) * globals.minTxnFee; + let inboxAlgoAvailable = inbox.balance > inbox.minBalance ? inbox.balance - inbox.minBalance : 0; + inboxAlgoAvailable = inboxAlgoAvailable > algoConsumedByClaim ? inboxAlgoAvailable - algoConsumedByClaim : 0; + + if (inboxAlgoAvailable < info.receiverAlgoNeededForClaim) { + info.receiverAlgoNeededForClaim -= inboxAlgoAvailable; + } + } + return info; } @@ -178,13 +196,6 @@ export class ARC59 extends Contract { const inboxExisted = this.inboxes(receiver).exists; const inbox = this.arc59_getOrCreateInbox(receiver); - if (additionalReceiverFunds !== 0) { - sendPayment({ - receiver: inbox, - amount: additionalReceiverFunds, - }); - } - if (!inbox.isOptedInToAsset(axfer.xferAsset)) { let inboxMbrDelta = globals.assetOptInMinBalance; if (!inboxExisted) inboxMbrDelta += globals.minBalance; @@ -213,6 +224,13 @@ export class ARC59 extends Contract { xferAsset: axfer.xferAsset, }); + if (additionalReceiverFunds !== 0) { + sendPayment({ + receiver: inbox, + amount: additionalReceiverFunds, + }); + } + return inbox; } diff --git a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal index 22dca0aa0..8a9281a4f 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal @@ -54,7 +54,7 @@ createApplication: arc59_optRouterIn: proto 1 0 - // contracts/arc59.algo.ts:48 + // contracts/arc59.algo.ts:50 // sendAssetTransfer({ // assetReceiver: this.app.address, // assetAmount: 0, @@ -64,17 +64,17 @@ arc59_optRouterIn: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:49 + // contracts/arc59.algo.ts:51 // assetReceiver: this.app.address global CurrentApplicationAddress itxn_field AssetReceiver - // contracts/arc59.algo.ts:50 + // contracts/arc59.algo.ts:52 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:51 + // contracts/arc59.algo.ts:53 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset @@ -120,7 +120,7 @@ arc59_getOrCreateInbox: byte 0x // *if0_condition - // contracts/arc59.algo.ts:62 + // contracts/arc59.algo.ts:64 // this.inboxes(receiver).exists frame_dig -1 // receiver: Address box_len @@ -129,7 +129,7 @@ arc59_getOrCreateInbox: bz *if0_end // *if0_consequent - // contracts/arc59.algo.ts:62 + // contracts/arc59.algo.ts:64 // return this.inboxes(receiver).value; frame_dig -1 // receiver: Address box_get @@ -137,7 +137,7 @@ arc59_getOrCreateInbox: b *arc59_getOrCreateInbox*return *if0_end: - // contracts/arc59.algo.ts:64 + // contracts/arc59.algo.ts:66 // inbox = sendMethodCall({ // onCompletion: OnCompletion.DeleteApplication, // approvalProgram: ControlledAddress.approvalProgram(), @@ -149,17 +149,17 @@ arc59_getOrCreateInbox: method "new()address" itxn_field ApplicationArgs - // contracts/arc59.algo.ts:65 + // contracts/arc59.algo.ts:67 // onCompletion: OnCompletion.DeleteApplication int 5 // DeleteApplication itxn_field OnCompletion - // contracts/arc59.algo.ts:66 + // contracts/arc59.algo.ts:68 // approvalProgram: ControlledAddress.approvalProgram() byte b64 CiABATEYFIEGCzEZCI0MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAIAEFR98dYgABFCwIkOKAAGxIrIQMQCyIIEAsgGzMgqJgARWHS/qNhoAjgH/0wA= itxn_field ApprovalProgram - // contracts/arc59.algo.ts:67 + // contracts/arc59.algo.ts:69 // clearStateProgram: ControlledAddress.clearProgram() byte b64 Cg== itxn_field ClearStateProgram @@ -177,13 +177,13 @@ arc59_getOrCreateInbox: extract 4 0 frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:70 + // contracts/arc59.algo.ts:72 // this.inboxes(receiver).value = inbox frame_dig -1 // receiver: Address frame_dig 0 // inbox: address box_put - // contracts/arc59.algo.ts:72 + // contracts/arc59.algo.ts:74 // return inbox; frame_dig 0 // inbox: address @@ -192,7 +192,7 @@ arc59_getOrCreateInbox: frame_bury 0 retsub -// arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64) +// arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64) *abi_route_arc59_getSendAssetInfo: // The ABI return prefix byte 0x151f7c75 @@ -209,7 +209,7 @@ arc59_getOrCreateInbox: == assert - // execute arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64) + // execute arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64) callsub arc59_getSendAssetInfo concat log @@ -230,9 +230,9 @@ arc59_getSendAssetInfo: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - dupn 6 + dupn 8 - // contracts/arc59.algo.ts:85 + // contracts/arc59.algo.ts:87 // routerOptedIn = this.app.address.isOptedInToAsset(asset) global CurrentApplicationAddress frame_dig -2 // asset: AssetID @@ -241,7 +241,7 @@ arc59_getSendAssetInfo: pop frame_bury 0 // routerOptedIn: bool - // contracts/arc59.algo.ts:86 + // contracts/arc59.algo.ts:88 // receiverOptedIn = receiver.isOptedInToAsset(asset) frame_dig -1 // receiver: Address frame_dig -2 // asset: AssetID @@ -250,13 +250,14 @@ arc59_getSendAssetInfo: pop frame_bury 1 // receiverOptedIn: bool - // contracts/arc59.algo.ts:87 + // contracts/arc59.algo.ts:89 // info: SendAssetInfo = { // itxns: 1, // mbr: 0, // routerOptedIn: routerOptedIn, // receiverOptedIn: receiverOptedIn, // receiverAlgoNeededForClaim: 0, + // receiverAlgoNeededForWorstCaseClaim: globals.minBalance + globals.assetOptInMinBalance + globals.minTxnFee, // } byte 0x00000000000000010000000000000000 byte 0x00 @@ -269,22 +270,29 @@ arc59_getSendAssetInfo: concat byte 0x0000000000000000 concat + global MinBalance + global AssetOptInMinBalance + + + global MinTxnFee + + + itob + concat frame_bury 2 // info: SendAssetInfo // *if1_condition - // contracts/arc59.algo.ts:95 + // contracts/arc59.algo.ts:98 // receiverOptedIn frame_dig 1 // receiverOptedIn: bool bz *if1_end // *if1_consequent - // contracts/arc59.algo.ts:95 + // contracts/arc59.algo.ts:98 // return info; frame_dig 2 // info: SendAssetInfo b *arc59_getSendAssetInfo*return *if1_end: - // contracts/arc59.algo.ts:97 + // contracts/arc59.algo.ts:100 // algoNeededToClaim = receiver.minBalance + globals.assetOptInMinBalance + globals.minTxnFee frame_dig -1 // receiver: Address acct_params_get AcctMinBalance @@ -296,7 +304,7 @@ arc59_getSendAssetInfo: frame_bury 3 // algoNeededToClaim: uint64 // *if2_condition - // contracts/arc59.algo.ts:100 + // contracts/arc59.algo.ts:103 // receiver.balance < algoNeededToClaim frame_dig -1 // receiver: Address acct_params_get AcctBalance @@ -306,37 +314,31 @@ arc59_getSendAssetInfo: bz *if2_end // *if2_consequent - // contracts/arc59.algo.ts:101 - // info.receiverAlgoNeededForClaim += algoNeededToClaim - receiver.balance + // contracts/arc59.algo.ts:104 + // info.receiverAlgoNeededForClaim = algoNeededToClaim - receiver.balance frame_dig 2 // info: SendAssetInfo store 255 // full array load 255 // full array int 17 - frame_dig 2 // info: SendAssetInfo - store 255 // full array - load 255 // full array - extract 17 8 - btoi frame_dig 3 // algoNeededToClaim: uint64 frame_dig -1 // receiver: Address acct_params_get AcctBalance pop - - + itob replace3 frame_bury 2 // info: SendAssetInfo *if2_end: // *if3_condition - // contracts/arc59.algo.ts:105 + // contracts/arc59.algo.ts:108 // !routerOptedIn frame_dig 0 // routerOptedIn: bool ! bz *if3_end // *if3_consequent - // contracts/arc59.algo.ts:106 + // contracts/arc59.algo.ts:109 // info.mbr += globals.assetOptInMinBalance frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -353,7 +355,7 @@ arc59_getSendAssetInfo: replace3 frame_bury 2 // info: SendAssetInfo - // contracts/arc59.algo.ts:107 + // contracts/arc59.algo.ts:110 // info.itxns += 1 frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -372,7 +374,7 @@ arc59_getSendAssetInfo: *if3_end: // *if4_condition - // contracts/arc59.algo.ts:110 + // contracts/arc59.algo.ts:113 // !this.inboxes(receiver).exists frame_dig -1 // receiver: Address box_len @@ -382,7 +384,7 @@ arc59_getSendAssetInfo: bz *if4_end // *if4_consequent - // contracts/arc59.algo.ts:114 + // contracts/arc59.algo.ts:117 // info.itxns += 4 frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -399,20 +401,20 @@ arc59_getSendAssetInfo: replace3 frame_bury 2 // info: SendAssetInfo - // contracts/arc59.algo.ts:117 + // contracts/arc59.algo.ts:120 // preMBR = globals.currentApplicationAddress.minBalance global CurrentApplicationAddress acct_params_get AcctMinBalance pop frame_bury 4 // preMBR: uint64 - // contracts/arc59.algo.ts:118 + // contracts/arc59.algo.ts:121 // this.inboxes(receiver).value = globals.zeroAddress frame_dig -1 // receiver: Address global ZeroAddress box_put - // contracts/arc59.algo.ts:119 + // contracts/arc59.algo.ts:122 // boxMbrDelta = globals.currentApplicationAddress.minBalance - preMBR global CurrentApplicationAddress acct_params_get AcctMinBalance @@ -421,12 +423,12 @@ arc59_getSendAssetInfo: - frame_bury 5 // boxMbrDelta: uint64 - // contracts/arc59.algo.ts:120 + // contracts/arc59.algo.ts:123 // this.inboxes(receiver).delete() frame_dig -1 // receiver: Address box_del - // contracts/arc59.algo.ts:123 + // contracts/arc59.algo.ts:126 // info.mbr += boxMbrDelta + globals.minBalance + globals.assetOptInMinBalance frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -447,13 +449,13 @@ arc59_getSendAssetInfo: replace3 frame_bury 2 // info: SendAssetInfo - // contracts/arc59.algo.ts:125 + // contracts/arc59.algo.ts:128 // return info; frame_dig 2 // info: SendAssetInfo b *arc59_getSendAssetInfo*return *if4_end: - // contracts/arc59.algo.ts:128 + // contracts/arc59.algo.ts:131 // inbox = this.inboxes(receiver).value frame_dig -1 // receiver: Address box_get @@ -461,7 +463,7 @@ arc59_getSendAssetInfo: frame_bury 6 // inbox: address // *if5_condition - // contracts/arc59.algo.ts:130 + // contracts/arc59.algo.ts:133 // !inbox.isOptedInToAsset(asset) frame_dig 6 // inbox: address frame_dig -2 // asset: AssetID @@ -472,7 +474,7 @@ arc59_getSendAssetInfo: bz *if5_end // *if5_consequent - // contracts/arc59.algo.ts:132 + // contracts/arc59.algo.ts:135 // info.itxns += 1 frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -490,7 +492,7 @@ arc59_getSendAssetInfo: frame_bury 2 // info: SendAssetInfo // *if6_condition - // contracts/arc59.algo.ts:134 + // contracts/arc59.algo.ts:137 // !(inbox.balance >= inbox.minBalance + globals.assetOptInMinBalance) frame_dig 6 // inbox: address acct_params_get AcctBalance @@ -505,7 +507,7 @@ arc59_getSendAssetInfo: bz *if6_end // *if6_consequent - // contracts/arc59.algo.ts:136 + // contracts/arc59.algo.ts:139 // info.itxns += 1 frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -522,7 +524,7 @@ arc59_getSendAssetInfo: replace3 frame_bury 2 // info: SendAssetInfo - // contracts/arc59.algo.ts:139 + // contracts/arc59.algo.ts:142 // info.mbr += globals.assetOptInMinBalance frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -542,7 +544,122 @@ arc59_getSendAssetInfo: *if6_end: *if5_end: - // contracts/arc59.algo.ts:143 + // *if7_condition + // contracts/arc59.algo.ts:147 + // inbox.balance > inbox.minBalance && info.receiverAlgoNeededForClaim !== 0 + frame_dig 6 // inbox: address + acct_params_get AcctBalance + pop + frame_dig 6 // inbox: address + acct_params_get AcctMinBalance + pop + > + dup + bz *skip_and0 + frame_dig 2 // info: SendAssetInfo + store 255 // full array + load 255 // full array + extract 17 8 + btoi + int 0 + != + && + +*skip_and0: + bz *if7_end + + // *if7_consequent + // contracts/arc59.algo.ts:152 + // algoConsumedByClaim = globals.assetOptInMinBalance + (info.itxns + 4) * globals.minTxnFee + global AssetOptInMinBalance + frame_dig 2 // info: SendAssetInfo + store 255 // full array + load 255 // full array + extract 0 8 + btoi + int 4 + + + global MinTxnFee + * + + + frame_bury 7 // algoConsumedByClaim: uint64 + + // contracts/arc59.algo.ts:153 + // inboxAlgoAvailable = inbox.balance > inbox.minBalance ? inbox.balance - inbox.minBalance : 0 + frame_dig 6 // inbox: address + acct_params_get AcctBalance + pop + frame_dig 6 // inbox: address + acct_params_get AcctMinBalance + pop + > + bz *ternary1_false + frame_dig 6 // inbox: address + acct_params_get AcctBalance + pop + frame_dig 6 // inbox: address + acct_params_get AcctMinBalance + pop + - + b *ternary1_end + +*ternary1_false: + int 0 + +*ternary1_end: + frame_bury 8 // inboxAlgoAvailable: uint64 + + // contracts/arc59.algo.ts:154 + // inboxAlgoAvailable = inboxAlgoAvailable > algoConsumedByClaim ? inboxAlgoAvailable - algoConsumedByClaim : 0 + frame_dig 8 // inboxAlgoAvailable: uint64 + frame_dig 7 // algoConsumedByClaim: uint64 + > + bz *ternary2_false + frame_dig 8 // inboxAlgoAvailable: uint64 + frame_dig 7 // algoConsumedByClaim: uint64 + - + b *ternary2_end + +*ternary2_false: + int 0 + +*ternary2_end: + frame_bury 8 // inboxAlgoAvailable: uint64 + + // *if8_condition + // contracts/arc59.algo.ts:156 + // inboxAlgoAvailable < info.receiverAlgoNeededForClaim + frame_dig 8 // inboxAlgoAvailable: uint64 + frame_dig 2 // info: SendAssetInfo + store 255 // full array + load 255 // full array + extract 17 8 + btoi + < + bz *if8_end + + // *if8_consequent + // contracts/arc59.algo.ts:157 + // info.receiverAlgoNeededForClaim -= inboxAlgoAvailable + frame_dig 2 // info: SendAssetInfo + store 255 // full array + load 255 // full array + int 17 + frame_dig 2 // info: SendAssetInfo + store 255 // full array + load 255 // full array + extract 17 8 + btoi + frame_dig 8 // inboxAlgoAvailable: uint64 + - + itob + replace3 + frame_bury 2 // info: SendAssetInfo + +*if8_end: + +*if7_end: + // contracts/arc59.algo.ts:161 // return info; frame_dig 2 // info: SendAssetInfo @@ -551,7 +668,7 @@ arc59_getSendAssetInfo: frame_bury 0 // pop all local variables from the stack - popn 6 + popn 8 retsub // arc59_sendAsset(axfer,address,uint64)address @@ -604,7 +721,7 @@ arc59_sendAsset: byte 0x dupn 2 - // contracts/arc59.algo.ts:156 + // contracts/arc59.algo.ts:174 // verifyAssetTransferTxn(axfer, { // assetReceiver: this.app.address, // }) @@ -615,8 +732,8 @@ arc59_sendAsset: == assert - // *if7_condition - // contracts/arc59.algo.ts:161 + // *if9_condition + // contracts/arc59.algo.ts:179 // receiver.isOptedInToAsset(axfer.xferAsset) frame_dig -2 // receiver: Address frame_dig -1 // axfer: AssetTransferTxn @@ -624,10 +741,10 @@ arc59_sendAsset: asset_holding_get AssetBalance swap pop - bz *if7_end + bz *if9_end - // *if7_consequent - // contracts/arc59.algo.ts:162 + // *if9_consequent + // contracts/arc59.algo.ts:180 // sendAssetTransfer({ // assetReceiver: receiver, // assetAmount: axfer.assetAmount, @@ -637,18 +754,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:163 + // contracts/arc59.algo.ts:181 // assetReceiver: receiver frame_dig -2 // receiver: Address itxn_field AssetReceiver - // contracts/arc59.algo.ts:164 + // contracts/arc59.algo.ts:182 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:165 + // contracts/arc59.algo.ts:183 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -661,16 +778,16 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // *if8_condition - // contracts/arc59.algo.ts:168 + // *if10_condition + // contracts/arc59.algo.ts:186 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 != - bz *if8_end + bz *if10_end - // *if8_consequent - // contracts/arc59.algo.ts:169 + // *if10_consequent + // contracts/arc59.algo.ts:187 // sendPayment({ // receiver: receiver, // amount: additionalReceiverFunds, @@ -679,12 +796,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:170 + // contracts/arc59.algo.ts:188 // receiver: receiver frame_dig -2 // receiver: Address itxn_field Receiver - // contracts/arc59.algo.ts:171 + // contracts/arc59.algo.ts:189 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -696,14 +813,14 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if8_end: - // contracts/arc59.algo.ts:175 +*if10_end: + // contracts/arc59.algo.ts:193 // return receiver; frame_dig -2 // receiver: Address b *arc59_sendAsset*return -*if7_end: - // contracts/arc59.algo.ts:178 +*if9_end: + // contracts/arc59.algo.ts:196 // inboxExisted = this.inboxes(receiver).exists frame_dig -2 // receiver: Address box_len @@ -711,50 +828,14 @@ arc59_sendAsset: pop frame_bury 0 // inboxExisted: bool - // contracts/arc59.algo.ts:179 + // contracts/arc59.algo.ts:197 // inbox = this.arc59_getOrCreateInbox(receiver) frame_dig -2 // receiver: Address callsub arc59_getOrCreateInbox frame_bury 1 // inbox: address - // *if9_condition - // contracts/arc59.algo.ts:181 - // additionalReceiverFunds !== 0 - frame_dig -3 // additionalReceiverFunds: uint64 - int 0 - != - bz *if9_end - - // *if9_consequent - // contracts/arc59.algo.ts:182 - // sendPayment({ - // receiver: inbox, - // amount: additionalReceiverFunds, - // }) - itxn_begin - int pay - itxn_field TypeEnum - - // contracts/arc59.algo.ts:183 - // receiver: inbox - frame_dig 1 // inbox: address - itxn_field Receiver - - // contracts/arc59.algo.ts:184 - // amount: additionalReceiverFunds - frame_dig -3 // additionalReceiverFunds: uint64 - itxn_field Amount - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - -*if9_end: - // *if10_condition - // contracts/arc59.algo.ts:188 + // *if11_condition + // contracts/arc59.algo.ts:199 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -763,32 +844,32 @@ arc59_sendAsset: swap pop ! - bz *if10_end + bz *if11_end - // *if10_consequent - // contracts/arc59.algo.ts:189 + // *if11_consequent + // contracts/arc59.algo.ts:200 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 - // *if11_condition - // contracts/arc59.algo.ts:190 + // *if12_condition + // contracts/arc59.algo.ts:201 // !inboxExisted frame_dig 0 // inboxExisted: bool ! - bz *if11_end + bz *if12_end - // *if11_consequent - // contracts/arc59.algo.ts:190 + // *if12_consequent + // contracts/arc59.algo.ts:201 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance + frame_bury 2 // inboxMbrDelta: uint64 -*if11_end: - // *if12_condition - // contracts/arc59.algo.ts:193 +*if12_end: + // *if13_condition + // contracts/arc59.algo.ts:204 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -799,10 +880,10 @@ arc59_sendAsset: frame_dig 2 // inboxMbrDelta: uint64 + < - bz *if12_end + bz *if13_end - // *if12_consequent - // contracts/arc59.algo.ts:194 + // *if13_consequent + // contracts/arc59.algo.ts:205 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -811,12 +892,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:195 + // contracts/arc59.algo.ts:206 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:196 + // contracts/arc59.algo.ts:207 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -828,8 +909,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if12_end: - // contracts/arc59.algo.ts:201 +*if13_end: + // contracts/arc59.algo.ts:212 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -840,22 +921,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:202 + // contracts/arc59.algo.ts:213 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:203 + // contracts/arc59.algo.ts:214 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:204 + // contracts/arc59.algo.ts:215 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:205 + // contracts/arc59.algo.ts:216 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -868,8 +949,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if10_end: - // contracts/arc59.algo.ts:210 +*if11_end: + // contracts/arc59.algo.ts:221 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -879,18 +960,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:211 + // contracts/arc59.algo.ts:222 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:212 + // contracts/arc59.algo.ts:223 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:213 + // contracts/arc59.algo.ts:224 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -903,7 +984,43 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:216 + // *if14_condition + // contracts/arc59.algo.ts:227 + // additionalReceiverFunds !== 0 + frame_dig -3 // additionalReceiverFunds: uint64 + int 0 + != + bz *if14_end + + // *if14_consequent + // contracts/arc59.algo.ts:228 + // sendPayment({ + // receiver: inbox, + // amount: additionalReceiverFunds, + // }) + itxn_begin + int pay + itxn_field TypeEnum + + // contracts/arc59.algo.ts:229 + // receiver: inbox + frame_dig 1 // inbox: address + itxn_field Receiver + + // contracts/arc59.algo.ts:230 + // amount: additionalReceiverFunds + frame_dig -3 // additionalReceiverFunds: uint64 + itxn_field Amount + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + +*if14_end: + // contracts/arc59.algo.ts:234 // return inbox; frame_dig 1 // inbox: address @@ -937,14 +1054,14 @@ arc59_claim: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:225 + // contracts/arc59.algo.ts:243 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:227 + // contracts/arc59.algo.ts:245 // sendAssetTransfer({ // sender: inbox, // assetReceiver: this.txn.sender, @@ -956,17 +1073,17 @@ arc59_claim: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:228 + // contracts/arc59.algo.ts:246 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:247 // assetReceiver: this.txn.sender txn Sender itxn_field AssetReceiver - // contracts/arc59.algo.ts:230 + // contracts/arc59.algo.ts:248 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -974,12 +1091,12 @@ arc59_claim: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:231 + // contracts/arc59.algo.ts:249 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:232 + // contracts/arc59.algo.ts:250 // assetCloseTo: this.txn.sender txn Sender itxn_field AssetCloseTo @@ -991,7 +1108,7 @@ arc59_claim: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:235 + // contracts/arc59.algo.ts:253 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1001,17 +1118,17 @@ arc59_claim: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:236 + // contracts/arc59.algo.ts:254 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:237 + // contracts/arc59.algo.ts:255 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:238 + // contracts/arc59.algo.ts:256 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1053,14 +1170,14 @@ arc59_reject: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:249 + // contracts/arc59.algo.ts:267 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:251 + // contracts/arc59.algo.ts:269 // sendAssetTransfer({ // sender: inbox, // assetReceiver: asa.creator, @@ -1072,19 +1189,19 @@ arc59_reject: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:252 + // contracts/arc59.algo.ts:270 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:253 + // contracts/arc59.algo.ts:271 // assetReceiver: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator pop itxn_field AssetReceiver - // contracts/arc59.algo.ts:254 + // contracts/arc59.algo.ts:272 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1092,12 +1209,12 @@ arc59_reject: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:255 + // contracts/arc59.algo.ts:273 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:256 + // contracts/arc59.algo.ts:274 // assetCloseTo: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator @@ -1111,7 +1228,7 @@ arc59_reject: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:259 + // contracts/arc59.algo.ts:277 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1121,17 +1238,17 @@ arc59_reject: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:260 + // contracts/arc59.algo.ts:278 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:261 + // contracts/arc59.algo.ts:279 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:262 + // contracts/arc59.algo.ts:280 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1180,22 +1297,22 @@ arc59_reject: arc59_getInbox: proto 1 1 - // contracts/arc59.algo.ts:274 + // contracts/arc59.algo.ts:292 // return this.inboxes(receiver).exists ? this.inboxes(receiver).value : globals.zeroAddress; frame_dig -1 // receiver: Address box_len swap pop - bz *ternary0_false + bz *ternary3_false frame_dig -1 // receiver: Address box_get assert - b *ternary0_end + b *ternary3_end -*ternary0_false: +*ternary3_false: global ZeroAddress -*ternary0_end: +*ternary3_end: retsub // arc59_claimAlgo()void @@ -1214,14 +1331,14 @@ arc59_claimAlgo: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:279 + // contracts/arc59.algo.ts:297 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:281 + // contracts/arc59.algo.ts:299 // assert(inbox.balance - inbox.minBalance !== 0) frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1234,7 +1351,7 @@ arc59_claimAlgo: != assert - // contracts/arc59.algo.ts:283 + // contracts/arc59.algo.ts:301 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1244,17 +1361,17 @@ arc59_claimAlgo: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:284 + // contracts/arc59.algo.ts:302 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:285 + // contracts/arc59.algo.ts:303 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:286 + // contracts/arc59.algo.ts:304 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1282,7 +1399,7 @@ arc59_claimAlgo: *call_NoOp: method "arc59_optRouterIn(uint64)void" method "arc59_getOrCreateInbox(address)address" - method "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)" + method "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)" method "arc59_sendAsset(axfer,address,uint64)address" method "arc59_claim(uint64)void" method "arc59_reject(uint64)void" diff --git a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json index f6f9836f2..711807630 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json @@ -15,7 +15,7 @@ "no_op": "CALL" } }, - "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)": { + "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)": { "call_config": { "no_op": "CALL" } @@ -74,7 +74,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NDkKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjIKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY1CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCiphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg1CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODYKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NwoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NwoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTAxCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDUKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA2CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDcKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNAoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE4CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTkKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzAKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzIKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM0CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNgoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQzCgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDYKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTYxCgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTYyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MwoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY0CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjUKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2OAoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzAKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcxCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWY4X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NQoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OAoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc5CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmOV9lbmQ6CgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg5CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTAKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkwCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTMKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTYKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAzCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTMKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMgoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUzCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NQoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjYxCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjYyCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODEKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxMl9lbmQ6CgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTNfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE1CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTYKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjMKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNAoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { @@ -133,7 +133,7 @@ } ], "returns": { - "type": "(uint64,uint64,bool,bool,uint64)", + "type": "(uint64,uint64,bool,bool,uint64,uint64)", "desc": "Returns the following information for sending an asset:The number of itxns required, the MBR required, whether the router is opted in, whether the receiver is opted in,and how much ALGO the receiver would need to claim the asset" } }, diff --git a/assets/arc-0059/contracts/artifacts/ARC59.arc4.json b/assets/arc-0059/contracts/artifacts/ARC59.arc4.json index c24048270..ae3e79f28 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.arc4.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.arc4.json @@ -54,7 +54,7 @@ } ], "returns": { - "type": "(uint64,uint64,bool,bool,uint64)", + "type": "(uint64,uint64,bool,bool,uint64,uint64)", "desc": "Returns the following information for sending an asset:The number of itxns required, the MBR required, whether the router is opted in, whether the receiver is opted in,and how much ALGO the receiver would need to claim the asset" } }, diff --git a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json index 66c6a1100..31a24daeb 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json @@ -1,7 +1,7 @@ [ { "teal": 1, - "source": 33, + "source": 35, "pc": [ 0, 1, @@ -19,59 +19,59 @@ 13, 14, 15, - 16 + 16, + 17 ] }, { "teal": 13, - "source": 33, + "source": 35, "pc": [ - 17, - 18 + 18, + 19 ] }, { "teal": 14, - "source": 33, + "source": 35, "pc": [ - 19 + 20 ] }, { "teal": 15, - "source": 33, + "source": 35, "pc": [ - 20, - 21 + 21, + 22 ] }, { "teal": 16, - "source": 33, + "source": 35, "pc": [ - 22 + 23 ] }, { "teal": 17, - "source": 33, + "source": 35, "pc": [ - 23, - 24 + 24, + 25 ] }, { "teal": 18, - "source": 33, + "source": 35, "pc": [ - 25 + 26 ] }, { "teal": 19, - "source": 33, + "source": 35, "pc": [ - 26, 27, 28, 29, @@ -96,438 +96,438 @@ 48, 49, 50, - 51 + 51, + 52 ] }, { "teal": 22, - "source": 33, + "source": 35, "pc": [ - 52 + 53 ] }, { "teal": 27, - "source": 40, + "source": 42, "pc": [ - 53, 54, - 55 + 55, + 56 ] }, { "teal": 28, - "source": 40, + "source": 42, "pc": [ - 56 + 57 ] }, { "teal": 29, - "source": 40, + "source": 42, "pc": [ - 57 + 58 ] }, { "teal": 35, - "source": 40, + "source": 42, "pc": [ - 58, 59, - 60 + 60, + 61 ] }, { "teal": 36, - "source": 40, + "source": 42, "pc": [ - 61 + 62 ] }, { "teal": 41, - "source": 47, + "source": 49, "pc": [ - 62, 63, - 64 + 64, + 65 ] }, { "teal": 42, - "source": 47, + "source": 49, "pc": [ - 65 + 66 ] }, { "teal": 45, - "source": 47, + "source": 49, "pc": [ - 66, 67, - 68 + 68, + 69 ] }, { "teal": 46, - "source": 47, + "source": 49, "pc": [ - 69 + 70 ] }, { "teal": 47, - "source": 47, + "source": 49, "pc": [ - 70 + 71 ] }, { "teal": 55, - "source": 47, + "source": 49, "pc": [ - 71, 72, - 73 + 73, + 74 ] }, { "teal": 63, - "source": 48, + "source": 50, "pc": [ - 74 + 75 ] }, { "teal": 64, - "source": 48, + "source": 50, "pc": [ - 75 + 76 ] }, { "teal": 65, - "source": 48, + "source": 50, "pc": [ - 76, - 77 + 77, + 78 ] }, { "teal": 69, - "source": 49, + "source": 51, "pc": [ - 78, - 79 + 79, + 80 ] }, { "teal": 70, - "source": 49, + "source": 51, "pc": [ - 80, - 81 + 81, + 82 ] }, { "teal": 74, - "source": 50, + "source": 52, "pc": [ - 82 + 83 ] }, { "teal": 75, - "source": 50, + "source": 52, "pc": [ - 83, - 84 + 84, + 85 ] }, { "teal": 79, - "source": 51, + "source": 53, "pc": [ - 85, - 86 + 86, + 87 ] }, { "teal": 80, - "source": 51, + "source": 53, "pc": [ - 87, - 88 + 88, + 89 ] }, { "teal": 83, - "source": 48, + "source": 50, "pc": [ - 89 + 90 ] }, { "teal": 84, - "source": 48, + "source": 50, "pc": [ - 90, - 91 + 91, + 92 ] }, { "teal": 87, - "source": 48, + "source": 50, "pc": [ - 92 + 93 ] }, { "teal": 88, - "source": 47, + "source": 49, "pc": [ - 93 + 94 ] }, { "teal": 93, - "source": 61, + "source": 63, "pc": [ - 94 + 95 ] }, { "teal": 96, - "source": 61, + "source": 63, "pc": [ - 95, 96, - 97 + 97, + 98 ] }, { "teal": 97, - "source": 61, + "source": 63, "pc": [ - 98 + 99 ] }, { "teal": 98, - "source": 61, + "source": 63, "pc": [ - 99 + 100 ] }, { "teal": 99, - "source": 61, + "source": 63, "pc": [ - 100 + 101 ] }, { "teal": 100, - "source": 61, + "source": 63, "pc": [ - 101 + 102 ] }, { "teal": 101, - "source": 61, + "source": 63, "pc": [ - 102 + 103 ] }, { "teal": 104, - "source": 61, + "source": 63, "pc": [ - 103, 104, - 105 + 105, + 106 ] }, { "teal": 105, - "source": 61, + "source": 63, "pc": [ - 106 + 107 ] }, { "teal": 106, - "source": 61, + "source": 63, "pc": [ - 107 + 108 ] }, { "teal": 107, - "source": 61, + "source": 63, "pc": [ - 108 + 109 ] }, { "teal": 108, - "source": 61, + "source": 63, "pc": [ - 109 + 110 ] }, { "teal": 117, - "source": 61, + "source": 63, "pc": [ - 110, 111, - 112 + 112, + 113 ] }, { "teal": 120, - "source": 61, + "source": 63, "pc": [ - 113 + 114 ] }, { "teal": 125, - "source": 62, + "source": 64, "pc": [ - 114, - 115 + 115, + 116 ] }, { "teal": 126, - "source": 62, + "source": 64, "pc": [ - 116 + 117 ] }, { "teal": 127, - "source": 62, + "source": 64, "pc": [ - 117 + 118 ] }, { "teal": 128, - "source": 62, + "source": 64, "pc": [ - 118 + 119 ] }, { "teal": 129, - "source": 62, + "source": 64, "pc": [ - 119, 120, - 121 + 121, + 122 ] }, { "teal": 134, - "source": 62, + "source": 64, "pc": [ - 122, - 123 + 123, + 124 ] }, { "teal": 135, - "source": 62, + "source": 64, "pc": [ - 124 + 125 ] }, { "teal": 136, - "source": 62, + "source": 64, "pc": [ - 125 + 126 ] }, { "teal": 137, - "source": 62, + "source": 64, "pc": [ - 126, 127, - 128 + 128, + 129 ] }, { "teal": 146, - "source": 64, + "source": 66, "pc": [ - 129 + 130 ] }, { "teal": 147, - "source": 64, + "source": 66, "pc": [ - 130, - 131 + 131, + 132 ] }, { "teal": 148, - "source": 64, + "source": 66, "pc": [ - 132, - 133 + 133, + 134 ] }, { "teal": 149, - "source": 64, + "source": 66, "pc": [ - 134, 135, 136, 137, 138, - 139 + 139, + 140 ] }, { "teal": 150, - "source": 64, + "source": 66, "pc": [ - 140, - 141 + 141, + 142 ] }, { "teal": 154, - "source": 65, + "source": 67, "pc": [ - 142, - 143 + 143, + 144 ] }, { "teal": 155, - "source": 65, + "source": 67, "pc": [ - 144, - 145 + 145, + 146 ] }, { "teal": 159, - "source": 66, + "source": 68, "pc": [ - 146, 147, 148, 149, @@ -614,374 +614,374 @@ 230, 231, 232, - 233 + 233, + 234 ] }, { "teal": 160, - "source": 66, + "source": 68, "pc": [ - 234, - 235 + 235, + 236 ] }, { "teal": 164, - "source": 67, + "source": 69, "pc": [ - 236, 237, - 238 + 238, + 239 ] }, { "teal": 165, - "source": 67, + "source": 69, "pc": [ - 239, - 240 + 240, + 241 ] }, { "teal": 168, - "source": 64, + "source": 66, "pc": [ - 241 + 242 ] }, { "teal": 169, - "source": 64, + "source": 66, "pc": [ - 242, - 243 + 243, + 244 ] }, { "teal": 172, - "source": 64, + "source": 66, "pc": [ - 244 + 245 ] }, { "teal": 173, - "source": 64, + "source": 66, "pc": [ - 245, - 246 + 246, + 247 ] }, { "teal": 174, - "source": 64, + "source": 66, "pc": [ - 247 + 248 ] }, { "teal": 175, - "source": 64, + "source": 66, "pc": [ - 248 + 249 ] }, { "teal": 176, - "source": 64, + "source": 66, "pc": [ - 249, - 250 + 250, + 251 ] }, { "teal": 177, - "source": 64, + "source": 66, "pc": [ - 251, 252, - 253 + 253, + 254 ] }, { "teal": 178, - "source": 64, + "source": 66, "pc": [ - 254, - 255 + 255, + 256 ] }, { "teal": 182, - "source": 70, + "source": 72, "pc": [ - 256, - 257 + 257, + 258 ] }, { "teal": 183, - "source": 70, + "source": 72, "pc": [ - 258, - 259 + 259, + 260 ] }, { "teal": 184, - "source": 70, + "source": 72, "pc": [ - 260 + 261 ] }, { "teal": 188, - "source": 72, + "source": 74, "pc": [ - 261, - 262 + 262, + 263 ] }, { "teal": 192, - "source": 61, + "source": 63, "pc": [ - 263, - 264 + 264, + 265 ] }, { "teal": 193, - "source": 61, + "source": 63, "pc": [ - 265 + 266 ] }, { "teal": 198, - "source": 84, + "source": 86, "pc": [ - 266 + 267 ] }, { "teal": 201, - "source": 84, + "source": 86, "pc": [ - 267, 268, - 269 + 269, + 270 ] }, { "teal": 202, - "source": 84, + "source": 86, "pc": [ - 270 + 271 ] }, { "teal": 205, - "source": 84, + "source": 86, "pc": [ - 271, 272, - 273 + 273, + 274 ] }, { "teal": 206, - "source": 84, + "source": 86, "pc": [ - 274 + 275 ] }, { "teal": 207, - "source": 84, + "source": 86, "pc": [ - 275 + 276 ] }, { "teal": 208, - "source": 84, + "source": 86, "pc": [ - 276 + 277 ] }, { "teal": 209, - "source": 84, + "source": 86, "pc": [ - 277 + 278 ] }, { "teal": 210, - "source": 84, + "source": 86, "pc": [ - 278 + 279 ] }, { "teal": 213, - "source": 84, + "source": 86, "pc": [ - 279, 280, - 281 + 281, + 282 ] }, { "teal": 214, - "source": 84, + "source": 86, "pc": [ - 282 + 283 ] }, { "teal": 215, - "source": 84, + "source": 86, "pc": [ - 283 + 284 ] }, { "teal": 216, - "source": 84, + "source": 86, "pc": [ - 284 + 285 ] }, { "teal": 217, - "source": 84, + "source": 86, "pc": [ - 285 + 286 ] }, { "teal": 229, - "source": 84, + "source": 86, "pc": [ - 286, 287, - 288 + 288, + 289 ] }, { "teal": 232, - "source": 84, + "source": 86, "pc": [ - 289 + 290 ] }, { "teal": 233, - "source": 84, + "source": 86, "pc": [ - 290, - 291 + 291, + 292 ] }, { "teal": 237, - "source": 85, + "source": 87, "pc": [ - 292, - 293 + 293, + 294 ] }, { "teal": 238, - "source": 85, + "source": 87, "pc": [ - 294, - 295 + 295, + 296 ] }, { "teal": 239, - "source": 85, + "source": 87, "pc": [ - 296, - 297 + 297, + 298 ] }, { "teal": 240, - "source": 85, + "source": 87, "pc": [ - 298 + 299 ] }, { "teal": 241, - "source": 85, + "source": 87, "pc": [ - 299 + 300 ] }, { "teal": 242, - "source": 85, + "source": 87, "pc": [ - 300, - 301 + 301, + 302 ] }, { "teal": 246, - "source": 86, + "source": 88, "pc": [ - 302, - 303 + 303, + 304 ] }, { "teal": 247, - "source": 86, + "source": 88, "pc": [ - 304, - 305 + 305, + 306 ] }, { "teal": 248, - "source": 86, + "source": 88, "pc": [ - 306, - 307 + 307, + 308 ] }, { "teal": 249, - "source": 86, + "source": 88, "pc": [ - 308 + 309 ] }, { "teal": 250, - "source": 86, + "source": 88, "pc": [ - 309 + 310 ] }, { "teal": 251, - "source": 86, + "source": 88, "pc": [ - 310, - 311 + 311, + 312 ] }, { - "teal": 261, - "source": 89, + "teal": 262, + "source": 91, "pc": [ - 312, 313, 314, 315, @@ -998,74 +998,74 @@ 326, 327, 328, - 329 - ] - }, - { - "teal": 262, - "source": 90, - "pc": [ - 330, - 331, - 332 + 329, + 330 ] }, { "teal": 263, - "source": 90, + "source": 92, "pc": [ + 331, + 332, 333 ] }, { "teal": 264, - "source": 90, + "source": 92, "pc": [ - 334, - 335 + 334 ] }, { "teal": 265, - "source": 90, + "source": 92, "pc": [ + 335, 336 ] }, { "teal": 266, - "source": 91, + "source": 92, "pc": [ 337 ] }, { "teal": 267, - "source": 91, + "source": 93, "pc": [ - 338, - 339 + 338 ] }, { "teal": 268, - "source": 91, + "source": 93, "pc": [ + 339, 340 ] }, { "teal": 269, - "source": 92, + "source": 93, "pc": [ 341 ] }, { "teal": 270, - "source": 92, + "source": 94, + "pc": [ + 342 + ] + }, + { + "teal": 271, + "source": 94, "pc": [ - 342, 343, 344, 345, @@ -1074,121 +1074,121 @@ 348, 349, 350, - 351 + 351, + 352 ] }, { - "teal": 271, - "source": 92, + "teal": 272, + "source": 94, "pc": [ - 352 + 353 ] }, { - "teal": 272, - "source": 87, + "teal": 273, + "source": 95, "pc": [ - 353, - 354 + 354, + 355 ] }, { - "teal": 277, + "teal": 274, "source": 95, "pc": [ - 355, - 356 + 356, + 357 ] }, { - "teal": 278, + "teal": 275, "source": 95, "pc": [ - 357, - 358, - 359 + 358 ] }, { - "teal": 283, + "teal": 276, "source": 95, "pc": [ - 360, - 361 + 359, + 360 ] }, { - "teal": 284, + "teal": 277, "source": 95, "pc": [ - 362, - 363, - 364 + 361 ] }, { - "teal": 289, - "source": 97, + "teal": 278, + "source": 95, "pc": [ - 365, - 366 + 362 ] }, { - "teal": 290, - "source": 97, + "teal": 279, + "source": 95, "pc": [ - 367, - 368 + 363 ] }, { - "teal": 291, - "source": 97, + "teal": 280, + "source": 89, "pc": [ - 369 + 364, + 365 ] }, { - "teal": 292, - "source": 97, + "teal": 285, + "source": 98, "pc": [ - 370, - 371 + 366, + 367 ] }, { - "teal": 293, - "source": 97, + "teal": 286, + "source": 98, "pc": [ - 372 + 368, + 369, + 370 ] }, { - "teal": 294, - "source": 97, + "teal": 291, + "source": 98, "pc": [ - 373, - 374 + 371, + 372 ] }, { - "teal": 295, - "source": 97, + "teal": 292, + "source": 98, "pc": [ + 373, + 374, 375 ] }, { - "teal": 296, - "source": 97, + "teal": 297, + "source": 100, "pc": [ 376, 377 ] }, { - "teal": 301, + "teal": 298, "source": 100, "pc": [ 378, @@ -1196,201 +1196,207 @@ ] }, { - "teal": 302, + "teal": 299, "source": 100, "pc": [ - 380, - 381 + 380 ] }, { - "teal": 303, + "teal": 300, "source": 100, "pc": [ + 381, 382 ] }, { - "teal": 304, + "teal": 301, "source": 100, "pc": [ - 383, - 384 + 383 ] }, { - "teal": 305, + "teal": 302, "source": 100, "pc": [ + 384, 385 ] }, { - "teal": 306, + "teal": 303, + "source": 100, + "pc": [ + 386 + ] + }, + { + "teal": 304, "source": 100, "pc": [ - 386, 387, 388 ] }, { - "teal": 311, - "source": 101, + "teal": 309, + "source": 103, "pc": [ 389, 390 ] }, { - "teal": 312, - "source": 101, + "teal": 310, + "source": 103, "pc": [ 391, 392 ] }, { - "teal": 313, - "source": 101, + "teal": 311, + "source": 103, "pc": [ - 393, - 394 + 393 ] }, { - "teal": 314, - "source": 101, + "teal": 312, + "source": 103, "pc": [ - 395, - 396 + 394, + 395 ] }, { - "teal": 315, - "source": 101, + "teal": 313, + "source": 103, "pc": [ - 397, - 398 + 396 ] }, { - "teal": 316, - "source": 101, + "teal": 314, + "source": 103, "pc": [ - 399, - 400 + 397, + 398, + 399 ] }, { - "teal": 317, - "source": 101, + "teal": 319, + "source": 104, "pc": [ - 401, - 402 + 400, + 401 ] }, { - "teal": 318, - "source": 101, + "teal": 320, + "source": 104, "pc": [ - 403, - 404, - 405 + 402, + 403 ] }, { - "teal": 319, - "source": 101, + "teal": 321, + "source": 104, "pc": [ - 406 + 404, + 405 ] }, { - "teal": 320, - "source": 101, + "teal": 322, + "source": 104, "pc": [ - 407, - 408 + 406, + 407 ] }, { - "teal": 321, - "source": 101, + "teal": 323, + "source": 104, "pc": [ - 409, - 410 + 408, + 409 ] }, { - "teal": 322, - "source": 101, + "teal": 324, + "source": 104, "pc": [ - 411, - 412 + 410, + 411 ] }, { - "teal": 323, - "source": 101, + "teal": 325, + "source": 104, "pc": [ + 412, 413 ] }, { - "teal": 324, - "source": 101, + "teal": 326, + "source": 104, "pc": [ 414 ] }, { - "teal": 325, - "source": 101, + "teal": 327, + "source": 104, "pc": [ 415 ] }, { - "teal": 326, - "source": 101, + "teal": 328, + "source": 104, "pc": [ 416 ] }, { - "teal": 327, - "source": 101, + "teal": 329, + "source": 104, "pc": [ 417 ] }, { - "teal": 328, - "source": 101, + "teal": 330, + "source": 104, "pc": [ 418, 419 ] }, { - "teal": 334, - "source": 105, + "teal": 336, + "source": 108, "pc": [ 420, 421 ] }, { - "teal": 335, - "source": 105, + "teal": 337, + "source": 108, "pc": [ 422 ] }, { - "teal": 336, - "source": 105, + "teal": 338, + "source": 108, "pc": [ 423, 424, @@ -1398,64 +1404,64 @@ ] }, { - "teal": 341, - "source": 106, + "teal": 343, + "source": 109, "pc": [ 426, 427 ] }, { - "teal": 342, - "source": 106, + "teal": 344, + "source": 109, "pc": [ 428, 429 ] }, { - "teal": 343, - "source": 106, + "teal": 345, + "source": 109, "pc": [ 430, 431 ] }, { - "teal": 344, - "source": 106, + "teal": 346, + "source": 109, "pc": [ 432, 433 ] }, { - "teal": 345, - "source": 106, + "teal": 347, + "source": 109, "pc": [ 434, 435 ] }, { - "teal": 346, - "source": 106, + "teal": 348, + "source": 109, "pc": [ 436, 437 ] }, { - "teal": 347, - "source": 106, + "teal": 349, + "source": 109, "pc": [ 438, 439 ] }, { - "teal": 348, - "source": 106, + "teal": 350, + "source": 109, "pc": [ 440, 441, @@ -1463,107 +1469,107 @@ ] }, { - "teal": 349, - "source": 106, + "teal": 351, + "source": 109, "pc": [ 443 ] }, { - "teal": 350, - "source": 106, + "teal": 352, + "source": 109, "pc": [ 444, 445 ] }, { - "teal": 351, - "source": 106, + "teal": 353, + "source": 109, "pc": [ 446 ] }, { - "teal": 352, - "source": 106, + "teal": 354, + "source": 109, "pc": [ 447 ] }, { - "teal": 353, - "source": 106, + "teal": 355, + "source": 109, "pc": [ 448 ] }, { - "teal": 354, - "source": 106, + "teal": 356, + "source": 109, "pc": [ 449, 450 ] }, { - "teal": 358, - "source": 107, + "teal": 360, + "source": 110, "pc": [ 451, 452 ] }, { - "teal": 359, - "source": 107, + "teal": 361, + "source": 110, "pc": [ 453, 454 ] }, { - "teal": 360, - "source": 107, + "teal": 362, + "source": 110, "pc": [ 455, 456 ] }, { - "teal": 361, - "source": 107, + "teal": 363, + "source": 110, "pc": [ 457 ] }, { - "teal": 362, - "source": 107, + "teal": 364, + "source": 110, "pc": [ 458, 459 ] }, { - "teal": 363, - "source": 107, + "teal": 365, + "source": 110, "pc": [ 460, 461 ] }, { - "teal": 364, - "source": 107, + "teal": 366, + "source": 110, "pc": [ 462, 463 ] }, { - "teal": 365, - "source": 107, + "teal": 367, + "source": 110, "pc": [ 464, 465, @@ -1571,87 +1577,87 @@ ] }, { - "teal": 366, - "source": 107, + "teal": 368, + "source": 110, "pc": [ 467 ] }, { - "teal": 367, - "source": 107, + "teal": 369, + "source": 110, "pc": [ 468 ] }, { - "teal": 368, - "source": 107, + "teal": 370, + "source": 110, "pc": [ 469 ] }, { - "teal": 369, - "source": 107, + "teal": 371, + "source": 110, "pc": [ 470 ] }, { - "teal": 370, - "source": 107, + "teal": 372, + "source": 110, "pc": [ 471 ] }, { - "teal": 371, - "source": 107, + "teal": 373, + "source": 110, "pc": [ 472, 473 ] }, { - "teal": 377, - "source": 110, + "teal": 379, + "source": 113, "pc": [ 474, 475 ] }, { - "teal": 378, - "source": 110, + "teal": 380, + "source": 113, "pc": [ 476 ] }, { - "teal": 379, - "source": 110, + "teal": 381, + "source": 113, "pc": [ 477 ] }, { - "teal": 380, - "source": 110, + "teal": 382, + "source": 113, "pc": [ 478 ] }, { - "teal": 381, - "source": 110, + "teal": 383, + "source": 113, "pc": [ 479 ] }, { - "teal": 382, - "source": 110, + "teal": 384, + "source": 113, "pc": [ 480, 481, @@ -1659,63 +1665,63 @@ ] }, { - "teal": 387, - "source": 114, + "teal": 389, + "source": 117, "pc": [ 483, 484 ] }, { - "teal": 388, - "source": 114, + "teal": 390, + "source": 117, "pc": [ 485, 486 ] }, { - "teal": 389, - "source": 114, + "teal": 391, + "source": 117, "pc": [ 487, 488 ] }, { - "teal": 390, - "source": 114, + "teal": 392, + "source": 117, "pc": [ 489 ] }, { - "teal": 391, - "source": 114, + "teal": 393, + "source": 117, "pc": [ 490, 491 ] }, { - "teal": 392, - "source": 114, + "teal": 394, + "source": 117, "pc": [ 492, 493 ] }, { - "teal": 393, - "source": 114, + "teal": 395, + "source": 117, "pc": [ 494, 495 ] }, { - "teal": 394, - "source": 114, + "teal": 396, + "source": 117, "pc": [ 496, 497, @@ -1723,222 +1729,222 @@ ] }, { - "teal": 395, - "source": 114, + "teal": 397, + "source": 117, "pc": [ 499 ] }, { - "teal": 396, - "source": 114, + "teal": 398, + "source": 117, "pc": [ 500 ] }, { - "teal": 397, - "source": 114, + "teal": 399, + "source": 117, "pc": [ 501 ] }, { - "teal": 398, - "source": 114, + "teal": 400, + "source": 117, "pc": [ 502 ] }, { - "teal": 399, - "source": 114, + "teal": 401, + "source": 117, "pc": [ 503 ] }, { - "teal": 400, - "source": 114, + "teal": 402, + "source": 117, "pc": [ 504, 505 ] }, { - "teal": 404, - "source": 117, + "teal": 406, + "source": 120, "pc": [ 506, 507 ] }, { - "teal": 405, - "source": 117, + "teal": 407, + "source": 120, "pc": [ 508, 509 ] }, { - "teal": 406, - "source": 117, + "teal": 408, + "source": 120, "pc": [ 510 ] }, { - "teal": 407, - "source": 117, + "teal": 409, + "source": 120, "pc": [ 511, 512 ] }, { - "teal": 411, - "source": 118, + "teal": 413, + "source": 121, "pc": [ 513, 514 ] }, { - "teal": 412, - "source": 118, + "teal": 414, + "source": 121, "pc": [ 515, 516 ] }, { - "teal": 413, - "source": 118, + "teal": 415, + "source": 121, "pc": [ 517 ] }, { - "teal": 417, - "source": 119, + "teal": 419, + "source": 122, "pc": [ 518, 519 ] }, { - "teal": 418, - "source": 119, + "teal": 420, + "source": 122, "pc": [ 520, 521 ] }, { - "teal": 419, - "source": 119, + "teal": 421, + "source": 122, "pc": [ 522 ] }, { - "teal": 420, - "source": 119, + "teal": 422, + "source": 122, "pc": [ 523, 524 ] }, { - "teal": 421, - "source": 119, + "teal": 423, + "source": 122, "pc": [ 525 ] }, { - "teal": 422, - "source": 119, + "teal": 424, + "source": 122, "pc": [ 526, 527 ] }, { - "teal": 426, - "source": 120, + "teal": 428, + "source": 123, "pc": [ 528, 529 ] }, { - "teal": 427, - "source": 120, + "teal": 429, + "source": 123, "pc": [ 530 ] }, { - "teal": 431, - "source": 123, + "teal": 433, + "source": 126, "pc": [ 531, 532 ] }, { - "teal": 432, - "source": 123, + "teal": 434, + "source": 126, "pc": [ 533, 534 ] }, { - "teal": 433, - "source": 123, + "teal": 435, + "source": 126, "pc": [ 535, 536 ] }, { - "teal": 434, - "source": 123, + "teal": 436, + "source": 126, "pc": [ 537, 538 ] }, { - "teal": 435, - "source": 123, + "teal": 437, + "source": 126, "pc": [ 539, 540 ] }, { - "teal": 436, - "source": 123, + "teal": 438, + "source": 126, "pc": [ 541, 542 ] }, { - "teal": 437, - "source": 123, + "teal": 439, + "source": 126, "pc": [ 543, 544 ] }, { - "teal": 438, - "source": 123, + "teal": 440, + "source": 126, "pc": [ 545, 546, @@ -1946,90 +1952,90 @@ ] }, { - "teal": 439, - "source": 123, + "teal": 441, + "source": 126, "pc": [ 548 ] }, { - "teal": 440, - "source": 123, + "teal": 442, + "source": 126, "pc": [ 549, 550 ] }, { - "teal": 441, - "source": 123, + "teal": 443, + "source": 126, "pc": [ 551, 552 ] }, { - "teal": 442, - "source": 123, + "teal": 444, + "source": 126, "pc": [ 553 ] }, { - "teal": 443, - "source": 123, + "teal": 445, + "source": 126, "pc": [ 554, 555 ] }, { - "teal": 444, - "source": 123, + "teal": 446, + "source": 126, "pc": [ 556 ] }, { - "teal": 445, - "source": 123, + "teal": 447, + "source": 126, "pc": [ 557 ] }, { - "teal": 446, - "source": 123, + "teal": 448, + "source": 126, "pc": [ 558 ] }, { - "teal": 447, - "source": 123, + "teal": 449, + "source": 126, "pc": [ 559 ] }, { - "teal": 448, - "source": 123, + "teal": 450, + "source": 126, "pc": [ 560, 561 ] }, { - "teal": 452, - "source": 125, + "teal": 454, + "source": 128, "pc": [ 562, 563 ] }, { - "teal": 453, - "source": 125, + "teal": 455, + "source": 128, "pc": [ 564, 565, @@ -2037,83 +2043,83 @@ ] }, { - "teal": 458, - "source": 128, + "teal": 460, + "source": 131, "pc": [ 567, 568 ] }, { - "teal": 459, - "source": 128, + "teal": 461, + "source": 131, "pc": [ 569 ] }, { - "teal": 460, - "source": 128, + "teal": 462, + "source": 131, "pc": [ 570 ] }, { - "teal": 461, - "source": 128, + "teal": 463, + "source": 131, "pc": [ 571, 572 ] }, { - "teal": 466, - "source": 130, + "teal": 468, + "source": 133, "pc": [ 573, 574 ] }, { - "teal": 467, - "source": 130, + "teal": 469, + "source": 133, "pc": [ 575, 576 ] }, { - "teal": 468, - "source": 130, + "teal": 470, + "source": 133, "pc": [ 577, 578 ] }, { - "teal": 469, - "source": 130, + "teal": 471, + "source": 133, "pc": [ 579 ] }, { - "teal": 470, - "source": 130, + "teal": 472, + "source": 133, "pc": [ 580 ] }, { - "teal": 471, - "source": 130, + "teal": 473, + "source": 133, "pc": [ 581 ] }, { - "teal": 472, - "source": 130, + "teal": 474, + "source": 133, "pc": [ 582, 583, @@ -2121,63 +2127,63 @@ ] }, { - "teal": 477, - "source": 132, + "teal": 479, + "source": 135, "pc": [ 585, 586 ] }, { - "teal": 478, - "source": 132, + "teal": 480, + "source": 135, "pc": [ 587, 588 ] }, { - "teal": 479, - "source": 132, + "teal": 481, + "source": 135, "pc": [ 589, 590 ] }, { - "teal": 480, - "source": 132, + "teal": 482, + "source": 135, "pc": [ 591 ] }, { - "teal": 481, - "source": 132, + "teal": 483, + "source": 135, "pc": [ 592, 593 ] }, { - "teal": 482, - "source": 132, + "teal": 484, + "source": 135, "pc": [ 594, 595 ] }, { - "teal": 483, - "source": 132, + "teal": 485, + "source": 135, "pc": [ 596, 597 ] }, { - "teal": 484, - "source": 132, + "teal": 486, + "source": 135, "pc": [ 598, 599, @@ -2185,126 +2191,126 @@ ] }, { - "teal": 485, - "source": 132, + "teal": 487, + "source": 135, "pc": [ 601 ] }, { - "teal": 486, - "source": 132, + "teal": 488, + "source": 135, "pc": [ 602 ] }, { - "teal": 487, - "source": 132, + "teal": 489, + "source": 135, "pc": [ 603 ] }, { - "teal": 488, - "source": 132, + "teal": 490, + "source": 135, "pc": [ 604 ] }, { - "teal": 489, - "source": 132, + "teal": 491, + "source": 135, "pc": [ 605 ] }, { - "teal": 490, - "source": 132, + "teal": 492, + "source": 135, "pc": [ 606, 607 ] }, { - "teal": 495, - "source": 134, + "teal": 497, + "source": 137, "pc": [ 608, 609 ] }, { - "teal": 496, - "source": 134, + "teal": 498, + "source": 137, "pc": [ 610, 611 ] }, { - "teal": 497, - "source": 134, + "teal": 499, + "source": 137, "pc": [ 612 ] }, { - "teal": 498, - "source": 134, + "teal": 500, + "source": 137, "pc": [ 613, 614 ] }, { - "teal": 499, - "source": 134, + "teal": 501, + "source": 137, "pc": [ 615, 616 ] }, { - "teal": 500, - "source": 134, + "teal": 502, + "source": 137, "pc": [ 617 ] }, { - "teal": 501, - "source": 134, + "teal": 503, + "source": 137, "pc": [ 618, 619 ] }, { - "teal": 502, - "source": 134, + "teal": 504, + "source": 137, "pc": [ 620 ] }, { - "teal": 503, - "source": 134, + "teal": 505, + "source": 137, "pc": [ 621 ] }, { - "teal": 504, - "source": 134, + "teal": 506, + "source": 137, "pc": [ 622 ] }, { - "teal": 505, - "source": 134, + "teal": 507, + "source": 137, "pc": [ 623, 624, @@ -2312,63 +2318,63 @@ ] }, { - "teal": 510, - "source": 136, + "teal": 512, + "source": 139, "pc": [ 626, 627 ] }, { - "teal": 511, - "source": 136, + "teal": 513, + "source": 139, "pc": [ 628, 629 ] }, { - "teal": 512, - "source": 136, + "teal": 514, + "source": 139, "pc": [ 630, 631 ] }, { - "teal": 513, - "source": 136, + "teal": 515, + "source": 139, "pc": [ 632 ] }, { - "teal": 514, - "source": 136, + "teal": 516, + "source": 139, "pc": [ 633, 634 ] }, { - "teal": 515, - "source": 136, + "teal": 517, + "source": 139, "pc": [ 635, 636 ] }, { - "teal": 516, - "source": 136, + "teal": 518, + "source": 139, "pc": [ 637, 638 ] }, { - "teal": 517, - "source": 136, + "teal": 519, + "source": 139, "pc": [ 639, 640, @@ -2376,107 +2382,107 @@ ] }, { - "teal": 518, - "source": 136, + "teal": 520, + "source": 139, "pc": [ 642 ] }, { - "teal": 519, - "source": 136, + "teal": 521, + "source": 139, "pc": [ 643 ] }, { - "teal": 520, - "source": 136, + "teal": 522, + "source": 139, "pc": [ 644 ] }, { - "teal": 521, - "source": 136, + "teal": 523, + "source": 139, "pc": [ 645 ] }, { - "teal": 522, - "source": 136, + "teal": 524, + "source": 139, "pc": [ 646 ] }, { - "teal": 523, - "source": 136, + "teal": 525, + "source": 139, "pc": [ 647, 648 ] }, { - "teal": 527, - "source": 139, + "teal": 529, + "source": 142, "pc": [ 649, 650 ] }, { - "teal": 528, - "source": 139, + "teal": 530, + "source": 142, "pc": [ 651, 652 ] }, { - "teal": 529, - "source": 139, + "teal": 531, + "source": 142, "pc": [ 653, 654 ] }, { - "teal": 530, - "source": 139, + "teal": 532, + "source": 142, "pc": [ 655, 656 ] }, { - "teal": 531, - "source": 139, + "teal": 533, + "source": 142, "pc": [ 657, 658 ] }, { - "teal": 532, - "source": 139, + "teal": 534, + "source": 142, "pc": [ 659, 660 ] }, { - "teal": 533, - "source": 139, + "teal": 535, + "source": 142, "pc": [ 661, 662 ] }, { - "teal": 534, - "source": 139, + "teal": 536, + "source": 142, "pc": [ 663, 664, @@ -2484,52 +2490,52 @@ ] }, { - "teal": 535, - "source": 139, + "teal": 537, + "source": 142, "pc": [ 666 ] }, { - "teal": 536, - "source": 139, + "teal": 538, + "source": 142, "pc": [ 667, 668 ] }, { - "teal": 537, - "source": 139, + "teal": 539, + "source": 142, "pc": [ 669 ] }, { - "teal": 538, - "source": 139, + "teal": 540, + "source": 142, "pc": [ 670 ] }, { - "teal": 539, - "source": 139, + "teal": 541, + "source": 142, "pc": [ 671 ] }, { - "teal": 540, - "source": 139, + "teal": 542, + "source": 142, "pc": [ 672, 673 ] }, { - "teal": 547, - "source": 143, + "teal": 550, + "source": 147, "pc": [ 674, 675 @@ -2537,53 +2543,59 @@ }, { "teal": 551, - "source": 84, + "source": 147, "pc": [ 676, 677 ] }, { - "teal": 554, - "source": 84, + "teal": 552, + "source": 147, "pc": [ - 678, - 679 + 678 ] }, { - "teal": 555, - "source": 84, + "teal": 553, + "source": 147, "pc": [ + 679, 680 ] }, { - "teal": 560, - "source": 155, + "teal": 554, + "source": 147, "pc": [ - 681 + 681, + 682 ] }, { - "teal": 563, - "source": 155, + "teal": 555, + "source": 147, + "pc": [ + 683 + ] + }, + { + "teal": 556, + "source": 147, "pc": [ - 682, - 683, 684 ] }, { - "teal": 564, - "source": 155, + "teal": 557, + "source": 147, "pc": [ 685 ] }, { - "teal": 567, - "source": 155, + "teal": 558, + "source": 147, "pc": [ 686, 687, @@ -2591,2615 +2603,3231 @@ ] }, { - "teal": 568, - "source": 155, - "pc": [ - 689 - ] - }, - { - "teal": 569, - "source": 155, + "teal": 559, + "source": 147, "pc": [ + 689, 690 ] }, { - "teal": 570, - "source": 155, - "pc": [ - 691 - ] - }, - { - "teal": 571, - "source": 155, + "teal": 560, + "source": 147, "pc": [ + 691, 692 ] }, { - "teal": 572, - "source": 155, - "pc": [ - 693 - ] - }, - { - "teal": 575, - "source": 155, - "pc": [ - 694, - 695 - ] - }, - { - "teal": 576, - "source": 155, + "teal": 561, + "source": 147, "pc": [ - 696 + 693, + 694 ] }, { - "teal": 577, - "source": 155, + "teal": 562, + "source": 147, "pc": [ + 695, + 696, 697 ] }, { - "teal": 578, - "source": 155, + "teal": 563, + "source": 147, "pc": [ 698 ] }, { - "teal": 579, - "source": 155, + "teal": 564, + "source": 147, "pc": [ - 699, - 700 + 699 ] }, { - "teal": 580, - "source": 155, + "teal": 565, + "source": 147, "pc": [ - 701 + 700 ] }, { - "teal": 581, - "source": 155, + "teal": 566, + "source": 147, "pc": [ - 702 + 701 ] }, { - "teal": 582, - "source": 155, + "teal": 569, + "source": 147, "pc": [ - 703 + 702, + 703, + 704 ] }, { - "teal": 585, - "source": 155, + "teal": 574, + "source": 152, "pc": [ - 704, 705, 706 ] }, { - "teal": 586, - "source": 155, - "pc": [ - 707 - ] - }, - { - "teal": 587, - "source": 155, + "teal": 575, + "source": 152, "pc": [ + 707, 708 ] }, { - "teal": 588, - "source": 155, + "teal": 576, + "source": 152, "pc": [ - 709 + 709, + 710 ] }, { - "teal": 589, - "source": 155, + "teal": 577, + "source": 152, "pc": [ - 710 + 711, + 712 ] }, { - "teal": 601, - "source": 155, + "teal": 578, + "source": 152, "pc": [ - 711, - 712, - 713 + 713, + 714, + 715 ] }, { - "teal": 604, - "source": 155, + "teal": 579, + "source": 152, "pc": [ - 714 + 716 ] }, { - "teal": 605, - "source": 155, + "teal": 580, + "source": 152, "pc": [ - 715, - 716 + 717 ] }, { - "teal": 612, - "source": 156, + "teal": 581, + "source": 152, "pc": [ - 717, 718 ] }, { - "teal": 613, - "source": 157, + "teal": 582, + "source": 152, "pc": [ 719, 720 ] }, { - "teal": 614, - "source": 157, + "teal": 583, + "source": 152, "pc": [ - 721, - 722 + 721 ] }, { - "teal": 615, - "source": 157, + "teal": 584, + "source": 152, "pc": [ - 723 + 722 ] }, { - "teal": 616, - "source": 157, + "teal": 585, + "source": 152, "pc": [ + 723, 724 ] }, { - "teal": 621, - "source": 161, + "teal": 589, + "source": 153, "pc": [ 725, 726 ] }, { - "teal": 622, - "source": 161, + "teal": 590, + "source": 153, "pc": [ 727, 728 ] }, { - "teal": 623, - "source": 161, + "teal": 591, + "source": 153, "pc": [ - 729, - 730 + 729 ] }, { - "teal": 624, - "source": 161, + "teal": 592, + "source": 153, "pc": [ - 731, - 732 + 730, + 731 ] }, { - "teal": 625, - "source": 161, + "teal": 593, + "source": 153, "pc": [ + 732, 733 ] }, { - "teal": 626, - "source": 161, + "teal": 594, + "source": 153, "pc": [ 734 ] }, { - "teal": 627, - "source": 161, + "teal": 595, + "source": 153, "pc": [ - 735, - 736, - 737 + 735 ] }, { - "teal": 636, - "source": 162, + "teal": 596, + "source": 153, "pc": [ + 736, + 737, 738 ] }, { - "teal": 637, - "source": 162, + "teal": 597, + "source": 153, "pc": [ - 739 + 739, + 740 ] }, { - "teal": 638, - "source": 162, + "teal": 598, + "source": 153, "pc": [ - 740, - 741 + 741, + 742 ] }, { - "teal": 642, - "source": 163, + "teal": 599, + "source": 153, "pc": [ - 742, 743 ] }, { - "teal": 643, - "source": 163, + "teal": 600, + "source": 153, "pc": [ 744, 745 ] }, { - "teal": 647, - "source": 164, + "teal": 601, + "source": 153, "pc": [ 746, 747 ] }, { - "teal": 648, - "source": 164, + "teal": 602, + "source": 153, + "pc": [ + 748 + ] + }, + { + "teal": 603, + "source": 153, "pc": [ - 748, 749 ] }, { - "teal": 649, - "source": 164, + "teal": 604, + "source": 153, "pc": [ 750, - 751 + 751, + 752 ] }, { - "teal": 653, - "source": 165, + "teal": 607, + "source": 153, "pc": [ - 752, 753 ] }, { - "teal": 654, - "source": 165, + "teal": 610, + "source": 153, "pc": [ 754, 755 ] }, { - "teal": 655, - "source": 165, + "teal": 614, + "source": 154, "pc": [ 756, 757 ] }, { - "teal": 658, - "source": 162, + "teal": 615, + "source": 154, "pc": [ - 758 + 758, + 759 ] }, { - "teal": 659, - "source": 162, + "teal": 616, + "source": 154, "pc": [ - 759, 760 ] }, { - "teal": 662, - "source": 162, - "pc": [ - 761 - ] - }, - { - "teal": 667, - "source": 168, + "teal": 617, + "source": 154, "pc": [ + 761, 762, 763 ] }, { - "teal": 668, - "source": 168, - "pc": [ - 764 - ] - }, - { - "teal": 669, - "source": 168, + "teal": 618, + "source": 154, "pc": [ + 764, 765 ] }, { - "teal": 670, - "source": 168, + "teal": 619, + "source": 154, "pc": [ 766, - 767, - 768 + 767 ] }, { - "teal": 678, - "source": 169, + "teal": 620, + "source": 154, "pc": [ - 769 + 768 ] }, { - "teal": 679, - "source": 169, + "teal": 621, + "source": 154, "pc": [ - 770 + 769, + 770, + 771 ] }, { - "teal": 680, - "source": 169, + "teal": 624, + "source": 154, "pc": [ - 771, 772 ] }, { - "teal": 684, - "source": 170, + "teal": 627, + "source": 154, "pc": [ 773, 774 ] }, { - "teal": 685, - "source": 170, + "teal": 632, + "source": 156, "pc": [ 775, 776 ] }, { - "teal": 689, - "source": 171, + "teal": 633, + "source": 156, "pc": [ 777, 778 ] }, { - "teal": 690, - "source": 171, + "teal": 634, + "source": 156, "pc": [ 779, 780 ] }, { - "teal": 693, - "source": 169, + "teal": 635, + "source": 156, "pc": [ - 781 + 781, + 782 ] }, { - "teal": 694, - "source": 169, - "pc": [ - 782, - 783 - ] - }, - { - "teal": 697, - "source": 169, + "teal": 636, + "source": 156, "pc": [ - 784 + 783, + 784, + 785 ] }, { - "teal": 702, - "source": 175, + "teal": 637, + "source": 156, "pc": [ - 785, 786 ] }, { - "teal": 703, - "source": 175, + "teal": 638, + "source": 156, "pc": [ - 787, - 788, - 789 + 787 ] }, { - "teal": 708, - "source": 178, + "teal": 639, + "source": 156, "pc": [ - 790, - 791 + 788, + 789, + 790 ] }, { - "teal": 709, - "source": 178, + "teal": 644, + "source": 157, "pc": [ + 791, 792 ] }, { - "teal": 710, - "source": 178, - "pc": [ - 793 - ] - }, - { - "teal": 711, - "source": 178, + "teal": 645, + "source": 157, "pc": [ + 793, 794 ] }, { - "teal": 712, - "source": 178, + "teal": 646, + "source": 157, "pc": [ 795, 796 ] }, { - "teal": 716, - "source": 179, + "teal": 647, + "source": 157, "pc": [ 797, 798 ] }, { - "teal": 717, - "source": 179, + "teal": 648, + "source": 157, "pc": [ 799, - 800, - 801 + 800 ] }, { - "teal": 718, - "source": 179, + "teal": 649, + "source": 157, "pc": [ - 802, - 803 + 801, + 802 ] }, { - "teal": 723, - "source": 181, + "teal": 650, + "source": 157, "pc": [ - 804, - 805 + 803, + 804 ] }, { - "teal": 724, - "source": 181, + "teal": 651, + "source": 157, "pc": [ - 806 + 805, + 806, + 807 ] }, { - "teal": 725, - "source": 181, + "teal": 652, + "source": 157, "pc": [ - 807 + 808 ] }, { - "teal": 726, - "source": 181, + "teal": 653, + "source": 157, "pc": [ - 808, 809, 810 ] }, { - "teal": 734, - "source": 182, + "teal": 654, + "source": 157, "pc": [ 811 ] }, { - "teal": 735, - "source": 182, + "teal": 655, + "source": 157, "pc": [ 812 ] }, { - "teal": 736, - "source": 182, + "teal": 656, + "source": 157, "pc": [ - 813, - 814 + 813 ] }, { - "teal": 740, - "source": 183, + "teal": 657, + "source": 157, "pc": [ - 815, - 816 + 814, + 815 ] }, { - "teal": 741, - "source": 183, + "teal": 664, + "source": 161, "pc": [ - 817, - 818 + 816, + 817 ] }, { - "teal": 745, - "source": 184, + "teal": 668, + "source": 86, "pc": [ - 819, - 820 + 818, + 819 ] }, { - "teal": 746, - "source": 184, + "teal": 671, + "source": 86, "pc": [ - 821, - 822 + 820, + 821 ] }, { - "teal": 749, - "source": 182, + "teal": 672, + "source": 86, "pc": [ - 823 + 822 ] }, { - "teal": 750, - "source": 182, + "teal": 677, + "source": 173, "pc": [ - 824, - 825 + 823 ] }, { - "teal": 753, - "source": 182, + "teal": 680, + "source": 173, "pc": [ + 824, + 825, 826 ] }, { - "teal": 759, - "source": 188, + "teal": 681, + "source": 173, "pc": [ - 827, - 828 + 827 ] }, { - "teal": 760, - "source": 188, + "teal": 684, + "source": 173, "pc": [ + 828, 829, 830 ] }, { - "teal": 761, - "source": 188, + "teal": 685, + "source": 173, + "pc": [ + 831 + ] + }, + { + "teal": 686, + "source": 173, "pc": [ - 831, 832 ] }, { - "teal": 762, - "source": 188, + "teal": 687, + "source": 173, + "pc": [ + 833 + ] + }, + { + "teal": 688, + "source": 173, "pc": [ - 833, 834 ] }, { - "teal": 763, - "source": 188, + "teal": 689, + "source": 173, "pc": [ 835 ] }, { - "teal": 764, - "source": 188, + "teal": 692, + "source": 173, + "pc": [ + 836, + 837 + ] + }, + { + "teal": 693, + "source": 173, "pc": [ - 836 + 838 ] }, { - "teal": 765, - "source": 188, + "teal": 694, + "source": 173, "pc": [ - 837 + 839 ] }, { - "teal": 766, - "source": 188, + "teal": 695, + "source": 173, "pc": [ - 838, - 839, 840 ] }, { - "teal": 771, - "source": 189, + "teal": 696, + "source": 173, "pc": [ 841, 842 ] }, { - "teal": 772, - "source": 189, + "teal": 697, + "source": 173, + "pc": [ + 843 + ] + }, + { + "teal": 698, + "source": 173, "pc": [ - 843, 844 ] }, { - "teal": 777, - "source": 190, + "teal": 699, + "source": 173, "pc": [ - 845, - 846 + 845 ] }, { - "teal": 778, - "source": 190, + "teal": 702, + "source": 173, "pc": [ - 847 + 846, + 847, + 848 ] }, { - "teal": 779, - "source": 190, + "teal": 703, + "source": 173, + "pc": [ + 849 + ] + }, + { + "teal": 704, + "source": 173, "pc": [ - 848, - 849, 850 ] }, { - "teal": 784, - "source": 190, + "teal": 705, + "source": 173, "pc": [ - 851, - 852 + 851 ] }, { - "teal": 785, - "source": 190, + "teal": 706, + "source": 173, "pc": [ - 853, - 854 + 852 ] }, { - "teal": 786, - "source": 190, + "teal": 718, + "source": 173, "pc": [ + 853, + 854, 855 ] }, { - "teal": 787, - "source": 190, + "teal": 721, + "source": 173, "pc": [ - 856, - 857 + 856 ] }, { - "teal": 793, - "source": 193, + "teal": 722, + "source": 173, "pc": [ - 858, - 859 + 857, + 858 ] }, { - "teal": 794, - "source": 193, + "teal": 729, + "source": 174, "pc": [ - 860, - 861 + 859, + 860 ] }, { - "teal": 795, - "source": 193, + "teal": 730, + "source": 175, "pc": [ + 861, 862 ] }, { - "teal": 796, - "source": 193, + "teal": 731, + "source": 175, "pc": [ 863, 864 ] }, { - "teal": 797, - "source": 193, + "teal": 732, + "source": 175, "pc": [ - 865, - 866 + 865 ] }, { - "teal": 798, - "source": 193, + "teal": 733, + "source": 175, "pc": [ - 867 + 866 ] }, { - "teal": 799, - "source": 193, + "teal": 738, + "source": 179, "pc": [ - 868, - 869 + 867, + 868 ] }, { - "teal": 800, - "source": 193, + "teal": 739, + "source": 179, "pc": [ + 869, 870 ] }, { - "teal": 801, - "source": 193, + "teal": 740, + "source": 179, "pc": [ - 871 + 871, + 872 ] }, { - "teal": 802, - "source": 193, + "teal": 741, + "source": 179, "pc": [ - 872, 873, 874 ] }, { - "teal": 810, - "source": 194, + "teal": 742, + "source": 179, "pc": [ 875 ] }, { - "teal": 811, - "source": 194, + "teal": 743, + "source": 179, "pc": [ 876 ] }, { - "teal": 812, - "source": 194, + "teal": 744, + "source": 179, "pc": [ 877, - 878 + 878, + 879 ] }, { - "teal": 816, - "source": 195, + "teal": 753, + "source": 180, "pc": [ - 879, 880 ] }, { - "teal": 817, - "source": 195, + "teal": 754, + "source": 180, "pc": [ - 881, - 882 + 881 ] }, { - "teal": 821, - "source": 196, + "teal": 755, + "source": 180, "pc": [ - 883, - 884 + 882, + 883 ] }, { - "teal": 822, - "source": 196, + "teal": 759, + "source": 181, "pc": [ - 885, - 886 + 884, + 885 ] }, { - "teal": 825, - "source": 194, + "teal": 760, + "source": 181, "pc": [ + 886, 887 ] }, { - "teal": 826, - "source": 194, + "teal": 764, + "source": 182, "pc": [ 888, 889 ] }, { - "teal": 829, - "source": 194, - "pc": [ - 890 - ] - }, - { - "teal": 839, - "source": 201, + "teal": 765, + "source": 182, "pc": [ + 890, 891 ] }, { - "teal": 840, - "source": 201, + "teal": 766, + "source": 182, "pc": [ - 892 + 892, + 893 ] }, { - "teal": 841, - "source": 201, + "teal": 770, + "source": 183, "pc": [ - 893, - 894 + 894, + 895 ] }, { - "teal": 845, - "source": 202, + "teal": 771, + "source": 183, "pc": [ - 895, - 896 + 896, + 897 ] }, { - "teal": 846, - "source": 202, + "teal": 772, + "source": 183, "pc": [ - 897, - 898 + 898, + 899 ] }, { - "teal": 850, - "source": 203, + "teal": 775, + "source": 180, "pc": [ - 899, 900 ] }, { - "teal": 851, - "source": 203, + "teal": 776, + "source": 180, "pc": [ 901, 902 ] }, { - "teal": 855, - "source": 204, + "teal": 779, + "source": 180, "pc": [ 903 ] }, { - "teal": 856, - "source": 204, + "teal": 784, + "source": 186, "pc": [ 904, 905 ] }, { - "teal": 860, - "source": 205, + "teal": 785, + "source": 186, + "pc": [ + 906 + ] + }, + { + "teal": 786, + "source": 186, "pc": [ - 906, 907 ] }, { - "teal": 861, - "source": 205, + "teal": 787, + "source": 186, "pc": [ 908, - 909 + 909, + 910 ] }, { - "teal": 862, - "source": 205, + "teal": 795, + "source": 187, "pc": [ - 910, 911 ] }, { - "teal": 865, - "source": 201, + "teal": 796, + "source": 187, "pc": [ 912 ] }, { - "teal": 866, - "source": 201, + "teal": 797, + "source": 187, "pc": [ 913, 914 ] }, { - "teal": 869, - "source": 201, - "pc": [ - 915 - ] - }, - { - "teal": 878, - "source": 210, + "teal": 801, + "source": 188, "pc": [ + 915, 916 ] }, { - "teal": 879, - "source": 210, + "teal": 802, + "source": 188, "pc": [ - 917 + 917, + 918 ] }, { - "teal": 880, - "source": 210, + "teal": 806, + "source": 189, "pc": [ - 918, - 919 + 919, + 920 ] }, { - "teal": 884, - "source": 211, + "teal": 807, + "source": 189, "pc": [ - 920, - 921 + 921, + 922 ] }, { - "teal": 885, - "source": 211, + "teal": 810, + "source": 187, "pc": [ - 922, 923 ] }, { - "teal": 889, - "source": 212, + "teal": 811, + "source": 187, "pc": [ 924, 925 ] }, { - "teal": 890, - "source": 212, + "teal": 814, + "source": 187, "pc": [ - 926, - 927 + 926 ] }, { - "teal": 891, - "source": 212, + "teal": 819, + "source": 193, "pc": [ - 928, - 929 + 927, + 928 ] }, { - "teal": 895, - "source": 213, + "teal": 820, + "source": 193, "pc": [ + 929, 930, 931 ] }, { - "teal": 896, - "source": 213, + "teal": 825, + "source": 196, "pc": [ 932, 933 ] }, { - "teal": 897, - "source": 213, + "teal": 826, + "source": 196, + "pc": [ + 934 + ] + }, + { + "teal": 827, + "source": 196, "pc": [ - 934, 935 ] }, { - "teal": 900, - "source": 210, + "teal": 828, + "source": 196, "pc": [ 936 ] }, { - "teal": 901, - "source": 210, + "teal": 829, + "source": 196, "pc": [ 937, 938 ] }, { - "teal": 904, - "source": 210, + "teal": 833, + "source": 197, "pc": [ - 939 + 939, + 940 ] }, { - "teal": 908, - "source": 216, - "pc": [ - 940, - 941 - ] - }, - { - "teal": 912, - "source": 155, + "teal": 834, + "source": 197, "pc": [ + 941, 942, 943 ] }, { - "teal": 915, - "source": 155, + "teal": 835, + "source": 197, "pc": [ 944, 945 ] }, { - "teal": 916, - "source": 155, + "teal": 840, + "source": 199, "pc": [ - 946 + 946, + 947 ] }, { - "teal": 921, - "source": 224, + "teal": 841, + "source": 199, "pc": [ - 947, 948, 949 ] }, { - "teal": 922, - "source": 224, + "teal": 842, + "source": 199, "pc": [ - 950 + 950, + 951 ] }, { - "teal": 925, - "source": 224, + "teal": 843, + "source": 199, "pc": [ - 951, 952, 953 ] }, { - "teal": 926, - "source": 224, + "teal": 844, + "source": 199, "pc": [ 954 ] }, { - "teal": 927, - "source": 224, + "teal": 845, + "source": 199, "pc": [ 955 ] }, { - "teal": 935, - "source": 224, + "teal": 846, + "source": 199, "pc": [ - 956, - 957, - 958 + 956 ] }, { - "teal": 938, - "source": 224, + "teal": 847, + "source": 199, "pc": [ + 957, + 958, 959 ] }, { - "teal": 942, - "source": 225, + "teal": 852, + "source": 200, "pc": [ 960, 961 ] }, { - "teal": 943, - "source": 225, - "pc": [ - 962 - ] - }, - { - "teal": 944, - "source": 225, + "teal": 853, + "source": 200, "pc": [ + 962, 963 ] }, { - "teal": 945, - "source": 225, + "teal": 858, + "source": 201, "pc": [ 964, 965 ] }, { - "teal": 955, - "source": 227, + "teal": 859, + "source": 201, "pc": [ 966 ] }, { - "teal": 956, - "source": 227, - "pc": [ - 967 - ] - }, - { - "teal": 957, - "source": 227, + "teal": 860, + "source": 201, "pc": [ + 967, 968, 969 ] }, { - "teal": 961, - "source": 228, + "teal": 865, + "source": 201, "pc": [ 970, 971 ] }, { - "teal": 962, - "source": 228, + "teal": 866, + "source": 201, "pc": [ 972, 973 ] }, { - "teal": 966, - "source": 229, + "teal": 867, + "source": 201, "pc": [ - 974, - 975 + 974 ] }, { - "teal": 967, - "source": 229, + "teal": 868, + "source": 201, "pc": [ - 976, - 977 + 975, + 976 ] }, { - "teal": 971, - "source": 230, + "teal": 874, + "source": 204, "pc": [ - 978, - 979 + 977, + 978 ] }, { - "teal": 972, - "source": 230, + "teal": 875, + "source": 204, + "pc": [ + 979, + 980 + ] + }, + { + "teal": 876, + "source": 204, "pc": [ - 980, 981 ] }, { - "teal": 973, - "source": 230, + "teal": 877, + "source": 204, "pc": [ 982, 983 ] }, { - "teal": 974, - "source": 230, + "teal": 878, + "source": 204, "pc": [ - 984 + 984, + 985 ] }, { - "teal": 975, - "source": 230, + "teal": 879, + "source": 204, "pc": [ - 985, 986 ] }, { - "teal": 979, - "source": 231, + "teal": 880, + "source": 204, "pc": [ 987, 988 ] }, { - "teal": 980, - "source": 231, + "teal": 881, + "source": 204, + "pc": [ + 989 + ] + }, + { + "teal": 882, + "source": 204, "pc": [ - 989, 990 ] }, { - "teal": 984, - "source": 232, + "teal": 883, + "source": 204, "pc": [ 991, - 992 + 992, + 993 ] }, { - "teal": 985, - "source": 232, + "teal": 891, + "source": 205, "pc": [ - 993, 994 ] }, { - "teal": 988, - "source": 227, + "teal": 892, + "source": 205, "pc": [ 995 ] }, { - "teal": 989, - "source": 227, + "teal": 893, + "source": 205, "pc": [ 996, 997 ] }, { - "teal": 992, - "source": 227, - "pc": [ - 998 - ] - }, - { - "teal": 1000, - "source": 235, + "teal": 897, + "source": 206, "pc": [ + 998, 999 ] }, { - "teal": 1001, - "source": 235, + "teal": 898, + "source": 206, "pc": [ - 1000 + 1000, + 1001 ] }, { - "teal": 1002, - "source": 235, + "teal": 902, + "source": 207, "pc": [ - 1001, - 1002 + 1002, + 1003 ] }, { - "teal": 1006, - "source": 236, + "teal": 903, + "source": 207, "pc": [ - 1003, - 1004 + 1004, + 1005 ] }, { - "teal": 1007, - "source": 236, + "teal": 906, + "source": 205, "pc": [ - 1005, 1006 ] }, { - "teal": 1011, - "source": 237, + "teal": 907, + "source": 205, "pc": [ 1007, 1008 ] }, { - "teal": 1012, - "source": 237, + "teal": 910, + "source": 205, + "pc": [ + 1009 + ] + }, + { + "teal": 920, + "source": 212, "pc": [ - 1009, 1010 ] }, { - "teal": 1016, - "source": 238, + "teal": 921, + "source": 212, "pc": [ - 1011, - 1012 + 1011 ] }, { - "teal": 1017, - "source": 238, + "teal": 922, + "source": 212, "pc": [ - 1013, - 1014 + 1012, + 1013 ] }, { - "teal": 1018, - "source": 238, + "teal": 926, + "source": 213, "pc": [ + 1014, 1015 ] }, { - "teal": 1019, - "source": 238, + "teal": 927, + "source": 213, "pc": [ 1016, 1017 ] }, { - "teal": 1020, - "source": 238, + "teal": 931, + "source": 214, "pc": [ 1018, 1019 ] }, { - "teal": 1021, - "source": 238, - "pc": [ - 1020 - ] - }, - { - "teal": 1022, - "source": 238, + "teal": 932, + "source": 214, "pc": [ + 1020, 1021 ] }, { - "teal": 1023, - "source": 238, + "teal": 936, + "source": 215, "pc": [ - 1022, - 1023 + 1022 ] }, { - "teal": 1026, - "source": 235, + "teal": 937, + "source": 215, "pc": [ + 1023, 1024 ] }, { - "teal": 1027, - "source": 235, + "teal": 941, + "source": 216, "pc": [ 1025, 1026 ] }, { - "teal": 1030, - "source": 235, - "pc": [ - 1027 - ] - }, - { - "teal": 1031, - "source": 224, + "teal": 942, + "source": 216, "pc": [ + 1027, 1028 ] }, { - "teal": 1036, - "source": 248, + "teal": 943, + "source": 216, "pc": [ 1029, - 1030, - 1031 + 1030 ] }, { - "teal": 1037, - "source": 248, + "teal": 946, + "source": 212, "pc": [ - 1032 + 1031 ] }, { - "teal": 1040, - "source": 248, + "teal": 947, + "source": 212, "pc": [ - 1033, - 1034, - 1035 + 1032, + 1033 ] }, { - "teal": 1041, - "source": 248, + "teal": 950, + "source": 212, "pc": [ - 1036 + 1034 ] }, { - "teal": 1042, - "source": 248, + "teal": 959, + "source": 221, "pc": [ - 1037 + 1035 ] }, { - "teal": 1051, - "source": 248, + "teal": 960, + "source": 221, "pc": [ - 1038, - 1039, - 1040 + 1036 ] }, { - "teal": 1054, - "source": 248, + "teal": 961, + "source": 221, "pc": [ - 1041 + 1037, + 1038 ] }, { - "teal": 1058, - "source": 249, + "teal": 965, + "source": 222, "pc": [ - 1042, - 1043 + 1039, + 1040 ] }, { - "teal": 1059, - "source": 249, + "teal": 966, + "source": 222, "pc": [ - 1044 + 1041, + 1042 ] }, { - "teal": 1060, - "source": 249, + "teal": 970, + "source": 223, "pc": [ - 1045 + 1043, + 1044 ] }, { - "teal": 1061, - "source": 249, + "teal": 971, + "source": 223, "pc": [ - 1046, - 1047 + 1045, + 1046 ] }, { - "teal": 1071, - "source": 251, + "teal": 972, + "source": 223, "pc": [ + 1047, 1048 ] }, { - "teal": 1072, - "source": 251, + "teal": 976, + "source": 224, "pc": [ - 1049 + 1049, + 1050 ] }, { - "teal": 1073, - "source": 251, + "teal": 977, + "source": 224, "pc": [ - 1050, - 1051 + 1051, + 1052 ] }, { - "teal": 1077, - "source": 252, + "teal": 978, + "source": 224, "pc": [ - 1052, - 1053 + 1053, + 1054 ] }, { - "teal": 1078, - "source": 252, + "teal": 981, + "source": 221, "pc": [ - 1054, 1055 ] }, { - "teal": 1082, - "source": 253, + "teal": 982, + "source": 221, "pc": [ 1056, 1057 ] }, { - "teal": 1083, - "source": 253, + "teal": 985, + "source": 221, "pc": [ - 1058, - 1059 + 1058 ] }, { - "teal": 1084, - "source": 253, + "teal": 990, + "source": 227, "pc": [ + 1059, 1060 ] }, { - "teal": 1085, - "source": 253, + "teal": 991, + "source": 227, + "pc": [ + 1061 + ] + }, + { + "teal": 992, + "source": 227, "pc": [ - 1061, 1062 ] }, { - "teal": 1089, - "source": 254, + "teal": 993, + "source": 227, "pc": [ 1063, - 1064 + 1064, + 1065 ] }, { - "teal": 1090, - "source": 254, + "teal": 1001, + "source": 228, "pc": [ - 1065, 1066 ] }, { - "teal": 1091, - "source": 254, + "teal": 1002, + "source": 228, "pc": [ - 1067, - 1068 + 1067 ] }, { - "teal": 1092, - "source": 254, + "teal": 1003, + "source": 228, "pc": [ + 1068, 1069 ] }, { - "teal": 1093, - "source": 254, + "teal": 1007, + "source": 229, "pc": [ 1070, 1071 ] }, { - "teal": 1097, - "source": 255, + "teal": 1008, + "source": 229, "pc": [ 1072, 1073 ] }, { - "teal": 1098, - "source": 255, + "teal": 1012, + "source": 230, "pc": [ 1074, 1075 ] }, { - "teal": 1102, - "source": 256, + "teal": 1013, + "source": 230, "pc": [ 1076, 1077 ] }, { - "teal": 1103, - "source": 256, + "teal": 1016, + "source": 228, "pc": [ - 1078, - 1079 + 1078 ] }, { - "teal": 1104, - "source": 256, + "teal": 1017, + "source": 228, "pc": [ + 1079, 1080 ] }, { - "teal": 1105, - "source": 256, + "teal": 1020, + "source": 228, "pc": [ - 1081, - 1082 + 1081 ] }, { - "teal": 1108, - "source": 251, + "teal": 1025, + "source": 234, "pc": [ + 1082, 1083 ] }, { - "teal": 1109, - "source": 251, + "teal": 1029, + "source": 173, "pc": [ 1084, 1085 ] }, { - "teal": 1112, - "source": 251, - "pc": [ - 1086 - ] - }, - { - "teal": 1120, - "source": 259, + "teal": 1032, + "source": 173, "pc": [ + 1086, 1087 ] }, { - "teal": 1121, - "source": 259, + "teal": 1033, + "source": 173, "pc": [ 1088 ] }, { - "teal": 1122, - "source": 259, + "teal": 1038, + "source": 242, "pc": [ 1089, - 1090 + 1090, + 1091 ] }, { - "teal": 1126, - "source": 260, + "teal": 1039, + "source": 242, "pc": [ - 1091, 1092 ] }, { - "teal": 1127, - "source": 260, + "teal": 1042, + "source": 242, "pc": [ 1093, - 1094 + 1094, + 1095 ] }, { - "teal": 1131, - "source": 261, + "teal": 1043, + "source": 242, "pc": [ - 1095, 1096 ] }, { - "teal": 1132, - "source": 261, + "teal": 1044, + "source": 242, "pc": [ - 1097, - 1098 + 1097 ] }, { - "teal": 1136, - "source": 262, + "teal": 1052, + "source": 242, "pc": [ + 1098, 1099, 1100 ] }, { - "teal": 1137, - "source": 262, + "teal": 1055, + "source": 242, "pc": [ - 1101, - 1102 + 1101 ] }, { - "teal": 1138, - "source": 262, + "teal": 1059, + "source": 243, "pc": [ + 1102, 1103 ] }, { - "teal": 1139, - "source": 262, + "teal": 1060, + "source": 243, + "pc": [ + 1104 + ] + }, + { + "teal": 1061, + "source": 243, "pc": [ - 1104, 1105 ] }, { - "teal": 1140, - "source": 262, + "teal": 1062, + "source": 243, "pc": [ 1106, 1107 ] }, { - "teal": 1141, - "source": 262, + "teal": 1072, + "source": 245, "pc": [ 1108 ] }, { - "teal": 1142, - "source": 262, + "teal": 1073, + "source": 245, "pc": [ 1109 ] }, { - "teal": 1143, - "source": 262, + "teal": 1074, + "source": 245, "pc": [ 1110, 1111 ] }, { - "teal": 1146, - "source": 259, + "teal": 1078, + "source": 246, "pc": [ - 1112 + 1112, + 1113 ] }, { - "teal": 1147, - "source": 259, + "teal": 1079, + "source": 246, "pc": [ - 1113, - 1114 + 1114, + 1115 ] }, { - "teal": 1150, - "source": 259, + "teal": 1083, + "source": 247, "pc": [ - 1115 + 1116, + 1117 ] }, { - "teal": 1151, - "source": 248, + "teal": 1084, + "source": 247, "pc": [ - 1116 + 1118, + 1119 ] }, { - "teal": 1156, - "source": 273, + "teal": 1088, + "source": 248, "pc": [ - 1117 + 1120, + 1121 ] }, { - "teal": 1159, - "source": 273, - "pc": [ - 1118, - 1119, - 1120 - ] - }, - { - "teal": 1160, - "source": 273, - "pc": [ - 1121 - ] - }, - { - "teal": 1161, - "source": 273, - "pc": [ - 1122 - ] - }, - { - "teal": 1162, - "source": 273, + "teal": 1089, + "source": 248, "pc": [ + 1122, 1123 ] }, { - "teal": 1163, - "source": 273, + "teal": 1090, + "source": 248, "pc": [ - 1124 + 1124, + 1125 ] }, { - "teal": 1164, - "source": 273, + "teal": 1091, + "source": 248, "pc": [ - 1125 + 1126 ] }, { - "teal": 1167, - "source": 273, + "teal": 1092, + "source": 248, "pc": [ - 1126, 1127, 1128 ] }, { - "teal": 1168, - "source": 273, - "pc": [ - 1129 - ] - }, - { - "teal": 1169, - "source": 273, + "teal": 1096, + "source": 249, "pc": [ + 1129, 1130 ] }, { - "teal": 1170, - "source": 273, + "teal": 1097, + "source": 249, "pc": [ - 1131 + 1131, + 1132 ] }, { - "teal": 1171, - "source": 273, + "teal": 1101, + "source": 250, "pc": [ - 1132 + 1133, + 1134 ] }, { - "teal": 1181, - "source": 273, + "teal": 1102, + "source": 250, "pc": [ - 1133, - 1134, - 1135 + 1135, + 1136 ] }, { - "teal": 1185, - "source": 274, + "teal": 1105, + "source": 245, "pc": [ - 1136, 1137 ] }, { - "teal": 1186, - "source": 274, + "teal": 1106, + "source": 245, "pc": [ - 1138 + 1138, + 1139 ] }, { - "teal": 1187, - "source": 274, + "teal": 1109, + "source": 245, "pc": [ - 1139 + 1140 ] }, { - "teal": 1188, - "source": 274, + "teal": 1117, + "source": 253, "pc": [ - 1140 + 1141 ] }, { - "teal": 1189, - "source": 274, + "teal": 1118, + "source": 253, "pc": [ - 1141, - 1142, - 1143 + 1142 ] }, { - "teal": 1190, - "source": 274, + "teal": 1119, + "source": 253, "pc": [ - 1144, - 1145 + 1143, + 1144 ] }, { - "teal": 1191, - "source": 274, + "teal": 1123, + "source": 254, "pc": [ + 1145, 1146 ] }, { - "teal": 1192, - "source": 274, + "teal": 1124, + "source": 254, "pc": [ - 1147 + 1147, + 1148 ] }, { - "teal": 1193, - "source": 274, + "teal": 1128, + "source": 255, "pc": [ - 1148, 1149, 1150 ] }, { - "teal": 1196, - "source": 274, + "teal": 1129, + "source": 255, "pc": [ 1151, 1152 ] }, { - "teal": 1199, - "source": 273, + "teal": 1133, + "source": 256, "pc": [ - 1153 + 1153, + 1154 ] }, { - "teal": 1204, - "source": 278, + "teal": 1134, + "source": 256, "pc": [ - 1154, 1155, 1156 ] }, { - "teal": 1205, - "source": 278, + "teal": 1135, + "source": 256, "pc": [ 1157 ] }, { - "teal": 1206, - "source": 278, + "teal": 1136, + "source": 256, "pc": [ - 1158 + 1158, + 1159 ] }, { - "teal": 1212, - "source": 278, + "teal": 1137, + "source": 256, "pc": [ - 1159, 1160, 1161 ] }, { - "teal": 1215, - "source": 278, + "teal": 1138, + "source": 256, "pc": [ 1162 ] }, { - "teal": 1219, - "source": 279, + "teal": 1139, + "source": 256, "pc": [ - 1163, - 1164 + 1163 ] }, { - "teal": 1220, - "source": 279, + "teal": 1140, + "source": 256, "pc": [ + 1164, 1165 ] }, { - "teal": 1221, - "source": 279, + "teal": 1143, + "source": 253, "pc": [ 1166 ] }, { - "teal": 1222, - "source": 279, + "teal": 1144, + "source": 253, "pc": [ 1167, 1168 ] }, { - "teal": 1226, - "source": 281, + "teal": 1147, + "source": 253, "pc": [ - 1169, - 1170 + 1169 ] }, { - "teal": 1227, - "source": 281, + "teal": 1148, + "source": 242, "pc": [ - 1171, - 1172 + 1170 ] }, { - "teal": 1228, - "source": 281, + "teal": 1153, + "source": 266, "pc": [ + 1171, + 1172, 1173 ] }, { - "teal": 1229, - "source": 281, + "teal": 1154, + "source": 266, "pc": [ - 1174, - 1175 + 1174 ] }, { - "teal": 1230, - "source": 281, + "teal": 1157, + "source": 266, "pc": [ + 1175, 1176, 1177 ] }, { - "teal": 1231, - "source": 281, + "teal": 1158, + "source": 266, "pc": [ 1178 ] }, { - "teal": 1232, - "source": 281, + "teal": 1159, + "source": 266, "pc": [ 1179 ] }, { - "teal": 1233, - "source": 281, - "pc": [ - 1180 - ] - }, - { - "teal": 1234, - "source": 281, + "teal": 1168, + "source": 266, "pc": [ - 1181 + 1180, + 1181, + 1182 ] }, { - "teal": 1235, - "source": 281, + "teal": 1171, + "source": 266, "pc": [ - 1182 + 1183 ] }, { - "teal": 1243, - "source": 283, + "teal": 1175, + "source": 267, "pc": [ - 1183 + 1184, + 1185 ] }, { - "teal": 1244, - "source": 283, + "teal": 1176, + "source": 267, "pc": [ - 1184 + 1186 ] }, { - "teal": 1245, - "source": 283, + "teal": 1177, + "source": 267, "pc": [ - 1185, - 1186 + 1187 ] }, { - "teal": 1249, - "source": 284, + "teal": 1178, + "source": 267, "pc": [ - 1187, - 1188 + 1188, + 1189 ] }, { - "teal": 1250, - "source": 284, + "teal": 1188, + "source": 269, "pc": [ - 1189, 1190 ] }, { - "teal": 1254, - "source": 285, + "teal": 1189, + "source": 269, "pc": [ - 1191, - 1192 + 1191 ] }, { - "teal": 1255, - "source": 285, + "teal": 1190, + "source": 269, "pc": [ - 1193, - 1194 + 1192, + 1193 ] }, { - "teal": 1259, - "source": 286, + "teal": 1194, + "source": 270, "pc": [ - 1195, - 1196 + 1194, + 1195 ] }, { - "teal": 1260, - "source": 286, + "teal": 1195, + "source": 270, "pc": [ - 1197, - 1198 + 1196, + 1197 ] }, { - "teal": 1261, - "source": 286, + "teal": 1199, + "source": 271, "pc": [ + 1198, 1199 ] }, { - "teal": 1262, - "source": 286, + "teal": 1200, + "source": 271, "pc": [ 1200, 1201 ] }, { - "teal": 1263, - "source": 286, + "teal": 1201, + "source": 271, "pc": [ - 1202, - 1203 + 1202 ] }, { - "teal": 1264, - "source": 286, + "teal": 1202, + "source": 271, "pc": [ + 1203, 1204 ] }, { - "teal": 1265, - "source": 286, - "pc": [ - 1205 - ] - }, - { - "teal": 1266, - "source": 286, + "teal": 1206, + "source": 272, "pc": [ - 1206, - 1207 + 1205, + 1206 ] }, { - "teal": 1269, - "source": 283, + "teal": 1207, + "source": 272, "pc": [ + 1207, 1208 ] }, { - "teal": 1270, - "source": 283, + "teal": 1208, + "source": 272, "pc": [ 1209, 1210 ] }, { - "teal": 1273, - "source": 283, + "teal": 1209, + "source": 272, "pc": [ 1211 ] }, { - "teal": 1274, - "source": 278, + "teal": 1210, + "source": 272, "pc": [ - 1212 + 1212, + 1213 ] }, { - "teal": 1277, - "source": 33, + "teal": 1214, + "source": 273, "pc": [ - 1213, 1214, - 1215, + 1215 + ] + }, + { + "teal": 1215, + "source": 273, + "pc": [ 1216, - 1217, - 1218 + 1217 ] }, { - "teal": 1278, - "source": 33, + "teal": 1219, + "source": 274, + "pc": [ + 1218, + 1219 + ] + }, + { + "teal": 1220, + "source": 274, "pc": [ - 1219, 1220, 1221 ] }, { - "teal": 1279, - "source": 33, + "teal": 1221, + "source": 274, + "pc": [ + 1222 + ] + }, + { + "teal": 1222, + "source": 274, "pc": [ - 1222, 1223, - 1224, + 1224 + ] + }, + { + "teal": 1225, + "source": 269, + "pc": [ 1225 ] }, { - "teal": 1280, - "source": 33, + "teal": 1226, + "source": 269, + "pc": [ + 1226, + 1227 + ] + }, + { + "teal": 1229, + "source": 269, + "pc": [ + 1228 + ] + }, + { + "teal": 1237, + "source": 277, + "pc": [ + 1229 + ] + }, + { + "teal": 1238, + "source": 277, "pc": [ - 1226 + 1230 ] }, { - "teal": 1283, - "source": 33, + "teal": 1239, + "source": 277, "pc": [ - 1227, - 1228, - 1229, - 1230, 1231, 1232 ] }, { - "teal": 1284, - "source": 33, + "teal": 1243, + "source": 278, "pc": [ 1233, - 1234, + 1234 + ] + }, + { + "teal": 1244, + "source": 278, + "pc": [ 1235, - 1236, + 1236 + ] + }, + { + "teal": 1248, + "source": 279, + "pc": [ 1237, 1238 ] }, { - "teal": 1285, - "source": 33, + "teal": 1249, + "source": 279, "pc": [ 1239, - 1240, + 1240 + ] + }, + { + "teal": 1253, + "source": 280, + "pc": [ 1241, - 1242, + 1242 + ] + }, + { + "teal": 1254, + "source": 280, + "pc": [ 1243, 1244 ] }, { - "teal": 1286, - "source": 33, + "teal": 1255, + "source": 280, + "pc": [ + 1245 + ] + }, + { + "teal": 1256, + "source": 280, "pc": [ - 1245, 1246, - 1247, + 1247 + ] + }, + { + "teal": 1257, + "source": 280, + "pc": [ 1248, - 1249, + 1249 + ] + }, + { + "teal": 1258, + "source": 280, + "pc": [ 1250 ] }, { - "teal": 1287, - "source": 33, + "teal": 1259, + "source": 280, "pc": [ - 1251, - 1252, - 1253, - 1254, - 1255, - 1256 + 1251 ] }, { - "teal": 1288, - "source": 33, + "teal": 1260, + "source": 280, "pc": [ - 1257, - 1258, - 1259, - 1260, - 1261, - 1262 + 1252, + 1253 ] }, { - "teal": 1289, - "source": 33, + "teal": 1263, + "source": 277, "pc": [ - 1263, - 1264, - 1265, - 1266, - 1267, - 1268 + 1254 ] }, { - "teal": 1290, - "source": 33, + "teal": 1264, + "source": 277, "pc": [ - 1269, - 1270, - 1271, - 1272, - 1273, - 1274 + 1255, + 1256 ] }, { - "teal": 1291, - "source": 33, + "teal": 1267, + "source": 277, "pc": [ - 1275, - 1276, - 1277 + 1257 ] }, { - "teal": 1292, - "source": 33, + "teal": 1268, + "source": 266, + "pc": [ + 1258 + ] + }, + { + "teal": 1273, + "source": 291, + "pc": [ + 1259 + ] + }, + { + "teal": 1276, + "source": 291, + "pc": [ + 1260, + 1261, + 1262 + ] + }, + { + "teal": 1277, + "source": 291, + "pc": [ + 1263 + ] + }, + { + "teal": 1278, + "source": 291, + "pc": [ + 1264 + ] + }, + { + "teal": 1279, + "source": 291, + "pc": [ + 1265 + ] + }, + { + "teal": 1280, + "source": 291, + "pc": [ + 1266 + ] + }, + { + "teal": 1281, + "source": 291, + "pc": [ + 1267 + ] + }, + { + "teal": 1284, + "source": 291, + "pc": [ + 1268, + 1269, + 1270 + ] + }, + { + "teal": 1285, + "source": 291, + "pc": [ + 1271 + ] + }, + { + "teal": 1286, + "source": 291, + "pc": [ + 1272 + ] + }, + { + "teal": 1287, + "source": 291, + "pc": [ + 1273 + ] + }, + { + "teal": 1288, + "source": 291, + "pc": [ + 1274 + ] + }, + { + "teal": 1298, + "source": 291, + "pc": [ + 1275, + 1276, + 1277 + ] + }, + { + "teal": 1302, + "source": 292, + "pc": [ + 1278, + 1279 + ] + }, + { + "teal": 1303, + "source": 292, + "pc": [ + 1280 + ] + }, + { + "teal": 1304, + "source": 292, + "pc": [ + 1281 + ] + }, + { + "teal": 1305, + "source": 292, + "pc": [ + 1282 + ] + }, + { + "teal": 1306, + "source": 292, "pc": [ - 1278, - 1279, - 1280, - 1281, - 1282, 1283, 1284, - 1285, + 1285 + ] + }, + { + "teal": 1307, + "source": 292, + "pc": [ 1286, - 1287, - 1288, - 1289, + 1287 + ] + }, + { + "teal": 1308, + "source": 292, + "pc": [ + 1288 + ] + }, + { + "teal": 1309, + "source": 292, + "pc": [ + 1289 + ] + }, + { + "teal": 1310, + "source": 292, + "pc": [ 1290, 1291, - 1292, + 1292 + ] + }, + { + "teal": 1313, + "source": 292, + "pc": [ 1293, - 1294, + 1294 + ] + }, + { + "teal": 1316, + "source": 291, + "pc": [ 1295 ] }, { - "teal": 1293, - "source": 33, + "teal": 1321, + "source": 296, + "pc": [ + 1296, + 1297, + 1298 + ] + }, + { + "teal": 1322, + "source": 296, + "pc": [ + 1299 + ] + }, + { + "teal": 1323, + "source": 296, + "pc": [ + 1300 + ] + }, + { + "teal": 1329, + "source": 296, + "pc": [ + 1301, + 1302, + 1303 + ] + }, + { + "teal": 1332, + "source": 296, + "pc": [ + 1304 + ] + }, + { + "teal": 1336, + "source": 297, + "pc": [ + 1305, + 1306 + ] + }, + { + "teal": 1337, + "source": 297, + "pc": [ + 1307 + ] + }, + { + "teal": 1338, + "source": 297, + "pc": [ + 1308 + ] + }, + { + "teal": 1339, + "source": 297, + "pc": [ + 1309, + 1310 + ] + }, + { + "teal": 1343, + "source": 299, + "pc": [ + 1311, + 1312 + ] + }, + { + "teal": 1344, + "source": 299, + "pc": [ + 1313, + 1314 + ] + }, + { + "teal": 1345, + "source": 299, + "pc": [ + 1315 + ] + }, + { + "teal": 1346, + "source": 299, + "pc": [ + 1316, + 1317 + ] + }, + { + "teal": 1347, + "source": 299, + "pc": [ + 1318, + 1319 + ] + }, + { + "teal": 1348, + "source": 299, + "pc": [ + 1320 + ] + }, + { + "teal": 1349, + "source": 299, + "pc": [ + 1321 + ] + }, + { + "teal": 1350, + "source": 299, + "pc": [ + 1322 + ] + }, + { + "teal": 1351, + "source": 299, + "pc": [ + 1323 + ] + }, + { + "teal": 1352, + "source": 299, + "pc": [ + 1324 + ] + }, + { + "teal": 1360, + "source": 301, + "pc": [ + 1325 + ] + }, + { + "teal": 1361, + "source": 301, + "pc": [ + 1326 + ] + }, + { + "teal": 1362, + "source": 301, + "pc": [ + 1327, + 1328 + ] + }, + { + "teal": 1366, + "source": 302, + "pc": [ + 1329, + 1330 + ] + }, + { + "teal": 1367, + "source": 302, + "pc": [ + 1331, + 1332 + ] + }, + { + "teal": 1371, + "source": 303, + "pc": [ + 1333, + 1334 + ] + }, + { + "teal": 1372, + "source": 303, + "pc": [ + 1335, + 1336 + ] + }, + { + "teal": 1376, + "source": 304, + "pc": [ + 1337, + 1338 + ] + }, + { + "teal": 1377, + "source": 304, + "pc": [ + 1339, + 1340 + ] + }, + { + "teal": 1378, + "source": 304, + "pc": [ + 1341 + ] + }, + { + "teal": 1379, + "source": 304, + "pc": [ + 1342, + 1343 + ] + }, + { + "teal": 1380, + "source": 304, + "pc": [ + 1344, + 1345 + ] + }, + { + "teal": 1381, + "source": 304, + "pc": [ + 1346 + ] + }, + { + "teal": 1382, + "source": 304, + "pc": [ + 1347 + ] + }, + { + "teal": 1383, + "source": 304, + "pc": [ + 1348, + 1349 + ] + }, + { + "teal": 1386, + "source": 301, + "pc": [ + 1350 + ] + }, + { + "teal": 1387, + "source": 301, + "pc": [ + 1351, + 1352 + ] + }, + { + "teal": 1390, + "source": 301, + "pc": [ + 1353 + ] + }, + { + "teal": 1391, + "source": 296, + "pc": [ + 1354 + ] + }, + { + "teal": 1394, + "source": 35, + "pc": [ + 1355, + 1356, + 1357, + 1358, + 1359, + 1360 + ] + }, + { + "teal": 1395, + "source": 35, + "pc": [ + 1361, + 1362, + 1363 + ] + }, + { + "teal": 1396, + "source": 35, + "pc": [ + 1364, + 1365, + 1366, + 1367 + ] + }, + { + "teal": 1397, + "source": 35, + "pc": [ + 1368 + ] + }, + { + "teal": 1400, + "source": 35, + "pc": [ + 1369, + 1370, + 1371, + 1372, + 1373, + 1374 + ] + }, + { + "teal": 1401, + "source": 35, + "pc": [ + 1375, + 1376, + 1377, + 1378, + 1379, + 1380 + ] + }, + { + "teal": 1402, + "source": 35, + "pc": [ + 1381, + 1382, + 1383, + 1384, + 1385, + 1386 + ] + }, + { + "teal": 1403, + "source": 35, + "pc": [ + 1387, + 1388, + 1389, + 1390, + 1391, + 1392 + ] + }, + { + "teal": 1404, + "source": 35, + "pc": [ + 1393, + 1394, + 1395, + 1396, + 1397, + 1398 + ] + }, + { + "teal": 1405, + "source": 35, + "pc": [ + 1399, + 1400, + 1401, + 1402, + 1403, + 1404 + ] + }, + { + "teal": 1406, + "source": 35, + "pc": [ + 1405, + 1406, + 1407, + 1408, + 1409, + 1410 + ] + }, + { + "teal": 1407, + "source": 35, + "pc": [ + 1411, + 1412, + 1413, + 1414, + 1415, + 1416 + ] + }, + { + "teal": 1408, + "source": 35, + "pc": [ + 1417, + 1418, + 1419 + ] + }, + { + "teal": 1409, + "source": 35, + "pc": [ + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1426, + 1427, + 1428, + 1429, + 1430, + 1431, + 1432, + 1433, + 1434, + 1435, + 1436, + 1437 + ] + }, + { + "teal": 1410, + "source": 35, "pc": [ - 1296 + 1438 ] } ] \ No newline at end of file diff --git a/assets/arc-0059/contracts/artifacts/ControlledAddress.approval.teal b/assets/arc-0059/contracts/artifacts/ControlledAddress.approval.teal index f6f083b7f..ae521e8ff 100644 --- a/assets/arc-0059/contracts/artifacts/ControlledAddress.approval.teal +++ b/assets/arc-0059/contracts/artifacts/ControlledAddress.approval.teal @@ -37,7 +37,7 @@ switch *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_ new: proto 0 1 - // contracts/arc59.algo.ts:25 + // contracts/arc59.algo.ts:27 // sendPayment({ // rekeyTo: this.txn.sender, // }) @@ -45,7 +45,7 @@ new: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:26 + // contracts/arc59.algo.ts:28 // rekeyTo: this.txn.sender txn Sender itxn_field RekeyTo @@ -57,7 +57,7 @@ new: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:29 + // contracts/arc59.algo.ts:31 // return this.app.address; global CurrentApplicationAddress retsub diff --git a/assets/arc-0059/contracts/artifacts/ControlledAddress.arc32.json b/assets/arc-0059/contracts/artifacts/ControlledAddress.arc32.json index 85adb75b3..e25006e42 100644 --- a/assets/arc-0059/contracts/artifacts/ControlledAddress.arc32.json +++ b/assets/arc-0059/contracts/artifacts/ControlledAddress.arc32.json @@ -34,7 +34,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9EZWxldGVBcHBsaWNhdGlvbgoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gbmV3KClhZGRyZXNzCiphYmlfcm91dGVfbmV3OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG5ldygpYWRkcmVzcwoJY2FsbHN1YiBuZXcKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBuZXcoKTogQWRkcmVzcwpuZXc6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgcmVrZXlUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjYKCS8vIHJla2V5VG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWtleVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5CgkvLyByZXR1cm4gdGhpcy5hcHAuYWRkcmVzczsKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglyZXRzdWIKCipjcmVhdGVfRGVsZXRlQXBwbGljYXRpb246CgltZXRob2QgIm5ldygpYWRkcmVzcyIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfbmV3CgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9EZWxldGVBcHBsaWNhdGlvbgoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gbmV3KClhZGRyZXNzCiphYmlfcm91dGVfbmV3OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG5ldygpYWRkcmVzcwoJY2FsbHN1YiBuZXcKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBuZXcoKTogQWRkcmVzcwpuZXc6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgcmVrZXlUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgKCS8vIHJla2V5VG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWtleVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMxCgkvLyByZXR1cm4gdGhpcy5hcHAuYWRkcmVzczsKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglyZXRzdWIKCipjcmVhdGVfRGVsZXRlQXBwbGljYXRpb246CgltZXRob2QgIm5ldygpYWRkcmVzcyIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfbmV3CgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/artifacts/ControlledAddress.src_map.json b/assets/arc-0059/contracts/artifacts/ControlledAddress.src_map.json index c86e27d08..95ca85866 100644 --- a/assets/arc-0059/contracts/artifacts/ControlledAddress.src_map.json +++ b/assets/arc-0059/contracts/artifacts/ControlledAddress.src_map.json @@ -1,7 +1,7 @@ [ { "teal": 1, - "source": 22, + "source": 24, "pc": [ 0, 1, @@ -11,7 +11,7 @@ }, { "teal": 13, - "source": 22, + "source": 24, "pc": [ 4, 5 @@ -19,14 +19,14 @@ }, { "teal": 14, - "source": 22, + "source": 24, "pc": [ 6 ] }, { "teal": 15, - "source": 22, + "source": 24, "pc": [ 7, 8 @@ -34,14 +34,14 @@ }, { "teal": 16, - "source": 22, + "source": 24, "pc": [ 9 ] }, { "teal": 17, - "source": 22, + "source": 24, "pc": [ 10, 11 @@ -49,14 +49,14 @@ }, { "teal": 18, - "source": 22, + "source": 24, "pc": [ 12 ] }, { "teal": 19, - "source": 22, + "source": 24, "pc": [ 13, 14, @@ -88,14 +88,14 @@ }, { "teal": 22, - "source": 22, + "source": 24, "pc": [ 39 ] }, { "teal": 27, - "source": 23, + "source": 25, "pc": [ 40, 41, @@ -107,7 +107,7 @@ }, { "teal": 30, - "source": 23, + "source": 25, "pc": [ 46, 47, @@ -116,35 +116,35 @@ }, { "teal": 31, - "source": 23, + "source": 25, "pc": [ 49 ] }, { "teal": 32, - "source": 23, + "source": 25, "pc": [ 50 ] }, { "teal": 33, - "source": 23, + "source": 25, "pc": [ 51 ] }, { "teal": 34, - "source": 23, + "source": 25, "pc": [ 52 ] }, { "teal": 38, - "source": 23, + "source": 25, "pc": [ 53, 54, @@ -153,21 +153,21 @@ }, { "teal": 44, - "source": 25, + "source": 27, "pc": [ 56 ] }, { "teal": 45, - "source": 25, + "source": 27, "pc": [ 57 ] }, { "teal": 46, - "source": 25, + "source": 27, "pc": [ 58, 59 @@ -175,7 +175,7 @@ }, { "teal": 50, - "source": 26, + "source": 28, "pc": [ 60, 61 @@ -183,7 +183,7 @@ }, { "teal": 51, - "source": 26, + "source": 28, "pc": [ 62, 63 @@ -191,7 +191,7 @@ }, { "teal": 54, - "source": 25, + "source": 27, "pc": [ 64, 65 @@ -199,7 +199,7 @@ }, { "teal": 55, - "source": 25, + "source": 27, "pc": [ 66, 67 @@ -207,14 +207,14 @@ }, { "teal": 58, - "source": 25, + "source": 27, "pc": [ 68 ] }, { "teal": 62, - "source": 29, + "source": 31, "pc": [ 69, 70 @@ -222,14 +222,14 @@ }, { "teal": 63, - "source": 23, + "source": 25, "pc": [ 71 ] }, { "teal": 66, - "source": 22, + "source": 24, "pc": [ 72, 73, @@ -241,7 +241,7 @@ }, { "teal": 67, - "source": 22, + "source": 24, "pc": [ 78, 79, @@ -250,7 +250,7 @@ }, { "teal": 68, - "source": 22, + "source": 24, "pc": [ 81, 82, @@ -260,7 +260,7 @@ }, { "teal": 69, - "source": 22, + "source": 24, "pc": [ 85 ] diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal index c69eb4416..0487ef280 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal @@ -54,7 +54,7 @@ createApplication: arc59_optRouterIn: proto 1 0 - // contracts/arc59.algo.ts:48 + // contracts/arc59.algo.ts:50 // sendAssetTransfer({ // assetReceiver: this.app.address, // assetAmount: 0, @@ -64,17 +64,17 @@ arc59_optRouterIn: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:49 + // contracts/arc59.algo.ts:51 // assetReceiver: this.app.address global CurrentApplicationAddress itxn_field AssetReceiver - // contracts/arc59.algo.ts:50 + // contracts/arc59.algo.ts:52 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:51 + // contracts/arc59.algo.ts:53 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset @@ -120,7 +120,7 @@ arc59_getOrCreateInbox: byte 0x // *if0_condition - // contracts/arc59.algo.ts:62 + // contracts/arc59.algo.ts:64 // this.inboxes(receiver).exists frame_dig -1 // receiver: Address box_len @@ -129,7 +129,7 @@ arc59_getOrCreateInbox: bz *if0_end // *if0_consequent - // contracts/arc59.algo.ts:62 + // contracts/arc59.algo.ts:64 // return this.inboxes(receiver).value; frame_dig -1 // receiver: Address box_get @@ -137,7 +137,7 @@ arc59_getOrCreateInbox: b *arc59_getOrCreateInbox*return *if0_end: - // contracts/arc59.algo.ts:64 + // contracts/arc59.algo.ts:66 // inbox = sendMethodCall({ // onCompletion: OnCompletion.DeleteApplication, // approvalProgram: ControlledAddress.approvalProgram(), @@ -149,17 +149,17 @@ arc59_getOrCreateInbox: method "new()address" itxn_field ApplicationArgs - // contracts/arc59.algo.ts:65 + // contracts/arc59.algo.ts:67 // onCompletion: OnCompletion.DeleteApplication int 5 // DeleteApplication itxn_field OnCompletion - // contracts/arc59.algo.ts:66 + // contracts/arc59.algo.ts:68 // approvalProgram: ControlledAddress.approvalProgram() byte b64 CiABATEYFIEGCzEZCI0MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAIAEFR98dYgABFCwIkOKAAGxIrIQMQCyIIEAsgGzMgqJgARWHS/qNhoAjgH/0wA= itxn_field ApprovalProgram - // contracts/arc59.algo.ts:67 + // contracts/arc59.algo.ts:69 // clearStateProgram: ControlledAddress.clearProgram() byte b64 Cg== itxn_field ClearStateProgram @@ -177,13 +177,13 @@ arc59_getOrCreateInbox: extract 4 0 frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:70 + // contracts/arc59.algo.ts:72 // this.inboxes(receiver).value = inbox frame_dig -1 // receiver: Address frame_dig 0 // inbox: address box_put - // contracts/arc59.algo.ts:72 + // contracts/arc59.algo.ts:74 // return inbox; frame_dig 0 // inbox: address @@ -192,7 +192,7 @@ arc59_getOrCreateInbox: frame_bury 0 retsub -// arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64) +// arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64) *abi_route_arc59_getSendAssetInfo: // The ABI return prefix byte 0x151f7c75 @@ -209,7 +209,7 @@ arc59_getOrCreateInbox: == assert - // execute arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64) + // execute arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64) callsub arc59_getSendAssetInfo concat log @@ -230,9 +230,9 @@ arc59_getSendAssetInfo: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - dupn 6 + dupn 8 - // contracts/arc59.algo.ts:85 + // contracts/arc59.algo.ts:87 // routerOptedIn = this.app.address.isOptedInToAsset(asset) global CurrentApplicationAddress frame_dig -2 // asset: AssetID @@ -241,7 +241,7 @@ arc59_getSendAssetInfo: pop frame_bury 0 // routerOptedIn: bool - // contracts/arc59.algo.ts:86 + // contracts/arc59.algo.ts:88 // receiverOptedIn = receiver.isOptedInToAsset(asset) frame_dig -1 // receiver: Address frame_dig -2 // asset: AssetID @@ -250,13 +250,14 @@ arc59_getSendAssetInfo: pop frame_bury 1 // receiverOptedIn: bool - // contracts/arc59.algo.ts:87 + // contracts/arc59.algo.ts:89 // info: SendAssetInfo = { // itxns: 1, // mbr: 0, // routerOptedIn: routerOptedIn, // receiverOptedIn: receiverOptedIn, // receiverAlgoNeededForClaim: 0, + // receiverAlgoNeededForWorstCaseClaim: globals.minBalance + globals.assetOptInMinBalance + globals.minTxnFee, // } byte 0x00000000000000010000000000000000 byte 0x00 @@ -269,22 +270,29 @@ arc59_getSendAssetInfo: concat byte 0x0000000000000000 concat + global MinBalance + global AssetOptInMinBalance + + + global MinTxnFee + + + itob + concat frame_bury 2 // info: SendAssetInfo // *if1_condition - // contracts/arc59.algo.ts:95 + // contracts/arc59.algo.ts:98 // receiverOptedIn frame_dig 1 // receiverOptedIn: bool bz *if1_end // *if1_consequent - // contracts/arc59.algo.ts:95 + // contracts/arc59.algo.ts:98 // return info; frame_dig 2 // info: SendAssetInfo b *arc59_getSendAssetInfo*return *if1_end: - // contracts/arc59.algo.ts:97 + // contracts/arc59.algo.ts:100 // algoNeededToClaim = receiver.minBalance + globals.assetOptInMinBalance + globals.minTxnFee frame_dig -1 // receiver: Address acct_params_get AcctMinBalance @@ -296,7 +304,7 @@ arc59_getSendAssetInfo: frame_bury 3 // algoNeededToClaim: uint64 // *if2_condition - // contracts/arc59.algo.ts:100 + // contracts/arc59.algo.ts:103 // receiver.balance < algoNeededToClaim frame_dig -1 // receiver: Address acct_params_get AcctBalance @@ -306,37 +314,31 @@ arc59_getSendAssetInfo: bz *if2_end // *if2_consequent - // contracts/arc59.algo.ts:101 - // info.receiverAlgoNeededForClaim += algoNeededToClaim - receiver.balance + // contracts/arc59.algo.ts:104 + // info.receiverAlgoNeededForClaim = algoNeededToClaim - receiver.balance frame_dig 2 // info: SendAssetInfo store 255 // full array load 255 // full array int 17 - frame_dig 2 // info: SendAssetInfo - store 255 // full array - load 255 // full array - extract 17 8 - btoi frame_dig 3 // algoNeededToClaim: uint64 frame_dig -1 // receiver: Address acct_params_get AcctBalance pop - - + itob replace3 frame_bury 2 // info: SendAssetInfo *if2_end: // *if3_condition - // contracts/arc59.algo.ts:105 + // contracts/arc59.algo.ts:108 // !routerOptedIn frame_dig 0 // routerOptedIn: bool ! bz *if3_end // *if3_consequent - // contracts/arc59.algo.ts:106 + // contracts/arc59.algo.ts:109 // info.mbr += globals.assetOptInMinBalance frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -353,7 +355,7 @@ arc59_getSendAssetInfo: replace3 frame_bury 2 // info: SendAssetInfo - // contracts/arc59.algo.ts:107 + // contracts/arc59.algo.ts:110 // info.itxns += 1 frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -372,7 +374,7 @@ arc59_getSendAssetInfo: *if3_end: // *if4_condition - // contracts/arc59.algo.ts:110 + // contracts/arc59.algo.ts:113 // !this.inboxes(receiver).exists frame_dig -1 // receiver: Address box_len @@ -382,7 +384,7 @@ arc59_getSendAssetInfo: bz *if4_end // *if4_consequent - // contracts/arc59.algo.ts:114 + // contracts/arc59.algo.ts:117 // info.itxns += 4 frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -399,20 +401,20 @@ arc59_getSendAssetInfo: replace3 frame_bury 2 // info: SendAssetInfo - // contracts/arc59.algo.ts:117 + // contracts/arc59.algo.ts:120 // preMBR = globals.currentApplicationAddress.minBalance global CurrentApplicationAddress acct_params_get AcctMinBalance pop frame_bury 4 // preMBR: uint64 - // contracts/arc59.algo.ts:118 + // contracts/arc59.algo.ts:121 // this.inboxes(receiver).value = globals.zeroAddress frame_dig -1 // receiver: Address global ZeroAddress box_put - // contracts/arc59.algo.ts:119 + // contracts/arc59.algo.ts:122 // boxMbrDelta = globals.currentApplicationAddress.minBalance - preMBR global CurrentApplicationAddress acct_params_get AcctMinBalance @@ -421,12 +423,12 @@ arc59_getSendAssetInfo: - frame_bury 5 // boxMbrDelta: uint64 - // contracts/arc59.algo.ts:120 + // contracts/arc59.algo.ts:123 // this.inboxes(receiver).delete() frame_dig -1 // receiver: Address box_del - // contracts/arc59.algo.ts:123 + // contracts/arc59.algo.ts:126 // info.mbr += boxMbrDelta + globals.minBalance + globals.assetOptInMinBalance frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -447,13 +449,13 @@ arc59_getSendAssetInfo: replace3 frame_bury 2 // info: SendAssetInfo - // contracts/arc59.algo.ts:125 + // contracts/arc59.algo.ts:128 // return info; frame_dig 2 // info: SendAssetInfo b *arc59_getSendAssetInfo*return *if4_end: - // contracts/arc59.algo.ts:128 + // contracts/arc59.algo.ts:131 // inbox = this.inboxes(receiver).value frame_dig -1 // receiver: Address box_get @@ -461,7 +463,7 @@ arc59_getSendAssetInfo: frame_bury 6 // inbox: address // *if5_condition - // contracts/arc59.algo.ts:130 + // contracts/arc59.algo.ts:133 // !inbox.isOptedInToAsset(asset) frame_dig 6 // inbox: address frame_dig -2 // asset: AssetID @@ -472,7 +474,7 @@ arc59_getSendAssetInfo: bz *if5_end // *if5_consequent - // contracts/arc59.algo.ts:132 + // contracts/arc59.algo.ts:135 // info.itxns += 1 frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -490,7 +492,7 @@ arc59_getSendAssetInfo: frame_bury 2 // info: SendAssetInfo // *if6_condition - // contracts/arc59.algo.ts:134 + // contracts/arc59.algo.ts:137 // !(inbox.balance >= inbox.minBalance + globals.assetOptInMinBalance) frame_dig 6 // inbox: address acct_params_get AcctBalance @@ -505,7 +507,7 @@ arc59_getSendAssetInfo: bz *if6_end // *if6_consequent - // contracts/arc59.algo.ts:136 + // contracts/arc59.algo.ts:139 // info.itxns += 1 frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -522,7 +524,7 @@ arc59_getSendAssetInfo: replace3 frame_bury 2 // info: SendAssetInfo - // contracts/arc59.algo.ts:139 + // contracts/arc59.algo.ts:142 // info.mbr += globals.assetOptInMinBalance frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -542,7 +544,122 @@ arc59_getSendAssetInfo: *if6_end: *if5_end: - // contracts/arc59.algo.ts:143 + // *if7_condition + // contracts/arc59.algo.ts:147 + // inbox.balance > inbox.minBalance && info.receiverAlgoNeededForClaim !== 0 + frame_dig 6 // inbox: address + acct_params_get AcctBalance + pop + frame_dig 6 // inbox: address + acct_params_get AcctMinBalance + pop + > + dup + bz *skip_and0 + frame_dig 2 // info: SendAssetInfo + store 255 // full array + load 255 // full array + extract 17 8 + btoi + int 0 + != + && + +*skip_and0: + bz *if7_end + + // *if7_consequent + // contracts/arc59.algo.ts:152 + // algoConsumedByClaim = globals.assetOptInMinBalance + (info.itxns + 4) * globals.minTxnFee + global AssetOptInMinBalance + frame_dig 2 // info: SendAssetInfo + store 255 // full array + load 255 // full array + extract 0 8 + btoi + int 4 + + + global MinTxnFee + * + + + frame_bury 7 // algoConsumedByClaim: uint64 + + // contracts/arc59.algo.ts:153 + // inboxAlgoAvailable = inbox.balance > inbox.minBalance ? inbox.balance - inbox.minBalance : 0 + frame_dig 6 // inbox: address + acct_params_get AcctBalance + pop + frame_dig 6 // inbox: address + acct_params_get AcctMinBalance + pop + > + bz *ternary1_false + frame_dig 6 // inbox: address + acct_params_get AcctBalance + pop + frame_dig 6 // inbox: address + acct_params_get AcctMinBalance + pop + - + b *ternary1_end + +*ternary1_false: + int 0 + +*ternary1_end: + frame_bury 8 // inboxAlgoAvailable: uint64 + + // contracts/arc59.algo.ts:154 + // inboxAlgoAvailable = inboxAlgoAvailable > algoConsumedByClaim ? inboxAlgoAvailable - algoConsumedByClaim : 0 + frame_dig 8 // inboxAlgoAvailable: uint64 + frame_dig 7 // algoConsumedByClaim: uint64 + > + bz *ternary2_false + frame_dig 8 // inboxAlgoAvailable: uint64 + frame_dig 7 // algoConsumedByClaim: uint64 + - + b *ternary2_end + +*ternary2_false: + int 0 + +*ternary2_end: + frame_bury 8 // inboxAlgoAvailable: uint64 + + // *if8_condition + // contracts/arc59.algo.ts:156 + // inboxAlgoAvailable < info.receiverAlgoNeededForClaim + frame_dig 8 // inboxAlgoAvailable: uint64 + frame_dig 2 // info: SendAssetInfo + store 255 // full array + load 255 // full array + extract 17 8 + btoi + < + bz *if8_end + + // *if8_consequent + // contracts/arc59.algo.ts:157 + // info.receiverAlgoNeededForClaim -= inboxAlgoAvailable + frame_dig 2 // info: SendAssetInfo + store 255 // full array + load 255 // full array + int 17 + frame_dig 2 // info: SendAssetInfo + store 255 // full array + load 255 // full array + extract 17 8 + btoi + frame_dig 8 // inboxAlgoAvailable: uint64 + - + itob + replace3 + frame_bury 2 // info: SendAssetInfo + +*if8_end: + +*if7_end: + // contracts/arc59.algo.ts:161 // return info; frame_dig 2 // info: SendAssetInfo @@ -551,7 +668,7 @@ arc59_getSendAssetInfo: frame_bury 0 // pop all local variables from the stack - popn 6 + popn 8 retsub // arc59_sendAsset(axfer,address,uint64)address @@ -604,7 +721,7 @@ arc59_sendAsset: byte 0x dupn 2 - // contracts/arc59.algo.ts:156 + // contracts/arc59.algo.ts:174 // verifyAssetTransferTxn(axfer, { // assetReceiver: this.app.address, // }) @@ -615,8 +732,8 @@ arc59_sendAsset: == assert - // *if7_condition - // contracts/arc59.algo.ts:161 + // *if9_condition + // contracts/arc59.algo.ts:179 // receiver.isOptedInToAsset(axfer.xferAsset) frame_dig -2 // receiver: Address frame_dig -1 // axfer: AssetTransferTxn @@ -624,10 +741,10 @@ arc59_sendAsset: asset_holding_get AssetBalance swap pop - bz *if7_end + bz *if9_end - // *if7_consequent - // contracts/arc59.algo.ts:162 + // *if9_consequent + // contracts/arc59.algo.ts:180 // sendAssetTransfer({ // assetReceiver: receiver, // assetAmount: axfer.assetAmount, @@ -637,18 +754,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:163 + // contracts/arc59.algo.ts:181 // assetReceiver: receiver frame_dig -2 // receiver: Address itxn_field AssetReceiver - // contracts/arc59.algo.ts:164 + // contracts/arc59.algo.ts:182 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:165 + // contracts/arc59.algo.ts:183 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -661,16 +778,16 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // *if8_condition - // contracts/arc59.algo.ts:168 + // *if10_condition + // contracts/arc59.algo.ts:186 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 != - bz *if8_end + bz *if10_end - // *if8_consequent - // contracts/arc59.algo.ts:169 + // *if10_consequent + // contracts/arc59.algo.ts:187 // sendPayment({ // receiver: receiver, // amount: additionalReceiverFunds, @@ -679,12 +796,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:170 + // contracts/arc59.algo.ts:188 // receiver: receiver frame_dig -2 // receiver: Address itxn_field Receiver - // contracts/arc59.algo.ts:171 + // contracts/arc59.algo.ts:189 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -696,14 +813,14 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if8_end: - // contracts/arc59.algo.ts:175 +*if10_end: + // contracts/arc59.algo.ts:193 // return receiver; frame_dig -2 // receiver: Address b *arc59_sendAsset*return -*if7_end: - // contracts/arc59.algo.ts:178 +*if9_end: + // contracts/arc59.algo.ts:196 // inboxExisted = this.inboxes(receiver).exists frame_dig -2 // receiver: Address box_len @@ -711,50 +828,14 @@ arc59_sendAsset: pop frame_bury 0 // inboxExisted: bool - // contracts/arc59.algo.ts:179 + // contracts/arc59.algo.ts:197 // inbox = this.arc59_getOrCreateInbox(receiver) frame_dig -2 // receiver: Address callsub arc59_getOrCreateInbox frame_bury 1 // inbox: address - // *if9_condition - // contracts/arc59.algo.ts:181 - // additionalReceiverFunds !== 0 - frame_dig -3 // additionalReceiverFunds: uint64 - int 0 - != - bz *if9_end - - // *if9_consequent - // contracts/arc59.algo.ts:182 - // sendPayment({ - // receiver: inbox, - // amount: additionalReceiverFunds, - // }) - itxn_begin - int pay - itxn_field TypeEnum - - // contracts/arc59.algo.ts:183 - // receiver: inbox - frame_dig 1 // inbox: address - itxn_field Receiver - - // contracts/arc59.algo.ts:184 - // amount: additionalReceiverFunds - frame_dig -3 // additionalReceiverFunds: uint64 - itxn_field Amount - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - -*if9_end: - // *if10_condition - // contracts/arc59.algo.ts:188 + // *if11_condition + // contracts/arc59.algo.ts:199 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -763,32 +844,32 @@ arc59_sendAsset: swap pop ! - bz *if10_end + bz *if11_end - // *if10_consequent - // contracts/arc59.algo.ts:189 + // *if11_consequent + // contracts/arc59.algo.ts:200 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 - // *if11_condition - // contracts/arc59.algo.ts:190 + // *if12_condition + // contracts/arc59.algo.ts:201 // !inboxExisted frame_dig 0 // inboxExisted: bool ! - bz *if11_end + bz *if12_end - // *if11_consequent - // contracts/arc59.algo.ts:190 + // *if12_consequent + // contracts/arc59.algo.ts:201 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance + frame_bury 2 // inboxMbrDelta: uint64 -*if11_end: - // *if12_condition - // contracts/arc59.algo.ts:193 +*if12_end: + // *if13_condition + // contracts/arc59.algo.ts:204 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -799,10 +880,10 @@ arc59_sendAsset: frame_dig 2 // inboxMbrDelta: uint64 + < - bz *if12_end + bz *if13_end - // *if12_consequent - // contracts/arc59.algo.ts:194 + // *if13_consequent + // contracts/arc59.algo.ts:205 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -811,12 +892,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:195 + // contracts/arc59.algo.ts:206 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:196 + // contracts/arc59.algo.ts:207 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -828,8 +909,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if12_end: - // contracts/arc59.algo.ts:201 +*if13_end: + // contracts/arc59.algo.ts:212 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -840,22 +921,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:202 + // contracts/arc59.algo.ts:213 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:203 + // contracts/arc59.algo.ts:214 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:204 + // contracts/arc59.algo.ts:215 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:205 + // contracts/arc59.algo.ts:216 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -868,8 +949,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if10_end: - // contracts/arc59.algo.ts:210 +*if11_end: + // contracts/arc59.algo.ts:221 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -879,18 +960,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:211 + // contracts/arc59.algo.ts:222 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:212 + // contracts/arc59.algo.ts:223 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:213 + // contracts/arc59.algo.ts:224 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -903,7 +984,43 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:216 + // *if14_condition + // contracts/arc59.algo.ts:227 + // additionalReceiverFunds !== 0 + frame_dig -3 // additionalReceiverFunds: uint64 + int 0 + != + bz *if14_end + + // *if14_consequent + // contracts/arc59.algo.ts:228 + // sendPayment({ + // receiver: inbox, + // amount: additionalReceiverFunds, + // }) + itxn_begin + int pay + itxn_field TypeEnum + + // contracts/arc59.algo.ts:229 + // receiver: inbox + frame_dig 1 // inbox: address + itxn_field Receiver + + // contracts/arc59.algo.ts:230 + // amount: additionalReceiverFunds + frame_dig -3 // additionalReceiverFunds: uint64 + itxn_field Amount + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + +*if14_end: + // contracts/arc59.algo.ts:234 // return inbox; frame_dig 1 // inbox: address @@ -937,14 +1054,14 @@ arc59_claim: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:225 + // contracts/arc59.algo.ts:243 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:227 + // contracts/arc59.algo.ts:245 // sendAssetTransfer({ // sender: inbox, // assetReceiver: this.txn.sender, @@ -956,17 +1073,17 @@ arc59_claim: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:228 + // contracts/arc59.algo.ts:246 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:247 // assetReceiver: this.txn.sender txn Sender itxn_field AssetReceiver - // contracts/arc59.algo.ts:230 + // contracts/arc59.algo.ts:248 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -974,12 +1091,12 @@ arc59_claim: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:231 + // contracts/arc59.algo.ts:249 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:232 + // contracts/arc59.algo.ts:250 // assetCloseTo: this.txn.sender txn Sender itxn_field AssetCloseTo @@ -991,7 +1108,7 @@ arc59_claim: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:235 + // contracts/arc59.algo.ts:253 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1001,17 +1118,17 @@ arc59_claim: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:236 + // contracts/arc59.algo.ts:254 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:237 + // contracts/arc59.algo.ts:255 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:238 + // contracts/arc59.algo.ts:256 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1053,14 +1170,14 @@ arc59_reject: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:249 + // contracts/arc59.algo.ts:267 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:251 + // contracts/arc59.algo.ts:269 // sendAssetTransfer({ // sender: inbox, // assetReceiver: asa.creator, @@ -1072,19 +1189,19 @@ arc59_reject: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:252 + // contracts/arc59.algo.ts:270 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:253 + // contracts/arc59.algo.ts:271 // assetReceiver: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator pop itxn_field AssetReceiver - // contracts/arc59.algo.ts:254 + // contracts/arc59.algo.ts:272 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1092,12 +1209,12 @@ arc59_reject: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:255 + // contracts/arc59.algo.ts:273 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:256 + // contracts/arc59.algo.ts:274 // assetCloseTo: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator @@ -1111,7 +1228,7 @@ arc59_reject: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:259 + // contracts/arc59.algo.ts:277 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1121,17 +1238,17 @@ arc59_reject: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:260 + // contracts/arc59.algo.ts:278 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:261 + // contracts/arc59.algo.ts:279 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:262 + // contracts/arc59.algo.ts:280 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1180,22 +1297,22 @@ arc59_reject: arc59_getInbox: proto 1 1 - // contracts/arc59.algo.ts:274 + // contracts/arc59.algo.ts:292 // return this.inboxes(receiver).exists ? this.inboxes(receiver).value : globals.zeroAddress; frame_dig -1 // receiver: Address box_len swap pop - bz *ternary0_false + bz *ternary3_false frame_dig -1 // receiver: Address box_get assert - b *ternary0_end + b *ternary3_end -*ternary0_false: +*ternary3_false: global ZeroAddress -*ternary0_end: +*ternary3_end: retsub // arc59_claimAlgo()void @@ -1214,14 +1331,14 @@ arc59_claimAlgo: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:279 + // contracts/arc59.algo.ts:297 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:281 + // contracts/arc59.algo.ts:299 // assert(inbox.balance - inbox.minBalance !== 0) frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1234,7 +1351,7 @@ arc59_claimAlgo: != assert - // contracts/arc59.algo.ts:283 + // contracts/arc59.algo.ts:301 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1244,17 +1361,17 @@ arc59_claimAlgo: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:284 + // contracts/arc59.algo.ts:302 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:285 + // contracts/arc59.algo.ts:303 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:286 + // contracts/arc59.algo.ts:304 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1303,7 +1420,7 @@ updateApplication: *call_NoOp: method "arc59_optRouterIn(uint64)void" method "arc59_getOrCreateInbox(address)address" - method "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)" + method "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)" method "arc59_sendAsset(axfer,address,uint64)address" method "arc59_claim(uint64)void" method "arc59_reject(uint64)void" diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json index 6f499b93c..c0c0f9981 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json @@ -15,7 +15,7 @@ "no_op": "CALL" } }, - "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)": { + "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)": { "call_config": { "no_op": "CALL" } @@ -79,7 +79,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo0OAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTAKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NQoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY2CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoJY2FsbHN1YiBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhyZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IEFzc2V0SUQpOiBTZW5kQXNzZXRJbmZvCi8vCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXNzZXQgVGhlIGFzc2V0IHRvIHNlbmQKLy8KLy8gQHJldHVybnMgUmV0dXJucyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZvciBzZW5kaW5nIGFuIGFzc2V0OgovLyBUaGUgbnVtYmVyIG9mIGl0eG5zIHJlcXVpcmVkLCB0aGUgTUJSIHJlcXVpcmVkLCB3aGV0aGVyIHRoZSByb3V0ZXIgaXMgb3B0ZWQgaW4sIHdoZXRoZXIgdGhlIHJlY2VpdmVyIGlzIG9wdGVkIGluLAovLyBhbmQgaG93IG11Y2ggQUxHTyB0aGUgcmVjZWl2ZXIgd291bGQgbmVlZCB0byBjbGFpbSB0aGUgYXNzZXQKYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDYKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NQoJLy8gcm91dGVyT3B0ZWRJbiA9IHRoaXMuYXBwLmFkZHJlc3MuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg2CgkvLyByZWNlaXZlck9wdGVkSW4gPSByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIGluZm86IFNlbmRBc3NldEluZm8gPSB7CgkvLyAgICAgICBpdHhuczogMSwKCS8vICAgICAgIG1icjogMCwKCS8vICAgICAgIHJvdXRlck9wdGVkSW46IHJvdXRlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlck9wdGVkSW46IHJlY2VpdmVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltOiAwLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJlY2VpdmVyT3B0ZWRJbgoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTcKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA1CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA3CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTQKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExOAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE5CgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMwCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMyCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNAoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzYKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MwoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA2CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjMKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2NAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY1CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjgKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcwCgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmOF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzUKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MQoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODMKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjlfZW5kOgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODgKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkwCgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MAoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM3CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM4CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NgoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTBfZW5kCgoqdGVybmFyeTBfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzkKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgxCgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTJfZW5kOgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDcKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEzX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMwoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNQoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjQKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { @@ -138,7 +138,7 @@ } ], "returns": { - "type": "(uint64,uint64,bool,bool,uint64)", + "type": "(uint64,uint64,bool,bool,uint64,uint64)", "desc": "Returns the following information for sending an asset:The number of itxns required, the MBR required, whether the router is opted in, whether the receiver is opted in,and how much ALGO the receiver would need to claim the asset" } }, diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.arc4.json b/assets/arc-0059/contracts/artifacts/MutableARC59.arc4.json index 3706d8a5f..7c4ce882c 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.arc4.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.arc4.json @@ -54,7 +54,7 @@ } ], "returns": { - "type": "(uint64,uint64,bool,bool,uint64)", + "type": "(uint64,uint64,bool,bool,uint64,uint64)", "desc": "Returns the following information for sending an asset:The number of itxns required, the MBR required, whether the router is opted in, whether the receiver is opted in,and how much ALGO the receiver would need to claim the asset" } }, diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json index 80d01ca8b..cb7df17a1 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json @@ -19,59 +19,59 @@ 13, 14, 15, - 16 + 16, + 17 ] }, { "teal": 13, "source": 3, "pc": [ - 17, - 18 + 18, + 19 ] }, { "teal": 14, "source": 3, "pc": [ - 19 + 20 ] }, { "teal": 15, "source": 3, "pc": [ - 20, - 21 + 21, + 22 ] }, { "teal": 16, "source": 3, "pc": [ - 22 + 23 ] }, { "teal": 17, "source": 3, "pc": [ - 23, - 24 + 24, + 25 ] }, { "teal": 18, "source": 3, "pc": [ - 25 + 26 ] }, { "teal": 19, "source": 3, "pc": [ - 26, 27, 28, 29, @@ -96,438 +96,438 @@ 48, 49, 50, - 51 + 51, + 52 ] }, { "teal": 22, "source": 3, "pc": [ - 52 + 53 ] }, { "teal": 27, "source": 8, "pc": [ - 53, 54, - 55 + 55, + 56 ] }, { "teal": 28, "source": 8, "pc": [ - 56 + 57 ] }, { "teal": 29, "source": 8, "pc": [ - 57 + 58 ] }, { "teal": 35, "source": 8, "pc": [ - 58, 59, - 60 + 60, + 61 ] }, { "teal": 36, "source": 8, "pc": [ - 61 + 62 ] }, { "teal": 41, "source": 8, "pc": [ - 62, 63, - 64 + 64, + 65 ] }, { "teal": 42, "source": 8, "pc": [ - 65 + 66 ] }, { "teal": 45, "source": 8, "pc": [ - 66, 67, - 68 + 68, + 69 ] }, { "teal": 46, "source": 8, "pc": [ - 69 + 70 ] }, { "teal": 47, "source": 8, "pc": [ - 70 + 71 ] }, { "teal": 55, "source": 8, "pc": [ - 71, 72, - 73 + 73, + 74 ] }, { "teal": 63, "source": 8, "pc": [ - 74 + 75 ] }, { "teal": 64, "source": 8, "pc": [ - 75 + 76 ] }, { "teal": 65, "source": 8, "pc": [ - 76, - 77 + 77, + 78 ] }, { "teal": 69, "source": 8, "pc": [ - 78, - 79 + 79, + 80 ] }, { "teal": 70, "source": 8, "pc": [ - 80, - 81 + 81, + 82 ] }, { "teal": 74, "source": 8, "pc": [ - 82 + 83 ] }, { "teal": 75, "source": 8, "pc": [ - 83, - 84 + 84, + 85 ] }, { "teal": 79, "source": 8, "pc": [ - 85, - 86 + 86, + 87 ] }, { "teal": 80, "source": 8, "pc": [ - 87, - 88 + 88, + 89 ] }, { "teal": 83, "source": 8, "pc": [ - 89 + 90 ] }, { "teal": 84, "source": 8, "pc": [ - 90, - 91 + 91, + 92 ] }, { "teal": 87, "source": 8, "pc": [ - 92 + 93 ] }, { "teal": 88, "source": 8, "pc": [ - 93 + 94 ] }, { "teal": 93, "source": 8, "pc": [ - 94 + 95 ] }, { "teal": 96, "source": 8, "pc": [ - 95, 96, - 97 + 97, + 98 ] }, { "teal": 97, "source": 8, "pc": [ - 98 + 99 ] }, { "teal": 98, "source": 8, "pc": [ - 99 + 100 ] }, { "teal": 99, "source": 8, "pc": [ - 100 + 101 ] }, { "teal": 100, "source": 8, "pc": [ - 101 + 102 ] }, { "teal": 101, "source": 8, "pc": [ - 102 + 103 ] }, { "teal": 104, "source": 8, "pc": [ - 103, 104, - 105 + 105, + 106 ] }, { "teal": 105, "source": 8, "pc": [ - 106 + 107 ] }, { "teal": 106, "source": 8, "pc": [ - 107 + 108 ] }, { "teal": 107, "source": 8, "pc": [ - 108 + 109 ] }, { "teal": 108, "source": 8, "pc": [ - 109 + 110 ] }, { "teal": 117, "source": 8, "pc": [ - 110, 111, - 112 + 112, + 113 ] }, { "teal": 120, "source": 8, "pc": [ - 113 + 114 ] }, { "teal": 125, "source": 8, "pc": [ - 114, - 115 + 115, + 116 ] }, { "teal": 126, "source": 8, "pc": [ - 116 + 117 ] }, { "teal": 127, "source": 8, "pc": [ - 117 + 118 ] }, { "teal": 128, "source": 8, "pc": [ - 118 + 119 ] }, { "teal": 129, "source": 8, "pc": [ - 119, 120, - 121 + 121, + 122 ] }, { "teal": 134, "source": 8, "pc": [ - 122, - 123 + 123, + 124 ] }, { "teal": 135, "source": 8, "pc": [ - 124 + 125 ] }, { "teal": 136, "source": 8, "pc": [ - 125 + 126 ] }, { "teal": 137, "source": 8, "pc": [ - 126, 127, - 128 + 128, + 129 ] }, { "teal": 146, "source": 8, "pc": [ - 129 + 130 ] }, { "teal": 147, "source": 8, "pc": [ - 130, - 131 + 131, + 132 ] }, { "teal": 148, "source": 8, "pc": [ - 132, - 133 + 133, + 134 ] }, { "teal": 149, "source": 8, "pc": [ - 134, 135, 136, 137, 138, - 139 + 139, + 140 ] }, { "teal": 150, "source": 8, "pc": [ - 140, - 141 + 141, + 142 ] }, { "teal": 154, "source": 8, "pc": [ - 142, - 143 + 143, + 144 ] }, { "teal": 155, "source": 8, "pc": [ - 144, - 145 + 145, + 146 ] }, { "teal": 159, "source": 8, "pc": [ - 146, 147, 148, 149, @@ -614,374 +614,374 @@ 230, 231, 232, - 233 + 233, + 234 ] }, { "teal": 160, "source": 8, "pc": [ - 234, - 235 + 235, + 236 ] }, { "teal": 164, "source": 8, "pc": [ - 236, 237, - 238 + 238, + 239 ] }, { "teal": 165, "source": 8, "pc": [ - 239, - 240 + 240, + 241 ] }, { "teal": 168, "source": 8, "pc": [ - 241 + 242 ] }, { "teal": 169, "source": 8, "pc": [ - 242, - 243 + 243, + 244 ] }, { "teal": 172, "source": 8, "pc": [ - 244 + 245 ] }, { "teal": 173, "source": 8, "pc": [ - 245, - 246 + 246, + 247 ] }, { "teal": 174, "source": 8, "pc": [ - 247 + 248 ] }, { "teal": 175, "source": 8, "pc": [ - 248 + 249 ] }, { "teal": 176, "source": 8, "pc": [ - 249, - 250 + 250, + 251 ] }, { "teal": 177, "source": 8, "pc": [ - 251, 252, - 253 + 253, + 254 ] }, { "teal": 178, "source": 8, "pc": [ - 254, - 255 + 255, + 256 ] }, { "teal": 182, "source": 8, "pc": [ - 256, - 257 + 257, + 258 ] }, { "teal": 183, "source": 8, "pc": [ - 258, - 259 + 259, + 260 ] }, { "teal": 184, "source": 8, "pc": [ - 260 + 261 ] }, { "teal": 188, "source": 8, "pc": [ - 261, - 262 + 262, + 263 ] }, { "teal": 192, "source": 8, "pc": [ - 263, - 264 + 264, + 265 ] }, { "teal": 193, "source": 8, "pc": [ - 265 + 266 ] }, { "teal": 198, "source": 8, "pc": [ - 266 + 267 ] }, { "teal": 201, "source": 8, "pc": [ - 267, 268, - 269 + 269, + 270 ] }, { "teal": 202, "source": 8, "pc": [ - 270 + 271 ] }, { "teal": 205, "source": 8, "pc": [ - 271, 272, - 273 + 273, + 274 ] }, { "teal": 206, "source": 8, "pc": [ - 274 + 275 ] }, { "teal": 207, "source": 8, "pc": [ - 275 + 276 ] }, { "teal": 208, "source": 8, "pc": [ - 276 + 277 ] }, { "teal": 209, "source": 8, "pc": [ - 277 + 278 ] }, { "teal": 210, "source": 8, "pc": [ - 278 + 279 ] }, { "teal": 213, "source": 8, "pc": [ - 279, 280, - 281 + 281, + 282 ] }, { "teal": 214, "source": 8, "pc": [ - 282 + 283 ] }, { "teal": 215, "source": 8, "pc": [ - 283 + 284 ] }, { "teal": 216, "source": 8, "pc": [ - 284 + 285 ] }, { "teal": 217, "source": 8, "pc": [ - 285 + 286 ] }, { "teal": 229, "source": 8, "pc": [ - 286, 287, - 288 + 288, + 289 ] }, { "teal": 232, "source": 8, "pc": [ - 289 + 290 ] }, { "teal": 233, "source": 8, "pc": [ - 290, - 291 + 291, + 292 ] }, { "teal": 237, "source": 8, "pc": [ - 292, - 293 + 293, + 294 ] }, { "teal": 238, "source": 8, "pc": [ - 294, - 295 + 295, + 296 ] }, { "teal": 239, "source": 8, "pc": [ - 296, - 297 + 297, + 298 ] }, { "teal": 240, "source": 8, "pc": [ - 298 + 299 ] }, { "teal": 241, "source": 8, "pc": [ - 299 + 300 ] }, { "teal": 242, "source": 8, "pc": [ - 300, - 301 + 301, + 302 ] }, { "teal": 246, "source": 8, "pc": [ - 302, - 303 + 303, + 304 ] }, { "teal": 247, "source": 8, "pc": [ - 304, - 305 + 305, + 306 ] }, { "teal": 248, "source": 8, "pc": [ - 306, - 307 + 307, + 308 ] }, { "teal": 249, "source": 8, "pc": [ - 308 + 309 ] }, { "teal": 250, "source": 8, "pc": [ - 309 + 310 ] }, { "teal": 251, "source": 8, "pc": [ - 310, - 311 + 311, + 312 ] }, { - "teal": 261, + "teal": 262, "source": 8, "pc": [ - 312, 313, 314, 315, @@ -998,22 +998,16 @@ 326, 327, 328, - 329 - ] - }, - { - "teal": 262, - "source": 8, - "pc": [ - 330, - 331, - 332 + 329, + 330 ] }, { "teal": 263, "source": 8, "pc": [ + 331, + 332, 333 ] }, @@ -1021,14 +1015,14 @@ "teal": 264, "source": 8, "pc": [ - 334, - 335 + 334 ] }, { "teal": 265, "source": 8, "pc": [ + 335, 336 ] }, @@ -1043,14 +1037,14 @@ "teal": 267, "source": 8, "pc": [ - 338, - 339 + 338 ] }, { "teal": 268, "source": 8, "pc": [ + 339, 340 ] }, @@ -1065,7 +1059,13 @@ "teal": 270, "source": 8, "pc": [ - 342, + 342 + ] + }, + { + "teal": 271, + "source": 8, + "pc": [ 343, 344, 345, @@ -1074,113 +1074,113 @@ 348, 349, 350, - 351 + 351, + 352 ] }, { - "teal": 271, + "teal": 272, "source": 8, "pc": [ - 352 + 353 ] }, { - "teal": 272, + "teal": 273, "source": 8, "pc": [ - 353, - 354 + 354, + 355 ] }, { - "teal": 277, + "teal": 274, "source": 8, "pc": [ - 355, - 356 + 356, + 357 ] }, { - "teal": 278, + "teal": 275, "source": 8, "pc": [ - 357, - 358, - 359 + 358 ] }, { - "teal": 283, + "teal": 276, "source": 8, "pc": [ - 360, - 361 + 359, + 360 ] }, { - "teal": 284, + "teal": 277, "source": 8, "pc": [ - 362, - 363, - 364 + 361 ] }, { - "teal": 289, + "teal": 278, "source": 8, "pc": [ - 365, - 366 + 362 ] }, { - "teal": 290, + "teal": 279, "source": 8, "pc": [ - 367, - 368 + 363 ] }, { - "teal": 291, + "teal": 280, "source": 8, "pc": [ - 369 + 364, + 365 ] }, { - "teal": 292, + "teal": 285, "source": 8, "pc": [ - 370, - 371 + 366, + 367 ] }, { - "teal": 293, + "teal": 286, "source": 8, "pc": [ - 372 + 368, + 369, + 370 ] }, { - "teal": 294, + "teal": 291, "source": 8, "pc": [ - 373, - 374 + 371, + 372 ] }, { - "teal": 295, + "teal": 292, "source": 8, "pc": [ + 373, + 374, 375 ] }, { - "teal": 296, + "teal": 297, "source": 8, "pc": [ 376, @@ -1188,7 +1188,7 @@ ] }, { - "teal": 301, + "teal": 298, "source": 8, "pc": [ 378, @@ -1196,46 +1196,52 @@ ] }, { - "teal": 302, + "teal": 299, "source": 8, "pc": [ - 380, - 381 + 380 ] }, { - "teal": 303, + "teal": 300, "source": 8, "pc": [ + 381, 382 ] }, { - "teal": 304, + "teal": 301, "source": 8, "pc": [ - 383, - 384 + 383 ] }, { - "teal": 305, + "teal": 302, "source": 8, "pc": [ + 384, 385 ] }, { - "teal": 306, + "teal": 303, + "source": 8, + "pc": [ + 386 + ] + }, + { + "teal": 304, "source": 8, "pc": [ - 386, 387, 388 ] }, { - "teal": 311, + "teal": 309, "source": 8, "pc": [ 389, @@ -1243,7 +1249,7 @@ ] }, { - "teal": 312, + "teal": 310, "source": 8, "pc": [ 391, @@ -1251,122 +1257,122 @@ ] }, { - "teal": 313, + "teal": 311, "source": 8, "pc": [ - 393, - 394 + 393 ] }, { - "teal": 314, + "teal": 312, "source": 8, "pc": [ - 395, - 396 + 394, + 395 ] }, { - "teal": 315, + "teal": 313, "source": 8, "pc": [ - 397, - 398 + 396 ] }, { - "teal": 316, + "teal": 314, "source": 8, "pc": [ - 399, - 400 + 397, + 398, + 399 ] }, { - "teal": 317, + "teal": 319, "source": 8, "pc": [ - 401, - 402 + 400, + 401 ] }, { - "teal": 318, + "teal": 320, "source": 8, "pc": [ - 403, - 404, - 405 + 402, + 403 ] }, { - "teal": 319, + "teal": 321, "source": 8, "pc": [ - 406 + 404, + 405 ] }, { - "teal": 320, + "teal": 322, "source": 8, "pc": [ - 407, - 408 + 406, + 407 ] }, { - "teal": 321, + "teal": 323, "source": 8, "pc": [ - 409, - 410 + 408, + 409 ] }, { - "teal": 322, + "teal": 324, "source": 8, "pc": [ - 411, - 412 + 410, + 411 ] }, { - "teal": 323, + "teal": 325, "source": 8, "pc": [ + 412, 413 ] }, { - "teal": 324, + "teal": 326, "source": 8, "pc": [ 414 ] }, { - "teal": 325, + "teal": 327, "source": 8, "pc": [ 415 ] }, { - "teal": 326, + "teal": 328, "source": 8, "pc": [ 416 ] }, { - "teal": 327, + "teal": 329, "source": 8, "pc": [ 417 ] }, { - "teal": 328, + "teal": 330, "source": 8, "pc": [ 418, @@ -1374,7 +1380,7 @@ ] }, { - "teal": 334, + "teal": 336, "source": 8, "pc": [ 420, @@ -1382,14 +1388,14 @@ ] }, { - "teal": 335, + "teal": 337, "source": 8, "pc": [ 422 ] }, { - "teal": 336, + "teal": 338, "source": 8, "pc": [ 423, @@ -1398,7 +1404,7 @@ ] }, { - "teal": 341, + "teal": 343, "source": 8, "pc": [ 426, @@ -1406,7 +1412,7 @@ ] }, { - "teal": 342, + "teal": 344, "source": 8, "pc": [ 428, @@ -1414,7 +1420,7 @@ ] }, { - "teal": 343, + "teal": 345, "source": 8, "pc": [ 430, @@ -1422,7 +1428,7 @@ ] }, { - "teal": 344, + "teal": 346, "source": 8, "pc": [ 432, @@ -1430,7 +1436,7 @@ ] }, { - "teal": 345, + "teal": 347, "source": 8, "pc": [ 434, @@ -1438,7 +1444,7 @@ ] }, { - "teal": 346, + "teal": 348, "source": 8, "pc": [ 436, @@ -1446,7 +1452,7 @@ ] }, { - "teal": 347, + "teal": 349, "source": 8, "pc": [ 438, @@ -1454,7 +1460,7 @@ ] }, { - "teal": 348, + "teal": 350, "source": 8, "pc": [ 440, @@ -1463,14 +1469,14 @@ ] }, { - "teal": 349, + "teal": 351, "source": 8, "pc": [ 443 ] }, { - "teal": 350, + "teal": 352, "source": 8, "pc": [ 444, @@ -1478,28 +1484,28 @@ ] }, { - "teal": 351, + "teal": 353, "source": 8, "pc": [ 446 ] }, { - "teal": 352, + "teal": 354, "source": 8, "pc": [ 447 ] }, { - "teal": 353, + "teal": 355, "source": 8, "pc": [ 448 ] }, { - "teal": 354, + "teal": 356, "source": 8, "pc": [ 449, @@ -1507,7 +1513,7 @@ ] }, { - "teal": 358, + "teal": 360, "source": 8, "pc": [ 451, @@ -1515,7 +1521,7 @@ ] }, { - "teal": 359, + "teal": 361, "source": 8, "pc": [ 453, @@ -1523,7 +1529,7 @@ ] }, { - "teal": 360, + "teal": 362, "source": 8, "pc": [ 455, @@ -1531,14 +1537,14 @@ ] }, { - "teal": 361, + "teal": 363, "source": 8, "pc": [ 457 ] }, { - "teal": 362, + "teal": 364, "source": 8, "pc": [ 458, @@ -1546,7 +1552,7 @@ ] }, { - "teal": 363, + "teal": 365, "source": 8, "pc": [ 460, @@ -1554,7 +1560,7 @@ ] }, { - "teal": 364, + "teal": 366, "source": 8, "pc": [ 462, @@ -1562,7 +1568,7 @@ ] }, { - "teal": 365, + "teal": 367, "source": 8, "pc": [ 464, @@ -1571,42 +1577,42 @@ ] }, { - "teal": 366, + "teal": 368, "source": 8, "pc": [ 467 ] }, { - "teal": 367, + "teal": 369, "source": 8, "pc": [ 468 ] }, { - "teal": 368, + "teal": 370, "source": 8, "pc": [ 469 ] }, { - "teal": 369, + "teal": 371, "source": 8, "pc": [ 470 ] }, { - "teal": 370, + "teal": 372, "source": 8, "pc": [ 471 ] }, { - "teal": 371, + "teal": 373, "source": 8, "pc": [ 472, @@ -1614,7 +1620,7 @@ ] }, { - "teal": 377, + "teal": 379, "source": 8, "pc": [ 474, @@ -1622,35 +1628,35 @@ ] }, { - "teal": 378, + "teal": 380, "source": 8, "pc": [ 476 ] }, { - "teal": 379, + "teal": 381, "source": 8, "pc": [ 477 ] }, { - "teal": 380, + "teal": 382, "source": 8, "pc": [ 478 ] }, { - "teal": 381, + "teal": 383, "source": 8, "pc": [ 479 ] }, { - "teal": 382, + "teal": 384, "source": 8, "pc": [ 480, @@ -1659,7 +1665,7 @@ ] }, { - "teal": 387, + "teal": 389, "source": 8, "pc": [ 483, @@ -1667,7 +1673,7 @@ ] }, { - "teal": 388, + "teal": 390, "source": 8, "pc": [ 485, @@ -1675,7 +1681,7 @@ ] }, { - "teal": 389, + "teal": 391, "source": 8, "pc": [ 487, @@ -1683,14 +1689,14 @@ ] }, { - "teal": 390, + "teal": 392, "source": 8, "pc": [ 489 ] }, { - "teal": 391, + "teal": 393, "source": 8, "pc": [ 490, @@ -1698,7 +1704,7 @@ ] }, { - "teal": 392, + "teal": 394, "source": 8, "pc": [ 492, @@ -1706,7 +1712,7 @@ ] }, { - "teal": 393, + "teal": 395, "source": 8, "pc": [ 494, @@ -1714,7 +1720,7 @@ ] }, { - "teal": 394, + "teal": 396, "source": 8, "pc": [ 496, @@ -1723,42 +1729,42 @@ ] }, { - "teal": 395, + "teal": 397, "source": 8, "pc": [ 499 ] }, { - "teal": 396, + "teal": 398, "source": 8, "pc": [ 500 ] }, { - "teal": 397, + "teal": 399, "source": 8, "pc": [ 501 ] }, { - "teal": 398, + "teal": 400, "source": 8, "pc": [ 502 ] }, { - "teal": 399, + "teal": 401, "source": 8, "pc": [ 503 ] }, { - "teal": 400, + "teal": 402, "source": 8, "pc": [ 504, @@ -1766,7 +1772,7 @@ ] }, { - "teal": 404, + "teal": 406, "source": 8, "pc": [ 506, @@ -1774,7 +1780,7 @@ ] }, { - "teal": 405, + "teal": 407, "source": 8, "pc": [ 508, @@ -1782,14 +1788,14 @@ ] }, { - "teal": 406, + "teal": 408, "source": 8, "pc": [ 510 ] }, { - "teal": 407, + "teal": 409, "source": 8, "pc": [ 511, @@ -1797,7 +1803,7 @@ ] }, { - "teal": 411, + "teal": 413, "source": 8, "pc": [ 513, @@ -1805,7 +1811,7 @@ ] }, { - "teal": 412, + "teal": 414, "source": 8, "pc": [ 515, @@ -1813,14 +1819,14 @@ ] }, { - "teal": 413, + "teal": 415, "source": 8, "pc": [ 517 ] }, { - "teal": 417, + "teal": 419, "source": 8, "pc": [ 518, @@ -1828,7 +1834,7 @@ ] }, { - "teal": 418, + "teal": 420, "source": 8, "pc": [ 520, @@ -1836,14 +1842,14 @@ ] }, { - "teal": 419, + "teal": 421, "source": 8, "pc": [ 522 ] }, { - "teal": 420, + "teal": 422, "source": 8, "pc": [ 523, @@ -1851,14 +1857,14 @@ ] }, { - "teal": 421, + "teal": 423, "source": 8, "pc": [ 525 ] }, { - "teal": 422, + "teal": 424, "source": 8, "pc": [ 526, @@ -1866,7 +1872,7 @@ ] }, { - "teal": 426, + "teal": 428, "source": 8, "pc": [ 528, @@ -1874,14 +1880,14 @@ ] }, { - "teal": 427, + "teal": 429, "source": 8, "pc": [ 530 ] }, { - "teal": 431, + "teal": 433, "source": 8, "pc": [ 531, @@ -1889,7 +1895,7 @@ ] }, { - "teal": 432, + "teal": 434, "source": 8, "pc": [ 533, @@ -1897,7 +1903,7 @@ ] }, { - "teal": 433, + "teal": 435, "source": 8, "pc": [ 535, @@ -1905,7 +1911,7 @@ ] }, { - "teal": 434, + "teal": 436, "source": 8, "pc": [ 537, @@ -1913,7 +1919,7 @@ ] }, { - "teal": 435, + "teal": 437, "source": 8, "pc": [ 539, @@ -1921,7 +1927,7 @@ ] }, { - "teal": 436, + "teal": 438, "source": 8, "pc": [ 541, @@ -1929,7 +1935,7 @@ ] }, { - "teal": 437, + "teal": 439, "source": 8, "pc": [ 543, @@ -1937,7 +1943,7 @@ ] }, { - "teal": 438, + "teal": 440, "source": 8, "pc": [ 545, @@ -1946,14 +1952,14 @@ ] }, { - "teal": 439, + "teal": 441, "source": 8, "pc": [ 548 ] }, { - "teal": 440, + "teal": 442, "source": 8, "pc": [ 549, @@ -1961,7 +1967,7 @@ ] }, { - "teal": 441, + "teal": 443, "source": 8, "pc": [ 551, @@ -1969,14 +1975,14 @@ ] }, { - "teal": 442, + "teal": 444, "source": 8, "pc": [ 553 ] }, { - "teal": 443, + "teal": 445, "source": 8, "pc": [ 554, @@ -1984,35 +1990,35 @@ ] }, { - "teal": 444, + "teal": 446, "source": 8, "pc": [ 556 ] }, { - "teal": 445, + "teal": 447, "source": 8, "pc": [ 557 ] }, { - "teal": 446, + "teal": 448, "source": 8, "pc": [ 558 ] }, { - "teal": 447, + "teal": 449, "source": 8, "pc": [ 559 ] }, { - "teal": 448, + "teal": 450, "source": 8, "pc": [ 560, @@ -2020,7 +2026,7 @@ ] }, { - "teal": 452, + "teal": 454, "source": 8, "pc": [ 562, @@ -2028,7 +2034,7 @@ ] }, { - "teal": 453, + "teal": 455, "source": 8, "pc": [ 564, @@ -2037,7 +2043,7 @@ ] }, { - "teal": 458, + "teal": 460, "source": 8, "pc": [ 567, @@ -2045,21 +2051,21 @@ ] }, { - "teal": 459, + "teal": 461, "source": 8, "pc": [ 569 ] }, { - "teal": 460, + "teal": 462, "source": 8, "pc": [ 570 ] }, { - "teal": 461, + "teal": 463, "source": 8, "pc": [ 571, @@ -2067,7 +2073,7 @@ ] }, { - "teal": 466, + "teal": 468, "source": 8, "pc": [ 573, @@ -2075,7 +2081,7 @@ ] }, { - "teal": 467, + "teal": 469, "source": 8, "pc": [ 575, @@ -2083,7 +2089,7 @@ ] }, { - "teal": 468, + "teal": 470, "source": 8, "pc": [ 577, @@ -2091,28 +2097,28 @@ ] }, { - "teal": 469, + "teal": 471, "source": 8, "pc": [ 579 ] }, { - "teal": 470, + "teal": 472, "source": 8, "pc": [ 580 ] }, { - "teal": 471, + "teal": 473, "source": 8, "pc": [ 581 ] }, { - "teal": 472, + "teal": 474, "source": 8, "pc": [ 582, @@ -2121,7 +2127,7 @@ ] }, { - "teal": 477, + "teal": 479, "source": 8, "pc": [ 585, @@ -2129,7 +2135,7 @@ ] }, { - "teal": 478, + "teal": 480, "source": 8, "pc": [ 587, @@ -2137,7 +2143,7 @@ ] }, { - "teal": 479, + "teal": 481, "source": 8, "pc": [ 589, @@ -2145,14 +2151,14 @@ ] }, { - "teal": 480, + "teal": 482, "source": 8, "pc": [ 591 ] }, { - "teal": 481, + "teal": 483, "source": 8, "pc": [ 592, @@ -2160,7 +2166,7 @@ ] }, { - "teal": 482, + "teal": 484, "source": 8, "pc": [ 594, @@ -2168,7 +2174,7 @@ ] }, { - "teal": 483, + "teal": 485, "source": 8, "pc": [ 596, @@ -2176,7 +2182,7 @@ ] }, { - "teal": 484, + "teal": 486, "source": 8, "pc": [ 598, @@ -2185,42 +2191,42 @@ ] }, { - "teal": 485, + "teal": 487, "source": 8, "pc": [ 601 ] }, { - "teal": 486, + "teal": 488, "source": 8, "pc": [ 602 ] }, { - "teal": 487, + "teal": 489, "source": 8, "pc": [ 603 ] }, { - "teal": 488, + "teal": 490, "source": 8, "pc": [ 604 ] }, { - "teal": 489, + "teal": 491, "source": 8, "pc": [ 605 ] }, { - "teal": 490, + "teal": 492, "source": 8, "pc": [ 606, @@ -2228,7 +2234,7 @@ ] }, { - "teal": 495, + "teal": 497, "source": 8, "pc": [ 608, @@ -2236,7 +2242,7 @@ ] }, { - "teal": 496, + "teal": 498, "source": 8, "pc": [ 610, @@ -2244,14 +2250,14 @@ ] }, { - "teal": 497, + "teal": 499, "source": 8, "pc": [ 612 ] }, { - "teal": 498, + "teal": 500, "source": 8, "pc": [ 613, @@ -2259,7 +2265,7 @@ ] }, { - "teal": 499, + "teal": 501, "source": 8, "pc": [ 615, @@ -2267,14 +2273,14 @@ ] }, { - "teal": 500, + "teal": 502, "source": 8, "pc": [ 617 ] }, { - "teal": 501, + "teal": 503, "source": 8, "pc": [ 618, @@ -2282,28 +2288,28 @@ ] }, { - "teal": 502, + "teal": 504, "source": 8, "pc": [ 620 ] }, { - "teal": 503, + "teal": 505, "source": 8, "pc": [ 621 ] }, { - "teal": 504, + "teal": 506, "source": 8, "pc": [ 622 ] }, { - "teal": 505, + "teal": 507, "source": 8, "pc": [ 623, @@ -2312,7 +2318,7 @@ ] }, { - "teal": 510, + "teal": 512, "source": 8, "pc": [ 626, @@ -2320,7 +2326,7 @@ ] }, { - "teal": 511, + "teal": 513, "source": 8, "pc": [ 628, @@ -2328,7 +2334,7 @@ ] }, { - "teal": 512, + "teal": 514, "source": 8, "pc": [ 630, @@ -2336,14 +2342,14 @@ ] }, { - "teal": 513, + "teal": 515, "source": 8, "pc": [ 632 ] }, { - "teal": 514, + "teal": 516, "source": 8, "pc": [ 633, @@ -2351,7 +2357,7 @@ ] }, { - "teal": 515, + "teal": 517, "source": 8, "pc": [ 635, @@ -2359,7 +2365,7 @@ ] }, { - "teal": 516, + "teal": 518, "source": 8, "pc": [ 637, @@ -2367,7 +2373,7 @@ ] }, { - "teal": 517, + "teal": 519, "source": 8, "pc": [ 639, @@ -2376,42 +2382,42 @@ ] }, { - "teal": 518, + "teal": 520, "source": 8, "pc": [ 642 ] }, { - "teal": 519, + "teal": 521, "source": 8, "pc": [ 643 ] }, { - "teal": 520, + "teal": 522, "source": 8, "pc": [ 644 ] }, { - "teal": 521, + "teal": 523, "source": 8, "pc": [ 645 ] }, { - "teal": 522, + "teal": 524, "source": 8, "pc": [ 646 ] }, { - "teal": 523, + "teal": 525, "source": 8, "pc": [ 647, @@ -2419,7 +2425,7 @@ ] }, { - "teal": 527, + "teal": 529, "source": 8, "pc": [ 649, @@ -2427,7 +2433,7 @@ ] }, { - "teal": 528, + "teal": 530, "source": 8, "pc": [ 651, @@ -2435,7 +2441,7 @@ ] }, { - "teal": 529, + "teal": 531, "source": 8, "pc": [ 653, @@ -2443,7 +2449,7 @@ ] }, { - "teal": 530, + "teal": 532, "source": 8, "pc": [ 655, @@ -2451,7 +2457,7 @@ ] }, { - "teal": 531, + "teal": 533, "source": 8, "pc": [ 657, @@ -2459,7 +2465,7 @@ ] }, { - "teal": 532, + "teal": 534, "source": 8, "pc": [ 659, @@ -2467,7 +2473,7 @@ ] }, { - "teal": 533, + "teal": 535, "source": 8, "pc": [ 661, @@ -2475,7 +2481,7 @@ ] }, { - "teal": 534, + "teal": 536, "source": 8, "pc": [ 663, @@ -2484,14 +2490,14 @@ ] }, { - "teal": 535, + "teal": 537, "source": 8, "pc": [ 666 ] }, { - "teal": 536, + "teal": 538, "source": 8, "pc": [ 667, @@ -2499,28 +2505,28 @@ ] }, { - "teal": 537, + "teal": 539, "source": 8, "pc": [ 669 ] }, { - "teal": 538, + "teal": 540, "source": 8, "pc": [ 670 ] }, { - "teal": 539, + "teal": 541, "source": 8, "pc": [ 671 ] }, { - "teal": 540, + "teal": 542, "source": 8, "pc": [ 672, @@ -2528,7 +2534,7 @@ ] }, { - "teal": 547, + "teal": 550, "source": 8, "pc": [ 674, @@ -2544,216 +2550,192 @@ ] }, { - "teal": 554, + "teal": 552, "source": 8, "pc": [ - 678, - 679 + 678 ] }, { - "teal": 555, + "teal": 553, "source": 8, "pc": [ + 679, 680 ] }, { - "teal": 560, + "teal": 554, "source": 8, "pc": [ - 681 + 681, + 682 ] }, { - "teal": 563, + "teal": 555, "source": 8, "pc": [ - 682, - 683, - 684 + 683 ] }, { - "teal": 564, + "teal": 556, "source": 8, "pc": [ - 685 + 684 ] }, { - "teal": 567, + "teal": 557, "source": 8, "pc": [ - 686, - 687, - 688 + 685 ] }, { - "teal": 568, + "teal": 558, "source": 8, "pc": [ - 689 + 686, + 687, + 688 ] }, { - "teal": 569, + "teal": 559, "source": 8, "pc": [ + 689, 690 ] }, { - "teal": 570, - "source": 8, - "pc": [ - 691 - ] - }, - { - "teal": 571, + "teal": 560, "source": 8, "pc": [ + 691, 692 ] }, { - "teal": 572, - "source": 8, - "pc": [ - 693 - ] - }, - { - "teal": 575, - "source": 8, - "pc": [ - 694, - 695 - ] - }, - { - "teal": 576, + "teal": 561, "source": 8, "pc": [ - 696 + 693, + 694 ] }, { - "teal": 577, + "teal": 562, "source": 8, "pc": [ + 695, + 696, 697 ] }, { - "teal": 578, + "teal": 563, "source": 8, "pc": [ 698 ] }, { - "teal": 579, + "teal": 564, "source": 8, "pc": [ - 699, - 700 + 699 ] }, { - "teal": 580, + "teal": 565, "source": 8, "pc": [ - 701 + 700 ] }, { - "teal": 581, + "teal": 566, "source": 8, "pc": [ - 702 + 701 ] }, { - "teal": 582, + "teal": 569, "source": 8, "pc": [ - 703 + 702, + 703, + 704 ] }, { - "teal": 585, + "teal": 574, "source": 8, "pc": [ - 704, 705, 706 ] }, { - "teal": 586, - "source": 8, - "pc": [ - 707 - ] - }, - { - "teal": 587, + "teal": 575, "source": 8, "pc": [ + 707, 708 ] }, { - "teal": 588, + "teal": 576, "source": 8, "pc": [ - 709 + 709, + 710 ] }, { - "teal": 589, + "teal": 577, "source": 8, "pc": [ - 710 + 711, + 712 ] }, { - "teal": 601, + "teal": 578, "source": 8, "pc": [ - 711, - 712, - 713 + 713, + 714, + 715 ] }, { - "teal": 604, + "teal": 579, "source": 8, "pc": [ - 714 + 716 ] }, { - "teal": 605, + "teal": 580, "source": 8, "pc": [ - 715, - 716 + 717 ] }, { - "teal": 612, + "teal": 581, "source": 8, "pc": [ - 717, 718 ] }, { - "teal": 613, + "teal": 582, "source": 8, "pc": [ 719, @@ -2761,29 +2743,29 @@ ] }, { - "teal": 614, + "teal": 583, "source": 8, "pc": [ - 721, - 722 + 721 ] }, { - "teal": 615, + "teal": 584, "source": 8, "pc": [ - 723 + 722 ] }, { - "teal": 616, + "teal": 585, "source": 8, "pc": [ + 723, 724 ] }, { - "teal": 621, + "teal": 589, "source": 8, "pc": [ 725, @@ -2791,7 +2773,7 @@ ] }, { - "teal": 622, + "teal": 590, "source": 8, "pc": [ 727, @@ -2799,76 +2781,76 @@ ] }, { - "teal": 623, + "teal": 591, "source": 8, "pc": [ - 729, - 730 + 729 ] }, { - "teal": 624, + "teal": 592, "source": 8, "pc": [ - 731, - 732 + 730, + 731 ] }, { - "teal": 625, + "teal": 593, "source": 8, "pc": [ + 732, 733 ] }, { - "teal": 626, + "teal": 594, "source": 8, "pc": [ 734 ] }, { - "teal": 627, + "teal": 595, "source": 8, "pc": [ - 735, - 736, - 737 + 735 ] }, { - "teal": 636, + "teal": 596, "source": 8, "pc": [ + 736, + 737, 738 ] }, { - "teal": 637, + "teal": 597, "source": 8, "pc": [ - 739 + 739, + 740 ] }, { - "teal": 638, + "teal": 598, "source": 8, "pc": [ - 740, - 741 + 741, + 742 ] }, { - "teal": 642, + "teal": 599, "source": 8, "pc": [ - 742, 743 ] }, { - "teal": 643, + "teal": 600, "source": 8, "pc": [ 744, @@ -2876,7 +2858,7 @@ ] }, { - "teal": 647, + "teal": 601, "source": 8, "pc": [ 746, @@ -2884,31 +2866,37 @@ ] }, { - "teal": 648, + "teal": 602, + "source": 8, + "pc": [ + 748 + ] + }, + { + "teal": 603, "source": 8, "pc": [ - 748, 749 ] }, { - "teal": 649, + "teal": 604, "source": 8, "pc": [ 750, - 751 + 751, + 752 ] }, { - "teal": 653, + "teal": 607, "source": 8, "pc": [ - 752, 753 ] }, { - "teal": 654, + "teal": 610, "source": 8, "pc": [ 754, @@ -2916,7 +2904,7 @@ ] }, { - "teal": 655, + "teal": 614, "source": 8, "pc": [ 756, @@ -2924,82 +2912,70 @@ ] }, { - "teal": 658, + "teal": 615, "source": 8, "pc": [ - 758 + 758, + 759 ] }, { - "teal": 659, + "teal": 616, "source": 8, "pc": [ - 759, 760 ] }, { - "teal": 662, - "source": 8, - "pc": [ - 761 - ] - }, - { - "teal": 667, + "teal": 617, "source": 8, "pc": [ + 761, 762, 763 ] }, { - "teal": 668, - "source": 8, - "pc": [ - 764 - ] - }, - { - "teal": 669, + "teal": 618, "source": 8, "pc": [ + 764, 765 ] }, { - "teal": 670, + "teal": 619, "source": 8, "pc": [ 766, - 767, - 768 + 767 ] }, { - "teal": 678, + "teal": 620, "source": 8, "pc": [ - 769 + 768 ] }, { - "teal": 679, + "teal": 621, "source": 8, "pc": [ - 770 + 769, + 770, + 771 ] }, { - "teal": 680, + "teal": 624, "source": 8, "pc": [ - 771, 772 ] }, { - "teal": 684, + "teal": 627, "source": 8, "pc": [ 773, @@ -3007,7 +2983,7 @@ ] }, { - "teal": 685, + "teal": 632, "source": 8, "pc": [ 775, @@ -3015,7 +2991,7 @@ ] }, { - "teal": 689, + "teal": 633, "source": 8, "pc": [ 777, @@ -3023,7 +2999,7 @@ ] }, { - "teal": 690, + "teal": 634, "source": 8, "pc": [ 779, @@ -3031,75 +3007,63 @@ ] }, { - "teal": 693, - "source": 8, - "pc": [ - 781 - ] - }, - { - "teal": 694, + "teal": 635, "source": 8, "pc": [ - 782, - 783 + 781, + 782 ] }, { - "teal": 697, + "teal": 636, "source": 8, "pc": [ - 784 + 783, + 784, + 785 ] }, { - "teal": 702, + "teal": 637, "source": 8, "pc": [ - 785, 786 ] }, { - "teal": 703, + "teal": 638, "source": 8, "pc": [ - 787, - 788, - 789 + 787 ] }, { - "teal": 708, + "teal": 639, "source": 8, "pc": [ - 790, - 791 + 788, + 789, + 790 ] }, { - "teal": 709, + "teal": 644, "source": 8, "pc": [ + 791, 792 ] }, { - "teal": 710, - "source": 8, - "pc": [ - 793 - ] - }, - { - "teal": 711, + "teal": 645, "source": 8, "pc": [ + 793, 794 ] }, { - "teal": 712, + "teal": 646, "source": 8, "pc": [ 795, @@ -3107,7 +3071,7 @@ ] }, { - "teal": 716, + "teal": 647, "source": 8, "pc": [ 797, @@ -3115,193 +3079,211 @@ ] }, { - "teal": 717, + "teal": 648, "source": 8, "pc": [ 799, - 800, - 801 + 800 ] }, { - "teal": 718, + "teal": 649, "source": 8, "pc": [ - 802, - 803 + 801, + 802 ] }, { - "teal": 723, + "teal": 650, "source": 8, "pc": [ - 804, - 805 + 803, + 804 ] }, { - "teal": 724, + "teal": 651, "source": 8, "pc": [ - 806 + 805, + 806, + 807 ] }, { - "teal": 725, + "teal": 652, "source": 8, "pc": [ - 807 + 808 ] }, { - "teal": 726, + "teal": 653, "source": 8, "pc": [ - 808, 809, 810 ] }, { - "teal": 734, + "teal": 654, "source": 8, "pc": [ 811 ] }, { - "teal": 735, + "teal": 655, "source": 8, "pc": [ 812 ] }, { - "teal": 736, + "teal": 656, "source": 8, "pc": [ - 813, - 814 + 813 ] }, { - "teal": 740, + "teal": 657, "source": 8, "pc": [ - 815, - 816 + 814, + 815 ] }, { - "teal": 741, + "teal": 664, "source": 8, "pc": [ - 817, - 818 + 816, + 817 ] }, { - "teal": 745, + "teal": 668, "source": 8, "pc": [ - 819, - 820 + 818, + 819 ] }, { - "teal": 746, + "teal": 671, "source": 8, "pc": [ - 821, - 822 + 820, + 821 ] }, { - "teal": 749, + "teal": 672, "source": 8, "pc": [ - 823 + 822 ] }, { - "teal": 750, + "teal": 677, "source": 8, "pc": [ - 824, - 825 + 823 ] }, { - "teal": 753, + "teal": 680, "source": 8, "pc": [ + 824, + 825, 826 ] }, { - "teal": 759, + "teal": 681, "source": 8, "pc": [ - 827, - 828 + 827 ] }, { - "teal": 760, + "teal": 684, "source": 8, "pc": [ + 828, 829, 830 ] }, { - "teal": 761, + "teal": 685, + "source": 8, + "pc": [ + 831 + ] + }, + { + "teal": 686, "source": 8, "pc": [ - 831, 832 ] }, { - "teal": 762, + "teal": 687, + "source": 8, + "pc": [ + 833 + ] + }, + { + "teal": 688, "source": 8, "pc": [ - 833, 834 ] }, { - "teal": 763, + "teal": 689, "source": 8, "pc": [ 835 ] }, { - "teal": 764, + "teal": 692, "source": 8, "pc": [ - 836 + 836, + 837 ] }, { - "teal": 765, + "teal": 693, "source": 8, "pc": [ - 837 + 838 ] }, { - "teal": 766, + "teal": 694, + "source": 8, + "pc": [ + 839 + ] + }, + { + "teal": 695, "source": 8, "pc": [ - 838, - 839, 840 ] }, { - "teal": 771, + "teal": 696, "source": 8, "pc": [ 841, @@ -3309,93 +3291,105 @@ ] }, { - "teal": 772, + "teal": 697, + "source": 8, + "pc": [ + 843 + ] + }, + { + "teal": 698, "source": 8, "pc": [ - 843, 844 ] }, { - "teal": 777, + "teal": 699, + "source": 8, + "pc": [ + 845 + ] + }, + { + "teal": 702, "source": 8, "pc": [ - 845, - 846 + 846, + 847, + 848 ] }, { - "teal": 778, + "teal": 703, "source": 8, "pc": [ - 847 + 849 ] }, { - "teal": 779, + "teal": 704, "source": 8, "pc": [ - 848, - 849, 850 ] }, { - "teal": 784, + "teal": 705, "source": 8, "pc": [ - 851, - 852 + 851 ] }, { - "teal": 785, + "teal": 706, "source": 8, "pc": [ - 853, - 854 + 852 ] }, { - "teal": 786, + "teal": 718, "source": 8, "pc": [ + 853, + 854, 855 ] }, { - "teal": 787, + "teal": 721, "source": 8, "pc": [ - 856, - 857 + 856 ] }, { - "teal": 793, + "teal": 722, "source": 8, "pc": [ - 858, - 859 + 857, + 858 ] }, { - "teal": 794, + "teal": 729, "source": 8, "pc": [ - 860, - 861 + 859, + 860 ] }, { - "teal": 795, + "teal": 730, "source": 8, "pc": [ + 861, 862 ] }, { - "teal": 796, + "teal": 731, "source": 8, "pc": [ 863, @@ -3403,114 +3397,114 @@ ] }, { - "teal": 797, + "teal": 732, "source": 8, "pc": [ - 865, - 866 + 865 ] }, { - "teal": 798, + "teal": 733, "source": 8, "pc": [ - 867 + 866 ] }, { - "teal": 799, + "teal": 738, "source": 8, "pc": [ - 868, - 869 + 867, + 868 ] }, { - "teal": 800, + "teal": 739, "source": 8, "pc": [ + 869, 870 ] }, { - "teal": 801, + "teal": 740, "source": 8, "pc": [ - 871 + 871, + 872 ] }, { - "teal": 802, + "teal": 741, "source": 8, "pc": [ - 872, 873, 874 ] }, { - "teal": 810, + "teal": 742, "source": 8, "pc": [ 875 ] }, { - "teal": 811, + "teal": 743, "source": 8, "pc": [ 876 ] }, { - "teal": 812, + "teal": 744, "source": 8, "pc": [ 877, - 878 + 878, + 879 ] }, { - "teal": 816, + "teal": 753, "source": 8, "pc": [ - 879, 880 ] }, { - "teal": 817, + "teal": 754, "source": 8, "pc": [ - 881, - 882 + 881 ] }, { - "teal": 821, + "teal": 755, "source": 8, "pc": [ - 883, - 884 + 882, + 883 ] }, { - "teal": 822, + "teal": 759, "source": 8, "pc": [ - 885, - 886 + 884, + 885 ] }, { - "teal": 825, + "teal": 760, "source": 8, "pc": [ + 886, 887 ] }, { - "teal": 826, + "teal": 764, "source": 8, "pc": [ 888, @@ -3518,60 +3512,54 @@ ] }, { - "teal": 829, - "source": 8, - "pc": [ - 890 - ] - }, - { - "teal": 839, + "teal": 765, "source": 8, "pc": [ + 890, 891 ] }, { - "teal": 840, + "teal": 766, "source": 8, "pc": [ - 892 + 892, + 893 ] }, { - "teal": 841, + "teal": 770, "source": 8, "pc": [ - 893, - 894 + 894, + 895 ] }, { - "teal": 845, + "teal": 771, "source": 8, "pc": [ - 895, - 896 + 896, + 897 ] }, { - "teal": 846, + "teal": 772, "source": 8, "pc": [ - 897, - 898 + 898, + 899 ] }, { - "teal": 850, + "teal": 775, "source": 8, "pc": [ - 899, 900 ] }, { - "teal": 851, + "teal": 776, "source": 8, "pc": [ 901, @@ -3579,14 +3567,14 @@ ] }, { - "teal": 855, + "teal": 779, "source": 8, "pc": [ 903 ] }, { - "teal": 856, + "teal": 784, "source": 8, "pc": [ 904, @@ -3594,38 +3582,44 @@ ] }, { - "teal": 860, + "teal": 785, + "source": 8, + "pc": [ + 906 + ] + }, + { + "teal": 786, "source": 8, "pc": [ - 906, 907 ] }, { - "teal": 861, + "teal": 787, "source": 8, "pc": [ 908, - 909 + 909, + 910 ] }, { - "teal": 862, + "teal": 795, "source": 8, "pc": [ - 910, 911 ] }, { - "teal": 865, + "teal": 796, "source": 8, "pc": [ 912 ] }, { - "teal": 866, + "teal": 797, "source": 8, "pc": [ 913, @@ -3633,52 +3627,46 @@ ] }, { - "teal": 869, - "source": 8, - "pc": [ - 915 - ] - }, - { - "teal": 878, + "teal": 801, "source": 8, "pc": [ + 915, 916 ] }, { - "teal": 879, + "teal": 802, "source": 8, "pc": [ - 917 + 917, + 918 ] }, { - "teal": 880, + "teal": 806, "source": 8, "pc": [ - 918, - 919 + 919, + 920 ] }, { - "teal": 884, + "teal": 807, "source": 8, "pc": [ - 920, - 921 + 921, + 922 ] }, { - "teal": 885, + "teal": 810, "source": 8, "pc": [ - 922, 923 ] }, { - "teal": 889, + "teal": 811, "source": 8, "pc": [ 924, @@ -3686,31 +3674,31 @@ ] }, { - "teal": 890, + "teal": 814, "source": 8, "pc": [ - 926, - 927 + 926 ] }, { - "teal": 891, + "teal": 819, "source": 8, "pc": [ - 928, - 929 + 927, + 928 ] }, { - "teal": 895, + "teal": 820, "source": 8, "pc": [ + 929, 930, 931 ] }, { - "teal": 896, + "teal": 825, "source": 8, "pc": [ 932, @@ -3718,53 +3706,53 @@ ] }, { - "teal": 897, + "teal": 826, "source": 8, "pc": [ - 934, - 935 + 934 ] }, { - "teal": 900, + "teal": 827, "source": 8, "pc": [ - 936 + 935 ] }, { - "teal": 901, + "teal": 828, "source": 8, "pc": [ - 937, - 938 + 936 ] }, { - "teal": 904, + "teal": 829, "source": 8, "pc": [ - 939 + 937, + 938 ] }, { - "teal": 908, + "teal": 833, "source": 8, "pc": [ - 940, - 941 + 939, + 940 ] }, { - "teal": 912, + "teal": 834, "source": 8, "pc": [ + 941, 942, 943 ] }, { - "teal": 915, + "teal": 835, "source": 8, "pc": [ 944, @@ -3772,69 +3760,69 @@ ] }, { - "teal": 916, + "teal": 840, "source": 8, "pc": [ - 946 + 946, + 947 ] }, { - "teal": 921, + "teal": 841, "source": 8, "pc": [ - 947, 948, 949 ] }, { - "teal": 922, + "teal": 842, "source": 8, "pc": [ - 950 + 950, + 951 ] }, { - "teal": 925, + "teal": 843, "source": 8, "pc": [ - 951, 952, 953 ] }, { - "teal": 926, + "teal": 844, "source": 8, "pc": [ 954 ] }, { - "teal": 927, + "teal": 845, "source": 8, "pc": [ 955 ] }, { - "teal": 935, + "teal": 846, "source": 8, "pc": [ - 956, - 957, - 958 + 956 ] }, { - "teal": 938, + "teal": 847, "source": 8, "pc": [ + 957, + 958, 959 ] }, { - "teal": 942, + "teal": 852, "source": 8, "pc": [ 960, @@ -3842,21 +3830,15 @@ ] }, { - "teal": 943, - "source": 8, - "pc": [ - 962 - ] - }, - { - "teal": 944, + "teal": 853, "source": 8, "pc": [ + 962, 963 ] }, { - "teal": 945, + "teal": 858, "source": 8, "pc": [ 964, @@ -3864,29 +3846,23 @@ ] }, { - "teal": 955, + "teal": 859, "source": 8, "pc": [ 966 ] }, { - "teal": 956, - "source": 8, - "pc": [ - 967 - ] - }, - { - "teal": 957, + "teal": 860, "source": 8, "pc": [ + 967, 968, 969 ] }, { - "teal": 961, + "teal": 865, "source": 8, "pc": [ 970, @@ -3894,7 +3870,7 @@ ] }, { - "teal": 962, + "teal": 866, "source": 8, "pc": [ 972, @@ -3902,39 +3878,45 @@ ] }, { - "teal": 966, + "teal": 867, "source": 8, "pc": [ - 974, - 975 + 974 ] }, { - "teal": 967, + "teal": 868, "source": 8, "pc": [ - 976, - 977 + 975, + 976 ] }, { - "teal": 971, + "teal": 874, "source": 8, "pc": [ - 978, - 979 + 977, + 978 ] }, { - "teal": 972, + "teal": 875, + "source": 8, + "pc": [ + 979, + 980 + ] + }, + { + "teal": 876, "source": 8, "pc": [ - 980, 981 ] }, { - "teal": 973, + "teal": 877, "source": 8, "pc": [ 982, @@ -3942,22 +3924,22 @@ ] }, { - "teal": 974, + "teal": 878, "source": 8, "pc": [ - 984 + 984, + 985 ] }, { - "teal": 975, + "teal": 879, "source": 8, "pc": [ - 985, 986 ] }, { - "teal": 979, + "teal": 880, "source": 8, "pc": [ 987, @@ -3965,38 +3947,44 @@ ] }, { - "teal": 980, + "teal": 881, + "source": 8, + "pc": [ + 989 + ] + }, + { + "teal": 882, "source": 8, "pc": [ - 989, 990 ] }, { - "teal": 984, + "teal": 883, "source": 8, "pc": [ 991, - 992 + 992, + 993 ] }, { - "teal": 985, + "teal": 891, "source": 8, "pc": [ - 993, 994 ] }, { - "teal": 988, + "teal": 892, "source": 8, "pc": [ 995 ] }, { - "teal": 989, + "teal": 893, "source": 8, "pc": [ 996, @@ -4004,52 +3992,46 @@ ] }, { - "teal": 992, - "source": 8, - "pc": [ - 998 - ] - }, - { - "teal": 1000, + "teal": 897, "source": 8, "pc": [ + 998, 999 ] }, { - "teal": 1001, + "teal": 898, "source": 8, "pc": [ - 1000 + 1000, + 1001 ] }, { - "teal": 1002, + "teal": 902, "source": 8, "pc": [ - 1001, - 1002 + 1002, + 1003 ] }, { - "teal": 1006, + "teal": 903, "source": 8, "pc": [ - 1003, - 1004 + 1004, + 1005 ] }, { - "teal": 1007, + "teal": 906, "source": 8, "pc": [ - 1005, 1006 ] }, { - "teal": 1011, + "teal": 907, "source": 8, "pc": [ 1007, @@ -4057,83 +4039,83 @@ ] }, { - "teal": 1012, + "teal": 910, "source": 8, "pc": [ - 1009, - 1010 + 1009 ] }, { - "teal": 1016, + "teal": 920, "source": 8, "pc": [ - 1011, - 1012 + 1010 ] }, { - "teal": 1017, + "teal": 921, "source": 8, "pc": [ - 1013, - 1014 + 1011 ] }, { - "teal": 1018, + "teal": 922, "source": 8, "pc": [ - 1015 + 1012, + 1013 ] }, { - "teal": 1019, + "teal": 926, "source": 8, "pc": [ - 1016, - 1017 + 1014, + 1015 ] }, { - "teal": 1020, + "teal": 927, "source": 8, "pc": [ - 1018, - 1019 + 1016, + 1017 ] }, { - "teal": 1021, + "teal": 931, "source": 8, "pc": [ - 1020 + 1018, + 1019 ] }, { - "teal": 1022, + "teal": 932, "source": 8, "pc": [ + 1020, 1021 ] }, { - "teal": 1023, + "teal": 936, "source": 8, "pc": [ - 1022, - 1023 + 1022 ] }, { - "teal": 1026, + "teal": 937, "source": 8, "pc": [ + 1023, 1024 ] }, { - "teal": 1027, + "teal": 941, "source": 8, "pc": [ 1025, @@ -4141,144 +4123,138 @@ ] }, { - "teal": 1030, - "source": 8, - "pc": [ - 1027 - ] - }, - { - "teal": 1031, + "teal": 942, "source": 8, "pc": [ + 1027, 1028 ] }, { - "teal": 1036, + "teal": 943, "source": 8, "pc": [ 1029, - 1030, - 1031 + 1030 ] }, { - "teal": 1037, + "teal": 946, "source": 8, "pc": [ - 1032 + 1031 ] }, { - "teal": 1040, + "teal": 947, "source": 8, "pc": [ - 1033, - 1034, - 1035 + 1032, + 1033 ] }, { - "teal": 1041, + "teal": 950, "source": 8, "pc": [ - 1036 + 1034 ] }, { - "teal": 1042, + "teal": 959, "source": 8, "pc": [ - 1037 + 1035 ] }, { - "teal": 1051, + "teal": 960, "source": 8, "pc": [ - 1038, - 1039, - 1040 + 1036 ] }, { - "teal": 1054, + "teal": 961, "source": 8, "pc": [ - 1041 + 1037, + 1038 ] }, { - "teal": 1058, + "teal": 965, "source": 8, "pc": [ - 1042, - 1043 + 1039, + 1040 ] }, { - "teal": 1059, + "teal": 966, "source": 8, "pc": [ - 1044 + 1041, + 1042 ] }, { - "teal": 1060, + "teal": 970, "source": 8, "pc": [ - 1045 + 1043, + 1044 ] }, { - "teal": 1061, + "teal": 971, "source": 8, "pc": [ - 1046, - 1047 + 1045, + 1046 ] }, { - "teal": 1071, + "teal": 972, "source": 8, "pc": [ + 1047, 1048 ] }, { - "teal": 1072, + "teal": 976, "source": 8, "pc": [ - 1049 + 1049, + 1050 ] }, { - "teal": 1073, + "teal": 977, "source": 8, "pc": [ - 1050, - 1051 + 1051, + 1052 ] }, { - "teal": 1077, + "teal": 978, "source": 8, "pc": [ - 1052, - 1053 + 1053, + 1054 ] }, { - "teal": 1078, + "teal": 981, "source": 8, "pc": [ - 1054, 1055 ] }, { - "teal": 1082, + "teal": 982, "source": 8, "pc": [ 1056, @@ -4286,61 +4262,67 @@ ] }, { - "teal": 1083, + "teal": 985, "source": 8, "pc": [ - 1058, - 1059 + 1058 ] }, { - "teal": 1084, + "teal": 990, "source": 8, "pc": [ + 1059, 1060 ] }, { - "teal": 1085, + "teal": 991, + "source": 8, + "pc": [ + 1061 + ] + }, + { + "teal": 992, "source": 8, "pc": [ - 1061, 1062 ] }, { - "teal": 1089, + "teal": 993, "source": 8, "pc": [ 1063, - 1064 + 1064, + 1065 ] }, { - "teal": 1090, + "teal": 1001, "source": 8, "pc": [ - 1065, 1066 ] }, { - "teal": 1091, + "teal": 1002, "source": 8, "pc": [ - 1067, - 1068 + 1067 ] }, { - "teal": 1092, + "teal": 1003, "source": 8, "pc": [ + 1068, 1069 ] }, { - "teal": 1093, + "teal": 1007, "source": 8, "pc": [ 1070, @@ -4348,7 +4330,7 @@ ] }, { - "teal": 1097, + "teal": 1008, "source": 8, "pc": [ 1072, @@ -4356,7 +4338,7 @@ ] }, { - "teal": 1098, + "teal": 1012, "source": 8, "pc": [ 1074, @@ -4364,7 +4346,7 @@ ] }, { - "teal": 1102, + "teal": 1013, "source": 8, "pc": [ 1076, @@ -4372,37 +4354,37 @@ ] }, { - "teal": 1103, + "teal": 1016, "source": 8, "pc": [ - 1078, - 1079 + 1078 ] }, { - "teal": 1104, + "teal": 1017, "source": 8, "pc": [ + 1079, 1080 ] }, { - "teal": 1105, + "teal": 1020, "source": 8, "pc": [ - 1081, - 1082 + 1081 ] }, { - "teal": 1108, + "teal": 1025, "source": 8, "pc": [ + 1082, 1083 ] }, { - "teal": 1109, + "teal": 1029, "source": 8, "pc": [ 1084, @@ -4410,99 +4392,99 @@ ] }, { - "teal": 1112, - "source": 8, - "pc": [ - 1086 - ] - }, - { - "teal": 1120, + "teal": 1032, "source": 8, "pc": [ + 1086, 1087 ] }, { - "teal": 1121, + "teal": 1033, "source": 8, "pc": [ 1088 ] }, { - "teal": 1122, + "teal": 1038, "source": 8, "pc": [ 1089, - 1090 + 1090, + 1091 ] }, { - "teal": 1126, + "teal": 1039, "source": 8, "pc": [ - 1091, 1092 ] }, { - "teal": 1127, + "teal": 1042, "source": 8, "pc": [ 1093, - 1094 + 1094, + 1095 ] }, { - "teal": 1131, + "teal": 1043, "source": 8, "pc": [ - 1095, 1096 ] }, { - "teal": 1132, + "teal": 1044, "source": 8, "pc": [ - 1097, - 1098 + 1097 ] }, { - "teal": 1136, + "teal": 1052, "source": 8, "pc": [ + 1098, 1099, 1100 ] }, { - "teal": 1137, + "teal": 1055, "source": 8, "pc": [ - 1101, - 1102 + 1101 ] }, { - "teal": 1138, + "teal": 1059, "source": 8, "pc": [ + 1102, 1103 ] }, { - "teal": 1139, + "teal": 1060, + "source": 8, + "pc": [ + 1104 + ] + }, + { + "teal": 1061, "source": 8, "pc": [ - 1104, 1105 ] }, { - "teal": 1140, + "teal": 1062, "source": 8, "pc": [ 1106, @@ -4510,21 +4492,21 @@ ] }, { - "teal": 1141, + "teal": 1072, "source": 8, "pc": [ 1108 ] }, { - "teal": 1142, + "teal": 1073, "source": 8, "pc": [ 1109 ] }, { - "teal": 1143, + "teal": 1074, "source": 8, "pc": [ 1110, @@ -4532,202 +4514,178 @@ ] }, { - "teal": 1146, - "source": 8, - "pc": [ - 1112 - ] - }, - { - "teal": 1147, + "teal": 1078, "source": 8, "pc": [ - 1113, - 1114 + 1112, + 1113 ] }, { - "teal": 1150, + "teal": 1079, "source": 8, "pc": [ + 1114, 1115 ] }, { - "teal": 1151, - "source": 8, - "pc": [ - 1116 - ] - }, - { - "teal": 1156, + "teal": 1083, "source": 8, "pc": [ + 1116, 1117 ] }, { - "teal": 1159, + "teal": 1084, "source": 8, "pc": [ 1118, - 1119, - 1120 + 1119 ] }, { - "teal": 1160, + "teal": 1088, "source": 8, "pc": [ + 1120, 1121 ] }, { - "teal": 1161, - "source": 8, - "pc": [ - 1122 - ] - }, - { - "teal": 1162, + "teal": 1089, "source": 8, "pc": [ + 1122, 1123 ] }, { - "teal": 1163, + "teal": 1090, "source": 8, "pc": [ - 1124 + 1124, + 1125 ] }, { - "teal": 1164, + "teal": 1091, "source": 8, "pc": [ - 1125 + 1126 ] }, { - "teal": 1167, + "teal": 1092, "source": 8, "pc": [ - 1126, 1127, 1128 ] }, { - "teal": 1168, - "source": 8, - "pc": [ - 1129 - ] - }, - { - "teal": 1169, + "teal": 1096, "source": 8, "pc": [ + 1129, 1130 ] }, { - "teal": 1170, + "teal": 1097, "source": 8, "pc": [ - 1131 + 1131, + 1132 ] }, { - "teal": 1171, + "teal": 1101, "source": 8, "pc": [ - 1132 + 1133, + 1134 ] }, { - "teal": 1181, + "teal": 1102, "source": 8, "pc": [ - 1133, - 1134, - 1135 + 1135, + 1136 ] }, { - "teal": 1185, + "teal": 1105, "source": 8, "pc": [ - 1136, 1137 ] }, { - "teal": 1186, + "teal": 1106, "source": 8, "pc": [ - 1138 + 1138, + 1139 ] }, { - "teal": 1187, + "teal": 1109, "source": 8, "pc": [ - 1139 + 1140 ] }, { - "teal": 1188, + "teal": 1117, "source": 8, "pc": [ - 1140 + 1141 ] }, { - "teal": 1189, + "teal": 1118, "source": 8, "pc": [ - 1141, - 1142, - 1143 + 1142 ] }, { - "teal": 1190, + "teal": 1119, "source": 8, "pc": [ - 1144, - 1145 + 1143, + 1144 ] }, { - "teal": 1191, + "teal": 1123, "source": 8, "pc": [ + 1145, 1146 ] }, { - "teal": 1192, + "teal": 1124, "source": 8, "pc": [ - 1147 + 1147, + 1148 ] }, { - "teal": 1193, + "teal": 1128, "source": 8, "pc": [ - 1148, 1149, 1150 ] }, { - "teal": 1196, + "teal": 1129, "source": 8, "pc": [ 1151, @@ -4735,75 +4693,75 @@ ] }, { - "teal": 1199, + "teal": 1133, "source": 8, "pc": [ - 1153 + 1153, + 1154 ] }, { - "teal": 1204, + "teal": 1134, "source": 8, "pc": [ - 1154, 1155, 1156 ] }, { - "teal": 1205, + "teal": 1135, "source": 8, "pc": [ 1157 ] }, { - "teal": 1206, + "teal": 1136, "source": 8, "pc": [ - 1158 + 1158, + 1159 ] }, { - "teal": 1212, + "teal": 1137, "source": 8, "pc": [ - 1159, 1160, 1161 ] }, { - "teal": 1215, + "teal": 1138, "source": 8, "pc": [ 1162 ] }, { - "teal": 1219, + "teal": 1139, "source": 8, "pc": [ - 1163, - 1164 + 1163 ] }, { - "teal": 1220, + "teal": 1140, "source": 8, "pc": [ + 1164, 1165 ] }, { - "teal": 1221, + "teal": 1143, "source": 8, "pc": [ 1166 ] }, { - "teal": 1222, + "teal": 1144, "source": 8, "pc": [ 1167, @@ -4811,158 +4769,152 @@ ] }, { - "teal": 1226, + "teal": 1147, "source": 8, "pc": [ - 1169, - 1170 + 1169 ] }, { - "teal": 1227, + "teal": 1148, "source": 8, "pc": [ - 1171, - 1172 + 1170 ] }, { - "teal": 1228, + "teal": 1153, "source": 8, "pc": [ + 1171, + 1172, 1173 ] }, { - "teal": 1229, + "teal": 1154, "source": 8, "pc": [ - 1174, - 1175 + 1174 ] }, { - "teal": 1230, + "teal": 1157, "source": 8, "pc": [ + 1175, 1176, 1177 ] }, { - "teal": 1231, + "teal": 1158, "source": 8, "pc": [ 1178 ] }, { - "teal": 1232, + "teal": 1159, "source": 8, "pc": [ 1179 ] }, { - "teal": 1233, - "source": 8, - "pc": [ - 1180 - ] - }, - { - "teal": 1234, + "teal": 1168, "source": 8, "pc": [ - 1181 + 1180, + 1181, + 1182 ] }, { - "teal": 1235, + "teal": 1171, "source": 8, "pc": [ - 1182 + 1183 ] }, { - "teal": 1243, + "teal": 1175, "source": 8, "pc": [ - 1183 + 1184, + 1185 ] }, { - "teal": 1244, + "teal": 1176, "source": 8, "pc": [ - 1184 + 1186 ] }, { - "teal": 1245, + "teal": 1177, "source": 8, "pc": [ - 1185, - 1186 + 1187 ] }, { - "teal": 1249, + "teal": 1178, "source": 8, "pc": [ - 1187, - 1188 + 1188, + 1189 ] }, { - "teal": 1250, + "teal": 1188, "source": 8, "pc": [ - 1189, 1190 ] }, { - "teal": 1254, + "teal": 1189, "source": 8, "pc": [ - 1191, - 1192 + 1191 ] }, { - "teal": 1255, + "teal": 1190, "source": 8, "pc": [ - 1193, - 1194 + 1192, + 1193 ] }, { - "teal": 1259, + "teal": 1194, "source": 8, "pc": [ - 1195, - 1196 + 1194, + 1195 ] }, { - "teal": 1260, + "teal": 1195, "source": 8, "pc": [ - 1197, - 1198 + 1196, + 1197 ] }, { - "teal": 1261, + "teal": 1199, "source": 8, "pc": [ + 1198, 1199 ] }, { - "teal": 1262, + "teal": 1200, "source": 8, "pc": [ 1200, @@ -4970,44 +4922,38 @@ ] }, { - "teal": 1263, + "teal": 1201, "source": 8, "pc": [ - 1202, - 1203 + 1202 ] }, { - "teal": 1264, + "teal": 1202, "source": 8, "pc": [ + 1203, 1204 ] }, { - "teal": 1265, - "source": 8, - "pc": [ - 1205 - ] - }, - { - "teal": 1266, + "teal": 1206, "source": 8, "pc": [ - 1206, - 1207 + 1205, + 1206 ] }, { - "teal": 1269, + "teal": 1207, "source": 8, "pc": [ + 1207, 1208 ] }, { - "teal": 1270, + "teal": 1208, "source": 8, "pc": [ 1209, @@ -5015,314 +4961,996 @@ ] }, { - "teal": 1273, + "teal": 1209, "source": 8, "pc": [ 1211 ] }, { - "teal": 1274, + "teal": 1210, "source": 8, "pc": [ - 1212 + 1212, + 1213 ] }, { - "teal": 1279, - "source": 4, + "teal": 1214, + "source": 8, "pc": [ - 1213, 1214, 1215 ] }, { - "teal": 1280, - "source": 4, + "teal": 1215, + "source": 8, "pc": [ - 1216 + 1216, + 1217 ] }, { - "teal": 1281, - "source": 4, + "teal": 1219, + "source": 8, "pc": [ - 1217 + 1218, + 1219 ] }, { - "teal": 1285, - "source": 4, + "teal": 1220, + "source": 8, "pc": [ - 1218, - 1219, - 1220 + 1220, + 1221 ] }, { - "teal": 1289, - "source": 5, + "teal": 1221, + "source": 8, "pc": [ - 1221, 1222 ] }, { - "teal": 1290, - "source": 5, + "teal": 1222, + "source": 8, "pc": [ 1223, - 1224, + 1224 + ] + }, + { + "teal": 1225, + "source": 8, + "pc": [ 1225 ] }, { - "teal": 1291, - "source": 5, + "teal": 1226, + "source": 8, "pc": [ 1226, 1227 ] }, { - "teal": 1292, - "source": 5, + "teal": 1229, + "source": 8, "pc": [ 1228 ] }, { - "teal": 1293, - "source": 5, + "teal": 1237, + "source": 8, "pc": [ 1229 ] }, { - "teal": 1294, - "source": 5, + "teal": 1238, + "source": 8, "pc": [ 1230 ] }, { - "teal": 1295, - "source": 4, + "teal": 1239, + "source": 8, "pc": [ - 1231 + 1231, + 1232 ] }, { - "teal": 1298, - "source": 3, + "teal": 1243, + "source": 8, "pc": [ - 1232, 1233, - 1234, - 1235, - 1236, - 1237 + 1234 ] }, { - "teal": 1299, - "source": 3, + "teal": 1244, + "source": 8, "pc": [ - 1238, - 1239, - 1240 + 1235, + 1236 ] }, { - "teal": 1300, - "source": 3, + "teal": 1248, + "source": 8, "pc": [ - 1241, - 1242, - 1243, - 1244 + 1237, + 1238 ] }, { - "teal": 1301, - "source": 3, - "pc": [ + "teal": 1249, + "source": 8, + "pc": [ + 1239, + 1240 + ] + }, + { + "teal": 1253, + "source": 8, + "pc": [ + 1241, + 1242 + ] + }, + { + "teal": 1254, + "source": 8, + "pc": [ + 1243, + 1244 + ] + }, + { + "teal": 1255, + "source": 8, + "pc": [ 1245 ] }, { - "teal": 1304, - "source": 3, + "teal": 1256, + "source": 8, "pc": [ 1246, - 1247, + 1247 + ] + }, + { + "teal": 1257, + "source": 8, + "pc": [ 1248, - 1249, - 1250, + 1249 + ] + }, + { + "teal": 1258, + "source": 8, + "pc": [ + 1250 + ] + }, + { + "teal": 1259, + "source": 8, + "pc": [ 1251 ] }, { - "teal": 1305, - "source": 3, + "teal": 1260, + "source": 8, "pc": [ 1252, - 1253, - 1254, + 1253 + ] + }, + { + "teal": 1263, + "source": 8, + "pc": [ + 1254 + ] + }, + { + "teal": 1264, + "source": 8, + "pc": [ 1255, - 1256, + 1256 + ] + }, + { + "teal": 1267, + "source": 8, + "pc": [ 1257 ] }, { - "teal": 1306, - "source": 3, + "teal": 1268, + "source": 8, + "pc": [ + 1258 + ] + }, + { + "teal": 1273, + "source": 8, + "pc": [ + 1259 + ] + }, + { + "teal": 1276, + "source": 8, "pc": [ - 1258, - 1259, 1260, 1261, - 1262, + 1262 + ] + }, + { + "teal": 1277, + "source": 8, + "pc": [ 1263 ] }, { - "teal": 1307, - "source": 3, + "teal": 1278, + "source": 8, + "pc": [ + 1264 + ] + }, + { + "teal": 1279, + "source": 8, + "pc": [ + 1265 + ] + }, + { + "teal": 1280, + "source": 8, + "pc": [ + 1266 + ] + }, + { + "teal": 1281, + "source": 8, + "pc": [ + 1267 + ] + }, + { + "teal": 1284, + "source": 8, "pc": [ - 1264, - 1265, - 1266, - 1267, 1268, - 1269 + 1269, + 1270 ] }, { - "teal": 1308, - "source": 3, + "teal": 1285, + "source": 8, "pc": [ - 1270, - 1271, - 1272, - 1273, - 1274, - 1275 + 1271 ] }, { - "teal": 1309, - "source": 3, + "teal": 1286, + "source": 8, + "pc": [ + 1272 + ] + }, + { + "teal": 1287, + "source": 8, + "pc": [ + 1273 + ] + }, + { + "teal": 1288, + "source": 8, "pc": [ + 1274 + ] + }, + { + "teal": 1298, + "source": 8, + "pc": [ + 1275, 1276, - 1277, + 1277 + ] + }, + { + "teal": 1302, + "source": 8, + "pc": [ 1278, - 1279, - 1280, + 1279 + ] + }, + { + "teal": 1303, + "source": 8, + "pc": [ + 1280 + ] + }, + { + "teal": 1304, + "source": 8, + "pc": [ 1281 ] }, { - "teal": 1310, - "source": 3, + "teal": 1305, + "source": 8, + "pc": [ + 1282 + ] + }, + { + "teal": 1306, + "source": 8, "pc": [ - 1282, 1283, 1284, - 1285, + 1285 + ] + }, + { + "teal": 1307, + "source": 8, + "pc": [ 1286, 1287 ] }, { - "teal": 1311, - "source": 3, + "teal": 1308, + "source": 8, + "pc": [ + 1288 + ] + }, + { + "teal": 1309, + "source": 8, + "pc": [ + 1289 + ] + }, + { + "teal": 1310, + "source": 8, "pc": [ - 1288, - 1289, 1290, 1291, - 1292, - 1293 + 1292 ] }, { - "teal": 1312, - "source": 3, + "teal": 1313, + "source": 8, "pc": [ - 1294, - 1295, - 1296 + 1293, + 1294 ] }, { - "teal": 1313, - "source": 3, + "teal": 1316, + "source": 8, + "pc": [ + 1295 + ] + }, + { + "teal": 1321, + "source": 8, "pc": [ + 1296, 1297, - 1298, - 1299, - 1300, + 1298 + ] + }, + { + "teal": 1322, + "source": 8, + "pc": [ + 1299 + ] + }, + { + "teal": 1323, + "source": 8, + "pc": [ + 1300 + ] + }, + { + "teal": 1329, + "source": 8, + "pc": [ 1301, 1302, - 1303, - 1304, + 1303 + ] + }, + { + "teal": 1332, + "source": 8, + "pc": [ + 1304 + ] + }, + { + "teal": 1336, + "source": 8, + "pc": [ 1305, - 1306, - 1307, - 1308, + 1306 + ] + }, + { + "teal": 1337, + "source": 8, + "pc": [ + 1307 + ] + }, + { + "teal": 1338, + "source": 8, + "pc": [ + 1308 + ] + }, + { + "teal": 1339, + "source": 8, + "pc": [ 1309, - 1310, + 1310 + ] + }, + { + "teal": 1343, + "source": 8, + "pc": [ 1311, - 1312, + 1312 + ] + }, + { + "teal": 1344, + "source": 8, + "pc": [ 1313, 1314 ] }, { - "teal": 1314, - "source": 3, + "teal": 1345, + "source": 8, "pc": [ 1315 ] }, { - "teal": 1317, - "source": 3, + "teal": 1346, + "source": 8, "pc": [ 1316, - 1317, + 1317 + ] + }, + { + "teal": 1347, + "source": 8, + "pc": [ 1318, - 1319, - 1320, + 1319 + ] + }, + { + "teal": 1348, + "source": 8, + "pc": [ + 1320 + ] + }, + { + "teal": 1349, + "source": 8, + "pc": [ 1321 ] }, { - "teal": 1318, - "source": 3, + "teal": 1350, + "source": 8, + "pc": [ + 1322 + ] + }, + { + "teal": 1351, + "source": 8, + "pc": [ + 1323 + ] + }, + { + "teal": 1352, + "source": 8, "pc": [ - 1322, - 1323, 1324 ] }, { - "teal": 1319, - "source": 3, + "teal": 1360, + "source": 8, + "pc": [ + 1325 + ] + }, + { + "teal": 1361, + "source": 8, + "pc": [ + 1326 + ] + }, + { + "teal": 1362, + "source": 8, "pc": [ - 1325, - 1326, 1327, 1328 ] }, { - "teal": 1320, + "teal": 1366, + "source": 8, + "pc": [ + 1329, + 1330 + ] + }, + { + "teal": 1367, + "source": 8, + "pc": [ + 1331, + 1332 + ] + }, + { + "teal": 1371, + "source": 8, + "pc": [ + 1333, + 1334 + ] + }, + { + "teal": 1372, + "source": 8, + "pc": [ + 1335, + 1336 + ] + }, + { + "teal": 1376, + "source": 8, + "pc": [ + 1337, + 1338 + ] + }, + { + "teal": 1377, + "source": 8, + "pc": [ + 1339, + 1340 + ] + }, + { + "teal": 1378, + "source": 8, + "pc": [ + 1341 + ] + }, + { + "teal": 1379, + "source": 8, + "pc": [ + 1342, + 1343 + ] + }, + { + "teal": 1380, + "source": 8, + "pc": [ + 1344, + 1345 + ] + }, + { + "teal": 1381, + "source": 8, + "pc": [ + 1346 + ] + }, + { + "teal": 1382, + "source": 8, + "pc": [ + 1347 + ] + }, + { + "teal": 1383, + "source": 8, + "pc": [ + 1348, + 1349 + ] + }, + { + "teal": 1386, + "source": 8, + "pc": [ + 1350 + ] + }, + { + "teal": 1387, + "source": 8, + "pc": [ + 1351, + 1352 + ] + }, + { + "teal": 1390, + "source": 8, + "pc": [ + 1353 + ] + }, + { + "teal": 1391, + "source": 8, + "pc": [ + 1354 + ] + }, + { + "teal": 1396, + "source": 4, + "pc": [ + 1355, + 1356, + 1357 + ] + }, + { + "teal": 1397, + "source": 4, + "pc": [ + 1358 + ] + }, + { + "teal": 1398, + "source": 4, + "pc": [ + 1359 + ] + }, + { + "teal": 1402, + "source": 4, + "pc": [ + 1360, + 1361, + 1362 + ] + }, + { + "teal": 1406, + "source": 5, + "pc": [ + 1363, + 1364 + ] + }, + { + "teal": 1407, + "source": 5, + "pc": [ + 1365, + 1366, + 1367 + ] + }, + { + "teal": 1408, + "source": 5, + "pc": [ + 1368, + 1369 + ] + }, + { + "teal": 1409, + "source": 5, + "pc": [ + 1370 + ] + }, + { + "teal": 1410, + "source": 5, + "pc": [ + 1371 + ] + }, + { + "teal": 1411, + "source": 5, + "pc": [ + 1372 + ] + }, + { + "teal": 1412, + "source": 4, + "pc": [ + 1373 + ] + }, + { + "teal": 1415, + "source": 3, + "pc": [ + 1374, + 1375, + 1376, + 1377, + 1378, + 1379 + ] + }, + { + "teal": 1416, + "source": 3, + "pc": [ + 1380, + 1381, + 1382 + ] + }, + { + "teal": 1417, + "source": 3, + "pc": [ + 1383, + 1384, + 1385, + 1386 + ] + }, + { + "teal": 1418, + "source": 3, + "pc": [ + 1387 + ] + }, + { + "teal": 1421, + "source": 3, + "pc": [ + 1388, + 1389, + 1390, + 1391, + 1392, + 1393 + ] + }, + { + "teal": 1422, + "source": 3, + "pc": [ + 1394, + 1395, + 1396, + 1397, + 1398, + 1399 + ] + }, + { + "teal": 1423, + "source": 3, + "pc": [ + 1400, + 1401, + 1402, + 1403, + 1404, + 1405 + ] + }, + { + "teal": 1424, + "source": 3, + "pc": [ + 1406, + 1407, + 1408, + 1409, + 1410, + 1411 + ] + }, + { + "teal": 1425, + "source": 3, + "pc": [ + 1412, + 1413, + 1414, + 1415, + 1416, + 1417 + ] + }, + { + "teal": 1426, + "source": 3, + "pc": [ + 1418, + 1419, + 1420, + 1421, + 1422, + 1423 + ] + }, + { + "teal": 1427, + "source": 3, + "pc": [ + 1424, + 1425, + 1426, + 1427, + 1428, + 1429 + ] + }, + { + "teal": 1428, + "source": 3, + "pc": [ + 1430, + 1431, + 1432, + 1433, + 1434, + 1435 + ] + }, + { + "teal": 1429, + "source": 3, + "pc": [ + 1436, + 1437, + 1438 + ] + }, + { + "teal": 1430, + "source": 3, + "pc": [ + 1439, + 1440, + 1441, + 1442, + 1443, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1455, + 1456 + ] + }, + { + "teal": 1431, + "source": 3, + "pc": [ + 1457 + ] + }, + { + "teal": 1434, + "source": 3, + "pc": [ + 1458, + 1459, + 1460, + 1461, + 1462, + 1463 + ] + }, + { + "teal": 1435, + "source": 3, + "pc": [ + 1464, + 1465, + 1466 + ] + }, + { + "teal": 1436, + "source": 3, + "pc": [ + 1467, + 1468, + 1469, + 1470 + ] + }, + { + "teal": 1437, "source": 3, "pc": [ - 1329 + 1471 ] } ] \ No newline at end of file diff --git a/assets/arc-0059/contracts/clients/Arc59Client.ts b/assets/arc-0059/contracts/clients/Arc59Client.ts index 1fa2a5c5f..0892056f2 100644 --- a/assets/arc-0059/contracts/clients/Arc59Client.ts +++ b/assets/arc-0059/contracts/clients/Arc59Client.ts @@ -44,7 +44,7 @@ export const APP_SPEC: AppSpec = { "no_op": "CALL" } }, - "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)": { + "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)": { "call_config": { "no_op": "CALL" } @@ -103,7 +103,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NDkKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjIKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY1CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCiphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg1CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODYKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NwoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NwoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTAxCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDUKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA2CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDcKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNAoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE4CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTkKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzAKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzIKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM0CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNgoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQzCgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDYKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTYxCgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTYyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MwoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY0CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjUKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2OAoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzAKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcxCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWY4X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NQoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OAoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc5CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmOV9lbmQ6CgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg5CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTAKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkwCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTMKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTYKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAzCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTMKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMgoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUzCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NQoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjYxCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjYyCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODEKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxMl9lbmQ6CgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTNfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE1CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTYKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjMKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNAoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { @@ -162,7 +162,7 @@ export const APP_SPEC: AppSpec = { } ], "returns": { - "type": "(uint64,uint64,bool,bool,uint64)", + "type": "(uint64,uint64,bool,bool,uint64,uint64)", "desc": "Returns the following information for sending an asset:The number of itxns required, the MBR required, whether the router is opted in, whether the receiver is opted in,and how much ALGO the receiver would need to claim the asset" } }, @@ -338,7 +338,7 @@ export type Arc59 = { */ returns: string }> - & Record<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)' | 'arc59_getSendAssetInfo', { + & Record<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)' | 'arc59_getSendAssetInfo', { argsObj: { /** * The address to send the asset to @@ -353,7 +353,7 @@ export type Arc59 = { /** * Returns the following information for sending an asset:The number of itxns required, the MBR required, whether the router is opted in, whether the receiver is opted in,and how much ALGO the receiver would need to claim the asset */ - returns: [bigint, bigint, boolean, boolean, bigint] + returns: [bigint, bigint, boolean, boolean, bigint, bigint] }> & Record<'arc59_sendAsset(axfer,address,uint64)address' | 'arc59_sendAsset', { argsObj: { @@ -520,15 +520,15 @@ export abstract class Arc59CallFactory { } } /** - * Constructs a no op call for the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64) ABI method + * Constructs a no op call for the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64) ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ - static arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + static arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { - method: 'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)' as const, + method: 'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)' as const, methodArgs: Array.isArray(args) ? args : [args.receiver, args.asset], ...params, } @@ -739,13 +739,13 @@ export class Arc59Client { } /** - * Calls the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64) ABI method. + * Calls the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64) ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call: Returns the following information for sending an asset:The number of itxns required, the MBR required, whether the router is opted in, whether the receiver is opted in,and how much ALGO the receiver would need to claim the asset */ - public arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + public arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(Arc59CallFactory.arc59GetSendAssetInfo(args, params)) } @@ -830,7 +830,7 @@ export class Arc59Client { resultMappers.push(undefined) return this }, - arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { + arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.arc59GetSendAssetInfo(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this @@ -916,13 +916,13 @@ export type Arc59Composer = { arc59GetOrCreateInbox(args: MethodArgs<'arc59_getOrCreateInbox(address)address'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): Arc59Composer<[...TReturns, MethodReturn<'arc59_getOrCreateInbox(address)address'>]> /** - * Calls the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64) ABI method. + * Calls the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64) ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): Arc59Composer<[...TReturns, MethodReturn<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)'>]> + arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): Arc59Composer<[...TReturns, MethodReturn<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)'>]> /** * Calls the arc59_sendAsset(axfer,address,uint64)address ABI method. diff --git a/assets/arc-0059/contracts/clients/ControlledAddressClient.ts b/assets/arc-0059/contracts/clients/ControlledAddressClient.ts index 2de485d18..7375bb772 100644 --- a/assets/arc-0059/contracts/clients/ControlledAddressClient.ts +++ b/assets/arc-0059/contracts/clients/ControlledAddressClient.ts @@ -63,7 +63,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9EZWxldGVBcHBsaWNhdGlvbgoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gbmV3KClhZGRyZXNzCiphYmlfcm91dGVfbmV3OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG5ldygpYWRkcmVzcwoJY2FsbHN1YiBuZXcKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBuZXcoKTogQWRkcmVzcwpuZXc6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgcmVrZXlUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjYKCS8vIHJla2V5VG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWtleVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5CgkvLyByZXR1cm4gdGhpcy5hcHAuYWRkcmVzczsKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglyZXRzdWIKCipjcmVhdGVfRGVsZXRlQXBwbGljYXRpb246CgltZXRob2QgIm5ldygpYWRkcmVzcyIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfbmV3CgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9EZWxldGVBcHBsaWNhdGlvbgoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gbmV3KClhZGRyZXNzCiphYmlfcm91dGVfbmV3OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIG5ldygpYWRkcmVzcwoJY2FsbHN1YiBuZXcKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBuZXcoKTogQWRkcmVzcwpuZXc6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgcmVrZXlUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgKCS8vIHJla2V5VG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWtleVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMxCgkvLyByZXR1cm4gdGhpcy5hcHAuYWRkcmVzczsKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglyZXRzdWIKCipjcmVhdGVfRGVsZXRlQXBwbGljYXRpb246CgltZXRob2QgIm5ldygpYWRkcmVzcyIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfbmV3CgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/clients/MutableARC59Client.ts b/assets/arc-0059/contracts/clients/MutableARC59Client.ts index dda37c034..1b5c54965 100644 --- a/assets/arc-0059/contracts/clients/MutableARC59Client.ts +++ b/assets/arc-0059/contracts/clients/MutableARC59Client.ts @@ -44,7 +44,7 @@ export const APP_SPEC: AppSpec = { "no_op": "CALL" } }, - "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)": { + "arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)": { "call_config": { "no_op": "CALL" } @@ -108,7 +108,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo0OAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTAKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NQoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY2CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoJY2FsbHN1YiBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhyZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IEFzc2V0SUQpOiBTZW5kQXNzZXRJbmZvCi8vCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXNzZXQgVGhlIGFzc2V0IHRvIHNlbmQKLy8KLy8gQHJldHVybnMgUmV0dXJucyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZvciBzZW5kaW5nIGFuIGFzc2V0OgovLyBUaGUgbnVtYmVyIG9mIGl0eG5zIHJlcXVpcmVkLCB0aGUgTUJSIHJlcXVpcmVkLCB3aGV0aGVyIHRoZSByb3V0ZXIgaXMgb3B0ZWQgaW4sIHdoZXRoZXIgdGhlIHJlY2VpdmVyIGlzIG9wdGVkIGluLAovLyBhbmQgaG93IG11Y2ggQUxHTyB0aGUgcmVjZWl2ZXIgd291bGQgbmVlZCB0byBjbGFpbSB0aGUgYXNzZXQKYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDYKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NQoJLy8gcm91dGVyT3B0ZWRJbiA9IHRoaXMuYXBwLmFkZHJlc3MuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg2CgkvLyByZWNlaXZlck9wdGVkSW4gPSByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIGluZm86IFNlbmRBc3NldEluZm8gPSB7CgkvLyAgICAgICBpdHhuczogMSwKCS8vICAgICAgIG1icjogMCwKCS8vICAgICAgIHJvdXRlck9wdGVkSW46IHJvdXRlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlck9wdGVkSW46IHJlY2VpdmVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltOiAwLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJlY2VpdmVyT3B0ZWRJbgoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTcKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA1CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA3CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTQKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExOAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE5CgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMwCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMyCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNAoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzYKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MwoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA2CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjMKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2NAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY1CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjgKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcwCgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmOF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzUKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MQoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODMKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjlfZW5kOgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODgKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkwCgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MAoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM3CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM4CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NgoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTBfZW5kCgoqdGVybmFyeTBfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzkKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgxCgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTJfZW5kOgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDcKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEzX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMwoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNQoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjQKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { @@ -167,7 +167,7 @@ export const APP_SPEC: AppSpec = { } ], "returns": { - "type": "(uint64,uint64,bool,bool,uint64)", + "type": "(uint64,uint64,bool,bool,uint64,uint64)", "desc": "Returns the following information for sending an asset:The number of itxns required, the MBR required, whether the router is opted in, whether the receiver is opted in,and how much ALGO the receiver would need to claim the asset" } }, @@ -350,7 +350,7 @@ export type MutableArc59 = { */ returns: string }> - & Record<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)' | 'arc59_getSendAssetInfo', { + & Record<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)' | 'arc59_getSendAssetInfo', { argsObj: { /** * The address to send the asset to @@ -365,7 +365,7 @@ export type MutableArc59 = { /** * Returns the following information for sending an asset:The number of itxns required, the MBR required, whether the router is opted in, whether the receiver is opted in,and how much ALGO the receiver would need to claim the asset */ - returns: [bigint, bigint, boolean, boolean, bigint] + returns: [bigint, bigint, boolean, boolean, bigint, bigint] }> & Record<'arc59_sendAsset(axfer,address,uint64)address' | 'arc59_sendAsset', { argsObj: { @@ -573,15 +573,15 @@ export abstract class MutableArc59CallFactory { } } /** - * Constructs a no op call for the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64) ABI method + * Constructs a no op call for the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64) ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ - static arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + static arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { - method: 'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)' as const, + method: 'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)' as const, methodArgs: Array.isArray(args) ? args : [args.receiver, args.asset], ...params, } @@ -813,13 +813,13 @@ export class MutableArc59Client { } /** - * Calls the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64) ABI method. + * Calls the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64) ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call: Returns the following information for sending an asset:The number of itxns required, the MBR required, whether the router is opted in, whether the receiver is opted in,and how much ALGO the receiver would need to claim the asset */ - public arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + public arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(MutableArc59CallFactory.arc59GetSendAssetInfo(args, params)) } @@ -904,7 +904,7 @@ export class MutableArc59Client { resultMappers.push(undefined) return this }, - arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { + arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.arc59GetSendAssetInfo(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this @@ -1000,13 +1000,13 @@ export type MutableArc59Composer = { arc59GetOrCreateInbox(args: MethodArgs<'arc59_getOrCreateInbox(address)address'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MutableArc59Composer<[...TReturns, MethodReturn<'arc59_getOrCreateInbox(address)address'>]> /** - * Calls the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64) ABI method. + * Calls the arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64) ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MutableArc59Composer<[...TReturns, MethodReturn<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64)'>]> + arc59GetSendAssetInfo(args: MethodArgs<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MutableArc59Composer<[...TReturns, MethodReturn<'arc59_getSendAssetInfo(address,uint64)(uint64,uint64,bool,bool,uint64,uint64)'>]> /** * Calls the arc59_sendAsset(axfer,address,uint64)address ABI method. diff --git a/assets/arc-0059/deploy_scripts/mutable_testnet.ts b/assets/arc-0059/deploy_scripts/mutable_testnet.ts index 388863b80..372623e7d 100644 --- a/assets/arc-0059/deploy_scripts/mutable_testnet.ts +++ b/assets/arc-0059/deploy_scripts/mutable_testnet.ts @@ -93,7 +93,10 @@ async function deploy() { }); const result = await composer - .arc59SendAsset({ axfer, receiver }, { sendParams: { fee: algokit.microAlgos(1000 + 1000 * Number(itxns)) } }) + .arc59SendAsset( + { axfer, receiver, additionalReceiverFunds: 0 }, + { sendParams: { fee: algokit.microAlgos(1000 + 1000 * Number(itxns)) } } + ) .execute(); console.debug(`Sent asset ${assetId} to ${receiver}'s inbox (${result.returns[0]})`); diff --git a/assets/arc-0059/package-lock.json b/assets/arc-0059/package-lock.json index 6ab7f0d87..3d7ec4c84 100644 --- a/assets/arc-0059/package-lock.json +++ b/assets/arc-0059/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@algorandfoundation/algokit-utils": "^6.0.2", - "@algorandfoundation/tealscript": "^0.90.3", + "@algorandfoundation/tealscript": "0.90.4", "algosdk": "^2.7.0" }, "devDependencies": { @@ -89,9 +89,9 @@ } }, "node_modules/@algorandfoundation/tealscript": { - "version": "0.90.3", - "resolved": "https://registry.npmjs.org/@algorandfoundation/tealscript/-/tealscript-0.90.3.tgz", - "integrity": "sha512-D3s/YQ0xZ78InsN5Fci/jq3iPA0twgKabGd0GhbGi7BTxoe6rcgHJdLZhOHTlQCcqCJMhjVStnK55mwdV2CaKQ==", + "version": "0.90.4", + "resolved": "https://registry.npmjs.org/@algorandfoundation/tealscript/-/tealscript-0.90.4.tgz", + "integrity": "sha512-gRZkJ5UzimbcbT8sOuQvur+/FtHSxID/UdOr7MSBXV/mmVVUcYzmAOPyKV2XeXAavxpvpQWVFM5Xr7JgQgOd8w==", "dependencies": { "@microsoft/tsdoc": "^0.14.2", "@playwright/test": "^1.40.1", @@ -890,9 +890,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -1439,17 +1439,17 @@ } }, "node_modules/@playwright/test": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.1.tgz", - "integrity": "sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==", + "version": "1.48.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.2.tgz", + "integrity": "sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==", "dependencies": { - "playwright": "1.43.1" + "playwright": "1.48.2" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@sinclair/typebox": { @@ -3578,9 +3578,9 @@ } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -3724,22 +3724,20 @@ } }, "node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -3765,9 +3763,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4421,15 +4419,12 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -5308,9 +5303,9 @@ } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { "node": ">=16 || 14 >=14.17" } @@ -5620,6 +5615,11 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -5718,27 +5718,24 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/path-type": { "version": "4.0.0", @@ -5840,31 +5837,31 @@ } }, "node_modules/playwright": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz", - "integrity": "sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==", + "version": "1.48.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.2.tgz", + "integrity": "sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==", "dependencies": { - "playwright-core": "1.43.1" + "playwright-core": "1.48.2" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" }, "optionalDependencies": { "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz", - "integrity": "sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==", + "version": "1.48.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.2.tgz", + "integrity": "sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/playwright/node_modules/fsevents": { @@ -6458,9 +6455,9 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -7148,9 +7145,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, diff --git a/assets/arc-0059/package.json b/assets/arc-0059/package.json index cb45115f8..113ce17e5 100644 --- a/assets/arc-0059/package.json +++ b/assets/arc-0059/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@algorandfoundation/algokit-utils": "^6.0.2", - "@algorandfoundation/tealscript": "^0.90.3", + "@algorandfoundation/tealscript": "0.90.4", "algosdk": "^2.7.0" }, "devDependencies": {